@jaggerxtrm/specialists 3.6.5 → 3.6.9
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/config/hooks/specialists-memory-cache-sync.mjs +57 -0
- package/config/skills/specialists-creator/SKILL.md +27 -0
- package/config/skills/using-specialists/SKILL.md +67 -54
- package/config/specialists/debugger.specialist.json +3 -2
- package/config/specialists/executor.specialist.json +3 -2
- package/config/specialists/explorer.specialist.json +3 -3
- package/config/specialists/overthinker.specialist.json +1 -1
- package/config/specialists/planner.specialist.json +3 -3
- package/config/specialists/reviewer.specialist.json +2 -2
- package/config/specialists/specialists-creator.specialist.json +2 -2
- package/config/specialists/sync-docs.specialist.json +1 -1
- package/dist/index.js +10891 -9775
- package/package.json +1 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// specialists-memory-cache-sync — PostToolUse hook
|
|
3
|
+
// Keeps local memories FTS cache fresh after memory writes and git commits.
|
|
4
|
+
|
|
5
|
+
import { spawnSync } from 'node:child_process';
|
|
6
|
+
import { readFileSync } from 'node:fs';
|
|
7
|
+
|
|
8
|
+
function readInput() {
|
|
9
|
+
try {
|
|
10
|
+
return JSON.parse(readFileSync(0, 'utf-8'));
|
|
11
|
+
} catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function shouldSync(command) {
|
|
17
|
+
if (!command || typeof command !== 'string') return false;
|
|
18
|
+
const normalized = command.trim();
|
|
19
|
+
if (normalized.length === 0) return false;
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
/(^|\s)git\s+commit(\s|$)/.test(normalized)
|
|
23
|
+
|| /(^|\s)git\s+merge(\s|$)/.test(normalized)
|
|
24
|
+
|| /(^|\s)xt\s+memory\s+update(\s|$)/.test(normalized)
|
|
25
|
+
|| /(^|\s)bd\s+remember(\s|$)/.test(normalized)
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function runSync(cwd, forceRefresh) {
|
|
30
|
+
const commandArgs = forceRefresh
|
|
31
|
+
? ['memory', 'refresh', '--json']
|
|
32
|
+
: ['memory', 'sync', '--force', '--json'];
|
|
33
|
+
|
|
34
|
+
spawnSync('specialists', commandArgs, {
|
|
35
|
+
cwd,
|
|
36
|
+
stdio: 'ignore',
|
|
37
|
+
timeout: 10000,
|
|
38
|
+
env: process.env,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function main() {
|
|
43
|
+
const input = readInput();
|
|
44
|
+
if (!input || input.hook_event_name !== 'PostToolUse') return;
|
|
45
|
+
|
|
46
|
+
const toolName = input.tool_name;
|
|
47
|
+
if (toolName !== 'Bash' && toolName !== 'bash' && toolName !== 'execute_shell_command') return;
|
|
48
|
+
|
|
49
|
+
const command = input.tool_input?.command;
|
|
50
|
+
if (!shouldSync(command)) return;
|
|
51
|
+
|
|
52
|
+
const cwd = input.cwd ?? process.cwd();
|
|
53
|
+
const forceRefresh = /(^|\s)xt\s+memory\s+update(\s|$)/.test(command);
|
|
54
|
+
runSync(cwd, forceRefresh);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
main();
|
|
@@ -177,6 +177,8 @@ sp edit my-specialist specialist.metadata.version 1.0.0
|
|
|
177
177
|
sp edit my-specialist specialist.execution.model anthropic/claude-sonnet-4-6
|
|
178
178
|
sp edit my-specialist specialist.execution.fallback_model google-gemini-cli/gemini-3.1-pro-preview
|
|
179
179
|
sp edit my-specialist specialist.execution.permission_required READ_ONLY
|
|
180
|
+
sp edit my-specialist specialist.execution.extensions.serena false
|
|
181
|
+
sp edit my-specialist specialist.execution.extensions.gitnexus false
|
|
180
182
|
|
|
181
183
|
# 4. Use --file only for multiline prompt fields
|
|
182
184
|
sp edit my-specialist specialist.prompt.system --file .tmp/system.prompt.txt
|
|
@@ -220,6 +222,8 @@ bun skills/specialist-author/scripts/validate-specialist.ts config/specialists/m
|
|
|
220
222
|
| `output_type` | enum | `custom` | `codegen` \| `analysis` \| `review` \| `synthesis` \| `orchestration` \| `workflow` \| `research` \| `custom` |
|
|
221
223
|
| `permission_required` | enum | `READ_ONLY` | see tier table below |
|
|
222
224
|
| `thinking_level` | enum | — | `off` \| `minimal` \| `low` \| `medium` \| `high` \| `xhigh` |
|
|
225
|
+
| `extensions.serena` | boolean | `true` | set `false` to opt out of Serena extension injection for this specialist |
|
|
226
|
+
| `extensions.gitnexus` | boolean | `true` | set `false` to opt out of GitNexus extension injection for this specialist |
|
|
223
227
|
|
|
224
228
|
**When to use `execution.interactive`**
|
|
225
229
|
|
|
@@ -241,6 +245,29 @@ bun skills/specialist-author/scripts/validate-specialist.ts config/specialists/m
|
|
|
241
245
|
|
|
242
246
|
**Common pitfall:** `READ_WRITE` is **not** a valid value — use `LOW` or higher.
|
|
243
247
|
|
|
248
|
+
**Per-specialist extension opt-out**
|
|
249
|
+
|
|
250
|
+
Use `execution.extensions` only when this specialist must suppress default extension injection.
|
|
251
|
+
Both flags default to `true`, so omit this block unless opt-out is required.
|
|
252
|
+
|
|
253
|
+
```json
|
|
254
|
+
{
|
|
255
|
+
"specialist": {
|
|
256
|
+
"execution": {
|
|
257
|
+
"extensions": {
|
|
258
|
+
"serena": false,
|
|
259
|
+
"gitnexus": false
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Typical use cases:
|
|
267
|
+
- `serena: false` for specialists that must avoid Serena tool/LSP injection
|
|
268
|
+
- `gitnexus: false` for specialists that should not receive GitNexus graph tooling
|
|
269
|
+
- set both `false` for constrained runs that need clean extension surface
|
|
270
|
+
|
|
244
271
|
### `specialist.prompt` (required)
|
|
245
272
|
|
|
246
273
|
| Field | Type | Required | Notes |
|
|
@@ -9,8 +9,8 @@ description: >
|
|
|
9
9
|
workflow, --context-depth, background jobs, MCP tool (`use_specialist`),
|
|
10
10
|
or specialists doctor. Don't wait for the user to say
|
|
11
11
|
"use a specialist" — proactively evaluate whether delegation makes sense.
|
|
12
|
-
version: 4.
|
|
13
|
-
synced_at:
|
|
12
|
+
version: 4.7
|
|
13
|
+
synced_at: a58a4dda
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# Specialists Usage
|
|
@@ -35,7 +35,7 @@ Specialists are autonomous AI agents that run independently — fresh context, d
|
|
|
35
35
|
2. **Never explore yourself.** All discovery, codebase mapping, and read-only investigation go through **explorer** (or **debugger** for root-cause analysis).
|
|
36
36
|
3. **Run explorer before executor when context is lacking.** If the bead already has clear scope — files, symbols, approach — send executor directly. Only run explorer first when the issue lacks a clear track.
|
|
37
37
|
4. **For tracked work, the bead is the prompt.** The bead description, notes, and parent context are the instruction surface.
|
|
38
|
-
5. **`--bead`
|
|
38
|
+
5. **`--bead` is the only prompt.** Never use `--prompt`. If you need to refine instructions, update the bead notes first.
|
|
39
39
|
6. **Chains belong to epics.** A chain is a worktree lineage (executor → reviewer → fix). An epic is the merge-gated identity that owns chains. Use `sp epic merge <epic>` to publish — never merge individual chains that belong to an unresolved epic.
|
|
40
40
|
7. **Merge through epics, not manual git.** Use `sp epic merge <epic-id>` for wave-bound chains or `sp merge <chain-root-bead>` for standalone chains. Never use manual `git merge` for specialist work.
|
|
41
41
|
8. **No destructive operations by specialists.** No `rm -rf`, no force pushes, no database drops, no credential rotation, no mass deletes, no history rewrites. Surface destructive requirements to the user.
|
|
@@ -72,7 +72,7 @@ specialists run <name> --bead <id> --background # background run
|
|
|
72
72
|
specialists run <name> --bead <id> --worktree # isolated worktree (edit-capable specialists)
|
|
73
73
|
specialists run <name> --bead <id> --job <job-id> # reuse another job's worktree
|
|
74
74
|
specialists run <name> --bead <id> --epic <epic-id> # explicitly declare epic membership
|
|
75
|
-
specialists run <name> --
|
|
75
|
+
specialists run <name> --bead <id> --force-stale-base # bypass stale-base guard
|
|
76
76
|
specialists run <name> --bead <id> --keep-alive # keep session alive after first turn
|
|
77
77
|
specialists run <name> --bead <id> --context-depth 2 # inject parent bead context
|
|
78
78
|
|
|
@@ -177,7 +177,7 @@ via `--context-depth 2`. The bead chain IS the context chain — zero manual wir
|
|
|
177
177
|
task-abc: "Fix auth token refresh"
|
|
178
178
|
└── abc-exp: explorer (READ_ONLY — auto-appends output to abc-exp notes)
|
|
179
179
|
└── abc-impl: executor (self-appends output to abc-impl notes, closes bead)
|
|
180
|
-
└── abc-rev: reviewer (
|
|
180
|
+
└── abc-rev: reviewer (auto-appends verdict to abc-rev notes via --job <exec-job>)
|
|
181
181
|
└── abc-fix: executor (if reviewer PARTIAL — fix bead, same worktree via --job)
|
|
182
182
|
```
|
|
183
183
|
|
|
@@ -187,7 +187,7 @@ task-abc: "Fix auth token refresh"
|
|
|
187
187
|
|------|----------------|-----|
|
|
188
188
|
| abc-exp | abc-exp (own) + task-abc (parent) | `--bead abc-exp --context-depth 2` |
|
|
189
189
|
| abc-impl | abc-impl (own) + abc-exp (explorer findings in notes) + task-abc | `--bead abc-impl --context-depth 2` |
|
|
190
|
-
|
|
|
190
|
+
| abc-rev | abc-rev (own) + abc-impl (executor output in notes) + task-abc | `--bead abc-rev --job <exec-job> --context-depth 2` |
|
|
191
191
|
| abc-fix | abc-fix (own) + abc-impl (executor output + reviewer verdict) + abc-exp | `--bead abc-fix --job <exec-job> --context-depth 2` |
|
|
192
192
|
|
|
193
193
|
- No copy-paste, no manual note injection between steps
|
|
@@ -228,11 +228,15 @@ specialists run executor --worktree --bead abc-impl --context-depth 2 --backgrou
|
|
|
228
228
|
# 6. [MERGE] Merge impl worktree branch into master
|
|
229
229
|
sp merge abc-impl --rebuild
|
|
230
230
|
|
|
231
|
-
# 7. Wave 3 — Reviewer (
|
|
232
|
-
|
|
231
|
+
# 7. Wave 3 — Reviewer (own bead, enters executor's worktree via --job)
|
|
232
|
+
bd create --title "Review: token refresh fix" --type task --priority 2
|
|
233
|
+
# -> unitAI-abc-rev
|
|
234
|
+
bd dep add abc-rev abc-impl
|
|
235
|
+
|
|
236
|
+
specialists run reviewer --bead abc-rev --job a1b2c3 --context-depth 2 --keep-alive --background
|
|
233
237
|
# -> Job started: r4v5w6
|
|
234
|
-
# Reviewer
|
|
235
|
-
# Reviewer auto-appends verdict to
|
|
238
|
+
# Reviewer sees: abc-rev + abc-impl (with executor output in notes) + abc via context-depth
|
|
239
|
+
# Reviewer auto-appends verdict to abc-rev notes
|
|
236
240
|
specialists result r4v5w6
|
|
237
241
|
# -> PASS: close task bead. PARTIAL/FAIL: go to step 8.
|
|
238
242
|
|
|
@@ -304,8 +308,8 @@ Reads `worktree_path` from the target job's `status.json` and uses that director
|
|
|
304
308
|
The caller's own `--bead` remains authoritative — `--job` only selects the workspace.
|
|
305
309
|
|
|
306
310
|
```bash
|
|
307
|
-
# Reviewer enters executor's worktree
|
|
308
|
-
specialists run reviewer --job 49adda --keep-alive --background
|
|
311
|
+
# Reviewer enters executor's worktree with its own bead
|
|
312
|
+
specialists run reviewer --bead unitAI-rev --job 49adda --context-depth 2 --keep-alive --background
|
|
309
313
|
|
|
310
314
|
# Fix executor re-enters same worktree (--bead provides new fix bead, --job provides workspace)
|
|
311
315
|
specialists run executor --bead hgpu.3-fix --job 49adda --context-depth 2 --background
|
|
@@ -336,7 +340,7 @@ Use when the caller explicitly accepts concurrent write risk (e.g., target job k
|
|
|
336
340
|
| Scenario | Flag to use |
|
|
337
341
|
|----------|------------|
|
|
338
342
|
| First executor run for a task | `--worktree --bead <impl-bead>` |
|
|
339
|
-
| Reviewer on executor's output | `--job <exec-job-id
|
|
343
|
+
| Reviewer on executor's output | `--bead <review-bead> --job <exec-job-id> --context-depth 2` |
|
|
340
344
|
| Fix executor after reviewer PARTIAL | `--bead <fix-bead> --job <exec-job-id>` |
|
|
341
345
|
| Force entry to blocked worktree | `--bead <fix-bead> --job <exec-job-id> --force-job` |
|
|
342
346
|
| Prep job belonging to epic (non-epic parent) | `--bead <prep-bead> --epic <epic-id>` |
|
|
@@ -367,35 +371,36 @@ Map bead dependencies to match the execution pipeline. The dep graph IS the wave
|
|
|
367
371
|
|
|
368
372
|
### Simple bug fix
|
|
369
373
|
```
|
|
370
|
-
task → explore → impl
|
|
371
|
-
|
|
372
|
-
└── fix (if PARTIAL) → child of impl
|
|
374
|
+
task → explore → impl → review
|
|
375
|
+
└── fix (if PARTIAL) → child of impl
|
|
373
376
|
```
|
|
374
377
|
```bash
|
|
375
378
|
bd dep add explore task
|
|
376
379
|
bd dep add impl explore
|
|
377
|
-
|
|
380
|
+
bd dep add review impl
|
|
381
|
+
# reviewer: specialists run reviewer --bead review --job <impl-job> --context-depth 2
|
|
378
382
|
# fix: bd dep add fix impl
|
|
379
383
|
```
|
|
380
384
|
|
|
381
385
|
### Complex feature (overthinker)
|
|
382
386
|
```
|
|
383
|
-
task → explore → design → impl →
|
|
387
|
+
task → explore → design → impl → review → [fix if PARTIAL]
|
|
384
388
|
```
|
|
385
389
|
```bash
|
|
386
390
|
bd dep add explore task
|
|
387
391
|
bd dep add design explore
|
|
388
392
|
bd dep add impl design
|
|
389
|
-
|
|
393
|
+
bd dep add review impl
|
|
394
|
+
# reviewer: specialists run reviewer --bead review --job <impl-job> --context-depth 2
|
|
390
395
|
```
|
|
391
396
|
|
|
392
397
|
### Epic with N children
|
|
393
398
|
Each child gets its own explore → impl chain. Reviewer runs via `--job` per impl.
|
|
394
399
|
```
|
|
395
400
|
epic
|
|
396
|
-
├── child-1 → explore-1 → impl-1 (reviewer
|
|
397
|
-
├── child-2 → explore-2 → impl-2 (reviewer
|
|
398
|
-
└── child-N → explore-N → impl-N (reviewer
|
|
401
|
+
├── child-1 → explore-1 → impl-1 → review-1 (reviewer --bead review-1 --job impl-1-job)
|
|
402
|
+
├── child-2 → explore-2 → impl-2 → review-2 (reviewer --bead review-2 --job impl-2-job)
|
|
403
|
+
└── child-N → explore-N → impl-N → review-N (reviewer --bead review-N --job impl-N-job)
|
|
399
404
|
```
|
|
400
405
|
Children (chains) within the same epic can run **in parallel** if they own disjoint files.
|
|
401
406
|
|
|
@@ -430,16 +435,15 @@ The review → fix loop is the mechanism for iterative quality improvement withi
|
|
|
430
435
|
1. Executor provisions --worktree, implements, enters waiting.
|
|
431
436
|
-> Job: exec-job (KEEP ALIVE — do not stop)
|
|
432
437
|
|
|
433
|
-
2. Reviewer enters same worktree via --job exec-job.
|
|
438
|
+
2. Reviewer enters same worktree via --bead <review-bead> --job exec-job --context-depth 2.
|
|
434
439
|
-> sp ps shows the chain:
|
|
435
440
|
feature/unitAI-impl-executor · unitAI-impl
|
|
436
441
|
◐ exec-job executor waiting
|
|
437
442
|
└ ◐ rev-job reviewer starting
|
|
438
|
-
-> Auto-appends verdict (PASS/PARTIAL/FAIL) to bead notes.
|
|
443
|
+
-> Auto-appends verdict (PASS/PARTIAL/FAIL) to review bead notes.
|
|
439
444
|
|
|
440
445
|
3a. PASS:
|
|
441
|
-
->
|
|
442
|
-
-> Verify commit landed on branch (git log)
|
|
446
|
+
-> Verify auto-commit landed on branch (git log)
|
|
443
447
|
-> Stop reviewer, then stop executor
|
|
444
448
|
-> Merge via sp merge
|
|
445
449
|
|
|
@@ -460,14 +464,17 @@ specialists run executor --worktree --bead unitAI-impl --context-depth 2 --backg
|
|
|
460
464
|
# -> Job started: exec-job (e.g. 49adda)
|
|
461
465
|
# DO NOT sp stop — executor stays alive for the entire review cycle
|
|
462
466
|
|
|
463
|
-
# Step 2 —
|
|
464
|
-
|
|
467
|
+
# Step 2 — Create reviewer bead and dispatch
|
|
468
|
+
bd create --title "Review: impl changes" --type task --priority 2
|
|
469
|
+
# -> unitAI-rev
|
|
470
|
+
bd dep add rev impl
|
|
471
|
+
specialists run reviewer --bead unitAI-rev --job 49adda --context-depth 2 --keep-alive --background
|
|
465
472
|
# -> Job started: rev-job
|
|
466
473
|
specialists result rev-job
|
|
467
474
|
|
|
468
|
-
# Step 3a — PASS:
|
|
469
|
-
|
|
470
|
-
#
|
|
475
|
+
# Step 3a — PASS: verify auto-commit landed, then stop both
|
|
476
|
+
# Executor auto-commits substantive changes on each turn completion
|
|
477
|
+
# Verify with: git log feature/unitAI-impl-executor --oneline -1
|
|
471
478
|
specialists stop rev-job
|
|
472
479
|
specialists stop 49adda
|
|
473
480
|
sp merge unitAI-impl --rebuild
|
|
@@ -475,8 +482,11 @@ sp merge unitAI-impl --rebuild
|
|
|
475
482
|
# Step 3b — PARTIAL: resume executor with fix instructions (same session, full context)
|
|
476
483
|
specialists resume 49adda "Reviewer PARTIAL. Fix: <paste specific findings here>"
|
|
477
484
|
# Executor applies fixes, enters waiting again
|
|
478
|
-
# Dispatch new reviewer:
|
|
479
|
-
|
|
485
|
+
# Dispatch new reviewer (new bead for each re-review):
|
|
486
|
+
bd create --title "Re-review: impl after fix" --type task --priority 2
|
|
487
|
+
# -> unitAI-rev2
|
|
488
|
+
bd dep add rev2 impl
|
|
489
|
+
specialists run reviewer --bead unitAI-rev2 --job 49adda --context-depth 2 --keep-alive --background
|
|
480
490
|
# Repeat until PASS
|
|
481
491
|
|
|
482
492
|
# After final PASS + commit + stop:
|
|
@@ -496,10 +506,10 @@ Only dispatch a new fix executor when the original specialist is dead (crashed,
|
|
|
496
506
|
|
|
497
507
|
### Key invariants
|
|
498
508
|
- **Never stop the executor/debugger before reviewer verdict.** The specialist stays in `waiting` throughout the review cycle. Stopping prematurely kills the resume path and risks uncommitted changes.
|
|
499
|
-
- **Executors
|
|
500
|
-
- Each fix iteration uses `resume` on the same
|
|
509
|
+
- **Executors auto-commit substantive changes** on each turn completion (via `auto_commit: checkpoint_on_waiting`). After reviewer PASS, verify the commit landed on the branch before stopping.
|
|
510
|
+
- Each fix iteration uses `resume` on the same executor — not a new child bead or new executor.
|
|
501
511
|
- Multiple reviewer → resume → re-review cycles are expected. The worktree and specialist session are stable across all cycles.
|
|
502
|
-
- Only stop after: (1) reviewer PASS, (2)
|
|
512
|
+
- Only stop after: (1) reviewer PASS, (2) auto-commit verified on branch.
|
|
503
513
|
|
|
504
514
|
---
|
|
505
515
|
|
|
@@ -534,8 +544,7 @@ sp stop exec-job # ✗ kills resume path, risks uncommitted work
|
|
|
534
544
|
sp stop overthinker-job # ✗ loses context if follow-up questions arise
|
|
535
545
|
|
|
536
546
|
# GOOD — chain completes naturally
|
|
537
|
-
|
|
538
|
-
# verify commit...
|
|
547
|
+
# verify auto-commit landed on branch...
|
|
539
548
|
sp merge unitAI-impl # publishes branch
|
|
540
549
|
# THEN stop members (future: auto-stopped by merge)
|
|
541
550
|
sp stop rev-job
|
|
@@ -671,7 +680,7 @@ The specialist reads:
|
|
|
671
680
|
|
|
672
681
|
This prevents specialists from rediscovering known gotchas on every run.
|
|
673
682
|
|
|
674
|
-
`--prompt
|
|
683
|
+
**Never use `--prompt`.** For tracked work, always use `--bead`. When you need to give a specialist
|
|
675
684
|
specific instructions beyond what's in the bead description, update the bead notes first:
|
|
676
685
|
|
|
677
686
|
```bash
|
|
@@ -714,9 +723,9 @@ Run `specialists list` to see what's available. Match by task type:
|
|
|
714
723
|
### Specialist selection notes
|
|
715
724
|
|
|
716
725
|
- **executor does not run tests** — it runs `lint + tsc` only. Tests belong to the reviewer or test-runner phase.
|
|
717
|
-
- **executor enters `waiting` after first turn** — `interactive: true` is now default. **Never stop the executor before reviewer verdict.** Keep it alive so you can
|
|
718
|
-
- **explorer** is READ_ONLY —
|
|
719
|
-
- **reviewer**
|
|
726
|
+
- **executor enters `waiting` after first turn** — `interactive: true` is now default. **Never stop the executor before reviewer verdict.** Keep it alive so you can resume with fix instructions if reviewer says PARTIAL. Executors auto-commit substantive changes on each turn via `auto_commit: checkpoint_on_waiting`. Only `sp stop` after reviewer PASS and commit verified on the branch.
|
|
727
|
+
- **explorer** is READ_ONLY — output auto-appends to the input bead's notes. No implementation.
|
|
728
|
+
- **reviewer** always gets its own bead: `--bead <review-bead> --job <exec-job> --context-depth 2`. The reviewer sees the executor's output via auto-appended bead notes + context-depth. Never use `--prompt`.
|
|
720
729
|
- **debugger** over **explorer** when you need root cause analysis — GitNexus call-chain tracing, ranked hypotheses, evidence-backed remediation.
|
|
721
730
|
- **overthinker** before **executor** for any non-trivial task — surfaces edge cases, challenges assumptions, produces solution direction. Cheap relative to wrong implementation.
|
|
722
731
|
- **researcher** is the docs specialist — never look up library docs yourself, delegate to researcher.
|
|
@@ -731,7 +740,7 @@ specialists run debugger --bead unitAI-bug --context-depth 2 --background
|
|
|
731
740
|
specialists run planner --bead unitAI-scope --context-depth 2 --background
|
|
732
741
|
specialists run overthinker --bead unitAI-design --context-depth 2 --keep-alive --background
|
|
733
742
|
specialists run executor --worktree --bead unitAI-impl --context-depth 2 --background
|
|
734
|
-
specialists run reviewer --job <exec-job-id> --keep-alive --background
|
|
743
|
+
specialists run reviewer --bead unitAI-rev --job <exec-job-id> --context-depth 2 --keep-alive --background
|
|
735
744
|
specialists run sync-docs --bead unitAI-docs --context-depth 2 --keep-alive --background
|
|
736
745
|
specialists run test-runner --bead unitAI-tests --context-depth 2 --background
|
|
737
746
|
specialists run specialists-creator --bead unitAI-skill --context-depth 2 --background
|
|
@@ -852,8 +861,8 @@ specialists steer a1b2c3 "Do NOT audit. Write the actual file to disk now."
|
|
|
852
861
|
> before killing a keep-alive job.**
|
|
853
862
|
|
|
854
863
|
> **Critical:** Never stop an executor or debugger before the reviewer delivers its verdict.
|
|
855
|
-
> Stopping prematurely: (1) kills the resume path for fix loops, (2)
|
|
856
|
-
>
|
|
864
|
+
> Stopping prematurely: (1) kills the resume path for fix loops, and (2) forces dispatching a
|
|
865
|
+
> new specialist instead of resuming. Executors auto-commit substantive changes on each turn.
|
|
857
866
|
|
|
858
867
|
```bash
|
|
859
868
|
# Check before stopping
|
|
@@ -917,7 +926,7 @@ bd create --title "Explore: map job run architecture" --type task --priority 2
|
|
|
917
926
|
bd dep add exp 3f7b
|
|
918
927
|
bd create --title "Implement: worktree isolation" --type task --priority 2 # -> unitAI-impl
|
|
919
928
|
bd dep add impl exp
|
|
920
|
-
# Note: reviewer
|
|
929
|
+
# Note: reviewer gets own bead, enters via --job, inherits epic from bead.parent
|
|
921
930
|
|
|
922
931
|
# Stage 1 — Explorer (prep job, declares epic explicitly)
|
|
923
932
|
specialists run explorer --bead unitAI-exp --epic unitAI-3f7b --context-depth 2 --background
|
|
@@ -932,8 +941,10 @@ specialists run executor --worktree --bead unitAI-impl --context-depth 2 --backg
|
|
|
932
941
|
# epic_id = bead.parent (unitAI-3f7b)
|
|
933
942
|
specialists result job2
|
|
934
943
|
|
|
935
|
-
# Stage 3 — Reviewer (uses --job
|
|
936
|
-
|
|
944
|
+
# Stage 3 — Reviewer (own bead, uses --job for same worktree)
|
|
945
|
+
bd create --title "Review: worktree isolation impl" --type task --priority 2 # -> unitAI-rev
|
|
946
|
+
bd dep add rev impl
|
|
947
|
+
specialists run reviewer --bead unitAI-rev --job job2 --context-depth 2 --keep-alive --background
|
|
937
948
|
# -> Job started: job3
|
|
938
949
|
specialists result job3
|
|
939
950
|
# PASS → ready for epic merge. PARTIAL → fix loop.
|
|
@@ -942,8 +953,10 @@ specialists result job3
|
|
|
942
953
|
bd create --title "Fix: reviewer gaps on impl" --type bug --priority 1 # -> unitAI-fix1
|
|
943
954
|
bd dep add fix1 impl
|
|
944
955
|
specialists run executor --bead fix1 --job job2 --context-depth 2 --background
|
|
945
|
-
# Re-review
|
|
946
|
-
|
|
956
|
+
# Re-review (new reviewer bead)
|
|
957
|
+
bd create --title "Re-review: impl after fix" --type task --priority 2 # -> unitAI-rev2
|
|
958
|
+
bd dep add rev2 impl
|
|
959
|
+
specialists run reviewer --bead unitAI-rev2 --job job2 --context-depth 2 --keep-alive --background
|
|
947
960
|
|
|
948
961
|
# [MERGE] Publish epic
|
|
949
962
|
sp epic status unitAI-3f7b # verify readiness: merge_ready, all chains PASS
|
|
@@ -1018,8 +1031,8 @@ MCP is intentionally minimal. Use CLI for orchestration, monitoring, steering, r
|
|
|
1018
1031
|
|
|
1019
1032
|
## Known Issues
|
|
1020
1033
|
|
|
1021
|
-
- **
|
|
1022
|
-
- **`--
|
|
1034
|
+
- **All specialist output auto-appends** to the input bead notes on every `run_complete` (via Supervisor). Status-aware headers: `[WAITING]` vs `[DONE]`. Output also available via `specialists result`.
|
|
1035
|
+
- **`--prompt` is deprecated for tracked work.** Always use `--bead`. Update bead notes for additional instructions: `bd update <id> --notes "INSTRUCTION: ..."`
|
|
1023
1036
|
- **Job in `waiting` now shows magenta status** with resume hint in `status`, WAIT banner in `feed`, and resume footer in `result`. Always check before stopping a keep-alive job.
|
|
1024
1037
|
- **Explorer (qwen) may produce empty output** — the model sometimes completes tool calls but fails to emit a final text summary. The bead notes will be empty. If this happens, either re-run with a different model or do the investigation yourself.
|
|
1025
1038
|
- **`specialists init` requires xtrm** — `.xtrm/` directory and `xt` CLI must exist. Use `--no-xtrm-check` to bypass in CI/testing.
|
|
@@ -1047,10 +1060,10 @@ specialists clean --processes # kill stale/zombie specialist processes
|
|
|
1047
1060
|
- **Job hangs** → `specialists steer <id> "finish up"` or `specialists stop <id>`
|
|
1048
1061
|
- **Config skipped** → stderr shows `[specialists] skipping <file>: <reason>`
|
|
1049
1062
|
- **Stall timeout** → specialist hit 120s inactivity. Check `specialists feed <id>`, then retry or switch.
|
|
1050
|
-
-
|
|
1063
|
+
- **Never use `--prompt`** → use bead notes: `bd update <id> --notes "INSTRUCTION: ..."` then `--bead` only.
|
|
1051
1064
|
- **Worktree already exists** → it will be reused (not recreated). Safe to re-run.
|
|
1052
1065
|
- **`--job` fails: worktree_path missing** → target job was not started with `--worktree`. Use `--worktree` on the next run.
|
|
1053
|
-
- **`--job` without `--
|
|
1066
|
+
- **`--job` without `--bead`** → reviewer/executor requires `--bead`. Create a reviewer bead first, then use `--bead <review-bead> --job <exec-job> --context-depth 2`.
|
|
1054
1067
|
- **Stale specialist processes** → SessionStart hook warns about old binary versions. Run `specialists clean --processes` to kill them all.
|
|
1055
1068
|
- **`specialists init` fails with xtrm error** → xtrm must be installed first: `npm install -g xtrm-tools && xt install`. Use `--no-xtrm-check` in CI.
|
|
1056
1069
|
- **Skill drift detected by doctor** → Run `specialists init --sync-skills` to re-sync canonical skills to `.xtrm/skills/default/` and refresh active symlinks.
|
|
@@ -29,11 +29,12 @@
|
|
|
29
29
|
"output_type": "analysis",
|
|
30
30
|
"permission_required": "HIGH",
|
|
31
31
|
"thinking_level": "low",
|
|
32
|
+
"auto_commit": "checkpoint_on_waiting",
|
|
32
33
|
"max_retries": 0
|
|
33
34
|
},
|
|
34
35
|
"prompt": {
|
|
35
|
-
"system": "
|
|
36
|
-
"task_template": "Debug the following issue:\n\n$prompt\n\nWorking directory: $cwd\n\
|
|
36
|
+
"system": "Autonomous debugger specialist. Given symptom, error, or stack trace \u2014 conduct disciplined, tool-driven investigation. Find root cause, apply targeted fix, verify.\n\nNOT executor. Fix bugs only \u2014 no refactor, no features, no improvements beyond resolving specific issue.\n\n## Investigation Workflow\n\nWork through phases in order.\n\n### Phase 0 \u2014 GitNexus Triage (preferred, skip if unavailable)\n\nUse knowledge graph to orient before touching source files.\n\n1. `gitnexus_query({query: \"<error text or symptom>\"})`\n2. `gitnexus_context({name: \"<suspect symbol>\"})`\n3. Read `gitnexus://repo/{name}/process/{processName}` for execution trace details\n4. Optional: `gitnexus_cypher({query: \"MATCH path = ...\"})` for custom traversal\n\nThen read source files only for pinpointed suspects \u2014 never whole codebase.\n\n### Phase 1 \u2014 File Discovery (fallback if GitNexus unavailable)\n\nParse symptom for candidate locations:\n- stack trace file paths + line numbers\n- module/import names in errors\n- error codes or exception types tied to subsystems\n\nUse `grep` and `find` to locate code quickly; read only relevant sections.\n\n### Phase 2 \u2014 Root Cause Analysis\n\nDetermine:\n- exact line/expression causing failure\n- causal explanation of observed symptom\n- whether root cause or downstream effect\n- likely side effects on related components\n\n### Phase 3 \u2014 Apply Fix\n\nOnce root cause confirmed:\n- Edit minimum code needed to fix bug\n- Do NOT refactor surrounding code, add comments, or improve style\n- Run lint and tsc to verify fix compiles\n- Do NOT run tests (test-runner specialist handles that)\n\n### Phase 4 \u2014 Verify\n\nRun specific failing command, test, or reproduction step that triggered bug.\nPass \u2192 report success. Still fails \u2192 return Phase 2 with new evidence.\n\n## Keep-Alive Behavior\n\nAfter delivering initial fix + verification:\n- Enter waiting state\n- Orchestrator may resume with \"still failing\" or \"new error after fix\"\n- Each resume cycle: re-diagnose \u2192 fix \u2192 verify\n- Issue fully resolved \u2192 report final status, exit\n\n## Output Format\n\nAlways output complete **Bug Investigation Report**:\n- Symptoms\n- Investigation path (GitNexus traces or files analyzed)\n- Root cause (with file:line references)\n- Fix applied (files changed, what changed)\n- Verification result (pass/fail + command output)\n- Concise summary\n\nEFFICIENCY RULE: Stop investigation, move to fix after at most 15 tool calls.\nNo over-investigate \u2014 form hypothesis, fix, verify.",
|
|
37
|
+
"task_template": "Debug the following issue:\n\n$prompt\n\nWorking directory: $cwd\n\n## Required investigation steps:\n1. `gitnexus_query({query: \"<error text or symptom>\"})` \u2014 find related execution flows\n2. `gitnexus_context({name: \"<suspect symbol>\"})` \u2014 trace callers and callees\n3. Read source files ONLY for pinpointed suspects from steps 1-2\n4. `gitnexus_impact` on any symbol before modifying it\n5. Apply fix, then `gitnexus_detect_changes()` to verify scope\n\nDo NOT skip steps 1-2 by going straight to grep/find.\n"
|
|
37
38
|
},
|
|
38
39
|
"skills": {
|
|
39
40
|
"paths": [
|
|
@@ -23,13 +23,14 @@
|
|
|
23
23
|
"output_type": "codegen",
|
|
24
24
|
"permission_required": "HIGH",
|
|
25
25
|
"thinking_level": "low",
|
|
26
|
+
"auto_commit": "checkpoint_on_waiting",
|
|
26
27
|
"interactive": true,
|
|
27
28
|
"max_retries": 0,
|
|
28
29
|
"mode": "auto"
|
|
29
30
|
},
|
|
30
31
|
"prompt": {
|
|
31
|
-
"system": "# Expert Code Executor
|
|
32
|
-
"task_template": "$prompt\n\n$pre_script_output\n\nWorking directory: $cwd\n",
|
|
32
|
+
"system": "# Expert Code Executor \u2014 Production Standards\n\nSenior implementation specialist. Receive task specs, deliver production-quality code. Write code directly \u2014 no tutorials, no explanations unless logic genuinely non-obvious.\n\n---\n\n## Core Principles\n\n**SRP** \u2014 Single Responsibility. Every function does ONE thing. Every file has ONE reason to change.\n**DRY** \u2014 Don't Repeat Yourself. Similar code twice \u2192 extract.\n**KISS** \u2014 Simplest solution that works. No premature abstraction.\n**YAGNI** \u2014 Don't build what isn't asked. No speculative features.\n**Boy Scout Rule** \u2014 Leave code cleaner than found. Fix adjacent smells.\n\n---\n\n## Naming\n\n- Variables reveal intent: `userCount` not `n`, `isAuthenticated` not `flag`\n- Functions verb+noun: `getUserById()`, `validateToken()`, `parseConfig()`\n- Booleans are questions: `isActive`, `hasPermission`, `canEdit`, `shouldRetry`\n- Constants SCREAMING_SNAKE: `MAX_RETRY_COUNT`, `DEFAULT_TIMEOUT_MS`\n- Types/Interfaces PascalCase: `UserProfile`, `RunOptions`, `EventHandler`\n- Files kebab-case: `user-service.ts`, `parse-config.ts`\n\nNeed comment to explain name \u2192 name wrong. Rename.\n\n---\n\n## Functions\n\n- **Small**: 5-15 lines ideal, 25 max. Longer \u2192 split.\n- **One thing**: Does one thing, does it well, does it only.\n- **One abstraction level**: Don't mix high-level orchestration with low-level parsing.\n- **Few arguments**: 0-2 preferred, 3 max. Options object for more.\n- **No side effects**: Don't mutate inputs. Return new values.\n- **Guard clauses first**: Handle edge cases early, return/throw, then happy path.\n\n```typescript\n// GOOD \u2014 guard clauses, single level, clear intent\nfunction getUserRole(user: User): Role {\n if (!user.isActive) return Role.NONE;\n if (user.isAdmin) return Role.ADMIN;\n return user.roles[0] ?? Role.DEFAULT;\n}\n\n// BAD \u2014 nested, mixed levels, unclear\nfunction getUserRole(user: User): Role {\n if (user) {\n if (user.isActive) {\n if (user.isAdmin) {\n return Role.ADMIN;\n } else {\n if (user.roles.length > 0) {\n return user.roles[0];\n } else {\n return Role.DEFAULT;\n }\n }\n } else {\n return Role.NONE;\n }\n }\n return Role.NONE;\n}\n```\n\n---\n\n## Type Safety\n\n- **Strict TypeScript always**: `strict: true`, no `any` unless interfacing with untyped externals.\n- **Zod for runtime validation**: All external input (API params, CLI args, config files) validated with Zod schemas.\n- **Discriminated unions over type assertions**: Use `type Result = Success | Failure` not `as Success`.\n- **Exhaustive switches**: `never` default case for union exhaustiveness.\n- **No non-null assertions** (`!`): Proper narrowing or optional chaining.\n- **Readonly where possible**: `readonly` arrays and properties for data that shouldn't mutate.\n\n```typescript\n// GOOD \u2014 discriminated union with exhaustive handling\ntype Result = { ok: true; data: string } | { ok: false; error: Error };\n\nfunction handle(result: Result): string {\n switch (result.ok) {\n case true: return result.data;\n case false: throw result.error;\n default: return result satisfies never;\n }\n}\n```\n\n---\n\n## Error Handling\n\n- **Fail fast, fail loud**: Throw on invalid state. Don't silently return defaults.\n- **Specific error types**: `class NotFoundError extends Error` not generic `Error`.\n- **Error messages include context**: `Failed to load config from ${path}: ${e.message}`.\n- **Try-catch at boundaries only**: Don't wrap every function call. Catch at API/CLI/handler level.\n- **Never swallow errors**: No empty catch blocks. At minimum, log.\n- **Errors not control flow**: Don't use try-catch for expected conditions.\n\n---\n\n## Code Structure\n\n- **Guard clauses over nesting**: Early returns flatten logic.\n- **Max 2 nesting levels**: Deeper \u2192 extract function.\n- **Composition over inheritance**: Small functions composed together.\n- **Colocation**: Keep related code close. Tests next to source.\n- **Barrel exports sparingly**: Only for public API surfaces, not internal modules.\n- **No circular dependencies**: A imports B and B imports A \u2192 restructure.\n\n---\n\n## Async & Concurrency\n\n- **async/await over raw Promises**: Clearer control flow.\n- **`Promise.all` for independent work**: Don't await sequentially when tasks independent.\n- **`AbortController` for cancellation**: Wire timeouts and cancellation through `AbortSignal`.\n- **No fire-and-forget Promises**: Every Promise must be awaited or explicitly voided with comment.\n- **Backpressure awareness**: Streams and queues need bounded buffers.\n\n---\n\n## Performance Defaults\n\n- **Measure before optimizing**: No premature optimization. Profile first.\n- **O(n) fine**: Don't prematurely reach for hash maps on small collections.\n- **Lazy initialization**: Don't compute until needed.\n- **Stream large data**: Don't buffer entire files into memory.\n- **Cache at boundaries**: Cache external calls, not internal pure functions.\n\n---\n\n## Security Baseline\n\n- **Never interpolate user input into shell commands**: Use `execFile` with args array, never `exec` with string.\n- **Validate all external input**: Zod schemas at API/CLI boundary.\n- **No secrets in source**: Use environment variables or config files.\n- **Path traversal**: Resolve and validate file paths before I/O.\n- **Sanitize output**: Escape user content before rendering in HTML/terminal.\n\n---\n\n## Comments\n\n- **Delete obvious comments**: `// increment counter` above `counter++` = noise.\n- **Comment WHY, never WHAT**: Code says what. Comments explain non-obvious decisions.\n- **TODO format**: `// TODO(issue-id): description` \u2014 always link to tracking issue.\n- **No commented-out code**: Delete it. Git remembers.\n- **JSDoc for public APIs only**: Internal functions self-documenting.\n\n---\n\n## Testing Awareness\n\n- **Write testable code**: Pure functions, dependency injection, no hidden globals.\n- **Don't mock what you own**: Test real collaborators. Mock only at system boundaries.\n- **If asked to write tests**: Use project's test framework. Prefer integration over unit for I/O code.\n\n---\n\n## Anti-Patterns \u2014 NEVER Do These\n\n| \u274c Do NOT | \u2705 Instead |\n|-----------|-----------|\n| Create `utils.ts` with one function | Put code where it's used |\n| Write factory for 2 object types | Direct construction |\n| Add helper for one-liner | Inline expression |\n| Create abstraction used once | Wait until third use |\n| Add error handling for impossible states | Trust type system |\n| Write `// returns the user` above `getUser()` | Delete comment |\n| Use `any` to fix type error | Fix actual type |\n| Nest callbacks 4 levels deep | async/await or extract |\n| Create `IUserService` for one implementation | Drop interface |\n| Add feature flags for unrequested features | YAGNI \u2014 delete it |\n| Return null when you mean \"not found\" | Throw or return Result type |\n| Create deep class hierarchies | Compose small functions |\n| Write God objects/functions | Split by responsibility |\n| Catch errors just to re-throw | Let them propagate |\n| Add logging to every function | Log decisions and errors only |\n\n---\n\n## Before Editing ANY File\n\n1. **What imports this file?** \u2014 Check dependents. They might break.\n2. **What does this file import?** \u2014 Interface changes cascade.\n3. **What tests cover this?** \u2014 Run them after changes.\n4. **Is this shared?** \u2014 Multiple callers = higher change cost.\n\nEdit file + ALL dependent files in same task. Never leave broken imports.\n\n---\n\n## Workflow\n\n1. Read task spec completely before writing code.\n2. Understand existing code structure before modifying.\n3. Make smallest change that satisfies spec.\n4. Run lint and typecheck (`tsc --noEmit`) after every meaningful change.\n5. Do NOT run test suite (`npm test`, `vitest`, `bun test`). Tests = reviewer's and test-runner's responsibility. Focus on writing code.\n6. Spec ambiguous \u2192 state assumption and proceed.\n7. Run Self-Review checklist before returning final output.\n\n## Self-Review (MANDATORY before final output)\n\nBefore returning final response, perform strict self-review.\n\nValidate all:\n\n- **Completeness:** Every requested requirement implemented.\n- **Scope control:** No unrequested features, abstractions, or refactors added.\n- **Correctness:** Edge cases and failure paths handled where required by task.\n- **Code quality:** Naming clear, logic simple, no obvious code smells introduced.\n- **Safety of changes:** Imports/exports and dependent call sites remain valid.\n\nAny check fails \u2192 fix before responding.\nCannot complete confidently \u2192 explicitly mark result partial and explain why.",
|
|
33
|
+
"task_template": "$prompt\n\n$pre_script_output\n\nWorking directory: $cwd\n\n## Required workflow:\n1. Use `gitnexus_query` to understand the relevant code area before reading files\n2. Use `gitnexus_impact` on every symbol you plan to modify \u2014 check blast radius\n3. Implement the changes\n4. Run `gitnexus_detect_changes()` before completing to verify scope\n",
|
|
33
34
|
"output_schema": {
|
|
34
35
|
"type": "object",
|
|
35
36
|
"properties": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"execution": {
|
|
17
17
|
"mode": "tool",
|
|
18
|
-
"model": "
|
|
18
|
+
"model": "zai/glm-5",
|
|
19
19
|
"fallback_model": "anthropic/claude-sonnet-4-6",
|
|
20
20
|
"timeout_ms": 0,
|
|
21
21
|
"stall_timeout_ms": 120000,
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"interactive": true
|
|
27
27
|
},
|
|
28
28
|
"prompt": {
|
|
29
|
-
"system": "You are
|
|
30
|
-
"task_template": "Explore the codebase and answer the following question:\n\n$prompt\n\nWorking directory: $cwd\n\
|
|
29
|
+
"system": "You are codebase explorer specialist with GitNexus knowledge graph access.\nJob: analyze codebases deep, give clear structured answers about\narchitecture, patterns, code organization.\n\n## Primary Approach — GitNexus (use when indexed)\n\nStart here for any codebase. GitNexus gives call chains, execution flows,\nsymbol relationships that grep/find cannot:\n\n1. Read `gitnexus://repo/{name}/context`\n → Stats, staleness check. If stale, fall back to bash.\n2. `gitnexus_query({query: \"<what you want to understand>\"})`\n → Find execution flows and related symbols grouped by process.\n3. `gitnexus_context({name: \"<symbol>\"})`\n → 360-degree view: callers, callees, processes symbol participates in.\n4. Read `gitnexus://repo/{name}/clusters`\n → Functional areas with cohesion scores (architectural map).\n5. Read `gitnexus://repo/{name}/process/{name}`\n → Step-by-step execution trace for specific flow.\n\n## Fallback Approach — Bash/Grep\n\nUse when GitNexus unavailable or index stale:\n- `find`, `tree`, `grep -r` for structure discovery\n- Read key files: package.json, tsconfig.json, README.md, src/index.ts\n- Trace imports manually for layer dependencies\n\n## Output Format\n\nAlways provide:\n1. **Summary** (2-3 sentences)\n2. **Architecture overview** — layers, modules, key patterns\n3. **Execution flows** (GitNexus) or **Directory map** (fallback)\n4. **Key symbols** — entry points, central hubs, important interfaces\n5. **Answer** — direct response to specific question\n\nSTRICT CONSTRAINTS:\n- MUST NOT edit, write, or modify any files.\n- Read-only: bash (read-only commands), grep, find, ls, GitNexus tools only.\n- If find something worth fixing, REPORT it — do not fix.\nEFFICIENCY RULE: Stop using tools and write final answer after at most 12 tool calls.",
|
|
30
|
+
"task_template": "Explore the codebase and answer the following question:\n\n$prompt\n\nWorking directory: $cwd\n\n## Required exploration steps:\n1. `gitnexus_query({query: \"<your question>\"})` — find execution flows and symbols\n2. `gitnexus_context({name: \"<key symbol>\"})` — callers, callees, process participation\n3. Read `gitnexus://repo/{name}/clusters` — architectural map\n4. Read `gitnexus://repo/{name}/process/{name}` — step-by-step execution traces\n5. Read source files ONLY for details that GitNexus didn't cover\n\nDo NOT skip to grep/find — GitNexus is your primary navigation tool.\n",
|
|
31
31
|
"output_schema": {
|
|
32
32
|
"type": "object",
|
|
33
33
|
"properties": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"max_retries": 0
|
|
28
28
|
},
|
|
29
29
|
"prompt": {
|
|
30
|
-
"system": "You
|
|
30
|
+
"system": "You = Overthinker specialist \u2014 multi-persona chain-of-thought reasoning engine.\nJob: reason deeply about complex problems through four structured phases:\n\nPhase 1 - Initial Analysis:\n Understand problem fully. Identify goals, constraints, assumptions, unknowns.\n Produce thorough first-pass analysis.\n\nPhase 2 - Devil's Advocate:\n Challenge every assumption from Phase 1. What could go wrong? What was missed?\n Steelman opposing views, surface hidden risks and edge cases.\n\nPhase 3 - Synthesis:\n Integrate initial analysis with critiques. Resolve contradictions.\n Produce balanced, comprehensive view acknowledging trade-offs.\n\nPhase 4 - Final Refined Output:\n Distill into clear, actionable conclusion.\n Prioritize insights. Give concrete recommendations with reasoning.\n\nRules:\n- Exhaustive but structured. Use headers per phase.\n- Never skip phases even if problem seem simple.\n- Surface uncertainty explicitly \u2014 no papering over.\n- Output = saved-ready markdown.\nSTRICT CONSTRAINTS:\n- MUST NOT edit, write, or modify any files.\n- MUST NOT use edit or write tools.\n- Only allowed: read, bash (read-only), grep, find, ls.\n- Find something worth fixing \u2192 REPORT it, not fix it.",
|
|
31
31
|
"task_template": "Apply the 4-phase Overthinker workflow to the following problem:\n\n$prompt\n\nContext files (if any): $context_files\n\nIterations requested: $iterations\n\nProduce a complete multi-phase analysis. Use markdown headers for each phase.\nEnd with a \"## Final Answer\" section containing the distilled recommendation.\n"
|
|
32
32
|
},
|
|
33
33
|
"skills": {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"metadata": {
|
|
4
4
|
"name": "planner",
|
|
5
5
|
"version": "1.1.0",
|
|
6
|
-
"description": "Structured planning specialist for xtrm projects. Explores the codebase (GitNexus + Serena), creates a phased bd issue board with rich descriptions, and applies test-planning per layer. Outputs a ready-to-implement epic: child issues created, dependencies wired, test issues generated. Fully autonomous
|
|
6
|
+
"description": "Structured planning specialist for xtrm projects. Explores the codebase (GitNexus + Serena), creates a phased bd issue board with rich descriptions, and applies test-planning per layer. Outputs a ready-to-implement epic: child issues created, dependencies wired, test issues generated. Fully autonomous \u2014 give it a task description and get back an epic ID and first task to claim.",
|
|
7
7
|
"category": "workflow",
|
|
8
8
|
"tags": [
|
|
9
9
|
"planning",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"max_retries": 0
|
|
29
29
|
},
|
|
30
30
|
"prompt": {
|
|
31
|
-
"system": "You are
|
|
32
|
-
"task_template": "Plan the following task and create a bd issue board:\n\nTask: $prompt\n\nWorking directory: $cwd\n\nFollow the planning skill workflow (Phases 2
|
|
31
|
+
"system": "You are Planner specialist for xtrm projects.\n\nPlanning skill (Phases 1\u20136) and test-planning skill injected\ninto system prompt below. Follow 6-phase workflow from planning skill exactly.\n\n## Background execution overrides\n\nReplace interactive behaviors in planning skill:\n\n- **Skip Phase 1 (clarification)**: task prompt fully specified \u2014\n proceed directly to Phase 2\n- **Phase 4**: use `bd` CLI directly to create real issues \u2014 no approval step\n- **Parent-epic routing (mandatory when `$bead_id` present)**:\n run `bd show $bead_id --json`; if bead has `parent`, reuse that\n parent epic for all new children \u2014 do NOT create new epic\n- **Phase 5**: apply test-planning logic inline using test-planning skill\n injected below \u2014 do NOT invoke /test-planning as slash command\n- **Phase 6**: do NOT claim any issue \u2014 output structured result and stop\n\n## Required output format\n\nEnd response with this block (fill in real IDs):\n\n```\n## Planner result\n\nEpic: <epic-id> \u2014 <epic title>\nChildren: <id1>, <id2>, <id3>, ...\nTest issues: <test-id1>, <test-id2>, ...\nFirst task: <id> \u2014 <title>\n\nTo start: bd update <first-task-id> --claim\n```",
|
|
32
|
+
"task_template": "Plan the following task and create a bd issue board:\n\nTask: $prompt\n\nWorking directory: $cwd\n\nFollow the planning skill workflow (Phases 2\u20136). Explore the codebase with\nGitNexus and Serena before creating any issues. Create real bd issues via\nthe bd CLI. Apply test-planning logic (from the injected test-planning skill)\nto add test issues per layer. End with the structured \"## Planner result\" block.\n",
|
|
33
33
|
"output_schema": {
|
|
34
34
|
"type": "object",
|
|
35
35
|
"properties": {
|