@jaggerxtrm/specialists 3.4.4 → 3.5.1
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 +1 -0
- package/config/hooks/specialists-session-start.mjs +13 -28
- package/config/presets.json +26 -0
- package/config/skills/specialists-creator/SKILL.md +323 -145
- package/config/skills/specialists-creator/scripts/scaffold-specialist.ts +228 -0
- package/config/skills/using-specialists/SKILL.md +641 -183
- package/config/specialists/debugger.specialist.json +74 -0
- package/config/specialists/executor.specialist.json +117 -0
- package/config/specialists/explorer.specialist.json +82 -0
- package/config/specialists/memory-processor.specialist.json +64 -0
- package/config/specialists/node-coordinator.specialist.json +315 -0
- package/config/specialists/overthinker.specialist.json +65 -0
- package/config/specialists/parallel-review.specialist.json +65 -0
- package/config/specialists/planner.specialist.json +93 -0
- package/config/specialists/researcher.specialist.json +64 -0
- package/config/specialists/reviewer.specialist.json +60 -0
- package/config/specialists/specialists-creator.specialist.json +68 -0
- package/config/specialists/sync-docs.specialist.json +80 -0
- package/config/specialists/test-runner.specialist.json +67 -0
- package/config/specialists/xt-merge.specialist.json +60 -0
- package/dist/index.js +9242 -2331
- package/package.json +5 -3
- package/config/specialists/debugger.specialist.yaml +0 -121
- package/config/specialists/executor.specialist.yaml +0 -257
- package/config/specialists/explorer.specialist.yaml +0 -85
- package/config/specialists/memory-processor.specialist.yaml +0 -154
- package/config/specialists/overthinker.specialist.yaml +0 -76
- package/config/specialists/parallel-review.specialist.yaml +0 -75
- package/config/specialists/planner.specialist.yaml +0 -94
- package/config/specialists/reviewer.specialist.yaml +0 -142
- package/config/specialists/specialists-creator.specialist.yaml +0 -90
- package/config/specialists/sync-docs.specialist.yaml +0 -68
- package/config/specialists/test-runner.specialist.yaml +0 -65
- package/config/specialists/xt-merge.specialist.yaml +0 -159
package/README.md
CHANGED
|
@@ -81,6 +81,7 @@ specialists doctor
|
|
|
81
81
|
| xtrm / worktree integration | [docs/worktree.md](docs/worktree.md) |
|
|
82
82
|
| RPC mode notes | [docs/pi-rpc.md](docs/pi-rpc.md) |
|
|
83
83
|
| Pi subprocess isolation and extensions | [docs/pi-session.md](docs/pi-session.md) |
|
|
84
|
+
| NodeSupervisor architecture, node lifecycle, and `sp node` CLI | [docs/nodes.md](docs/nodes.md) |
|
|
84
85
|
|
|
85
86
|
## Project structure
|
|
86
87
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// specialists-session-start — Claude Code SessionStart hook
|
|
3
3
|
// Injects specialists context at the start of every session:
|
|
4
|
-
// • using-specialists skill (behavioral delegation guide)
|
|
5
4
|
// • Active background jobs (if any)
|
|
6
5
|
// • Available specialists list
|
|
7
6
|
// • Key CLI commands reminder
|
|
@@ -11,25 +10,13 @@
|
|
|
11
10
|
|
|
12
11
|
import { existsSync, readdirSync, readFileSync } from 'node:fs';
|
|
13
12
|
import { join } from 'node:path';
|
|
14
|
-
|
|
13
|
+
import { homedir } from 'node:os';
|
|
15
14
|
|
|
16
15
|
const cwd = process.env.CLAUDE_PROJECT_DIR ?? process.cwd();
|
|
16
|
+
const HOME = homedir();
|
|
17
17
|
const jobsDir = join(cwd, '.specialists', 'jobs');
|
|
18
18
|
const lines = [];
|
|
19
19
|
|
|
20
|
-
// ── 0. using-specialists skill ─────────────────────────────────────────────
|
|
21
|
-
// Inject the behavioral delegation guide so Claude knows when and how to
|
|
22
|
-
// use specialists without waiting for the user to ask.
|
|
23
|
-
const skillPath = join(cwd, '.specialists', 'default', 'skills', 'using-specialists', 'SKILL.md');
|
|
24
|
-
if (existsSync(skillPath)) {
|
|
25
|
-
const raw = readFileSync(skillPath, 'utf-8');
|
|
26
|
-
// Strip YAML frontmatter (--- ... ---) if present
|
|
27
|
-
const content = raw.startsWith('---')
|
|
28
|
-
? raw.replace(/^---[\s\S]*?---\n?/, '').trimStart()
|
|
29
|
-
: raw;
|
|
30
|
-
lines.push(content);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
20
|
// ── 1. Active background jobs ──────────────────────────────────────────────
|
|
34
21
|
if (existsSync(jobsDir)) {
|
|
35
22
|
let entries = [];
|
|
@@ -72,20 +59,21 @@ function readSpecialistNames(dir) {
|
|
|
72
59
|
}
|
|
73
60
|
}
|
|
74
61
|
|
|
75
|
-
const
|
|
76
|
-
const userNames = readSpecialistNames(join(
|
|
62
|
+
const projectNames = readSpecialistNames(join(cwd, 'specialists'));
|
|
63
|
+
const userNames = readSpecialistNames(join(HOME, '.agents', 'specialists'));
|
|
77
64
|
|
|
78
|
-
//
|
|
79
|
-
const allNames = [...new Set([...
|
|
65
|
+
// Merge, deduplicate, sort
|
|
66
|
+
const allNames = [...new Set([...projectNames, ...userNames])].sort();
|
|
80
67
|
|
|
81
68
|
if (allNames.length > 0) {
|
|
82
69
|
lines.push('## Specialists — Available');
|
|
83
70
|
lines.push('');
|
|
84
|
-
if (
|
|
85
|
-
lines.push(`
|
|
71
|
+
if (projectNames.length > 0) {
|
|
72
|
+
lines.push(`project (${projectNames.length}): ${projectNames.join(', ')}`);
|
|
86
73
|
}
|
|
87
74
|
if (userNames.length > 0) {
|
|
88
|
-
|
|
75
|
+
// Only show user-scope names not already in project
|
|
76
|
+
const extraUser = userNames.filter(n => !projectNames.includes(n));
|
|
89
77
|
if (extraUser.length > 0) {
|
|
90
78
|
lines.push(`user (${extraUser.length}): ${extraUser.join(', ')}`);
|
|
91
79
|
}
|
|
@@ -99,8 +87,7 @@ lines.push('');
|
|
|
99
87
|
lines.push('```');
|
|
100
88
|
lines.push('specialists list # discover available specialists');
|
|
101
89
|
lines.push('specialists run <name> --prompt "..." # run foreground (streams output)');
|
|
102
|
-
lines.push('
|
|
103
|
-
lines.push('specialists run <name> --prompt "..." # foreground stream');
|
|
90
|
+
lines.push('specialists run <name> --prompt "..." # run; job ID prints on stderr');
|
|
104
91
|
lines.push('specialists feed <job-id> --follow # tail live events');
|
|
105
92
|
lines.push('specialists result <job-id> # read final output');
|
|
106
93
|
lines.push('specialists status # system health');
|
|
@@ -113,8 +100,6 @@ lines.push('MCP tools: use_specialist (foreground only)');
|
|
|
113
100
|
if (lines.length === 0) process.exit(0);
|
|
114
101
|
|
|
115
102
|
process.stdout.write(JSON.stringify({
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
additionalSystemPrompt: lines.join('\n'),
|
|
119
|
-
},
|
|
103
|
+
type: 'inject',
|
|
104
|
+
content: lines.join('\n'),
|
|
120
105
|
}) + '\n');
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cheap": {
|
|
3
|
+
"description": "Low-cost, fast responses — best for exploration and simple tasks",
|
|
4
|
+
"fields": {
|
|
5
|
+
"specialist.execution.model": "dashscope/qwen3.5-plus",
|
|
6
|
+
"specialist.execution.thinking_level": "off",
|
|
7
|
+
"specialist.execution.stall_timeout_ms": 60000
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"medium": {
|
|
11
|
+
"description": "Balanced cost/quality — good default for most tasks",
|
|
12
|
+
"fields": {
|
|
13
|
+
"specialist.execution.model": "anthropic/claude-sonnet-4-6",
|
|
14
|
+
"specialist.execution.thinking_level": "low",
|
|
15
|
+
"specialist.execution.stall_timeout_ms": 120000
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"power": {
|
|
19
|
+
"description": "Maximum capability — complex implementation and reasoning",
|
|
20
|
+
"fields": {
|
|
21
|
+
"specialist.execution.model": "openai-codex/gpt-5.4",
|
|
22
|
+
"specialist.execution.thinking_level": "high",
|
|
23
|
+
"specialist.execution.stall_timeout_ms": 300000
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|