hail-hydra-cc 2.3.0 → 2.3.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.
@@ -1,46 +1,47 @@
1
- ---
2
- description: Show all available Hydra commands, agents, and a quick reference guide
3
- ---
4
-
5
- # Hydra Help
6
-
7
- Display the following help reference directly — do NOT search files or run commands:
8
-
9
- ```
10
- 🐉 Hydra Framework — Quick Reference
11
- ═══════════════════════════════════════
12
- COMMANDS
13
- /hydra:help Show this help screen
14
- /hydra:status Show installed agents, version, config
15
- /hydra:update Update Hydra to the latest version
16
- /hydra:config Show current configuration
17
- /hydra:guard Run security scan on files (usage: /hydra:guard src/auth.py)
18
- /hydra:quiet Suppress dispatch logs for this session
19
- /hydra:map View, rebuild, or query the codebase map
20
- /hydra:verbose Enable verbose dispatch logs with timing
21
- /hydra:report Report a bug, request a feature, or share feedback
22
- /hydra:preflight Two-phase environment & compatibility check before new projects
23
- /hydra:stats Show real token usage and estimated savings (no AI estimation)
24
-
25
- AGENTS
26
- 🟢 hydra-scout (Haiku 4.5) — Explore codebase, find files, map structure
27
- 🟢 hydra-runner (Haiku 4.5) — Run tests, linters, build commands
28
- 🟢 hydra-scribe (Haiku 4.5) — Write docs, comments, READMEs
29
- 🟢 hydra-guard (Haiku 4.5) — Security scan, quality gate
30
- 🟢 hydra-git (Haiku 4.5) — Git operations, commits, branches
31
- 🟢 hydra-preflight (Haiku 4.5) Environment detection, version probing, dep inventory
32
- 🔵 hydra-coder (Sonnet 4.6) — Write and edit code
33
- 🔵 hydra-analyst (Sonnet 4.6) — Debug, diagnose, review
34
-
35
- HOW IT WORKS
36
- The Opus 4.6 orchestrator automatically delegates tasks to cheaper,
37
- faster agents (Haiku 4.5 and Sonnet 4.6) saving ~50% on API costs
38
- while maintaining Opus-level quality through verification.
39
-
40
- You don't need to do anything. Just work normally.
41
- Hydra operates invisibly unless you check the dispatch log.
42
-
43
- LINKS
44
- GitHub: https://github.com/AR6420/Hail_Hydra
45
- npm: https://www.npmjs.com/package/hail-hydra-cc
46
- ```
1
+ ---
2
+ description: Show all available Hydra commands, agents, and a quick reference guide
3
+ ---
4
+
5
+ # Hydra Help
6
+
7
+ Display the following help reference directly — do NOT search files or run commands:
8
+
9
+ ```
10
+ 🐉 Hydra Framework — Quick Reference
11
+ ═══════════════════════════════════════
12
+ COMMANDS
13
+ /hydra:help Show this help screen
14
+ /hydra:status Show installed agents, version, config
15
+ /hydra:update Update Hydra to the latest version
16
+ /hydra:config Show current configuration
17
+ /hydra:guard Run security scan on files (usage: /hydra:guard src/auth.py)
18
+ /hydra:quiet Suppress dispatch logs for this session
19
+ /hydra:map View, rebuild, or query the codebase map
20
+ /hydra:verbose Enable verbose dispatch logs with timing
21
+ /hydra:report Report a bug, request a feature, or share feedback
22
+ /hydra:preflight Two-phase environment & compatibility check before new projects
23
+ /hydra:stats Show real token usage and estimated savings (no AI estimation)
24
+ /hydra:stfu Silence intermediate prose from every dispatched subagent
25
+
26
+ AGENTS
27
+ 🟢 hydra-scout (Haiku 4.5) — Explore codebase, find files, map structure
28
+ 🟢 hydra-runner (Haiku 4.5) — Run tests, linters, build commands
29
+ 🟢 hydra-scribe (Haiku 4.5) — Write docs, comments, READMEs
30
+ 🟢 hydra-guard (Haiku 4.5) — Security scan, quality gate
31
+ 🟢 hydra-git (Haiku 4.5) Git operations, commits, branches
32
+ 🟢 hydra-preflight (Haiku 4.5) — Environment detection, version probing, dep inventory
33
+ 🔵 hydra-coder (Sonnet 4.6) — Write and edit code
34
+ 🔵 hydra-analyst (Sonnet 4.6) — Debug, diagnose, review
35
+
36
+ HOW IT WORKS
37
+ The Opus 4.6 orchestrator automatically delegates tasks to cheaper,
38
+ faster agents (Haiku 4.5 and Sonnet 4.6) — saving ~50% on API costs
39
+ while maintaining Opus-level quality through verification.
40
+
41
+ You don't need to do anything. Just work normally.
42
+ Hydra operates invisibly unless you check the dispatch log.
43
+
44
+ LINKS
45
+ GitHub: https://github.com/AR6420/Hail_Hydra
46
+ npm: https://www.npmjs.com/package/hail-hydra-cc
47
+ ```
@@ -1,16 +1,16 @@
1
- ---
2
- description: Suppress Hydra dispatch logs for the rest of this session
3
- ---
4
-
5
- # Hydra Quiet Mode
6
-
7
- Acknowledge this command and remember for the rest of this session:
8
-
9
- **Do NOT display the Hydra Dispatch Log footer after tasks.**
10
-
11
- Respond with:
12
- "🐉 Quiet mode enabled. Dispatch logs suppressed for this session. Use /hydra:verbose to re-enable."
13
-
14
- Continue operating Hydra normally (delegation, verification, auto-guard) — just don't show the dispatch log table.
15
-
16
- Also suppress the task completion notification sound for this session.
1
+ ---
2
+ description: Suppress Hydra dispatch logs for the rest of this session
3
+ ---
4
+
5
+ # Hydra Quiet Mode
6
+
7
+ Acknowledge this command and remember for the rest of this session:
8
+
9
+ **Do NOT display the Hydra Dispatch Log footer after tasks.**
10
+
11
+ Respond with:
12
+ "🐉 Quiet mode enabled. Dispatch logs suppressed for this session. Use /hydra:verbose to re-enable."
13
+
14
+ Continue operating Hydra normally (delegation, verification, auto-guard) — just don't show the dispatch log table.
15
+
16
+ Also suppress the task completion notification sound for this session.
@@ -8,18 +8,9 @@ allowed-tools: Bash, Read
8
8
  Read the active Claude Code session log and compute actual token usage and
