loadout-ai 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +148 -1
  2. package/README.md +160 -315
  3. package/SECURITY.md +21 -1
  4. package/catalog/discovered.json +31269 -26003
  5. package/catalog/packages.json +4 -4
  6. package/dist/src/cli.js +13 -0
  7. package/dist/src/commands/agents.js +3 -1
  8. package/dist/src/commands/catalog-candidate.js +150 -0
  9. package/dist/src/commands/catalog-workflows.js +147 -0
  10. package/dist/src/commands/catalog.js +9 -367
  11. package/dist/src/commands/coordinate.js +586 -0
  12. package/dist/src/commands/coordination-discussions.js +194 -0
  13. package/dist/src/commands/coordination-sessions.js +197 -0
  14. package/dist/src/commands/inventory.js +4 -2
  15. package/dist/src/core/agents/agent-inspection.js +26 -4
  16. package/dist/src/core/{routing → agents}/model-config.js +7 -2
  17. package/dist/src/core/catalog/catalog.js +1 -0
  18. package/dist/src/core/catalog/registry.js +44 -10
  19. package/dist/src/core/catalog/safety.js +36 -7
  20. package/dist/src/core/coordination/adapters/claude-code.js +154 -0
  21. package/dist/src/core/coordination/adapters/codex.js +137 -0
  22. package/dist/src/core/coordination/adapters/types.js +64 -0
  23. package/dist/src/core/coordination/auth.js +59 -0
  24. package/dist/src/core/coordination/bridge-lease.js +79 -0
  25. package/dist/src/core/coordination/conflict-preview.js +167 -0
  26. package/dist/src/core/coordination/contract-diff.js +106 -0
  27. package/dist/src/core/coordination/coordinator.js +552 -0
  28. package/dist/src/core/coordination/crash-recovery.js +169 -0
  29. package/dist/src/core/coordination/daemon.js +667 -0
  30. package/dist/src/core/coordination/discussion.js +340 -0
  31. package/dist/src/core/coordination/events.js +161 -0
  32. package/dist/src/core/coordination/http-api.js +118 -0
  33. package/dist/src/core/coordination/interrupt-policy.js +89 -0
  34. package/dist/src/core/coordination/lock.js +110 -0
  35. package/dist/src/core/coordination/mcp-server.js +424 -0
  36. package/dist/src/core/coordination/redaction.js +85 -0
  37. package/dist/src/core/coordination/replay.js +188 -0
  38. package/dist/src/core/coordination/retention.js +128 -0
  39. package/dist/src/core/coordination/runtime.js +21 -0
  40. package/dist/src/core/coordination/session-manager.js +366 -0
  41. package/dist/src/core/coordination/watcher.js +128 -0
  42. package/dist/src/core/{routing → delegation}/first-party-skills.js +25 -13
  43. package/dist/src/core/{routing → delegation}/handoff.js +130 -63
  44. package/dist/src/core/discovery/candidate-intelligence-evidence.js +108 -0
  45. package/dist/src/core/discovery/candidate-intelligence-types.js +1 -0
  46. package/dist/src/core/discovery/candidate-intelligence-validation.js +108 -0
  47. package/dist/src/core/discovery/candidate-intelligence.js +3 -214
  48. package/dist/src/core/discovery/community.js +12 -4
  49. package/dist/src/core/discovery/github-discovery.js +6 -2
  50. package/dist/src/core/discovery/private-discovery.js +6 -2
  51. package/dist/src/core/install/reconcile.js +1 -1
  52. package/dist/src/core/install/source.js +21 -7
  53. package/dist/src/core/install/uninstall.js +39 -3
  54. package/dist/src/core/reporting/cli-guide.js +10 -6
  55. package/dist/src/core/reporting/completion.js +61 -109
  56. package/dist/src/core/reporting/doctor.js +4 -6
  57. package/dist/src/core/runtime/bounded-json.js +65 -0
  58. package/dist/src/core/runtime/github.js +30 -16
  59. package/dist/src/core/runtime/mcp-recipes.js +1 -1
  60. package/dist/src/core/workspace/active-policy.js +1 -1
  61. package/docs/CANDIDATE_INTELLIGENCE.md +9 -2
  62. package/docs/CATALOG.md +1 -1
  63. package/docs/CREDENTIAL_AND_UPDATE_POLICY.md +1 -1
  64. package/docs/DEMO_SCRIPT.md +19 -23
  65. package/docs/DISCOVERED.md +251 -250
  66. package/docs/FEATURE_TEST_MATRIX.md +10 -263
  67. package/docs/GITHUB_AUTHORIZATION.md +5 -0
  68. package/docs/LIVE_COLLABORATION.md +234 -0
  69. package/docs/PROVENANCE_AND_COMPARISON.md +1 -1
  70. package/docs/REFERENCE.md +163 -0
  71. package/docs/RELEASE_REVIEW.md +1 -2
  72. package/docs/TESTING.md +17 -1
  73. package/docs/USER_TEST_GUIDE.md +138 -3
  74. package/docs/assets/loadout-discover-activate.webp +0 -0
  75. package/docs/assets/loadout-handoff-coordinate.webp +0 -0
  76. package/docs/assets/loadout-social-preview.png +0 -0
  77. package/docs/decisions/001-coordination-jsonl-locking.md +35 -0
  78. package/docs/decisions/002-local-daemon-authentication.md +32 -0
  79. package/docs/decisions/003-bounded-agent-discussions.md +91 -0
  80. package/docs/specs/BOUNDED_AGENT_DISCUSSIONS.md +169 -0
  81. package/docs/superpowers/plans/2026-09-03-coordination-hardening.md +231 -0
  82. package/docs/superpowers/plans/2026-09-03-release-readiness.md +232 -0
  83. package/docs/superpowers/plans/2026-09-04-bounded-agent-discussions.md +121 -0
  84. package/package.json +18 -7
  85. package/skills/loadout-handoff/SKILL.md +238 -0
  86. package/MASTER_PLAN.md +0 -2207
  87. package/dist/src/core/routing/route.js +0 -539
  88. package/docs/ACTIVE_SET.md +0 -53
  89. package/docs/COMPATIBILITY_POLICY.md +0 -22
  90. package/docs/CONVERSION_AND_SANDBOX.md +0 -27
  91. package/docs/EVALUATION_PROTOCOL_V1.md +0 -300
  92. package/docs/HEAD_TO_HEAD_EVALUATION.md +0 -79
  93. package/docs/PROVIDER_CONFIGURATION.md +0 -45
  94. package/docs/README_RESEARCH.md +0 -36
  95. package/docs/REPOSITORY_STABILIZATION.md +0 -190
  96. package/docs/SAFE_UPDATE_DEMO.md +0 -25
  97. package/docs/SCHEMA_DECISIONS.md +0 -25
  98. package/docs/SUBMISSION_COPY.md +0 -90
  99. package/docs/TEAM_POLICY.md +0 -18
  100. package/docs/assets/loadout-workflow.png +0 -0
  101. package/docs/superpowers/plans/2026-07-19-relatable-readme-hero.md +0 -283
  102. package/docs/superpowers/plans/2026-07-20-loadout-readme-explainer.md +0 -116
  103. package/docs/superpowers/plans/2026-07-20-project-activation-safety.md +0 -469
  104. package/docs/superpowers/specs/2026-07-19-relatable-readme-hero-design.md +0 -80
  105. package/docs/superpowers/specs/2026-07-20-loadout-readme-explainer-design.md +0 -55
  106. package/docs/superpowers/specs/2026-07-20-project-activation-safety-design.md +0 -228
  107. package/skills/loadout-router/SKILL.md +0 -120
  108. /package/dist/src/core/{routing → agents}/credentials.js +0 -0
