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. polyctl 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 polyctl 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. polyctl 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
polyctl doctor ve watchdog işaretler.
# or: uv tool install polyctl# ya da: uv tool install polyctl pip install polyctl cd your-repositorydeponun-yolu polyctl init --profile agy-codex # agy implements, another family reviews# agy yazar, başka bir aile gözden geçirir git add .polyctl-project .gitignore && git commit -m "adopt polyctl" polyctl hooks install # the hook refuses an ungranted git commit; polyctl flags --no-verify# hook yetkisiz git commit'i reddeder; polyctl --no-verify'ı işaretler
Then, for every change an agent stages: polyctl verify,
polyctl review, polyctl commit-ok, polyctl commit. Nothing to
configure first and no dependencies by choice — Python's standard library only, 3.9
and up, because polyctl watches agents on machines it does not control.
Sonra, ajanın sahnelediği her değişiklik için: polyctl verify,
polyctl review, polyctl commit-ok, polyctl 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ü polyctl kendi denetlemediği makinelerdeki ajanları
izliyor.
Want to see the guarantee before adopting it? polyctl demo plays
one change through polyctl on a scratch project, and polyctl prove runs the
guarantees on a throwaway candidate instead of describing them. On Windows
bin/polyctl.ps1 runs status, board and
doctor with nothing installed.
Benimsemeden önce o güvenceyi görmek ister misin? polyctl demo
tek bir değişikliği, sıfırdan kurulup atılacak bir projede polyctl'in içinden geçirir;
polyctl prove ise garantileri tarif etmek yerine yine böyle bir aday üzerinde koşturur. Windows'ta
bin/polyctl.ps1 hiçbir şey kurulu olmadan status,
board ve doctor çalıştırır.
$ polyctl verify PASS gates run on the staged tree · 412 passed, 0 failed · 6m 04s $ polyctl 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 $ polyctl commit-ok granted for tree 8c1d2e4… — verify V-1792342, review adf8d371 $ polyctl 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 polyctl's pre-commit hook: no grant for this staged tree
$ polyctl verify PASS gate'ler sahnelenen ağaçta koştu · 412 geçti, 0 kaldı · 6dk 04sn $ polyctl 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ı $ polyctl commit-ok yetki verildi ağaç 8c1d2e4… — doğrulama V-1792342, review adf8d371 $ polyctl 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 — polyctl 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
the agent edits and stagesajan yazar ve sahneye alır -> polyctl 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 -> polyctl review another model family reads that candidate and the code around it başka bir model ailesi o adayı ve çevresindeki kodu okur -> polyctl commit-ok commit authority for that exact tree, granted from the evidence o tam ağaç için commit yetkisi, kanıttan verilerek -> polyctl 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 polyctl flags one made around it; pre-commit hook öteki her git commit'i reddeder, etrafından dolaşanı da polyctl 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, polyctl writes a request bound to that same
digest — you paste it into any session of another family, and a person files the
answer with polyctl 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 polyctl 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
polyctl collect-review ile işler.
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: polyctl 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: polyctl 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.
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.
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.
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.
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.
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.
A review you waive is recorded, not swallowed: polyctl catchup
has a reviewer of another family read the landed range later, and
polyctl doctor names a commit whose content no review or waiver granted.
Muaf tuttuğun review kaydedilir, yutulmaz: polyctl catchup, inen aralığı sonra başka bir aileden bir gözden geçirene okutur;
polyctl doctor da içeriği hiçbir review ya da muafiyetin vermediği commit'i
adıyla söyler.
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.
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: polyctl gain reads polyctl'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:
polyctl gain polyctl'in defterlerini okur ve ne ölçtüğünü söyler — inen dilimler,
review'ların dediği, bir turun maliyeti.
══════════════════════════════════════════════════════════════════ ACME-API polyctl 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 polyctl 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
polyctl watch, on a sample project — the fields come
from the agent's own store and polyctl's ledgerspolyctl watch, örnek bir projede — alanlar ajanın kendi
deposundan ve polyctl'in defterlerinden geliyor
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.
push is never granted by this tool.
Nor PRs, force-pushes, or hook bypasses.
push bu araç tarafından asla verilmez.
PR, force-push ve hook atlama da öyle.
Each adapter declares how polyctl observes its harness and how much of that
declaration has been measured. polyctl 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 polyctl keeps itself; codex, command-code,
aider, droid, grok, hermes,
kilocode, kimi, omp, pi,
qwen and trae declare a transcript shape with no session store
polyctl 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, polyctl'in o harness'ı nasıl gözlemlediğini ve bu bildirimin ne
kadarının ölçüldüğünü söyler. polyctl, 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, polyctl'in 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.
| verified | doğrulama | adapters | adaptörler |
|---|---|---|---|
| full | kiro · claude-code · antigravity every capability exercised in a production run her yetenek gerçek koşumda sınandı | ||
| partial | opencode · command-code · codex ·
qoder · openai-api · warp reads state, some capabilities unexercised durumu okur, bazı yetenekler sınanmadı | ||
| documented | cursor-agent written from published docs, not yet run yayımlanmış dokümandan yazıldı, henüz koşulmadı | ||
| untested | gemini · 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 |
polyctl 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.
polyctl 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ı.
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.
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 polyctl's own ledgers say about the guarantee on its own repository is published too: evidence. polyctl'in kendi defterlerinin kendi deposundaki güvence hakkında söylediği de yayında: kanıt.