loadout-ai 0.8.0 → 0.9.1
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.
- package/CHANGELOG.md +136 -0
- package/README.md +149 -309
- package/SECURITY.md +21 -1
- package/catalog/discovered.json +29122 -25325
- package/catalog/packages.json +4 -4
- package/dist/src/cli.js +12 -4
- package/dist/src/commands/agents.js +3 -1
- package/dist/src/commands/catalog-candidate.js +150 -0
- package/dist/src/commands/catalog-workflows.js +365 -0
- package/dist/src/commands/catalog.js +9 -354
- package/dist/src/commands/coordinate.js +730 -0
- package/dist/src/commands/coordination-discussions.js +218 -0
- package/dist/src/commands/coordination-sessions.js +197 -0
- package/dist/src/commands/inventory.js +4 -2
- package/dist/src/core/{routing → agents}/model-config.js +7 -2
- package/dist/src/core/catalog/catalog.js +1 -0
- package/dist/src/core/catalog/registry.js +5 -19
- package/dist/src/core/coordination/adapters/claude-code.js +154 -0
- package/dist/src/core/coordination/adapters/codex.js +160 -0
- package/dist/src/core/coordination/adapters/types.js +64 -0
- package/dist/src/core/coordination/auth.js +59 -0
- package/dist/src/core/coordination/auto-contract.js +457 -0
- package/dist/src/core/coordination/bridge-lease.js +79 -0
- package/dist/src/core/coordination/conflict-preview.js +167 -0
- package/dist/src/core/coordination/contract-diff.js +106 -0
- package/dist/src/core/coordination/coordinator.js +552 -0
- package/dist/src/core/coordination/crash-recovery.js +169 -0
- package/dist/src/core/coordination/daemon.js +670 -0
- package/dist/src/core/coordination/discussion-pipeline.js +313 -0
- package/dist/src/core/coordination/discussion.js +340 -0
- package/dist/src/core/coordination/events.js +161 -0
- package/dist/src/core/coordination/git-ownership.js +217 -0
- package/dist/src/core/coordination/http-api.js +118 -0
- package/dist/src/core/coordination/interrupt-policy.js +89 -0
- package/dist/src/core/coordination/lock.js +140 -0
- package/dist/src/core/coordination/mcp-server.js +424 -0
- package/dist/src/core/coordination/quick-start.js +200 -0
- package/dist/src/core/coordination/redaction.js +85 -0
- package/dist/src/core/coordination/replay.js +188 -0
- package/dist/src/core/coordination/retention.js +180 -0
- package/dist/src/core/coordination/runtime.js +21 -0
- package/dist/src/core/coordination/session-manager.js +366 -0
- package/dist/src/core/coordination/watcher.js +128 -0
- package/dist/src/core/{routing → delegation}/first-party-skills.js +25 -13
- package/dist/src/core/delegation/handoff-bundle.js +253 -0
- package/dist/src/core/delegation/handoff-templates.js +222 -0
- package/dist/src/core/delegation/handoff-verification.js +117 -0
- package/dist/src/core/delegation/handoff.js +537 -0
- package/dist/src/core/discovery/candidate-intelligence-evidence.js +108 -0
- package/dist/src/core/discovery/candidate-intelligence-types.js +1 -0
- package/dist/src/core/discovery/candidate-intelligence-validation.js +108 -0
- package/dist/src/core/discovery/candidate-intelligence.js +3 -214
- package/dist/src/core/discovery/community.js +12 -4
- package/dist/src/core/discovery/github-discovery.js +6 -2
- package/dist/src/core/discovery/private-discovery.js +6 -2
- package/dist/src/core/install/reconcile.js +1 -1
- package/dist/src/core/install/snapshot.js +24 -5
- package/dist/src/core/install/uninstall.js +39 -3
- package/dist/src/core/reporting/cli-guide.js +9 -5
- package/dist/src/core/reporting/completion.js +43 -38
- package/dist/src/core/reporting/doctor.js +1 -1
- package/dist/src/core/runtime/bounded-json.js +65 -0
- package/dist/src/core/runtime/github.js +30 -16
- package/dist/src/core/runtime/mcp-recipes.js +1 -1
- package/dist/src/core/workspace/active-policy.js +1 -1
- package/docs/DEMO_SCRIPT.md +19 -23
- package/docs/DISCOVERED.md +250 -251
- package/docs/FEATURE_TEST_MATRIX.md +30 -15
- package/docs/LIVE_COLLABORATION.md +283 -0
- package/docs/REFERENCE.md +263 -0
- package/docs/RELEASE_REVIEW.md +1 -1
- package/docs/TESTING.md +17 -1
- package/docs/USER_TEST_GUIDE.md +211 -3
- package/docs/assets/loadout-discover-activate.webp +0 -0
- package/docs/assets/loadout-handoff-coordinate.webp +0 -0
- package/docs/assets/loadout-social-preview.png +0 -0
- package/docs/decisions/001-coordination-jsonl-locking.md +35 -0
- package/docs/decisions/002-local-daemon-authentication.md +32 -0
- package/docs/decisions/003-bounded-agent-discussions.md +91 -0
- package/docs/evidence/coordination-provider-check-2026-09-05.md +33 -0
- package/docs/specs/BOUNDED_AGENT_DISCUSSIONS.md +169 -0
- package/docs/specs/HANDOFF_CONTEXT_BUNDLES.md +139 -0
- package/docs/specs/HANDOFF_VERIFICATION.md +83 -0
- package/docs/superpowers/plans/2026-09-03-coordination-hardening.md +231 -0
- package/docs/superpowers/plans/2026-09-03-release-readiness.md +232 -0
- package/docs/superpowers/plans/2026-09-04-bounded-agent-discussions.md +121 -0
- package/docs/superpowers/plans/2026-09-04-handoff-context-bundles.md +109 -0
- package/docs/superpowers/plans/2026-09-04-handoff-verification.md +56 -0
- package/docs/superpowers/plans/2026-09-05-pre-release-hardening.md +175 -0
- package/docs/superpowers/plans/2026-09-05-public-readiness.md +20 -0
- package/package.json +15 -5
- package/skills/loadout-handoff/SKILL.md +291 -0
- package/dist/src/core/routing/handoff.js +0 -314
- package/dist/src/core/routing/policy.js +0 -147
- package/dist/src/core/routing/route.js +0 -411
- package/docs/assets/loadout-workflow.png +0 -0
- package/skills/loadout-router/SKILL.md +0 -85
- /package/dist/src/core/{routing → agents}/credentials.js +0 -0
|
@@ -108,23 +108,38 @@ the capability table names native, adapted, and unsupported surfaces honestly.
|
|
|
108
108
|
Run the entire required gate with one command:
|
|
109
109
|
|
|
110
110
|
```bash
|
|
111
|
-
npm run verify
|
|
111
|
+
npm run verify:full
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
|
|
115
|
-
are listed below for focused reruns and diagnosis.
|
|
116
|
-
|
|
117
|
-
| Command
|
|
118
|
-
|
|
|
119
|
-
| `npm run format:check`
|
|
120
|
-
| `npm run lint`
|
|
121
|
-
| `npm run typecheck`
|
|
122
|
-
| `npm run check:evidence`
|
|
123
|
-
| `npm test`
|
|
124
|
-
| `npm run test:e2e:cli`
|
|
125
|
-
| `npm run test:e2e:readme`
|
|
126
|
-
| `npm run test:
|
|
127
|
-
| `npm run test:
|
|
114
|
+
This is the release gate. It runs the normal verification path plus coverage.
|
|
115
|
+
The individual stages are listed below for focused reruns and diagnosis.
|
|
116
|
+
|
|
117
|
+
| Command | Coverage | Expected result |
|
|
118
|
+
| ------------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------- |
|
|
119
|
+
| `npm run format:check` | Repository formatting | Exit 0; no files changed. |
|
|
120
|
+
| `npm run lint` | TypeScript lint rules | Exit 0. |
|
|
121
|
+
| `npm run typecheck` | TypeScript contract | Exit 0. |
|
|
122
|
+
| `npm run check:evidence` | Catalog/discovery attribution, README claims, and release boundaries | Exit 0; no claim is silently promoted. |
|
|
123
|
+
| `npm test` | Unit, integration, native filesystem, safety, and regression suites | All tests pass. |
|
|
124
|
+
| `npm run test:e2e:cli` | Disposable scan → compare → optimize → apply → rollback journey | Prints a successful CLI product flow. |
|
|
125
|
+
| `npm run test:e2e:readme` | Isolated library/activation/manifest/card/rollback journey | Prints README product flow success. |
|
|
126
|
+
| `npm run test:e2e:coordination` | Disposable ownership/contract/template/verified-handoff journey | Prints coordination product flow success. |
|
|
127
|
+
| `npm run test:package` | `npm pack`, install outside the checkout, packaged CLI install/rollback | Prints package smoke success. |
|
|
128
|
+
| `npm run test:performance` | Seven scans of 1,000 real on-disk skill directories | p95 remains below the enforced five-second budget. |
|
|
129
|
+
|
|
130
|
+
Coordination convenience regressions are covered by:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npx vitest run tests/handoff-templates.test.ts tests/cli-handoff.test.ts \
|
|
134
|
+
tests/handoff-verification.test.ts tests/coordination-quick-start.test.ts \
|
|
135
|
+
tests/auto-contract.test.ts tests/git-ownership.test.ts \
|
|
136
|
+
tests/discussion-pipeline.test.ts
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
These tests cover traversal rejection, template interpolation and bundles,
|
|
140
|
+
non-blocking verified completion, normalized ownership splits, exact/current/
|
|
141
|
+
stale contract candidates, Git author mappings, and idempotent linked handoffs.
|
|
142
|
+
Windows CI is authoritative for native path behavior and must be green.
|
|
128
143
|
|
|
129
144
|
The focused regression contract for the v0.3.x profile lifecycle is:
|
|
130
145
|
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# Live Claude Code ↔ Codex coordination
|
|
2
|
+
|
|
3
|
+
Live coordination is beta in 0.9.0. The ordinary `loadout handoff` inbox is
|
|
4
|
+
the stable fallback: it is durable, understandable, and does not run either
|
|
5
|
+
provider automatically.
|
|
6
|
+
|
|
7
|
+
## What “shared memory” means
|
|
8
|
+
|
|
9
|
+
Loadout shares structured project facts, not private conversations or model
|
|
10
|
+
context windows. Both agents can see the same tasks, file ownership, versioned
|
|
11
|
+
contracts, decisions, progress, blockers, verification results, and cursors.
|
|
12
|
+
Every accepted event is persisted before a watcher, dashboard, or provider
|
|
13
|
+
bridge sees it.
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
Claude Code CLI <----> provider bridge <----> Codex SDK
|
|
17
|
+
|
|
|
18
|
+
coordination protocol
|
|
19
|
+
.handoff/coordination.jsonl
|
|
20
|
+
/ | \
|
|
21
|
+
CLI MCP HTTP/SSE
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The source of truth is an append-only project JSONL log protected by an
|
|
25
|
+
exclusive cross-process lock. There is no cloud service and no SQLite database.
|
|
26
|
+
Sequence numbers, acknowledgements, and snapshots make reconnects deterministic.
|
|
27
|
+
|
|
28
|
+
## Three operating levels
|
|
29
|
+
|
|
30
|
+
1. **Durable handoff (stable):** `loadout handoff` passes a bounded task and
|
|
31
|
+
context to the next agent session.
|
|
32
|
+
2. **Shared coordination protocol (beta):** CLI or MCP tools publish and read
|
|
33
|
+
structured events. Agents see changes when they call `snapshot`/`subscribe`,
|
|
34
|
+
while the local daemon and dashboard can observe changes immediately.
|
|
35
|
+
3. **Provider bridge (beta, opt-in):** a long-running local process resumes
|
|
36
|
+
provider sessions and submits relevant events as new follow-up turns.
|
|
37
|
+
4. **Bounded design discussion (beta, opt-in):** Claude Code and Codex
|
|
38
|
+
alternate proposals and critiques on one question, then record a decision.
|
|
39
|
+
|
|
40
|
+
The bridge does not inject into an already-running turn. Delivery happens at a
|
|
41
|
+
safe turn boundary because that is what the supported Claude Code CLI and Codex
|
|
42
|
+
SDK interfaces provide.
|
|
43
|
+
|
|
44
|
+
## Quick protocol test (no paid agent turn)
|
|
45
|
+
|
|
46
|
+
For the beginner path, preview and approve a normalized ownership split:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
loadout coord start --agents claude-code,codex
|
|
50
|
+
loadout coord start --agents claude-code,codex --yes
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The command ignores generated directories and collapses redundant child paths.
|
|
54
|
+
Any existing ownership makes it stop rather than overwrite active work.
|
|
55
|
+
|
|
56
|
+
Run these commands in a disposable Git repository:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
loadout coord own claude-code src/api
|
|
60
|
+
loadout coord contract checkout-api --agent claude-code \
|
|
61
|
+
--body "POST /api/checkout -> 201 { id: string }"
|
|
62
|
+
loadout coord snapshot codex
|
|
63
|
+
loadout coord ack codex 1
|
|
64
|
+
loadout coord release claude-code src/api
|
|
65
|
+
loadout coord status
|
|
66
|
+
loadout coord replay
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
The contract revision is allocated atomically when `--revision` is omitted.
|
|
70
|
+
Overlapping exclusive ownership is rejected. A future acknowledgement or stale
|
|
71
|
+
explicit contract revision is rejected as a conflict.
|
|
72
|
+
|
|
73
|
+
After ownership exists, detect imports that cross agent boundaries:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
loadout coord detect
|
|
77
|
+
loadout coord detect --publish
|
|
78
|
+
loadout coord detect --publish --yes
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Detection is conservative. Exact supported one-line declarations may be
|
|
82
|
+
published after the second approval; multiline or ambiguous declarations are
|
|
83
|
+
marked `MANUAL` and refused. Existing generated bodies are reported as current
|
|
84
|
+
or stale. This is an on-demand scan, not a background compiler or watcher.
|
|
85
|
+
|
|
86
|
+
## Connect the MCP server
|
|
87
|
+
|
|
88
|
+
`loadout serve` starts a protocol-only stdio MCP server in the current project.
|
|
89
|
+
It exposes `claim_task`, `release_ownership`, `publish_contract`,
|
|
90
|
+
`publish_update`, `subscribe`, `ack`, and `snapshot`. Contract revisions
|
|
91
|
+
auto-increment when omitted.
|
|
92
|
+
|
|
93
|
+
For Claude Code, add the server at project scope using its MCP command:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
claude mcp add --transport stdio --scope project loadout-coordination -- loadout serve
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
For Codex, add this table to `~/.codex/config.toml` (or use the equivalent
|
|
100
|
+
Codex MCP configuration UI):
|
|
101
|
+
|
|
102
|
+
```toml
|
|
103
|
+
[mcp_servers."loadout-coordination"]
|
|
104
|
+
command = "loadout"
|
|
105
|
+
args = ["serve"]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Restart the host after changing its MCP configuration. The server inherits the
|
|
109
|
+
host process working directory, so confirm the agent opened the intended
|
|
110
|
+
project before publishing coordination state.
|
|
111
|
+
|
|
112
|
+
## Run the provider bridge
|
|
113
|
+
|
|
114
|
+
First check what is available:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
loadout coord agents detect
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
You can start sessions through Loadout (this runs paid provider turns):
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
loadout coord agents start claude-code "Own the backend and publish endpoint contracts"
|
|
124
|
+
loadout coord agents start codex "Own the frontend and consume backend contracts"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Copy the returned IDs, then keep both attached:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
loadout coord agents bridge \
|
|
131
|
+
claude-code:<session-id> \
|
|
132
|
+
codex:<thread-id>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
You can instead track an existing known host session without running a provider
|
|
136
|
+
turn with `loadout coord agents attach provider:session-id`. The provider validates
|
|
137
|
+
the ID when a later `send` or `bridge` operation submits a turn. `loadout coord
|
|
138
|
+
agents list` shows project-tracked sessions, and `loadout coord agents send`
|
|
139
|
+
performs one explicit follow-up turn.
|
|
140
|
+
|
|
141
|
+
Bridge safeguards:
|
|
142
|
+
|
|
143
|
+
- only one bridge process can own a project at a time;
|
|
144
|
+
- events route to different providers concurrently;
|
|
145
|
+
- update and acknowledgement events are passive by default and do not spend a
|
|
146
|
+
provider turn;
|
|
147
|
+
- contract, task, decision, done, ownership, and error events are delivered at
|
|
148
|
+
the next safe boundary;
|
|
149
|
+
- automatic delivery stops after 20 turns per session unless
|
|
150
|
+
`--max-turns <n>` changes the cap;
|
|
151
|
+
- provider responses are printed but never saved in `.handoff`;
|
|
152
|
+
- injected event text is labeled untrusted project data and must not authorize
|
|
153
|
+
commands, scope expansion, publishing, or destructive actions;
|
|
154
|
+
- the project kill switch blocks CLI, MCP, daemon, compaction, and provider
|
|
155
|
+
turns.
|
|
156
|
+
|
|
157
|
+
Use `loadout daemon kill "reason"` to stop coordination and
|
|
158
|
+
`loadout daemon resume` to re-enable it.
|
|
159
|
+
|
|
160
|
+
## Let Claude Code and Codex debate one feature
|
|
161
|
+
|
|
162
|
+
Use a design room when both agents should compare approaches before either one
|
|
163
|
+
claims files or writes code:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
loadout coord discuss start "REST or GraphQL for checkout?" \
|
|
167
|
+
--agents claude-code,codex \
|
|
168
|
+
--rounds 2 \
|
|
169
|
+
--max-turns 5 \
|
|
170
|
+
--timeout 120
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`--agents` starts fresh sessions lazily. To continue existing conversations,
|
|
174
|
+
replace it with explicit IDs:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
loadout coord discuss start "REST or GraphQL for checkout?" \
|
|
178
|
+
--sessions claude-code:<session-id> codex:<thread-id> \
|
|
179
|
+
--rounds 2 --max-turns 5
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The first participant is the proposer; use `--proposer codex` to swap roles.
|
|
183
|
+
One round means one proposer turn and one reviewer turn. Synthesis costs one
|
|
184
|
+
additional turn, so the exact required count is `rounds * 2 + 1`. Loadout
|
|
185
|
+
rejects an insufficient budget, invalid provider set, invalid timeout, or mixed
|
|
186
|
+
fresh/existing mode before it starts a paid turn.
|
|
187
|
+
|
|
188
|
+
Every prompt says that the response is public, will be persisted, and must not
|
|
189
|
+
edit files, run commands, use tools, or reveal private reasoning. Every public
|
|
190
|
+
statement has a thread ID and reply ID. The final synthesis records the selected
|
|
191
|
+
decision, rationale, credible alternatives, and unresolved disagreement. Review
|
|
192
|
+
it later without spending quota:
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
loadout coord discuss list
|
|
196
|
+
loadout coord discuss show <thread-id>
|
|
197
|
+
loadout coord replay
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
The discussion holds the same singleton lease as the provider bridge, checks
|
|
201
|
+
the kill switch before every provider turn, never retries a rejected or invalid
|
|
202
|
+
response silently, and defaults to a 120-second per-turn timeout. It does not
|
|
203
|
+
begin implementation automatically.
|
|
204
|
+
|
|
205
|
+
Turn an accepted decision into implementation only after reviewing the dry run:
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
loadout coord discuss implement <thread-id>
|
|
209
|
+
loadout coord discuss implement <thread-id> --yes
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
The approved command refuses mentioned paths without ownership, bundles files
|
|
213
|
+
that already exist, attaches acceptance criteria, records generated handoff
|
|
214
|
+
IDs, and uses a deterministic plan ID so retries do not duplicate tasks.
|
|
215
|
+
Extracted paths are normalized inside the project and the plan fails before
|
|
216
|
+
sending anything if it exceeds the 256-file coordination event limit.
|
|
217
|
+
|
|
218
|
+
Git history can suggest ownership when commits carry distinguishable authors:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
loadout coord git-ownership \
|
|
222
|
+
--agents "claude-code=Claude Opus 4.6,codex=Viraj Mishra"
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Confidence includes commits by unmapped human authors. Add `--yes` only after
|
|
226
|
+
reviewing the suggestions; Git history is evidence, not proof of current intent.
|
|
227
|
+
|
|
228
|
+
## Optional daemon and dashboard
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
loadout daemon start
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
The daemon binds only to `127.0.0.1`. It prints an authenticated dashboard URL
|
|
235
|
+
whose token is carried in the URL fragment, moved immediately into browser
|
|
236
|
+
session storage, and removed from visible history. REST and SSE accept bearer
|
|
237
|
+
headers only; query-string tokens, non-loopback Host headers, and cross-origin
|
|
238
|
+
browser requests are rejected. The token and session state are project-local
|
|
239
|
+
files with mode `0600`.
|
|
240
|
+
|
|
241
|
+
The dashboard is observability, not an agent injector. Use the MCP tools or the
|
|
242
|
+
provider bridge for agent-to-agent delivery.
|
|
243
|
+
|
|
244
|
+
## Safety and data model
|
|
245
|
+
|
|
246
|
+
- Event schemas cap names, descriptions, context, payloads, arrays, and paths.
|
|
247
|
+
- Secret-like keys and values are redacted at the canonical write boundary, so
|
|
248
|
+
CLI, MCP, and HTTP writes follow the same rule.
|
|
249
|
+
- Ownership claims use normalized project-relative paths and detect directory /
|
|
250
|
+
child overlap.
|
|
251
|
+
- Contract revisions and event sequences are allocated while holding the same
|
|
252
|
+
project lock.
|
|
253
|
+
- Compaction first writes a complete archival copy and aborts if archival fails.
|
|
254
|
+
- Corrupt JSONL lines are reported rather than hiding valid neighboring events.
|
|
255
|
+
- `.handoff/coordination.jsonl` is project data. Do not commit it when its facts
|
|
256
|
+
are private; add the appropriate `.handoff` paths to `.gitignore`.
|
|
257
|
+
|
|
258
|
+
## Honest limitations
|
|
259
|
+
|
|
260
|
+
- This is durable shared state plus follow-up turns, not one simultaneous model
|
|
261
|
+
context or provider-to-provider hidden channel.
|
|
262
|
+
- Claude Code and Codex authentication, quotas, billing, and host session IDs
|
|
263
|
+
remain provider concerns.
|
|
264
|
+
- The bridge cannot steer a turn already in progress.
|
|
265
|
+
- The design-room kill switch cannot cancel a provider call already in flight;
|
|
266
|
+
it prevents persistence and the next provider turn.
|
|
267
|
+
- A provider may fail, time out, reject a resume ID, or return output Loadout
|
|
268
|
+
cannot parse. The event stays durable and can still be consumed manually.
|
|
269
|
+
- The bridge is local to one machine and one repository. Remote teams need a
|
|
270
|
+
separately designed authenticated transport; this release intentionally does
|
|
271
|
+
not expose the daemon to a network.
|
|
272
|
+
- Contract detection supports relative TypeScript/JavaScript imports and exact
|
|
273
|
+
one-line declarations; aliases, generated clients, path mappings, and complex
|
|
274
|
+
multiline declarations may require a manual contract.
|
|
275
|
+
|
|
276
|
+
## Evidence
|
|
277
|
+
|
|
278
|
+
The coordination test suite covers concurrent writers, ownership conflicts,
|
|
279
|
+
revision allocation, malformed logs, redaction, authenticated HTTP/SSE, MCP
|
|
280
|
+
stdio framing, retention failure safety, kill-switch behavior, provider CLI/SDK
|
|
281
|
+
shapes, session replay, concurrent provider delivery, passive policy, and the
|
|
282
|
+
automatic-turn cap. The package smoke test verifies the compiled MCP artifact is
|
|
283
|
+
included in the npm tarball.
|
|
@@ -0,0 +1,263 @@
|
|
|
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 | [](https://github.com/obra/superpowers) |
|
|
40
|
+
| [Context7](https://github.com/upstash/context7) | Current documentation and MCP workflows | [](https://github.com/upstash/context7) |
|
|
41
|
+
| [Addy Osmani Agent Skills](https://github.com/addyosmani/agent-skills) | Engineering, frontend, debugging, performance, docs, shipping | [](https://github.com/addyosmani/agent-skills) |
|
|
42
|
+
| [Agent Skills Marketplace](https://github.com/wshobson/agents) | Architecture, review, error handling, JavaScript, Python | [](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 | [](https://github.com/anthropics/skills) |
|
|
56
|
+
| [OpenAI Skills](https://github.com/openai/skills) | CLI, docs, browser work, images, security | [](https://github.com/openai/skills) |
|
|
57
|
+
| [Vercel Agent Skills](https://github.com/vercel-labs/agent-skills) | React, web design, composition, deployment | [](https://github.com/vercel-labs/agent-skills) |
|
|
58
|
+
| [Superpowers](https://github.com/obra/superpowers) | Planning, debugging, testing, collaboration | [](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 | [](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) |
|
|
60
|
+
| [Context7](https://github.com/upstash/context7) | Current documentation and MCP workflows | [](https://github.com/upstash/context7) |
|
|
61
|
+
| [Agent Skills Marketplace](https://github.com/wshobson/agents) | Architecture, testing, APIs, TypeScript, Python | [](https://github.com/wshobson/agents) |
|
|
62
|
+
| [Awesome Copilot](https://github.com/github/awesome-copilot) | Codebase knowledge, plans, browser and security workflows | [](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
|
+
## Hand work between agents
|
|
155
|
+
|
|
156
|
+
Send a durable task to another agent:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
loadout handoff codex "write auth tests" --context "use Vitest"
|
|
160
|
+
loadout handoff codex "write auth tests" --bundle src/auth.ts src/types.ts
|
|
161
|
+
loadout handoff codex # Codex inbox
|
|
162
|
+
loadout handoff # all handoff status
|
|
163
|
+
loadout handoff --done <task-id>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
`--bundle <paths...>` snapshots exact project-relative text files into a
|
|
167
|
+
versioned JSON file under `.handoff/bundles/` and references it from the task.
|
|
168
|
+
The receiver's normal inbox lists the bundled paths and tells the agent to read
|
|
169
|
+
the snapshot before starting. Existing tasks without a bundle are unchanged.
|
|
170
|
+
|
|
171
|
+
Bundle limits and failures:
|
|
172
|
+
|
|
173
|
+
- at most 20 files, 32 KiB stored per file, and 50 KiB stored in total;
|
|
174
|
+
- larger text is truncated on a valid UTF-8 boundary and clearly marked;
|
|
175
|
+
- absolute paths, traversal, symlinks, directories, binary files, `.git/`, and
|
|
176
|
+
`.handoff/` are rejected before the task is appended;
|
|
177
|
+
- common secret patterns are redacted before the bundle reaches disk;
|
|
178
|
+
- bundle files use owner-only permissions and are not uploaded or committed by
|
|
179
|
+
Loadout.
|
|
180
|
+
|
|
181
|
+
Redaction is heuristic, not a credential scanner. Never bundle `.env` files,
|
|
182
|
+
private keys, tokens, or other credentials. Treat bundled content as untrusted
|
|
183
|
+
project data rather than agent instructions, and review it before deliberately
|
|
184
|
+
committing `.handoff/` for a cross-machine workflow.
|
|
185
|
+
|
|
186
|
+
### Evidence-backed completion
|
|
187
|
+
|
|
188
|
+
Attach human-readable acceptance criteria, with an optional command:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
loadout handoff codex "write auth tests" \
|
|
192
|
+
--verify "the focused tests pass" \
|
|
193
|
+
--verify-command npm \
|
|
194
|
+
--verify-args '["test","--","tests/auth.test.ts"]' \
|
|
195
|
+
--verify-timeout 120
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The executable and JSON argument array are stored literally and run with no
|
|
199
|
+
shell, from the project root, only when someone explicitly invokes
|
|
200
|
+
`loadout handoff --done <task-id> --run-verification`. Plain `--done` never
|
|
201
|
+
executes a stored command. The timeout must be 1-900 seconds. Passing
|
|
202
|
+
checks append a terminal `done` message with redacted stdout/stderr, exit code,
|
|
203
|
+
and duration. Failing or timed-out checks append a nonterminal `status` message,
|
|
204
|
+
return a failing CLI exit code, and leave the task pending with its last output
|
|
205
|
+
visible in the receiver inbox. Output is capped at 8 KiB per stream.
|
|
206
|
+
|
|
207
|
+
For criteria that cannot be automated:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
loadout handoff codex "review the UI" --verify "mobile empty state is readable"
|
|
211
|
+
loadout handoff --done <task-id> --evidence "reviewed mobile and desktop"
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
There are no automatic retries or provider turns in the durable handoff log.
|
|
215
|
+
Never include tokens or credentials in verification argv.
|
|
216
|
+
|
|
217
|
+
### Handoff templates
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
loadout template list
|
|
221
|
+
loadout template show write-tests
|
|
222
|
+
loadout handoff codex src/auth.ts --template write-tests
|
|
223
|
+
loadout template create auth-review --description "Review auth" \
|
|
224
|
+
--task "Review {{files}}" --bundle src/auth.ts
|
|
225
|
+
loadout template delete auth-review
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Built-ins are `write-tests`, `review-code`, `fix-bug`, `implement-feature`, and
|
|
229
|
+
`refactor`. Positional task text fills `{{files}}`, `{{description}}`, and
|
|
230
|
+
`{{task}}`. Custom templates live under `.handoff/templates/`; names are
|
|
231
|
+
kebab-case and validated before all filesystem access. Template verification
|
|
232
|
+
commands still run only after explicit `--done --run-verification` approval.
|
|
233
|
+
|
|
234
|
+
## Coordinate simultaneous agents
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
loadout coord start --agents claude-code,codex # preview ownership
|
|
238
|
+
loadout coord start --agents claude-code,codex --yes # apply
|
|
239
|
+
loadout coord detect # contract candidates
|
|
240
|
+
loadout coord detect --publish --yes # exact candidates only
|
|
241
|
+
loadout coord discuss implement <thread-id> # preview linked tasks
|
|
242
|
+
loadout coord discuss implement <thread-id> --yes # dispatch once
|
|
243
|
+
loadout coord git-ownership --agents "codex=Git Author"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Every convenience mutation is preview-first. Contract detection is conservative
|
|
247
|
+
and refuses manual placeholders. Discussion implementation refuses unowned
|
|
248
|
+
mentioned paths and is idempotent by deterministic plan ID. Git history
|
|
249
|
+
percentages include unmapped authors; use explicit agent/author mappings when
|
|
250
|
+
the Git identity is not literally the agent name. See
|
|
251
|
+
[`LIVE_COLLABORATION.md`](./LIVE_COLLABORATION.md) for the protocol, MCP server,
|
|
252
|
+
provider bridge, daemon, and honest limitations.
|
|
253
|
+
|
|
254
|
+
## Agent support
|
|
255
|
+
|
|
256
|
+
Loadout's adapter capability matrix covers **12 agents**: Claude Code, Cline,
|
|
257
|
+
Codex, Cursor, Gemini CLI, GitHub Copilot, Hermes, Junie, Kiro CLI, OpenCode,
|
|
258
|
+
Roo Code, Windsurf.
|
|
259
|
+
|
|
260
|
+
See the [complete feature matrix](./FEATURE_TEST_MATRIX.md) for configured
|
|
261
|
+
paths, filesystem lifecycle, platform, and native-host evidence.
|
|
262
|
+
|
|
263
|
+
Use `loadout doctor --verbose` for the local component matrix.
|
package/docs/RELEASE_REVIEW.md
CHANGED
|
@@ -22,6 +22,6 @@ For current behavior and evidence, use:
|
|
|
22
22
|
[sanitized July 19 live checks](./evidence/live-checks-2026-07-19.json) only when
|
|
23
23
|
investigating that historical release line.
|
|
24
24
|
|
|
25
|
-
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
|
|
26
26
|
against the npm registry and the corresponding GitHub release rather than inferred
|
|
27
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`
|
|
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:
|