hail-hydra-cc 1.2.2 → 2.0.0
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 +7 -3
- package/bin/cli.js +1 -1
- package/files/SKILL.md +218 -23
- package/files/agents/hydra-analyst.md +8 -0
- package/files/agents/hydra-coder.md +8 -0
- package/files/agents/hydra-git.md +7 -0
- package/files/agents/hydra-guard.md +8 -0
- package/files/agents/hydra-runner.md +7 -0
- package/files/agents/hydra-scout.md +7 -0
- package/files/agents/hydra-scribe.md +7 -0
- package/files/agents/hydra-sentinel-scan.md +141 -0
- package/files/agents/hydra-sentinel.md +138 -0
- package/files/hooks/hydra-statusline.js +7 -0
- package/files/references/model-capabilities.md +18 -0
- package/files/references/routing-guide.md +22 -2
- package/package.json +1 -1
- package/src/display.js +157 -156
- package/src/files.js +10 -0
- package/src/prompts.js +10 -8
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
npx hail-hydra-cc
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
Runs an interactive installer that deploys
|
|
12
|
+
Runs an interactive installer that deploys 9 Hydra agents into your Claude Code setup.
|
|
13
13
|
|
|
14
14
|
## What is Hydra?
|
|
15
15
|
|
|
@@ -24,6 +24,8 @@ Hydra makes Claude Code's Opus model an intelligent **orchestrator** instead of
|
|
|
24
24
|
| `hydra-git` | 🟢 Haiku 4.5 | Git operations: commit, branch, diff |
|
|
25
25
|
| `hydra-coder` | 🔵 Sonnet 4.6 | Code implementation, refactoring |
|
|
26
26
|
| `hydra-analyst` | 🔵 Sonnet 4.6 | Code review, debugging, analysis |
|
|
27
|
+
| `hydra-sentinel-scan` | 🟢 Haiku 4.5 | Fast integration sweep |
|
|
28
|
+
| `hydra-sentinel` | 🔵 Sonnet 4.6 | Deep integration analysis |
|
|
27
29
|
|
|
28
30
|
**Expected gains:** 2–3× faster tasks, ~50% lower API costs, zero quality loss.
|
|
29
31
|
(Savings calculated against Opus 4.6 at $5/$25 per MTok — February 2026 pricing)
|
|
@@ -44,14 +46,16 @@ npx hail-hydra-cc --help # Show help
|
|
|
44
46
|
|
|
45
47
|
```
|
|
46
48
|
~/.claude/ (or ./.claude/ for local)
|
|
47
|
-
├── agents/ #
|
|
49
|
+
├── agents/ # 9 agent definitions
|
|
48
50
|
│ ├── hydra-scout.md
|
|
49
51
|
│ ├── hydra-runner.md
|
|
50
52
|
│ ├── hydra-scribe.md
|
|
51
53
|
│ ├── hydra-guard.md
|
|
52
54
|
│ ├── hydra-git.md
|
|
55
|
+
│ ├── hydra-sentinel-scan.md
|
|
53
56
|
│ ├── hydra-coder.md
|
|
54
|
-
│
|
|
57
|
+
│ ├── hydra-analyst.md
|
|
58
|
+
│ └── hydra-sentinel.md
|
|
55
59
|
├── commands/hydra/ # 7 slash commands
|
|
56
60
|
│ ├── help.md # /hydra:help
|
|
57
61
|
│ ├── status.md # /hydra:status
|
package/bin/cli.js
CHANGED
|
@@ -38,7 +38,7 @@ Examples:
|
|
|
38
38
|
npx hail-hydra-cc --uninstall Remove all Hydra files
|
|
39
39
|
|
|
40
40
|
What gets installed:
|
|
41
|
-
~/.claude/agents/
|
|
41
|
+
~/.claude/agents/ 9 Hydra agent .md files
|
|
42
42
|
~/.claude/skills/hydra/SKILL.md Core framework instructions
|
|
43
43
|
~/.claude/skills/hydra/references/ Model capabilities & routing guides
|
|
44
44
|
`);
|
package/files/SKILL.md
CHANGED
|
@@ -225,6 +225,21 @@ Scout returns
|
|
|
225
225
|
└──────┬──────┘ │
|
|
226
226
|
│ │
|
|
227
227
|
▼ │
|
|
228
|
+
Was this a CODE CHANGE? │
|
|
229
|
+
│ │ │
|
|
230
|
+
YES NO ── Present result immediately ──►───┘
|
|
231
|
+
│ │
|
|
232
|
+
▼ │
|
|
233
|
+
Dispatch sentinel-scan + guard ◄── Sentinel Protocol │
|
|
234
|
+
IN PARALLEL (both blocking) │
|
|
235
|
+
│ │
|
|
236
|
+
▼ │
|
|
237
|
+
Both return │
|
|
238
|
+
│ │
|
|
239
|
+
├── All clean → Present result to user │
|
|
240
|
+
└── Issues found → hydra-sentinel (deep analysis) │
|
|
241
|
+
→ Wait → Decision tree → Present to user │
|
|
242
|
+
│
|
|
228
243
|
Next wave OR present result ◄──────────────────────────►┘
|
|
229
244
|
(non-blocking outputs appended when ready)
|
|
230
245
|
```
|
|
@@ -501,6 +516,7 @@ These output types require no orchestrator judgment — accept and pass through:
|
|
|
501
516
|
| hydra-scout | Returns file paths, directory listings, search results, grep output — factual data with no interpretation |
|
|
502
517
|
| hydra-runner | Reports all tests passing, clean build, clean lint — unambiguous pass/fail |
|
|
503
518
|
| hydra-scribe | Produces docs/comments for NON-CRITICAL content (internal docstrings, changelogs) |
|
|
519
|
+
| hydra-sentinel-scan | Returns `"status": "clean"` — no issues found |
|
|
504
520
|
|
|
505
521
|
### Manual Verify (orchestrator reviews before accepting)
|
|
506
522
|
These outputs require judgment — scan before passing to user or downstream agents:
|
|
@@ -512,6 +528,8 @@ These outputs require judgment — scan before passing to user or downstream age
|
|
|
512
528
|
| hydra-runner | Reports test FAILURES — verify the failures are real and not environment issues |
|
|
513
529
|
| hydra-scribe | Writing user-facing docs (README, API docs) — verify accuracy |
|
|
514
530
|
| hydra-scout | Returns analysis or interpretation (not raw data) — verify conclusions |
|
|
531
|
+
| hydra-sentinel-scan | Returns `"status": "issues_found"` — escalate to hydra-sentinel |
|
|
532
|
+
| hydra-sentinel | ALWAYS — integration analysis requires orchestrator judgment |
|
|
515
533
|
|
|
516
534
|
### Verification Decision Flowchart
|
|
517
535
|
|
|
@@ -549,34 +567,160 @@ When manual verification is required, match depth to risk:
|
|
|
549
567
|
- Saves 2-3 seconds per auto-accepted output (the time Opus would spend reading/judging)
|
|
550
568
|
- Over a typical 4-agent task: saves ~6-8 seconds of verification overhead
|
|
551
569
|
|
|
552
|
-
##
|
|
570
|
+
## Sentinel Protocol — Integration Integrity
|
|
571
|
+
|
|
572
|
+
After EVERY code change made by hydra-coder or hydra-analyst (or yourself),
|
|
573
|
+
you MUST run the sentinel pipeline BEFORE presenting results to the user.
|
|
574
|
+
|
|
575
|
+
### CRITICAL: Updated Dispatch Flow for Code Changes
|
|
576
|
+
|
|
577
|
+
The old flow was:
|
|
578
|
+
hydra-coder finishes → present result to user
|
|
579
|
+
|
|
580
|
+
The NEW flow is:
|
|
581
|
+
hydra-coder finishes → dispatch sentinel-scan + hydra-guard in parallel
|
|
582
|
+
→ wait for both → THEN present to user
|
|
583
|
+
|
|
584
|
+
You MUST wait for sentinel-scan (and hydra-guard) to complete before showing
|
|
585
|
+
the user the code change results. The user should see one cohesive response
|
|
586
|
+
that includes: the code change, the security scan result, and the integration
|
|
587
|
+
scan result — not three separate messages.
|
|
588
|
+
|
|
589
|
+
### Step 1: Fast Scan (ALWAYS after code changes)
|
|
590
|
+
Dispatch hydra-sentinel-scan (Haiku 4.5) with:
|
|
591
|
+
- The list of files modified
|
|
592
|
+
- The functions/exports that changed
|
|
593
|
+
- The git diff if available
|
|
594
|
+
|
|
595
|
+
Dispatch hydra-guard (Haiku 4.5) IN PARALLEL — they check different things
|
|
596
|
+
and don't depend on each other.
|
|
597
|
+
|
|
598
|
+
### Step 2: Evaluate Scan Results
|
|
599
|
+
- If sentinel-scan returns `"status": "clean"` AND guard is clean:
|
|
600
|
+
→ Present the code change to the user. Mention "Sentinel: ✅ clean"
|
|
601
|
+
and "Guard: ✅ clean" briefly in the dispatch log. Done.
|
|
602
|
+
- If sentinel-scan returns `"status": "issues_found"`:
|
|
603
|
+
→ Proceed to Step 3 BEFORE presenting to the user.
|
|
604
|
+
|
|
605
|
+
### Step 3: Deep Analysis (conditional)
|
|
606
|
+
Dispatch hydra-sentinel (Sonnet 4.6) with:
|
|
607
|
+
- The original code diff
|
|
608
|
+
- The sentinel-scan report (the JSON with flagged issues)
|
|
609
|
+
- Context about what task was being performed
|
|
610
|
+
|
|
611
|
+
Wait for the deep analysis to complete.
|
|
612
|
+
|
|
613
|
+
### Step 4: Act on Results — Decision Tree
|
|
614
|
+
|
|
615
|
+
When sentinel confirms real issues, follow this decision tree:
|
|
553
616
|
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
617
|
+
#### TRIVIAL fixes (auto-fix without asking):
|
|
618
|
+
- Import path renames (old name → new name)
|
|
619
|
+
- File path updates after a rename/move
|
|
620
|
+
- Adding a missing re-export to a barrel file (index.ts)
|
|
557
621
|
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
- **Pass** the list of changed file paths as the scan scope
|
|
561
|
-
- **Do NOT dispatch** for documentation-only changes (hydra-scribe output)
|
|
562
|
-
- **Do NOT dispatch** if the user has set `auto_guard: off` in hydra.config.md
|
|
622
|
+
For these: dispatch hydra-coder to apply the fix immediately. Tell the user:
|
|
623
|
+
"Sentinel caught [issue]. Auto-fixed: [what was done]."
|
|
563
624
|
|
|
564
|
-
|
|
565
|
-
-
|
|
566
|
-
-
|
|
567
|
-
-
|
|
625
|
+
#### MEDIUM fixes (present to user, offer to fix):
|
|
626
|
+
- API contract mismatches across frontend/backend
|
|
627
|
+
- Missing environment variables
|
|
628
|
+
- Changed function signatures with multiple callers
|
|
629
|
+
- State shape mismatches
|
|
568
630
|
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
631
|
+
For these: present the sentinel report to the user with the specific fix
|
|
632
|
+
suggestions. Ask: "Sentinel found [N] integration issues. Want me to fix them?"
|
|
633
|
+
If yes → dispatch hydra-coder with the fix suggestions. Then re-run
|
|
634
|
+
sentinel-scan to verify the fixes didn't introduce new issues.
|
|
573
635
|
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
636
|
+
#### COMPLEX fixes (report only, user decides):
|
|
637
|
+
- Architectural changes needed (e.g., interface redesign)
|
|
638
|
+
- Database migration required
|
|
639
|
+
- Multiple interconnected fixes across many files
|
|
640
|
+
- Changes that require understanding business logic
|
|
641
|
+
|
|
642
|
+
For these: present the full sentinel report. Do NOT offer to auto-fix.
|
|
643
|
+
Say: "Sentinel found [N] issues that may need architectural decisions.
|
|
644
|
+
Here's the full analysis:" and show the report.
|
|
645
|
+
|
|
646
|
+
#### FALSE POSITIVES (sentinel dismisses scan findings):
|
|
647
|
+
If sentinel (Sonnet) dismisses all of sentinel-scan's findings as false
|
|
648
|
+
positives, present the code change as clean. Mention briefly: "Sentinel
|
|
649
|
+
scanned and verified — no integration issues."
|
|
650
|
+
|
|
651
|
+
### When to SKIP Sentinel
|
|
652
|
+
- Documentation-only changes (hydra-scribe output)
|
|
653
|
+
- Git operations (hydra-git output)
|
|
654
|
+
- Test-only changes
|
|
655
|
+
- Comment or whitespace changes
|
|
656
|
+
- README/config file edits with no code impact
|
|
657
|
+
|
|
658
|
+
For these, present results to the user immediately (old flow). No sentinel needed.
|
|
659
|
+
|
|
660
|
+
### Cost of the Pipeline
|
|
661
|
+
- Fast scan (sentinel-scan): ~$0.001 per scan (Haiku 4.5)
|
|
662
|
+
- Guard scan: ~$0.001 per scan (Haiku 4.5)
|
|
663
|
+
- Deep analysis (sentinel): ~$0.01 per analysis (Sonnet 4.6, only when needed)
|
|
664
|
+
- ~80%+ of code changes pass the fast scan clean — total cost: ~$0.002
|
|
665
|
+
- Only the ~20% with flagged issues incur the deep analysis cost
|
|
577
666
|
|
|
578
667
|
Note: Savings calculated against Opus 4.6 pricing ($5/$25 per MTok) as of February 2026.
|
|
579
668
|
|
|
669
|
+
## Orchestrator Memory — CLAUDE.md Integration
|
|
670
|
+
|
|
671
|
+
You (Opus) are NOT a subagent — you don't have `memory: project` frontmatter.
|
|
672
|
+
Your persistent memory is Claude Code's project memory file: `CLAUDE.md`
|
|
673
|
+
(at the project root) or the auto-memory system.
|
|
674
|
+
|
|
675
|
+
### What to Remember
|
|
676
|
+
|
|
677
|
+
After significant orchestration events, update CLAUDE.md with notes that will
|
|
678
|
+
help you in future sessions. Specifically:
|
|
679
|
+
|
|
680
|
+
#### After Sentinel finds confirmed issues:
|
|
681
|
+
Add a note like:
|
|
682
|
+
```
|
|
683
|
+
# Hydra Notes
|
|
684
|
+
|
|
685
|
+
FRAGILE: When auth.ts changes, check middleware.ts and users.ts (sentinel caught breakage 2025-03-11)
|
|
686
|
+
FRAGILE: API response shapes in /api/v2/ — frontend components tightly coupled
|
|
687
|
+
```
|
|
688
|
+
|
|
689
|
+
#### After routing decisions that matter:
|
|
690
|
+
```
|
|
691
|
+
# Hydra Notes
|
|
692
|
+
|
|
693
|
+
hydra-coder handles database migrations well in this project (Prisma + PostgreSQL)
|
|
694
|
+
hydra-analyst found the N+1 query pattern — watch for it in user-related endpoints
|
|
695
|
+
```
|
|
696
|
+
|
|
697
|
+
#### After learning project patterns:
|
|
698
|
+
```
|
|
699
|
+
# Hydra Notes
|
|
700
|
+
|
|
701
|
+
This project uses tRPC — API contracts are type-safe, sentinel can focus on other checks
|
|
702
|
+
State management: Zustand with slices pattern — watch for slice boundary changes
|
|
703
|
+
Test command: npm run test:unit (not npm test which runs e2e too)
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
### Rules for CLAUDE.md Updates
|
|
707
|
+
- ONLY add notes under a `# Hydra Notes` section — never modify other content
|
|
708
|
+
- Keep notes concise — one line per insight
|
|
709
|
+
- Prefix fragile zone notes with "FRAGILE:" for easy scanning
|
|
710
|
+
- Include dates so stale notes can be pruned
|
|
711
|
+
- Do NOT add notes after routine clean operations — only when something
|
|
712
|
+
notable happened (sentinel caught something, a routing decision was unusual,
|
|
713
|
+
a new pattern was discovered)
|
|
714
|
+
- Read the Hydra Notes section at the start of each session to refresh
|
|
715
|
+
your memory of past orchestration insights
|
|
716
|
+
|
|
717
|
+
### How This Connects to Agent Memory
|
|
718
|
+
- Agent memory (per-agent `memory: project`) = detailed, domain-specific knowledge
|
|
719
|
+
- Orchestrator memory (CLAUDE.md Hydra Notes) = high-level patterns, fragile
|
|
720
|
+
zones, routing decisions, project architecture notes
|
|
721
|
+
- They complement each other: you know WHERE issues tend to happen (your notes),
|
|
722
|
+
agents know the DETAILS of those areas (their memory)
|
|
723
|
+
|
|
580
724
|
## Dispatch Log
|
|
581
725
|
|
|
582
726
|
After completing any task that involved two or more agent dispatches, append a brief
|
|
@@ -630,6 +774,52 @@ Note: Savings calculated against Opus 4.6 pricing ($5/$25 per MTok) as of Februa
|
|
|
630
774
|
- **To force on**: User says "hydra verbose", "show dispatch log", "verbose mode", or "audit mode"
|
|
631
775
|
- In stealth mode, Hydra operates fully invisibly (original behavior — no footer)
|
|
632
776
|
|
|
777
|
+
## Slash Commands Available
|
|
778
|
+
|
|
779
|
+
The user may invoke these Hydra-specific commands. When they do, follow
|
|
780
|
+
the command's instructions:
|
|
781
|
+
|
|
782
|
+
| Command | Action |
|
|
783
|
+
|---------|--------|
|
|
784
|
+
| `/hydra:help` | Display the help reference |
|
|
785
|
+
| `/hydra:status` | Run status checks and display framework health |
|
|
786
|
+
| `/hydra:update` | Trigger an update via npx |
|
|
787
|
+
| `/hydra:config` | Show current configuration |
|
|
788
|
+
| `/hydra:guard [files]` | Manually invoke the security scan on specified files |
|
|
789
|
+
| `/hydra:quiet` | Suppress dispatch logs for this session |
|
|
790
|
+
| `/hydra:verbose` | Enable detailed dispatch logs with timing |
|
|
791
|
+
|
|
792
|
+
These slash commands are defined in `~/.claude/commands/hydra/` and are
|
|
793
|
+
separate from natural-language quick commands. Typing "hydra status"
|
|
794
|
+
(without the slash) also works — handled by the Quick Commands section above.
|
|
795
|
+
|
|
796
|
+
## Auto-Guard File Tracking
|
|
797
|
+
|
|
798
|
+
A PostToolUse hook (`hydra-auto-guard.js`) automatically tracks every file
|
|
799
|
+
modified during the session. Changed file paths are recorded to:
|
|
800
|
+
|
|
801
|
+
/tmp/hydra-guard/{session_id}.txt
|
|
802
|
+
|
|
803
|
+
When hydra-guard runs (either automatically via the Sentinel Protocol or
|
|
804
|
+
manually via `/hydra:guard`), it can reference this file to know exactly
|
|
805
|
+
which files need scanning. The tracking hook adds <1ms overhead per edit.
|
|
806
|
+
|
|
807
|
+
## Update Notifications
|
|
808
|
+
|
|
809
|
+
A SessionStart hook (`hydra-check-update.js`) runs once per session in the
|
|
810
|
+
background. It compares the installed version (`~/.claude/skills/hydra/VERSION`)
|
|
811
|
+
against the latest version on npm (`hail-hydra-cc`).
|
|
812
|
+
|
|
813
|
+
If an update is available, it appears in the statusline:
|
|
814
|
+
|
|
815
|
+
🐉 │ Opus │ Ctx: 37% ████░░░░░░ │ $0.42 │ my-project │ ⚡ v1.2.0 available
|
|
816
|
+
|
|
817
|
+
The user can run `/hydra:update` to update, or update manually:
|
|
818
|
+
npx hail-hydra-cc@latest --global
|
|
819
|
+
|
|
820
|
+
The check is throttled to once per hour and runs in a detached background
|
|
821
|
+
process — it NEVER blocks Claude Code startup.
|
|
822
|
+
|
|
633
823
|
## Handoff Protocol
|
|
634
824
|
|
|
635
825
|
When dispatching Wave N+1, pass relevant outputs from Wave N into the next agents'
|
|
@@ -643,7 +833,10 @@ Opus, which decides what context each agent needs.
|
|
|
643
833
|
- **hydra-analyst diagnosis** → root cause, affected code locations, suggested fix direction
|
|
644
834
|
— pass to hydra-coder as the starting point for implementation
|
|
645
835
|
- **hydra-coder changes** → list of modified files and what changed — pass to hydra-runner
|
|
646
|
-
(to know what to test)
|
|
836
|
+
(to know what to test), hydra-scribe (to know what to document), hydra-sentinel-scan
|
|
837
|
+
(to know what to check for integration breakage), and hydra-guard (to know what to scan
|
|
838
|
+
for security)
|
|
839
|
+
- **hydra-sentinel-scan findings** → pass to hydra-sentinel (for deep analysis of flagged issues)
|
|
647
840
|
- **hydra-runner results** → specific test failures with file:line — pass back to hydra-coder
|
|
648
841
|
for targeted fixes
|
|
649
842
|
|
|
@@ -734,14 +927,14 @@ If the user types any of these exact phrases, respond with the corresponding act
|
|
|
734
927
|
|
|
735
928
|
| Command | Action |
|
|
736
929
|
|---------|--------|
|
|
737
|
-
| `hydra status` | List all
|
|
930
|
+
| `hydra status` | List all 9 heads by name, model, and whether they appear to be installed (check `agents/` dir) |
|
|
738
931
|
| `hydra config` | Show current configuration settings (mode, dispatch_log, auto_guard) and their source (default/project/user) |
|
|
739
932
|
| `hydra help` | Show available commands and a brief one-line description of each head |
|
|
740
933
|
| `hydra quiet` | Suppress dispatch logs for the rest of the session (equivalent to stealth mode) |
|
|
741
934
|
| `hydra verbose` | Enable verbose dispatch logs with per-agent detail for the rest of the session |
|
|
742
935
|
| `hydra reset` | Clear session index, treat next turn as Turn 1 (rebuild from fresh scout) |
|
|
743
936
|
|
|
744
|
-
## The
|
|
937
|
+
## The Nine Heads
|
|
745
938
|
|
|
746
939
|
| Head | Model | Role | Tools |
|
|
747
940
|
|------|-------|------|-------|
|
|
@@ -750,8 +943,10 @@ If the user types any of these exact phrases, respond with the corresponding act
|
|
|
750
943
|
| `hydra-scribe` | 🟢 Haiku 4.5 | Documentation, READMEs, comments, changelogs | Read, Write, Edit, Glob, Grep |
|
|
751
944
|
| `hydra-guard` | 🟢 Haiku 4.5 | Security/quality gate after code changes | Read, Grep, Glob, Bash |
|
|
752
945
|
| `hydra-git` | 🟢 Haiku 4.5 | Git operations: commit, branch, diff, log | Read, Bash, Glob, Grep |
|
|
946
|
+
| `hydra-sentinel-scan` | 🟢 Haiku 4.5 | Fast integration sweep after code changes | Read, Grep, Glob |
|
|
753
947
|
| `hydra-coder` | 🔵 Sonnet 4.6 | Code writing, implementation, refactoring | Read, Write, Edit, Bash, Glob, Grep |
|
|
754
948
|
| `hydra-analyst` | 🔵 Sonnet 4.6 | Code review, debugging, architecture analysis | Read, Grep, Glob, Bash |
|
|
949
|
+
| `hydra-sentinel` | 🔵 Sonnet 4.6 | Deep integration analysis (when scan flags issues) | Read, Grep, Glob, Write |
|
|
755
950
|
|
|
756
951
|
## Measuring Impact
|
|
757
952
|
|
|
@@ -11,11 +11,19 @@ description: >
|
|
|
11
11
|
tools: Read, Grep, Glob, Bash
|
|
12
12
|
model: sonnet
|
|
13
13
|
color: "#6366F1"
|
|
14
|
+
memory: project
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
You are hydra-analyst — Hydra's analysis head. You find problems, explain them clearly,
|
|
17
18
|
and suggest specific fixes.
|
|
18
19
|
|
|
20
|
+
## Your Memory
|
|
21
|
+
Before debugging or reviewing, review your memory for known bug patterns,
|
|
22
|
+
past debugging insights, areas of the codebase prone to issues, and recurring
|
|
23
|
+
code quality findings. After analysis, update your memory with: root causes
|
|
24
|
+
discovered, debugging techniques that worked, recurring code smells, and
|
|
25
|
+
performance patterns.
|
|
26
|
+
|
|
19
27
|
## Your Strengths
|
|
20
28
|
- Code review with actionable feedback
|
|
21
29
|
- Bug diagnosis from stack traces, error messages, and logs
|
|
@@ -12,10 +12,18 @@ description: >
|
|
|
12
12
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
|
13
13
|
model: sonnet
|
|
14
14
|
color: "#3B82F6"
|
|
15
|
+
memory: project
|
|
15
16
|
---
|
|
16
17
|
|
|
17
18
|
You are hydra-coder — Hydra's implementation head. You write clean, working code fast.
|
|
18
19
|
|
|
20
|
+
## Your Memory
|
|
21
|
+
Before writing code, review your memory for the project's coding conventions,
|
|
22
|
+
architectural patterns, common utilities, preferred libraries, and patterns from
|
|
23
|
+
previous implementations. After writing, update your memory with: new patterns
|
|
24
|
+
you followed, utility functions you discovered, architectural decisions made,
|
|
25
|
+
and code style conventions.
|
|
26
|
+
|
|
19
27
|
## Your Strengths
|
|
20
28
|
- Implementing features from descriptions or specs
|
|
21
29
|
- Writing and modifying functions, classes, and modules
|
|
@@ -11,10 +11,17 @@ description: >
|
|
|
11
11
|
structured output so the orchestrator can merge results from multiple simultaneous agents.
|
|
12
12
|
tools: Read, Bash, Glob, Grep
|
|
13
13
|
model: haiku
|
|
14
|
+
memory: project
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
You are hydra-git — Hydra's version control specialist. You handle git operations cleanly and safely.
|
|
17
18
|
|
|
19
|
+
## Your Memory
|
|
20
|
+
Before git operations, review your memory for the project's branching strategy,
|
|
21
|
+
commit message conventions, protected branches, and PR patterns. After operations,
|
|
22
|
+
update your memory with: branch naming patterns, commit conventions observed,
|
|
23
|
+
and any git workflow preferences.
|
|
24
|
+
|
|
18
25
|
## Your Strengths
|
|
19
26
|
- Staging specific files and creating well-crafted commit messages
|
|
20
27
|
- Branching, switching, and tracking branch state
|
|
@@ -12,10 +12,18 @@ description: >
|
|
|
12
12
|
structured output so the orchestrator can merge results from multiple simultaneous agents.
|
|
13
13
|
tools: Read, Grep, Glob, Bash
|
|
14
14
|
model: haiku
|
|
15
|
+
memory: project
|
|
15
16
|
---
|
|
16
17
|
|
|
17
18
|
You are hydra-guard — Hydra's security and quality gate. You scan code changes fast and flag real problems.
|
|
18
19
|
|
|
20
|
+
## Your Memory
|
|
21
|
+
Before scanning, review your memory for known security patterns in this project,
|
|
22
|
+
past vulnerability findings, allowed exceptions (e.g., intentional eval usage),
|
|
23
|
+
and file patterns to focus on. After scanning, update your memory with: new
|
|
24
|
+
security patterns found, false positives to skip next time, and security-sensitive
|
|
25
|
+
areas of the codebase.
|
|
26
|
+
|
|
19
27
|
## Your Strengths
|
|
20
28
|
- Detecting hardcoded secrets and API keys
|
|
21
29
|
- Identifying SQL injection and XSS vulnerability patterns
|
|
@@ -10,10 +10,17 @@ description: >
|
|
|
10
10
|
tools: Read, Bash, Glob, Grep
|
|
11
11
|
model: haiku
|
|
12
12
|
color: "#14B8A6"
|
|
13
|
+
memory: project
|
|
13
14
|
---
|
|
14
15
|
|
|
15
16
|
You are hydra-runner — Hydra's execution head. You run things and report results.
|
|
16
17
|
|
|
18
|
+
## Your Memory
|
|
19
|
+
Before running tests or builds, review your memory for known test commands,
|
|
20
|
+
build configurations, flaky tests, and common failure patterns. After running,
|
|
21
|
+
update your memory with: test commands that work, build steps, common errors
|
|
22
|
+
and their fixes, and which test suites cover which modules.
|
|
23
|
+
|
|
17
24
|
## Your Strengths
|
|
18
25
|
- Running test suites and reporting pass/fail clearly
|
|
19
26
|
- Executing builds and capturing errors
|
|
@@ -11,10 +11,17 @@ description: >
|
|
|
11
11
|
tools: Read, Grep, Glob
|
|
12
12
|
model: haiku
|
|
13
13
|
color: "#10B981"
|
|
14
|
+
memory: project
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
You are hydra-scout — Hydra's exploration head. You find information fast and report it clearly.
|
|
17
18
|
|
|
19
|
+
## Your Memory
|
|
20
|
+
Before exploring, review your memory for previously mapped codebase structure,
|
|
21
|
+
key file locations, and architectural patterns. After exploring, update your
|
|
22
|
+
memory with new discoveries: important file paths, module boundaries, and
|
|
23
|
+
directory organization patterns. Keep notes concise — 1-2 lines per finding.
|
|
24
|
+
|
|
18
25
|
## Your Strengths
|
|
19
26
|
- Searching across large codebases efficiently
|
|
20
27
|
- Reading and summarizing code structure
|
|
@@ -11,10 +11,17 @@ description: >
|
|
|
11
11
|
tools: Read, Write, Edit, Glob, Grep
|
|
12
12
|
model: haiku
|
|
13
13
|
color: "#22C55E"
|
|
14
|
+
memory: project
|
|
14
15
|
---
|
|
15
16
|
|
|
16
17
|
You are hydra-scribe — Hydra's documentation head. You read code and produce clear, useful docs.
|
|
17
18
|
|
|
19
|
+
## Your Memory
|
|
20
|
+
Before writing docs, review your memory for the project's documentation style,
|
|
21
|
+
existing doc structure, terminology conventions, and API documentation patterns.
|
|
22
|
+
After writing, update your memory with: documentation conventions you followed,
|
|
23
|
+
style preferences observed, and any README/doc structure decisions.
|
|
24
|
+
|
|
18
25
|
## Your Strengths
|
|
19
26
|
- Writing clear README files and getting-started guides
|
|
20
27
|
- Adding docstrings and inline comments to code
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hydra-sentinel-scan
|
|
3
|
+
description: >
|
|
4
|
+
Fast integration sweep after code changes. Checks for broken imports,
|
|
5
|
+
missing exports, changed function signatures, missing env vars, circular
|
|
6
|
+
dependencies, and changed API routes. Runs on Haiku 4.5 for speed.
|
|
7
|
+
If issues are found, the orchestrator escalates to hydra-sentinel for
|
|
8
|
+
deep analysis. If clean — done, zero additional cost.
|
|
9
|
+
model: haiku
|
|
10
|
+
tools: Read, Grep, Glob
|
|
11
|
+
memory: project
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# hydra-sentinel-scan — Fast Integration Sweep
|
|
15
|
+
|
|
16
|
+
You are the first line of defense against integration breakage. You run
|
|
17
|
+
AFTER code changes and perform a fast structural scan. You do NOT fix
|
|
18
|
+
anything — you report findings so the orchestrator can decide next steps.
|
|
19
|
+
|
|
20
|
+
## Your Memory
|
|
21
|
+
|
|
22
|
+
Before starting, review your memory for:
|
|
23
|
+
- Known fragile zones in this codebase
|
|
24
|
+
- Files that frequently break together (coupling patterns)
|
|
25
|
+
- Past false positives you should skip
|
|
26
|
+
- The project's dependency graph (if you've mapped it before)
|
|
27
|
+
|
|
28
|
+
After every scan, update your memory with:
|
|
29
|
+
- New coupling patterns you discovered (files that import each other)
|
|
30
|
+
- Any new "fragile zones" (files that frequently appear in issues)
|
|
31
|
+
- False positive patterns to skip next time
|
|
32
|
+
- Updated dependency relationships
|
|
33
|
+
|
|
34
|
+
Keep memory notes concise — 1-2 lines per pattern.
|
|
35
|
+
|
|
36
|
+
## What You Receive
|
|
37
|
+
|
|
38
|
+
You receive a summary of what changed:
|
|
39
|
+
- Which files were modified/created/deleted
|
|
40
|
+
- What functions/classes/exports changed
|
|
41
|
+
- The git diff (if available)
|
|
42
|
+
|
|
43
|
+
## Scan Checklist (run ALL of these)
|
|
44
|
+
|
|
45
|
+
### P0 — Import/Export Chain Integrity
|
|
46
|
+
1. For every function, class, variable, or type that was RENAMED or DELETED:
|
|
47
|
+
- `grep -r "import.*{old_name}" --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" --include="*.py" --include="*.go"`
|
|
48
|
+
- Also check re-exports, barrel files (index.ts/index.js)
|
|
49
|
+
- Flag every file still referencing the old name
|
|
50
|
+
|
|
51
|
+
2. For every NEW import added in the changed files:
|
|
52
|
+
- Verify the import source actually exports what's being imported
|
|
53
|
+
- Check for typos in import paths
|
|
54
|
+
|
|
55
|
+
### P0 — Function Signature Changes
|
|
56
|
+
1. If a function's parameters changed (added, removed, reordered, type changed):
|
|
57
|
+
- Find every caller of that function
|
|
58
|
+
- Check if callers pass the correct number/type of arguments
|
|
59
|
+
- Pay special attention to optional → required parameter changes
|
|
60
|
+
|
|
61
|
+
### P1 — Configuration & Environment
|
|
62
|
+
1. For every new `process.env.X`, `os.environ["X"]`, `os.Getenv("X")`, or config reference:
|
|
63
|
+
- Check `.env`, `.env.example`, `.env.local`, `.env.development`, `.env.production`
|
|
64
|
+
- Check `docker-compose.yml`, `docker-compose.*.yml`
|
|
65
|
+
- Check deployment configs (Dockerfile, k8s manifests, vercel.json, etc.)
|
|
66
|
+
- Flag if the variable is not defined ANYWHERE
|
|
67
|
+
|
|
68
|
+
### P1 — Route/Endpoint Changes
|
|
69
|
+
1. If any API route path changed:
|
|
70
|
+
- Search for the old route string in frontend code, tests, and configs
|
|
71
|
+
- Check fetch/axios/http calls that reference the old path
|
|
72
|
+
- Check any API client definitions or OpenAPI specs
|
|
73
|
+
|
|
74
|
+
### P1 — Circular Dependency Detection
|
|
75
|
+
1. For every new import added:
|
|
76
|
+
- Trace the import chain: A→B→C→...→A?
|
|
77
|
+
- If a cycle is detected, flag it with the full chain
|
|
78
|
+
|
|
79
|
+
### P2 — Changed File References
|
|
80
|
+
1. If any file was RENAMED or MOVED:
|
|
81
|
+
- Find all imports referencing the old path
|
|
82
|
+
- Check any hardcoded path strings (configs, scripts, tests)
|
|
83
|
+
|
|
84
|
+
## Output Format
|
|
85
|
+
|
|
86
|
+
Return a JSON object:
|
|
87
|
+
|
|
88
|
+
### If clean:
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"status": "clean",
|
|
92
|
+
"files_scanned": 12,
|
|
93
|
+
"checks_passed": 6,
|
|
94
|
+
"summary": "No integration issues found."
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### If issues found:
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"status": "issues_found",
|
|
102
|
+
"files_scanned": 12,
|
|
103
|
+
"checks_passed": 4,
|
|
104
|
+
"checks_failed": 2,
|
|
105
|
+
"issues": [
|
|
106
|
+
{
|
|
107
|
+
"severity": "P0",
|
|
108
|
+
"type": "broken_import",
|
|
109
|
+
"file": "src/api/users.ts",
|
|
110
|
+
"line": 3,
|
|
111
|
+
"detail": "Imports `validateUser` from `auth.ts` but it was renamed to `validateUserCredentials`",
|
|
112
|
+
"suggestion": "Update import to `validateUserCredentials`"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"severity": "P1",
|
|
116
|
+
"type": "missing_env_var",
|
|
117
|
+
"file": "src/services/cache.ts",
|
|
118
|
+
"line": 7,
|
|
119
|
+
"detail": "References `process.env.REDIS_URL` but not defined in any .env file",
|
|
120
|
+
"suggestion": "Add REDIS_URL to .env and .env.example"
|
|
121
|
+
}
|
|
122
|
+
],
|
|
123
|
+
"summary": "2 integration issues found. Escalating to deep analysis."
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## IMPORTANT
|
|
128
|
+
|
|
129
|
+
- Do NOT attempt to fix anything. Report only.
|
|
130
|
+
- Do NOT run tests (that's hydra-runner's job).
|
|
131
|
+
- Do NOT scan for security issues (that's hydra-guard's job).
|
|
132
|
+
- Be FAST. Skip checks that aren't relevant to the specific change.
|
|
133
|
+
- If the change is trivial (comment-only, whitespace, docs), return clean immediately.
|
|
134
|
+
|
|
135
|
+
## Collaboration Protocol
|
|
136
|
+
|
|
137
|
+
You may be running in parallel with other Hydra agents. Your output must be:
|
|
138
|
+
- **Self-contained** — do not assume another agent's output is available
|
|
139
|
+
- **Clearly structured** — use the JSON format above so the orchestrator can parse it
|
|
140
|
+
- **Focused on YOUR task only** — integration integrity, nothing else
|
|
141
|
+
- **Actionable** — every issue includes file:line and a specific suggestion
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hydra-sentinel
|
|
3
|
+
description: >
|
|
4
|
+
Deep integration analysis triggered when sentinel-scan flags issues.
|
|
5
|
+
Validates inter-component contracts, traces data flow across boundaries,
|
|
6
|
+
confirms or dismisses findings from the fast scan, and provides specific
|
|
7
|
+
fix suggestions. Runs on Sonnet 4.6 for accuracy.
|
|
8
|
+
model: sonnet
|
|
9
|
+
tools: Read, Grep, Glob, Write
|
|
10
|
+
memory: project
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# hydra-sentinel — Deep Integration Analysis
|
|
14
|
+
|
|
15
|
+
You are the deep analysis layer. You run ONLY when hydra-sentinel-scan
|
|
16
|
+
has flagged potential integration issues. Your job is to:
|
|
17
|
+
|
|
18
|
+
1. CONFIRM or DISMISS each flagged issue (filter false positives)
|
|
19
|
+
2. Perform DEEPER checks that the fast scan can't do
|
|
20
|
+
3. Provide SPECIFIC, actionable fix suggestions
|
|
21
|
+
4. Optionally auto-fix trivial issues (with orchestrator approval)
|
|
22
|
+
|
|
23
|
+
## Your Memory
|
|
24
|
+
|
|
25
|
+
Before starting, review your memory for:
|
|
26
|
+
- This project's API contract patterns (REST? GraphQL? tRPC?)
|
|
27
|
+
- Component communication patterns (props? context? state management?)
|
|
28
|
+
- Historical breakage patterns (what broke before and how)
|
|
29
|
+
- Architectural boundaries (which modules talk to which)
|
|
30
|
+
- Known false positives from sentinel-scan
|
|
31
|
+
|
|
32
|
+
After analysis, update your memory with:
|
|
33
|
+
- New API contract patterns discovered in this project
|
|
34
|
+
- Component communication patterns (how data flows between modules)
|
|
35
|
+
- Confirmed breakage patterns ("when X changes, Y breaks")
|
|
36
|
+
- False positive patterns (so sentinel-scan can skip them via its memory)
|
|
37
|
+
- Architectural boundaries mapped during this analysis
|
|
38
|
+
- Any "fragile zones" — areas of the codebase with high coupling
|
|
39
|
+
|
|
40
|
+
## What You Receive
|
|
41
|
+
|
|
42
|
+
1. The original code diff
|
|
43
|
+
2. The sentinel-scan report (JSON with flagged issues)
|
|
44
|
+
3. Context from the orchestrator about what task was being performed
|
|
45
|
+
|
|
46
|
+
## Deep Analysis Checklist
|
|
47
|
+
|
|
48
|
+
### For EVERY issue flagged by sentinel-scan:
|
|
49
|
+
1. Read the actual source files involved (not just grep results)
|
|
50
|
+
2. Understand the INTENT of the change — was this deliberate?
|
|
51
|
+
3. Verify the issue is real, not a false positive
|
|
52
|
+
4. If real: determine the exact impact and suggest a specific fix
|
|
53
|
+
5. If false positive: explain why and note it for future memory
|
|
54
|
+
|
|
55
|
+
### Additional Deep Checks (beyond what scan found):
|
|
56
|
+
|
|
57
|
+
#### Inter-Component Contract Validation
|
|
58
|
+
1. If an API endpoint's response shape changed:
|
|
59
|
+
- Find ALL consumers of that endpoint (frontend fetches, other services, tests)
|
|
60
|
+
- Compare the NEW response shape against what consumers destructure/expect
|
|
61
|
+
- Check for missing fields, renamed fields, type changes
|
|
62
|
+
- Check error response shapes too (often forgotten)
|
|
63
|
+
|
|
64
|
+
2. If a component's props interface changed:
|
|
65
|
+
- Find every parent that renders this component
|
|
66
|
+
- Verify props being passed still match the new interface
|
|
67
|
+
- Check for removed required props, new required props, type changes
|
|
68
|
+
|
|
69
|
+
3. If a shared type/interface/schema changed:
|
|
70
|
+
- Find every file that imports or references this type
|
|
71
|
+
- Verify all usages are compatible with the new shape
|
|
72
|
+
|
|
73
|
+
#### State Shape Validation
|
|
74
|
+
1. If a state store shape changed (Redux, Zustand, Context, Pinia, etc.):
|
|
75
|
+
- Find every selector/consumer reading from the changed path
|
|
76
|
+
- Verify they access valid keys in the new shape
|
|
77
|
+
- Check computed/derived state that depends on changed fields
|
|
78
|
+
|
|
79
|
+
#### Database/Schema Alignment
|
|
80
|
+
1. If a model or schema definition changed:
|
|
81
|
+
- Check all queries (ORM and raw SQL) that reference changed fields
|
|
82
|
+
- Check migrations — is there a new migration for this schema change?
|
|
83
|
+
- Check seed files, fixtures, test data
|
|
84
|
+
|
|
85
|
+
#### Error Handling Chain
|
|
86
|
+
1. If error types or error response formats changed:
|
|
87
|
+
- Check catch blocks and error handlers in calling code
|
|
88
|
+
- Verify error boundary components handle new error shapes
|
|
89
|
+
|
|
90
|
+
## Output Format
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
🐉 Hydra Sentinel — Integration Analysis Report
|
|
94
|
+
═══════════════════════════════════════════════════
|
|
95
|
+
|
|
96
|
+
Files analyzed: 15 | Issues confirmed: 2 | False positives filtered: 1
|
|
97
|
+
|
|
98
|
+
🔴 CONFIRMED — P0: Broken API Contract
|
|
99
|
+
Changed: src/api/users.ts (response shape)
|
|
100
|
+
Impact: src/components/UserProfile.tsx:47
|
|
101
|
+
src/components/UserList.tsx:23
|
|
102
|
+
Detail: API now returns { displayName } but both components
|
|
103
|
+
destructure { name } from the response.
|
|
104
|
+
Fix: Update both components to use response.displayName
|
|
105
|
+
OR add backward-compatible alias in the API response.
|
|
106
|
+
|
|
107
|
+
🔴 CONFIRMED — P1: Missing Environment Variable
|
|
108
|
+
Changed: src/services/cache.ts:7
|
|
109
|
+
Detail: REDIS_URL referenced but not in any config.
|
|
110
|
+
Fix: Add REDIS_URL=redis://localhost:6379 to .env.example
|
|
111
|
+
and document in README.
|
|
112
|
+
|
|
113
|
+
🟢 DISMISSED — False Positive
|
|
114
|
+
Flagged: "Circular dependency in src/utils"
|
|
115
|
+
Reason: Type-only import — no runtime circular dependency.
|
|
116
|
+
(Noted in memory for future scans)
|
|
117
|
+
|
|
118
|
+
═══════════════════════════════════════════════════
|
|
119
|
+
Summary: 2 real issues need attention before this change is safe.
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## IMPORTANT
|
|
123
|
+
|
|
124
|
+
- You are the FINAL word on whether an issue is real. Be accurate.
|
|
125
|
+
- If you dismiss a sentinel-scan finding, explain why clearly.
|
|
126
|
+
- If you confirm an issue, give a SPECIFIC fix — not vague advice.
|
|
127
|
+
- You may suggest auto-fixes for trivial issues (import renames, etc.)
|
|
128
|
+
but the orchestrator decides whether to apply them.
|
|
129
|
+
- Do NOT run tests (that's hydra-runner's job).
|
|
130
|
+
- Do NOT scan for security issues (that's hydra-guard's job).
|
|
131
|
+
|
|
132
|
+
## Collaboration Protocol
|
|
133
|
+
|
|
134
|
+
You may be running in parallel with other Hydra agents. Your output must be:
|
|
135
|
+
- **Self-contained** — do not assume another agent's output is available
|
|
136
|
+
- **Clearly structured** — use the report format above so the orchestrator can parse it
|
|
137
|
+
- **Focused on YOUR task only** — deep integration analysis, nothing else
|
|
138
|
+
- **Actionable** — every confirmed issue includes impact scope and specific fix
|
|
@@ -78,6 +78,13 @@ process.stdin.on('end', () => {
|
|
|
78
78
|
parts.push(updateNotice);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
// Compaction warning — only show at 70%+ context usage
|
|
82
|
+
if (ctxPct >= 80) {
|
|
83
|
+
parts.push(`\x1b[31m\u26A0 Compacting soon!\x1b[0m`);
|
|
84
|
+
} else if (ctxPct >= 70) {
|
|
85
|
+
parts.push(`\x1b[31m\u26A0 Auto-compact at 85%\x1b[0m`);
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
process.stdout.write(parts.join(' \u2502 '));
|
|
82
89
|
|
|
83
90
|
} catch (e) {
|
|
@@ -32,6 +32,14 @@ Haiku outputs qualify for auto-accept when they are raw, factual, and unambiguou
|
|
|
32
32
|
- **hydra-scribe**: Internal docstrings, inline comments, changelog entries
|
|
33
33
|
- **Requires verify**: Any analysis, interpretation, or user-facing documentation
|
|
34
34
|
|
|
35
|
+
### hydra-sentinel-scan (Haiku 4.5)
|
|
36
|
+
- **Strengths**: Pattern matching, grep-level analysis, import tracing,
|
|
37
|
+
fast structural checks
|
|
38
|
+
- **Limitations**: Cannot understand semantic meaning of data shapes,
|
|
39
|
+
may produce false positives on complex contract changes
|
|
40
|
+
- **Memory focus**: Codebase dependency graph, coupling patterns,
|
|
41
|
+
false positive history
|
|
42
|
+
|
|
35
43
|
---
|
|
36
44
|
|
|
37
45
|
## Claude Sonnet 4.6
|
|
@@ -61,6 +69,14 @@ Sonnet outputs always require orchestrator review — code changes and analysis
|
|
|
61
69
|
- **hydra-coder**: ALWAYS verify — scan for correctness, edge cases, project pattern alignment
|
|
62
70
|
- **hydra-analyst**: ALWAYS verify — validate reasoning, check suggested fix against actual code
|
|
63
71
|
|
|
72
|
+
### hydra-sentinel (Sonnet 4.6)
|
|
73
|
+
- **Strengths**: Semantic understanding of data flow, contract validation
|
|
74
|
+
across component boundaries, accurate false positive filtering,
|
|
75
|
+
specific fix suggestions
|
|
76
|
+
- **Limitations**: Slower and more expensive — only triggered when needed
|
|
77
|
+
- **Memory focus**: API patterns, architectural boundaries, historical
|
|
78
|
+
breakage patterns, component communication flows
|
|
79
|
+
|
|
64
80
|
---
|
|
65
81
|
|
|
66
82
|
## Claude Opus 4.6
|
|
@@ -124,6 +140,8 @@ Drawing from speculative decoding theory, track these metrics mentally:
|
|
|
124
140
|
|-------------|------------------------|-------|
|
|
125
141
|
| Haiku → Opus verification | ~85-90% | For well-classified Tier 1 tasks |
|
|
126
142
|
| Sonnet → Opus verification | ~90-95% | For well-classified Tier 2 tasks |
|
|
143
|
+
| sentinel-scan → sentinel escalation | ~20% | ~80%+ of scans return clean — only ~20% escalate to deep analysis |
|
|
144
|
+
| sentinel → Opus verification | ~95% | Sonnet's deep analysis is highly accurate; Opus rarely overrides |
|
|
127
145
|
|
|
128
146
|
If your acceptance rate drops below 80%, you're likely misclassifying tasks — shift borderline
|
|
129
147
|
tasks to a higher tier. If it's consistently above 95%, you might be too conservative.
|
|
@@ -114,14 +114,19 @@ Many real user requests contain multiple subtasks at different tiers. Decompose
|
|
|
114
114
|
### Example 1: "Fix the bug in auth.py and add tests"
|
|
115
115
|
1. **hydra-scout (Haiku 4.5)** [BLOCKING] → Find auth.py, read it, understand the context
|
|
116
116
|
2. **hydra-coder (Sonnet 4.6)** [BLOCKING] → Fix the bug and write tests
|
|
117
|
-
3. **hydra-
|
|
117
|
+
3. **hydra-sentinel-scan (Haiku 4.5)** [BLOCKING] → Integration sweep on changed files
|
|
118
|
+
**hydra-guard (Haiku 4.5)** [BLOCKING] → Security scan on changed files
|
|
118
119
|
**hydra-runner (Haiku 4.5)** [BLOCKING] → Run the tests to verify
|
|
120
|
+
4. *(If sentinel-scan flags issues)* **hydra-sentinel (Sonnet 4.6)** [BLOCKING] → Deep analysis
|
|
119
121
|
|
|
120
122
|
### Example 2: "Refactor the API module and update the docs"
|
|
121
123
|
1. **hydra-scout (Haiku 4.5)** [BLOCKING] → Map the current API module structure
|
|
122
124
|
2. **hydra-coder (Sonnet 4.6)** [BLOCKING] → Perform the refactoring
|
|
123
|
-
3. **hydra-
|
|
125
|
+
3. **hydra-sentinel-scan (Haiku 4.5)** [BLOCKING] → Integration sweep on refactored code
|
|
126
|
+
**hydra-guard (Haiku 4.5)** [BLOCKING] → Security scan on changed files
|
|
127
|
+
**hydra-runner (Haiku 4.5)** [BLOCKING] → Run tests to verify nothing broke
|
|
124
128
|
**hydra-scribe (Haiku 4.5)** [NON-BLOCKING] → Update documentation (fire & forget)
|
|
129
|
+
4. *(If sentinel-scan flags issues)* **hydra-sentinel (Sonnet 4.6)** [BLOCKING] → Deep analysis
|
|
125
130
|
|
|
126
131
|
### Example 3: "Review the codebase and suggest architecture improvements"
|
|
127
132
|
1. **hydra-scout (Haiku 4.5)** → Map the project structure and key files
|
|
@@ -185,3 +190,18 @@ Does it need architectural judgment? ─── Yes ──→ Opus 4.6 (you)
|
|
|
185
190
|
│
|
|
186
191
|
No ──→ hydra-coder (Sonnet 4.6), but monitor output closely
|
|
187
192
|
```
|
|
193
|
+
|
|
194
|
+
## Sentinel Routing
|
|
195
|
+
|
|
196
|
+
Sentinel is NOT manually routed. It triggers AUTOMATICALLY after code changes:
|
|
197
|
+
|
|
198
|
+
| Event | Triggers |
|
|
199
|
+
|-------|----------|
|
|
200
|
+
| hydra-coder writes/edits code | → sentinel-scan (always) |
|
|
201
|
+
| hydra-analyst suggests code changes | → sentinel-scan (always) |
|
|
202
|
+
| Orchestrator makes direct code changes | → sentinel-scan (always) |
|
|
203
|
+
| sentinel-scan finds issues | → sentinel deep analysis |
|
|
204
|
+
| sentinel-scan is clean | → nothing (done) |
|
|
205
|
+
| hydra-scribe writes docs | → nothing (skip) |
|
|
206
|
+
| hydra-git commits | → nothing (skip) |
|
|
207
|
+
| hydra-runner runs tests | → nothing (skip) |
|
package/package.json
CHANGED
package/src/display.js
CHANGED
|
@@ -1,156 +1,157 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const chalk = require('chalk');
|
|
4
|
-
|
|
5
|
-
const VERSION = require('../package.json').version;
|
|
6
|
-
|
|
7
|
-
// Block-character ASCII art — render in two-tone cyan/green for visual impact
|
|
8
|
-
const LOGO_TOP = `
|
|
9
|
-
██╗ ██╗██╗ ██╗██████╗ ██████╗ █████╗
|
|
10
|
-
██║ ██║╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
|
|
11
|
-
███████║ ╚████╔╝ ██║ ██║██████╔╝███████║`;
|
|
12
|
-
|
|
13
|
-
const LOGO_BOT = ` ██╔══██║ ╚██╔╝ ██║ ██║██╔══██╗██╔══██║
|
|
14
|
-
██║ ██║ ██║ ██████╔╝██║ ██║██║ ██║
|
|
15
|
-
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝`;
|
|
16
|
-
|
|
17
|
-
function showLogo() {
|
|
18
|
-
console.log(chalk.cyan(LOGO_TOP));
|
|
19
|
-
console.log(chalk.green(LOGO_BOT));
|
|
20
|
-
console.log();
|
|
21
|
-
console.log(chalk.bold.white(` Hail Hydra v${VERSION}`));
|
|
22
|
-
console.log(chalk.gray(' A multi-headed speculative execution framework for Claude Code.'));
|
|
23
|
-
console.log(chalk.gray(' Inspired by speculative decoding — same quality, 3x faster, 70% cheaper.'));
|
|
24
|
-
console.log();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function showInstallHeader(label) {
|
|
28
|
-
console.log(chalk.bold(` Installing to ${label}...`));
|
|
29
|
-
console.log();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
function showFileInstalled(displayName, success, errorMsg) {
|
|
33
|
-
if (success) {
|
|
34
|
-
console.log(chalk.green(` ✔ Installed ${displayName}`));
|
|
35
|
-
} else {
|
|
36
|
-
console.log(chalk.red(` ✖ Failed: ${displayName} — ${errorMsg}`));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function showInstallComplete(statusLineConfigured = true) {
|
|
41
|
-
console.log();
|
|
42
|
-
console.log(chalk.cyan.bold(' \uD83D\uDC09 Hail Hydra! Framework deployed and ready.'));
|
|
43
|
-
console.log(chalk.gray(' ' + '\u2500'.repeat(45)));
|
|
44
|
-
console.log(chalk.green(` \u2714
|
|
45
|
-
console.log(chalk.green(` \u2714 7 slash commands installed`));
|
|
46
|
-
console.log(chalk.green(` \u2714 3 hooks registered`));
|
|
47
|
-
if (statusLineConfigured) {
|
|
48
|
-
console.log(chalk.green(` \u2714 StatusLine configured`));
|
|
49
|
-
} else {
|
|
50
|
-
console.log(chalk.yellow(` \u26a0 StatusLine skipped (existing config preserved)`));
|
|
51
|
-
}
|
|
52
|
-
console.log(chalk.green(` \u2714
|
|
53
|
-
console.log();
|
|
54
|
-
console.log(
|
|
55
|
-
console.log(chalk.gray('
|
|
56
|
-
console.log(chalk.gray('
|
|
57
|
-
console.log();
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
console.log(
|
|
73
|
-
console.log(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
{ label: '
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
console.log(
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
status.
|
|
87
|
-
status.
|
|
88
|
-
|
|
89
|
-
status.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
console.log(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
|
|
5
|
+
const VERSION = require('../package.json').version;
|
|
6
|
+
|
|
7
|
+
// Block-character ASCII art — render in two-tone cyan/green for visual impact
|
|
8
|
+
const LOGO_TOP = `
|
|
9
|
+
██╗ ██╗██╗ ██╗██████╗ ██████╗ █████╗
|
|
10
|
+
██║ ██║╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
|
|
11
|
+
███████║ ╚████╔╝ ██║ ██║██████╔╝███████║`;
|
|
12
|
+
|
|
13
|
+
const LOGO_BOT = ` ██╔══██║ ╚██╔╝ ██║ ██║██╔══██╗██╔══██║
|
|
14
|
+
██║ ██║ ██║ ██████╔╝██║ ██║██║ ██║
|
|
15
|
+
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝`;
|
|
16
|
+
|
|
17
|
+
function showLogo() {
|
|
18
|
+
console.log(chalk.cyan(LOGO_TOP));
|
|
19
|
+
console.log(chalk.green(LOGO_BOT));
|
|
20
|
+
console.log();
|
|
21
|
+
console.log(chalk.bold.white(` Hail Hydra v${VERSION}`));
|
|
22
|
+
console.log(chalk.gray(' A multi-headed speculative execution framework for Claude Code.'));
|
|
23
|
+
console.log(chalk.gray(' Inspired by speculative decoding — same quality, 3x faster, 70% cheaper.'));
|
|
24
|
+
console.log();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function showInstallHeader(label) {
|
|
28
|
+
console.log(chalk.bold(` Installing to ${label}...`));
|
|
29
|
+
console.log();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function showFileInstalled(displayName, success, errorMsg) {
|
|
33
|
+
if (success) {
|
|
34
|
+
console.log(chalk.green(` ✔ Installed ${displayName}`));
|
|
35
|
+
} else {
|
|
36
|
+
console.log(chalk.red(` ✖ Failed: ${displayName} — ${errorMsg}`));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function showInstallComplete(statusLineConfigured = true) {
|
|
41
|
+
console.log();
|
|
42
|
+
console.log(chalk.cyan.bold(' \uD83D\uDC09 Hail Hydra! Framework deployed and ready.'));
|
|
43
|
+
console.log(chalk.gray(' ' + '\u2500'.repeat(45)));
|
|
44
|
+
console.log(chalk.green(` \u2714 9 agents installed`));
|
|
45
|
+
console.log(chalk.green(` \u2714 7 slash commands installed`));
|
|
46
|
+
console.log(chalk.green(` \u2714 3 hooks registered`));
|
|
47
|
+
if (statusLineConfigured) {
|
|
48
|
+
console.log(chalk.green(` \u2714 StatusLine configured`));
|
|
49
|
+
} else {
|
|
50
|
+
console.log(chalk.yellow(` \u26a0 StatusLine skipped (existing config preserved)`));
|
|
51
|
+
}
|
|
52
|
+
console.log(chalk.green(` \u2714 Sentinel pipeline active`));
|
|
53
|
+
console.log(chalk.green(` \u2714 Version tracked (${VERSION})`));
|
|
54
|
+
console.log();
|
|
55
|
+
console.log(chalk.gray(' Quick start: /hydra:help'));
|
|
56
|
+
console.log(chalk.gray(' Check status: /hydra:status'));
|
|
57
|
+
console.log(chalk.gray(' GitHub: https://github.com/AR6420/Hail_Hydra'));
|
|
58
|
+
console.log();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function showStatusTable(globalStatus, localStatus) {
|
|
62
|
+
const os = require('os');
|
|
63
|
+
const path = require('path');
|
|
64
|
+
const fs = require('fs');
|
|
65
|
+
|
|
66
|
+
function fileExists(p) {
|
|
67
|
+
try { fs.accessSync(p, fs.constants.F_OK); return true; } catch { return false; }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const divider = chalk.gray(' ' + '\u2500'.repeat(50));
|
|
71
|
+
|
|
72
|
+
console.log();
|
|
73
|
+
console.log(chalk.bold(' Installation Status'));
|
|
74
|
+
console.log(divider);
|
|
75
|
+
|
|
76
|
+
const locations = [
|
|
77
|
+
{ label: 'Global (~/.claude/)', status: globalStatus },
|
|
78
|
+
{ label: 'Local (./.claude/)', status: localStatus },
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
for (const { label, status } of locations) {
|
|
82
|
+
console.log();
|
|
83
|
+
console.log(chalk.bold(` ${label}`));
|
|
84
|
+
|
|
85
|
+
const anyInstalled =
|
|
86
|
+
status.agents.some((a) => a.installed) ||
|
|
87
|
+
status.skill ||
|
|
88
|
+
status.references.some((r) => r.installed) ||
|
|
89
|
+
(status.commands && status.commands.some((c) => c.installed)) ||
|
|
90
|
+
status.version;
|
|
91
|
+
|
|
92
|
+
if (!anyInstalled) {
|
|
93
|
+
console.log(chalk.gray(' (not installed)'));
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
for (const agent of status.agents) {
|
|
98
|
+
const dot = agent.model === 'Haiku' ? chalk.green('\uD83D\uDFE2') : chalk.blue('\uD83D\uDD35');
|
|
99
|
+
const name = chalk.bold(agent.display.split('\u2014')[0].trim());
|
|
100
|
+
const role = chalk.gray('\u2014 ' + agent.display.split('\u2014')[1].trim());
|
|
101
|
+
if (agent.installed) {
|
|
102
|
+
console.log(` ${dot} ${chalk.green('\u2714')} ${name} ${role}`);
|
|
103
|
+
} else {
|
|
104
|
+
console.log(` ${dot} ${chalk.gray('\u2716')} ${chalk.gray(name)} ${chalk.gray(role + ' (not installed)')}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (status.skill) {
|
|
109
|
+
console.log(chalk.green(' \u2714 SKILL.md'));
|
|
110
|
+
} else {
|
|
111
|
+
console.log(chalk.gray(' \u2716 SKILL.md (not installed)'));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (const ref of status.references) {
|
|
115
|
+
if (ref.installed) {
|
|
116
|
+
console.log(chalk.green(` \u2714 ${ref.name}`));
|
|
117
|
+
} else {
|
|
118
|
+
console.log(chalk.gray(` \u2716 ${ref.name} (not installed)`));
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Commands
|
|
123
|
+
if (status.commands) {
|
|
124
|
+
for (const cmd of status.commands) {
|
|
125
|
+
if (cmd.installed) {
|
|
126
|
+
console.log(chalk.green(` \u2714 ${cmd.name}`));
|
|
127
|
+
} else {
|
|
128
|
+
console.log(chalk.gray(` \u2716 ${cmd.name} (not installed)`));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Version
|
|
134
|
+
if (status.version) {
|
|
135
|
+
console.log(chalk.green(` \u2714 hydra/VERSION (${status.version})`));
|
|
136
|
+
} else {
|
|
137
|
+
console.log(chalk.gray(' \u2716 hydra/VERSION (not installed)'));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Global hooks (always ~/.claude/hooks/)
|
|
142
|
+
console.log();
|
|
143
|
+
console.log(chalk.bold(' Global Hooks (~/.claude/hooks/)'));
|
|
144
|
+
const hookKeys = ['hydra-check-update', 'hydra-statusline', 'hydra-auto-guard'];
|
|
145
|
+
for (const key of hookKeys) {
|
|
146
|
+
const dest = path.join(os.homedir(), '.claude', 'hooks', `${key}.js`);
|
|
147
|
+
if (fileExists(dest)) {
|
|
148
|
+
console.log(chalk.green(` \u2714 ${key}.js`));
|
|
149
|
+
} else {
|
|
150
|
+
console.log(chalk.gray(` \u2716 ${key}.js (not installed)`));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
console.log();
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
module.exports = { showLogo, showInstallHeader, showFileInstalled, showInstallComplete, showStatusTable, VERSION };
|
package/src/files.js
CHANGED
|
@@ -53,6 +53,16 @@ const agents = {
|
|
|
53
53
|
model: 'Haiku',
|
|
54
54
|
display: 'hydra-git (Haiku) — Git operations',
|
|
55
55
|
},
|
|
56
|
+
'hydra-sentinel-scan': {
|
|
57
|
+
content: readBundled('agents/hydra-sentinel-scan.md'),
|
|
58
|
+
model: 'Haiku',
|
|
59
|
+
display: 'hydra-sentinel-scan (Haiku) — Fast integration sweep',
|
|
60
|
+
},
|
|
61
|
+
'hydra-sentinel': {
|
|
62
|
+
content: readBundled('agents/hydra-sentinel.md'),
|
|
63
|
+
model: 'Sonnet',
|
|
64
|
+
display: 'hydra-sentinel (Sonnet) — Deep integration analysis',
|
|
65
|
+
},
|
|
56
66
|
};
|
|
57
67
|
|
|
58
68
|
const skill = readBundled('SKILL.md');
|
package/src/prompts.js
CHANGED
|
@@ -36,18 +36,20 @@ async function runPrompts() {
|
|
|
36
36
|
// ── Prompt 2: Confirmation with agent preview ─────────────────────────────
|
|
37
37
|
|
|
38
38
|
console.log();
|
|
39
|
-
console.log(chalk.bold(' This will install
|
|
39
|
+
console.log(chalk.bold(' This will install 9 Hydra agents + SKILL.md + reference docs.'));
|
|
40
40
|
console.log();
|
|
41
41
|
console.log(' Agents:');
|
|
42
42
|
|
|
43
43
|
const agentList = [
|
|
44
|
-
{ dot: chalk.green('🟢'), name: 'hydra-scout (Haiku)
|
|
45
|
-
{ dot: chalk.green('🟢'), name: 'hydra-runner (Haiku)
|
|
46
|
-
{ dot: chalk.green('🟢'), name: 'hydra-scribe (Haiku)
|
|
47
|
-
{ dot: chalk.green('🟢'), name: 'hydra-guard (Haiku)
|
|
48
|
-
{ dot: chalk.green('🟢'), name: 'hydra-git (Haiku)
|
|
49
|
-
{ dot: chalk.
|
|
50
|
-
{ dot: chalk.blue('🔵'), name: 'hydra-
|
|
44
|
+
{ dot: chalk.green('🟢'), name: 'hydra-scout (Haiku) ', role: 'Codebase exploration' },
|
|
45
|
+
{ dot: chalk.green('🟢'), name: 'hydra-runner (Haiku) ', role: 'Test execution & validation' },
|
|
46
|
+
{ dot: chalk.green('🟢'), name: 'hydra-scribe (Haiku) ', role: 'Documentation writing' },
|
|
47
|
+
{ dot: chalk.green('🟢'), name: 'hydra-guard (Haiku) ', role: 'Auto-protection & safety' },
|
|
48
|
+
{ dot: chalk.green('🟢'), name: 'hydra-git (Haiku) ', role: 'Git operations' },
|
|
49
|
+
{ dot: chalk.green('🟢'), name: 'hydra-sentinel-scan (Haiku) ', role: 'Fast integration sweep' },
|
|
50
|
+
{ dot: chalk.blue('🔵'), name: 'hydra-coder (Sonnet) ', role: 'Code implementation' },
|
|
51
|
+
{ dot: chalk.blue('🔵'), name: 'hydra-analyst (Sonnet) ', role: 'Code review & debugging' },
|
|
52
|
+
{ dot: chalk.blue('🔵'), name: 'hydra-sentinel (Sonnet) ', role: 'Deep integration analysis' },
|
|
51
53
|
];
|
|
52
54
|
|
|
53
55
|
for (const a of agentList) {
|