@jaggerxtrm/specialists 3.15.4 → 3.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +9 -1
  2. package/config/mandatory-rules/research-tool-routing.md +4 -0
  3. package/config/mandatory-rules/test-runner-execution-scope.md +1 -1
  4. package/config/skills/specialists-creator/SKILL.md +147 -3
  5. package/config/skills/using-specialists-auto/SKILL.md +1 -1
  6. package/config/skills/using-specialists-v2/SKILL.md +7 -7
  7. package/config/skills/using-specialists-v3/SKILL.md +223 -108
  8. package/config/specialists/bare.specialist.json +56 -0
  9. package/config/specialists/changelog-drafter.specialist.json +4 -2
  10. package/config/specialists/changelog-keeper.specialist.json +4 -2
  11. package/config/specialists/debugger.specialist.json +6 -4
  12. package/config/specialists/executor.specialist.json +7 -5
  13. package/config/specialists/explorer.specialist.json +4 -2
  14. package/config/specialists/memory-processor.specialist.json +4 -2
  15. package/config/specialists/node-coordinator.specialist.json +4 -2
  16. package/config/specialists/obligations-scanner.specialist.json +99 -0
  17. package/config/specialists/overthinker.specialist.json +4 -2
  18. package/config/specialists/planner.specialist.json +4 -2
  19. package/config/specialists/researcher.specialist.json +12 -7
  20. package/config/specialists/reviewer.specialist.json +10 -8
  21. package/config/specialists/seconder.specialist.json +170 -0
  22. package/config/specialists/security-auditor.specialist.json +4 -2
  23. package/config/specialists/service-skills-sync.specialist.json +78 -0
  24. package/config/specialists/specialists-creator.specialist.json +12 -8
  25. package/config/specialists/sync-docs.specialist.json +5 -3
  26. package/config/specialists/test-engineer.specialist.json +134 -0
  27. package/config/specialists/test-runner.specialist.json +8 -6
  28. package/config/specialists/transcriber.specialist.json +59 -0
  29. package/config/specialists/xt-merge.specialist.json +4 -2
  30. package/dist/asset-contract.json +23 -8
  31. package/dist/index.js +13606 -1805
  32. package/dist/lib.js +7 -3
  33. package/dist/types/cli/attach-tui.d.ts +13 -0
  34. package/dist/types/cli/attach-tui.d.ts.map +1 -0
  35. package/dist/types/cli/attach.d.ts +20 -1
  36. package/dist/types/cli/attach.d.ts.map +1 -1
  37. package/dist/types/cli/chat/control.d.ts +58 -0
  38. package/dist/types/cli/chat/control.d.ts.map +1 -0
  39. package/dist/types/cli/chat/feed.d.ts +25 -0
  40. package/dist/types/cli/chat/feed.d.ts.map +1 -0
  41. package/dist/types/cli/chat/status.d.ts +24 -0
  42. package/dist/types/cli/chat/status.d.ts.map +1 -0
  43. package/dist/types/cli/chat.d.ts +38 -0
  44. package/dist/types/cli/chat.d.ts.map +1 -0
  45. package/dist/types/cli/finalize.d.ts.map +1 -1
  46. package/dist/types/cli/format-helpers.d.ts.map +1 -1
  47. package/dist/types/cli/help.d.ts.map +1 -1
  48. package/dist/types/cli/log.d.ts +2 -0
  49. package/dist/types/cli/log.d.ts.map +1 -0
  50. package/dist/types/cli/node.d.ts.map +1 -1
  51. package/dist/types/cli/ps.d.ts.map +1 -1
  52. package/dist/types/cli/result.d.ts.map +1 -1
  53. package/dist/types/cli/resume.d.ts.map +1 -1
  54. package/dist/types/cli/run.d.ts +30 -0
  55. package/dist/types/cli/run.d.ts.map +1 -1
  56. package/dist/types/cli/steer.d.ts.map +1 -1
  57. package/dist/types/cli/stop.d.ts.map +1 -1
  58. package/dist/types/index.d.ts +1 -1
  59. package/dist/types/pi/session.d.ts +1 -0
  60. package/dist/types/pi/session.d.ts.map +1 -1
  61. package/dist/types/specialist/bead-notes.d.ts +8 -0
  62. package/dist/types/specialist/bead-notes.d.ts.map +1 -0
  63. package/dist/types/specialist/beads.d.ts.map +1 -1
  64. package/dist/types/specialist/control.d.ts +11 -0
  65. package/dist/types/specialist/control.d.ts.map +1 -0
  66. package/dist/types/specialist/job-file-output.d.ts +2 -0
  67. package/dist/types/specialist/job-file-output.d.ts.map +1 -1
  68. package/dist/types/specialist/launch.d.ts +36 -0
  69. package/dist/types/specialist/launch.d.ts.map +1 -0
  70. package/dist/types/specialist/runner.d.ts +3 -0
  71. package/dist/types/specialist/runner.d.ts.map +1 -1
  72. package/dist/types/specialist/schema.d.ts +72 -9
  73. package/dist/types/specialist/schema.d.ts.map +1 -1
  74. package/dist/types/specialist/script-runner.d.ts.map +1 -1
  75. package/dist/types/specialist/status-load.d.ts +3 -0
  76. package/dist/types/specialist/status-load.d.ts.map +1 -0
  77. package/dist/types/specialist/supervisor.d.ts +25 -2
  78. package/dist/types/specialist/supervisor.d.ts.map +1 -1
  79. package/dist/types/specialist/timeline-events.d.ts +20 -1
  80. package/dist/types/specialist/timeline-events.d.ts.map +1 -1
  81. package/package.json +13 -10
  82. package/config/specialists/code-sanity.specialist.json +0 -108
