@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.
- package/README.md +9 -1
- package/config/mandatory-rules/research-tool-routing.md +4 -0
- package/config/mandatory-rules/test-runner-execution-scope.md +1 -1
- package/config/skills/specialists-creator/SKILL.md +147 -3
- package/config/skills/using-specialists-auto/SKILL.md +1 -1
- package/config/skills/using-specialists-v2/SKILL.md +7 -7
- package/config/skills/using-specialists-v3/SKILL.md +223 -108
- package/config/specialists/bare.specialist.json +56 -0
- package/config/specialists/changelog-drafter.specialist.json +4 -2
- package/config/specialists/changelog-keeper.specialist.json +4 -2
- package/config/specialists/debugger.specialist.json +6 -4
- package/config/specialists/executor.specialist.json +7 -5
- package/config/specialists/explorer.specialist.json +4 -2
- package/config/specialists/memory-processor.specialist.json +4 -2
- package/config/specialists/node-coordinator.specialist.json +4 -2
- package/config/specialists/obligations-scanner.specialist.json +99 -0
- package/config/specialists/overthinker.specialist.json +4 -2
- package/config/specialists/planner.specialist.json +4 -2
- package/config/specialists/researcher.specialist.json +12 -7
- package/config/specialists/reviewer.specialist.json +10 -8
- package/config/specialists/seconder.specialist.json +170 -0
- package/config/specialists/security-auditor.specialist.json +4 -2
- package/config/specialists/service-skills-sync.specialist.json +78 -0
- package/config/specialists/specialists-creator.specialist.json +12 -8
- package/config/specialists/sync-docs.specialist.json +5 -3
- package/config/specialists/test-engineer.specialist.json +134 -0
- package/config/specialists/test-runner.specialist.json +8 -6
- package/config/specialists/transcriber.specialist.json +59 -0
- package/config/specialists/xt-merge.specialist.json +4 -2
- package/dist/asset-contract.json +23 -8
- package/dist/index.js +13606 -1805
- package/dist/lib.js +7 -3
- package/dist/types/cli/attach-tui.d.ts +13 -0
- package/dist/types/cli/attach-tui.d.ts.map +1 -0
- package/dist/types/cli/attach.d.ts +20 -1
- package/dist/types/cli/attach.d.ts.map +1 -1
- package/dist/types/cli/chat/control.d.ts +58 -0
- package/dist/types/cli/chat/control.d.ts.map +1 -0
- package/dist/types/cli/chat/feed.d.ts +25 -0
- package/dist/types/cli/chat/feed.d.ts.map +1 -0
- package/dist/types/cli/chat/status.d.ts +24 -0
- package/dist/types/cli/chat/status.d.ts.map +1 -0
- package/dist/types/cli/chat.d.ts +38 -0
- package/dist/types/cli/chat.d.ts.map +1 -0
- package/dist/types/cli/finalize.d.ts.map +1 -1
- package/dist/types/cli/format-helpers.d.ts.map +1 -1
- package/dist/types/cli/help.d.ts.map +1 -1
- package/dist/types/cli/log.d.ts +2 -0
- package/dist/types/cli/log.d.ts.map +1 -0
- package/dist/types/cli/node.d.ts.map +1 -1
- package/dist/types/cli/ps.d.ts.map +1 -1
- package/dist/types/cli/result.d.ts.map +1 -1
- package/dist/types/cli/resume.d.ts.map +1 -1
- package/dist/types/cli/run.d.ts +30 -0
- package/dist/types/cli/run.d.ts.map +1 -1
- package/dist/types/cli/steer.d.ts.map +1 -1
- package/dist/types/cli/stop.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/pi/session.d.ts +1 -0
- package/dist/types/pi/session.d.ts.map +1 -1
- package/dist/types/specialist/bead-notes.d.ts +8 -0
- package/dist/types/specialist/bead-notes.d.ts.map +1 -0
- package/dist/types/specialist/beads.d.ts.map +1 -1
- package/dist/types/specialist/control.d.ts +11 -0
- package/dist/types/specialist/control.d.ts.map +1 -0
- package/dist/types/specialist/job-file-output.d.ts +2 -0
- package/dist/types/specialist/job-file-output.d.ts.map +1 -1
- package/dist/types/specialist/launch.d.ts +36 -0
- package/dist/types/specialist/launch.d.ts.map +1 -0
- package/dist/types/specialist/runner.d.ts +3 -0
- package/dist/types/specialist/runner.d.ts.map +1 -1
- package/dist/types/specialist/schema.d.ts +72 -9
- package/dist/types/specialist/schema.d.ts.map +1 -1
- package/dist/types/specialist/script-runner.d.ts.map +1 -1
- package/dist/types/specialist/status-load.d.ts +3 -0
- package/dist/types/specialist/status-load.d.ts.map +1 -0
- package/dist/types/specialist/supervisor.d.ts +25 -2
- package/dist/types/specialist/supervisor.d.ts.map +1 -1
- package/dist/types/specialist/timeline-events.d.ts +20 -1
- package/dist/types/specialist/timeline-events.d.ts.map +1 -1
- package/package.json +13 -10
- 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> #
|
|
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
|
|
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.
|
|
9
|
-
synced_at:
|
|
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
|
-
|
|
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 (
|
|
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 | `
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|