@jaggerxtrm/specialists 3.15.3 → 3.16.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 (48) hide show
  1. package/README.md +22 -1
  2. package/config/skills/specialists-creator/SKILL.md +119 -2
  3. package/config/skills/using-specialists-v3/SKILL.md +42 -3
  4. package/config/specialists/bare.specialist.json +56 -0
  5. package/config/specialists/changelog-drafter.specialist.json +4 -1
  6. package/config/specialists/code-sanity.specialist.json +4 -2
  7. package/config/specialists/explorer.specialist.json +4 -2
  8. package/config/specialists/overthinker.specialist.json +4 -2
  9. package/config/specialists/specialists-creator.specialist.json +8 -6
  10. package/dist/asset-contract.json +6 -3
  11. package/dist/index.js +12759 -1782
  12. package/dist/lib.js +6 -3
  13. package/dist/types/cli/attach-tui.d.ts +13 -0
  14. package/dist/types/cli/attach-tui.d.ts.map +1 -0
  15. package/dist/types/cli/attach.d.ts +20 -1
  16. package/dist/types/cli/attach.d.ts.map +1 -1
  17. package/dist/types/cli/chat/control.d.ts +58 -0
  18. package/dist/types/cli/chat/control.d.ts.map +1 -0
  19. package/dist/types/cli/chat/feed.d.ts +25 -0
  20. package/dist/types/cli/chat/feed.d.ts.map +1 -0
  21. package/dist/types/cli/chat/status.d.ts +24 -0
  22. package/dist/types/cli/chat/status.d.ts.map +1 -0
  23. package/dist/types/cli/chat.d.ts +38 -0
  24. package/dist/types/cli/chat.d.ts.map +1 -0
  25. package/dist/types/cli/finalize.d.ts.map +1 -1
  26. package/dist/types/cli/help.d.ts.map +1 -1
  27. package/dist/types/cli/node.d.ts.map +1 -1
  28. package/dist/types/cli/ps.d.ts.map +1 -1
  29. package/dist/types/cli/run.d.ts +30 -0
  30. package/dist/types/cli/run.d.ts.map +1 -1
  31. package/dist/types/cli/stop.d.ts.map +1 -1
  32. package/dist/types/index.d.ts +1 -1
  33. package/dist/types/pi/session.d.ts +1 -0
  34. package/dist/types/pi/session.d.ts.map +1 -1
  35. package/dist/types/specialist/bead-notes.d.ts +8 -0
  36. package/dist/types/specialist/bead-notes.d.ts.map +1 -0
  37. package/dist/types/specialist/beads.d.ts.map +1 -1
  38. package/dist/types/specialist/control.d.ts +11 -0
  39. package/dist/types/specialist/control.d.ts.map +1 -0
  40. package/dist/types/specialist/launch.d.ts +36 -0
  41. package/dist/types/specialist/launch.d.ts.map +1 -0
  42. package/dist/types/specialist/runner.d.ts.map +1 -1
  43. package/dist/types/specialist/schema.d.ts +54 -0
  44. package/dist/types/specialist/schema.d.ts.map +1 -1
  45. package/dist/types/specialist/script-runner.d.ts.map +1 -1
  46. package/dist/types/specialist/status-load.d.ts +3 -0
  47. package/dist/types/specialist/status-load.d.ts.map +1 -0
  48. package/package.json +2 -1
package/README.md CHANGED
@@ -121,6 +121,18 @@ Specialists uses two distribution tracks:
121
121
 
122
122
  `.specialists/user/` is your customization layer. `.specialists/default/` is now only for intentional pins or compatibility snapshots; stale default files are drift debt and `sp prune-stale-defaults` removes them by default. `sp init --sync-defaults` remains as a compatibility path, but it is deprecated because it creates repo-local snapshots that can drift from the package-canonical source.
123
123
 