package/README.md CHANGED
@@ -144,6 +144,9 @@ sp ps
144
144
  sp feed <job-id> --follow
145
145
  sp result <job-id>
146
146
 
147
+ # Human-in-the-loop alternative: launch with a live TUI
148
+ sp chat debugger --bead <id> # feed-style timeline + status + final result + input
149
+
147
150
  # After implementation and reviewer PASS
148
151
  sp merge <chain-root-bead> # standalone chain
149
152
  sp epic status <epic-id> # multi-chain publication check
@@ -167,8 +170,11 @@ Useful commands:
167
170
  ```bash
168
171
  sp ps # actionable dashboard
169
172
  sp ps -f # TTY dashboard follow; pipes emit ANSI-free snapshots
170
- sp feed <job-id> # full DB-backed event replay
173
+ sp feed <job-id> # compact DB-backed event replay
171
174
  sp feed -f # follow all active jobs
175
+ sp log <job-id> # lean runtime/control/error log; from a parent dir aggregates child repo DBs
176
+ sp log --specialist reviewer -f
177
+ sp chat explorer --bead <id> # launch interactive TUI; input auto-steers/resumes
172
178
  sp result <job-id> --wait
173
179
  sp steer <job-id> "focus only on X"
174
180
  sp resume <job-id> "continue with these findings"
@@ -177,6 +183,8 @@ sp clean --reap-orphans --dry-run
177
183
  sp clean --ps # hide terminal dashboard history without deleting DB audit rows
178
184
  ```
179
185
 
186
+ `sp chat` is for launching a new interactive specialist session. It renders the same normalized feed style as `sp feed -f`, shows startup/payload context and the final result, and maps typed input to `steer` while running or `resume` while waiting. `/quit` and Ctrl+C detach the TUI without stopping the job; use `/stop` when you intend to stop it. Current `sp attach <job-id>` remains the legacy tmux attach path; chat-style attach to an existing job is tracked separately.
187
+
180
188
  ## Script and service specialists
181
189
 
182
190
  Use `sp run` for interactive agent orchestration. Use the script/service surfaces when you need a synchronous, READ_ONLY, one-shot generation path:
@@ -7,6 +7,10 @@ Pick the right source before invoking research. Default to the project knowledge
7
7
  - `find-docs` / context7 — library, framework, SDK, CLI, or cloud-service docs (API syntax, config, migration).
8
8
  - `deepwiki` — public GitHub repo internals (architecture, conventions, code paths).
