brainclaw 1.28.3 → 1.28.4
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/README.md +6 -0
- package/dist/brainclaw-vscode.vsix +0 -0
- package/dist/commands/harvest.js +67 -25
- package/dist/commands/loops-handlers.js +28 -1
- package/dist/commands/mcp-catalog.js +23 -2
- package/dist/commands/mcp-read-handlers.js +15 -1
- package/dist/commands/mcp-schemas.generated.js +13 -0
- package/dist/commands/mcp-write-coordination.js +84 -22
- package/dist/commands/mcp-write-memory.js +87 -1
- package/dist/commands/mcp.js +16 -2
- package/dist/core/context.js +16 -3
- package/dist/core/dispatch-status.js +36 -14
- package/dist/core/dispatcher.js +28 -20
- package/dist/core/entity-operations.js +62 -4
- package/dist/core/entity-registry.js +3 -3
- package/dist/core/execution-adapters.js +10 -0
- package/dist/core/facade-schema.js +10 -0
- package/dist/core/ideation-loop-close.js +3 -1
- package/dist/core/lane-result-file.js +72 -0
- package/dist/core/loop-turn-dispatch.js +2 -0
- package/dist/core/loops/brief-assembly.js +19 -11
- package/dist/core/loops/next-expected.js +56 -1
- package/dist/core/loops/reconcile-turn.js +8 -0
- package/dist/core/loops/result-reducers.js +14 -12
- package/dist/core/loops/store.js +4 -0
- package/dist/core/loops/types.js +14 -2
- package/dist/core/loops/verbs.js +8 -1
- package/dist/core/loops/worker-reply-contract.js +1 -1
- package/dist/core/protocol-tool-policy.js +1 -0
- package/dist/core/review-loop-turn-dispatch.js +1 -0
- package/dist/core/schema.js +24 -1
- package/dist/core/search.js +3 -2
- package/dist/core/worktree.js +14 -7
- package/dist/facts.js +9 -8
- package/dist/facts.json +8 -7
- package/docs/cli.md +33 -0
- package/docs/concepts/ideation-loop.md +35 -14
- package/docs/integrations/mcp.md +13 -3
- package/docs/mcp-schema-changelog.md +42 -6
- package/package.json +1 -1
package/dist/facts.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// Generated by scripts/emit-site-facts.mjs at build time. Do not edit manually.
|
|
2
|
-
// Source: brainclaw v1.28.
|
|
2
|
+
// Source: brainclaw v1.28.4 on 2026-08-28T07:25:30.486Z
|
|
3
3
|
export const FACTS = {
|
|
4
|
-
"version": "1.28.
|
|
5
|
-
"generated_at": "2026-08-
|
|
4
|
+
"version": "1.28.4",
|
|
5
|
+
"generated_at": "2026-08-28T07:25:30.486Z",
|
|
6
6
|
"tools": {
|
|
7
|
-
"count":
|
|
8
|
-
"published_count":
|
|
7
|
+
"count": 71,
|
|
8
|
+
"published_count": 69,
|
|
9
9
|
"names": [
|
|
10
10
|
"bclaw_bootstrap",
|
|
11
11
|
"bclaw_release_notes",
|
|
@@ -70,6 +70,7 @@ export const FACTS = {
|
|
|
70
70
|
"bclaw_assignment_update",
|
|
71
71
|
"bclaw_assignment_action",
|
|
72
72
|
"bclaw_harvest_candidates",
|
|
73
|
+
"bclaw_harvest",
|
|
73
74
|
"bclaw_find",
|
|
74
75
|
"bclaw_get",
|
|
75
76
|
"bclaw_create",
|
|
@@ -478,7 +479,7 @@ export const FACTS = {
|
|
|
478
479
|
},
|
|
479
480
|
"bench": {
|
|
480
481
|
"schema": "brainclaw.bench.v1",
|
|
481
|
-
"generated_at": "2026-08-
|
|
482
|
+
"generated_at": "2026-08-28T07:25:28.367Z",
|
|
482
483
|
"node_version": "v24.19.0",
|
|
483
484
|
"platform": "linux-x64",
|
|
484
485
|
"repeats": 3,
|
|
@@ -487,7 +488,7 @@ export const FACTS = {
|
|
|
487
488
|
"name": "cold_onboard",
|
|
488
489
|
"volume": "empty",
|
|
489
490
|
"description": "fresh machine → init → first useful context. Baseline for time-to-first-value.",
|
|
490
|
-
"duration_ms_median":
|
|
491
|
+
"duration_ms_median": 80,
|
|
491
492
|
"payload_chars_median": 1640,
|
|
492
493
|
"payload_tokens_est_median": 410
|
|
493
494
|
},
|
|
@@ -495,7 +496,7 @@ export const FACTS = {
|
|
|
495
496
|
"name": "warm_work",
|
|
496
497
|
"volume": "medium",
|
|
497
498
|
"description": "bclaw_work consult over a real-shaped store (~200 plans / 500 handoffs / 450 claims).",
|
|
498
|
-
"duration_ms_median":
|
|
499
|
+
"duration_ms_median": 124,
|
|
499
500
|
"payload_chars_median": 2626,
|
|
500
501
|
"payload_tokens_est_median": 657
|
|
501
502
|
},
|
package/dist/facts.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.28.
|
|
3
|
-
"generated_at": "2026-08-
|
|
2
|
+
"version": "1.28.4",
|
|
3
|
+
"generated_at": "2026-08-28T07:25:30.486Z",
|
|
4
4
|
"tools": {
|
|
5
|
-
"count":
|
|
6
|
-
"published_count":
|
|
5
|
+
"count": 71,
|
|
6
|
+
"published_count": 69,
|
|
7
7
|
"names": [
|
|
8
8
|
"bclaw_bootstrap",
|
|
9
9
|
"bclaw_release_notes",
|
|
@@ -68,6 +68,7 @@
|
|
|
68
68
|
"bclaw_assignment_update",
|
|
69
69
|
"bclaw_assignment_action",
|
|
70
70
|
"bclaw_harvest_candidates",
|
|
71
|
+
"bclaw_harvest",
|
|
71
72
|
"bclaw_find",
|
|
72
73
|
"bclaw_get",
|
|
73
74
|
"bclaw_create",
|
|
@@ -476,7 +477,7 @@
|
|
|
476
477
|
},
|
|
477
478
|
"bench": {
|
|
478
479
|
"schema": "brainclaw.bench.v1",
|
|
479
|
-
"generated_at": "2026-08-
|
|
480
|
+
"generated_at": "2026-08-28T07:25:28.367Z",
|
|
480
481
|
"node_version": "v24.19.0",
|
|
481
482
|
"platform": "linux-x64",
|
|
482
483
|
"repeats": 3,
|
|
@@ -485,7 +486,7 @@
|
|
|
485
486
|
"name": "cold_onboard",
|
|
486
487
|
"volume": "empty",
|
|
487
488
|
"description": "fresh machine → init → first useful context. Baseline for time-to-first-value.",
|
|
488
|
-
"duration_ms_median":
|
|
489
|
+
"duration_ms_median": 80,
|
|
489
490
|
"payload_chars_median": 1640,
|
|
490
491
|
"payload_tokens_est_median": 410
|
|
491
492
|
},
|
|
@@ -493,7 +494,7 @@
|
|
|
493
494
|
"name": "warm_work",
|
|
494
495
|
"volume": "medium",
|
|
495
496
|
"description": "bclaw_work consult over a real-shaped store (~200 plans / 500 handoffs / 450 claims).",
|
|
496
|
-
"duration_ms_median":
|
|
497
|
+
"duration_ms_median": 124,
|
|
497
498
|
"payload_chars_median": 2626,
|
|
498
499
|
"payload_tokens_est_median": 657
|
|
499
500
|
},
|
package/docs/cli.md
CHANGED
|
@@ -1185,6 +1185,39 @@ brainclaw update-handoff hnd_001 --review-verdict request_changes --reviewed-by
|
|
|
1185
1185
|
|
|
1186
1186
|
---
|
|
1187
1187
|
|
|
1188
|
+
## Worker result harvest
|
|
1189
|
+
|
|
1190
|
+
### `brainclaw harvest [assignment_id]`
|
|
1191
|
+
|
|
1192
|
+
Ingest a worker's `LANE-RESULT.json`, reconcile any bound loop turn, and report
|
|
1193
|
+
the exact continuation. Pass one assignment id or use `--all`; this is distinct
|
|
1194
|
+
from `harvest-candidates`, which imports proposed memory items.
|
|
1195
|
+
|
|
1196
|
+
| Option | Description |
|
|
1197
|
+
|---|---|
|
|
1198
|
+
| `--all` | Scan every managed worktree |
|
|
1199
|
+
| `--integrate` | Also commit a sandboxed worker's worktree diff and settle its lifecycle |
|
|
1200
|
+
| `--orphaned` | Recover a dead worker that left no lane result, without deleting/resetting work |
|
|
1201
|
+
| `--base <ref>` | Base ref used by orphan recovery (default `master`) |
|
|
1202
|
+
| `--dry-run` | Preview without writing events or markers |
|
|
1203
|
+
| `--worktree <path>` | Explicit worktree to scan; repeatable |
|
|
1204
|
+
| `--json` | Return lane results, warnings, and loop continuations as JSON |
|
|
1205
|
+
|
|
1206
|
+
```bash
|
|
1207
|
+
brainclaw harvest asgn_123
|
|
1208
|
+
brainclaw harvest --all --json
|
|
1209
|
+
brainclaw harvest --integrate asgn_123
|
|
1210
|
+
```
|
|
1211
|
+
|
|
1212
|
+
The exact filename is `LANE-RESULT.json`. A unique root-level JSON file whose
|
|
1213
|
+
schema and `assignment_id` match can be recovered when a worker chose the wrong
|
|
1214
|
+
name; Brainclaw refuses ambiguous candidates. `artifacts` accepts either string
|
|
1215
|
+
refs or `{type, ref, description?}` objects, while loop workers must also emit
|
|
1216
|
+
the `artifact_type` named in their brief. A repairable schema/contract error
|
|
1217
|
+
keeps the real turn replayable and eligible for corrected re-harvest.
|
|
1218
|
+
|
|
1219
|
+
---
|
|
1220
|
+
|
|
1188
1221
|
## Dispatch
|
|
1189
1222
|
|
|
1190
1223
|
The `dispatch` command group manages the local agent dispatcher: it analyzes the active sequence for lane readiness and assigns work to available agents.
|
|
@@ -49,7 +49,7 @@ proposal → critique ↔ revision → synthesis
|
|
|
49
49
|
| Phase | Purpose | What the slot produces |
|
|
50
50
|
|---|---|---|
|
|
51
51
|
| `proposal` | Seed: the original idea / decision under consideration | A `proposal` artifact (the task text from the caller) |
|
|
52
|
-
| `critique` | Adversarial review
|
|
52
|
+
| `critique` | Adversarial review seeded by project memory and verified against the current worktree | One or more `critique` artifacts citing repository evidence and any memory ids used as leads |
|
|
53
53
|
| `revision` | Champion's response to the critique batch | A `revision` artifact addressing the points raised |
|
|
54
54
|
| `synthesis` | Final plan_draft folding the cycle's outputs | A `plan_draft` artifact with `addresses_critique:[ids]` |
|
|
55
55
|
|
|
@@ -171,6 +171,10 @@ goal: …
|
|
|
171
171
|
## what to produce
|
|
172
172
|
- Phase "critique" expects you to act in role "critic".
|
|
173
173
|
- Emit findings as LoopArtifacts via bclaw_loop intent='complete_turn'…
|
|
174
|
+
- Treat memory as an investigation lead, not current-code proof.
|
|
175
|
+
- Verify implementation findings against the worktree and cite a path plus a
|
|
176
|
+
line, symbol, assertion, or test/command result. Unverified concerns remain
|
|
177
|
+
questions, not findings.
|
|
174
178
|
- Cite the memory ids you relied on so the synthesis can audit coverage.
|
|
175
179
|
```
|
|
176
180
|
|
|
@@ -222,26 +226,43 @@ filter, gate, iteration accounting) but want to drive each turn
|
|
|
222
226
|
yourself — useful for one-shot consultations or when you don't have
|
|
223
227
|
a separate critic agent on hand.
|
|
224
228
|
|
|
225
|
-
### Multi-
|
|
229
|
+
### Multi-instance, multi-turn mode
|
|
226
230
|
|
|
227
231
|
```
|
|
228
232
|
bclaw_coordinate(intent='ideate',
|
|
229
233
|
task='Should we adopt approach A or approach B?',
|
|
230
|
-
targetAgents=['codex']
|
|
234
|
+
targetAgents=['codex', 'codex', 'codex'],
|
|
235
|
+
criticPerspectives=[
|
|
236
|
+
'challenge assumptions and demand evidence',
|
|
237
|
+
'focus on failure modes and recovery',
|
|
238
|
+
'develop alternatives and compare trade-offs'
|
|
239
|
+
])
|
|
231
240
|
```
|
|
232
241
|
|
|
233
242
|
- Opens a loop with `champion` slot (caller) + one `critic` slot per
|
|
234
|
-
target
|
|
243
|
+
requested target instance. Repeated identities are intentional: a user with
|
|
244
|
+
only one installed agent can request three isolated Codex, Claude, or other
|
|
245
|
+
critic instances. Each occurrence gets its own slot, claim, worktree,
|
|
246
|
+
assignment, and turn authority; the three-artifact gate does not require
|
|
247
|
+
three different agent families.
|
|
235
248
|
- Stores `task` as a `proposal` artifact.
|
|
236
249
|
- Advances proposal → critique.
|
|
237
|
-
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
250
|
+
- Persists a distinct `perspective` on every critic slot. When
|
|
251
|
+
`criticPerspectives` is omitted, Brainclaw supplies complementary evidence,
|
|
252
|
+
failure-mode, and alternatives/trade-off lenses.
|
|
253
|
+
- Uses `ideation_schedule='sequential'` by default. Only critic A starts
|
|
254
|
+
initially. After its result is harvested, `continuations` and `next_actions`
|
|
255
|
+
name critic B's real `turn(dispatch=true)`; B's brief includes A's critique
|
|
256
|
+
from the current round. C then sees A+B. The champion revises after the gate,
|
|
257
|
+
and the ordered conversation starts again in the next iteration.
|
|
258
|
+
- `ideation_schedule='parallel'` is an explicit latency/quality trade-off that
|
|
259
|
+
starts every critic immediately. It is useful when independent first
|
|
260
|
+
impressions matter more than cross-challenge and token cost.
|
|
261
|
+
- `brainclaw harvest <assignment>` and MCP `bclaw_harvest` both surface the
|
|
262
|
+
loop continuation. Workers may also finish through `complete_turn` directly.
|
|
243
263
|
- Returns `{loop_id, …, mode: 'multi_agent',
|
|
244
|
-
dispatched_critics
|
|
264
|
+
ideation_schedule, dispatched_critics, pending_critics,
|
|
265
|
+
current_phase: 'critique'}`.
|
|
245
266
|
|
|
246
267
|
When the critique phase brief is truncated for any slot, a per-slot
|
|
247
268
|
warning surfaces. When dispatch fails (e.g. an agent is unknown), the
|
|
@@ -299,9 +320,9 @@ which critiques were honoured vs ignored.
|
|
|
299
320
|
framings, and "wrong question" findings that memory-driven critique
|
|
300
321
|
is structurally unable to produce. Validated empirically; ships on
|
|
301
322
|
its own cadence after MVP usage telemetry.
|
|
302
|
-
- **
|
|
303
|
-
|
|
304
|
-
|
|
323
|
+
- **Richer perspective presets.** Slots already persist caller-provided or
|
|
324
|
+
default critic lenses. Named reusable perspective packs can build on that
|
|
325
|
+
contract without coupling diversity to agent identity.
|
|
305
326
|
- **Cross-loop memory.** Promoting validated plan_drafts back into
|
|
306
327
|
the project memory store with provenance. Today the synthesis
|
|
307
328
|
artifact lives only in the loop event journal.
|
package/docs/integrations/mcp.md
CHANGED
|
@@ -47,7 +47,7 @@ Every tool has one of three tiers in its `annotations.tier` field:
|
|
|
47
47
|
- **standard** — Day-to-day coordination tools: plans, claims, messaging, sequences, dispatch, review, memory. Returned by default alongside facades.
|
|
48
48
|
- **advanced** — Specialized governance, audit, registry, and power tools.
|
|
49
49
|
|
|
50
|
-
By default, `tools/list` returns **facade + standard** tools (
|
|
50
|
+
By default, `tools/list` returns **facade + standard** tools (50 tools). To get all tools including advanced, pass `{ "catalog": "all" }`, `{ "include": "all" }`, or `{ "advanced": true }`. To filter by a single tier, pass `{ "tier": "facade" }`, `{ "tier": "standard" }`, or `{ "tier": "advanced" }`.
|
|
51
51
|
|
|
52
52
|
Published tools remain callable regardless of catalog filtering — the tier only affects discovery via `tools/list`.
|
|
53
53
|
|
|
@@ -101,6 +101,7 @@ Each tool also has an `annotations.category` field: `session`, `context`, `memor
|
|
|
101
101
|
| `bclaw_assignment_update` | coordination | Report assignment lifecycle status; v2 logical Assignments require the full generation fence and accept only accepted/started/progress before settlement |
|
|
102
102
|
| `bclaw_assignment_action` | coordination | Resolve or reject a pending ActionRequired item |
|
|
103
103
|
| `bclaw_harvest_candidates` | coordination | Harvest sandboxed worktree candidate files into the main project store |
|
|
104
|
+
| `bclaw_harvest` | coordination | Harvest or integrate worker `LANE-RESULT.json` files, reconcile loop turns, and return the exact continuation |
|
|
104
105
|
| `bclaw_find` | memory | List canonical entities with filters |
|
|
105
106
|
| `bclaw_get` | memory | Fetch a canonical entity by id or short label |
|
|
106
107
|
| `bclaw_create` | memory | Create a canonical entity |
|
|
@@ -403,11 +404,20 @@ bclaw_dispatch({ intent: 'review', openLoop: true, reviewMode: 'symmetric' })
|
|
|
403
404
|
// synthesis are worker phases available through trusted turn(dispatch:true).
|
|
404
405
|
bclaw_coordinate({ intent: 'ideate', task: 'Should we extract the dispatcher into a separate package?' })
|
|
405
406
|
|
|
406
|
-
// Multi-
|
|
407
|
+
// Multi-instance ideation is sequential and multi-turn by default: each critic
|
|
408
|
+
// sees the earlier contributions in its round. Repeated identities are valid.
|
|
407
409
|
bclaw_coordinate({
|
|
408
410
|
intent: 'ideate',
|
|
409
411
|
task: 'Should we adopt approach A or approach B?',
|
|
410
|
-
targetAgents: ['codex'],
|
|
412
|
+
targetAgents: ['codex', 'codex', 'codex'],
|
|
413
|
+
criticPerspectives: ['assumptions/evidence', 'failure modes/recovery', 'alternatives/trade-offs'],
|
|
414
|
+
})
|
|
415
|
+
|
|
416
|
+
// Opt into independent immediate fan-out only when latency matters more than
|
|
417
|
+
// cross-challenge and cost.
|
|
418
|
+
bclaw_coordinate({
|
|
419
|
+
intent: 'ideate', task: 'Collect independent first impressions',
|
|
420
|
+
targetAgents: ['codex', 'codex', 'codex'], ideation_schedule: 'parallel',
|
|
411
421
|
})
|
|
412
422
|
|
|
413
423
|
// Open a direct implementation loop. The caller owns subsequent bind/turn
|
|
@@ -8,6 +8,43 @@ guarantees this changelog follows.
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
## [1.28.4] — 2026-08-28
|
|
12
|
+
|
|
13
|
+
- MCP public surface fingerprint: `sha256:42cd662667260792`
|
|
14
|
+
|
|
15
|
+
**Added — lane-result harvest parity**
|
|
16
|
+
|
|
17
|
+
- `bclaw_harvest` is a new standard coordination write tool matching the CLI
|
|
18
|
+
lane-result path. It accepts one `assignmentId` or `all=true`, optional
|
|
19
|
+
`worktreePaths`, `dryRun`, and `integrate`; successful report harvests return
|
|
20
|
+
reconciled `continuations` and executable `next_actions`.
|
|
21
|
+
|
|
22
|
+
**Changed — ideation is instance-based and sequential by default**
|
|
23
|
+
|
|
24
|
+
- `bclaw_coordinate(intent="ideate")` accepts repeated `targetAgents`, an
|
|
25
|
+
optional positionally aligned `criticPerspectives` array, and
|
|
26
|
+
`ideation_schedule: "sequential" | "parallel"` (default sequential).
|
|
27
|
+
- The result adds `ideation_schedule` and `pending_critics`. Sequential briefs
|
|
28
|
+
include critiques already produced in the same round, so participants
|
|
29
|
+
challenge one another before champion revision and the next bounded round.
|
|
30
|
+
|
|
31
|
+
**Changed — compact, actionable read projections**
|
|
32
|
+
|
|
33
|
+
- `bclaw_find` accepts optional `fields`; one item larger than `budget_tokens`
|
|
34
|
+
is projected to identity/status fields and reports
|
|
35
|
+
`oversized_item_projected` rather than overrunning the response budget.
|
|
36
|
+
- Agent rows add `declared_spawnable`, `executable_now`, `availability_code`,
|
|
37
|
+
and `availability_reason`.
|
|
38
|
+
- Work context's `pending_notifications` is now a compact summary containing
|
|
39
|
+
`actionable_count`, `by_type`, and `telemetry_events_omitted`; the raw event
|
|
40
|
+
count remains available as `unseen_event_count`.
|
|
41
|
+
- `bclaw_dispatch_status` adds canonical `terminal_signal` evidence and may
|
|
42
|
+
diagnose stale explicit progress as `stalled` despite a live wrapper PID or
|
|
43
|
+
unrelated filesystem activity.
|
|
44
|
+
|
|
45
|
+
All changes are additive except the intentionally compacted
|
|
46
|
+
`pending_notifications` value shape.
|
|
47
|
+
|
|
11
48
|
## [1.28.3] — 2026-08-26
|
|
12
49
|
|
|
13
50
|
**Changed — durable Code Map cascade execution**
|
|
@@ -438,12 +475,11 @@ will still succeed. A follow-up PR will strip the dead handler code.
|
|
|
438
475
|
changelog records the published MCP surface fingerprint. When a tool
|
|
439
476
|
name, tier, category, or input schema changes, the test fails until
|
|
440
477
|
this section is updated.
|
|
441
|
-
- MCP public surface fingerprint: `sha256:
|
|
442
|
-
(updated 2026-08-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
Previous: `sha256:681c47cba85b79c3`
|
|
478
|
+
- MCP public surface fingerprint: `sha256:42cd662667260792`
|
|
479
|
+
(updated 2026-08-28 for the additive `bclaw_harvest` surface, sequential
|
|
480
|
+
ideation controls, compact read projections, and loop-slot perspective and
|
|
481
|
+
completion fields.)
|
|
482
|
+
Previous: `sha256:be86e5571fcd0226`
|
|
447
483
|
(`LoopSlotInput` gains optional `lane`, `scope_hint`, `plan_ids`, and
|
|
448
484
|
`step_ids` fields so implementation-loop lane scope and provenance survive
|
|
449
485
|
through the public facade. Existing callers remain valid.)
|