claude-raid 0.2.6 → 0.2.8

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 (39) hide show
  1. package/README.md +108 -66
  2. package/bin/cli.js +47 -11
  3. package/package.json +1 -1
  4. package/src/descriptions.js +11 -7
  5. package/src/init.js +37 -6
  6. package/src/merge-settings.js +43 -1
  7. package/src/remove.js +2 -2
  8. package/src/setup.js +33 -1
  9. package/src/ui.js +24 -19
  10. package/src/update.js +26 -3
  11. package/template/.claude/agents/archer.md +18 -4
  12. package/template/.claude/agents/rogue.md +18 -4
  13. package/template/.claude/agents/warrior.md +18 -4
  14. package/template/.claude/agents/wizard.md +32 -5
  15. package/template/.claude/dungeon-master-rules.md +132 -37
  16. package/template/.claude/hooks/raid-lib.sh +45 -4
  17. package/template/.claude/hooks/raid-pre-compact.sh +8 -4
  18. package/template/.claude/hooks/raid-session-end.sh +2 -2
  19. package/template/.claude/hooks/raid-session-start.sh +2 -0
  20. package/template/.claude/hooks/rtk-bridge.sh +46 -0
  21. package/template/.claude/hooks/validate-dungeon.sh +11 -3
  22. package/template/.claude/hooks/validate-file-naming.sh +6 -1
  23. package/template/.claude/hooks/validate-no-placeholders.sh +13 -2
  24. package/template/.claude/hooks/validate-write-gate.sh +7 -2
  25. package/template/.claude/party-rules.md +93 -64
  26. package/template/.claude/skills/raid-browser/SKILL.md +4 -6
  27. package/template/.claude/skills/raid-browser-chrome/SKILL.md +2 -2
  28. package/template/.claude/skills/raid-canonical-design/SKILL.md +306 -166
  29. package/template/.claude/skills/raid-canonical-implementation/SKILL.md +161 -133
  30. package/template/.claude/skills/raid-canonical-implementation-plan/SKILL.md +200 -142
  31. package/template/.claude/skills/raid-canonical-prd/SKILL.md +101 -78
  32. package/template/.claude/skills/raid-canonical-protocol/SKILL.md +30 -124
  33. package/template/.claude/skills/raid-canonical-review/SKILL.md +296 -149
  34. package/template/.claude/skills/raid-debugging/SKILL.md +1 -7
  35. package/template/.claude/skills/raid-init/SKILL.md +19 -29
  36. package/template/.claude/skills/raid-tdd/SKILL.md +5 -5
  37. package/template/.claude/skills/raid-teambuff/SKILL.md +281 -0
  38. package/template/.claude/skills/raid-verification/SKILL.md +0 -6
  39. package/template/.claude/skills/raid-wrap-up/SKILL.md +36 -32
@@ -11,6 +11,19 @@ const RAID_PERMISSIONS = ['Read', 'Glob', 'Grep', 'Bash', 'Write', 'Edit'];
11
11
 
12
12
  const RAID_HOOK_MARKER = '#claude-raid';
13
13
 
