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.
- package/README.md +99 -99
- package/bin/cli.js +105 -105
- package/files/SKILL.md +1217 -1174
- package/files/agents/hydra-analyst.md +159 -145
- package/files/agents/hydra-coder.md +137 -123
- package/files/agents/hydra-git.md +148 -130
- package/files/agents/hydra-guard.md +153 -135
- package/files/agents/hydra-preflight.md +22 -0
- package/files/agents/hydra-runner.md +107 -93
- package/files/agents/hydra-scout.md +241 -227
- package/files/agents/hydra-scribe.md +98 -84
- package/files/agents/hydra-sentinel-scan.md +242 -236
- package/files/agents/hydra-sentinel.md +210 -192
- package/files/commands/hydra/config.md +37 -37
- package/files/commands/hydra/guard.md +71 -71
- package/files/commands/hydra/help.md +47 -46
- package/files/commands/hydra/quiet.md +16 -16
- package/files/commands/hydra/stats.md +62 -121
- package/files/commands/hydra/status.md +85 -85
- package/files/commands/hydra/stfu.md +21 -0
- package/files/commands/hydra/verbose.md +29 -29
- package/files/hooks/hydra-auto-guard.js +54 -54
- package/files/hooks/hydra-check-update.js +99 -99
- package/files/hooks/hydra-statusline.js +128 -94
- package/files/hooks/hydra-token-math.js +163 -0
- package/files/references/model-capabilities.md +164 -164
- package/files/references/routing-guide.md +303 -303
- package/files/skills/stfu-agents/SKILL.md +59 -0
- package/package.json +1 -1
- package/src/files.js +106 -105
- package/src/installer.js +393 -393
- package/src/prompts.js +80 -80
|
@@ -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
|
-
|
|
26
|
-
|
|
27
|
-
🟢 hydra-
|
|
28
|
-
🟢 hydra-
|
|
29
|
-
🟢 hydra-
|
|
30
|
-
🟢 hydra-
|
|
31
|
-
🟢 hydra-
|
|
32
|
-
|
|
33
|
-
🔵 hydra-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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 `
|
|
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
|
-
|
|
40
|
-
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
console.log('
|
|
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
|
-
|
|
53
|
-
|
|
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
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
const
|
|
85
|
-
'
|
|
86
|
-
|
|
87
|
-
|
|
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: ' +
|
|
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 →
|
|
154
|
-
console.log('🔵 Sonnet (' + stats.sonnet.turns + ' turns): ' + fmt(stats.sonnet.input + stats.sonnet.cache_create) + ' in / ' + fmt(stats.sonnet.output) + ' out →
|
|
155
|
-
console.log('🟣 Opus (' + stats.opus.turns + ' turns): ' + fmt(stats.opus.input + stats.opus.cache_create) + ' in / ' + fmt(stats.opus.output) + ' out →
|
|
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) + '% (' +
|
|
159
|
-
|
|
160
|
-
|
|
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:
|
|
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
|
|
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
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
-
|
|
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 (
|
|
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.
|