9
9
  - `github-search` (ghgrep) — real-world code patterns and API usage examples.
10
+ - `ddgs` — general web search, no API key (`ddgs text -q "<query>" -m 8`). Discover authoritative URLs for vendor docs, blogs, papers, or proprietary products the above don't cover.
11
+ - `agent-browser` — read/interact with any URL, including JS-rendered pages (`agent-browser open <url>` → `get text body`; close with `agent-browser close --all`).
10
12
  - `last30days` — recent web/social signals (Reddit, X, HN, YouTube). Early-warning only, never authoritative.
11
13
 
14
+ General web (not a library/repo/social topic): use `ddgs` to discover URLs, then `agent-browser` to read them. Never point `agent-browser` at a search engine — headless Chrome gets CAPTCHA-blocked; search with `ddgs` instead. If `ddgs`/`agent-browser` aren't installed, report the gap (`uv tool install ddgs`; `npm i -g agent-browser && agent-browser install`) rather than answering from memory.
15
+
12
16
  Invoke skills on demand, not by default. Cite the source for every external claim.
@@ -2,4 +2,4 @@
2
2
  name: test-runner-execution-scope
3
3
  kind: mandatory-rule
4
4
  ---
5
- Run only requested tests. Report failures with root cause and fix hints; do not expand scope.
5
+ Run only requested tests. Exact command input wins over manifest fallback. If fallback is used, label it clearly as fallback. Report failures with root cause, owner classification, and next-recipient hints; do not expand scope.
@@ -5,8 +5,8 @@ description: >
5
5
  agent through writing a valid `.specialist.json`, choosing supported models,
6
6
  validating against the schema, and avoiding common specialist authoring
7
7
  mistakes.
8
- version: 1.2
9
- synced_at: 236ca5e6
8
+ version: 1.3
9
+ synced_at: 78a7883e
10
10
  ---
11
11
 
12
12
  # Specialist Author Guide
@@ -358,16 +358,35 @@ Typical use cases:
358
358
  - `gitnexus: false` for specialists that should not receive GitNexus graph tooling
359
359
  - set both `false` for constrained runs that need clean extension surface
360
360
 
361
+ ### Bare specialists
362
+
363
+ Use `execution.bare: true` for non-coding LLM transforms that need a fresh canvas: research synthesis, document analysis, summarization, extraction, translation, or other tasks where specialist runtime framing adds noise instead of help.
364
+
365
+ Bare mode disables all package-runner prompt injection beyond rendered `prompt.system` and `prompt.task_template`: Specialist Run Context, Output Style, GitNexus mandate, `STATIC_WORKFLOW_RULES_BLOCK`, memory injection, GitNexus pre-query snapshot, reviewer patch retrieval, output contract, and task-side mandatory rules / reviewer diff context.
366
+
367
+ `execution.bare` is orthogonal to `prompt.system_prompt_mode`. Set `bare: true` without `system_prompt_mode: "replace"` when you want to keep pi's coding-agent base prompt but skip specialist runtime injections.
368
+
369
+ Copy bare template from installed npm package, not repo clone:
370
+
371
+ ```bash
372
+ cp "$(node -p \"require.resolve('@jaggerxtrm/specialists/package.json').replace(/package\\.json$/, '')\")config/specialists/bare.specialist.json" ".specialists/user/<your-name>.specialist.json"
373
+ ```
374
+
375
+ Warning: bare mode bypasses `mandatory_rules` completely — template sets, inline rules, and global disables all skip runtime injection in bare runs.
376
+
361
377
  ### `specialist.prompt` (required)
362
378
 
363
379
  | Field | Type | Required | Notes |
364
380
  |-------|------|----------|-------|
365
381
  | `task_template` | string | yes | Template string with `$variable` substitution |
366
382
  | `system` | string | no | System prompt / agents.md content |
