agent-orchestrator · v0.6.0 · MIT

Your agents commit.
Every change is granted first, or flagged.
Ajanların commit atıyor.
Her değişiklik ya önce yetkilendirilir ya da işaretlenir.

By default a model of another family reviews the exact change an agent staged, and a git hook refuses anything else at git commit. Keep the agents you already use — Claude Code, Codex, Kiro, Qoder, OpenCode and the rest. ao sits above them: it runs your gates on that staged change, grants commit authority for that one tree, and writes every decision to a ledger that shows tampering. A person can waive review, on the record; a commit no review or waiver granted is flagged by ao doctor and the watchdog. Varsayılan olarak ajanın sahnelediği tam değişikliği başka bir model ailesinden bir gözden geçiren inceler; git hook'u da git commit'te ondan başkasını reddeder. Kullandığın ajanları bırak — Claude Code, Codex, Kiro, Qoder, OpenCode ve gerisi. ao onların üstünde durur: o sahnelenen değişiklikte senin gate'lerini koşturur, tek bir ağaç için commit yetkisi verir ve her kararı, kurcalanmayı gösteren bir deftere yazar. Bir kişi review'ı kayda geçerek devre dışı bırakabilir; hiçbir review ya da muafiyetin vermediği commit'i ao doctor ve watchdog işaretler.

Five minutesBeş dakika

# or: uv tool install ao-orchestrator# ya da: uv tool install ao-orchestrator
pip install ao-orchestrator
cd your-repositorydeponun-yolu
ao init --profile agy-codex     # agy implements, another family reviews# agy yazar, başka bir aile gözden geçirir
git add .ao-project .gitignore && git commit -m "adopt ao"
ao hooks install                # the hook refuses an ungranted git commit; ao flags --no-verify# hook yetkisiz git commit'i reddeder; ao --no-verify'ı işaretler

Then, for every change an agent stages: ao verify, ao review, ao commit-ok, ao commit. Nothing to configure first and no dependencies by choice — Python's standard library only, 3.9 and up, because ao watches agents on machines it does not control. Sonra, ajanın sahnelediği her değişiklik için: ao verify, ao review, ao commit-ok, ao commit. Başta yapılandırma yok; bağımlılık da yok, bu bir tercih: yalnız Python'un standart kütüphanesi, 3.9 ve üstü; çünkü ao kendi denetlemediği makinelerdeki ajanları izliyor.

Want to see the guarantee before adopting it? ao demo plays one change through ao on a scratch project, and ao prove runs the guarantees on a throwaway candidate instead of describing them. On Windows bin/ao.ps1 runs status, board and doctor with nothing installed. Benimsemeden önce o güvenceyi görmek ister misin? ao demo tek bir değişikliği, sıfırdan kurulup atılacak bir projede ao'nun içinden geçirir; ao prove ise garantileri tarif etmek yerine yine böyle bir aday üzerinde koşturur. Windows'ta bin/ao.ps1 hiçbir şey kurulu olmadan status, board ve doctor çalıştırır.

$ ao verify
  PASS  gates run on the staged tree · 412 passed, 0 failed · 6m 04s
$ ao review
  route: kiro → its read-only agent (family: kiro · implementer: antigravity)
  APPROVED 0 blockers, 0 highs · 2 notes · the candidate's digest bound to the verdict
$ ao commit-ok
  granted for tree 8c1d2e4… — verify V-1792342, review adf8d371
$ ao commit -m "feat: count failed logins per account"
  committed · trailers bind it to that grant · push was never granted
$ git commit -m "anything else"
  refused by ao's pre-commit hook: no grant for this staged tree
$ ao verify
  PASS  gate'ler sahnelenen ağaçta koştu · 412 geçti, 0 kaldı · 6dk 04sn
$ ao review
  rota: kiro → kendi salt-okunur ajanı (aile: kiro · uygulayıcı: antigravity)
  APPROVED 0 blocker, 0 high · 2 not · adayın özeti hükme bağlandı
$ ao commit-ok
  yetki verildi ağaç 8c1d2e4… — doğrulama V-1792342, review adf8d371
$ ao commit -m "feat: hesap başına başarısız girişleri say"
  commit edildi · trailer'lar onu bu yetkiye bağlar · push asla verilmedi