124
+ For an interactive, agent-guided update flow that runs both tracks, diagnoses drift, and asks before applying destructive changes, invoke the `/update-specialists` skill in Claude Code instead of running the raw commands manually.
125
+
126
+ ## Operator skills
127
+
128
+ These skills load into your Claude Code session on demand and guide the most common operator workflows:
129
+
130
+ | Skill | Invoke | When to use |
131
+ |---|---|---|
132
+ | `using-specialists-v3` | `/using-specialists-v3` | **Canonical orchestration guide.** Use for any substantial delegated work: implementation, debugging, review, planning, security audit, doc sync, multi-chain epics. Covers bead contracts, role selection, chain lifecycle, merge path, and escalation. |
133
+ | `using-specialists-auto` | `/using-specialists-auto` | **Autonomous / offline mode.** Activates when you hand over a multi-item list and step away ("auto mode", "run the list"). Layers pacing discipline and escalation triggers on top of `using-specialists-v3`. |
134
+ | `update-specialists` | `/update-specialists` | **Guided drift repair.** Runs both Category A and Category B diagnostics, presents a combined plan, and asks before applying anything. Prefer this over running raw `sp`/`xt` commands directly. |
135
+
124
136
  ## Core tracked workflow
125
137
 
126
138
  ```bash
@@ -132,6 +144,9 @@ sp ps
132
144
  sp feed <job-id> --follow
133
145
  sp result <job-id>
134
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
+
135
150
  # After implementation and reviewer PASS
136
151
  sp merge <chain-root-bead> # standalone chain
137
152
  sp epic status <epic-id> # multi-chain publication check
@@ -157,6 +172,7 @@ sp ps # actionable dashboard
157
172
  sp ps -f # TTY dashboard follow; pipes emit ANSI-free snapshots
158
173
  sp feed <job-id> # full DB-backed event replay
159
174
  sp feed -f # follow all active jobs
175
+ sp chat explorer --bead <id> # launch interactive TUI; input auto-steers/resumes
160
176
  sp result <job-id> --wait
161
177
  sp steer <job-id> "focus only on X"
162
178
  sp resume <job-id> "continue with these findings"
@@ -165,6 +181,8 @@ sp clean --reap-orphans --dry-run
165
181
  sp clean --ps # hide terminal dashboard history without deleting DB audit rows
166
182
  ```
167
183
 
184
+ `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.
185
+
168
186
  ## Script and service specialists
169
187
 
170
188
  Use `sp run` for interactive agent orchestration. Use the script/service surfaces when you need a synchronous, READ_ONLY, one-shot generation path:
@@ -193,7 +211,10 @@ curl -sS http://localhost:8000/v1/generate \
193
211
  | Tool catalog and permission resolver | [docs/manifest.md](docs/manifest.md) |
194
212
  | MCP registration and tool surface | [docs/mcp-servers.md](docs/mcp-servers.md), [docs/mcp-tools.md](docs/mcp-tools.md) |
195
213
  | Hooks | [docs/hooks.md](docs/hooks.md) |
196
- | Skills | [docs/skills.md](docs/skills.md) |
214
+ | Skills and operator skill reference | [docs/skills.md](docs/skills.md) |
215
+ | Orchestration skill (`using-specialists-v3`) | [docs/skills.md#using-specialists-v3](docs/skills.md#using-specialists-v3) |
216
+ | Auto mode skill (`using-specialists-auto`) | [docs/skills.md#using-specialists-auto](docs/skills.md#using-specialists-auto) |
217
+ | Update / drift repair skill (`update-specialists`) | [docs/skills.md#update-specialists](docs/skills.md#update-specialists) |
197
218
  | Worktrees and session close | [docs/worktrees.md](docs/worktrees.md), [docs/worktree.md](docs/worktree.md) |
198
219
  | Runtime architecture | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) |
199
220
  | Pi subprocess isolation / RPC boundary | [docs/pi-session.md](docs/pi-session.md), [docs/pi-rpc-boundary.md](docs/pi-rpc-boundary.md) |
@@ -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
@@ -794,3 +873,41 @@ specialists run my-specialist --prompt "ping" --no-beads
794
873
  ```
795
874
 
796
875
  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.
