Observed since 20 Oct, 22:48 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Agent Ops (AO) - high-performance JSONL issue/event store
AO is a development operations system for humans and autonomous agents. It combines event-sourced issue tracking, deterministic automation, worktree-first execution, and a web Kanban UI into one workflow.
AO is designed for teams that want to:
In short: project memory + execution workflow + agent ergonomics.
Kanban BoardBranch WorktreesNo special workflow requirements (default)Separate worktree requiredStacked diffs preferredStacked diffs + separate worktreeEditor (config) automatically.ao stack push works with both GitHub and Gitea via a unified provider layer.docker-compose.yml for integration testing.CODE_HOST_TARGET=gitea and CODE_HOST_TOKEN to switch providers.gh CLI.version defaults from .version when omitted..version must match pyproject.toml project.version.ao version commands for synchronized version updates.Use this for triage, assignment, and status/priority movement.
Use this for isolated branch workspaces, launcher actions, and git worktree operations.
uv tool install agent-ops-cli
ao --version
git clone <repo-url>
cd agent-ops
uv sync
uv tool install .
ao --version
ao ...examples below assume AO is installed as a tool. Useuv run ...for development commands (tests/lint/build).
ao add "Implement feature flag support" --type feat --priority high
ao next
ao ls --view kanban
ao gate
ao add "Fix timeout regression" --type bug --priority high
ao ls --status todo --limit 20
ao next
AO profiles let you keep reusable personal metadata and per-profile preferences, then apply them consistently across repositories and agent workflows.
.env materialization for common variables.ao profile init my-main \
--full-name "Jane Doe" \
--email "jane@example.com" \
--github-username "janedoe" \
--website "https://example.com" \
--editor code \
--var TEAM=platform \
--var AO_MODE=agent
ao profile ls
ao profile use my-main
ao profile show
ao profile set my-main --var TEAM=core --var LANG=python --unset-var AO_MODE
ao profile show my-main
.envao profile env apply my-main .env
This writes/updates keys like FULL_NAME, EMAIL, GITHUB_USERNAME, optional WEBSITE,
and any custom --var entries.
ao profile prefs open my-main
ao profile prefs sync my-main
prefs open opens the profile preferences markdown in your configured editor.
prefs sync keeps home and workspace preference files aligned (newest wins).
This is the recommended model for parallel, low-conflict execution.
| Workflow selection | Intended behavior |
|---|---|
| No special workflow requirements | Normal branch flow; no special constraints |
| Separate worktree required | Must execute in dedicated worktree |
| Stacked diffs preferred | Prefer layered PRs/commits in sequence |
| Stacked diffs + separate worktree | Layered changes plus strict workspace isolation |
Use this when scope is tiny and independent.
ao add "Fix typo in API error" --type bug --priority low
ao next
ao gate
ao close BUG-0001@abc123 --log "Fixed and verified"
Use this when local changes may conflict with ongoing work.
ao add "Refactor event parser" --type refac --priority medium --separate-worktree required
ao worktree add --epic parser --step 1 --summary refactor-core --open editor
ao worktree ls
Use this when one feature is best reviewed as sequential pieces.
ao add "Add notifications feature" --type feat --priority high --stacked-diff yes
ao worktree plan --epic notifications --max-files 6 --max-loc 300
ao worktree add --epic notifications --step 1 --summary schema
ao worktree add --epic notifications --step 2 --summary api
ao worktree add --epic notifications --step 3 --summary ui
Use this for high-risk or long-running epics.
ao add "Migrate auth subsystem" --type feat --priority high --stacked-diff yes --separate-worktree required
ao worktree plan --epic auth
ao worktree add --epic auth --step 1 --summary bootstrap --open opencode
ao worktree land --epic auth
ao worktree land --epic auth --final --target main --ci-green --approved
Branch Worktrees tab.Editor) and click Open.Git action... and click Run.Force remove, confirm the safety prompt.Editor.Force remove only when safe.For complete policy, recovery, and gate semantics: see docs/worktree-stacked.md.
ao add "Fix timeout regression" --type bug --priority high
ao show BUG-0001@abc123
ao set BUG-0001@abc123 --status in_progress --owner alice
ao close BUG-0001@abc123 --log "Validated and merged"
ao event append --in -
ao rebuild
ao ls --view summary
ao next --limit 10
ao ls --view kanban
ao stale --days 7
ao triage
ao link add BUG-0004@aaaaaa --depends-on FEAT-0012@bbbbbb
ao link graph --graph-format mermaid
ao dep-tree BUG-0004@aaaaaa --depth 5
ao ac add BUG-0004@aaaaaa "Timeout test passes under load"
ao ac check BUG-0004@aaaaaa 1
ao validate
ao gate BUG-0004@aaaaaa
ao focus set-doing BUG-0004@aaaaaa --task "Patch retry strategy"
ao focus set-next "Run validation and close if gate passes"
ao focus sync
ao hooks install
ao hooks status
ao hooks agent-install --engine copilot
ao hooks loop-prompt --engine copilot
ao hooks loop-run --engine copilot --max 5
For an end-to-end guide to testing the standalone GitHub Copilot CLI autonomous loop, see docs/copilot-autonomous-loop.md.
ao worker add reviewer --engine copilot --model gpt-5.3-codex
ao worker assign BUG-0004@aaaaaa --worker reviewer
ao worker ls
ao ref init BUG-0004@aaaaaa
ao ref status BUG-0004@aaaaaa
ao ref open BUG-0004@aaaaaa
ao export json --out reports/issues.json
ao export jsonl --out reports/issues.jsonl
ao bench rebuild --events data/events.jsonl
ao web --host 127.0.0.1 --port 8042
.version)version is omitted, AO defaults from .version..version == pyproject.toml project.version..version as source-of-truth when present.ao version set X.Y.Zao version bump patch|minor|majorao version ... --dry-run to preview file updatesYou can also configure extra replacement targets in pyproject.toml:
[[tool.ao.version.targets]] with path, pattern, and replace.
AO supports both GitHub and Gitea as code hosts for pull request operations in stacked-diff workflows.
Set environment variables to select a provider:
# GitHub (default)
export CODE_HOST_TOKEN="ghp_..."
# Gitea
export CODE_HOST_TARGET=gitea
export CODE_HOST_TOKEN="your-gitea-token"
export CODE_HOST_BASE_URL="http://localhost:3000/api/v1" # optional, defaults to localhost
Or configure via ~/.ao/config.json:
{
"code_host": {
"target": "gitea",
"token": "your-token",
"base_url": "http://localhost:3000/api/v1"
}
}
When no token is configured, ao stack push falls back to the gh CLI.
A docker-compose.yml is provided at the project root:
docker compose up -d # Start Gitea on localhost:3000
docker compose down # Stop
This creates a local Gitea instance with SQLite storage and an admin user, ready for integration testing.
events.jsonl — append-only event historyactive.jsonl — derived active snapshotsrc/ao/cli.py — command routing and UXsrc/ao/api.py — programmatic API clientsrc/ao/_internal/ — internal implementation modulessrc/ao/_internal/codehost.py — GitHub/Gitea provider abstractionsrc/ao/web/ — web UI + API endpoints.ao/skills/.github/prompts/ao-plan, ao-task, ao-implement, ao-review, ao-validation, ao-helpBefore running integration/UI tests, start the test stack:
docker compose -f docker-compose.test.yml up -d
uv run python scripts/run_isolated_workflow_tests.py
This runs integration tests from an ephemeral temp working directory, not the repo root.
When finished:
docker compose -f docker-compose.test.yml down
On Windows/PowerShell, you can prepare dependencies, start the Gitea stack, launch an AO web server, and run both test lanes with:
./scripts/run-all-tests.ps1
Useful switches:
-DryRun — print the planned commands without executing them-KeepDocker — leave the Gitea test stack running after the script finishes-KeepWebServer — leave the AO web server running after the script finishes-SkipWebServer — run tests without starting the local AO web server helper-IncludeBuild — run the canonical build after the explicit test lanesuv run python scripts/build.py
uv run pytest tests/ -v
agent-ops-cliao.github/workflows/python-publish.ymluv build + uvx twine check dist/* + twine uploadUse AO as your workflow source of truth so humans and agents execute from the same issue/event substrate.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.6.0 | 10 Mar 2026 | 17 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:48 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:5b670a64460438f453cc55005a7b229e06fca76c6fd08c40e5bde2510901ccdf