$ git commit -m "başka bir şey"
  reddedildi — ao pre-commit hook: bu sahnelenen ağaç için yetki yok

an illustrative run: the four commands of one change, and a plain git commit refusedörnek bir koşum: bir değişikliğin dört komutu, ve reddedilen düz bir git commit

How a change landsDeğişiklik nasıl iniyor

the agent edits and stagesajan yazar ve sahneye alır
  -> ao verify      your gates, run again by something with no stake in the result   senin gate'lerin, sonuçta çıkarı olmayan bir şeyce yeniden koşturulur
  -> ao review      another model family reads that candidate and the code around it  başka bir model ailesi o adayı ve çevresindeki kodu okur
  -> ao commit-ok   commit authority for that exact tree, granted from the evidence o tam ağaç için commit yetkisi, kanıttan verilerek
  -> ao commit      the commit carries trailers that bind it to the grant     commit, onu o yetkiye bağlayan trailer'lar taşır
the pre-commit hook refuses any other git commit, and ao flags one made around it; pre-commit hook öteki her git commit'i reddeder, etrafından dolaşanı da ao işaretler; push is never granted asla verilmez

Each refusal names the condition it is missing, and a review is bound to the digest of the bytes it read: change the staged tree and the verdict no longer applies. When no reviewer can be reached, ao writes a request bound to that same digest — you paste it into any session of another family, and a person files the answer with ao collect-review. Her ret eksik koşulu adıyla söyler; bir review okuduğu baytların özetiyle bağlanır: sahnelenen ağacı değiştirirsen hüküm artık geçerli değil. Hiçbir gözden geçirene ulaşılamayınca ao aynı özetle bağlı bir istek yazar — onu başka bir ailenin herhangi bir oturumuna yapıştırırsın, cevabı da bir kişi ao collect-review ile işler.

What it doesNe yapar

Reviews on its own termsKendi kurallarıyla gözden geçirir

A model of another family than the one that wrote the change, by default — a model reviewing its own family's work shares its blind spots. And a reviewer only reads: ao measures that per harness, and where no flag denies the tools it writes a read-only agent for that harness itself. A route that could write is refused where it starts. Değişikliği yazandan farklı bir model ailesi, varsayılan olarak — bir model kendi ailesinin işini gözden geçirince kör noktaları da ortak olur. Bir gözden geçiren yalnız okur: ao bunu harness bazında ölçüyor; hiçbir bayrağın araçları kapatmadığı bir harness içinse o harness'ın kendi salt-okunur ajanını yazıyor. Yazabilecek bir rota, başladığı yerde reddedilir.

VerifiesDoğrular

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. Senin gate'lerini koşturur ve sayıları deftere yazar. Ajanın gate raporunu değil — komutları, yeniden, sonuçta çıkarı olmayan bir şey tarafından.

DecidesKarar verir

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. Commit yetkisini o kanıttan verir: gate'ler geçti, review onaylandı, plan değiştirilmedi, ölçüm hâlâ önündeki ağacı tarif ediyor. Her ret eksik koşulu adıyla söyler. push'u asla kapsamaz.

Watchesİzler

A live panel — and the part no other panel has: whether the agent is busy but producing nothing. A stuck agent looks perfectly healthy. Transcript growing, tool calls firing, credits burning. This compares activity against artifacts and says so. Canlı bir panel — ve başka hiçbir panelde olmayan şey: ajan meşgul ama üretmiyor mu? Saplanmış bir ajan sapasağlam görünür. Transcript büyür, tool call'lar akar, kredi yanar. Bu, faaliyeti üretilen şeyle karşılaştırır ve söyler.

RestartsYeniden başlatır

Turn-based agents stop when a turn ends, mid-slice or not. A watchdog notices and nudges — behind guards that make sure a nudge is never spent where it cannot help: not into a provider outage, past a round budget, or beside a tree a person has taken. Tur-bazlı ajanlar tur bitince durur, dilim ortasında bile. Watchdog fark edip dürter — dürtme işe yaramayacağı yerde harcanmasın: sağlayıcı kesintisine, tur bütçesinin ötesine ya da bir kişinin devraldığı ağacın yanına değil.

