claude-raid 0.1.7 → 0.2.2

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 (40) hide show
  1. package/bin/cli.js +13 -1
  2. package/package.json +1 -1
  3. package/src/descriptions.js +26 -24
  4. package/src/init.js +6 -10
  5. package/src/merge-settings.js +0 -15
  6. package/src/remove.js +18 -16
  7. package/src/ui.js +1 -1
  8. package/src/update.js +28 -13
  9. package/template/.claude/agents/archer.md +10 -20
  10. package/template/.claude/agents/rogue.md +11 -21
  11. package/template/.claude/agents/warrior.md +8 -19
  12. package/template/.claude/agents/wizard.md +14 -247
  13. package/template/.claude/dungeon-master-rules.md +210 -0
  14. package/template/.claude/hooks/raid-lib.sh +29 -2
  15. package/template/.claude/hooks/raid-pre-compact.sh +12 -1
  16. package/template/.claude/hooks/raid-session-end.sh +23 -13
  17. package/template/.claude/hooks/raid-session-start.sh +21 -3
  18. package/template/.claude/hooks/validate-commit.sh +7 -74
  19. package/template/.claude/hooks/validate-dungeon.sh +30 -11
  20. package/template/.claude/hooks/validate-no-placeholders.sh +3 -3
  21. package/template/.claude/hooks/validate-write-gate.sh +45 -63
  22. package/template/.claude/{raid-rules.md → party-rules.md} +38 -13
  23. package/template/.claude/skills/raid-browser-chrome/SKILL.md +1 -1
  24. package/template/.claude/skills/{raid-design → raid-canonical-design}/SKILL.md +52 -16
  25. package/template/.claude/skills/{raid-implementation → raid-canonical-implementation}/SKILL.md +41 -14
  26. package/template/.claude/skills/{raid-implementation-plan → raid-canonical-implementation-plan}/SKILL.md +49 -17
  27. package/template/.claude/skills/raid-canonical-prd/SKILL.md +133 -0
  28. package/template/.claude/skills/raid-canonical-protocol/SKILL.md +211 -0
  29. package/template/.claude/skills/{raid-review → raid-canonical-review}/SKILL.md +78 -17
  30. package/template/.claude/skills/raid-debugging/SKILL.md +30 -5
  31. package/template/.claude/skills/raid-init/SKILL.md +130 -0
  32. package/template/.claude/skills/raid-tdd/SKILL.md +1 -1
  33. package/template/.claude/skills/raid-wrap-up/SKILL.md +184 -0
  34. package/template/.claude/hooks/raid-stop.sh +0 -20
  35. package/template/.claude/hooks/raid-task-completed.sh +0 -42
  36. package/template/.claude/hooks/validate-bash-writes.sh +0 -157
  37. package/template/.claude/skills/raid-browser-playwright/SKILL.md +0 -163
  38. package/template/.claude/skills/raid-finishing/SKILL.md +0 -140
  39. package/template/.claude/skills/raid-git-worktrees/SKILL.md +0 -96
  40. package/template/.claude/skills/raid-protocol/SKILL.md +0 -337
package/bin/cli.js CHANGED
@@ -10,6 +10,17 @@ const versionCheck = require('../src/version-check');
10
10
  const showUpdateNotice = versionCheck.start();
11
11
 