@@ -0,0 +1,121 @@
1
+ # Bounded Agent Discussions Implementation Plan
2
+
3
+ > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4
+
5
+ **Goal:** Let Claude Code and Codex conduct a safe, bounded, auditable design discussion and record a final decision.
6
+
7
+ **Architecture:** Add one typed discussion event to the append-only coordination protocol and reconstruct thread state from those events. A provider-neutral orchestrator alternates two responders sequentially, while a thin Commander module starts or resumes concrete Claude/Codex sessions and enforces the paid-turn budget before any turn.
8
+
9
+ **Tech Stack:** TypeScript, Commander, Zod, Vitest, existing provider adapters and JSONL coordination store.
10
+
11
+ ## Global constraints
12
+
13
+ - Exactly two participants and 1-8 rounds in the MVP.
14
+ - Required provider turns are `rounds * 2 + 1` and may never exceed `--max-turns`.
15
+ - Only explicit design-room responses are persisted; private reasoning is never requested or stored.
16
+ - Discussion prompts prohibit edits and command execution.
17
+ - Every provider turn is preceded by a kill-switch check.
18
+ - No new dependency.
19
+
20
+ ---
21
+
22
+ ### Task 1: Define the discussion protocol and state reader
23
+
24
+ **Files:**
25
+
26
+ - Modify: `src/core/coordination/events.ts`
27
+ - Create: `src/core/coordination/discussion.ts`
28
+ - Test: `tests/coordination-discussion.test.ts`
29
+
30
+ **Interfaces:**
31
+
32
+ - Produces: `discussionPayloadSchema`, `DiscussionPayload`,
33
+ `listDiscussions(projectRoot)`, and `getDiscussion(projectRoot, threadId)`.
34
+
35
+ - [ ] Write schema/state tests for strict kinds, bounds, reply IDs, bounded lists,
36
+ and reconstruction from real coordination events.
37
+ - [ ] Run `npx vitest run tests/coordination-discussion.test.ts` and confirm the
38
+ missing exports fail.
39
+ - [ ] Add the event schema and minimal state reader.
40
+ - [ ] Re-run the focused test until green.
41
+
42
+ ### Task 2: Implement the provider-neutral bounded orchestrator
43
+
44
+ **Files:**
45
+
46
+ - Modify: `src/core/coordination/discussion.ts`
47
+ - Modify: `src/core/coordination/adapters/types.ts`
48
+ - Test: `tests/coordination-discussion.test.ts`
49
+ - Test: `tests/coordination-adapters.test.ts`
50
+
51
+ **Interfaces:**
52
+
53
+ - Consumes: `emit(projectRoot, EmitOptions)` and participant `respond(prompt)`.
54
+ - Produces: `runDiscussion(projectRoot, options): Promise<DiscussionResult>` and
55
+ public transcript formatting.
56
+
57
+ - [ ] Write failing tests for alternating turns, reply chains, safe prompts,
58
+ exact turn counts, final synthesis, provider rejection, and kill switch.
59
+ - [ ] Run the focused tests and confirm behavioral failures.
60
+ - [ ] Implement the minimum sequential orchestration and discussion formatting.
61
+ - [ ] Re-run the focused suites until green.
62
+
63
+ ### Task 3: Add the public CLI and provider-session bridge
64
+
65
+ **Files:**
66
+
67
+ - Create: `src/commands/coordination-discussions.ts`
68
+ - Modify: `src/commands/coordinate.ts`
69
+ - Modify: `src/core/coordination/session-manager.ts`
70
+ - Test: `tests/coordination-session-commands.test.ts`
71
+ - Test: `tests/coordination-discussion.test.ts`
72
+
73
+ **Interfaces:**
74
+
75
+ - Produces: `parseDiscussionAgents`, `parseDiscussionSessions`,
76
+ `registerCoordinationDiscussions`, and a SessionManager-backed responder.
77
+
78
+ - [ ] Write failing parser and provider-composition tests.
79
+ - [ ] Reject invalid rounds, insufficient budgets, duplicate providers, and
80
+ simultaneous `--agents`/`--sessions` before starting a provider session.
81
+ - [ ] Implement `start`, `list`, and `show` with JSON output.
82
+ - [ ] Run CLI and discussion focused suites until green.
83
+
84
+ ### Task 4: Integrate visibility and documentation
85
+
86
+ **Files:**
87
+
88
+ - Modify: `src/core/coordination/replay.ts`
89
+ - Modify: `src/core/coordination/interrupt-policy.ts`
90
+ - Modify: `README.md`
91
+ - Modify: `docs/LIVE_COLLABORATION.md`
92
+ - Modify: `docs/USER_TEST_GUIDE.md`
93
+ - Create: `docs/decisions/003-bounded-agent-discussions.md`
94
+ - Test: `tests/coordination-replay.test.ts`
95
+ - Test: `tests/coordination-interrupt-policy.test.ts`
96
+ - Test: `tests/readme-product-flow.test.ts`
97
+
98
+ **Interfaces:**
99
+
100
+ - Consumes: additive `discussion` events.
101
+ - Produces: readable replay, safe-boundary delivery, and copy-paste user flows.
102
+
103
+ - [ ] Write failing formatting/policy/docs assertions.
104
+ - [ ] Add replay and injection visibility without changing existing semantics.
105
+ - [ ] Record why the design is bounded, sequential, and local-first.
106
+ - [ ] Run focused tests until green.
107
+
108
+ ### Task 5: Release-quality verification and review
109
+
110
+ **Files:**
111
+
112
+ - Modify: `CHANGELOG.md`
113
+ - Modify: `tasks/plan.md`
114
+ - Modify: `tasks/todo.md`
115
+
116
+ - [ ] Run `npx vitest run 'tests/coordination*.test.ts'`.
117
+ - [ ] Run `npm run verify:full` and inspect every exit code and test count.
118
+ - [ ] Run `git diff --check`, inspect the complete diff for correctness,
119
+ readability, architecture, security, and performance, and fix findings.
120
+ - [ ] Update the 0.9.0 changelog and task checklist with the verified behavior.
121
+ - [ ] Commit atomically and push the feature branch; do not tag or publish npm.
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "loadout-ai",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
- "description": "Universal upgrade manager for AI coding agents",
6
+ "description": "The package manager for AI coding agent extensions",
7
7
  "type": "module",