14
+ const RTK_HOOK_MARKER = '#claude-raid-rtk';
15
+
16
+ const RTK_HOOKS = {
17
+ PreToolUse: [
18
+ {
19
+ matcher: 'Bash',
20
+ hooks: [
21
+ { type: 'command', command: `bash .claude/hooks/rtk-bridge.sh ${RTK_HOOK_MARKER}` },
22
+ ],
23
+ },
24
+ ],
25
+ };
26
+
14
27
  const RAID_HOOKS = {
15
28
  PostToolUse: [
16
29
  {
@@ -78,6 +91,10 @@ function isRaidHookEntry(entry) {
78
91
  return entry.hooks && entry.hooks.some(h => h.command && h.command.includes(RAID_HOOK_MARKER));
79
92
  }
80
93
 
94
+ function isRtkHookEntry(entry) {
95
+ return entry.hooks && entry.hooks.some(h => h.command && h.command.includes(RTK_HOOK_MARKER));
96
+ }
97
+
81
98
  function mergeSettings(cwd) {
82
99
  const settingsPath = path.join(cwd, '.claude', 'settings.json');
83
100
  let existing = {};
@@ -112,6 +129,31 @@ function mergeSettings(cwd) {
112
129
  existing.hooks[event].push(...raidEntries);
113
130
  }
114
131
 
132
+ // RTK hooks — read raid.json to check if enabled
133
+ const raidJsonPath = path.join(cwd, '.claude', 'raid.json');
134
+ let rtkEnabled = false;
135
+ try {
136
+ const raidConfig = JSON.parse(fs.readFileSync(raidJsonPath, 'utf8'));
137
+ rtkEnabled = raidConfig.rtk && raidConfig.rtk.enabled === true;
138
+ } catch {
139
+ // No raid.json or invalid — RTK stays disabled
140
+ }
141
+
142
+ // Strip existing RTK hooks first (clean slate for toggle behavior)
143
+ for (const event of Object.keys(existing.hooks)) {
144
+ existing.hooks[event] = existing.hooks[event].filter(entry => !isRtkHookEntry(entry));
145
+ }
146
+
147
+ // Append RTK hooks if enabled (after core hooks, ensuring last position)
148
+ if (rtkEnabled) {
149
+ for (const [event, rtkEntries] of Object.entries(RTK_HOOKS)) {
150
+ if (!Array.isArray(existing.hooks[event])) {
151
+ existing.hooks[event] = [];
152
+ }
153
+ existing.hooks[event].push(...rtkEntries);
154
+ }
155
+ }
156
+
115
157
  fs.writeFileSync(settingsPath, JSON.stringify(existing, null, 2) + '\n');
116
158
  }
117
159
 
@@ -142,7 +184,7 @@ function removeRaidSettings(cwd) {
142
184
 
143
185
  if (settings.hooks) {
144
186
  for (const event of Object.keys(settings.hooks)) {
145
- settings.hooks[event] = settings.hooks[event].filter(entry => !isRaidHookEntry(entry));
187
+ settings.hooks[event] = settings.hooks[event].filter(entry => !isRaidHookEntry(entry) && !isRtkHookEntry(entry));
146
188
  if (settings.hooks[event].length === 0) delete settings.hooks[event];
147
189
  }
148
190
  if (Object.keys(settings.hooks).length === 0) delete settings.hooks;
package/src/remove.js CHANGED
@@ -10,7 +10,7 @@ const RAID_SKILLS = [
10
10
  'raid-init', 'raid-canonical-protocol', 'raid-canonical-prd', 'raid-canonical-design',
11
11
  'raid-canonical-implementation-plan', 'raid-canonical-implementation', 'raid-canonical-review',
12
12
  'raid-wrap-up', 'raid-tdd', 'raid-debugging', 'raid-verification',
13
- 'raid-browser', 'raid-browser-chrome',
13
+ 'raid-browser', 'raid-browser-chrome', 'raid-teambuff',
14
14
  // Legacy (v0.1.x)
15
15
  'raid-protocol', 'raid-design', 'raid-implementation-plan', 'raid-implementation',
16
16
  'raid-review', 'raid-prd', 'raid-finishing', 'raid-browser-playwright', 'raid-git-worktrees',
@@ -41,7 +41,7 @@ function performRemove(cwd) {
41
41
  const hooksDir = path.join(claudeDir, 'hooks');
42
42
  if (fs.existsSync(hooksDir)) {
43
43
  const hooks = fs.readdirSync(hooksDir).filter(f =>
44
- (f.startsWith('validate-') || f.startsWith('raid-')) && f.endsWith('.sh')
44
+ (f.startsWith('validate-') || f.startsWith('raid-') || f === 'rtk-bridge.sh') && f.endsWith('.sh')
45
45
  );
46
46
  for (const hook of hooks) {
47
47
  rmSafe(path.join(hooksDir, hook));
package/src/setup.js CHANGED
@@ -217,6 +217,28 @@ function checkJq(exec) {
217
217
  };
218
218
  }
219
219
 
220
+ function checkRtk(exec) {
221
+ const found = exec('command -v rtk');
222
+ if (!found) {
223
+ return {
224
+ id: 'rtk',
225
+ ok: false,
226
+ label: 'RTK',
227
+ detail: 'not installed (optional — reduces context usage by 60-90%)',
228
+ hint: 'Install: curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/refs/heads/master/install.sh | sh',
229
+ };
230
+ }
231
+ const raw = exec('rtk --version');
232
+ const ver = parseVersion(raw);
233
+ const tag = ver ? `v${ver.major}.${ver.minor}.${ver.patch}` : (raw || 'unknown').trim();
234
+ return {
235
+ id: 'rtk',
236
+ ok: true,
237
+ label: 'RTK',
238
+ detail: `${tag} — token compression available`,
239
+ };
240
+ }
241
+
220
242
  function checkPlatform(platform) {
221
243
  if (platform === 'win32') {
222
244
  return {
@@ -321,6 +343,7 @@ function runChecks(opts = {}) {
321
343
  checkTeammateMode(homedir),
322
344
  checkSplitPane(exec),
323
345
  checkPlaywright(exec, cwd),
346
+ checkRtk(exec),
324
347
  ];
325
348
 
326
349
  return {
@@ -390,13 +413,22 @@ async function runSetup(opts = {}) {
390
413
 
391
414
  stdout.write('\n ' + formatCheckLine(splitPane).join('\n ') + '\n');
392
415
 
416
+ // RTK prompt — only if RTK is on PATH and not already configured via --rtk
417
+ const rtkCheck = checks.find(c => c.id === 'rtk');
418
+ if (rtkCheck && rtkCheck.ok && !opts.rtkEnabled) {
419
+ const rtkConfirm = await ask('\n RTK detected — enable token compression? [Y/n] ', stdin, stdout);
420
+ if (rtkConfirm.toLowerCase() !== 'n') {
421
+ actions.push('rtk-enabled');
422
+ }
423
+ }
424
+
393
425
  // Recalculate allOk (required checks only: node + claude)
394
426
 
395
427
  allOk = checks.filter(c => REQUIRED_IDS.includes(c.id)).every(c => c.ok);
396
428
 
397
429
  if (checks.every(c => c.ok)) {
398
430
  stdout.write('\n ' + colors.green('The party is assembled.') + ' Your quest awaits.\n');
399
- stdout.write('\n claude --agent wizard\n');
431
+ stdout.write('\n ' + colors.bold('claude-raid start') + '\n');
400
432
  }
401
433
 
402
434
  return { checks, allOk, actions };
package/src/ui.js CHANGED
@@ -119,19 +119,18 @@ function header(text) {
119
119
 
120
120
  function referenceCard() {
121
121
  const howItWorks = box('How It Works', [
122
- ' You describe a task. The Wizard assesses complexity and',
123
- ' recommends a mode:',
122
+ ' You describe a task. The Wizard spawns the full team:',
123
+ ' Warrior, Archer, and Rogue — each attacking from a',
124
+ ' different angle.',
124
125
  '',
125
- ' ' + colors.bold('Full Raid') + ' 3 agents attack from competing angles',
126
- ' ' + colors.bold('Skirmish') + ' 2 agents, lighter process',
127
- ' ' + colors.bold('Scout') + ' 1 agent + Wizard review',
126
+ ' The Canonical Quest flows through 6 phases:',
128
127
  '',
129
- ' Every task flows through 4 phases:',
130
- '',
131
- ' 1. ' + colors.bold('Design') + ' Agents explore and challenge the approach',
132
- ' 2. ' + colors.bold('Plan') + ' Agents decompose into testable tasks',
133
- ' 3. ' + colors.bold('Implement') + ' One builds (TDD), others attack',
134
- ' 4. ' + colors.bold('Review') + ' Independent reviews, fight over findings',
128
+ ' 1. ' + colors.bold('PRD') + ' Product requirements ' + colors.dim('(optional)'),
129
+ ' 2. ' + colors.bold('Design') + ' Agents explore and challenge the approach',
130
+ ' 3. ' + colors.bold('Plan') + ' Agents decompose into testable tasks',
131
+ ' 4. ' + colors.bold('Implement') + ' One builds (TDD), others attack',
132
+ ' 5. ' + colors.bold('Review') + ' Independent reviews, fight over findings',
133
+ ' 6. ' + colors.bold('Wrap Up') + ' Storyboard, PR, vault archive',
135
134
  '',
136
135
  ' Hooks enforce discipline automatically:',
137
136
  ' ' + colors.dim('\u2022') + ' No implementation without a design doc',
@@ -144,13 +143,15 @@ function referenceCard() {
144
143
  '',
145
144
  ' Config: ' + colors.bold('.claude/raid.json') + ' ' + colors.dim('project settings'),
146
145
  ' Rules: ' + colors.bold('.claude/party-rules.md') + ' ' + colors.dim('editable party rules'),
146
+ ' RTK: ' + colors.bold('.claude/raid.json \u2192 rtk') + ' ' + colors.dim('opt-in token compression'),
147
147
  ]);
148
148
 
149
149
  const nextStep = box('Next Step', [
150
- ' ' + colors.bold('tmux new-session -s raid'),
151
- ' ' + colors.bold('claude --agent wizard'),
150
+ ' ' + colors.bold('claude-raid start'),
151
+ '',
152
+ ' ' + colors.dim('That\'s it. One command opens a tmux session with mouse'),
153
+ ' ' + colors.dim('support and launches the Wizard inside it.'),
152
154
  '',
153
- ' ' + colors.dim('Start tmux first, then the Wizard inside it.'),
154
155
  ' ' + colors.dim('Each agent gets its own tmux pane automatically.'),
155
156
  ' ' + colors.dim('Click any pane to talk to that agent directly.'),
156
157
  '',
@@ -160,15 +161,19 @@ function referenceCard() {
160
161
  ' ' + colors.bold('Controls') + ' ' + colors.dim('(tmux)'),
161
162
  ' Click pane Switch to an agent',
162
163
  ' Ctrl+B + arrow Navigate between panes',
163
- '',
164
- ' ' + colors.bold('Controls') + ' ' + colors.dim('(in-process, no tmux)'),
165
- ' Shift+Down Cycle through teammates',
166
- ' Ctrl+T Toggle the shared task list',
164
+ ' Scroll Mouse wheel (mouse mode enabled)',
167
165
  '',
168
166
  ' Review this anytime: ' + colors.bold('claude-raid heal'),
169
167
  ]);
170
168
 
171
- return howItWorks + '\n' + nextStep;
169
+ const beta = box('Beta', [
170
+ ' ' + colors.amber('This project is in active development.'),
171
+ ' Multi-agent sessions are ' + colors.bold('token-usage intensive') + ' \u2014',
172
+ ' a full quest consumes significantly more tokens than a',
173
+ ' single-agent workflow. Monitor your usage and start small.',
174
+ ]);
175
+
176
+ return howItWorks + '\n' + nextStep + '\n' + beta;
172
177
  }
173
178
 
174
179
  module.exports = { colors, banner, box, header, stripAnsi, referenceCard };
package/src/update.js CHANGED
@@ -31,7 +31,7 @@ function copyForceRecursive(src, dest) {
31
31
  }
32
32
  }
33
33
 
34
- function performUpdate(cwd) {
34
+ function performUpdate(cwd, opts = {}) {
35
35
  const claudeDir = path.join(cwd, '.claude');
36
36
  const skippedAgents = [];
37
37
 
@@ -144,6 +144,20 @@ function performUpdate(cwd) {
144
144
 
145
145
  mergeSettings(cwd);
146
146
 
147
+ // RTK hint — if RTK is detected but not configured in raid.json
148
+ let rtkHint = false;
149
+ if (opts.rtkDetected) {
150
+ const raidConfigPath = path.join(claudeDir, 'raid.json');
151
+ if (fs.existsSync(raidConfigPath)) {
152
+ try {
153
+ const raidConfig = JSON.parse(fs.readFileSync(raidConfigPath, 'utf8'));
154
+ if (!raidConfig.rtk) {
155
+ rtkHint = true;
156
+ }
157
+ } catch {}
158
+ }
159
+ }
160
+
147
161
  let message = 'The Raid has been updated to the latest version.';
148
162
  if (migratedFields.length > 0) {
149
163
  message += `\nMigrated raid.json: added ${migratedFields.join(', ')}`;
@@ -158,15 +172,19 @@ function performUpdate(cwd) {
158
172
  message += '\nUse `claude-raid dismantle` then `claude-raid summon` to reset.';
159
173
  }
160
174
 
161
- return { success: true, message, skippedAgents, migratedFields };
175
+ return { success: true, message, skippedAgents, migratedFields, rtkHint };
162
176
  }
163
177
 
164
178
  function run() {
165
179
  const cwd = process.cwd();
180
+ const { execSync } = require('child_process');
181
+ let rtkDetected = false;
182
+ try { execSync('command -v rtk', { stdio: 'pipe' }); rtkDetected = true; } catch {}
183
+
166
184
  console.log('\n' + banner());
167
185
  console.log(header('Reforging the Arsenal...') + '\n');
168
186
 
169
- const result = performUpdate(cwd);
187
+ const result = performUpdate(cwd, { rtkDetected });
170
188
 
171
189
  if (!result.success) {
172
190
  console.log(' ' + colors.red('✖') + ' No party found. Run ' + colors.bold('claude-raid summon') + ' first.');
@@ -177,6 +195,11 @@ function run() {
177
195
  if (result.skippedAgents.length > 0) {
178
196
  console.log(' ' + colors.dim('Preserved customized warriors: ' + result.skippedAgents.join(', ')));
179
197
  }
198
+
199
+ if (result.rtkHint) {
200
+ console.log(' ' + colors.dim('Tip: RTK detected — add "rtk": { "enabled": true } to raid.json'));
201
+ console.log(' ' + colors.dim('or re-run summon with --rtk to enable token compression.'));
202
+ }
180
203
  }
181
204
 
182
205
  module.exports = { performUpdate, run };
@@ -5,17 +5,31 @@ description: >
5
5
  catches naming drift, contract violations, and implicit dependencies. Independently
6
6
  verifies every claim. Zero trust in reports — reads code, traces chains. Zero ego —
7
7
  concedes with evidence, moves on. Collaborates through rigor, not agreement.
8
+
9
+
10
+ <example>
11
+ Context: The Wizard is in Phase 2 (Design) and needs ripple effect analysis on a proposed change.
12
+ user: "TURN_DISPATCH: Phase 2, Round 1. Quest: migrate from REST to GraphQL. Your angle: trace how this change ripples through existing consumers, shared types, error contracts, and middleware."
13
+ assistant: "I'll map every consumer of the REST endpoints, trace the type contracts downstream, identify naming conventions that will drift, and pin each ripple with its exact consequence."
14
+ <commentary>The Wizard dispatches Archer when a design or change needs systemic coherence analysis — tracing how changes propagate through the codebase and catching inconsistencies.</commentary>
15
+ </example>
16
+
17
+
18
+ <example>
19
+ Context: The Wizard is in Phase 5 (Review) and needs pattern consistency validation.
20
+ user: "TURN_DISPATCH: Phase 5, Round 1. Your angle: review the implementation for naming drift, contract violations, and inconsistencies with existing codebase patterns."
21
+ assistant: "I'll compare the new code against established conventions, trace every interface for contract compliance, and flag where naming or structure diverges from the rest of the codebase."
22
+ <commentary>During review, Archer validates that the implementation maintains systemic coherence — no naming drift, no broken contracts, no implicit dependencies introduced.</commentary>
23
+ </example>
8
24
  model: claude-opus-4-6
9
25
  tools: SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
10
26
  effort: medium
11
27
  color: green
12
28
  memory: project
13
29
  skills:
14
- - raid-canonical-prd
15
30
  - raid-tdd
16
31
  - raid-verification
17
32
  - raid-debugging
18
- - raid-wrap-up
19
33
  ---
20
34
 
21
35
  # The Archer — Raid Teammate
@@ -35,8 +49,8 @@ Does this fit? You trace how changes ripple through the system. You catch naming
35
49
 
36
50
  ## Learning
37
51
 
38
- - When @Warrior finds a structural issue you missed, update your mental model.
39
- - When @Rogue constructs a failure scenario through a path you traced, integrate the attack vector.
52
+ - When you read @Warrior's Dungeon findings and discover a structural issue you missed, update your mental model.
53
+ - When you read @Rogue's Dungeon findings and discover a failure scenario through a path you traced, integrate the attack vector.
40
54
 
41
55
  ## Unique Standards
42
56
 
@@ -5,17 +5,31 @@ description: >
5
5
  failing system, a malicious input, a race condition. Independently verifies every
6
6
  claim. Zero trust in reports — reads code, constructs attacks. Zero ego — concedes
7
7
  with evidence, moves on. Collaborates through rigor, not agreement.
8
+
9
+
10
+ <example>
11
+ Context: The Wizard is in Phase 2 (Design) and needs assumptions challenged.
12
+ user: "TURN_DISPATCH: Phase 2, Round 1. Quest: build a payment processing pipeline. Your angle: destroy the assumptions — what happens with duplicate webhooks, partial failures mid-transaction, and race conditions between concurrent checkouts?"
13
+ assistant: "I'll list every assumption in the proposal — idempotency, ordering guarantees, state consistency — then construct concrete attack sequences that exploit each one."
14
+ <commentary>The Wizard dispatches Rogue when a design relies on assumptions that need adversarial testing — timing, ordering, availability, input trust, state consistency.</commentary>
15
+ </example>
16
+
17
+
18
+ <example>
19
+ Context: The Wizard is in Phase 4 (Implementation) and needs adversarial test scenarios.
20
+ user: "TURN_DISPATCH: Phase 4, Round 2. Task: cross-test the input validation module. Your angle: construct malicious inputs, boundary violations, and encoding tricks that bypass the validation."
21
+ assistant: "I'll build attack narratives for each validation rule — unicode normalization bypasses, nested injection, truncation exploits — and verify whether the implementation survives each one."
22
+ <commentary>During implementation, Rogue constructs the adversarial scenarios that prove code is robust — not just testing, but actively trying to break it with creative attack paths.</commentary>
23
+ </example>
8
24
  model: claude-opus-4-6
9
25
  tools: SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
10
26
  effort: medium
11
27
  color: orange
12
28
  memory: project
13
29
  skills:
14
- - raid-canonical-prd
15
30
  - raid-tdd
16
31
  - raid-verification
17
32
  - raid-debugging
18
- - raid-wrap-up
19
33
  ---
20
34
 
21
35
  # The Rogue — Raid Teammate
@@ -35,8 +49,8 @@ What did everyone assume that isn't guaranteed? You think like a failing system,
35
49
 
36
50
  ## Learning
37
51
 
38
- - When @Warrior finds a structural weakness, weaponize it — what's the attack path?
39
- - When @Archer finds an inconsistency, exploit it — how does drift become vulnerability?
52
+ - When you read @Warrior's Dungeon findings and discover a structural weakness, weaponize it — what's the attack path?
53
+ - When you read @Archer's Dungeon findings and discover an inconsistency, exploit it — how does drift become vulnerability?
40
54
 
41
55
  ## Unique Standards
42
56
 
@@ -5,17 +5,31 @@ description: >
5
5
  edge cases, and failure modes. Independently verifies every claim. Zero trust in
6
6
  reports — reads code, runs tests. Zero ego — concedes with evidence, moves on.
7
7
  Collaborates through rigor, not agreement.
8
+
9
+
10
+ <example>
11
+ Context: The Wizard is in Phase 2 (Design) and needs the architecture stress-tested.
12
+ user: "TURN_DISPATCH: Phase 2, Round 1. Quest: redesign the caching layer. Your angle: stress-test the proposed cache invalidation strategy under concurrent writes, thundering herd, and partial failures."
13
+ assistant: "I'll trace the execution paths for concurrent cache invalidation, identify failure modes under load, and pin findings with exact scenarios that break the proposal."
14
+ <commentary>The Wizard dispatches Warrior when a design or implementation needs structural stress testing — load, edge cases, failure modes, blast radius analysis.</commentary>
15
+ </example>
16
+
17
+
18
+ <example>
19
+ Context: The Wizard is in Phase 4 (Implementation) and needs edge case verification.
20
+ user: "TURN_DISPATCH: Phase 4, Round 2. Task: validate the retry logic implementation. Your angle: verify error paths, timeout behavior, and what happens when the circuit breaker trips mid-retry."
21
+ assistant: "I'll run the tests under stress conditions, construct scenarios that trigger every error path, and verify the circuit breaker interaction doesn't leave state inconsistent."
22
+ <commentary>During implementation, Warrior verifies that code holds under pressure — not just happy paths, but every failure mode the implementation should handle.</commentary>
23
+ </example>
8
24
  model: claude-opus-4-6
9
25
  tools: SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
10
26
  effort: medium
11
27
  color: red
12
28
  memory: project
13
29
  skills:
14
- - raid-canonical-prd
15
30
  - raid-tdd
16
31
  - raid-verification
17
32
  - raid-debugging
18
- - raid-wrap-up
19
33
  ---
20
34
 
21
35
  # The Warrior — Raid Teammate
@@ -34,8 +48,8 @@ Does this hold under pressure? You test boundaries, load, edge cases, and failur
34
48
 
35
49
  ## Learning
36
50
 
37
- - When @Archer finds a pattern you missed, integrate it into your mental model.
38
- - When @Rogue constructs a failure scenario you didn't consider, learn the attack vector.
51
+ - When you read @Archer's Dungeon findings and discover a pattern you missed, integrate it into your mental model.
52
+ - When you read @Rogue's Dungeon findings and discover a failure scenario you didn't consider, learn the attack vector.
39
53
 
40
54
  ## Unique Standards
41
55
 
@@ -1,11 +1,38 @@
1
1
  ---
2
2
  name: wizard
3
3
  description: >
4
- The Raid dungeon master. Thinks 5 times before speaking. Visionary, future-proof,
5
- aligned with the user. Opens every phase, observes agents working and challenging
6
- freely, redirects only when the protocol breaks, and closes phases with binding
7
- rulings. The bridge between agents, Dungeon, and user. First and last word is always yours.
8
- Use as the main agent for any feature, architecture, debugging, or refactor workflow.
4
+ The Raid Dungeon Master. Thinks 5 times before speaking. Visionary, future-proof,
5
+ aligned with the user. Orchestrates sequential agent turns through per-phase
6
+ dice-rolled turn order (strategic assignment in implementation), actively mediates
7
+ every round with ultrathink synthesis, recaps past phases at each phase opening,
8
+ and closes phases with binding rulings. The Wizard never writes production code.
9
+ The Wizard is the only agent that interacts directly with the human. The bridge
10
+ between agents, Dungeon, and user. First and last word is always yours. Use as
11
+ the main agent for any feature, architecture, debugging, or refactor workflow.
12
+
13
+
14
+ <example>
15
+ Context: The user wants to build a new feature using the full Raid party.
16
+ user: "let's raid this — I need a new authentication system with OAuth and MFA"
17
+ assistant: "I'll spawn the Wizard to orchestrate a Canonical Quest for the auth system. The full party will design, plan, and implement it through adversarial phases."
18
+ <commentary>Any request to "raid", "start a quest", "summon the party", or build a feature with multi-agent adversarial workflow should spawn the Wizard.</commentary>
19
+ </example>
20
+
21
+
22
+ <example>
23
+ Context: The user needs architecture or design work with rigorous cross-testing.
24
+ user: "I want to redesign our data pipeline — can you get the team on this?"
25
+ assistant: "I'll start a Raid quest with the Wizard leading. The party will explore the design space adversarially, stress-test proposals, and produce a battle-tested architecture."
26
+ <commentary>Architecture, design, and refactor work that benefits from multiple adversarial perspectives should use the Wizard to orchestrate the party.</commentary>
27
+ </example>
28
+
29
+
30
+ <example>
31
+ Context: The user has a complex bug that needs multi-angle investigation.
32
+ user: "this race condition keeps happening in production and I can't figure it out — can the raid team investigate?"
33
+ assistant: "I'll spawn the Wizard to run a debugging quest. The party will investigate from different angles — structural integrity, pattern consistency, and adversarial scenarios."
34
+ <commentary>Complex debugging that benefits from parallel investigation angles (stress testing, pattern tracing, assumption destruction) should use the Wizard.</commentary>
35
+ </example>
9
36
  model: claude-opus-4-6
10
37
  tools: Agent, TeamCreate, SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
11
38
  effort: max