876
+
877
+ ---
878
+
879
+ ## Script-Class vs Package-Class Runtime
880
+
881
+ Two runtime classes exist:
882
+
883
+ - **Package-class**: `sp run` → `runner.ts` → `session.ts`
884
+ - **Script-class**: `sp script` / `sp serve` → `script-runner.ts`
885
+
886
+ | Runner | Injected into system prompt |
887
+ |--------|----------------------------|
888
+ | 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) |
889
+ | Script-class | `prompt.system` only |
890
+
891
+ Pi flags:
892
+
893
+ | Runner | Pi flags |
894
+ |--------|----------|
895
+ | Package-class | `--no-extensions`, then re-enable quality-gates/service-skills/caveman/gitnexus/serena |
896
+ | Script-class | `--no-extensions --no-tools --offline --no-context-files --no-prompt-templates --no-themes` and `--no-skills` when `skills.paths` is empty |
897
+
898
+ Settings that silently do nothing on script-class:
899
+
900
+ - `mandatory_rules` (all fields)
901
+ - beads injection
902
+ - GitNexus mandate
903
+ - memory injection
904
+ - output contract auto-generation
905
+
906
+ Per-runner default for `prompt.system_prompt_mode`:
907
+
908
+ - Package-class: `append`
909
+ - Script-class: `replace`
910
+
911
+ > **Script-class warning:** `mandatory_rules` never reaches script-class. If spec must rely on rule sets, it must run package-class.
912
+
913
+ ---
@@ -292,7 +292,7 @@ Core commands:
292
292
  - `bd create --parent <epic-id>`: epic-child edge; auto-names child `.1`, `.2`, … and adds parent ownership. Use for chain members that must live under an epic. [source: bd create --help]
293
293
  - `bd create --deps discovered-from:<id>` or `bd dep add <new> <source> --type discovered-from`: follow-up work discovered from a source bead.
294
294
  - `bd duplicate <new> --of <canonical>`: close duplicate issue and point at canonical. Use when two beads describe the same required work.
295
- - `bd duplicates` / `bd find-duplicates --status open --method ai --json`: find exact or semantic duplicates before dispatching parallel chains.
295
+ - `bd duplicates` / `bd find-duplicates --status open --method mechanical --json`: cheap duplicate prefilter before dispatching parallel chains. For semantic clustering, use the `issue-triage` skill path (mechanical prefilter + bv graph signals + explorer/GitNexus overlap + overthinker recommendations), not `bd --method ai`.
296
296
  - `bd supersede <old> --with <new>` or `bd dep add <new> <old> --type supersedes`: mark a replacement when a better-scoped fix bead replaces an obsolete/abandoned one.
297
297
  - `bd dep cycles`, `bd dep tree <id>`, and `bd graph <id>`: sanity-check the execution graph before merge/publication.
298
298
 
@@ -345,10 +345,49 @@ Use each form for a different reason:
345
345
  - `parent-child` / `--parent` for epic ownership and child naming.
346
346
  - `supersedes` / `bd supersede` for replacement work; `duplicate` for same-work issues.
347
347
 
348
- Cross-repo consistency: keep this vocabulary aligned with the xtrm-tools triaging skill and sibling triage bead `xtrm-drkk`; both should use the same relationship names when rewiring issue graphs.
348
+ Cross-repo consistency: keep this vocabulary aligned with the xtrm-tools `issue-triage` and `planning` skills; all three should use the same relationship names when creating or rewiring issue graphs.
349
349
 
350
350
  What differs: orchestrator chooses edge type deliberately, so graph stays correct for chain execution, epic publish, duplicate cleanup, root-cause navigation, verification evidence, and follow-up traceability.
351
351
 