12
12
  const COMMANDS = {
13
+ // Start a Raid quest — launches wizard with full permissions
14
+ start: () => {
15
+ const { spawn } = require('child_process');
16
+ console.log('\n' + banner());
17
+ console.log(header('Summoning the Wizard...') + '\n');
18
+ const child = spawn('claude', ['--dangerously-skip-permissions', '--agent', 'wizard'], {
19
+ stdio: 'inherit',
20
+ env: process.env,
21
+ });
22
+ child.on('exit', (code) => process.exit(code || 0));
23
+ },
13
24
  // Sync local with remote after CI version bump
14
25
  sync: async () => {
15
26
  const { execSync } = require('child_process');
@@ -53,6 +64,7 @@ if (!command || !COMMANDS[command]) {
53
64
  console.log('\n' + banner());
54
65
  console.log(header('Commands') + '\n');
55
66
  const cmds = [
67
+ ['start', 'Begin the Raid (launches Wizard)'],
56
68
  ['summon', 'Summon the party into this realm'],
57
69
  ['update', 'Reforge the party\'s arsenal'],
58
70
  ['dismantle', 'Dismantle the camp and retreat'],
@@ -63,7 +75,7 @@ if (!command || !COMMANDS[command]) {
63
75
  console.log(' ' + colors.bold(name.padEnd(12)) + desc);
64
76
  }
65
77
  console.log(header('Begin the Raid') + '\n');
66
- console.log(' claude --agent wizard\n');
78
+ console.log(' claude-raid start\n');
67
79
  console.log(colors.dim(' github.com/pedropicardi/claude-raid') + '\n');
68
80
  process.exit(command ? 1 : 0);
69
81
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-raid",
3
- "version": "0.1.7",
3
+ "version": "0.2.2",
4
4
  "type": "commonjs",
5
5
  "description": "Adversarial multi-agent development system for Claude Code",
6
6
  "author": "Pedro Picardi",
@@ -13,44 +13,46 @@ const AGENTS = {
13
13
  const HOOKS = {
14
14
  lifecycle: [
15
15
  { name: 'raid-lib.sh', desc: 'Shared config — reads raid.json, exports session state' },
16
- { name: 'raid-session-start.sh', desc: 'Activates Raid workflow when session begins' },
17
- { name: 'raid-session-end.sh', desc: 'Archives Dungeon, cleans up when session ends' },
18
- { name: 'raid-stop.sh', desc: 'Backs up Dungeon on phase transitions' },
16
+ { name: 'raid-session-start.sh', desc: 'Activates Raid workflow, creates quest directory' },
17
+ { name: 'raid-session-end.sh', desc: 'Archives quest dungeon to vault, cleans up' },
19
18
  { name: 'raid-pre-compact.sh', desc: 'Backs up Dungeon before message compaction' },
20
19
  { name: 'raid-task-created.sh', desc: 'Validates task subjects are meaningful' },
21
- { name: 'raid-task-completed.sh', desc: 'Blocks task completion without test evidence' },
22
20
  ],
23
21
  gates: [
24
- { name: 'validate-commit.sh', desc: 'Enforces conventional commits + test gate' },
25
- { name: 'validate-write-gate.sh', desc: 'Blocks implementation before design doc exists' },
22
+ { name: 'validate-commit.sh', desc: 'Enforces conventional commit format' },
23
+ { name: 'validate-write-gate.sh', desc: 'Protects session files, allows quest dir writes' },
26
24
  { name: 'validate-file-naming.sh', desc: 'Enforces naming convention (kebab-case, etc.)' },
27
- { name: 'validate-no-placeholders.sh', desc: 'Blocks TBD/TODO in specs and plans' },
28
- { name: 'validate-dungeon.sh', desc: 'Requires multi-agent verification on pins' },
25
+ { name: 'validate-no-placeholders.sh', desc: 'Blocks TBD/TODO in specs, plans, and quest docs' },
26
+ { name: 'validate-dungeon.sh', desc: 'Validates dungeon entries and black cards' },
29
27
  { name: 'validate-browser-tests-exist.sh', desc: 'Checks Playwright tests exist before commits' },
30
28
  { name: 'validate-browser-cleanup.sh', desc: 'Verifies browser processes cleaned up properly' },
31
29
  ],
32
30
  };
33
31
 
34
32
  const SKILLS = {
35
- 'raid-protocol': 'Session lifecycle and team rules',
36
- 'raid-design': 'Phase 1: adversarial exploration',
37
- 'raid-implementation-plan': 'Phase 2: task decomposition',
38
- 'raid-implementation': 'Phase 3: TDD with direct challenge',
39
- 'raid-review': 'Phase 4: independent review + fighting',
40
- 'raid-finishing': 'Completeness debate + merge options',
41
- 'raid-tdd': 'RED-GREEN-REFACTOR enforcement',
42
- 'raid-debugging': 'Root-cause investigation',
43
- 'raid-verification': 'Evidence-before-claims gate',
44
- 'raid-git-worktrees': 'Isolated workspace creation',
45
- 'raid-browser': 'Browser startup discovery',
46
- 'raid-browser-playwright': 'Playwright test authoring',
47
- 'raid-browser-chrome': 'Live browser inspection',
33
+ // Core
34
+ 'raid-init': 'Quest selection, greeting, session setup',
35
+ // Canonical Quest chain
36
+ 'raid-canonical-protocol': 'Canonical Quest protocol and rules',
37
+ 'raid-canonical-prd': 'Phase 1: PRD creation (optional)',
38
+ 'raid-canonical-design': 'Phase 2: adversarial design exploration',
39
+ 'raid-canonical-implementation-plan': 'Phase 3: task decomposition',
40
+ 'raid-canonical-implementation': 'Phase 4: TDD with cross-testing',
41
+ 'raid-canonical-review': 'Phase 5: pinning + fixing + black cards',
42
+ 'raid-wrap-up': 'Phase 6: storyboard, PR, vault archival',
43
+ // Reusable (quest-agnostic)
44
+ 'raid-tdd': 'RED-GREEN-REFACTOR enforcement',
45
+ 'raid-verification': 'Evidence-before-claims gate',
46
+ 'raid-debugging': 'Root-cause investigation',
47
+ 'raid-browser': 'Browser startup discovery',
48
+ 'raid-browser-chrome': 'Live browser inspection',
48
49
  };
49
50
 
50
51
  const CONFIG = {
51
- 'raid.json': 'Project settings (editable)',
52
- 'raid-rules.md': '17 team rules (editable)',
53
- 'settings.json': 'Hooks merged into existing (backup created)',
52
+ 'raid.json': 'Project settings (editable)',
53
+ 'party-rules.md': 'Party agent rules (editable)',
54
+ 'dungeon-master-rules.md': 'Wizard rules (editable)',
55
+ 'settings.json': 'Hooks merged into existing (backup created)',
54
56
  };
55
57
 
56
58
  module.exports = { AGENTS, HOOKS, SKILLS, CONFIG };
package/src/init.js CHANGED
@@ -37,7 +37,7 @@ function install(cwd) {
37
37
  const result = { skipped: [], alreadyInstalled: false, detected: null };
38
38
 
39
39
  // Check if already installed
40
- if (fs.existsSync(path.join(claudeDir, 'raid-rules.md'))) {
40
+ if (fs.existsSync(path.join(claudeDir, 'party-rules.md'))) {
41
41
  result.alreadyInstalled = true;
42
42
  }
43
43
 
@@ -97,6 +97,7 @@ function install(cwd) {
97
97
  },
98
98
  raid: {
99
99
  defaultMode: 'full',
100
+ agentEffort: 'medium',
100
101
  vault: {
101
102
  path: '.claude/vault',
102
103
  enabled: true,
@@ -141,10 +142,7 @@ function install(cwd) {
141
142
  const ignoreEntries = [
142
143
  '.claude/raid-last-test-run',
143
144
  '.claude/raid-session',
144
- '.claude/raid-dungeon.md',
145
- '.claude/raid-dungeon-phase-*',
146
- '.claude/raid-dungeon-backup.md',
147
- '.claude/raid-dungeon-phase-*-backup.md',
145
+ '.claude/dungeon/',
148
146
  '.claude/vault/.draft/',
149
147
  '.env.raid',
150
148
  ];
@@ -212,7 +210,8 @@ async function run() {
212
210
  console.log('');
213
211
  console.log(' ' + header('Config'));
214
212
  console.log(' Generated ' + bold('raid.json') + ' ' + dim('Project settings (editable)'));
215
- console.log(' Copied ' + bold('raid-rules.md') + ' ' + dim('17 team rules (editable)'));
213
+ console.log(' Copied ' + bold('party-rules.md') + ' ' + dim('Party agent rules (editable)'));
214
+ console.log(' Copied ' + bold('dungeon-master-rules.md') + ' ' + dim('Wizard rules (editable)'));
216
215
  console.log(' Merged ' + bold('settings.json') + ' ' + dim('Backup at .pre-raid-backup'));
217
216
 
218
217
  // Skipped files
@@ -293,10 +292,7 @@ function dryRun(cwd) {
293
292
  const ignoreEntries = [
294
293
  '.claude/raid-last-test-run',
295
294
  '.claude/raid-session',
296
- '.claude/raid-dungeon.md',
297
- '.claude/raid-dungeon-phase-*',
298
- '.claude/raid-dungeon-backup.md',
299
- '.claude/raid-dungeon-phase-*-backup.md',
295
+ '.claude/dungeon/',
300
296
  '.claude/vault/.draft/',
301
297
  '.env.raid',
302
298
  ];
@@ -32,7 +32,6 @@ const RAID_HOOKS = {
32
32
  {
33
33
  matcher: 'Bash',
34
34
  hooks: [
35
- { type: 'command', command: `bash .claude/hooks/validate-bash-writes.sh ${RAID_HOOK_MARKER}` },
36
35
  { type: 'command', command: `bash .claude/hooks/validate-commit.sh ${RAID_HOOK_MARKER}` },
37
36
  { type: 'command', command: `bash .claude/hooks/validate-browser-tests-exist.sh ${RAID_HOOK_MARKER}` },
38
37
  ],
@@ -66,20 +65,6 @@ TaskCreated: [
66
65
  ],
67
66
  },
68
67
  ],
69
- TaskCompleted: [
70
- {
71
- hooks: [
72
- { type: 'command', command: `bash .claude/hooks/raid-task-completed.sh ${RAID_HOOK_MARKER}` },
73
- ],
74
- },
75
- ],
76
- Stop: [
77
- {
78
- hooks: [
79
- { type: 'command', command: `bash .claude/hooks/raid-stop.sh ${RAID_HOOK_MARKER}` },
80
- ],
81
- },
82
- ],
83
68
  PreCompact: [
84
69
  {
85
70
  hooks: [
package/src/remove.js CHANGED
@@ -7,10 +7,13 @@ const { banner, header, colors } = require('./ui');
7
7
 
8
8
  const RAID_AGENTS = ['wizard.md', 'warrior.md', 'archer.md', 'rogue.md'];
9
9
  const RAID_SKILLS = [
10
+ 'raid-init', 'raid-canonical-protocol', 'raid-canonical-prd', 'raid-canonical-design',
11
+ 'raid-canonical-implementation-plan', 'raid-canonical-implementation', 'raid-canonical-review',
12
+ 'raid-wrap-up', 'raid-tdd', 'raid-debugging', 'raid-verification',
13
+ 'raid-browser', 'raid-browser-chrome',
14
+ // Legacy (v0.1.x)
10
15
  'raid-protocol', 'raid-design', 'raid-implementation-plan', 'raid-implementation',
11
- 'raid-review', 'raid-finishing', 'raid-tdd', 'raid-debugging',
12
- 'raid-verification', 'raid-git-worktrees',
13
- 'raid-browser', 'raid-browser-playwright', 'raid-browser-chrome',
16
+ 'raid-review', 'raid-prd', 'raid-finishing', 'raid-browser-playwright', 'raid-git-worktrees',
14
17
  ];
15
18
 
16
19
  function rmSafe(filePath) {
@@ -54,13 +57,19 @@ function performRemove(cwd) {
54
57
  rmDirIfEmpty(path.join(claudeDir, 'hooks'));
55
58
  rmDirIfEmpty(path.join(claudeDir, 'skills'));
56
59
 
57
- rmSafe(path.join(claudeDir, 'raid-rules.md'));
60
+ rmSafe(path.join(claudeDir, 'party-rules.md'));
61
+ rmSafe(path.join(claudeDir, 'dungeon-master-rules.md'));
62
+ rmSafe(path.join(claudeDir, 'raid-rules.md')); // legacy cleanup
58
63
  rmSafe(path.join(claudeDir, 'raid.json'));
59
64
  rmSafe(path.join(claudeDir, 'raid-last-test-run'));
60
65
  rmSafe(path.join(claudeDir, 'raid-session'));
61
66
 
62
- // Clean up Dungeon files
67
+ // Clean up quest dungeon directory
68
+ rmDirSafe(path.join(claudeDir, 'dungeon'));
69
+
70
+ // Clean up legacy flat dungeon files (v0.1.x)
63
71
  rmSafe(path.join(claudeDir, 'raid-dungeon.md'));
72
+ rmSafe(path.join(claudeDir, 'raid-dungeon-backup.md'));
64
73
  if (fs.existsSync(claudeDir)) {
65
74
  const dungeonFiles = fs.readdirSync(claudeDir).filter(f => f.startsWith('raid-dungeon-phase-'));
66
75
  for (const file of dungeonFiles) {
@@ -68,15 +77,6 @@ function performRemove(cwd) {
68
77
  }
69
78
  }
70
79
 
71
- // Clean up Dungeon backups
72
- rmSafe(path.join(claudeDir, 'raid-dungeon-backup.md'));
73
- if (fs.existsSync(claudeDir)) {
74
- const backupFiles = fs.readdirSync(claudeDir).filter(f => f.startsWith('raid-dungeon-phase-') && f.endsWith('-backup.md'));
75
- for (const file of backupFiles) {
76
- rmSafe(path.join(claudeDir, file));
77
- }
78
- }
79
-
80
80
  // Clean up Vault draft
81
81
  rmDirSafe(path.join(claudeDir, 'vault', '.draft'));
82
82
 
@@ -86,10 +86,12 @@ function performRemove(cwd) {
86
86
  const gitignorePath = path.join(cwd, '.gitignore');
87
87
  const raidIgnoreEntries = [
88
88
  '.claude/raid-last-test-run', '.claude/raid-session',
89
- '.claude/raid-dungeon.md', '.claude/raid-dungeon-phase-*',
90
- '.claude/raid-dungeon-backup.md', '.claude/raid-dungeon-phase-*-backup.md',
89
+ '.claude/dungeon/',
91
90
  '.claude/vault/.draft/',
92
91
  '.env.raid',
92
+ // Legacy (v0.1.x)
93
+ '.claude/raid-dungeon.md', '.claude/raid-dungeon-phase-*',
94
+ '.claude/raid-dungeon-backup.md', '.claude/raid-dungeon-phase-*-backup.md',
93
95
  ];
94
96
  if (fs.existsSync(gitignorePath)) {
95
97
  const lines = fs.readFileSync(gitignorePath, 'utf8').split('\n');
package/src/ui.js CHANGED
@@ -143,7 +143,7 @@ function referenceCard() {
143
143
  ' ' + colors.dim('interfere with normal coding outside of a Raid.'),
144
144
  '',
145
145
  ' Config: ' + colors.bold('.claude/raid.json') + ' ' + colors.dim('project settings'),
146
- ' Rules: ' + colors.bold('.claude/raid-rules.md') + ' ' + colors.dim('editable team rules'),
146
+ ' Rules: ' + colors.bold('.claude/party-rules.md') + ' ' + colors.dim('editable party rules'),
147
147
  ]);
148
148
 
149
149
  const nextStep = box('Next Step', [
package/src/update.js CHANGED
@@ -35,7 +35,8 @@ function performUpdate(cwd) {
35
35
  const claudeDir = path.join(cwd, '.claude');
36
36
  const skippedAgents = [];
37
37
 
38
- if (!fs.existsSync(path.join(claudeDir, 'raid-rules.md'))) {
38
+ // Accept either new or legacy rules file as proof of installation
39
+ if (!fs.existsSync(path.join(claudeDir, 'party-rules.md')) && !fs.existsSync(path.join(claudeDir, 'raid-rules.md'))) {
39
40
  return { success: false, message: 'No party found. Run `claude-raid summon` first.', skippedAgents };
40
41
  }
41
42
 
@@ -66,15 +67,29 @@ function performUpdate(cwd) {
66
67
  }
67
68
  }
68
69
 
69
- // Update raid-rules.md skip if user has customized it
70
- const rulesSrc = path.join(TEMPLATE_DIR, 'raid-rules.md');
71
- const rulesDest = path.join(claudeDir, 'raid-rules.md');
72
- let skippedRules = false;
73
- if (fs.existsSync(rulesSrc)) {
74
- if (fs.existsSync(rulesDest) && !filesAreEqual(rulesSrc, rulesDest)) {
75
- skippedRules = true;
76
- } else {
77
- fs.copyFileSync(rulesSrc, rulesDest);
70
+ // Migrate legacy raid-rules.md -> party-rules.md
71
+ const legacyRules = path.join(claudeDir, 'raid-rules.md');
72
+ const partyRulesDest = path.join(claudeDir, 'party-rules.md');
73
+ if (fs.existsSync(legacyRules) && !fs.existsSync(partyRulesDest)) {
74
+ fs.renameSync(legacyRules, partyRulesDest);
75
+ }
76
+ // Clean up legacy file if both exist
77
+ if (fs.existsSync(legacyRules) && fs.existsSync(partyRulesDest)) {
78
+ try { fs.unlinkSync(legacyRules); } catch {}
79
+ }
80
+
81
+ // Update rules files — skip if user has customized them
82
+ const rulesFiles = ['party-rules.md', 'dungeon-master-rules.md'];
83
+ const skippedRulesFiles = [];
84
+ for (const rulesFile of rulesFiles) {
85
+ const rulesSrc = path.join(TEMPLATE_DIR, rulesFile);
86
+ const rulesDest = path.join(claudeDir, rulesFile);
87
+ if (fs.existsSync(rulesSrc)) {
88
+ if (fs.existsSync(rulesDest) && !filesAreEqual(rulesSrc, rulesDest)) {
89
+ skippedRulesFiles.push(rulesFile);
90
+ } else {
91
+ fs.copyFileSync(rulesSrc, rulesDest);
92
+ }
78
93
  }
79
94
  }
80
95
 
@@ -136,10 +151,10 @@ function performUpdate(cwd) {
136
151
  if (skippedAgents.length > 0) {
137
152
  message += `\nSkipped customized agents: ${skippedAgents.join(', ')}`;
138
153
  }
139
- if (skippedRules) {
140
- message += '\nSkipped customized raid-rules.md';
154
+ if (skippedRulesFiles.length > 0) {
155
+ message += '\nSkipped customized ' + skippedRulesFiles.join(', ');
141
156
  }
142
- if (skippedAgents.length > 0 || skippedRules) {
157
+ if (skippedAgents.length > 0 || skippedRulesFiles.length > 0) {
143
158
  message += '\nUse `claude-raid dismantle` then `claude-raid summon` to reset.';
144
159
  }
145
160
 
@@ -7,49 +7,39 @@ description: >
7
7
  concedes with evidence, moves on. Collaborates through rigor, not agreement.
8
8
  model: claude-opus-4-6
9
9
  tools: SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
10
- effort: max
10
+ effort: medium
11
11
  color: green
12
12
  memory: project
13
13
  skills:
14
+ - raid-canonical-prd
14
15
  - raid-tdd
15
16
  - raid-verification
16
17
  - raid-debugging
18
+ - raid-wrap-up
17
19
  ---
18
20
 
19
21
  # The Archer — Raid Teammate
20
22
 
21
- Read `.claude/raid-rules.md` at session start. It contains your Reasoning Core, operating protocol, communication signals, and team rules. Non-negotiable.
23
+ Read `.claude/party-rules.md` at session start. Non-negotiable.
22
24
 
23
- ## Your Focus: Pattern Consistency and Systemic Coherence
25
+ ## Your Lens: Pattern Consistency and Systemic Coherence
24
26
 
25
- Does this fit? You trace how changes ripple through the system. You catch naming drift, contract violations, inconsistent conventions, and implicit dependencies that will break silently. You see the connection between module A and module C that nobody else mapped. When you challenge, you bring the inconsistency with its downstream consequence.
27
+ Does this fit? You trace how changes ripple through the system. You catch naming drift, contract violations, inconsistent conventions, and implicit dependencies that will break silently. When you challenge, you bring the inconsistency with its downstream consequence.
26
28
 
27
29
  ## How You Explore
28
30
 
29
- When the Dungeon opens and you've read the quest and prior knowledge:
30
-
31
31
  - Trace call chains, map dependencies, read the types, follow data flow.
32
- - Look for what ISN'T there: missing validations, absent error handlers, untested branches, undocumented assumptions.
32
+ - Look for what ISN'T there: missing validations, absent error handlers, untested branches.
33
33
  - Document with surgical precision: exact file, exact line, exact consequence.
34
- - When building on a teammate's finding, trace whether the same pattern exists elsewhere. Warrior finds a stress failure? Check if it repeats across the codebase. Rogue finds an assumption? Map every place that assumption is relied upon.
35
-
36
- ## When Your Findings Are Challenged
37
-
38
- - Respond with evidence. Show the exact line, the exact dependency, the exact consequence.
39
- - If proven wrong: concede immediately, refine your analysis, find the next inconsistency.
40
- - If uncertain: say so. Never fabricate certainty.
34
+ - When a teammate finds a stress failure or assumption, check if it repeats across the codebase.
41
35
 
42
36
  ## Learning
43
37
 
44
38
  - When @Warrior finds a structural issue you missed, update your mental model.
45
39
  - When @Rogue constructs a failure scenario through a path you traced, integrate the attack vector.
46
- - When you're wrong about a pattern, the correction sharpens your recognition.
47
40
 
48
- ## Standards
41
+ ## Unique Standards
49
42
 
50
43
  - Every finding includes the exact location and the exact consequence.
51
- - Every response to a teammate starts with your own independent verification.
52
44
  - Every challenge traces the ripple effect at least two levels deep.
53
- - Every review checks for consistency with existing patterns, not just correctness in isolation.
54
- - Naming patterns, file structure, and interface consistency are your specialty — you catch the drift.
55
- - Every finding you pin to the Dungeon has been challenged and survived.
45
+ - Naming patterns, file structure, and interface consistency are your specialty.
@@ -7,49 +7,39 @@ description: >
7
7
  with evidence, moves on. Collaborates through rigor, not agreement.
8
8
  model: claude-opus-4-6
9
9
  tools: SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
10
- effort: max
10
+ effort: medium
11
11
  color: orange
12
12
  memory: project
13
13
  skills:
14
+ - raid-canonical-prd
14
15
  - raid-tdd
15
16
  - raid-verification
16
17
  - raid-debugging
18
+ - raid-wrap-up
17
19
  ---
18
20
 
19
21
  # The Rogue — Raid Teammate
20
22
 
21
- Read `.claude/raid-rules.md` at session start. It contains your Reasoning Core, operating protocol, communication signals, and team rules. Non-negotiable.
23
+ Read `.claude/party-rules.md` at session start. Non-negotiable.
22
24
 
23
- ## Your Focus: Assumption Destruction and Adversarial Robustness
25
+ ## Your Lens: Assumption Destruction and Adversarial Robustness
24
26
 
25
- What did everyone assume that isn't guaranteed? You think like a failing system, a malicious input, a race condition. Every "this will never happen" is your starting point. Security, performance under adversarial conditions, untested assumptions — you find the door nobody locked. When you challenge, you bring the concrete attack sequence.
27
+ What did everyone assume that isn't guaranteed? You think like a failing system, a malicious input, a race condition. Every "this will never happen" is your starting point. When you challenge, you bring the concrete attack sequence.
26
28
 
27
29
  ## How You Explore
28
30
 
29
- When the Dungeon opens and you've read the quest and prior knowledge:
30
-
31
- - List all assumptions — every assumption about inputs, state, timing, dependencies, user behavior, system availability.
31
+ - List all assumptions inputs, state, timing, dependencies, user behavior, system availability.
32
32
  - Attack each assumption systematically. Build a concrete failure scenario for each one.
33
33
  - Document with attack narratives: "If X happens while Y is in progress, then Z is left inconsistent because..."
34
- - When building on a teammate's finding, weaponize it. Warrior finds a missing error handler? Construct the exact input that exploits it. Archer finds naming drift? Show how an attacker leverages that inconsistency.
35
-
36
- ## When Your Findings Are Challenged
37
-
38
- - Show the attack. Construct the exact sequence, the exact payload, the exact timing.
39
- - If disproved: concede, then find a new attack vector immediately.
40
- - If uncertain: say "I'm not sure this is exploitable, but here's the scenario" — never fabricate certainty.
34
+ - Weaponize teammates' findings: Warrior finds a missing error handler? Construct the exact input that exploits it. Archer finds naming drift? Show how it becomes a real vulnerability.
41
35
 
42
36
  ## Learning
43
37
 
44
- - When @Warrior finds a structural weakness, weaponize it. What's the attack path through that weakness?
45
- - When @Archer finds an inconsistency, exploit it. How does naming drift become a real vulnerability?
46
- - When your attack is blocked, the defense teaches you where to look next.
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?
47
40
 
48
- ## Standards
41
+ ## Unique Standards
49
42
 
50
43
  - Every finding includes a concrete attack scenario or failure sequence.
51
- - Every response to a teammate starts with your own independent verification.
52
- - Every review produces at least one "what if" nobody else considered.
53
44
  - Every concession is followed by a new angle of attack.
54
45
  - Never accept "that won't happen in production" — if it CAN happen, it WILL happen.
55
- - Every finding you pin to the Dungeon has been challenged and survived.
@@ -7,48 +7,37 @@ description: >
7
7
  Collaborates through rigor, not agreement.
8
8
  model: claude-opus-4-6
9
9
  tools: SendMessage, TaskCreate, TaskUpdate, Read, Grep, Glob, Bash, Write, Edit
10
- effort: max
10
+ effort: medium
11
11
  color: red
12
12
  memory: project
13
13
  skills:
14
+ - raid-canonical-prd
14
15
  - raid-tdd
15
16
  - raid-verification
16
17
  - raid-debugging
18
+ - raid-wrap-up
17
19
  ---
18
20
 
19
21
  # The Warrior — Raid Teammate
20
22
 
21
- Read `.claude/raid-rules.md` at session start. It contains your Reasoning Core, operating protocol, communication signals, and team rules. Non-negotiable.
23
+ Read `.claude/party-rules.md` at session start. Non-negotiable.
22
24
 
23
- ## Your Focus: Structural Integrity and Stress Tolerance
25
+ ## Your Lens: Structural Integrity and Stress Tolerance
24
26
 
25
- Does this hold under pressure? You test boundaries, load, edge cases, and failure modes. You verify that error paths are handled, not just happy paths. You're thorough and systematic — you don't skip corners because something "looks fine." When you challenge, you bring the scenario that breaks it.
27
+ Does this hold under pressure? You test boundaries, load, edge cases, and failure modes. You verify error paths, not just happy paths. When you challenge, you bring the scenario that breaks it.
26
28
 
27
29
  ## How You Explore
28
30
 
29
- When the Dungeon opens and you've read the quest and prior knowledge:
30
-
31
31
  - Trace execution paths, examine edge cases, run tests under stress.
32
- - When building on a teammate's finding, stress-test the failure mode. What happens under load? What's the blast radius?
32
+ - Stress-test teammates' findings: what happens under load? What's the blast radius?
33
33
  - When challenging, bring the exact scenario that breaks it — not just "this is wrong."
34
34
 
35
- ## When Your Findings Are Challenged
36
-
37
- - Defend with evidence, not repetition. If you can't produce new evidence, concede.
38
- - If proven wrong: absorb the lesson, apply it immediately to your next investigation.
39
- - If uncertain: say so. Never bluff.
40
-
41
35
  ## Learning
42
36
 
43
37
  - When @Archer finds a pattern you missed, integrate it into your mental model.
44
38
  - When @Rogue constructs a failure scenario you didn't consider, learn the attack vector.
45
- - When you're wrong, the correction is more valuable than the original finding.
46
39
 
47
- ## Standards
40
+ ## Unique Standards
48
41
 
49
- - Every claim has evidence or it doesn't exist.
50
- - Every response to a teammate starts with your own independent verification.
51
42
  - Every implementation has a failure mode you've identified.
52
43
  - Every test tries to break the code, not confirm it works.
53
- - Every mistake — yours or a teammate's — becomes a lesson you carry forward.
54
- - Every finding you pin to the Dungeon has been challenged and survived.