8
8
  "bin": {
9
9
  "loadout": "dist/src/cli.js"
@@ -15,7 +15,6 @@
15
15
  "docs",
16
16
  "README.md",
17
17
  "CHANGELOG.md",
18
- "MASTER_PLAN.md",
19
18
  "SECURITY.md",
20
19
  "LICENSE"
21
20
  ],
@@ -32,10 +31,16 @@
32
31
  },
33
32
  "keywords": [
34
33
  "ai-agents",
34
+ "agent-skills",
35
+ "ai-coding",
35
36
  "codex",
36
37
  "claude-code",
38
+ "cursor",
39
+ "gemini-cli",
37
40
  "mcp",
38
- "skills"
41
+ "skills",
42
+ "developer-tools",
43
+ "model-context-protocol"
39
44
  ],
40
45
  "engines": {
41
46
  "node": ">=20"
@@ -57,6 +62,7 @@
57
62
  "test:e2e:readme": "node scripts/readme-product-flow.mjs",
58
63
  "test:package": "node scripts/package-smoke.mjs",
59
64
  "pretest:performance": "npm run build",
65
+ "test:coverage": "vitest run --coverage",
60
66
  "test:performance": "node scripts/scan-benchmark.mjs",
61
67
  "typecheck": "tsc -p tsconfig.json --noEmit",
62
68
  "readme:update": "node scripts/update-readme-facts.mjs",
@@ -65,19 +71,24 @@
65
71
  "check:live": "node scripts/check-live-evidence.mjs",
66
72
  "check:allowlists": "npm run build && node scripts/check-mode-allowlists.mjs",
67
73
  "check:catalog-freshness": "npm run build && node scripts/check-catalog-freshness.mjs",
68
- "check:evidence": "node scripts/check-catalog-attribution.mjs && node scripts/check-discovery-artifacts.mjs && npm run check:readme-claims",
69
- "verify": "npm run format:check && npm run lint && npm run typecheck && npm run check:evidence && npm test -- --run && npm run test:e2e:cli && npm run test:e2e:readme && npm run test:package && npm run test:performance",
70
- "verify:full": "npm run verify"
74
+ "check:audit": "npm audit --audit-level=high",
75
+ "check:evidence": "node scripts/check-catalog-attribution.mjs && node scripts/check-discovery-artifacts.mjs && node scripts/check-documented-commands.mjs && npm run check:readme-claims",
76
+ "verify": "npm run format:check && npm run lint && npm run typecheck && npm run check:audit && npm run check:evidence && npm test -- --run && npm run test:e2e:cli && npm run test:e2e:readme && npm run test:package && npm run test:performance",
77
+ "verify:full": "npm run verify && npm run test:coverage"
71
78
  },
