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,163 @@
1
+ # Loadout Reference
2
+
3
+ Detailed configuration, profiles, integrations, and discovery documentation.
4
+ For the quick start, see the [README](../README.md).
5
+
6
+ ## Profiles
7
+
8
+ Loadout is opinionated when you want it to be and precise when you do not. The
9
+ modes differ in one thing: how much of the reviewed catalog they install.
10
+
11
+ | Mode | Sources | Skills | Active by default |
12
+ | --------- | --------------------- | ------ | -------------------------------- |
13
+ | `stable` | 4 | 30 | yes — recommended starting point |
14
+ | `power` | 8 | 56 | yes |
15
+ | `maximum` | all reviewed | all | **no — downloaded but disabled** |
16
+ | `custom` | your `--package` list | varies | yes |
17
+
18
+ **Maximum is the one worth understanding.** It downloads the entire reviewed
19
+ library and leaves every skill _disabled_. Nothing reaches an agent prompt until
20
+ a project activates what it needs:
21
+
22
+ ```bash
23
+ loadout setup --mode maximum --yes
24
+ cd ~/code/my-app
25
+ loadout optimize --project . # scans the repo, proposes an active set
26
+ loadout activate # enable just those here
27
+ ```
28
+
29
+ That trade is deliberate: disk is cheap and context is not. A large disabled
30
+ library plus a small active set beats installing everything into every prompt.
31
+
32
+ ### Stable: the essentials
33
+
34
+ Stable is the recommended daily driver: **30 selected skill directories from four
35
+ pinned public sources**, installed into each agent you choose.
36
+
37
+ | Included source | What Stable takes from it | GitHub |
38
+ | ---------------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
39
+ | [Superpowers](https://github.com/obra/superpowers) | Planning, execution, testing, review, verification | [![GitHub stars](https://img.shields.io/github/stars/obra/superpowers?style=flat&label=stars)](https://github.com/obra/superpowers) |
40
+ | [Context7](https://github.com/upstash/context7) | Current documentation and MCP workflows | [![GitHub stars](https://img.shields.io/github/stars/upstash/context7?style=flat&label=stars)](https://github.com/upstash/context7) |
41
+ | [Addy Osmani Agent Skills](https://github.com/addyosmani/agent-skills) | Engineering, frontend, debugging, performance, docs, shipping | [![GitHub stars](https://img.shields.io/github/stars/addyosmani/agent-skills?style=flat&label=stars)](https://github.com/addyosmani/agent-skills) |
42
+ | [Agent Skills Marketplace](https://github.com/wshobson/agents) | Architecture, review, error handling, JavaScript, Python | [![GitHub stars](https://img.shields.io/github/stars/wshobson/agents?style=flat&label=stars)](https://github.com/wshobson/agents) |
43
+
44
+ ```bash
45
+ loadout setup --mode stable
46
+ loadout setup --mode stable --yes
47
+ ```
48
+
49
+ ### Power: a larger cross-project toolkit
50
+
51
+ Power draws a skill-level allowlist from eight major collections.
52
+
53
+ | Included source | Focus | GitHub |
54
+ | ------------------------------------------------------------------------ | --------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
55
+ | [Anthropic Skills](https://github.com/anthropics/skills) | Documents, frontend, MCP building, web testing | [![GitHub stars](https://img.shields.io/github/stars/anthropics/skills?style=flat&label=stars)](https://github.com/anthropics/skills) |
56
+ | [OpenAI Skills](https://github.com/openai/skills) | CLI, docs, browser work, images, security | [![GitHub stars](https://img.shields.io/github/stars/openai/skills?style=flat&label=stars)](https://github.com/openai/skills) |
57
+ | [Vercel Agent Skills](https://github.com/vercel-labs/agent-skills) | React, web design, composition, deployment | [![GitHub stars](https://img.shields.io/github/stars/vercel-labs/agent-skills?style=flat&label=stars)](https://github.com/vercel-labs/agent-skills) |
58
+ | [Superpowers](https://github.com/obra/superpowers) | Planning, debugging, testing, collaboration | [![GitHub stars](https://img.shields.io/github/stars/obra/superpowers?style=flat&label=stars)](https://github.com/obra/superpowers) |
59
+ | [UI UX Pro Max](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) | UI systems, slides, styling, product design | [![GitHub stars](https://img.shields.io/github/stars/nextlevelbuilder/ui-ux-pro-max-skill?style=flat&label=stars)](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) |
60
+ | [Context7](https://github.com/upstash/context7) | Current documentation and MCP workflows | [![GitHub stars](https://img.shields.io/github/stars/upstash/context7?style=flat&label=stars)](https://github.com/upstash/context7) |
61
+ | [Agent Skills Marketplace](https://github.com/wshobson/agents) | Architecture, testing, APIs, TypeScript, Python | [![GitHub stars](https://img.shields.io/github/stars/wshobson/agents?style=flat&label=stars)](https://github.com/wshobson/agents) |
62
+ | [Awesome Copilot](https://github.com/github/awesome-copilot) | Codebase knowledge, plans, browser and security workflows | [![GitHub stars](https://img.shields.io/github/stars/github/awesome-copilot?style=flat&label=stars)](https://github.com/github/awesome-copilot) |
63
+
64
+ ```bash
65
+ loadout setup --mode power
66
+ ```
67
+
68
+ ### Maximum: download broadly, activate intelligently
69
+
70
+ Downloads every non-archived, technically screened skill component into
71
+ Loadout's **disabled local library**. Then let the current project choose:
72
+
73
+ ```bash
74
+ loadout setup --mode maximum
75
+ loadout recommend --project .
76
+ loadout optimize --project . --limit 30
77
+ loadout optimize --project . --limit 30 --yes
78
+ ```
79
+
80
+ ### Custom: take exact control
81
+
82
+ ```bash
83
+ # Replace the managed profile
84
+ loadout setup --mode custom --package superpowers --package context7
85
+
86
+ # Add without replacing
87
+ loadout install --mode custom --package humanizer
88
+ loadout install --mode custom --package obsidian-skills --agents claude-code,cursor
89
+ ```
90
+
91
+ Run `loadout profiles` to compare every mode.
92
+
93
+ ## MCP integrations
94
+
95
+ Profiles never start MCP servers silently.
96
+
97
+ ```bash
98
+ loadout mcp-recipe # list recipes
99
+ loadout mcp-recipe --credential-free # no-credential subset
100
+ loadout mcp-recipe playwright --agent claude-code # preview
101
+ loadout mcp-recipe playwright --agent claude-code --yes # configure
102
+ loadout mcp-recipe playwright --agent claude-code --verify # test
103
+ ```
104
+
105
+ Configuration alone does not start the server. Test a real connection separately
106
+ with `--connect --approve-risk`. Loadout can reference credentials from environment
107
+ variables or the OS keychain without printing their values.
108
+
109
+ ## Optional runtime tools
110
+
111
+ [Graphify](https://github.com/Graphify-Labs/graphify) is an optional codebase graph
112
+ tool. It does not require an LLM API key:
113
+
114
+ ```bash
115
+ loadout tool graphify
116
+ loadout tool graphify --yes --approve-risk
117
+ loadout tool graphify --remove --yes --approve-risk
118
+ ```
119
+
120
+ Executable tools remain an explicit choice instead of hiding inside a profile.
121
+
122
+ ## Catalog and discovery
123
+
124
+ The catalog is not a frozen list. Loadout separates **discovery** from
125
+ **installation** so a viral repo can be noticed quickly without being trusted
126
+ blindly.
127
+
128
+ ```bash
129
+ loadout discover --source all --queue # find candidates
130
+ loadout review-queue # inspect the queue
131
+ loadout candidate inspect owner/repository # deep inspection
132
+ loadout update # check for source changes
133
+ loadout health --updates # managed source health
134
+ ```
135
+
136
+ Daily checks are opt-in and read-only:
137
+
138
+ ```bash
139
+ loadout autopilot --yes
140
+ loadout autopilot --status
141
+ ```
142
+
143
+ ## Manage skills you already have
144
+
145
+ ```bash
146
+ loadout scan # read-only inventory
147
+ loadout reconcile --refresh # compare with catalog
148
+ loadout reconcile --yes # record ownership for exact matches
149
+ loadout reconcile --replace-outdated # preview replacing old copies
150
+ ```
151
+
152
+ Unknown or ambiguous copies stay untouched.
153
+
154
+ ## Agent support
155
+
156
+ Loadout's adapter capability matrix covers **12 agents**: Claude Code, Cline,
157
+ Codex, Cursor, Gemini CLI, GitHub Copilot, Hermes, Junie, Kiro CLI, OpenCode,
158
+ Roo Code, Windsurf.
159
+
160
+ See the [complete feature matrix](./FEATURE_TEST_MATRIX.md) for configured
161
+ paths, filesystem lifecycle, platform, and native-host evidence.
162
+
163
+ Use `loadout doctor --verbose` for the local component matrix.
@@ -19,10 +19,9 @@ For current behavior and evidence, use:
19
19
  catalog/support facts;
20
20
  - the [changelog](../CHANGELOG.md) for released behavior;
21
21
  - the [feature test matrix](./FEATURE_TEST_MATRIX.md) for adapter evidence;
22
- - the [repository stabilization record](./REPOSITORY_STABILIZATION.md) and
23
22
  [sanitized July 19 live checks](./evidence/live-checks-2026-07-19.json) only when
24
23
  investigating that historical release line.
25
24
 
26
- The current release gate is `npm run verify`. Publication status must be checked
25
+ The current release gate is `npm run verify:full`. Publication status must be checked
27
26
  against the npm registry and the corresponding GitHub release rather than inferred
28
27
  from this archived document.
package/docs/TESTING.md CHANGED
@@ -68,7 +68,23 @@ checks the current pinned Stable sources and remains network-dependent.
68
68
 
69
69
  Run `npm run verify` for formatting, lint, types, deterministic evidence checks, all
70
70
  Vitest suites, both CLI journeys, package smoke, and the performance gate.
71
- `npm run verify:full` is retained as an alias for the same complete CLI gate.
71
+ Run `npm run verify:full` before a release; it runs that gate and then enforces
72
+ the global and security-sensitive per-file coverage floors.
73
+
74
+ The coordination suites exercise the protocol separately from paid providers:
75
+
76
+ ```bash
77
+ npx vitest run 'tests/coordination*.test.ts'
78
+ npm run test:package
79
+ ```
80
+
81
+ They cover cross-process ordering, ownership/revision conflicts, redaction,
82
+ retention and recovery, daemon authentication, MCP framing, provider command/SDK
83
+ shapes, automatic watcher delivery, passive interrupt policy, singleton bridge
84
+ ownership, bounded two-agent discussion turns and reply chains, leases, and
85
+ runaway-turn limits. Fake provider drivers are used for deterministic
86
+ tests; the suite does not spend Claude or Codex quota. Follow the disposable
87
+ manual flow in `docs/USER_TEST_GUIDE.md` for an intentional real-host test.
72
88
 
73
89
  Current npm publication, the current pinned Stable repositories, and GitHub repository
74
90
  settings are external state. Check them separately with:
@@ -192,7 +192,142 @@ GitHub token; use `loadout mcp-recipe --credential-free` to exclude every servic
192
192
  credential too. Browser configuration and real connection testing remain explicit.
193
193
  Graphify is a separate runtime tool, not an MCP server.
194
194
 
195
- ## 8. Preview complete cleanup
195
+ ## 8. Test handoff and live coordination in a disposable repository
196
+
197
+ Create a temporary Git repository so the test does not add handoff files to a
198
+ real project:
199
+
200
+ ```bash
201
+ mkdir loadout-coordination-test
202
+ cd loadout-coordination-test
203
+ git init
204
+ ```
205
+
206
+ First test the stable session-boundary inbox:
207
+
208
+ ```bash
209
+ loadout handoff codex "Implement the frontend" --context "Claude owns src/api; consume checkout-api"
210
+ loadout handoff codex
211
+ loadout handoff
212
+ ```
213
+
214
+ Copy the task ID printed by the inbox, then settle it:
215
+
216
+ ```bash
217
+ loadout handoff --done <task-id>
218
+ loadout handoff codex
219
+ ```
220
+
221
+ Next test structured coordination without running either model:
222
+
223
+ ```bash
224
+ loadout coord own claude-code src/api
225
+ loadout coord own codex src/web
226
+ loadout coord contract checkout-api --agent claude-code \
227
+ --body "POST /api/checkout -> 201 { id: string }"
228
+ loadout coord snapshot codex
229
+ loadout coord ack codex 2
230
+ loadout coord status
231
+ loadout coord replay
232
+ ```
233
+
234
+ Sequence numbers are printed by each command; use the actual latest relevant
235
+ sequence if it differs from `2`. Confirm that the first overlapping exclusive
236
+ claim is refused, then release the original path and confirm the retry succeeds:
237
+
238
+ ```bash
239
+ loadout coord own codex src/api/checkout.ts
240
+ loadout coord release claude-code src/api
241
+ loadout coord own codex src/api/checkout.ts
242
+ ```
243
+
244
+ Test the authenticated live dashboard in one terminal:
245
+
246
+ ```bash
247
+ loadout daemon start
248
+ ```
249
+
250
+ Open the exact dashboard URL it prints. In a second terminal, run another
251
+ `loadout coord update` and confirm it appears. A bare `/api/status` request
252
+ without the bearer token should return `401`. Press Ctrl+C in the daemon
253
+ terminal when finished.
254
+
255
+ Test the packaged MCP transport without changing either agent's configuration:
256
+
257
+ ```bash
258
+ loadout serve
259
+ ```
260
+
261
+ The process waits for MCP JSON-RPC on stdin and should print no banners or prose
262
+ to stdout. Press Ctrl+C. Host-specific configuration and the exact tool list are
263
+ in [the live coordination guide](./LIVE_COLLABORATION.md).
264
+
265
+ Finally, inspect the provider bridge surface:
266
+
267
+ ```bash
268
+ loadout coord agents detect
269
+ loadout coord agents list
270
+ loadout coord agents bridge --help
271
+ ```
272
+
273
+ The next commands run real provider turns and may consume Claude/Codex quota.
274
+ Only run them when you intentionally want that test:
275
+
276
+ ```bash
277
+ loadout coord agents start claude-code "Claim backend files and publish a test contract"
278
+ loadout coord agents start codex "Read the shared snapshot and acknowledge the contract"
279
+ loadout coord agents bridge claude-code:<session-id> codex:<thread-id> --max-turns 4
280
+ ```
281
+
282
+ While the bridge runs, publish a new contract from another terminal. Confirm
283
+ both provider sessions can proceed concurrently and that the bridge prints
284
+ their responses. Progress-only `update` events remain passive by default. Use
285
+ Ctrl+C to stop the bridge. Activate `loadout daemon kill "user test"` to verify
286
+ that new coordination writes and provider turns stop, then run
287
+ `loadout daemon resume`.
288
+
289
+ Now test an actual back-and-forth design discussion. This spends exactly three
290
+ provider turns: one Claude proposal, one Codex critique, and one Claude
291
+ synthesis. Neither agent should edit the disposable repository.
292
+
293
+ ```bash
294
+ loadout coord discuss start "Should this test service expose REST or GraphQL?" \
295
+ --agents claude-code,codex \
296
+ --rounds 1 \
297
+ --max-turns 3 \
298
+ --timeout 120
299
+ ```
300
+
301
+ Confirm all of the following before publishing:
302
+
303
+ 1. stderr announces exactly three paid provider turns before either provider
304
+ runs;
305
+ 2. Claude Code proposes a design and Codex directly critiques that proposal;
306
+ 3. Claude's synthesis names a decision, rationale, alternatives, and any
307
+ unresolved disagreement;
308
+ 4. `loadout coord discuss list` reports the thread as `closed`;
309
+ 5. `loadout coord discuss show <thread-id>` shows the linked public transcript;
310
+ 6. `loadout coord replay` includes the discussion and the resulting decision;
311
+ 7. `git status --short` shows that neither agent edited a project file.
312
+
313
+ Repeat with known real session IDs to validate resumption:
314
+
315
+ ```bash
316
+ loadout coord discuss start "What validation boundary should this service use?" \
317
+ --sessions claude-code:<session-id> codex:<thread-id> \
318
+ --rounds 1 --max-turns 3
319
+ ```
320
+
321
+ For the kill-switch check, start a two-round discussion in one terminal and run
322
+ `loadout daemon kill "stop design room"` in another while the first provider
323
+ turn is active. The in-flight provider may finish, but its response must not be
324
+ persisted and Codex must not receive the next turn. Run `loadout daemon resume`
325
+ after confirming the halt.
326
+
327
+ Delete the disposable repository after inspection. Its `.handoff` directory
328
+ contains the local task/event audit trail, token, and session IDs.
329
+
330
+ ## 9. Preview complete cleanup
196
331
 
197
332
  ```bash
198
333
  loadout uninstall
@@ -211,7 +346,7 @@ cleanup deliberately deletes Loadout's snapshots, so it is the last lifecycle te
211
346
  ## Troubleshooting and recovery
212
347
 
213
348
  - **`loadout` is not found after installation:** confirm `npm install --global
214
- loadout-ai@0.5.9` completed, run `hash -r`, and confirm npm's global binary
349
+ loadout-ai@0.9.0` completed, run `hash -r`, and confirm npm's global binary
215
350
  directory is on `PATH`. For a source checkout, run `npm run build` and `npm link`.
216
351
  - **A preview asks for `--approve-risk`:** read the reported scripts, domains,
217
352
  credentials, binaries, or instruction findings. If you accept that specific plan,
@@ -238,7 +373,7 @@ loadout-ai@0.5.9` completed, run `hash -r`, and confirm npm's global binary
238
373
  Unmanaged content is preserved, and modified managed files can make cleanup refuse
239
374
  until you explicitly review the command's force path.
240
375
 
241
- ## 9. Advanced surface
376
+ ## 10. Advanced surface
242
377
 
243
378
  The first help screen deliberately focuses on daily use. Existing advanced
244
379
  commands have not been removed:
@@ -0,0 +1,35 @@
1
+ # ADR 001: JSONL plus a project lock for coordination state
2
+
3
+ - Status: accepted
4
+ - Date: 2026-09-03
5
+
6
+ ## Context
7
+
8
+ Loadout coordinates a small number of local coding-agent processes in one
9
+ repository. Events need durable ordering, human inspectability, recovery after
10
+ partial writes, and parity across CLI, MCP, HTTP, and provider adapters. A
11
+ database would add installation, migration, backup, and corruption-recovery
12
+ surface before the expected workload requires indexed storage.
13
+
14
+ ## Decision
15
+
16
+ Use `.handoff/coordination.jsonl` as the source of truth. Serialize every
17
+ mutation with `.handoff/coordination.lock`, created exclusively with owner-only
18
+ permissions. Allocate event sequences and contract revisions while holding that
19
+ lock. Derive current ownership, contracts, acknowledgements, and snapshots from
20
+ validated events.
21
+
22
+ Compaction holds the same lock, writes a complete owner-only archive first,
23
+ then atomically replaces the working log with a valid summary and retained
24
+ events. Missing files mean empty state; other I/O errors propagate. Invalid
25
+ lines are reported without hiding valid neighbors.
26
+
27
+ ## Consequences
28
+
29
+ - The audit trail is readable and easy to back up or remove.
30
+ - Independent local processes cannot allocate duplicate sequences or accept
31
+ conflicting ownership claims concurrently.
32
+ - Reads are linear in the active log, so retention must keep it bounded.
33
+ - This design is for local repository coordination, not a remote multi-user
34
+ service. A future remote transport would require a separate trust and storage
35
+ decision rather than exposing this daemon to a network.
@@ -0,0 +1,32 @@
1
+ # ADR 002: Loopback-only authenticated coordination daemon
2
+
3
+ - Status: accepted
4
+ - Date: 2026-09-03
5
+
6
+ ## Context
7
+
8
+ A localhost HTTP service is still reachable by browser pages, local malware,
9
+ and other users on an incorrectly configured machine. Coordination events can
10
+ contain private repository structure and can influence paid provider turns.
11
+
12
+ ## Decision
13
+
14
+ Bind the daemon only to `127.0.0.1`. Generate a random 32-byte project token in
15
+ `.handoff/daemon.token` with mode `0600`. REST and SSE require a bearer header;
16
+ query-string tokens are rejected. Validate loopback Host headers and allow only
17
+ same-origin browser requests.
18
+
19
+ The CLI passes the token to the dashboard in a URL fragment. The dashboard
20
+ moves it into session storage immediately and removes the fragment from browser
21
+ history. Human-readable status does not expose the project root. Request bodies,
22
+ routes, cursors, agent names, and typed event payloads are bounded and validated.
23
+
24
+ ## Consequences
25
+
26
+ - The dashboard opens conveniently without putting credentials in HTTP request
27
+ URLs or referrers.
28
+ - API clients must explicitly read the local token and set `Authorization`.
29
+ - The daemon is observability and local transport only; it is not supported as
30
+ a LAN or internet-facing service.
31
+ - Activating the project kill switch fails closed across storage, daemon,
32
+ compaction, MCP/CLI writes, and provider-driven turns.
@@ -0,0 +1,91 @@
1
+ # ADR 003: Bounded sequential agent discussions
2
+
3
+ ## Status
4
+
5
+ Accepted
6
+
7
+ ## Date
8
+
9
+ 2026-09-04
10
+
11
+ ## Context
12
+
13
+ The coordination bridge can deliver structured events to Claude Code and Codex,
14
+ but it does not make the agents deliberate. Users who want both models to weigh
15
+ the same feature must manually relay responses, and an unconstrained automatic
16
+ relay could consume quota indefinitely, spread prompt injection, or let two
17
+ agents edit the same files concurrently.
18
+
19
+ Provider interfaces can start or resume turns, but neither supported interface
20
+ offers a shared hidden context or reliable mid-turn steering. Provider output
21
+ is also untrusted data and may be empty, malformed, oversized, or contain
22
+ instructions unrelated to the user's question.
23
+
24
+ ## Decision
25
+
26
+ Implement an opt-in, two-participant design room as a sequential protocol:
27
+
28
+ - one proposer and one reviewer alternate for 1-8 rounds;
29
+ - each response is explicitly public, redacted, bounded, persisted, and linked
30
+ to the prior event by thread and reply IDs;
31
+ - each round costs two provider turns and final synthesis costs one, so the
32
+ exact required budget is known before any provider session starts;
33
+ - prompts prohibit file edits, commands, tools, and disclosure of private
34
+ reasoning;
35
+ - the proposer returns a strict final JSON decision, rationale, alternatives,
36
+ and unresolved disagreements;
37
+ - Loadout emits a normal decision event and a terminal discussion event;
38
+ - provider rejection, invalid output, and empty output close the discussion as
39
+ failed without silent retries;
40
+ - the existing project kill switch is checked before every provider turn;
41
+ - provider turns default to 120 seconds and are explicitly bounded to a
42
+ user-selectable 10-600 seconds.
43
+
44
+ Fresh sessions start lazily with their first discussion prompt so setup does not
45
+ spend a hidden extra turn. Existing provider session IDs are attached without a
46
+ turn and then resumed on the first discussion response. The project bridge
47
+ lease prevents a background bridge and a design room from controlling the same
48
+ sessions concurrently.
49
+
50
+ ## Alternatives considered
51
+
52
+ ### Let both agents edit the same feature during the discussion
53
+
54
+ Rejected. The purpose of the design room is to settle an approach before file
55
+ ownership and implementation. Concurrent edits make the outcome harder to
56
+ review and reintroduce the conflicts the ownership protocol prevents.
57
+
58
+ ### Forward full provider transcripts automatically
59
+
60
+ Rejected. It would expose unrelated context, increase prompt-injection risk,
61
+ and make storage and quota use unpredictable. Only responses requested for the
62
+ public discussion are shared.
63
+
64
+ ### Run both agents concurrently and ask a third model to judge
65
+
66
+ Rejected for the first release. Parallel first proposals do not support genuine
67
+ back-and-forth critique, and a third model adds provider, billing, and tie-break
68
+ semantics without evidence that it improves decisions.
69
+
70
+ ### Continue until the agents agree
71
+
72
+ Rejected. Agreement is not guaranteed, and an unbounded loop is unsafe. The
73
+ final result preserves unresolved disagreement rather than claiming consensus.
74
+
75
+ ### Host a remote coordination bus
76
+
77
+ Rejected for this release. Authentication, tenant isolation, encryption,
78
+ availability, and remote conflict semantics require a separate design. The
79
+ current protocol remains local to one repository and machine.
80
+
81
+ ## Consequences
82
+
83
+ - Users get a real Claude↔Codex critique loop with a predictable maximum cost.
84
+ - The transcript is inspectable with `coord discuss show` and the normal replay.
85
+ - The discussion cannot steer a provider mid-turn; a kill switch takes effect
86
+ before the next turn.
87
+ - Strict final JSON may fail when a provider ignores the requested format. That
88
+ failure is visible and auditable instead of being misrepresented as a valid
89
+ decision.
90
+ - More than two agents, voting, hosted rooms, and automatic implementation are
91
+ intentionally out of scope.