loadout-ai 0.8.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.
- package/CHANGELOG.md +76 -1
- package/README.md +149 -304
- package/SECURITY.md +21 -1
- package/catalog/discovered.json +27897 -25327
- 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 +147 -0
- package/dist/src/commands/catalog.js +9 -354
- package/dist/src/commands/coordinate.js +586 -0
- package/dist/src/commands/coordination-discussions.js +194 -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 +137 -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/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 +667 -0
- package/dist/src/core/coordination/discussion.js +340 -0
- package/dist/src/core/coordination/events.js +161 -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 +110 -0
- package/dist/src/core/coordination/mcp-server.js +424 -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 +128 -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/{routing → delegation}/handoff.js +40 -9
- 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/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 +251 -251
- package/docs/FEATURE_TEST_MATRIX.md +3 -3
- package/docs/LIVE_COLLABORATION.md +234 -0
- package/docs/REFERENCE.md +163 -0
- package/docs/RELEASE_REVIEW.md +1 -1
- package/docs/TESTING.md +17 -1
- package/docs/USER_TEST_GUIDE.md +138 -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/specs/BOUNDED_AGENT_DISCUSSIONS.md +169 -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/package.json +13 -4
- package/skills/loadout-handoff/SKILL.md +238 -0
- 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,11 +108,11 @@ 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.
|
|
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
116
|
|
|
117
117
|
| Command | Coverage | Expected result |
|
|
118
118
|
| -------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------- |
|
|
@@ -0,0 +1,234 @@
|
|
|
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
|
+
Run these commands in a disposable Git repository:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
loadout coord own claude-code src/api
|
|
50
|
+
loadout coord contract checkout-api --agent claude-code \
|
|
51
|
+
--body "POST /api/checkout -> 201 { id: string }"
|
|
52
|
+
loadout coord snapshot codex
|
|
53
|
+
loadout coord ack codex 1
|
|
54
|
+
loadout coord release claude-code src/api
|
|
55
|
+
loadout coord status
|
|
56
|
+
loadout coord replay
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
The contract revision is allocated atomically when `--revision` is omitted.
|
|
60
|
+
Overlapping exclusive ownership is rejected. A future acknowledgement or stale
|
|
61
|
+
explicit contract revision is rejected as a conflict.
|
|
62
|
+
|
|
63
|
+
## Connect the MCP server
|
|
64
|
+
|
|
65
|
+
`loadout serve` starts a protocol-only stdio MCP server in the current project.
|
|
66
|
+
It exposes `claim_task`, `release_ownership`, `publish_contract`,
|
|
67
|
+
`publish_update`, `subscribe`, `ack`, and `snapshot`. Contract revisions
|
|
68
|
+
auto-increment when omitted.
|
|
69
|
+
|
|
70
|
+
For Claude Code, add the server at project scope using its MCP command:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
claude mcp add --transport stdio --scope project loadout-coordination -- loadout serve
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
For Codex, add this table to `~/.codex/config.toml` (or use the equivalent
|
|
77
|
+
Codex MCP configuration UI):
|
|
78
|
+
|
|
79
|
+
```toml
|
|
80
|
+
[mcp_servers."loadout-coordination"]
|
|
81
|
+
command = "loadout"
|
|
82
|
+
args = ["serve"]
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Restart the host after changing its MCP configuration. The server inherits the
|
|
86
|
+
host process working directory, so confirm the agent opened the intended
|
|
87
|
+
project before publishing coordination state.
|
|
88
|
+
|
|
89
|
+
## Run the provider bridge
|
|
90
|
+
|
|
91
|
+
First check what is available:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
loadout coord agents detect
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
You can start sessions through Loadout (this runs paid provider turns):
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
loadout coord agents start claude-code "Own the backend and publish endpoint contracts"
|
|
101
|
+
loadout coord agents start codex "Own the frontend and consume backend contracts"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
Copy the returned IDs, then keep both attached:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
loadout coord agents bridge \
|
|
108
|
+
claude-code:<session-id> \
|
|
109
|
+
codex:<thread-id>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
You can instead track an existing known host session without running a provider
|
|
113
|
+
turn with `loadout coord agents attach provider:session-id`. The provider validates
|
|
114
|
+
the ID when a later `send` or `bridge` operation submits a turn. `loadout coord
|
|
115
|
+
agents list` shows project-tracked sessions, and `loadout coord agents send`
|
|
116
|
+
performs one explicit follow-up turn.
|
|
117
|
+
|
|
118
|
+
Bridge safeguards:
|
|
119
|
+
|
|
120
|
+
- only one bridge process can own a project at a time;
|
|
121
|
+
- events route to different providers concurrently;
|
|
122
|
+
- update and acknowledgement events are passive by default and do not spend a
|
|
123
|
+
provider turn;
|
|
124
|
+
- contract, task, decision, done, ownership, and error events are delivered at
|
|
125
|
+
the next safe boundary;
|
|
126
|
+
- automatic delivery stops after 20 turns per session unless
|
|
127
|
+
`--max-turns <n>` changes the cap;
|
|
128
|
+
- provider responses are printed but never saved in `.handoff`;
|
|
129
|
+
- injected event text is labeled untrusted project data and must not authorize
|
|
130
|
+
commands, scope expansion, publishing, or destructive actions;
|
|
131
|
+
- the project kill switch blocks CLI, MCP, daemon, compaction, and provider
|
|
132
|
+
turns.
|
|
133
|
+
|
|
134
|
+
Use `loadout daemon kill "reason"` to stop coordination and
|
|
135
|
+
`loadout daemon resume` to re-enable it.
|
|
136
|
+
|
|
137
|
+
## Let Claude Code and Codex debate one feature
|
|
138
|
+
|
|
139
|
+
Use a design room when both agents should compare approaches before either one
|
|
140
|
+
claims files or writes code:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
loadout coord discuss start "REST or GraphQL for checkout?" \
|
|
144
|
+
--agents claude-code,codex \
|
|
145
|
+
--rounds 2 \
|
|
146
|
+
--max-turns 5 \
|
|
147
|
+
--timeout 120
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
`--agents` starts fresh sessions lazily. To continue existing conversations,
|
|
151
|
+
replace it with explicit IDs:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
loadout coord discuss start "REST or GraphQL for checkout?" \
|
|
155
|
+
--sessions claude-code:<session-id> codex:<thread-id> \
|
|
156
|
+
--rounds 2 --max-turns 5
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
The first participant is the proposer; use `--proposer codex` to swap roles.
|
|
160
|
+
One round means one proposer turn and one reviewer turn. Synthesis costs one
|
|
161
|
+
additional turn, so the exact required count is `rounds * 2 + 1`. Loadout
|
|
162
|
+
rejects an insufficient budget, invalid provider set, invalid timeout, or mixed
|
|
163
|
+
fresh/existing mode before it starts a paid turn.
|
|
164
|
+
|
|
165
|
+
Every prompt says that the response is public, will be persisted, and must not
|
|
166
|
+
edit files, run commands, use tools, or reveal private reasoning. Every public
|
|
167
|
+
statement has a thread ID and reply ID. The final synthesis records the selected
|
|
168
|
+
decision, rationale, credible alternatives, and unresolved disagreement. Review
|
|
169
|
+
it later without spending quota:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
loadout coord discuss list
|
|
173
|
+
loadout coord discuss show <thread-id>
|
|
174
|
+
loadout coord replay
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
The discussion holds the same singleton lease as the provider bridge, checks
|
|
178
|
+
the kill switch before every provider turn, never retries a rejected or invalid
|
|
179
|
+
response silently, and defaults to a 120-second per-turn timeout. It does not
|
|
180
|
+
begin implementation automatically.
|
|
181
|
+
|
|
182
|
+
## Optional daemon and dashboard
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
loadout daemon start
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
The daemon binds only to `127.0.0.1`. It prints an authenticated dashboard URL
|
|
189
|
+
whose token is carried in the URL fragment, moved immediately into browser
|
|
190
|
+
session storage, and removed from visible history. REST and SSE accept bearer
|
|
191
|
+
headers only; query-string tokens, non-loopback Host headers, and cross-origin
|
|
192
|
+
browser requests are rejected. The token and session state are project-local
|
|
193
|
+
files with mode `0600`.
|
|
194
|
+
|
|
195
|
+
The dashboard is observability, not an agent injector. Use the MCP tools or the
|
|
196
|
+
provider bridge for agent-to-agent delivery.
|
|
197
|
+
|
|
198
|
+
## Safety and data model
|
|
199
|
+
|
|
200
|
+
- Event schemas cap names, descriptions, context, payloads, arrays, and paths.
|
|
201
|
+
- Secret-like keys and values are redacted at the canonical write boundary, so
|
|
202
|
+
CLI, MCP, and HTTP writes follow the same rule.
|
|
203
|
+
- Ownership claims use normalized project-relative paths and detect directory /
|
|
204
|
+
child overlap.
|
|
205
|
+
- Contract revisions and event sequences are allocated while holding the same
|
|
206
|
+
project lock.
|
|
207
|
+
- Compaction first writes a complete archival copy and aborts if archival fails.
|
|
208
|
+
- Corrupt JSONL lines are reported rather than hiding valid neighboring events.
|
|
209
|
+
- `.handoff/coordination.jsonl` is project data. Do not commit it when its facts
|
|
210
|
+
are private; add the appropriate `.handoff` paths to `.gitignore`.
|
|
211
|
+
|
|
212
|
+
## Honest limitations
|
|
213
|
+
|
|
214
|
+
- This is durable shared state plus follow-up turns, not one simultaneous model
|
|
215
|
+
context or provider-to-provider hidden channel.
|
|
216
|
+
- Claude Code and Codex authentication, quotas, billing, and host session IDs
|
|
217
|
+
remain provider concerns.
|
|
218
|
+
- The bridge cannot steer a turn already in progress.
|
|
219
|
+
- The design-room kill switch cannot cancel a provider call already in flight;
|
|
220
|
+
it prevents persistence and the next provider turn.
|
|
221
|
+
- A provider may fail, time out, reject a resume ID, or return output Loadout
|
|
222
|
+
cannot parse. The event stays durable and can still be consumed manually.
|
|
223
|
+
- The bridge is local to one machine and one repository. Remote teams need a
|
|
224
|
+
separately designed authenticated transport; this release intentionally does
|
|
225
|
+
not expose the daemon to a network.
|
|
226
|
+
|
|
227
|
+
## Evidence
|
|
228
|
+
|
|
229
|
+
The coordination test suite covers concurrent writers, ownership conflicts,
|
|
230
|
+
revision allocation, malformed logs, redaction, authenticated HTTP/SSE, MCP
|
|
231
|
+
stdio framing, retention failure safety, kill-switch behavior, provider CLI/SDK
|
|
232
|
+
shapes, session replay, concurrent provider delivery, passive policy, and the
|
|
233
|
+
automatic-turn cap. The package smoke test verifies the compiled MCP artifact is
|
|
234
|
+
included in the npm tarball.
|
|
@@ -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 | [](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
|
+
## 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.
|
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:
|
package/docs/USER_TEST_GUIDE.md
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
##
|
|
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:
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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.
|