@jaggerxtrm/specialists 3.5.1 → 3.6.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 +11 -1
- package/config/nodes/research-multi.node.json +11 -0
- package/config/nodes/research.node.json +27 -0
- package/config/skills/using-nodes/SKILL.md +333 -0
- package/config/skills/using-specialists/SKILL.md +376 -148
- package/config/specialists/debugger.specialist.json +1 -1
- package/config/specialists/memory-processor.specialist.json +1 -0
- package/config/specialists/node-coordinator.specialist.json +16 -267
- package/config/specialists/planner.specialist.json +1 -1
- package/config/specialists/researcher.specialist.json +3 -2
- package/config/specialists/reviewer.specialist.json +1 -1
- package/config/specialists/sync-docs.specialist.json +1 -1
- package/dist/index.js +10431 -6071
- package/package.json +2 -1
|
@@ -2,297 +2,47 @@
|
|
|
2
2
|
"specialist": {
|
|
3
3
|
"metadata": {
|
|
4
4
|
"name": "node-coordinator",
|
|
5
|
-
"version": "1.
|
|
6
|
-
"description": "Coordinator hub for research nodes.
|
|
5
|
+
"version": "1.3.0",
|
|
6
|
+
"description": "Coordinator hub for research nodes. LOW-permission orchestrator that drives node lifecycle through sp node CLI commands.",
|
|
7
7
|
"category": "orchestration",
|
|
8
8
|
"tags": [
|
|
9
9
|
"node",
|
|
10
10
|
"coordinator",
|
|
11
11
|
"orchestration",
|
|
12
|
-
"
|
|
12
|
+
"cli",
|
|
13
13
|
"keep-alive",
|
|
14
14
|
"worktree"
|
|
15
15
|
],
|
|
16
16
|
"created": "2026-04-03",
|
|
17
|
-
"updated": "2026-04-
|
|
17
|
+
"updated": "2026-04-10"
|
|
18
18
|
},
|
|
19
19
|
"execution": {
|
|
20
20
|
"mode": "tool",
|
|
21
|
-
"model": "
|
|
22
|
-
"fallback_model": "
|
|
21
|
+
"model": "openai-codex/gpt-5.4",
|
|
22
|
+
"fallback_model": "anthropic/claude-sonnet-4-6",
|
|
23
23
|
"timeout_ms": 0,
|
|
24
24
|
"stall_timeout_ms": 180000,
|
|
25
25
|
"interactive": true,
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"permission_required": "READ_ONLY",
|
|
26
|
+
"permission_required": "LOW",
|
|
27
|
+
"requires_worktree": false,
|
|
29
28
|
"thinking_level": "low",
|
|
30
29
|
"max_retries": 0
|
|
31
30
|
},
|
|
32
31
|
"prompt": {
|
|
33
|
-
"system": "You are
|
|
34
|
-
"task_template": "$prompt\n\nNode context:\n$bead_context\n\nMember updates (if any):\n$pre_script_output\n"
|
|
35
|
-
"output_schema": {
|
|
36
|
-
"type": "object",
|
|
37
|
-
"required": [
|
|
38
|
-
"summary",
|
|
39
|
-
"status",
|
|
40
|
-
"actions",
|
|
41
|
-
"memory_patch",
|
|
42
|
-
"coordination_state",
|
|
43
|
-
"routing_rationale",
|
|
44
|
-
"next_trigger"
|
|
45
|
-
],
|
|
46
|
-
"properties": {
|
|
47
|
-
"summary": {
|
|
48
|
-
"type": "string"
|
|
49
|
-
},
|
|
50
|
-
"status": {
|
|
51
|
-
"type": "string",
|
|
52
|
-
"enum": [
|
|
53
|
-
"success",
|
|
54
|
-
"partial",
|
|
55
|
-
"failed",
|
|
56
|
-
"waiting"
|
|
57
|
-
]
|
|
58
|
-
},
|
|
59
|
-
"issues_closed": {
|
|
60
|
-
"type": "array",
|
|
61
|
-
"items": {
|
|
62
|
-
"type": "string"
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
"issues_created": {
|
|
66
|
-
"type": "array",
|
|
67
|
-
"items": {
|
|
68
|
-
"type": "string"
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
"follow_ups": {
|
|
72
|
-
"type": "array",
|
|
73
|
-
"items": {
|
|
74
|
-
"type": "string"
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
"risks": {
|
|
78
|
-
"type": "array",
|
|
79
|
-
"items": {
|
|
80
|
-
"type": "string"
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"verification": {
|
|
84
|
-
"type": "array",
|
|
85
|
-
"items": {
|
|
86
|
-
"type": "string"
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"actions": {
|
|
90
|
-
"type": "array",
|
|
91
|
-
"items": {
|
|
92
|
-
"oneOf": [
|
|
93
|
-
{
|
|
94
|
-
"type": "object",
|
|
95
|
-
"required": [
|
|
96
|
-
"type",
|
|
97
|
-
"memberId",
|
|
98
|
-
"task"
|
|
99
|
-
],
|
|
100
|
-
"properties": {
|
|
101
|
-
"type": {
|
|
102
|
-
"type": "string",
|
|
103
|
-
"enum": [
|
|
104
|
-
"resume"
|
|
105
|
-
]
|
|
106
|
-
},
|
|
107
|
-
"memberId": {
|
|
108
|
-
"type": "string"
|
|
109
|
-
},
|
|
110
|
-
"task": {
|
|
111
|
-
"type": "string"
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
"type": "object",
|
|
117
|
-
"required": [
|
|
118
|
-
"type",
|
|
119
|
-
"memberId",
|
|
120
|
-
"message"
|
|
121
|
-
],
|
|
122
|
-
"properties": {
|
|
123
|
-
"type": {
|
|
124
|
-
"type": "string",
|
|
125
|
-
"enum": [
|
|
126
|
-
"steer"
|
|
127
|
-
]
|
|
128
|
-
},
|
|
129
|
-
"memberId": {
|
|
130
|
-
"type": "string"
|
|
131
|
-
},
|
|
132
|
-
"message": {
|
|
133
|
-
"type": "string"
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"type": "object",
|
|
139
|
-
"required": [
|
|
140
|
-
"type",
|
|
141
|
-
"memberId"
|
|
142
|
-
],
|
|
143
|
-
"properties": {
|
|
144
|
-
"type": {
|
|
145
|
-
"type": "string",
|
|
146
|
-
"enum": [
|
|
147
|
-
"stop"
|
|
148
|
-
]
|
|
149
|
-
},
|
|
150
|
-
"memberId": {
|
|
151
|
-
"type": "string"
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
]
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
"blocking_on": {
|
|
159
|
-
"type": "object",
|
|
160
|
-
"properties": {
|
|
161
|
-
"kind": {
|
|
162
|
-
"type": "string",
|
|
163
|
-
"enum": [
|
|
164
|
-
"human_input",
|
|
165
|
-
"member_output",
|
|
166
|
-
"external_dependency"
|
|
167
|
-
]
|
|
168
|
-
},
|
|
169
|
-
"target": {
|
|
170
|
-
"type": "string"
|
|
171
|
-
},
|
|
172
|
-
"details": {
|
|
173
|
-
"type": "string"
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
},
|
|
177
|
-
"memory_patch": {
|
|
178
|
-
"type": "array",
|
|
179
|
-
"items": {
|
|
180
|
-
"type": "object",
|
|
181
|
-
"required": [
|
|
182
|
-
"entry_type",
|
|
183
|
-
"summary"
|
|
184
|
-
],
|
|
185
|
-
"properties": {
|
|
186
|
-
"entry_type": {
|
|
187
|
-
"type": "string",
|
|
188
|
-
"enum": [
|
|
189
|
-
"fact",
|
|
190
|
-
"question",
|
|
191
|
-
"decision"
|
|
192
|
-
]
|
|
193
|
-
},
|
|
194
|
-
"entry_id": {
|
|
195
|
-
"type": "string"
|
|
196
|
-
},
|
|
197
|
-
"summary": {
|
|
198
|
-
"type": "string"
|
|
199
|
-
},
|
|
200
|
-
"source_member_id": {
|
|
201
|
-
"type": "string"
|
|
202
|
-
},
|
|
203
|
-
"confidence": {
|
|
204
|
-
"type": "number"
|
|
205
|
-
},
|
|
206
|
-
"provenance": {
|
|
207
|
-
"type": "object"
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
"coordination_state": {
|
|
213
|
-
"type": "object",
|
|
214
|
-
"properties": {
|
|
215
|
-
"current_goal": {
|
|
216
|
-
"type": "string"
|
|
217
|
-
},
|
|
218
|
-
"active_members": {
|
|
219
|
-
"type": "array",
|
|
220
|
-
"items": {
|
|
221
|
-
"type": "string"
|
|
222
|
-
}
|
|
223
|
-
},
|
|
224
|
-
"waiting_on_members": {
|
|
225
|
-
"type": "array",
|
|
226
|
-
"items": {
|
|
227
|
-
"type": "string"
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
|
-
"pending_decisions": {
|
|
231
|
-
"type": "array",
|
|
232
|
-
"items": {
|
|
233
|
-
"type": "string"
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
"blockers": {
|
|
237
|
-
"type": "array",
|
|
238
|
-
"items": {
|
|
239
|
-
"type": "string"
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
},
|
|
244
|
-
"routing_rationale": {
|
|
245
|
-
"type": "string"
|
|
246
|
-
},
|
|
247
|
-
"next_trigger": {
|
|
248
|
-
"type": "object",
|
|
249
|
-
"required": [
|
|
250
|
-
"event"
|
|
251
|
-
],
|
|
252
|
-
"properties": {
|
|
253
|
-
"event": {
|
|
254
|
-
"type": "string",
|
|
255
|
-
"enum": [
|
|
256
|
-
"on_member_update",
|
|
257
|
-
"on_human_input",
|
|
258
|
-
"on_external_update",
|
|
259
|
-
"on_timeout",
|
|
260
|
-
"manual_resume"
|
|
261
|
-
]
|
|
262
|
-
},
|
|
263
|
-
"target": {
|
|
264
|
-
"type": "string"
|
|
265
|
-
},
|
|
266
|
-
"details": {
|
|
267
|
-
"type": "string"
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
32
|
+
"system": "You are node-coordinator.\n\nLoad and follow the using-nodes skill for full operating details.\n\nRole:\n- Pure orchestrator. You coordinate — you do NOT do the work yourself.\n- You are the CEO of this node run. CEOs route work to specialists; they do not write code, read files, or produce research themselves.\n- Coordinate exclusively by running sp node plus sp ps/sp result commands via bash and reading structured JSON responses.\n\nHard constraints:\n- NO file reads. Do not call read, ls, find, grep, or any file inspection tool. You have no such tools.\n- NO git operations\n- NO bd operations\n- NO implementation of the task yourself — not even partially\n- Use ONLY the node orchestration command surface (sp node + sp ps + sp result).\n- Your only tool is bash. Your only bash commands are sp node, sp ps, and sp result.\n- Keep responses concise, operational, and state-aware\n\n## Node Coordinator Contract (SSoT: src/specialist/node-contract.ts)\n- Coordinator is CLI-native: reason in natural language, then call sp node commands.\n- Never emit contract JSON objects as final coordinator output.\n- Use only these orchestration commands:\n- `sp node spawn-member --node $SPECIALISTS_NODE_ID --member-key <key> --specialist <name> [--bead <id>] [--phase <id>] [--json]`\n- `sp node create-bead --node $SPECIALISTS_NODE_ID --title \"...\" [--type task] [--priority 2] [--depends-on <id>] [--json]`\n- `sp node wait-phase --node $SPECIALISTS_NODE_ID --phase <id> --members <k1,k2,...> [--json]`\n- `sp result $SPECIALISTS_NODE_ID:<member-key> --wait --json`\n- `sp ps --node $SPECIALISTS_NODE_ID --json`\n- Node refs accept any unique prefix for operator commands (e.g. `research`, `research-5eaf`, or full ID), but coordinator commands should use `$SPECIALISTS_NODE_ID`.\n- Every command should be called with `--json` when the result is used for decisions.\n- Wait-phase is a hard barrier: do not advance to next phase until it reports completion.\n- After each wait-phase barrier, read participating member results with `sp result $SPECIALISTS_NODE_ID:<member-key> --wait --json`, synthesize the evidence, then decide the next phase or remain waiting for operator closure.\n- On command errors, inspect JSON error payload, adjust plan, and retry with corrected inputs.\n- Nested nodes are forbidden (do not spawn node-coordinator as a member).\n- If you find yourself wanting to read a file or explore the codebase directly — STOP. That is a member's job. Spawn an explorer member and read its result via sp result $SPECIALISTS_NODE_ID:<member-key> --wait --json.\n\nExecution loop:\n1) Read node status and member registry snapshots with `sp ps --node $SPECIALISTS_NODE_ID --json`.\n2) Decide the next phase/member action from the current state and coordinator goal.\n3) Execute exactly the next command needed.\n4) If a phase barrier completes, read every participating member result with `sp result $SPECIALISTS_NODE_ID:<member-key> --wait --json`.\n5) Synthesize the member evidence before deciding whether to launch another phase, create a bead, or enter waiting.\n6) Repeat until the node is blocked or waiting with explicit operator closure guidance.\n\nFew-shot command sequences:\n- Explore phase then synthesize:\n sp ps --node $SPECIALISTS_NODE_ID --json\n sp node spawn-member --node $SPECIALISTS_NODE_ID --member-key explore-1 --specialist explorer --phase explore-1 --json\n sp node wait-phase --node $SPECIALISTS_NODE_ID --phase explore-1 --members explore-1 --json\n sp result $SPECIALISTS_NODE_ID:explore-1 --wait --json\n Synthesize the explore-1 evidence, then decide whether to launch an impl/design phase.\n- Create follow-up bead then continue:\n sp node create-bead --node $SPECIALISTS_NODE_ID --title 'Investigate retry loop failure path' --json\n sp ps --node $SPECIALISTS_NODE_ID --json\n- Final synthesis then wait for operator closure:\n sp ps --node $SPECIALISTS_NODE_ID --json\n sp result $SPECIALISTS_NODE_ID:review-1 --wait --json\n Synthesize the review evidence and remain in waiting; operator closes via sp node stop.\n\nWhen a command returns ok:false, adjust arguments and retry with a corrected command or mark blocked with the concrete error.",
|
|
33
|
+
"task_template": "$prompt\n\nNode context:\n$bead_context\n\nMember updates (if any):\n$pre_script_output\n"
|
|
273
34
|
},
|
|
274
35
|
"skills": {
|
|
275
36
|
"paths": [
|
|
276
|
-
".xtrm/skills/active/pi/using-
|
|
277
|
-
],
|
|
278
|
-
"scripts": [
|
|
279
|
-
{
|
|
280
|
-
"run": "specialists list",
|
|
281
|
-
"phase": "pre",
|
|
282
|
-
"inject_output": true
|
|
283
|
-
}
|
|
37
|
+
".xtrm/skills/active/pi/using-nodes"
|
|
284
38
|
]
|
|
285
39
|
},
|
|
286
40
|
"capabilities": {
|
|
287
41
|
"required_tools": [
|
|
288
|
-
"
|
|
289
|
-
"grep",
|
|
290
|
-
"find",
|
|
291
|
-
"ls"
|
|
42
|
+
"bash"
|
|
292
43
|
],
|
|
293
44
|
"external_commands": [
|
|
294
|
-
"
|
|
295
|
-
"git",
|
|
45
|
+
"sp",
|
|
296
46
|
"specialists"
|
|
297
47
|
]
|
|
298
48
|
},
|
|
@@ -301,10 +51,9 @@
|
|
|
301
51
|
},
|
|
302
52
|
"validation": {
|
|
303
53
|
"files_to_watch": [
|
|
304
|
-
"src/specialist/
|
|
305
|
-
"src/specialist/
|
|
306
|
-
"src/
|
|
307
|
-
"src/specialist/supervisor.ts"
|
|
54
|
+
"src/specialist/node-contract.ts",
|
|
55
|
+
"src/specialist/node-supervisor.ts",
|
|
56
|
+
"src/cli/node.ts"
|
|
308
57
|
],
|
|
309
58
|
"stale_threshold_days": 30
|
|
310
59
|
},
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"execution": {
|
|
19
19
|
"mode": "tool",
|
|
20
|
-
"model": "
|
|
20
|
+
"model": "dashscope/qwen3.5-plus",
|
|
21
21
|
"fallback_model": "anthropic/claude-sonnet-4-6",
|
|
22
22
|
"timeout_ms": 0,
|
|
23
23
|
"stall_timeout_ms": 120000,
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
"paths": [
|
|
36
36
|
".xtrm/skills/active/pi/find-docs/SKILL.md",
|
|
37
37
|
".xtrm/skills/active/pi/deepwiki/SKILL.md",
|
|
38
|
-
".xtrm/skills/active/pi/github-search/SKILL.md"
|
|
38
|
+
".xtrm/skills/active/pi/github-search/SKILL.md",
|
|
39
|
+
".xtrm/skills/default/last30days"
|
|
39
40
|
],
|
|
40
41
|
"scripts": []
|
|
41
42
|
},
|