brainclaw 1.28.3 → 1.28.5
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/cli/register-code-map.js +1 -0
- package/dist/commands/code-map.js +5 -1
- package/dist/commands/harvest.js +67 -25
- package/dist/commands/loops-handlers.js +28 -1
- package/dist/commands/mcp-catalog.js +32 -4
- 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 +60 -11
- package/dist/commands/switch.js +8 -1
- package/dist/core/code-map/backend.js +19 -5
- package/dist/core/code-map/refresh-jobs.js +158 -0
- package/dist/core/code-map/refresh-worker.js +12 -0
- 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 +14 -13
- package/dist/facts.json +13 -12
- package/docs/cli.md +37 -4
- package/docs/code-map.md +30 -18
- package/docs/concepts/ideation-loop.md +35 -14
- package/docs/integrations/mcp.md +17 -7
- package/docs/mcp-schema-changelog.md +63 -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.5 on 2026-08-28T18:04:39.470Z
|
|
3
3
|
export const FACTS = {
|
|
4
|
-
"version": "1.28.
|
|
5
|
-
"generated_at": "2026-08-
|
|
4
|
+
"version": "1.28.5",
|
|
5
|
+
"generated_at": "2026-08-28T18:04:39.470Z",
|
|
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-28T18:04:37.892Z",
|
|
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": 51,
|
|
491
492
|
"payload_chars_median": 1640,
|
|
492
493
|
"payload_tokens_est_median": 410
|
|
493
494
|
},
|
|
@@ -495,17 +496,17 @@ 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
|
-
"payload_chars_median":
|
|
500
|
-
"payload_tokens_est_median":
|
|
499
|
+
"duration_ms_median": 72,
|
|
500
|
+
"payload_chars_median": 2625,
|
|
501
|
+
"payload_tokens_est_median": 656
|
|
501
502
|
},
|
|
502
503
|
{
|
|
503
504
|
"name": "first_edit",
|
|
504
505
|
"volume": "medium",
|
|
505
506
|
"description": "code_find + code_brief on the fresh-agent path (missing index, first touch).",
|
|
506
|
-
"duration_ms_median":
|
|
507
|
-
"payload_chars_median":
|
|
508
|
-
"payload_tokens_est_median":
|
|
507
|
+
"duration_ms_median": 8,
|
|
508
|
+
"payload_chars_median": 1680,
|
|
509
|
+
"payload_tokens_est_median": 420
|
|
509
510
|
}
|
|
510
511
|
]
|
|
511
512
|
}
|
package/dist/facts.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.28.
|
|
3
|
-
"generated_at": "2026-08-
|
|
2
|
+
"version": "1.28.5",
|
|
3
|
+
"generated_at": "2026-08-28T18:04:39.470Z",
|
|
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-28T18:04:37.892Z",
|
|
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": 51,
|
|
489
490
|
"payload_chars_median": 1640,
|
|
490
491
|
"payload_tokens_est_median": 410
|
|
491
492
|
},
|
|
@@ -493,17 +494,17 @@
|
|
|
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
|
-
"payload_chars_median":
|
|
498
|
-
"payload_tokens_est_median":
|
|
497
|
+
"duration_ms_median": 72,
|
|
498
|
+
"payload_chars_median": 2625,
|
|
499
|
+
"payload_tokens_est_median": 656
|
|
499
500
|
},
|
|
500
501
|
{
|
|
501
502
|
"name": "first_edit",
|
|
502
503
|
"volume": "medium",
|
|
503
504
|
"description": "code_find + code_brief on the fresh-agent path (missing index, first touch).",
|
|
504
|
-
"duration_ms_median":
|
|
505
|
-
"payload_chars_median":
|
|
506
|
-
"payload_tokens_est_median":
|
|
505
|
+
"duration_ms_median": 8,
|
|
506
|
+
"payload_chars_median": 1680,
|
|
507
|
+
"payload_tokens_est_median": 420
|
|
507
508
|
}
|
|
508
509
|
]
|
|
509
510
|
}
|
package/docs/cli.md
CHANGED
|
@@ -632,18 +632,18 @@ brainclaw note create "Need follow-up on launcher script" --plan pln_abc123
|
|
|
632
632
|
|
|
633
633
|
## Code Map
|
|
634
634
|
|
|
635
|
-
A per-project Tree-sitter symbol + import index
|
|
635
|
+
A per-project Tree-sitter symbol + import index across 11 languages so agents
|
|
636
636
|
can ask "where is X / what should I read first" before editing. The MCP equivalents
|
|
637
637
|
are `bclaw_code_status` / `bclaw_code_find` / `bclaw_code_brief` / `bclaw_code_refresh`.
|
|
638
638
|
Full reference (freshness model, supported languages, WASM bundling): [docs/code-map.md](code-map.md).
|
|
639
639
|
|
|
640
640
|
### `brainclaw code-map status [--cascade]`
|
|
641
641
|
|
|
642
|
-
|
|
642
|
+
Physical store-path presence, readable-index presence, freshness badge (`fresh` / `stale_changed_files` / `stale_extractor` / `stale_grammar` / `partial` / `missing_index`), and index stats (files, nodes, edges). Read-only. In a multi-project workspace, `--cascade` adds compact coverage counts and names only non-fresh projects. On MCP, status also follows the latest durable refresh job and accepts `project` for explicit targeting.
|
|
643
643
|
|
|
644
|
-
### `brainclaw code-map refresh [--all|--changed] [--cascade]`
|
|
644
|
+
### `brainclaw code-map refresh [--all|--changed|--scope changed|all] [--cascade]`
|
|
645
645
|
|
|
646
|
-
Build or update the index. `--changed` (default) re-parses only touched files; `--all` does a full re-index. Run this when status shows `missing_index` or a stale badge. Fails fast
|
|
646
|
+
Build or update the index. `--changed` (default) re-parses only touched files; `--all` does a full re-index; `--scope changed|all` is the MCP-compatible spelling. Run this when status shows `missing_index` or a stale badge. Fails fast if another writer holds the project lock. In a multi-project workspace, `--cascade` synchronously refreshes each discovered project into its own store plus a root store scoped to files no child owns. MCP refreshes return durable jobs immediately; follow them with `bclaw_code_status`, preserving the same optional `project`, or use `cascade=true` for a workspace job. See [docs/code-map.md](code-map.md#cascading-a-multi-project-workspace---cascade).
|
|
647
647
|
|
|
648
648
|
### `brainclaw code-map find <query> [--limit <n>]`
|
|
649
649
|
|
|
@@ -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.
|
package/docs/code-map.md
CHANGED
|
@@ -13,7 +13,7 @@ code, never blocks `bclaw_work`, and degrades gracefully: if the index is
|
|
|
13
13
|
missing or stale, every command says so via a freshness badge instead of
|
|
14
14
|
returning silently wrong answers.
|
|
15
15
|
|
|
16
|
-
The index lives under `.brainclaw/code
|
|
16
|
+
The index lives under `.brainclaw/code/` (one JSONL shard per file, plus
|
|
17
17
|
named symbol/import indexes and a manifest). It is safe to delete; a refresh
|
|
18
18
|
rebuilds it.
|
|
19
19
|
|
|
@@ -37,8 +37,10 @@ accepts `--json` for machine-readable output, and prints a `Freshness:` line.
|
|
|
37
37
|
|
|
38
38
|
### `brainclaw code-map status`
|
|
39
39
|
|
|
40
|
-
Read-only. Reports whether the store exists,
|
|
41
|
-
stats (files indexed, nodes,
|
|
40
|
+
Read-only. Reports whether the physical store path exists, whether a valid
|
|
41
|
+
index is readable, the freshness badge, and index stats (files indexed, nodes,
|
|
42
|
+
edges). `store_exists`, `index_exists`, and `index_manifest_exists` deliberately
|
|
43
|
+
separate a directory containing job records from a usable index. Never refreshes.
|
|
42
44
|
|
|
43
45
|
```bash
|
|
44
46
|
brainclaw code-map status
|
|
@@ -47,6 +49,7 @@ brainclaw code-map status
|
|
|
47
49
|
```
|
|
48
50
|
Code Map status
|
|
49
51
|
Store: present
|
|
52
|
+
Index: ready
|
|
50
53
|
Root: /workspace/apps/api
|
|
51
54
|
Path: /workspace/apps/api/.brainclaw/code
|
|
52
55
|
Freshness: fresh
|
|
@@ -55,7 +58,7 @@ Code Map status
|
|
|
55
58
|
Edges: 2410
|
|
56
59
|
```
|
|
57
60
|
|
|
58
|
-
### `brainclaw code-map refresh [--changed | --all]`
|
|
61
|
+
### `brainclaw code-map refresh [--changed | --all | --scope changed|all]`
|
|
59
62
|
|
|
60
63
|
Rebuilds the index behind a per-project lock. Defaults to `--changed`.
|
|
61
64
|
|
|
@@ -63,6 +66,7 @@ Rebuilds the index behind a per-project lock. Defaults to `--changed`.
|
|
|
63
66
|
|---|---|
|
|
64
67
|
| `--changed` (default) | Re-parses files whose **content** changed (git status + file-hash diff) **and** any shard whose stored extractor-config / grammar / engine hashes no longer match the current ones (i.e. `stale_extractor` / `stale_grammar`). A config or grammar bump is therefore healed by this cheap path — not only by `--all`. Compaction is limited to git-proven deletes. |
|
|
65
68
|
| `--all` | Enumerates every supported file, re-parses, and performs full orphan compaction (drops shards whose file is gone or now ignored). |
|
|
69
|
+
| `--scope changed\|all` | Uses the same scope spelling as MCP. Existing `--changed` / `--all` flags remain supported. |
|
|
66
70
|
|
|
67
71
|
If a live writer already holds the project lock, `refresh` **fails fast** with a
|
|
68
72
|
clear status rather than blocking — it never stalls `bclaw_work`.
|
|
@@ -70,6 +74,7 @@ clear status rather than blocking — it never stalls `bclaw_work`.
|
|
|
70
74
|
```bash
|
|
71
75
|
brainclaw code-map refresh # changed (cheap, default)
|
|
72
76
|
brainclaw code-map refresh --all # full rebuild + compaction
|
|
77
|
+
brainclaw code-map refresh --scope changed
|
|
73
78
|
```
|
|
74
79
|
|
|
75
80
|
### `brainclaw code-map find <query>`
|
|
@@ -126,11 +131,15 @@ all return a `freshness_badge`:
|
|
|
126
131
|
|
|
127
132
|
| Tool | Kind | Purpose |
|
|
128
133
|
|---|---|---|
|
|
129
|
-
| `bclaw_code_status` | read | Active-session project store, freshness,
|
|
130
|
-
| `bclaw_code_find` | read | Ranked symbol-index search (`query`, optional `limit`). Never refreshes. |
|
|
131
|
-
| `bclaw_code_brief` | read | Reading brief for a symbol/path (`target`, optional `limit`, files capped at 12). Never refreshes. |
|
|
134
|
+
| `bclaw_code_status` | read | Active-session or explicit `project` store/path/index diagnostics, freshness, stats, and latest refresh job; `cascade=true` also follows the latest cascade job. Never refreshes. |
|
|
135
|
+
| `bclaw_code_find` | read | Ranked symbol-index search (`query`, optional `limit`/`project`). Never refreshes. |
|
|
136
|
+
| `bclaw_code_brief` | read | Reading brief for a symbol/path (`target`, optional `limit`/`project`, files capped at 12). Never refreshes. |
|
|
132
137
|
| `bclaw_code_export` | read | Bounded local subgraph around required `target`; direction/depth/node/edge caps, confidence filtering, and optional Mermaid projection. Never refreshes. |
|
|
133
|
-
| `bclaw_code_refresh` | write |
|
|
138
|
+
| `bclaw_code_refresh` | write | Accept a durable background rebuild and return immediately. `scope` = `"changed"` (default) or `"all"`; optional `project` targets a named/id/path project, and `cascade=true` spans a workspace. |
|
|
139
|
+
|
|
140
|
+
Every MCP Code Map tool accepts the same optional `project` selector (project
|
|
141
|
+
name, id, or workspace-relative path). It overrides the active session for that
|
|
142
|
+
call without mutating the session.
|
|
134
143
|
|
|
135
144
|
The read tools never trigger a parse — if `bclaw_code_status` /
|
|
136
145
|
`bclaw_code_find` / `bclaw_code_brief` report `missing_index` or a stale badge,
|
|
@@ -186,9 +195,9 @@ reconciliation at the read path:
|
|
|
186
195
|
file-hash diff vs the stored shards), so a stale index is always *visible*,
|
|
187
196
|
never silently wrong.
|
|
188
197
|
3. `refresh --changed` re-parses only the changed files (incremental); `--all` does
|
|
189
|
-
a full rebuild + orphan compaction.
|
|
190
|
-
|
|
191
|
-
|
|
198
|
+
a full rebuild + orphan compaction. MCP refreshes are explicit durable jobs;
|
|
199
|
+
their progress is read through `bclaw_code_status` (or
|
|
200
|
+
`bclaw_code_status(cascade=true)` for a workspace cascade).
|
|
192
201
|
4. `bclaw_work` nudges a refresh when the badge is `missing_index` or stale, so an
|
|
193
202
|
agent knows to reconcile before trusting the map.
|
|
194
203
|
|
|
@@ -219,10 +228,12 @@ like any other directory.
|
|
|
219
228
|
Both CLI and MCP status responses disclose the exact resolved project root and
|
|
220
229
|
Code Map store path. The MCP response additionally includes `active_source`, the
|
|
221
230
|
resolved project identity, the running server version, and the package version
|
|
222
|
-
visible on disk.
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
231
|
+
visible on disk. `store_exists` describes the physical directory;
|
|
232
|
+
`index_exists` describes a valid readable manifest. In a monorepo, compare
|
|
233
|
+
these fields before concluding that an index is missing: a root store and a
|
|
234
|
+
child store are intentionally distinct. If the versions differ, restart the
|
|
235
|
+
MCP server; if the roots differ, use `project="<name-or-path>"`, select the
|
|
236
|
+
intended session project, or pass `cascade=true` at the workspace root.
|
|
226
237
|
|
|
227
238
|
### Cascading a multi-project workspace (`--cascade`)
|
|
228
239
|
|
|
@@ -242,9 +253,10 @@ double-indexing**, even when projects nest inside one another. `--cascade` is
|
|
|
242
253
|
opt-in; without it, the root refresh keeps its single-tree behaviour (above), and
|
|
243
254
|
single-project repos ignore the flag entirely.
|
|
244
255
|
|
|
245
|
-
The CLI cascade stays synchronous. MCP `
|
|
246
|
-
|
|
247
|
-
|
|
256
|
+
The CLI cascade stays synchronous. Every MCP refresh returns a durable `job_id`
|
|
257
|
+
immediately, avoiding client timeouts; follow a normal refresh with
|
|
258
|
+
`bclaw_code_status(project=...)`, or a cascade with
|
|
259
|
+
`bclaw_code_status(cascade=true)`. Status reports completed
|
|
248
260
|
and total project counts, the project currently being indexed, and terminal
|
|
249
261
|
outcomes. Successful rows are aggregated; only exceptions are named. A project
|
|
250
262
|
with a valid empty index is labeled `no_eligible_files`, while lock contention and
|
|
@@ -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 |
|
|
@@ -108,13 +109,13 @@ Each tool also has an `annotations.category` field: `session`, `context`, `memor
|
|
|
108
109
|
| `bclaw_remove` | memory | Archive or purge a canonical entity |
|
|
109
110
|
| `bclaw_transition` | memory | Move an entity through its validated state machine |
|
|
110
111
|
| `bclaw_move` | memory | Relocate an item to another project, id-preserving (multi-project) |
|
|
111
|
-
| `bclaw_code_status` | discovery | Active-session Code Map
|
|
112
|
-
| `bclaw_code_find` | discovery | Search the Code Map symbol index by name
|
|
113
|
-
| `bclaw_code_brief` | discovery | Ranked reading list + related decisions/traps before editing a symbol or path |
|
|
112
|
+
| `bclaw_code_status` | discovery | Active-session or explicit `project` Code Map path/index diagnostics + freshness/stats; follows durable refresh jobs, with `cascade:true` for workspace progress |
|
|
113
|
+
| `bclaw_code_find` | discovery | Search the active or explicit `project` Code Map symbol index by name |
|
|
114
|
+
| `bclaw_code_brief` | discovery | Ranked reading list + related decisions/traps before editing a symbol or path, optionally targeted by `project` |
|
|
114
115
|
| `bclaw_code_impact` | discovery | Explainable local blast radius from resolved imports: definition, direct dependents, opt-in bounded transitives, tests, and count-based risk |
|
|
115
116
|
| `bclaw_code_export` | discovery | Compact bounded local nodes/edges around one symbol or file; preserves edge kind/source/confidence, with optional Mermaid projection |
|
|
116
117
|
| `bclaw_code_outline` | discovery | Source-ordered symbols of one indexed file (span, exported, confidence) — no reparse |
|
|
117
|
-
| `bclaw_code_refresh` | discovery |
|
|
118
|
+
| `bclaw_code_refresh` | discovery | Accept a durable Code Map rebuild (`scope: changed \| all`, optional `project`) and return immediately; `cascade:true` spans a workspace |
|
|
118
119
|
|
|
119
120
|
See [code map](../code-map.md) for the full Code Map reference (CLI, freshness model, supported languages).
|
|
120
121
|
|
|
@@ -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,62 @@ guarantees this changelog follows.
|
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
11
|
+
## [1.28.5] — 2026-08-28
|
|
12
|
+
|
|
13
|
+
- MCP public surface fingerprint: `sha256:f410416669e7fc9a`
|
|
14
|
+
|
|
15
|
+
**Changed — Code Map project targeting and durable refresh**
|
|
16
|
+
|
|
17
|
+
- Every `bclaw_code_*` input schema gains the same optional `project` selector
|
|
18
|
+
(name, id, or workspace-relative path). It overrides the active session for
|
|
19
|
+
one call without mutating it.
|
|
20
|
+
- `bclaw_code_refresh` now acknowledges every refresh as a durable job, not
|
|
21
|
+
only multi-project cascades. Its `scope: "changed" | "all"` contract is
|
|
22
|
+
unchanged and no new field is required.
|
|
23
|
+
- `bclaw_code_status` keeps its input compatibility while its result separates
|
|
24
|
+
physical path presence (`store_exists`) from a readable index
|
|
25
|
+
(`index_exists`, `index_manifest_exists`) and exposes the latest single-project
|
|
26
|
+
refresh job.
|
|
27
|
+
|
|
28
|
+
All input changes are additive; no tool was added, removed, or renamed.
|
|
29
|
+
|
|
30
|
+
## [1.28.4] — 2026-08-28
|
|
31
|
+
|
|
32
|
+
- MCP public surface fingerprint: `sha256:42cd662667260792`
|
|
33
|
+
|
|
34
|
+
**Added — lane-result harvest parity**
|
|
35
|
+
|
|
36
|
+
- `bclaw_harvest` is a new standard coordination write tool matching the CLI
|
|
37
|
+
lane-result path. It accepts one `assignmentId` or `all=true`, optional
|
|
38
|
+
`worktreePaths`, `dryRun`, and `integrate`; successful report harvests return
|
|
39
|
+
reconciled `continuations` and executable `next_actions`.
|
|
40
|
+
|
|
41
|
+
**Changed — ideation is instance-based and sequential by default**
|
|
42
|
+
|
|
43
|
+
- `bclaw_coordinate(intent="ideate")` accepts repeated `targetAgents`, an
|
|
44
|
+
optional positionally aligned `criticPerspectives` array, and
|
|
45
|
+
`ideation_schedule: "sequential" | "parallel"` (default sequential).
|
|
46
|
+
- The result adds `ideation_schedule` and `pending_critics`. Sequential briefs
|
|
47
|
+
include critiques already produced in the same round, so participants
|
|
48
|
+
challenge one another before champion revision and the next bounded round.
|
|
49
|
+
|
|
50
|
+
**Changed — compact, actionable read projections**
|
|
51
|
+
|
|
52
|
+
- `bclaw_find` accepts optional `fields`; one item larger than `budget_tokens`
|
|
53
|
+
is projected to identity/status fields and reports
|
|
54
|
+
`oversized_item_projected` rather than overrunning the response budget.
|
|
55
|
+
- Agent rows add `declared_spawnable`, `executable_now`, `availability_code`,
|
|
56
|
+
and `availability_reason`.
|
|
57
|
+
- Work context's `pending_notifications` is now a compact summary containing
|
|
58
|
+
`actionable_count`, `by_type`, and `telemetry_events_omitted`; the raw event
|
|
59
|
+
count remains available as `unseen_event_count`.
|
|
60
|
+
- `bclaw_dispatch_status` adds canonical `terminal_signal` evidence and may
|
|
61
|
+
diagnose stale explicit progress as `stalled` despite a live wrapper PID or
|
|
62
|
+
unrelated filesystem activity.
|
|
63
|
+
|
|
64
|
+
All changes are additive except the intentionally compacted
|
|
65
|
+
`pending_notifications` value shape.
|
|
66
|
+
|
|
11
67
|
## [1.28.3] — 2026-08-26
|
|
12
68
|
|
|
13
69
|
**Changed — durable Code Map cascade execution**
|
|
@@ -438,12 +494,13 @@ will still succeed. A follow-up PR will strip the dead handler code.
|
|
|
438
494
|
changelog records the published MCP surface fingerprint. When a tool
|
|
439
495
|
name, tier, category, or input schema changes, the test fails until
|
|
440
496
|
this section is updated.
|
|
441
|
-
- MCP public surface fingerprint: `sha256:
|
|
442
|
-
(updated 2026-08-
|
|
443
|
-
|
|
444
|
-
`
|
|
445
|
-
|
|
446
|
-
|
|
497
|
+
- MCP public surface fingerprint: `sha256:f410416669e7fc9a`
|
|
498
|
+
(updated 2026-08-28 for optional `project` targeting on every Code Map MCP
|
|
499
|
+
tool. Previous: `sha256:42cd662667260792`, updated for the additive
|
|
500
|
+
`bclaw_harvest` surface, sequential
|
|
501
|
+
ideation controls, compact read projections, and loop-slot perspective and
|
|
502
|
+
completion fields.)
|
|
503
|
+
Previous: `sha256:be86e5571fcd0226`
|
|
447
504
|
(`LoopSlotInput` gains optional `lane`, `scope_hint`, `plan_ids`, and
|
|
448
505
|
`step_ids` fields so implementation-loop lane scope and provenance survive
|
|
449
506
|
through the public facade. Existing callers remain valid.)
|