Keeps goingİşi yürütür

A board of pre-authorised work: a slice waiting on you is parked with its reason, and when the queue runs dry the architect is woken to refill it. A turn that cannot be read is not counted as one that finished. Önceden yetkilendirilmiş işin panosu: seni bekleyen dilim, nedeni yazılı olarak park edilir; kuyruk boşalınca mimar onu doldursun diye uyandırılır. Okunamayan bir tur, bitmiş sayılmaz.

Catches upKovuşturur

A review you waive is recorded, not swallowed: ao catchup has a reviewer of another family read the landed range later, and ao doctor names a commit whose content no review or waiver granted. Muaf tuttuğun review kaydedilir, yutulmaz: ao catchup, inen aralığı sonra başka bir aileden bir gözden geçirene okutur; ao doctor da içeriği hiçbir review ya da muafiyetin vermediği commit'i adıyla söyler.

Reaches youSana ulaşır

Alerts carry an audience: a human hears only what a human can fix. From a phone you can answer — and your reply becomes an urgent decision the implementer cannot commit past until it has read it. Uyarıların hedef kitlesi var: insana yalnız insanın çözebileceği şey ulaşır. Telefondan cevap yazabilirsin — ve yazdığın şey, uygulayıcının okumadan üstünden commit edemeyeceği acil bir karara dönüşür.

Agents report and read over MCP; other orchestrators read the board over A2A; and a bridge lets an MCP-only agent reach the A2A ones. All of it is the same files, so a project that installs none of it loses nothing. Ajanlar MCP üzerinden rapor verir ve okur; başka orkestratörler panoyu A2A üzerinden okur; bir köprü de yalnız MCP konuşan ajanı A2A konuşanlara ulaştırır. Hepsi aynı dosyalara dayanıyor, yani hiçbirini kurmayan proje hiçbir şey kaybetmez.

Why it is differentFarkı ne

Every other orchestrator owns the agent: it spawns the process, drives the loop, and adopting it means restarting your work inside it. This one owns the authority instead — what is finished, what is good, what may land — and leaves the agent exactly where it is. And it can be shown its own work: ao gain reads ao's ledgers and says what it measured, slices landed, what reviews said, what a turn cost. Piyasadaki diğer orkestratörler ajanın sahibidir: süreci onlar başlatır, döngüyü onlar sürer, benimsemek de işi onların içinde yeniden başlatmak demek. Bu ise yetkinin sahibidir — ne bitti, ne iyi, ne inebilir — ajanı tam olduğu yerde bırakır. Bir de kendi işini gösterebiliyor: ao gain ao'nun defterlerini okur ve ne ölçtüğünü söyler — inen dilimler, review'ların dediği, bir turun maliyeti.

The panelPanel

══════════════════════════════════════════════════════════════════
  ACME-API   agent-orchestrator   18 Oct 14:44:44
══════════════════════════════════════════════════════════════════

● WORKING  kiro · last write 0m 32s ago
  ↳ wiring the rate limiter into the login route, then gates

── QUOTA / CONTEXT ──────────────────────────────────────────────
   context  █████████████░░░░░░░ 68%
   cost     last turn 99 credit (162 tool calls) · 5 turns, total 412 (avg 82)

── PROBLEMS ─────────────────────────────────────────────────────
   spinning 41m busy, nothing committed or changed
     activity is not progress — re-specify, split, or check for a wait loop

── REVIEWS ──────────────────────────────────────────────────────
   round 3/5   candidate 8c1d2e4 · staged tree bound to the verdict
   2026-10-18-141502-8c1d2e4.md   NEEDS_CHANGES 1 high · kiro
   2026-10-18-121930-8c1d2e4.md   APPROVED 2 notes · antigravity

── THROUGHPUT 24h ───────────────────────────────────────────────
   staged 2 · landed 1 · decisions 1 asked, 1 waiting (oldest 0h 52m)
   landing: candidates are reaching commits