383
+ | `system_prompt_mode` | enum | no | `append` \| `replace` — see [System Prompt Mode](#system-prompt-mode) |
367
384
  | `skill_inherit` | string | no | Single skill folder/file injected via `pi --skill` (Agent Forge compat) |
368
385
  | `output_schema` | object | no | JSON schema for structured output — injected into system prompt by runner; post-run validation is warn-only |
369
386
  | `examples` | array | no | Few-shot examples |
370
387
 
388
+ > **Replace mode warning:** `replace` removes pi's coding-agent base prompt. Teach every command, tool, convention, output format, and behavior explicitly in `prompt.system`; nothing implicit remains.
389
+
371
390
  **Output contract precedence (runner-injected):** `response_format` → `output_type` → `output_schema`.
372
391
 
373
392
  **`response_format` behavior**
@@ -397,6 +416,24 @@ Typical use cases:
397
416
 
398
417
  **Mandatory markdown+schema rule:** if `response_format: markdown` and `output_schema` is present, the output must include `## Machine-readable block` containing exactly one JSON object in a single ` ```json ` fenced block. That JSON object is canonical and must match the schema.
399
418
 
419
+ ### System Prompt Mode
420
+
421
+ `prompt.system_prompt_mode` controls whether `prompt.system` replaces or appends to pi's base prompt.
422
+
423
+ | Runner | Default when field absent | `append` sees | `replace` sees |
424
+ |--------|---------------------------|---------------|----------------|
425
+ | Package-class (`sp run` → `runner.ts` → `session.ts`) | `append` | pi coding-agent base prompt + specialist `agentsMd` | only specialist `agentsMd` |
426
+ | Script-class (`sp script` / `sp serve` → `script-runner.ts`) | `replace` | only specialist `prompt.system` | only specialist `prompt.system` |
427
+
428
+ | Combination | Agent sees |
429
+ |-------------|------------|
430
+ | Package × append | pi coding-agent base prompt + specialist `agentsMd` |
431
+ | Package × replace | only specialist `agentsMd` |
432
+ | Script × append | pi coding-agent base prompt + specialist `prompt.system` |
433
+ | Script × replace | only specialist `prompt.system` |
434
+
435
+ > **Replace mode warning:** use `replace` only when you intend to author full prompt surface yourself. No coding-agent defaults survive; teach commands, tools, conventions, output contract, and behavior explicitly. Best fit: non-coding transforms where base prompt adds noise.
436
+
400
437
  Standard schemas by specialist type (shown as the `output_schema` object value):
401
438
 
402
439
  executor — change manifest:
@@ -441,6 +478,48 @@ planner — epic result:
441
478
  }
442
479
  ```
443
480
 
481
+ ### `specialist.mandatory_rules` (optional)
482
+
483
+ | Field | Type | Default | Notes |
484
+ |-------|------|---------|-------|
485
+ | `template_sets` | string[] | `[]` | Adds rule-set ids from `config/mandatory-rules/index.json` and local overlays |
486
+ | `disable_default_globals` | boolean | `false` | Suppresses only inline `STATIC_WORKFLOW_RULES_BLOCK` (`Beads Workflow Quick Rules`) |
487
+ | `inline_rules` | `MandatoryRule[]` | `[]` | Inline rules appended without file lookup |
488
+
489
+ Runtime layering:
490
+
491
+ 1. `config/mandatory-rules/index.json.required_template_sets` — always loaded
492
+ 2. `config/mandatory-rules/index.json.default_template_sets` — also always loaded today; current quirk, not suppressed by `disable_default_globals`
493
+ 3. `specialist.mandatory_rules.template_sets`
494
+ 4. `specialist.mandatory_rules.inline_rules`
495
+
496
+ `disable_default_globals` only removes the inline `STATIC_WORKFLOW_RULES_BLOCK`. It does **not** suppress index-driven sets. True user-rules-only runs need both `disable_default_globals: true` and a user overlay index in `.specialists/user/mandatory-rules/index.json` that clears required/default sets.
497
+
498
+ Canonical set ids in `config/mandatory-rules/*.md`:
499
+ `bead-id-verbatim`, `changelog-conventions`, `changelog-keeper-scope`, `code-quality-defaults`, `core-session-boundary`, `diagnose-loop`, `executor-delivery`, `explorer-readonly`, `git-workflow-safe`, `gitnexus-required`, `overthinker-4phase`, `per-turn-handoff-schema`, `research-tool-routing`, `researcher-source-discipline`, `reviewer-verdict-format`, `security-review-defaults`, `serena-cheatsheet`, `sync-docs-scope-discipline`, `test-runner-execution-scope`.
500
+
501
+ Minimal user-rules-only spec:
502
+
503
+ ```json
504
+ {
505
+ "specialist": {
506
+ "mandatory_rules": {
507
+ "disable_default_globals": true,
508
+ "inline_rules": [
509
+ { "id": "user-rule-1", "level": "error", "text": "Use local policy only." },
510
+ { "id": "user-rule-2", "level": "warn", "text": "Prefer repo overlay index.", "when": "overlay exists" }
511
+ ]
512
+ }
513
+ }
514
+ }
515
+ ```
516
+
517
+ Inline rule shape:
518
+
519
+ ```json
520
+ { "id": "rule-id", "level": "error", "text": "Rule text", "when": "optional condition" }
521
+ ```
522
+
444
523
  ### `specialist.skills` (optional)
445
524
 
446
525
  ```json
@@ -496,7 +575,34 @@ Informational declarations used by pre-run validation and future tooling (e.g. `
496
575
  }
