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