352
+ ## Swarm Validation For Epic Readiness
353
+
354
+ Use `bd swarm` as graph-level readiness instrumentation for multi-chain epics. It does **not** replace specialists jobs, `sp epic status`, or `sp epic merge`; it validates and summarizes the bead DAG so you know whether the epic is shaped for parallel execution before spending specialist tokens.
355
+
356
+ Command surface:
357
+
358
+ ```bash
359
+ bd swarm validate <epic-id> [--verbose] [--json]
360
+ bd swarm status <epic-or-swarm-id> [--json]
361
+ bd swarm list [--json]
362
+ bd swarm create <epic-id> [--coordinator=<addr>] [--force]
363
+ ```
364
+
365
+ What each command is for:
366
+
367
+ | Command | Use it when | Output / decision |
368
+ | --- | --- | --- |
369
+ | `bd swarm validate <epic>` | Before launching a multi-chain epic, after graph rewrites, and before `sp epic merge` | Finds dependency-direction mistakes, orphan/disconnected children, cycles, ready fronts, estimated worker sessions, and max parallelism |
370
+ | `bd swarm status <epic-or-swarm>` | During orchestration | Shows computed completed / active / ready / blocked groups from live bead state |
371
+ | `bd swarm list` | Operator wants all active swarm molecules | Inventory of swarm molecules with epic/progress summary |
372
+ | `bd swarm create <epic>` | Operator explicitly wants a swarm molecule/coordinator handoff | Mutates board state; confirm first. If passed a task, bd may auto-wrap it in an epic. |
373
+
374
+ Where it fits in orchestration:
375
+
376
+ 1. **After planning / before dispatch**: run `bd swarm validate <epic-id> --json` for epics with 3+ children or intended parallel execution. Treat warnings as graph-shaping feedback; fix relationship types or split/merge beads before launching specialists.
377
+ 2. **During execution**: use `bd swarm status <epic-id> --json` alongside `sp ps`. `sp ps` tells you job/runtime state; swarm status tells you issue-graph state (ready vs blocked fronts).
378
+ 3. **Before publication**: run `bd swarm validate <epic-id>` plus `bd dep cycles` and `sp epic status <epic-id>`. Do not `sp epic merge` if swarm validation reports cycles, disconnected graph, or suspicious dependency direction.
379
+ 4. **Optional coordinator handoff**: run `bd swarm create <epic-id> --coordinator=<addr>` only after operator confirmation. Creating a swarm molecule is a tracked mutation, not a default read-only check.
380
+
381
+ Example gate before parallel dispatch:
382
+
383
+ ```bash
384
+ bd dep cycles
385
+ bd swarm validate <epic-id> --json > .triage/swarm-<epic-id>.json
386
+ sp epic status <epic-id>
387
+ ```
388
+
389
+ If validation says max parallelism is 1, do not pretend the epic is parallel; dispatch serially or fix the graph. If it reports multiple ready fronts, use that as the wave plan for specialist launches.
390
+
352
391
  ## Bead Contract By Bead Type
353
392
 
354
393
  Use shape that fits specialist.
@@ -606,7 +645,7 @@ bd supersede <old-chain-a> --with <unified-chain>
606
645
  bd supersede <old-chain-b> --with <unified-chain>
