Skip to main content

English | Türkçe

agent-orchestrator

Point it at the agent you are already running. It picks up from there.

No new harness. No re-planning. No "start a fresh session so the tool can manage it." ao attaches to a coding agent that is already working — in your IDE, in a terminal, started by someone else — reads its state without touching it, and takes over the tedious half: noticing when it stalls, running the gates, deciding what may be committed, and keeping work moving while you sleep.

That is the whole difference. Every other orchestrator owns the agent: it spawns the process, it drives the loop, and adopting it means restarting your work inside it. ao owns the authority instead — what is finished, what is good, what may land — and leaves the agent where it is.

pip install ao-orchestrator                  # or: uv tool install ao-orchestrator
cd ~/your-project && ao status      # it finds the running session by itself

Or with nothing installed at all, using the Python macOS and most Linux distributions already ship:

git clone https://github.com/hakkisagdic/agent-orchestrator ~/ao
echo 'alias ao="$HOME/ao/bin/ao"' >> ~/.zshrc && exec zsh

No dependencies, by choice — this watches agents on machines it does not control, and a dependency is a thing that can be missing exactly there. Nothing to configure before the first run: ao discovers the session from the agent's own store.

Windows ships PowerShell and does not ship Python, so bin/ao.ps1 covers status, board and doctor with nothing installed. It is a deliberate subset and stays one — everything else either takes a decision, spends the machine, kills processes or speaks a protocol, and a second implementation of any of those is a second thing to be wrong. For the rest: winget install Python.Python.3.12 && pip install ao-orchestrator. The script is written and reviewed but not yet run on Windows.

Where this came from. Extracted from a 30-epic durable-workflow product built over weeks by exactly this loop. Every guard in here exists because something went wrong first: a watchdog that started a second turn on one session and left a rename half-applied; fifteen agent processes accumulated in one repository; a timestamp bug that made live evidence look three hours stale. docs/lessons.md is the list. None of it was designed in advance.


What it does

Watches. ao watch is a live panel: what the agent is doing, context and cost, open reviews, the work board, and — the part no other panel has — whether it is busy but producing nothing. An agent stuck in a wait loop looks perfectly healthy: transcript growing, tool calls firing, credits burning. ao compares activity against artifacts and says so.

Restarts. Turn-based agents stop when a turn ends, mid-slice or not. A watchdog notices and nudges. Detection is free — a file mtime and a couple of git calls — and a chain of guards makes sure a nudge is never spent where it cannot help: no second turn while one is running, no nudge into a provider outage, no nudge past the round budget, no nudge when a human has taken the tree.

Verifies. ao verify runs your gates and writes the numbers to a ledger. Not the agent's report of its gates — the commands, run again, by something with no stake in the result.

Decides. ao commit-ok grants commit authority from that evidence: gates passed, review approved, plan unedited, and the measurement still describes the tree in front of it. Every refusal names its missing condition. It never covers push.

Keeps going. A slice blocked on a human decision is parked with the reason recorded, and work moves to the next pre-authorised item. When the queue runs dry, the architect is woken to refill it — never the implementer, because choosing your own scope is the one authority an implementer must not have.

Commands

ao status · ao watch one project: state, telemetry, problems, board
ao watch --all · ao fleet every project, ordered by what needs a human first
ao board where each item is; READY = queued items whose needs: are done
ao verify [-p full] run the declared gates, record the result
ao commit-ok [--verify] may this tree be committed? decided from evidence
ao hold / ao hold release --note … stop every agent in the tree, and keep them stopped
ao writers / ao writers --clean live turns in the tree (one per turn, not per process), orphans set aside; --clean stops only the orphans
ao fanout ok --agents N / ao fanout record … / ao fanout history may a fan-out of N sub-agents start now (hard cap, recent limit hit, provider window); record what one cost
ao cost --since 24h what the coordination itself spends: implementer turns by class (product / analysis / ceremony / coordination), wasted turns, reviews
`ao features [on off ]`
ao waive review --slice B7 --why … / ao catchup a person bypasses a gate on the record; catchup reviews the landed range and replays deferred wakes and nudges
ao pings setup --url … dead man's switch: external pings that alarm when the watchdog and its doctor job both die
ao hooks install / ao push allow pre-push hook refuses unless a person opened a push window
ao skill install / ao skill show the playbook (roles, loop, authority, protocol, alarms, every command) rendered for the agents this repo uses: Claude skill, Kiro steering, AGENTS.md
`ao init --profile claude-kiro claude-claude`
ao doctor --check quiet doctor for a scheduler: one line per problem, exit 1, alarms raised — installed as a 15-minute launchd job by ao watchdog install
ao email setup / ao email test the red alarm channel: e-mail via formsubmit.co, no server (alarms.md)
ao alarms / ao alarms test --level red live alarm episodes and their level; test rings every channel
ao mail log / ao mail search <text> / ao mail ack <glob> the mail ledger: every message written and when it was consumed, searchable after deletion
ao watchdog explain / ao watchdog trace why the watchdog did or did not act: measurements and verdicts of this cycle, and of the recorded ones (watchdog.md)
ao source import admit tracker items onto the board
ao mail · ao notices coordination messages; alerts this project raised
ao watchdog install launchd job that restarts a stalled agent
ao mcp serve · ao a2a serve expose state to MCP clients / as A2A tasks
ao telegram setup alerts to your phone, decisions back from it
ao digest [--days N] what happened, read from the ledgers — also answers "why is nothing moving"
ao ask · ao answer · ao decisions questions answerable in one tap; free text always last
ao note an architect message into the mailbox, through the tool
ao review review the tree with an actor that did not write it
ao review --commits <range> review landed work after the fact; exit 3 means no reviewer could review (never a verdict), fallbacks in reviewer.fallbacks (roles.md)
ao handoff write and send everything a successor needs
ao a2a-mcp serve reach A2A agents from an MCP-only client
ao prune trim accumulated records and logs
ao doctor · ao adapters check the wiring; what is supported and how well