── REPOSITORY ───────────────────────────────────────────────────
   8c1d2e4 feat: count failed logins per account
   3b7a9f0 fix: keep the session cookie on token refresh
   e41c5d2 docs: describe the webhook retry policy
   2 files uncommitted · 3 ahead / 0 behind origin/main

   Mailbox: 20261018-1352-kiro-to-architect-QUESTION-lockout-scope.md
   1 other message(s) waiting in agent-mail/
   Board:   1 running · 1 blocked · 4 queued · 6 done
     ⊘ ACME-142  rotate webhook secrets — new key from ops

── RECENT MESSAGES ──────────────────────────────────────────────
   14:36 YOU    Count failures per account, not per IP address; the
        │      decision is in the mailbox.
   14:41 AGENT  Moving the counter to the account key; the migration
        │      and its test come next.
  every 15s · Ctrl+C to exit
══════════════════════════════════════════════════════════════════
  ACME-API   agent-orchestrator   18 Eki 14:44:44
══════════════════════════════════════════════════════════════════

● ÇALIŞIYOR  kiro · son yazma 0dk 32sn önce
  ↳ hız sınırlayıcıyı giriş rotasına bağlıyor, sonra gate'ler

── KOTA / BAĞLAM ───────────────────────────────────────────────
   bağlam   █████████████░░░░░░░ 68%
   maliyet  son tur 99 kredi (162 araç çağrısı) · 5 tur, toplam 412 (ort 82)

── SORUNLAR ────────────────────────────────────────────────────
   dönüp duruyor 41dk meşgul, commit ya da değişiklik yok
     faaliyet ilerleme değildir — yeniden tarif et, böl ya da bekleme döngüsüne bak

── GÖZDEN GEÇİRMELER ───────────────────────────────────────────
   tur 3/5   aday 8c1d2e4 · sahnelenen ağaç hükme bağlı
   2026-10-18-141502-8c1d2e4.md   NEEDS_CHANGES 1 high · kiro
   2026-10-18-121930-8c1d2e4.md   APPROVED 2 not · antigravity

── AKIŞ 24sa ───────────────────────────────────────────────────
   sahnelenen 2 · inen 1 · kararlar 1 soruldu, 1 bekliyor (en eski 0sa 52dk)
   iniyor: adaylar commit'e ulaşıyor

── DEPO ────────────────────────────────────────────────────────
   8c1d2e4 feat: hesap başına başarısız girişleri say
   3b7a9f0 fix: token yenilemede oturum çerezini koru
   e41c5d2 docs: webhook yeniden deneme politikasını anlat
   2 dosya commit edilmemiş · origin/main'in 3 önünde / 0 gerisinde

   Posta kutusu: 20261018-1352-kiro-to-architect-QUESTION-lockout-scope.md
   agent-mail/ içinde bekleyen 1 mesaj daha
   Pano:         1 çalışan · 1 engelli · 4 kuyrukta · 6 tamam
     ⊘ ACME-142  webhook sırlarını yenile — ops'tan yeni anahtar

── SON MESAJLAR ────────────────────────────────────────────────
   14:36 SEN    Başarısız girişleri IP başına değil hesap başına say;
        │      karar posta kutusunda.
   14:41 AJAN   Sayacı hesap anahtarına taşıyorum; sırada göç betiği
        │      ve testi var.
  her 15sn · çıkmak için Ctrl+C

ao watch, on a sample project — the fields come from the agent's own store and ao's ledgersao watch, örnek bir projede — alanlar ajanın kendi deposundan ve ao'nun defterlerinden geliyor

The rules it enforcesDayattığı kurallar

Not style preferences. Each one is a failure that cost real hours. Üslup tercihi değil. Her biri gerçek saatlere mal olmuş bir arıza.

Agent supportAjan desteği