9
9
  savings. NO AI estimation — pure JSONL parsing.
10
10
 
11
- ## How It Works
12
-
13
- Claude Code writes every conversation turn to a JSONL file at
14
- `~/.claude/projects/{project-slug}/{session-id}.jsonl` (or
15
- `$CLAUDE_CONFIG_DIR/projects/...` if overridden). The slug is the absolute
16
- project path with path separators (`/`, `\`, `:`) replaced by `-` and any
17
- leading `-` stripped.
18
-
19
- Each assistant turn line includes a `message.usage` object with
20
- `input_tokens`, `output_tokens`, `cache_read_input_tokens`,
21
- `cache_creation_input_tokens`, and the `model` ID. We aggregate by model
22
- tier and price it.
11
+ Math + JSONL parsing live in the shared helper at
12
+ `~/.claude/hooks/hydra-token-math.js`. Statusline and `/hydra:stats` both
13
+ call it so numbers stay consistent.
23
14
 
24
15
  ## Pricing (per 1M tokens, verified 2026-05 for Claude 4.x)
25
16
 
@@ -29,112 +20,54 @@ tier and price it.
29
20
  | Sonnet | $3 | $15 | 10% of input |
30
21
  | Opus | $5 | $25 | 10% of input |
31
22
 
32
- Edit the `pricing` map below if Anthropic publishes new prices.
23
+ Edit the `PRICING` map in `hydra-token-math.js` if Anthropic publishes new prices.
33
24
 
34
25
  ## Run
35
26
 
36
- Execute this single Node command (works on Windows, macOS, Linux):
37
-
38
27
  ```bash
39
- node -e "
40
- const fs = require('fs');
28
+ # Strikethrough capability detection — env-heuristic only.
29
+ USE_STRIKETHROUGH=0
30
+ [ "$TERM_PROGRAM" = "Apple_Terminal" ] && USE_STRIKETHROUGH=1
31
+ [ "$TERM_PROGRAM" = "iTerm.app" ] && USE_STRIKETHROUGH=1
32
+ [ "$TERM_PROGRAM" = "vscode" ] && USE_STRIKETHROUGH=1
33
+ [ -n "$KITTY_WINDOW_ID" ] && USE_STRIKETHROUGH=1
34
+ [ "$TERM" = "alacritty" ] && USE_STRIKETHROUGH=1
35
+ [ -n "$WEZTERM_PANE" ] && USE_STRIKETHROUGH=1
36
+ [ -n "$WT_SESSION" ] && USE_STRIKETHROUGH=1
37
+ # Known-incompatible terminals (force fallback, overrides green-list)
38
+ [ -n "$MSYSTEM" ] && USE_STRIKETHROUGH=0
39
+ [ -n "$CYGWIN" ] && USE_STRIKETHROUGH=0
40
+ echo "$TERM" | grep -q "cygwin" && USE_STRIKETHROUGH=0
41
+ # User override
42
+ [ "$HYDRA_STRIKETHROUGH" = "0" ] && USE_STRIKETHROUGH=0
43
+ [ "$HYDRA_STRIKETHROUGH" = "1" ] && USE_STRIKETHROUGH=1
44
+
45
+ HYDRA_USE_STRIKETHROUGH="$USE_STRIKETHROUGH" node -e "
41
46
  const path = require('path');
42
47
  const os = require('os');
43
-
44
- const configDir = process.env.CLAUDE_CONFIG_DIR || path.join(os.homedir(), '.claude');
45
- const projectsDir = path.join(configDir, 'projects');
46
-
47
- if (!fs.existsSync(projectsDir)) {
48
- console.log('No Claude Code projects directory found at ' + projectsDir);
48
+ const helperPath = path.join(os.homedir(), '.claude', 'hooks', 'hydra-token-math.js');
49
+ let tokenMath;
50
+ try {
51
+ tokenMath = require(helperPath);
52
+ } catch (e) {
53
+ console.log('hydra-token-math.js not installed at ' + helperPath);
54
+ console.log('Run: hail-hydra-cc to (re)install Hydra hooks.');
49
55
  process.exit(0);
50
56
  }
51
57
 
52
- // Slug = absolute cwd with /, \\, : replaced by -, leading - stripped
53
- const cwd = process.cwd();
54
- const slug = cwd.replace(/[\\\\/:]/g, '-').replace(/^-+/, '');
55
-
56
- // Try exact match first, then case-insensitive substring fallback
57
- let sessionDir = path.join(projectsDir, slug);
58
- if (!fs.existsSync(sessionDir)) {
59
- const all = fs.readdirSync(projectsDir);
60
- const match = all.find(d => d.toLowerCase() === slug.toLowerCase())
61
- || all.find(d => d.toLowerCase().endsWith(path.basename(cwd).toLowerCase()));
62
- if (match) sessionDir = path.join(projectsDir, match);
63
- }
64
-
65
- if (!fs.existsSync(sessionDir)) {
58
+ const summary = tokenMath.computeSummary();
59
+ if (!summary.available) {
66
60
  console.log('No session data for this project yet.');
67
- console.log('Looked in: ' + sessionDir);
68
- process.exit(0);
69
- }
70
-
71
- const files = fs.readdirSync(sessionDir)
72
- .filter(f => f.endsWith('.jsonl'))
73
- .map(f => ({ f, mtime: fs.statSync(path.join(sessionDir, f)).mtimeMs }))
74
- .sort((a, b) => b.mtime - a.mtime);
75
-
76
- if (files.length === 0) {
77
- console.log('No session JSONL files found in ' + sessionDir);
78
61
  process.exit(0);
79
62
  }
80
63
 
81
- const sessionFile = path.join(sessionDir, files[0].f);
82
- const lines = fs.readFileSync(sessionFile, 'utf8').split('\n').filter(Boolean);
83
-
84
- const pricing = {
85
- 'claude-haiku-4': { input: 1, output: 5 },
86
- 'claude-sonnet-4': { input: 3, output: 15 },
87
- 'claude-opus-4': { input: 5, output: 25 }
88
- };
89
-
90
- const stats = {
91
- haiku: { input: 0, output: 0, cache_read: 0, cache_create: 0, turns: 0 },
92
- sonnet: { input: 0, output: 0, cache_read: 0, cache_create: 0, turns: 0 },
93
- opus: { input: 0, output: 0, cache_read: 0, cache_create: 0, turns: 0 }
94
- };
95
- const unknownModels = new Set();
96
- let totalAssistantTurns = 0;
97
-
98
- for (const line of lines) {
99
- try {
100
- const obj = JSON.parse(line);
101
- if (obj.type !== 'assistant' || !obj.message || !obj.message.usage) continue;
102
- const model = obj.message.model || '';
103
- const usage = obj.message.usage;
104
- let tier = null;
105
- if (model.startsWith('claude-haiku')) tier = 'haiku';
106
- else if (model.startsWith('claude-sonnet')) tier = 'sonnet';
107
- else if (model.startsWith('claude-opus')) tier = 'opus';
108
- if (!tier) { if (model) unknownModels.add(model); continue; }
109
- stats[tier].input += usage.input_tokens || 0;
110
- stats[tier].output += usage.output_tokens || 0;
111
- stats[tier].cache_read += usage.cache_read_input_tokens || 0;
112
- stats[tier].cache_create += usage.cache_creation_input_tokens || 0;
113
- stats[tier].turns += 1;
114
- totalAssistantTurns += 1;
115
- } catch (e) { /* skip malformed */ }
116
- }
117
-
118
- function cost(s, p) {
119
- const inputCost = ((s.input + s.cache_create) * p.input + s.cache_read * p.input * 0.1) / 1_000_000;
120
- const outputCost = (s.output * p.output) / 1_000_000;
121
- return inputCost + outputCost;
122
- }
123
- const haikuCost = cost(stats.haiku, pricing['claude-haiku-4']);
124
- const sonnetCost = cost(stats.sonnet, pricing['claude-sonnet-4']);
125
- const opusCost = cost(stats.opus, pricing['claude-opus-4']);
126
- const actualCost = haikuCost + sonnetCost + opusCost;
127
-
128
- function asOpus(s) {
129
- const p = pricing['claude-opus-4'];
130
- return ((s.input + s.cache_create) * p.input + s.cache_read * p.input * 0.1 + s.output * p.output) / 1_000_000;
131
- }
132
- const hypotheticalCost = asOpus(stats.haiku) + asOpus(stats.sonnet) + asOpus(stats.opus);
133
- const savedUSD = hypotheticalCost - actualCost;
134
- const savedPct = hypotheticalCost > 0 ? (savedUSD / hypotheticalCost * 100) : 0;
135
-
136
- const totalDelegations = stats.haiku.turns + stats.sonnet.turns;
137
- const delegationRate = totalAssistantTurns > 0 ? (totalDelegations / totalAssistantTurns * 100) : 0;
64
+ const useStrike = process.env.HYDRA_USE_STRIKETHROUGH === '1';
65
+ const STRIKE = useStrike ? '\x1b[9m' : '';
66
+ const STRIKE_OFF = useStrike ? '\x1b[29m' : '';
67
+ const GREEN = '\x1b[32m';
68
+ const BOLD = '\x1b[1m';
69
+ const DIM = '\x1b[2m';
70
+ const RESET = '\x1b[0m';
138
71
 
139
72
  function fmt(n) {
140
73
  if (n >= 1_000_000) return (n / 1_000_000).toFixed(2) + 'M';
@@ -142,31 +75,41 @@ function fmt(n) {
142
75
  return n.toString();
143
76
  }
144
77
 
78
+ const { stats, totalTurns, haikuCost, sonnetCost, opusCost,
79
+ actualCost, hypotheticalCost, savedUSD, savedPct,
80
+ delegatedTurns, delegationRate, sessionFile, unknownModels } = summary;
81
+
145
82
  const bar = '━'.repeat(40);
146
83
  console.log('');
147
84
  console.log('🐉 Hydra Stats');
148
85
  console.log(bar);
149
86
  console.log('Session: ' + path.basename(sessionFile));
150
- console.log('Turns: ' + totalAssistantTurns);
87
+ console.log('Turns: ' + totalTurns);
151
88
  console.log(bar);
152
89
  console.log('');
153
- console.log('🟢 Haiku (' + stats.haiku.turns + ' turns): ' + fmt(stats.haiku.input + stats.haiku.cache_create) + ' in / ' + fmt(stats.haiku.output) + ' out → $' + haikuCost.toFixed(3));
154
- console.log('🔵 Sonnet (' + stats.sonnet.turns + ' turns): ' + fmt(stats.sonnet.input + stats.sonnet.cache_create) + ' in / ' + fmt(stats.sonnet.output) + ' out → $' + sonnetCost.toFixed(3));
155
- console.log('🟣 Opus (' + stats.opus.turns + ' turns): ' + fmt(stats.opus.input + stats.opus.cache_create) + ' in / ' + fmt(stats.opus.output) + ' out → $' + opusCost.toFixed(3));
90
+ console.log('🟢 Haiku (' + stats.haiku.turns + ' turns): ' + fmt(stats.haiku.input + stats.haiku.cache_create) + ' in / ' + fmt(stats.haiku.output) + ' out → \$' + haikuCost.toFixed(3));
91
+ console.log('🔵 Sonnet (' + stats.sonnet.turns + ' turns): ' + fmt(stats.sonnet.input + stats.sonnet.cache_create) + ' in / ' + fmt(stats.sonnet.output) + ' out → \$' + sonnetCost.toFixed(3));
92
+ console.log('🟣 Opus (' + stats.opus.turns + ' turns): ' + fmt(stats.opus.input + stats.opus.cache_create) + ' in / ' + fmt(stats.opus.output) + ' out → \$' + opusCost.toFixed(3));
156
93
  console.log(bar);
157
94
  console.log('');
158
- console.log('Delegation rate: ' + delegationRate.toFixed(1) + '% (' + totalDelegations + '/' + totalAssistantTurns + ' turns)');
159
- console.log('Actual cost: $' + actualCost.toFixed(3));
160
- console.log('All-Opus baseline: $' + hypotheticalCost.toFixed(3));
95
+ console.log('Delegation rate: ' + delegationRate.toFixed(1) + '% (' + delegatedTurns + '/' + totalTurns + ' turns)');
96
+
97
+ if (useStrike) {
98
+ console.log('Was: ' + DIM + STRIKE + '\$' + hypotheticalCost.toFixed(3) + STRIKE_OFF + RESET);
99
+ console.log('Now: ' + BOLD + GREEN + '\$' + actualCost.toFixed(3) + RESET);
100
+ } else {
101
+ console.log('Actual cost: \$' + actualCost.toFixed(3));
102
+ console.log('All-Opus baseline: \$' + hypotheticalCost.toFixed(3));
103
+ }
161
104
  console.log(bar);
162
- console.log('💰 Saved: $' + savedUSD.toFixed(3) + ' (' + savedPct.toFixed(1) + '%)');
105
+ console.log('💰 ' + GREEN + 'Saved: \$' + savedUSD.toFixed(3) + ' (' + savedPct.toFixed(1) + '%)' + RESET);
163
106
  console.log(bar);
164
107
  console.log('');
165
108
  console.log('Reads Claude Code session JSONL directly. No AI estimation.');
166
- if (unknownModels.size > 0) {
109
+ if (unknownModels && unknownModels.size > 0) {
167
110
  console.log('');
168
111
  console.log('⚠️ Unknown models (not counted): ' + Array.from(unknownModels).join(', '));
169
- console.log(' Update pricing map in ~/.claude/commands/hydra/stats.md');
112
+ console.log(' Update PRICING map in ~/.claude/hooks/hydra-token-math.js');
170
113
  }
171
114
  "
172
115
  ```
@@ -177,9 +120,7 @@ Print the output exactly as the script emits. Do not summarize or reformat.
177
120
 
178
121
  ## Notes
179
122
 
180
- - `All-Opus baseline` is the hypothetical cost if every turn (including
181
- Haiku and Sonnet ones) had been Opus. The savings show what Hydra's model
182
- routing actually saved this session.
183
- - Stats are session-scoped. Future versions may add `--all` and `--since`.
184
- - Cache-read pricing is 10% of input price (Anthropic prompt-caching rate
185
- for Claude 4.x as of 2026-05).
123
+ - `All-Opus baseline` (or `Was:`) is hypothetical cost if every turn had been Opus.
124
+ - Stats are session-scoped.
125
+ - Cache-read pricing is 10% of input price (Anthropic prompt-caching rate, Claude 4.x, 2026-05).
126
+ - Strikethrough auto-detected from terminal env. Override: `HYDRA_STRIKETHROUGH=0` or `=1`.
@@ -1,85 +1,85 @@
1
- ---
2
- description: Show Hydra framework status — installed agents, version, config, and update availability
3
- allowed-tools: Bash, Read, Glob
4
- ---
5
-
6
- # Hydra Status
7
-
8
- Show a comprehensive status report for the Hydra framework.
9
-
10
- ## 1. Version Info
11
- ```bash
12
- INSTALLED=$(cat ~/.claude/skills/hydra/VERSION 2>/dev/null || echo "unknown")
13
- echo "Installed: $INSTALLED"
14
- LATEST=$(npm view hail-hydra-cc version 2>/dev/null || echo "unknown")
15
- echo "Latest: $LATEST"
16
- ```
17
-
18
- ## 2. Installed Agents
19
- ```bash
20
- echo "=== Global Agents ==="
21
- ls -1 ~/.claude/agents/hydra-*.md 2>/dev/null || echo "None found"
22
- echo "=== Local Agents ==="
23
- ls -1 .claude/agents/hydra-*.md 2>/dev/null || echo "None found"
24
- ```
25
-
26
- ## 3. Installed Commands
27
- ```bash
28
- echo "=== Global Commands ==="
29
- ls -1 ~/.claude/commands/hydra/*.md 2>/dev/null || echo "None found"
30
- echo "=== Local Commands ==="
31
- ls -1 .claude/commands/hydra/*.md 2>/dev/null || echo "None found"
32
- ```
33
-
34
- ## 4. Hooks
35
- ```bash
36
- ls -1 ~/.claude/hooks/hydra-*.js 2>/dev/null || echo "None found"
37
- ```
38
-
39
- ## 5. Configuration
40
- ```bash
41
- cat ~/.claude/skills/hydra/config/hydra.config.md 2>/dev/null || \
42
- cat .claude/skills/hydra/config/hydra.config.md 2>/dev/null || \
43
- echo "No config file found (using defaults)"
44
- ```
45
-
46
- ## 6. Codebase Map
47
- ```bash
48
- if [ -f ".claude/hydra/codebase-map.json" ]; then
49
- echo "Map: ✅ Exists"
50
- node -e "const m=JSON.parse(require('fs').readFileSync('.claude/hydra/codebase-map.json','utf8'));console.log('Files:',m._meta.file_count);console.log('Built:',m._meta.built_at);console.log('Hash:',m._meta.git_hash);"
51
- else
52
- echo "Map: ❌ Not built yet (run /hydra:map rebuild)"
53
- fi
54
- ```
55
-
56
- ## Display Format
57
-
58
- Present results as a clean status card:
59
-
60
- ```
61
- 🐉 Hydra Framework Status
62
- ──────────────────────────────
63
- Version: 1.0.0 (latest: 1.0.0 ✅) OR (update available: 1.1.0 ⚡)
64
- Install: Global (~/.claude/)
65
- Agents (7):
66
- 🟢 hydra-scout (Haiku 4.5) ✅
67
- 🟢 hydra-runner (Haiku 4.5) ✅
68
- 🟢 hydra-scribe (Haiku 4.5) ✅
69
- 🟢 hydra-guard (Haiku 4.5) ✅
70
- 🟢 hydra-git (Haiku 4.5) ✅
71
- 🔵 hydra-coder (Sonnet 4.6) ✅
72
- 🔵 hydra-analyst (Sonnet 4.6) ✅
73
- Commands (9): update, status, help, config, guard, quiet, verbose, report, map
74
- Hooks (4): check-update ✅, statusline ✅, auto-guard ✅, notify ✅
75
- Map: ✅ Current (487 files, built 2026-03-26)
76
- Config: balanced mode, dispatch log on, auto-guard on
77
- ──────────────────────────────
78
- ```
79
-
80
- If an update is available, add:
81
- ```
82
- ⚡ Update available! Run /hydra:update to get the latest version.
83
- ```
84
-
85
- For detailed token usage and savings, run: `/hydra:stats`
1
+ ---
2
+ description: Show Hydra framework status — installed agents, version, config, and update availability
3
+ allowed-tools: Bash, Read, Glob
4
+ ---
5
+
6
+ # Hydra Status
7
+
8
+ Show a comprehensive status report for the Hydra framework.
9
+
10
+ ## 1. Version Info
11
+ ```bash
12
+ INSTALLED=$(cat ~/.claude/skills/hydra/VERSION 2>/dev/null || echo "unknown")
13
+ echo "Installed: $INSTALLED"
14
+ LATEST=$(npm view hail-hydra-cc version 2>/dev/null || echo "unknown")
15
+ echo "Latest: $LATEST"
16
+ ```
17
+
18
+ ## 2. Installed Agents
19
+ ```bash
20
+ echo "=== Global Agents ==="
21
+ ls -1 ~/.claude/agents/hydra-*.md 2>/dev/null || echo "None found"
22
+ echo "=== Local Agents ==="
23
+ ls -1 .claude/agents/hydra-*.md 2>/dev/null || echo "None found"
24
+ ```
25
+
26
+ ## 3. Installed Commands
27
+ ```bash
28
+ echo "=== Global Commands ==="
29
+ ls -1 ~/.claude/commands/hydra/*.md 2>/dev/null || echo "None found"
30
+ echo "=== Local Commands ==="
31
+ ls -1 .claude/commands/hydra/*.md 2>/dev/null || echo "None found"
32
+ ```
33
+
34
+ ## 4. Hooks
35
+ ```bash
36
+ ls -1 ~/.claude/hooks/hydra-*.js 2>/dev/null || echo "None found"
37
+ ```
38
+
39
+ ## 5. Configuration
40
+ ```bash
41
+ cat ~/.claude/skills/hydra/config/hydra.config.md 2>/dev/null || \
42
+ cat .claude/skills/hydra/config/hydra.config.md 2>/dev/null || \
43
+ echo "No config file found (using defaults)"
44
+ ```
45
+
46
+ ## 6. Codebase Map
47
+ ```bash
48
+ if [ -f ".claude/hydra/codebase-map.json" ]; then
49
+ echo "Map: ✅ Exists"
50
+ node -e "const m=JSON.parse(require('fs').readFileSync('.claude/hydra/codebase-map.json','utf8'));console.log('Files:',m._meta.file_count);console.log('Built:',m._meta.built_at);console.log('Hash:',m._meta.git_hash);"
51
+ else
52
+ echo "Map: ❌ Not built yet (run /hydra:map rebuild)"
53
+ fi
54
+ ```
55
+
56
+ ## Display Format
57
+
58
+ Present results as a clean status card:
59
+
60
+ ```
61
+ 🐉 Hydra Framework Status
62
+ ──────────────────────────────
63
+ Version: 1.0.0 (latest: 1.0.0 ✅) OR (update available: 1.1.0 ⚡)
64
+ Install: Global (~/.claude/)
65
+ Agents (7):
66
+ 🟢 hydra-scout (Haiku 4.5) ✅
67
+ 🟢 hydra-runner (Haiku 4.5) ✅
68
+ 🟢 hydra-scribe (Haiku 4.5) ✅
69
+ 🟢 hydra-guard (Haiku 4.5) ✅
70
+ 🟢 hydra-git (Haiku 4.5) ✅
71
+ 🔵 hydra-coder (Sonnet 4.6) ✅
72
+ 🔵 hydra-analyst (Sonnet 4.6) ✅
73
+ Commands (12): update, status, help, config, guard, quiet, verbose, report, map, preflight, stats, stfu
74
+ Hooks (4): check-update ✅, statusline ✅, auto-guard ✅, notify ✅
75
+ Map: ✅ Current (487 files, built 2026-03-26)
76
+ Config: balanced mode, dispatch log on, auto-guard on
77
+ ──────────────────────────────
78
+ ```
79
+
80
+ If an update is available, add:
81
+ ```
82
+ ⚡ Update available! Run /hydra:update to get the latest version.
83
+ ```
84
+
85
+ For detailed token usage and savings, run: `/hydra:stats`
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Activate STFU-Agents mode — silence intermediate prose from every dispatched subagent
3
+ allowed-tools: Read
4
+ ---
5
+
6
+ # Hydra STFU Mode
7
+
8
+ Activate the STFU-Agents skill for this session.
9
+
10
+ Acknowledge with:
11
+ "🐉 STFU-Agents mode activated. All dispatched subagents will run with compressed internal thinking. Final outputs unchanged. Run `/skills` to deactivate or say 'verbose agents'."
12
+
13
+ From this point in the session, when dispatching ANY subagent via the Task tool, prepend the internal-compression directive defined in `skills/stfu-agents/SKILL.md` to the task description.
14
+
15
+ Applies until:
16
+ - Session ends
17
+ - User says "verbose agents" / "stop STFU"
18
+ - A conflicting skill is invoked
19
+
20
+ ## Why
21
+ Subagents generate intermediate prose that's billed by Anthropic but never read. Final summary is the only thing returned to Opus. STFU tells every dispatched subagent to skip narration — same final output, fewer billed tokens. Universal scope: any subagent in the session, regardless of source.
@@ -1,29 +1,29 @@
1
- ---
2
- description: Enable verbose Hydra dispatch logs with timing and token estimates
3
- ---
4
-
5
- # Hydra Verbose Mode
6
-
7
- Acknowledge this command and remember for the rest of this session:
8
-
9
- **Display DETAILED Hydra Dispatch Logs after every task that involves delegation.**
10
-
11
- The verbose log includes extra columns for timing:
12
-
13
- ```
14
- 🐉 Hydra Dispatch Log (verbose)
15
- | Step | Agent | Task | Time | Verdict |
16
- |------|---------------------|-----------------------|-------|-------------|
17
- | 1 | hydra-scout (Haiku 4.5) | Explored auth module | 3.2s | ✅ Accepted |
18
- | 2 | hydra-coder (Sonnet 4.6) | Fixed null check | 8.1s | ✅ Accepted |
19
- | 3 | hydra-guard (Haiku 4.5) | Security scan | 1.4s | ✅ Passed |
20
- | 4 | hydra-runner (Haiku 4.5) | Ran test suite | 4.7s | ✅ Accepted |
21
-
22
- Delegation: 4/4 (100%) | Accepted: 4 | Adjusted: 0 | Rejected: 0
23
- Total delegation time: 17.4s | Waves: 2
24
- ```
25
-
26
- Respond with:
27
- "🐉 Verbose mode enabled. Dispatch logs will include timing details. Use /hydra:quiet to suppress."
28
-
29
- Re-enable the task completion notification sound.
1
+ ---
2
+ description: Enable verbose Hydra dispatch logs with timing and token estimates
3
+ ---
4
+
5
+ # Hydra Verbose Mode
6
+
7
+ Acknowledge this command and remember for the rest of this session:
8
+
9
+ **Display DETAILED Hydra Dispatch Logs after every task that involves delegation.**
10
+
11
+ The verbose log includes extra columns for timing:
12
+
13
+ ```
14
+ 🐉 Hydra Dispatch Log (verbose)
15
+ | Step | Agent | Task | Time | Verdict |
16
+ |------|---------------------|-----------------------|-------|-------------|
17
+ | 1 | hydra-scout (Haiku 4.5) | Explored auth module | 3.2s | ✅ Accepted |
18
+ | 2 | hydra-coder (Sonnet 4.6) | Fixed null check | 8.1s | ✅ Accepted |
19
+ | 3 | hydra-guard (Haiku 4.5) | Security scan | 1.4s | ✅ Passed |
20
+ | 4 | hydra-runner (Haiku 4.5) | Ran test suite | 4.7s | ✅ Accepted |
21
+
22
+ Delegation: 4/4 (100%) | Accepted: 4 | Adjusted: 0 | Rejected: 0
23
+ Total delegation time: 17.4s | Waves: 2
24
+ ```
25
+
26
+ Respond with:
27
+ "🐉 Verbose mode enabled. Dispatch logs will include timing details. Use /hydra:quiet to suppress."
28
+
29
+ Re-enable the task completion notification sound.