Development record
Multiple Agents Coordinate On Intent And Spec Work Without Duplicating Effort Or Producing Competing Artefacts
Superseded by itd-2609091034175565 on 2026-10-03: Replaced by reserving work through a claim branch on the shared remote; its one-computer active-work file is excluded by the 2026-10-03 rulings (product thinker, 2026-10-03)
Press Release
abcd ships a coordination layer so multiple agents can work on the same intents and specs without duplicating each other's work. Every agent (Claude Code session, an autonomous run via the pluggable run seam, another harness) declares which
work_itemit's progressing — anintent_promotion(itd-N), aspec_task(spc-N.M), or acommand_run(e.g.,intent.shape) — by writing to.abcd/coordination/active-work.jsonbefore starting. Before an agent begins awork_item, it callstake(work_item). The result is either clear (the agent acquires) or currently-held-by-X. Agents in conflict eitheryield(defer to the holder) orescalate(surface to the human via bare/abcd). The coordination state is plain JSON in the repo — no daemon, no orchestration runtime, no LangGraph/CrewAI/AutoGen dependency. abcd's contribution is a small contract layer (~3 functions, ~8 audit-log event types); the human-facing surface is rendered by the bare/abcddispatcher (itd-20)."I had Claude Code in one terminal running
/abcd:intent plan itd-33, and forty minutes later I opened a second terminal and ran the same command — completely forgetting the first was still mid-promotion," said Maya, AI/agent researcher. "Without coordination they'd each have produced a competingspc-33spec and I'd have spent another hour deciding which to keep. With this, the second agent readsactive-work.json, sees Claude Code is mid-intent_promotion(itd-33), and yields with a one-liner explaining who's holding it. No duplicate work, no merge dance."
Why This Matters
abcd is on a trajectory to host multiple concurrent agents in the same repo:
- Same human, multiple terminals — eve opens Claude Code in terminal 1, walks away, opens terminal 2 and reruns the same command. The most common collision pattern in practice.
- Autonomous runs (the pluggable run seam, contextualised by itd-29) — long-running agents that the user kicks off and walks away from. They share a working tree with whatever the user does next.
- Multiple harnesses — Claude Code today, opencode (itd-22); the same project may be opened by a user in one harness while another agent runs in another.
- In-session subagent dispatch (itd-2) — the parent session spawns subagents whose work is part of the parent's progress, not a parallel actor (subagents inherit the parent's
agent_id; they do not hold their own claims).
Today, coordination between these is emergent at best:
- No shared mid-flight state. Agent A doesn't know that agent B is partway through promoting
itd-N. Both produce competing specs. - No yield/escalate vocabulary. When two agents do realise they're in conflict, the only resolution is "the user notices and arbitrates" — manual, lossy, slow.
This intent captures the concern now so the design conversation can start before the first multi-agent collision lands real work in the bin. The trigger to escalate from drafts/ to planned/ is concrete (see "Revisit Triggers"); implementation is deferred until the actual texture of multi-agent collisions is observable.
Deliberately out of scope: file-level claims. The earlier draft of this intent proposed a per-file claim/heartbeat protocol to prevent two agents writing the same file at once. That has been cut. Reasons: (a) git merge conflicts surface concurrent text edits loudly, not silently — the failure mode is recoverable; (b) the duplicate-work problem (two specs, two parallel plans) is the genuinely-unsolved case where git can't help (different filenames, same intent); (c) the file-claim infrastructure (per-file heartbeats, stale-claim sweeps, uncoordinated_write_by flagging, substrate selection from LangGraph/CrewAI/AutoGen) was disproportionate weight for a problem git already solves. If file-level collisions become a recurring real pain, a follow-up intent can revisit.
abcd's stance is a small contract, not an orchestration substrate. Plain JSON files, three primitives (take/yield/escalate), three contract functions exposed to itd-20's bare /abcd dispatcher. No new framework dependency, no graph runtime, no agent-to-agent chat.
What's In Scope
- Agent identity surface. Every agent declares:
agent_id(ephemeral; minted at harness invocation as<harness>-<starttime>-<6char-rand>),harness∈{claude-code, opencode, ralph, external},human(sourced from git config — the stable cross-session attribute),started_at,last_heartbeat_at(refreshed every 30s while running), andworking_under(a singlework_itemref ornullbetween claims). Subagents (in-sessionTaskdispatch from itd-2, named subagents likeintent-fidelity-reviewer) inherit the parent'sagent_id— they do not register independently. - Typed
work_itemclaims. The unit of coordination is a typed work item, not a file region:intent_promotion(itd-N)— exclusive. Two agents cannot promote the same intent at once.spec_task(spc-N.M)— exclusive at task granularity, not spec granularity. Agents A and B can both workspc-7if on different tasks (.2and.3); they collide only if they pick the same task.command_run(<command-id>)— exclusive per command + scope. Two simultaneousintent.shaperuns would race; this generalises the existingshape.lockpattern (and forthcomingconsistency.lock) into a typed family.- Brief and intent-draft edits are NOT claimable. The brief was deliberately split into numbered folders for concurrent editing (per
00-meta.md); ad-hoc file edits remain git-merge-mediated as today.
- Three primitives —
take,yield,escalate. Noqueue(no wake-up mechanism; polling solves the slow-work-item case); nocoordinate(contradicts the no-agent-to-agent-chat boundary). The default success path istake; the polite refusal path isyield; the human-in-the-loop path isescalate. - Cooperative-checkpoint escalation. Escalation is advisory, not mid-flight abort. When the human resolves an escalation, agents observe the resolution on their next heartbeat tick (every 30s) and complete-current-work-item-then-yield rather than mid-LLM-call termination. The human who really wants a hard stop can Ctrl-C the agent's terminal — the coordination layer does not signal processes it doesn't own.
- Escalation menu (for two agents):
{wait_then_swap, swap_now, sequence, keep_both}. Nokill agent Xoption. Three-or-more-agent conflicts decompose into N–1 pairwise escalations against the holder. - Claim lifecycle: three states.
claim.status∈{active, paused, released}. Thepausedstate interlocks with itd-29's pause/resume/rewind: paused agents keep heartbeating but theirworking_under.status = paused; resume returns toactive; rewind releases and re-acquires at the rewind target. - Bare
/abcdshows live agent activity (rendered by itd-20). itd-33 contributes three contract functions —render_coordination_status(),pending_escalations(),resolve_escalation(escalation_id, choice)— consumed by itd-20's dispatcher. itd-33 introduces NO new/abcd:coordinationnamespace and NO new sub-verbs; the human-facing verbs (bare/abcd, top-level/abcd resolve) belong to itd-20. - State storage partition. All under
.abcd/coordination/:active-work.json— local-only, gitignored. Per-machine live state. If corrupt or missing, the next agent rebuilds it (empty feed = no claims held).*.lock— local-only, gitignored.flock(2)-mediated file locks forcommand_runclaims. Existingshape.lockis the prior art.audit/<YYYY-MM-DD>.jsonl— committed. Append-only JSONL, daily UTC rotation. Cross-machine via git: line-level merges, sort by timestamp on read.- A
.abcd/coordination/.gitignoreenforces the partition (active-work.jsonand*.lockignored;audit/tracked).
- Audit-log schema (durable contract, eight event types):
agent_registered— agent process starts, first readsactive-work.json. Fields:agent_id, harness, human, started_at.take— agent acquires a clear work_item. Fields:agent_id, work_item.{type,id}, at.release— agent finishes work_item normally. Fields:agent_id, work_item.{type,id}, at, outcome ∈ {completed, abandoned}.lapsed— stale-claim sweeper auto-releases (last_heartbeat_at older than 3× heartbeat interval). Fields:agent_id, work_item.{type,id}, at, last_heartbeat_at, reason: heartbeat_lapsed.yield— agent voluntarily yields a held claim (cooperative checkpoint). Fields:agent_id, work_item.{type,id}, at, to_agent_id(if known).escalate_requested— agent invokes escalate against a held work_item. Fields:requesting_agent_id, holding_agent_id, work_item.{type,id}, escalation_id (UUID), at.escalate_resolved— human resolves an escalation. Fields:escalation_id, choice ∈ {wait_then_swap, swap_now, sequence, keep_both}, resolved_by_human, at.agent_unregistered— agent process exits cleanly. Fields:agent_id, at.- Every line carries
schema_version: 1and an ISO-8601 millisecond UTCts. Heartbeats are NOT logged (high-frequency noise; liveness lives inactive-work.json). Failedtakeattempts are NOT logged (only state-changing events appear).
- Always-on. No opt-out flag. No "single-agent mode" toggle. The cost of always-on is a few file reads/writes per work_item — invisible if no second agent ever appears, and the same-human-two-terminals case alone justifies the overhead.
What's Out of Scope
- File-level claims. Cut entirely (see "Why This Matters"). Two agents writing the same file is git-merge territory; abcd does not introduce a per-file claim protocol.
- Real-time agent-to-agent chat /
coordinateprimitive. Agents do not negotiate split/merge with each other. When two agents need to compromise, the answer isescalateto the human. queueprimitive. No wake-up mechanism exists; polling solves the slow-work-item case naturally. Add later if real collisions show queue earns its place.- Mid-flight agent abort. Escalation is cooperative-checkpoint — agents observe revocation on next heartbeat and finish-then-yield. Hard stop = Ctrl-C, not a coordination primitive.
- Authoritative shared memory across agents. Each agent retains its own context window; coordination shares which work_item is held, not thinking. Sharing thinking is itd-25 (dredge) territory.
- Substrate selection (LangGraph / CrewAI / AutoGen). None of these are needed for the narrowed scope. The contract is plain JSON files plus
flock(2)forcommand_runclaims. - Subsuming Claude Code's own subagent tool. Claude Code's
Agent/Tasktool stays the in-harness primitive; subagents inherit the parent'sagent_idrather than registering as independent agents. - Distributed-systems-grade consensus. Two agents on the same machine sharing a working tree is the hot path. Cross-machine via git is eventually consistent — sufficient.
- Permission / authorisation matrix. "Which agents can edit which files" is out of scope; coordination is about avoiding duplicate work, not enforcing policy. Permission is itd-18 territory.
- Real-time UI dashboard. Bare
/abcdis text-shaped (terminal-friendly). Graphical dashboards are a future question. - Coordination across non-abcd projects. A second project that doesn't ship abcd is invisible to this layer.
Acceptance Criteria
- Given an agent calls
take(work_item)against a project with no existing.abcd/coordination/active-work.json, when the call executes, then the file is created on first call, the claim succeeds, and anagent_registered+takepair lands in the audit log — no error, no warning, no required setup. - Given agent A holds
intent_promotion(itd-33)and is heartbeating, when agent B callstake(intent_promotion(itd-33)), then B receivescurrently-held-by-Awith A'sagent_id,human,working_under, andlast_heartbeat_atage — without any race condition resulting in two simultaneous holders. - Given agent A holds
spec_task(spc-7.2), when agent B callstake(spec_task(spc-7.3)), then the claim succeeds (task-level granularity, not spec-level) — both agents progress different tasks of the same spec concurrently. - Given agent A holds a claim and crashes (no heartbeat for >3× heartbeat interval, default 90s), when any agent next reads
active-work.jsonor attempts a conflictingtake, then the stale claim is auto-released, the next agent acquires cleanly, and alapsedaudit-log entry is written withreason: heartbeat_lapsed. - Given agent A holds a work_item and agent B requests escalation via
escalate, when the human runs bare/abcd, then the coordination section lists the escalation withescalation_id, requester, holder, work_item, and age — and the human resolves via/abcd resolve <escalation_id> <choice>(verb owned by itd-20, calling itd-33'sresolve_escalation). The agents observe the resolution on their next heartbeat tick and act according tochoice ∈ {wait_then_swap, swap_now, sequence, keep_both}. - Given the human runs bare
/abcdwhile two agents are active and no escalations are pending, when the dispatcher returns, then the coordination section is renderable in ≤5 lines listing each agent'sagent_id,harness,human,working_under, andlast_heartbeat_atage — sufficient to answer "what's running in this repo right now" without consulting any other source. - Given an autonomous run completes a work_item and exits, when the interactive user later runs bare
/abcd, then the recent-activity summary surfaces thereleaseevent withoutcome: completedand a pointer to the resulting spec, regardless of whether the interactive user was watching when the run finished. (Durability follows from the audit log being append-only and committed.) - Given an autonomous loop is
paused via itd-29's pause primitive, when another agent reads coordination state, then the loop'sclaim.statusshowspaused(notreleased); onresumeit returns toactive; onrewindthe claim is released and a freshtakehappens at the rewind target — visible as pairedrelease+takeevents in the audit log.
Revisit Triggers
This intent moves from drafts/ to planned/ when ANY of the following happens:
- First duplicate-work incident — two agents independently begin work on the same intent or spec, producing competing artefacts.
- First user reports stranded work — an agent edited files but the user couldn't reconstruct who, when, or why.
- itd-2 ships and is used in anger — once in-session subagent dispatch is real and frequent, the parent/child overlap window becomes observable. (Subagents inherit parent identity per this intent's contract; the trigger is whether parent-level multi-agent collisions become real.)
- opencode harness ships (itd-22) — multi-harness operation makes coordination's value concrete and surfaces the cross-harness contract requirements.
- Two consecutive successful multi-agent runs — proves the substrate works enough that the absence of coordination becomes the next bottleneck.
The first user to hit (1)–(2) is asked to record the texture in the .abcd/work/issues/ ledger so the design proceeds against real evidence, not guesses.
Note on the previous file-clobber trigger. An earlier draft included "first merge conflict caused by two agents editing the same file" as a trigger. That trigger has been removed: the narrowed scope (work_item claims, not file claims) makes file-level merge conflicts an out-of-scope failure mode for itd-33. They remain a real pain — but a separate intent's pain.
Open Questions
- Heartbeat interval. Recommend 30s heartbeat, 90s stale threshold (3× interval), configurable per-project. The previous draft's longer list of open questions has dissolved under the narrowed scope: substrate choice (no substrate); state-under-git partition (resolved — see "What's In Scope"); subagent identity inheritance (resolved — subagents inherit parent ID); itd-29 interaction (resolved — three-state claim); itd-2 interaction (resolved — parent inheritance); corruption recovery (
active-work.jsonis local-only and trivially regenerable); naming (coordination, withtake/yield/escalateas the primitives); cross-machine merge (JSONL line-level merge); external-agent flagging (cut with file claims).
Audit Notes
Empty. Populated by intent-fidelity-reviewer when intent moves to shipped/.
Linkage note (2026-09-30)
builds_on named itd-2 (in-session subagent dispatch), which is superseded by
itd-2609201916056194. The edge is dropped rather than relinked: the successor,
a delegated agent run through a command-line model runner, does not carry the
in-session dispatch contract this record built on, and that dispatch is standing
practice the conventions router (AGENTS.md) states. Ruling CF2 of 2026-09-30
counts a blocker kept as a discipline as settled; the run's orchestrator read
the same of a practice the router carries, so the edge has nothing left to
build on (recorded by the integration lane of autonomous run A).
References
- Adjacent intents: itd-2 (in-session subagent dispatch — subagents inherit parent identity per this intent's contract), itd-22 (opencode portability — first cross-harness consumer), itd-29 (autonomous-run resilience — three-state claim interlocks with pause/resume/rewind), itd-15 (self-dogfooded SOTA audit — must remain coordination-aware), itd-20 (top-level
/abcddispatcher — owns the human-facing render and resolve verbs that consume itd-33's three contract functions), itd-18 (permission templates — adjacent but distinct concern). - Brief contracts: glossary entries for
work_item.type, claim primitives, escalation choices,release.outcome,claim.statusregistered in02-constraints/04-naming.md(Reserved vocabulary table); audit-log path canonicalised in05-internals/04-universal-patterns.md. - Methodological precedents: file locks (
flock/fcntl); the actor model (Erlang/OTP); the autonomous run-seam pattern (single-agent today, multi-agent scaling tomorrow). The earlier draft's reference to LangGraph / CrewAI / AutoGen as substrate candidates has been dropped — the narrowed scope needs none of them.
Frontmatter
| id | itd-33 |
|---|---|
| type | intent |
| lifecycle | superseded |
| kind | standalone |
| severity | major |
.abcd/development/intents/superseded/itd-33-agent-communication-infrastructure.md
open on GitHub ↗ · commit history ↗
References3
- itd-22abcd Reaches Any Harness Through an Adaptorbuilds on
- itd-121Type The Id, Get Your Next Moveblocked by
- itd-2609201916151817One verb takes a READY intent to delivered, and refuses while a decision is openbuilds on
Referenced by3
- itd-2609091034175565Before an agent starts on an item, it reserves it on the shared remote, and everyone who works on the project sees the reservationsuperseded by
- itd-2609221656361680A managed repository reports back to abcd, and abcd says so at its next startrelated
- itd-2609221656373558Two sessions share one run, and the run measures which way of dividing the work is bestrelated
mentions32
- dcn-26092200000000042026-09-22 — Two intents the product thinker added for the autonomous run of 2026-09-23, interviewed and planned the night before (both READY, both in the run's batch 1b). A managed repository reports back to abcd (itd-2609221656361680): one verb files a written account against an abcd-issued template with a machine-readable block beside the prose, into an inbox in the user account's machine store, never in either repository's tree; abcd says at its next start how many wait and from how many repositories; a read-only verb renders them naming the sender; nothing is filed until a person or a session acts, and what is filed carries the sender's root-commit fingerprint and a generic description, never its name. Two sessions share one run (itd-2609221656373558): the second joins without a word from the first and the first never waits on it; all three division modes are tried, one per window in order (a claim per record, whole batches, build against review-and-land), because the product thinker wants each measured rather than one chosen in advance; a claim is an atomic create with a lease that lapses; the second session holds at most one lane, may never cut a release or take a lane that recalibrates the reading corpus, backs off on contention with a logged reason, and its stop conditions stop only itself; the run's report compares the three modes on lanes landed, wall clock, collisions and agent minutes. Cross-account and cross-machine agent communication stays out of the run: the four drafts (itd-33, itd-2609151838312703, itd-2609151838327688, itd-2609150819440345) get planning briefs only, with the trust question a shared mailbox raises named in the brief.
- iss-2608230847432287the adversarial-review floor assumes below-the-line artefacts are covered by their gates, and today they were not
- iss-2608230943533581itd-33's revisit triggers have fired and the coordination question owes a SOTA sweep that no record currently asks for. On 2026-08-23 several sessions ran in parallel in this repo and spent real effort coordinating rather than working: three of them landed writes in the wrong checkout when a shell cwd silently reverted from a per-agent worktree to the shared tree, and what stood between that and a bad commit was the AGENTS.md convention that a diff you did not make is a peer's work, not any mechanical property of the setup. That is itd-33's fifth revisit trigger — two consecutive successful multi-agent runs, after which the absence of coordination becomes the next bottleneck — and the intent asks in terms for exactly this texture to be recorded in the ledger so its design proceeds against real evidence rather than guesses. The accumulated evidence is now iss-213 (2026-08-11, a shared worktree and a false-green preflight spanning branch switches), iss-2608220750029992 (two sessions in one checkout, a branch switch unstaging a peer's index), iss-2608220750029993 (the session-presence lease, the armed-detector rung of the AGENTS.md conventions), iss-2608230847432285 (per-agent worktrees do not isolate a session whose cwd reverts), and the parallel-mint collisions iss-2608220150157512 and iss-2608221126066632. The gap this capture exists to close is the research one. .abcd/development/research/notes/ holds sixteen SOTA notes and not one covers multi-agent orchestration or coordination; itd-15 audits agent prompts against their research baselines, which is a different question. itd-33's own narrowing pass dropped LangGraph, CrewAI and AutoGen from its References when it cut file-level claims and substrate selection — right for that scope, but it leaves no record anywhere that a state-of-the-art sweep is owed on the topic at all, so without this entry the ask exists only in one session's transcript. The sweep should run under the protocol in .abcd/development/research/notes/2026-08-22-sota-research-protocol.md and cover at minimum what coordination substrates the field actually uses for same-machine multi-agent work on one repository, whether a claim-and-yield contract of itd-33's shape is state of the art or a local invention, how other systems make a session's tree unambiguous rather than remembered, and what the evidence says about coordination overhead against parallel throughput — the cost today's sessions paid in full. Promoting itd-33 out of drafts/ is a maintainer decision and is deliberately not taken here.
- iss-2609091037191879A release cut in progress is invisible to every other session, so a change landing on main during a cut is discovered in the changelog rather than chosen. abcd should let launch declare a cut lease that peer sessions, merges and record closes can see: a session about to merge or close a record during a lease is told which cut it would join and who is cutting, and the cutting session rules on the ordering. The convention is in AGENTS.md (concurrent sessions); this seeds the mechanical form, alongside session presence (iss-2608220750029993) and itd-33.
- iss-2609240227595724itd-33 (draft, written 2026-07-06) runs against three later rulings, which its planning interview has to settle. (1) adr-2609091248200336 (2026-09-09): agent and session state is machine-scoped under ~/.abcd/ keyed on the root commit, and the checkout holds only its declared tiers; itd-33 puts per-machine live state and locks (active-work.json, *.lock) in a new .abcd/coordination/ directory inside the checkout, which is no declared tier, beside a committed audit/ log. The shipped claim of itd-2609221656373558 already keeps its run store outside the repository. (2) The basics-plus-adapter principle (principles/basics-built-in-adapters-bring-power.md, 2026-09-15): every capability ships a basic form and offers an opt-in adapter for the full form; itd-33 is always on with no opt-out and rules out any external route, so it offers no adapter. This one is a tension in spirit: the principle's letter does not forbid an always-on basic. (3) itd-2609221656361680 Decision 4, identity in the inbox and a fingerprint in the record: anything committed carries the root-commit key and a generic description; itd-33's committed audit log names the person from git config on every agent_registered event and in resolved_by_human. Decision 4's letter governs the managed-repository reports; applying it here is by extension. The register ruling (itd-2609150819440345 Decision 1, the register is where claims live) overlaps its claim model too. Distinct from iss-2608230943533581, which asks for the coordination SOTA sweep.
- iss-2609290448510918The predecessor-store qualifier sweep reaches past the six intents iss-2609261536147903 named: outside drafts/ and those six, 192 citation sites across about forty intents name a spc-N at or below spc-70 that is not the citing intent's own spec, with no '(predecessor store)' on the line. Some are live cross-references (the cold-reading family's intents cite each other's live specs), and some are the predecessor store's (itd-4, itd-6, itd-29, itd-47 and itd-49 describe pre-rebuild work in its terms), so each site needs the same reading against the live spec it collides with; the specs charter's Two spc-N Namespaces section is the rule. Found while sweeping the pattern of iss-2609261536147903 in lane drainDrift3; a census script over intents/{planned,shipped,disciplines} reproduces the count.
- iss-2610251558434724docs/reference/terminology.md: three crosswalk positions no longer fit their own label definitions once the stale facts are corrected, and need a ruling rather than an edit. Durable execution stays WATCHING although the pacing intent (itd-2609201925079472, shipped) checkpoints lanes to their branches and abcd build resumes a run from its state file (internal/core/implement/loop/ratelimit.go:3-20, loop.go:825; internal/surface/cli/build.go:103). Agent2Agent stays WATCHING although its tracking record itd-33 is superseded by itd-2609091034175565, so no live entry tracks it as the label requires (terminology.md:13-14). Orchestration says the orchestration-substrate role is declined while abcd's own implement loop sequences a run's agents and gates each stage on its receipt (internal/core/implement/loop/budget.go:11-13).
- iss-261025221421111205-intent.md:304-310, :334, :624-648 and :657 still stage an on-demand shape verb with a flock contract; itd-48:147 gave the shape role to itd-34's kinds lint, itd-34:241 leaves it out of delivery, and :639 cites the superseded itd-33. 05-internals/01-agents.md:175 and 04-universal-patterns.md:124 repeat it.
- iss-2610252215220345Six reserved-vocabulary rows at 04-naming.md:197-202 cite itd-33 as 'a later phase', and itd-33 is superseded. claim.status 'interlocks with itd-29', which is also superseded. The shipped reservation vocabulary differs.
- iss-261025221530031304-universal-patterns.md §6 keeps superseded designs as design targets: grill/ (itd-27, superseded) at line 116, and .abcd/coordination/ (itd-33, superseded; the directory does not exist) at lines 139 and 157. Line 161 says voyage is 'tracked under the visibility rule', against 03-configuration.md:509-513 ('never committed', with nothing in-tree to ignore)
- iss-2610262031035884The register reserves 'claim' vocabulary for itd-33's later-phase coordination unit, while the implement chapter ships a different 'claim' as its unit of exclusion
- iss-2610262036565450Multi-agent claims live in-tree under `.abcd/coordination/` per the universal patterns, but in the machine-scoped run store per the implement chapter
- iss-2610262039043469itd-2610170634394993 puts agents' work claims on the shared remote; 04-universal-patterns puts multi-agent claims in .abcd/coordination/
- iss-2610262039259706The announce intent says a reservation records who owns an item, but universal patterns puts multi-agent claims in `.abcd/coordination/`
- iss-261026203959075704-universal-patterns keeps multi-agent claims in `.abcd/coordination/` with local-only state; itd-2609091034175565 makes the reservation branch on origin the one record of who holds what.
- iss-2610262044322326The worktree-block intent assigns typed claims to itd-33, but the shipped reservation intent delivered the claim
- itd-2In-Session Subagent Dispatch — the Default Host-Delegated Oracle
- itd-15abcd Audits Its Own Prompts on Every Self-Disembark
- itd-18Sensible Permissions From Day One
- itd-20`/abcd` Tells You Where You Are
- itd-25Patterns Surface Themselves
- itd-29Domain Experts Run A Spec Autonomously And Recover From Anything Without Touching Git
- itd-78abcd Knows What to Build First — Even When It's Something Small
- itd-97The Facilitator Is a Mode, Not a Person
- itd-99A Team of Product Thinkers Decides as One
- itd-100Alice Reads One Page and Knows Exactly Where abcd Stands in the Agentic-AI Landscape
- itd-148Every change starts in its own worktree in abcd's store: the primary checkout is a read-only surface, and abcd blocks mutations there for every session but a declared coordinator
- itd-2609201916056194A role runs through the command-line harness the operator chose, and every fall back to the host is recorded
- spc-7abcd-intent-quoted-text-create-symmetric
- spc-15alice-reads-one-page-and-knows-exactly-where-abcd-stands-in
- spc-33abcd-mints-collision-proof-record-ids-across-parallel-agents
- spc-42every-change-starts-in-its-own-worktree-the-primary-checkout