The rules it enforces

These are not style preferences. Each one is a failure that cost real hours.

  • Whoever writes the code does not verify it, and does not decide it may land.
  • A plan is read, never edited — when the document a slice is judged against can be edited by the thing being judged, every later check is circular.
  • Pulling work is not authorising it. A tracker item is something a person wrote, not a specification anyone verified. It enters the queue with a written acceptance boundary or it does not enter.
  • Heavy operations belong to one actor. Gates are serialised machine-wide; N projects running N test suites is not N times the throughput, it is one suite that no longer finishes.
  • Authority lives in always-included context, never in a mailbox. A stuck agent is exactly the agent not reading its mail.
  • push is never granted by this tool. Nor PRs, force-pushes, or hook bypasses.

Agent support

ao reads each agent's own session store; the adapter says where and in what shape.

verified adapters
full — every capability exercised in a production run kiro, claude-code, antigravity
partial — reads state, some capabilities unexercised opencode, command-code
documented — written from published docs, not yet run cursor-agent
untested — schema present, needs a first run codex, gemini, aider, amp, copilot, amazon-q, deepseek, qoder, ollama

ao adapters shows this table against what is actually installed on your machine, and — with keyflip — whether an account exists even when the CLI does not. Adding one is a JSON file; see docs/adapters.md.

Documentation

protocol · safety · roles · slices · gates · sources · adapters · parallel · cloud · models · telegram · mcp · telemetry · surfaces · ledger · recovery · keyflip · ide-extensions · lessons

Status

Working today: everything in the command table above, exercised daily against a real project. Still specification: ao init, ao decide, ao since, and cross-project parallel execution (the view exists; running several implementers at once is governed by the machine gate lock but has not been run in anger).

MIT.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ao_orchestrator-0.4.0.tar.gz (208.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ao_orchestrator-0.4.0-py3-none-any.whl (161.1 kB view details)

Uploaded Python 3

File details

Details for the file ao_orchestrator-0.4.0.tar.gz.

File metadata

  • Download URL: ao_orchestrator-0.4.0.tar.gz
  • Upload date:
  • Size: 208.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ao_orchestrator-0.4.0.tar.gz
Algorithm Hash digest
SHA256 456efc351ce197f31aaec6d0c44895b7ae59dc4da4da4c030bb976b613b915b5
MD5 6167be6999ad8e442f92d907b80b00a9
BLAKE2b-256 50959fbe25af404e0281347af41038fd645a77e6df5283250dcc00a5edbac6b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for ao_orchestrator-0.4.0.tar.gz:

Publisher: release.yml on hakkisagdic/agent-orchestrator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ao_orchestrator-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: ao_orchestrator-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 161.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for ao_orchestrator-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b9c4903a0399a6a4300ef99e1dafcc9a49dc699946934a9a1e0ff4f6b56c9020
MD5 543286d92fb3bfebbcbecd4bf452d11c
BLAKE2b-256 c027c212b306bfe1646897830294e9792566ea70d208ea98c21df365dc90b1b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for ao_orchestrator-0.4.0-py3-none-any.whl:

Publisher: release.yml on hakkisagdic/agent-orchestrator

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page