Co-op protokol v1 — více instancí Claude Code nad jedním repem
Operační protokol pro paralelní práci více instancí Claude Code (nebo lidí) na tomto repu. Je čistě provozní: nikdy nepřebíjí editorská pravidla, autorizační log ani build gate v AGENTS.md — ta platí pro každý task beze změny.
Role
- ORCH (orchestrátor) — právě jedna instance, běží v hlavním checkoutu (
/Users/korczis/dev/vomaste.cz, větevmaster). Jediná smí: rozkládat zadání na tasky, editovatdocs/coop/TASKS.md, mergovat domastera pushovat (= deploy). - W-n (worker) — libovolný počet instancí, každá v vlastním git worktree na vlastní větvi, pracuje vždy právě na jednom tasku.
- REV (reviewer, volitelný) — čte diff cizí větve, hlásí nálezy po sběrnici; nikdy needituje.
Identita instance: proměnná COOP_AGENT_ID (např. ORCH, W-1); bez ní se použije jméno aktuální větve.
Rozklad zadání (vstupní prompt → tasky)
Když přijde větší zadání (pastnutý text/prompt), ORCH ho nejdřív rozloží na tasky a zapíše do boardu — teprve pak se začne pracovat:
- Rozsekat na nezávislé, mergovatelné jednotky (jedna jednotka = jde samostatně zvalidovat přes
npm run builda samostatně mergnout). - Každé jednotce dát ID
T-###, titul, přesný scope (které soubory / sekce), akceptační kritérium a závislosti na jiných taskách. - Cokoliv, co by se dotklo obsahu o reálné osobě, dostane štítek
[scope-check]a před startem se ověří proti autorizačnímu logu vAGENTS.md; nový subjekt/téma = stop a zeptat se vlastníka. - Board commitnout na
master— tím je zadání trackovatelné v gitu.
Task board — docs/coop/TASKS.md
Jediný zdroj pravdy o stavu práce, single-writer: edituje ho pouze ORCH, pouze na master. Workeři stav nikdy needitují — hlásí ho po sběrnici a ORCH ho propíše. (Stejný vzor jako single-source-of-truth u dossieru: jedna kanonická reprezentace, žádné souběžné zápisy.)
Stavy: todo → claimed → in-progress → review → merged, kdykoliv blocked (s důvodem v poznámce).
Worktrees — jeden task = jedna větev = jeden worktree = jedna instance
Worktrees žijí mimo repo v ~/dev/vomaste-worktrees/ (zavedený precedens), větve se jmenují task/T-###:
scripts/coop/coop.sh wt-add T-001 # git worktree add ../vomaste-worktrees/T-001 -b task/T-001 master
cd ~/dev/vomaste-worktrees/T-001 && npm ci # worktree má vlastní node_modules
COOP_AGENT_ID=W-1 claude # nová instance Claude Code v worktree
Po mergnutí: scripts/coop/coop.sh wt-done T-001 (odstraní worktree i větev). Worktree se nikdy nerecykluje na jiný task.
Sběrnice zpráv (serializace)
Instance spolu mluví přes append-only NDJSON log ve sdíleném git adresáři — ten je společný všem worktrees a není verzovaný:
$(git rev-parse --git-common-dir)/coop-bus/bus.ndjson
Jedna zpráva = jeden řádek = jeden JSON objekt (řádky < 4 kB jsou na POSIX appendované atomicky, takže netřeba zámky):
{"v":1,"ts":"2026-07-29T19:00:00Z","from":"W-1","to":"ORCH","type":"progress","task":"T-001","payload":{"note":"claims table hotova, bezi build"}}
v— verze protokolu (teď1)from/to— ID instance;to:"*"= broadcasttype—claim|progress|blocked|review-request|done|merged|deploy|note|pingtask—T-###, nebo""u zpráv mimo taskpayload— libovolný validní JSON objekt (typicky{"note": "..."})
Obsluha přes helper (nikdy neručně, ať je formát konzistentní):
scripts/coop/coop.sh send ORCH claim T-001 '{"note":"beru si to"}'
scripts/coop/coop.sh inbox # zprávy pro mě (a broadcasty)
scripts/coop/coop.sh log 50 # posledních 50 zpráv celé sběrnice
scripts/coop/coop.sh status # board + worktrees + poslední zprávy
Instance čtou sběrnici na začátku session (SessionStart hook pouští coop.sh status) a průběžně mezi kroky — žádný push kanál není, je to poll.
Životní cyklus tasku
- ORCH zapíše task do boardu (
todo) a pošlenote/broadcast. - Worker pošle
claim→ ORCH propíšeclaimed+Owner. - Worker pracuje ve svém worktree, průběžně posílá
progress; commituje malé, atomické commity natask/T-###. - Hotovo = ve worktree prošel celý
npm run build→ worker pošlereview-request(payload: větev, shrnutí, výstup buildu OK). - ORCH (příp. REV) zkontroluje diff, mergne do
master(git merge --no-ff task/T-###), pustínpm run buildještě jednou na masteru, propíšemergeddo boardu. - Deploy =
git pushmasteru (GitHub Pages CI v.github/workflows/deploy.ymlstaví a nasazuje). ORCH pošledeployzprávu. Průběžně: deploy po každém mergnutém tasku, ne až nakonec. wt-done T-###uklidí worktree a větev.
Konflikty řeší vždy worker rebasem své větve na aktuální master (git fetch && git rebase master) — ORCH nikdy neřeší konflikt za něj při mergi.
Paralelismus uvnitř jedné instance
Souběžné instance přes worktrees jsou pro nezávislé, dlouhoběžící tasky. Pro fan-out uvnitř jednoho tasku (průzkum, review z více úhlů) má každá instance k dispozici vlastní subagenty (Agent tool / Workflow) — ty koordinuje sama a na sběrnici hlásí jen souhrnný stav tasku. Žádný vestavěný „co-op mode" v Claude Code není; co-op je přesně tento protokol.
Vazba na pravidla repa (závazné)
- Editorská pravidla, autorizační log a build gate z
AGENTS.mdplatí v každém worktree stejně jako na masteru. Sběrnice ani board nikdy neslouží k obcházení „stop and ask" u obsahu o reálných osobách. - Merge do
masterjen se zelenýmnpm run build. Červený build na masteru = stop-the-line: žádné další merge, dokud není zelený. - Board i protokol jsou verzované v repu; sběrnice (
coop-bus/) je efemérní provozní log a do gitu nepatří.