Spec Studio

Coordination is built on Claude Code's own messaging, and cc-agents adds only what that lacks

spec:decisions.coordination-native-firstDecision Record · featuredefined floor ready

Next rung ready: nothing blocks; it waits only for the author's statement.

Packs: none

Design: no design entries · no pinned declarations · no decisions

Findings: no errors, no warnings

specs/decisions/coordination-native-first.sdp.md

No open questions and no blocking questions; implementation binding none, verifier binding none, and expected-outcome oracle none.

Intent
outcome
Decide what sessions coordinate through once the inbox leaves infra.
Decision
context
The fleet's inbox is cmux's agent messages, a thin wrapper and a naming convention. It was chosen on 28 October because SendMessage was held across permission modes and left no record. cmux delivers only when a turn ends, so a session holding a long turn reads nothing, and it reaches no Desktop session. The cc-agents work never built coordination: its brief of 24 October names native messaging plus a tiny mod as the option to try first, and no implementation exists.
decision
Most work stays in one session with its agents and Workflows, and needs no messaging. Where work must cross a boundary inside one operating system, sessions find and message each other through Claude Code's own cross-session messaging, with every session accepting inbound messages. cc-agents adds only what that lacks: a lasting record of every message, and each session's place in a chain. Between operating systems, a message crosses through the T3 MCP route.
rationale
  • Hard to reverse: every project's coordination will rest on this, and the skills will teach it. Surprising without context: almost nothing the fleet calls the inbox gets moved, because the platform now provides it. A real trade-off: depending on one vendor's feature and its defaults, against owning a transport that delivers later and reaches less. Tested on Claude Code 2.1.314 on 30 October: with inbound messages accepted, a message arrived mid-turn in both permission pairings, a mod's send woke an idle session, and a mod saw every message on both sides. Without the setting the message was held and dropped.
alternatives
  • Keep cmux: it delivers only at a turn's end, needs a wrapper to avoid dead tabs, and ties coordination to one terminal on one operating system.
  • A local MCP service with register, list, send, inbox and wait: it keeps its own log but cannot wake an idle session.
  • Agent teams: a team belongs to one session, and agents on other harnesses cannot be teammates.
consequences
  • Accepting inbound messages is a fleet setting, so infra owns it. It widens nothing, because cmux messages already reach every permission mode.
  • The inbox wrapper, the wait loops' inbox check and the restart's queue forwarding retire with cmux delivery.
  • The M1's engineering service in OrbStack is not a native peer of HQ on bare metal. That boundary is part of HQ's isolation, so it is crossed on purpose and not closed.
  • Not measured yet: reach across machines, which native messaging routes through Remote Control, and the OrbStack boundary itself.
Verification

Verifier bindings

No verifier binding recorded.

Design view

Requirement drawing

  • Declared verifying examples: no declared verifying example.
  • Satisfying or referencing units: no recorded binding.
  • Test or oracle bindings: no recorded binding.
Requirement drawing for spec:decisions.coordination-native-first

Arrows: refines (declared).

The diagram as text
  • spec:decisions.coordination-native-first: Coordination is built on Claude Code's own messaging, and cc-agents adds only what that lacks · declared Spec
  • spec:hq.orchestration: Orchestration lives in one plugin, apart from infra and HQ · declared Spec
  • spec:decisions.coordination-native-first refines spec:hq.orchestration · declared — settles what coordination is built from once it leaves infra
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred and chosen syntax: requirementDiagram; exact refines, satisfies and verifies, with claim words in nodes and per-edge comments.

Decisions

No decision record named.

Runtime

No implementation neighborhood recorded.

Runtime observation: not tracked.

Evidence

Runtime observation: not tracked.

Build attestations: not tracked.

Deployments: not tracked.

Bills of materials: not tracked.

Impact
Relations of spec:decisions.coordination-native-first
  • E2: decidedBy · declared — settles what coordination is built from
The diagram as text
  • spec:decisions.coordination-native-first: Coordination is built on Claude Code's own messaging, and cc-agents adds only what that lacks
  • spec:hq.orchestration: Orchestration lives in one plugin, apart from infra and HQ
  • spec:decisions.coordination-native-first refines spec:hq.orchestration · declared — settles what coordination is built from once it leaves infra
  • spec:hq.orchestration decidedBy spec:decisions.coordination-native-first · declared — settles what coordination is built from
Mermaid source

Copyable source; the Studio draws static SVG.

Preferred syntax: flowchart. Chosen syntax: labelled flowchart, preserving exact relations, claims and folds.

Rests on

Rested on by

Distance 1

Distance 2

Distance 3

Distance 4

Distance 5

Distance 6

Distance 7

Distance 8

Distance 9

Relations

Relation and directionOther endClaimReasonExercised keys
refines · outgoingOrchestration lives in one plugin, apart from infra and HQ
spec:hq.orchestration · resolves
declaredsettles what coordination is built from once it leaves infraNone
decidedBy · incomingOrchestration lives in one plugin, apart from infra and HQ
spec:hq.orchestration · resolves
declaredsettles what coordination is built fromNone

Bindings

Implementation binding: none

Design reference: none

Verifier binding: none

Expected-outcome oracle: none

Runtime observation: not tracked.

Run results: not recorded in the graph.

Findings

None.

Composing (0)

Composing needs the script.