497
576
  ```
498
577
 
499
- Writes the final session output to this file path after the session completes. Relative to the working directory.
578
+ When set, the specialist writes its **handoff block** to this file on every substantive turn foreground and `--background`. The content is identical to what is appended to the input bead notes and shown by `sp result`: a markdown heading, the verbatim specialist output, and an italic metadata footer.
579
+
580
+ - **No env flag required.** `output_file` is honored whenever it is set (since unitAI-f58ma). It does NOT require `SPECIALISTS_JOB_FILE_OUTPUT` — that flag now only gates the debug file-mirrors (events.jsonl / status.json / result.txt).
581
+ - **Single writer.** In a supervised run (`sp run`) the supervisor owns the file and the runner's own write is suppressed, so the file is never double-written. (In script/serve runs there is no supervisor; the runner writes the raw output instead of the enveloped block.)
582
+ - **Format is the rendered handoff block, not bare output.** A downstream specialist that consumes this file as input will see the header/footer envelope around the body.
583
+ - **Append vs overwrite is controlled by `notes_mode`** (see below): `full-trail` appends each turn; `final-only` overwrites with just the final `[FINAL · DONE]` block.
584
+ - **Gitignore the path** if you don't want it committed — specs with `output_file` always write, so add the path (e.g. `.specialists/*-result.md`) to `.gitignore`.
585
+
586
+ Relative paths resolve from the working directory.
587
+
588
+ ### `specialist.notes_mode`
589
+
590
+ Controls how per-turn handoff output is persisted to BOTH the input bead notes and `output_file`.
591
+
592
+ | Value | Behavior |
593
+ |---|---|
594
+ | `"full-trail"` (default) | Append every substantive turn. Bead notes / `output_file` accumulate `### … [turn N · WAITING]` blocks, ending with a final `## … [FINAL · DONE]` block. Best for keep-alive specialists where the operator wants the full trail. |
595
+ | `"final-only"` | Persist only the single canonical `## … [FINAL · DONE]` block; intermediate turns are skipped and `output_file` is OVERWRITTEN (not appended). Best for non-coding / chained pipelines where the next specialist reads the previous specialist's bead note or `output_file` as its input and only wants the final result. |
596
+
597
+ Empty turns are never persisted. The handoff block is markdown-native (heading + verbatim body + one italic metadata footer); the model string is normalized (provider prefix stripped, e.g. `nano-gpt/moonshotai/kimi-k2.5` renders as `kimi-k2.5`).
598
+
599
+ ```json
600
+ { "notes_mode": "final-only" }
601
+ ```
602
+
603
+ ### Handoff / pipeline output recipe
604
+
605
+ For a non-coding pipeline where each specialist reads the previous one's result, set `output_file` to a known path AND `notes_mode: "final-only"` so the file (and the bead note) holds exactly the final result, overwritten each run — clean for the next specialist to consume. For a human-monitored keep-alive specialist, leave `notes_mode: "full-trail"` (default) so the operator sees every turn accumulate. `output_file` needs no env flag; just gitignore its path.
500
606
 
501
607
  ### `specialist.validation` (optional)
502
608
 
@@ -794,3 +900,41 @@ specialists run my-specialist --prompt "ping" --no-beads
794
900
  ```
795
901
 
796
902
  If you need the underlying implementation, read `config/skills/specialists-creator/scripts/validate-specialist.ts`. It is a thin Bun/TypeScript wrapper over `parseSpecialist()` from `src/specialist/schema.ts`, which keeps the helper cross-platform for Windows, macOS, and Linux.
903
+
904
+ ---
905
+
906
+ ## Script-Class vs Package-Class Runtime
907
+
908
+ Two runtime classes exist:
909
+
910
+ - **Package-class**: `sp run` → `runner.ts` → `session.ts`
911
+ - **Script-class**: `sp script` / `sp serve` → `script-runner.ts`
912
+
913
+ | Runner | Injected into system prompt |
914
+ |--------|----------------------------|
915
+ | Package-class | `prompt.system` + Specialist Run Context + caveman output style + GitNexus mandate (if `.gitnexus` exists) + `STATIC_WORKFLOW_RULES_BLOCK` + memory injection + mandatory rules + skills inheritance + output contract + reviewer patch retrieval (reviewer reuse only) |
916
+ | Script-class | `prompt.system` only |
917
+
918
+ Pi flags:
919
+
920
+ | Runner | Pi flags |
921
+ |--------|----------|
922
+ | Package-class | `--no-extensions`, then re-enable quality-gates/service-skills/caveman/gitnexus/serena |
923
+ | Script-class | `--no-extensions --no-tools --offline --no-context-files --no-prompt-templates --no-themes` and `--no-skills` when `skills.paths` is empty |
924
+
925
+ Settings that silently do nothing on script-class:
926
+
927
+ - `mandatory_rules` (all fields)
928
+ - beads injection
929
+ - GitNexus mandate
930
+ - memory injection
931
+ - output contract auto-generation
932
+
933
+ Per-runner default for `prompt.system_prompt_mode`:
934
+
935
+ - Package-class: `append`
936
+ - Script-class: `replace`
937
+
938
+ > **Script-class warning:** `mandatory_rules` never reaches script-class. If spec must rely on rule sets, it must run package-class.
939
+
940
+ ---
@@ -39,7 +39,7 @@ read bead → write 7-section contract (child impl bead) → bd dep add parent
39
39
  → sleep 10 && sp ps # confirm started, not stuck queued
40
40
  → sleep <role-typical from v3> & sp ps # check (see v3 Monitoring section)
41
41
  → sp result <exec-job> # consume immediately on transition to waiting
42
- → optional advisory passes per v3 (code-sanity if smelly, security-auditor if risk surface)
42
+ → optional advisory passes per v3 (seconder if smelly, security-auditor if risk surface)
43
43
  → write reviewer bead contract → sp run reviewer --bead <review> --job <exec-job> --background
44
44
  → sleep 90 & sp ps
45
45
  → sp result <reviewer-job>
@@ -215,7 +215,7 @@ Run `specialists list` if you need the live registry. Choose by task, not by hab
215
215
  | Design/tradeoffs | `overthinker` | The approach is risky, ambiguous, or needs critique. |
216
216
  | Implementation | `executor` | The contract is clear enough to write code or docs. |
217
217
  | Compliance/code review | `reviewer` | An executor/debugger produced changes that need the final PASS/PARTIAL/FAIL verdict. |
218
- | Implementation sanity | `code-sanity` | You want a cheap READ_ONLY smell pass for simplicity, type safety, dead code, brittle async/error handling, or maintainability before reviewer. |
218
+ | Implementation sanity | `seconder` | You want a cheap READ_ONLY smell pass for simplicity, type safety, dead code, brittle async/error handling, or maintainability before reviewer. |
219
219
  | Security/dependency audit | `security-auditor` | You need threat modeling, secure-code review, package advisory triage, or agent/config security scanning. LOW: scan/read/recommend only. |
220
220
  | Multiple review perspectives | `parallel-review` | A critical diff needs independent review passes. |
221
221
  | Test execution | `test-runner` | You need suites run and failures interpreted. |
@@ -247,7 +247,7 @@ specialists doctor --check-drift # inspect stale .specialists/de
247
247
  sp prune-stale-defaults --dry-run # preview redundant default snapshots
248
248
  specialists run <name> --bead <id> --background
249
249
  specialists run executor --bead <impl-bead> --background # worktree auto-provisioned
250
- specialists run code-sanity --bead <sanity-bead> --job <exec-job> --keep-alive --background
250
+ specialists run seconder --bead <sanity-bead> --job <exec-job> --keep-alive --background
251
251
  specialists run security-auditor --bead <security-bead> --job <exec-job> --keep-alive --background
252
252
  specialists run reviewer --bead <review-bead> --job <exec-job> --keep-alive --background
253
253
  specialists ps
@@ -343,7 +343,7 @@ specialists run executor --worktree --bead <impl> --context-depth 3 --background
343
343
  specialists result <exec-job>
344
344
  ```
345
345
 
346
- Optional code-sanity pass for implementation smell checks (use when the diff is non-trivial or likely to accumulate agent-code complexity):
346
+ Optional seconder pass for implementation smell checks (use when the diff is non-trivial or likely to accumulate agent-code complexity):
347
347
 
348
348
  ```bash
349
349
  bd create --title "Code sanity check token refresh retry" --type task --priority 3 \
@@ -355,11 +355,11 @@ CONSTRAINTS: At most 5 concrete findings; cite files/symbols/lines where possibl
355
355
  VALIDATION: Findings are suitable to paste into specialists resume <exec-job>.
356
356
  OUTPUT: OK/FINDINGS/BLOCKED with handoff."
357
357
  bd dep add <sanity> <impl>
358
- specialists run code-sanity --bead <sanity> --job <exec-job> --context-depth 3 --keep-alive --background
358
+ specialists run seconder --bead <sanity> --job <exec-job> --context-depth 3 --keep-alive --background
359
359
  specialists result <sanity-job>
360
360
  ```
361
361
 
362
- If code-sanity returns `FINDINGS`, resume executor with those concrete instructions, then rerun code-sanity only if the fixes were substantive. Do not treat code-sanity `OK` as reviewer PASS.
362
+ If seconder returns `FINDINGS`, resume executor with those concrete instructions, then rerun seconder only if the fixes were substantive. Do not treat seconder `OK` as reviewer PASS.
363
363
 
364
364
  Optional security pass when the task touches auth, secrets, input handling, dependency updates, package advisories, agent config, hooks, or exposed endpoints:
365
365
 
@@ -492,7 +492,7 @@ Standard loop:
492
492
  ```text
493
493
  executor --worktree --bead impl
494
494
  -> waiting after turn
495
- optional code-sanity --bead sanity --job exec-job
495
+ optional seconder --bead sanity --job exec-job
496
496
  -> OK: continue
497
497
  -> FINDINGS: resume executor with exact sanity findings
498
498
  optional security-auditor --bead security --job exec-job
@@ -506,7 +506,7 @@ reviewer --bead review --job exec-job
506
506
 
507
507
  Prefer `sp resume <exec-job>` over a new fix executor when the original job is waiting and context is healthy. Use a new fix bead with `--job <exec-job>` only when the original executor is dead, context exhausted, or a separate audit trail is required.
508
508
 
509
- Code-sanity and security-auditor outputs are advisory inputs to the chain; reviewer output must still be consumed before publishing. Do not treat job completion, code-sanity OK, or security no-findings as equivalent to reviewer acceptance.
509
+ Seconder and security-auditor outputs are advisory inputs to the chain; reviewer output must still be consumed before publishing. Do not treat job completion, seconder OK, or security no-findings as equivalent to reviewer acceptance.
510
510
 
511
511
  ## Dependency Mapping
512
512