72
79
  "dependencies": {
80
+ "@modelcontextprotocol/sdk": "^1.30.0",
81
+ "@openai/codex-sdk": "^0.153.2",
73
82
  "commander": "^12.1.0",
74
83
  "zod": "^4.4.3"
75
84
  },
76
85
  "devDependencies": {
77
86
  "@eslint/js": "^9.39.5",
78
87
  "@types/node": "^22.10.0",
88
+ "@vitest/coverage-v8": "^4.1.10",
79
89
  "eslint": "^9.39.5",
80
90
  "eslint-config-prettier": "^10.1.8",
91
+ "globals": "^17.12.0",
81
92
  "prettier": "^3.9.5",
82
93
  "tsx": "^4.19.2",
83
94
  "typescript": "^5.7.2",
@@ -0,0 +1,238 @@
1
+ ---
2
+ name: loadout-handoff
3
+ description: Pass coding work between Claude Code and Codex, check the other agent's work, coordinate simultaneous implementation, or run a bounded two-agent design discussion. Use for delegation, pending handoffs, shared contracts and file ownership, or when the user wants both agents to debate an approach before coding.
4
+ ---
5
+
6
+ # Loadout Handoff
7
+
8
+ Claude Code and Codex cannot see each other. Loadout gives them a shared,
9
+ append-only task log in the repository so work can pass between them.
10
+
11
+ ## Prerequisite
12
+
13
+ ```bash
14
+ loadout --version
15
+ ```
16
+
17
+ If that fails, tell the user to install it (`npm install --global loadout-ai`)
18
+ and stop.
19
+
20
+ ## Check your inbox
21
+
22
+ At the start of a session, and after finishing a task, run only the command for
23
+ the current agent:
24
+
25
+ ```bash
26
+ # When you are running in Codex
27
+ loadout handoff codex
28
+
29
+ # When you are running in Claude Code
30
+ loadout handoff claude-code
31
+ ```
32
+
33
+ If tasks are listed, work them in order and run the `loadout handoff --done <id>`
34
+ command printed with each one. If nothing is pending, say nothing about it and
35
+ carry on — do not narrate an empty inbox.
36
+
37
+ Read the `context` line carefully. It is the only thing the sender chose to
38
+ carry across; the rest of their conversation is not available to you.
39
+
40
+ ## Send a task
41
+
42
+ ```bash
43
+ loadout handoff codex "write vitest coverage for src/auth.ts" --context "zod schemas already exist, stripe v16"
44
+ ```
45
+
46
+ One command. It creates the log on first use and adds a short block to
47
+ `CLAUDE.md` and `AGENTS.md` telling each agent to check its inbox.
48
+
49
+ **Write the context as if the receiver knows nothing about this conversation,
50
+ because it does not.** Include:
51
+
52
+ - the files involved, by path
53
+ - decisions already made, so they are not relitigated
54
+ - what you deliberately left out and why
55
+ - how to tell the work is finished
56
+
57
+ A task with no context usually comes back wrong or gets redone.
58
+
59
+ ## When to suggest a handoff
60
+
61
+ Delegating has a real cost: the other agent starts cold and the user has to
62
+ switch windows. It is worth it when:
63
+
64
+ - the work is genuinely separable, like tests for code that is already written
65
+ - a second opinion matters more than continuity, such as reviewing a change you
66
+ authored
67
+ - the user has said they want to spread work across their two subscriptions
68
+
69
+ It is not worth it for something you could finish in the next few minutes.
70
+
71
+ ## Confirm before sending
72
+
73
+ Sending writes to a shared file in the user's repository. Confirm first unless
74
+ they asked for the handoff themselves.
75
+
76
+ ## Seeing everything
77
+
78
+ ```bash
79
+ loadout handoff # every pending task, both directions
80
+ loadout handoff --done 4f2a1c
81
+ ```
82
+
83
+ If the log reports unreadable lines, tell the user which line numbers — the log
84
+ is append-only and a partial write can leave one corrupt entry. The remaining
85
+ messages are still shown.
86
+
87
+ ## Live coordination (automatic)
88
+
89
+ When the user says both agents are working simultaneously (e.g. "Claude does
90
+ backend, Codex does frontend"), **you handle coordination automatically**. The
91
+ user should never have to type `loadout coord` commands — that is your job.
92
+
93
+ ### At session start — check for updates
94
+
95
+ Use the current agent id in every command: `claude-code` inside Claude Code and
96
+ `codex` inside Codex.
97
+
98
+ ```bash
99
+ loadout coord snapshot <current-agent> --json
100
+ ```
101
+
102
+ If there are unacknowledged events (contracts, decisions, ownership claims from
103
+ the other agent), read them, incorporate them into your work, and acknowledge:
104
+
105
+ ```bash
106
+ loadout coord ack <current-agent> <seq>
107
+ ```
108
+
109
+ Tell the user briefly what the other agent has been doing: "Codex published
110
+ auth-api rev2 — I'll build against that contract."
111
+
112
+ ### When you start working on files — claim ownership
113
+
114
+ Before writing to files, claim them so the other agent knows not to touch them:
115
+
116
+ ```bash
117
+ loadout coord own <current-agent> src/api/ src/db/ --json
118
+ ```
119
+
120
+ If there's a conflict (other agent already owns those paths), tell the user and
121
+ ask how to proceed. Do not silently overwrite another agent's work.
122
+
123
+ ### When you create or change an API/schema/interface — publish a contract
124
+
125
+ Whenever you create or modify something the other agent depends on (API
126
+ endpoints, database schemas, TypeScript interfaces, environment variables),
127
+ publish it:
128
+
129
+ ```bash
130
+ loadout coord contract auth-api --body "export interface AuthAPI {
131
+ login(credentials: LoginRequest): Promise<Session>;
132
+ logout(sessionId: string): Promise<void>;
133
+ refresh(token: string): Promise<Session>;
134
+ }" --format typescript --agent <current-agent>
135
+ ```
136
+
137
+ The revision auto-increments. The other agent sees it on their next check.
138
+
139
+ ### When you finish a chunk of work — report progress
140
+
141
+ ```bash
142
+ loadout coord update <current-agent> --note "Auth endpoints done, rate limiting added" --files src/api/auth.ts src/api/middleware.ts --next "Starting payment integration"
143
+ ```
144
+
145
+ Release exact paths when you are finished with them so ownership does not stay
146
+ stale:
147
+
148
+ ```bash
149
+ loadout coord release <current-agent> src/api/ src/db/
150
+ ```
151
+
152
+ ### When you make a design decision — record it
153
+
154
+ ```bash
155
+ loadout coord decide <current-agent> "Use JWT for session tokens" --rationale "Stateless, works across services, Codex frontend can decode without API call"
156
+ ```
157
+
158
+ ### When the user asks what the other agent is doing
159
+
160
+ ```bash
161
+ loadout coord snapshot <current-agent>
162
+ ```
163
+
164
+ This shows pending tasks, active contracts, file ownership, recent decisions,
165
+ and unacknowledged events in one bounded summary.
166
+
167
+ ## Live daemon mode
168
+
169
+ If the user starts `loadout daemon start`, dashboards and custom clients can
170
+ observe the local event stream via authenticated SSE:
171
+
172
+ - Open the authenticated dashboard URL printed by the command.
173
+ - REST and SSE require a bearer token; query-string tokens are rejected.
174
+ - The dashboard observes events. It does not inject them into an agent session.
175
+
176
+ All write paths redact secret-like data at the shared storage boundary.
177
+
178
+ ## Provider bridge mode (opt-in)
179
+
180
+ ### Debate one design before coding
181
+
182
+ When the user explicitly asks Claude Code and Codex to compare approaches on
183
+ the same feature before either agent writes code, offer a bounded discussion:
184
+
185
+ ```bash
186
+ loadout coord discuss start "REST or GraphQL for checkout?" \
187
+ --agents claude-code,codex --rounds 2 --max-turns 5
188
+ ```
189
+
190
+ Use `--proposer codex` to swap roles, or reuse explicit sessions with
191
+ `--sessions claude-code:<session-id> codex:<thread-id>`. Each round gives both
192
+ agents one turn and the final synthesis uses one more turn. Tell the user the
193
+ exact number of paid provider turns. Do not start without an explicit user request.
194
+
195
+ The design room records only responses produced for that public discussion.
196
+ It tells both agents not to edit files, run commands, use tools, or reveal
197
+ private reasoning. Review the final decision with the user before claiming
198
+ ownership or beginning implementation. Inspect it later with
199
+ `loadout coord discuss show <thread-id>`.
200
+
201
+ ### Route implementation events
202
+
203
+ When the user explicitly wants automatic follow-up turns, they can run:
204
+
205
+ ```bash
206
+ loadout coord agents detect
207
+ loadout coord agents bridge claude-code:<session-id> codex:<thread-id>
208
+ ```
209
+
210
+ The bridge uses supported provider interfaces and delivers relevant events at
211
+ safe turn boundaries. It cannot steer a turn already in progress. Progress
212
+ updates are passive by default, one bridge may own a project, and automatic
213
+ turns stop after 20 per session unless the user changes `--max-turns`. Starting,
214
+ attaching, sending, or bridging provider sessions can consume the user's
215
+ provider quota, so do not do it without an explicit request.
216
+
217
+ ## What this is not (without the provider bridge)
218
+
219
+ Without a provider bridge, the other agent is **not given a new turn
220
+ automatically**. The daemon can receive events instantly, but an agent sees them
221
+ when it next checks its MCP tools, snapshot, or subscription. If the user needs
222
+ work now, tell them to open the other agent or explicitly start a bridge.
223
+
224
+ ## Summary of when to run what
225
+
226
+ | Moment | What to run |
227
+ | ------------------------------------------ | ------------------------------------------------------------------- |
228
+ | Session start | `loadout handoff <agent>` + `loadout coord snapshot <agent> --json` |
229
+ | Before writing files | `loadout coord own <agent> <paths...>` |
230
+ | Created/changed an API or schema | `loadout coord contract <name> --body "..." --agent <agent>` |
231
+ | Finished a chunk of work | `loadout coord update <agent> --note "..." --files "..."` |
232
+ | Finished writing owned paths | `loadout coord release <agent> <paths...>` |
233
+ | Made a design decision | `loadout coord decide <agent> "<title>" --rationale "..."` |
234
+ | Both agents should compare a design | `loadout coord discuss start "<topic>" --agents claude-code,codex` |
235
+ | After reading other agent's events | `loadout coord ack <agent> <seq>` |
236
+ | User asks "what is the other agent doing?" | `loadout coord snapshot <agent>` |
237
+ | Delegating a task | `loadout handoff <other-agent> "<task>" --context "..."` |
238
+ | Task complete | `loadout handoff --done <id>` |