607
646
  ```
608
647
 
609
- Default heuristic: if 3+ chains touch the same file, **serial-dispatch them**. Conflict-resolution time at integration usually exceeds the time saved by parallel dispatch. Run `bd find-duplicates --status open --method ai --json` before launching a large wave; merge or supersede duplicate work before specialists spend tokens on it.
648
+ Default heuristic: if 3+ chains touch the same file, **serial-dispatch them**. Conflict-resolution time at integration usually exceeds the time saved by parallel dispatch. Before launching a large wave, run mechanical duplicate prefiltering and semantic clustering through `issue-triage` (or its core path: `bd find-duplicates --method mechanical` + `bv --robot-triage/alerts` + explorer/GitNexus overlap + overthinker recommendations); merge or supersede duplicate work before specialists spend tokens on it.
610
649
 
611
650
  ## Pre-Epic: Test-Failure-Map Pattern
612
651
 
@@ -0,0 +1,56 @@
1
+ {
2
+ "specialist": {
3
+ "metadata": {
4
+ "name": "bare",
5
+ "version": "1.0.0",
6
+ "description": "TEMPLATE — do not dispatch. Copy from the installed @jaggerxtrm/specialists package to .specialists/user/<your-name>.specialist.json and customize for your own task. Fresh-canvas specialist template for non-coding transforms that need zero runtime prompt injection.",
7
+ "category": "template",
8
+ "tags": [
9
+ "template",
10
+ "bare-mode",
11
+ "copy-me"
12
+ ]
13
+ },
14
+ "execution": {
15
+ "bare": true,
16
+ "mode": "tool",
17
+ "model": "openai/codex-5",
18
+ "fallback_model": "google-gemini-cli/gemini-3.1-pro-preview",
19
+ "timeout_ms": 120000,
20
+ "max_retries": 0,
21
+ "interactive": false,
22
+ "response_format": "markdown",
23
+ "output_type": "synthesis",
24
+ "permission_required": "READ_ONLY",
25
+ "extensions": {
26
+ "serena": false,
27
+ "gitnexus": false
28
+ }
29
+ },
30
+ "prompt": {
31
+ "system": "You are a fresh-canvas specialist for one narrow transform. No hidden rules assumed.\n\nYour job: read the supplied input carefully, decide what transformation is needed, and produce only the requested result. Use no commands unless the task explicitly authorizes them. If commands are allowed, list each command before running it, explain why it is needed, and stop if the command output does not match the task.\n\nAvailable tools in this run are only those granted by the specialist configuration. Treat them as the complete tool list. If you need a tool that is not present, state the limitation and continue with a best-effort answer instead of inventing capabilities.\n\nOutput format: return a short heading, then the transformed result, then a brief note listing assumptions or blockers. If the task requires structured output, emit exactly that structure and nothing extra.\n\nTermination condition: finish once the requested transform is complete and self-consistent. Do not add policy reminders, runtime framing, or extra commentary. If the input is ambiguous, ask one precise clarification question and stop.",
32
+ "system_prompt_mode": "replace",
33
+ "task_template": "Transform the following input using the brief above. Preserve meaning, keep only requested content, and return the final answer in the format you chose.\n\n$prompt"
34
+ },
35
+ "skills": {
36
+ "paths": [],
37
+ "scripts": []
38
+ },
39
+ "capabilities": {
40
+ "required_tools": [],
41
+ "external_commands": []
42
+ },
43
+ "validation": {
44
+ "files_to_watch": [
45
+ "config/specialists/bare.specialist.json"
46
+ ],
47
+ "stale_threshold_days": 30
48
+ },
49
+ "stall_detection": {},
50
+ "mandatory_rules": {
51
+ "template_sets": []
52
+ },
53
+ "beads_integration": "auto",
54
+ "beads_write_notes": true
55
+ }
56
+ }
@@ -26,7 +26,10 @@
26
26
  "interactive": false,
27
27
  "max_retries": 0,
28
28
  "mode": "auto",
29
- "requires_worktree": false
29
+ "requires_worktree": false,
30
+ "extensions": {
31
+ "serena": false
32
+ }
30
33
  },
31
34
  "mandatory_rules": {
32
35
  "template_sets": [
@@ -26,14 +26,16 @@
26
26
  "permission_required": "READ_ONLY",
27
27
  "interactive": true,
28
28
  "thinking_level": "low",
29
- "max_retries": 0
29
+ "max_retries": 0,
30
+ "extensions": {
31
+ "serena": false
32
+ }
30
33
  },
31
34
  "mandatory_rules": {
32
35
  "template_sets": [
33
36
  "explorer-readonly",
34
37
  "gitnexus-required",
35
38
  "code-quality-defaults",
36
- "serena-cheatsheet",
37
39
  "per-turn-handoff-schema",
38
40
  "bead-id-verbatim"
39
41
  ]
@@ -23,13 +23,15 @@
23
23
  "output_type": "analysis",
24
24
  "permission_required": "READ_ONLY",
25
25
  "max_retries": 0,
26
- "interactive": true
26
+ "interactive": true,
27
+ "extensions": {
28
+ "serena": false
29
+ }
27
30
  },
28
31
  "mandatory_rules": {
29
32
  "template_sets": [
30
33
  "explorer-readonly",
31
34
  "gitnexus-required",
32
- "serena-cheatsheet",
33
35
  "per-turn-handoff-schema",
34
36
  "bead-id-verbatim"
35
37
  ]
@@ -24,13 +24,15 @@
24
24
  "output_type": "synthesis",
25
25
  "permission_required": "READ_ONLY",
26
26
  "interactive": true,
27
- "max_retries": 0
27
+ "max_retries": 0,
28
+ "extensions": {
29
+ "serena": false
30
+ }
28
31
  },
29
32
  "mandatory_rules": {
30
33
  "template_sets": [
31
34
  "overthinker-4phase",
32
35
  "research-tool-routing",
33
- "serena-cheatsheet",
34
36
  "per-turn-handoff-schema",
35
37
  "bead-id-verbatim"
36
38
  ]
@@ -2,10 +2,10 @@
2
2
  "specialist": {
3
3
  "metadata": {
4
4
  "name": "specialists-creator",
5
- "version": "1.3.0",
5
+ "version": "1.4.0",
6
6
  "description": "Specialist-definition author. Use for creating or fixing .specialist.json files, choosing valid models, schema fields, permissions, rules, and config validation. HIGH; not for ordinary app code.",
7
7
  "category": "authoring",
8
- "updated": "2026-05-04",
8
+ "updated": "2026-05-23",
9
9
  "tags": [
10
10
  "authoring",
11
11
  "json",
@@ -27,7 +27,7 @@
27
27
  "interactive": false
28
28
  },
29
29
  "prompt": {
30
- "system": "You are a specialist authoring assistant. Your job is to help agents and developers\nwrite valid .specialist.json files that pass schema validation on the first attempt.\n\nYou have deep knowledge of the SpecialistSchema (Zod) and the runtime behavior of\nSpecialistRunner. You know every required field, every valid enum value, and every\ncommon pitfall.\n\nMANDATORY — model selection protocol (enforced every run):\nThe available models are injected into $pre_script_output by the pre-script.\nYou MUST:\n 1. Read $pre_script_output to see the real available models.\n 2. Select a primary and fallback from DIFFERENT providers.\n 3. Ping both before writing any JSON:\n pi --model <primary> --print \"ping\" # must return \"pong\"\n pi --model <fallback> --print \"ping\" # must return \"pong\"\n 4. If a ping fails, pick the next best in that tier and ping again.\n 5. Only write the JSON after both return \"pong\".\n\nNever hardcode a model string from memory. Never skip pinging.\n\nABSOLUTE RULES — violation terminates the task:\n - DO NOT delete, move, or rename any existing file or directory.\n - DO NOT modify any file that was not explicitly requested by the user.\n - You may only CREATE new files and WRITE to files you have been asked to create.\n\nCONTEXT WINDOW AWARENESS — apply to every specialist you create:\n - Context rot degrades quality before the hard limit is hit. Design for bounded runs.\n - Always set stall_timeout_ms for interactive/keep-alive specialists.\n - Use thinking_level: low for orchestration specialists that emit structured JSON.\n - If the specialist is multi-turn or a Node member: add handoff_summary to output_schema.\n - Never inject large static context blobs in task_template that could be fetched on demand.\n - context_pct = cumulative_input_tokens / model_context_window * 100\n Windows: anthropic claude-* = 200k, gemini-3.1-pro = 1M, qwen3.5/glm-5 = 128k\n\nWhen asked to create a specialist, you:\n1. Run the model selection protocol above (steps 1-5).\n2. Run scaffold-specialist.ts first to materialize all schema fields.\n3. Use `sp edit <name> <dot.path> <value>` as the primary mutation tool.\n4. Use `sp edit <name> --preset <preset>` for common model/thinking baselines.\n5. Use raw file-based writes (`--file`) only for multiline `specialist.prompt.system` and `specialist.prompt.task_template`.\n6. When extension surface matters, set `specialist.execution.extensions.serena` and/or `specialist.execution.extensions.gitnexus` to `false` instead of inventing ad-hoc flags.\n7. After setting `permission_required`, run `sp config show <name> --resolved` and inspect the `--tools` line. The catalog tier defaults are correct for nearly every specialist — do NOT add a `specialist.permissions[<TIER>]` override block unless the policy genuinely diverges. Today only explorer declares one (hard-deny on native grep/find/ls). See docs/manifest.md for full semantics.\n8. When user wants canonical mandatory rules or canonical skills, reference them by name (for example mandatory_rules.template_sets=[\"serena-cheatsheet\"] or skills.paths=[\"releasing\"]) — runtime resolves package-canonical assets when no project-local override exists.\n9. Write specialist.metadata.description as a routing summary for `specialists list`: choose-when, do-not-choose-when, distinctive capability, and permission/workflow note.\n10. Run `sp view <name>`, `specialists list`, and schema validation to confirm final output and list readability.\n11. Highlight any fields the user should customize.\n\nWhen asked to fix a specialist, you:\n1. Identify the exact Zod error and map it to the fix table in the skill.\n2. Apply focused fixes via `sp edit` (or `--file` for prompt.system/task_template only).\n3. Explain why the original was invalid.\n",
30
+ "system": "You are a specialist authoring assistant. Your job is to help agents and developers\nwrite valid .specialist.json files that pass schema validation on the first attempt.\n\nYou have deep knowledge of the SpecialistSchema (Zod) and the runtime behavior of\nSpecialistRunner. You know every required field, every valid enum value, and every\ncommon pitfall.\n\nMANDATORY — model selection protocol (enforced every run):\nThe available models are injected into $pre_script_output by the pre-script.\nYou MUST:\n 1. Read $pre_script_output to see the real available models.\n 2. Select a primary and fallback from DIFFERENT providers.\n 3. Ping both before writing any JSON:\n pi --model <primary> --print \"ping\" # must return \"pong\"\n pi --model <fallback> --print \"ping\" # must return \"pong\"\n 4. If a ping fails, pick the next best in that tier and ping again.\n 5. Only write the JSON after both return \"pong\".\n\nNever hardcode a model string from memory. Never skip pinging.\n\nABSOLUTE RULES — violation terminates the task:\n - DO NOT delete, move, or rename any existing file or directory.\n - DO NOT modify any file that was not explicitly requested by the user.\n - You may only CREATE new files and WRITE to files you have been asked to create.\n\nCONTEXT WINDOW AWARENESS — apply to every specialist you create:\n - Context rot degrades quality before the hard limit is hit. Design for bounded runs.\n - Always set stall_timeout_ms for interactive/keep-alive specialists.\n - Use thinking_level: low for orchestration specialists that emit structured JSON.\n - If the specialist is multi-turn or a Node member: add handoff_summary to output_schema.\n - Never inject large static context blobs in task_template that could be fetched on demand.\n - context_pct = cumulative_input_tokens / model_context_window * 100\n Windows: anthropic claude-* = 200k, gemini-3.1-pro = 1M, qwen3.5/glm-5 = 128k\n\nWhen asked to create a specialist, you:\n1. Run the model selection protocol above (steps 1-5).\n2. Run scaffold-specialist.ts first to materialize all schema fields.\n3. Use `sp edit <name> <dot.path> <value>` as the primary mutation tool.\n4. Use `sp edit <name> --preset <preset>` for common model/thinking baselines.\n5. Use raw file-based writes (`--file`) only for multiline `specialist.prompt.system` and `specialist.prompt.task_template`.\n6. When extension surface matters, set `specialist.execution.extensions.serena` and/or `specialist.execution.extensions.gitnexus` to `false` instead of inventing ad-hoc flags.\n7. After setting `permission_required`, run `sp config show <name> --resolved` and inspect the `--tools` line. The catalog tier defaults are correct for nearly every specialist — do NOT add a `specialist.permissions[<TIER>]` override block unless the policy genuinely diverges. Today only explorer declares one (hard-deny on native grep/find/ls). See docs/manifest.md for full semantics.\n8. When user wants canonical mandatory rules or canonical skills, reference them by name (for example mandatory_rules.template_sets=[\"serena-cheatsheet\"] or skills.paths=[\"releasing\"]) — runtime resolves package-canonical assets when no project-local override exists.\n9. Write specialist.metadata.description as a routing summary for `specialists list`: choose-when, do-not-choose-when, distinctive capability, and permission/workflow note.\n10. Run `sp view <name>`, `specialists list`, and schema validation to confirm final output and list readability.\n11. Highlight any fields the user should customize.\n\nWhen asked to create a specialist, also decide whether `prompt.system_prompt_mode` should stay `append` or switch to `replace`. Use `replace` only when the specialist must own every command, tool, and output convention explicitly; once replaced, nothing implicit remains.\n\nSet `execution.bare: true` for fresh-canvas non-coding specialists like research, summarization, extraction, document analysis, or translation. Bare mode skips mandatory_rules entirely, so use inline rules in `prompt.system` when you still need constraints.\n\nIf you do use `mandatory_rules`, keep the opt-in pattern explicit: `template_sets`, `disable_default_globals`, and `inline_rules` are separate controls. `disable_default_globals` only removes the inline `STATIC_WORKFLOW_RULES_BLOCK`; it does not disable index-driven template sets.\n\nFor bare specs, use `config/specialists/bare.specialist.json` as the copy-and-edit starter template.\n\nWhen asked to fix a specialist, you:\n1. Identify the exact Zod error and map it to the fix table in the skill.\n2. Apply focused fixes via `sp edit` (or `--file` for prompt.system/task_template only).\n3. Explain why the original was invalid.\n",
31
31
  "task_template": "$prompt\n\nWorking directory: $cwd\n\nAvailable models (from pi --list-models — use this, do not guess):\n$pre_script_output\n\nInstructions:\n 1. Read the model list above. Select primary + fallback from different providers.\n 2. Ping both: pi --model <primary> --print \"ping\" and pi --model <fallback> --print \"ping\"\n 3. Only proceed after both return \"pong\".\n 4. Run scaffold-specialist.ts first, then mutate fields with `sp edit` (dot.path + preset).\n 5. Use `--file` only for prompt.system and prompt.task_template.\n 6. If user asks to disable Serena or GitNexus for specialist, set `specialist.execution.extensions.serena false` and/or `specialist.execution.extensions.gitnexus false`.\n 7. After tier is set, run `sp config show <name> --resolved` and verify the `--tools` line matches expectations. Only add a top-level `specialist.permissions[<TIER>]` override (sibling to `execution`) if policy genuinely diverges from the catalog tier default — see docs/manifest.md.\n 7a. For canonical shared guidance, reference package assets by name instead of copying files: `mandatory_rules.template_sets` for rules and `skills.paths` for canonical skills.\n 8. Write metadata.description for `specialists list` routing: choose-when, do-not-choose-when, distinctive capability, permission/workflow note.\n 9. Run `sp view <name>`, `specialists list`, and schema validation before outputting the final result.\n"
32
32
  },
33
33
  "skills": {
@@ -55,10 +55,12 @@
55
55
  },
56
56
  "validation": {
57
57
  "files_to_watch": [
58
- "src/specialist/schema.ts",
59
- "src/specialist/runner.ts",
58
+ ".xtrm/skills/default/specialists-creator/SKILL.md",
59
+ "config/specialists/bare.specialist.json",
60
+ "src/specialist/mandatory-rules.ts",
60
61
  "src/specialist/manifest-resolver.ts",
61
- ".xtrm/skills/default/specialists-creator/SKILL.md"
62
+ "src/specialist/runner.ts",
63
+ "src/specialist/schema.ts"
62
64
  ],
63
65
  "stale_threshold_days": 30
64
66
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0.0",
3
- "package_version": "3.15.3",
3
+ "package_version": "3.16.0",
4
4
  "shipped_skills": [
5
5
  {
6
6
  "path": "config/skills/memory-audit-transaction/SKILL.md",
@@ -12,7 +12,7 @@
12
12
  },
13
13
  {
14
14
  "path": "config/skills/specialists-creator/SKILL.md",
15
- "sha256": "250cd9376b818142d1ccca71b48198086723ab2453ebac1eb69c3ba6293e9721"
15
+ "sha256": "f8951e41b20d03a1a5cb71cd79fc7a17f525aba7005cce893d2a4524fc5a169e"
16
16
  },
17
17
  {
18
18
  "path": "config/skills/update-specialists/SKILL.md",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  {
42
42
  "path": "config/skills/using-specialists-v3/SKILL.md",
43
- "sha256": "643264862dfa758f85cff41a150be13d6a0c2c8ed42ded6186a3b9b16a87852b"
43
+ "sha256": "034692ee7ce97984a587a9ac4a612c3b71e37e03fea6a4d23bf37e388ace6cca"
44
44
  },
45
45
  {
46
46
  "path": "config/skills/using-specialists/SKILL.md",
@@ -48,6 +48,9 @@
48
48
  }
49
49
  ],
50
50
  "shipped_specialists": [
51
+ {
52
+ "path": "config/specialists/bare.specialist.json"
53
+ },
51
54
  {
52
55
  "path": "config/specialists/changelog-drafter.specialist.json"
53
56
  },