Each adapter declares how ao observes its harness and how much of that declaration has been measured. ao resolves and reads the agent's own session store for kiro, claude-code, opencode and qoder; for antigravity, warp and cursor-agent (call-return), the call returns a structured record that ao keeps itself; codex, command-code, aider, droid, grok, hermes, kilocode, kimi, omp, pi, qwen and trae declare a transcript shape with no session store ao resolves yet; amazon-q, amp, copilot, deepseek, gemini and reasonix leave the transcript unknown; openai-api, pr-agent and ollama are tool reviewers or a model backend with no session store; and cloud-generic (a cloud template omitted from the table below) observes work through pull-request polling and Git results. Only the full and partial rows are measured against an install, except openai-api, whose client was tested against a stand-in endpoint while a provider's own answer is proven only by an owner's local run; cursor-agent (documented) is written from published docs only, and the untested rows are written from documented interfaces and have not been run. Her adaptör, ao'nun o harness'ı nasıl gözlemlediğini ve bu bildirimin ne kadarının ölçüldüğünü söyler. ao, kiro, claude-code, opencode ve qoder için ajanın kendi oturum deposunu çözüp okur; antigravity, warp ve cursor-agent (call-return) için çağrının döndürdüğü yapılandırılmış kaydı kendisi tutar; codex, command-code, aider, droid, grok, hermes, kilocode, kimi, omp, pi, qwen ve trae, ao'nun henüz çözmediği bir oturum deposuyla yalnız transcript biçimini bildirir; amazon-q, amp, copilot, deepseek, gemini ve reasonix transcript'i unknown bırakır; openai-api, pr-agent ve ollama oturum deposu olmayan araç gözden geçirenleri ya da model arka uçlarıdır; cloud-generic (aşağıdaki tabloda yer almayan bulut şablonu) ise işi pull request yoklaması ve Git sonuçları üzerinden gözlemler. Yalnız full ve partial satırları kurulu bir araç üzerinde ölçülmüştür — istemcisi vekil bir uç noktaya karşı sınanan ve sağlayıcının kendi yanıtı ancak sahibinin yerel koşumuyla kanıtlanan openai-api hariç; cursor-agent (documented) yalnız yayımlanmış dokümandan yazılmıştır, untested satırları ise dokümante arayüzlerden yazılmış ve henüz koşulmamıştır.

verifieddoğrulamaadaptersadaptörler
fullkiro · claude-code · antigravity
every capability exercised in a production run her yetenek gerçek koşumda sınandı
partialopencode · command-code · codex · qoder · openai-api · warp
reads state, some capabilities unexercised durumu okur, bazı yetenekler sınanmadı
documentedcursor-agent
written from published docs, not yet run yayımlanmış dokümandan yazıldı, henüz koşulmadı
untestedgemini · aider · amp · copilot · amazon-q · deepseek · ollama · droid · grok · hermes · kilocode · kimi · omp · pi · pr-agent · qwen · reasonix · trae
schema present, needs a first run şema hazır, ilk koşumu bekliyor

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. ao adapters bu tabloyu makinende gerçekten kurulu olana karşı gösterir; keyflip ile, CLI kurulu değilse bile hesap var mı diye de bakar. Yeni eklemek bir JSON dosyası.

Where this came fromNereden çıktı

Extracted from a 30-epic durable-workflow product built over weeks by exactly this loop. Every guard in it 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. None of it was designed in advance — the lessons file is the list. Haftalarca tam olarak bu döngüyle geliştirilen 30 epic'lik dayanıklı-iş-akışı ürününden çıkarıldı. İçindeki her koruma önce bir şey ters gittiği için var: tek oturumda ikinci tur başlatıp yeniden adlandırmayı yarım bırakan bir watchdog; tek depoda biriken on beş ajan süreci; canlı kanıtı üç saat bayat gösteren bir saat hatası. Hiçbiri önceden tasarlanmadı — liste dersler dosyasında.

What is not builtNeler kurulmadı

The suite runs on Linux, macOS and Windows with Python 3.9 and 3.12, and every command in the list is exercised daily against a real project. Still specification: read lanes, a lane's role and the merge queue, and cross-project parallel execution — the view exists, and running several implementers at once is governed by the machine-wide gate lock but has not been run in anger. Suite Linux, macOS ve Windows'ta Python 3.9 ve 3.12 ile koşuyor; komut listesindeki her komut gerçek bir projede her gün kullanılıyor. Hâlâ şartname olanlar: okuma şeritleri, bir şeridin rolü ve merge kuyruğu ile projeler arası paralel yürütme — görünüm var, birden çok uygulayıcıyı aynı anda koşturmak makine geneli gate kilidine bağlı ama hiç gerçek koşumda denenmedi.

What ao's own ledgers say about the guarantee on its own repository is published too: evidence. ao'nun kendi defterlerinin kendi deposundaki güvence hakkında söylediği de yayında: kanıt.