AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Hydra

skill-zandereins-hydra-hydra · by Zandereins

>

No reviews yet
0 installs
15 views
0.0% view→install

Install

$ agentstack add skill-zandereins-hydra-hydra

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution Used
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-zandereins-hydra-hydra)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Hydra? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Hydra

Four advisors analyze your code from different angles by default (standard mode) -- including Echo, which reviews AI-assisted-development failure modes -- then three peer reviewers cross-examine them and a chairman synthesizes the verdict. Escalate to deep mode for the full council: six advisors plus cross-model (Codex) diversity.

Standard mode runs 4 advisors + 3 reviewers + chairman on Opus (~$0.70-1.20); add --no-review for the fast 4-advisor path (~$0.35-0.65). Deep mode adds 2 more advisors (including 2 Codex) and cross-model diversity, with the reviewers examining all 6 (~$1.50-2.50).

Reference files in references/ define all prompts and protocols -- read them at the relevant step.

Use this skill when you need architecture decisions, security audits, tradeoff analysis, pre-merge deep reviews, or "what am I missing" answers -- anywhere multiple independent perspectives beat a single reviewer. Do not use for simple code generation, syntax fixes, single-file refactors, or factual lookups -- a council is waste there; use a direct edit or a single review instead.

Requires: bash and git; deep mode additionally depends on the Codex CLI, and gtimeout (brew coreutils) improves subprocess timeout handling. Sessions are safe to re-run: every run writes a new timestamped report under .hydra/ and never mutates the code under review.


Modes

| Mode | CLI | Advisors | Reviewers | Chairman | Total | Est. Cost | |------|-----|----------|-----------|----------|-------|-----------| | standard | (default) | 4 (Cassandra + Mies+ + Sentinel + Echo) | 3 (all Opus) | 1 Opus | 8 | ~$0.70-1.20 | | standard --no-review | --no-review | 4 (same) | 0 | 1 Opus | 5 | ~$0.35-0.65 | | deep | --mode deep | 6 (4 Opus + 2 Codex) | 3 (all Opus) | 1 Opus | 10 | ~$1.50-2.50 |

Modifiers (combinable):

  • --no-codex -- the deep-mode Codex advisors (Mies+, Sentinel) run on Opus instead.
  • --no-review -- Skip the peer-review phase. In standard: 8 -> 5 agents (~$0.35-0.65, the fast path). In deep: 10 -> 7 agents (~$1.00).

Minimum thresholds -- formula: ceil(N * 0.6), min 2:

| Mode | Min Advisors | Min Reviewers | |------|-------------|---------------| | standard | 3 of 4 | 2 of 3 (skipped under --no-review) | | deep | 4 of 6 | 2 of 3 (if reviewers active) |

Mode resolution: Two modes + modifiers:

  • No flags -> standard
  • --mode deep -> deep
  • --no-codex -> modifier (Codex advisors run on Opus)
  • --no-review -> modifier (skip peer review; in standard = the fast 4-advisor path, in deep reduces to 7 agents)

Legacy aliases (emit migration hint):

  • --mode lite, --mode quick, --mode full, --mode broad, --mode secure, --mode focused -> [Hydra] Unknown mode. Use 'standard' (default) or '--mode deep'.

Focus modes (combinable with any mode): --focus security | perf | readability | architecture | reliability Focus mapping: security -> Sentinel, perf -> Volta, readability -> Mies+, architecture -> Navigator, reliability -> Cassandra. When a focus flag is active it does two concrete things: (1) the mapped focus advisor (above) is always included in the roster; (2) the diff budget prioritizes files matching the focus signal (Step 1). It does NOT change any advisor word ceiling (those are hard literals in references/advisors.md) or apply a numeric finding weight. The active focus is surfaced to the user via {{FOCUS_NOTE_IF_ACTIVE}} in the run-confirmation banner. {{FOCUS_NOTE_IF_ACTIVE}} resolves to a one-line note naming the active focus and its mapped advisor (e.g. Focus: security -> Sentinel (primary lens)) when a focus flag is set, and to the empty string (line omitted) when none is set. Note: focus flags for Volta or Navigator auto-escalate to deep mode when used with standard (these advisors only exist in deep mode). Mies+ exists in both modes (readability focus) and never auto-escalates.


How a Hydra Session Works

Step 0: Pre-flight Gate

  1. Concrete code or specific decision? If too vague, ask ONE clarifying question.
  2. Hydra-worthy? Simple questions get answered directly: [Hydra] Not Hydra-worthy -- answering directly.
  3. Input size check: If user code exceeds ~500 lines, ask user to highlight the critical section. Max enriched input: ~3000 tokens of source code.
  4. Secrets scan: Check for credentials using these patterns:

Cloud keys: AKIA[A-Z0-9]{16}, ASIA[A-Z0-9]{16}, Azure: DefaultEndpointsProtocol=, AccountKey=[A-Za-z0-9+/=]{86,88}, SharedAccessSignature=, GCP: "type"\s*:\s*"service_account", "private_key_id"\s*:\s*"[a-f0-9]{40}", Git/CI: ghp_..., github_pat_..., glpat-..., Slack: xox[bpsa]-..., https://hooks.slack.com/..., Stripe: sk_live_, sk_test_, pk_live_, rk_live_, rk_test_, whsec_, AI keys: sk-ant-, sk-proj-, AIzaSy, PEM: -----BEGIN.*PRIVATE.*KEY-----, -----BEGIN.*KEY-----, JWT: eyJhbG...eyJ (require header.payload, not just header prefix), DB strings: (mongodb|postgres|mysql|redis)://[^:]+:[^@]+@, Datadog: DD_API_KEY, DD_APP_KEY, Twilio: AC[a-f0-9]{32}, SK[a-f0-9]{32}, Other: AccountKey=, SG\.[a-zA-Z0-9_-]{22}\., .env contents. Replace matches with [REDACTED]. Use a plain marker without any session-specific information -- do not derive the redaction marker from the boundary token or any other security-critical value. The marker is identical for all redactions in a session. Orchestrator keeps an internal count and mapping (type + location) for the user-facing confirmation only -- this mapping is never included in agent prompts. If secrets found: show redacted locations and ask user to confirm before proceeding.

Scan procedure name: secrets-scan -- referenced by scan points in Steps 3-6.

  1. Iteration detection (skip if fresh review):

``bash ls -1t .hydra/reports/hydra-*.md 2>/dev/null | grep -v transcript | head -1 ` If trigger is an iterate-trigger (hydra iterate, re-review, check my fixes, etc.) AND a previous report exists: set HYDRAITERATE=true, extract Top Actions + Verdict lead + timestamp from the report. Default to standard mode unless user passes --mode deep. Print: [Hydra] Iterating on: {{PREVREPORT}} ({{AGE}} ago)` If no previous report exists: warn user, fall back to fresh review.

Report validation: If a previous report IS found, verify it contains:

  • **Top Actions:** block with at least one numbered item (required)
  • Timestamp in filename matching hydra-[0-9]{8}T[0-9]{6}-*.md (required)
  • ## Verdict heading with content below it (recommended but not required)

If Top Actions AND timestamp are missing: report is invalid, fall back to fresh review.

State file (preferred): If .hydra/state.json exists, use it instead of parsing the markdown report. Schema: {version: 2, latest: {report_path, timestamp_unix, head_sha, top_actions[], verdict_lead, mode, reviewed_files[]}}. Written by Step 6 after each successful review. On iterate, read head_sha as PREV_HEAD_SHA (preferred diff anchor, see Step 1) and timestamp_unix for the age line. Falls back to ls -1t + markdown parsing if state.json is absent; old state without head_sha cleanly falls back to the timestamp anchor.

State file version check: If version field is missing or not equal to 2, warn user and fall back to markdown parsing. Do not silently use incompatible schema.

  1. Generate boundary tokens for delimiter security:

``bash HYDRA_BASE="$(openssl rand -hex 6)" ` If openssl is unavailable: HYDRA_BASE="$(head -c 6 /dev/urandom | xxd -p)". If both fail: abort with [Hydra] Cannot generate secure boundary token. Aborting.`

Derive per-stage tokens:

  • HYDRA_BOUNDARY_A="HYDRA-${HYDRA_BASE}-A" (advisor stage)
  • HYDRA_BOUNDARY_R="HYDRA-${HYDRA_BASE}-R" (reviewer stage)
  • HYDRA_BOUNDARY_C="HYDRA-${HYDRA_BASE}-C" (chairman stage)

Use {{BOUNDARY}} = HYDRA_BOUNDARY_A in advisor preambles (Step 3). Use {{BOUNDARY}} = HYDRA_BOUNDARY_R in reviewer delimiters (Step 4). Use {{BOUNDARY}} = HYDRA_BOUNDARY_C in chairman delimiters (Step 5). This prevents advisor output from escaping reviewer/chairman delimiters.

Prompt Assembly Rule (applies to Steps 3, 4, 5): When building ANY prompt for an agent (advisor, reviewer, chairman):

  1. Write the instruction/template portion. Replace all {{...}} placeholders with resolved values.
  2. Verify: the resolved instruction portion contains ZERO {{...}} placeholders.
  3. Append untrusted content (user code, advisor responses, reviewer responses) as verbatim

text after the resolved instructions. Never apply placeholder substitution to untrusted content. This two-pass rule prevents user code containing {{BOUNDARY}} from being replaced with the real token.

  1. Codex check (skip if --no-codex):

``bash CODEX_SCRIPT=$(ls -1t ~/.claude/plugins/cache/openai-codex/codex/*/scripts/codex-companion.mjs 2>/dev/null | head -1) ` If empty or file doesn't exist: auto-switch to --no-codex, inform user. Store the resolved path as CODEXSCRIPTPATH` -- hardcode it in Step 3/4 Bash calls (shell state does not persist between tool calls).

Codex circuit breaker state: Initialize CODEX_FAILURES=0. After each Codex call failure, increment. If CODEX_FAILURES >= 2: set CODEX_CIRCUIT_OPEN=true, skip all remaining Codex calls, switch to Opus for remaining agents. Print: [Hydra] Codex circuit breaker open after {{N}} consecutive failures. Remaining agents run on Opus.

  1. Classify question type (uses final resolved mode from steps 0.5 + 0.7): CODE_REVIEW | ARCHITECTURE_DECISION | SECURITY_AUDIT | DEBUGGING | GENERAL_TECHNICAL

If SECURITY_AUDIT and standard mode: Sentinel is included. Proceed normally.

  1. Cost warning + confirmation:
[Hydra] {{MODE_NAME}} mode -- {{AGENT_COUNT}} agents.
{{PROVIDER_NOTE}}.

Advisors: {{ADVISOR_NAMES}}
Reviewers: {{REVIEWER_COUNT}} ({{REVIEWER_NAMES_OR_NONE}})
Chairman: 1 Opus
{{FOCUS_NOTE_IF_ACTIVE}}

Estimated: {{TIME}}, {{COST}}.

Alternatives:
  {{IF standard}} --mode deep -> 10 agents, ~$1.50-2.50, ~2 min (escalate)
  {{IF standard}} --no-review -> 5 agents, ~$0.35-0.65, ~1 min (fast 4-advisor path)
  {{IF deep}} (no flags) -> standard: 8 agents, ~$0.70-1.20, ~2 min (reduce)
  --no-codex       -> Codex advisors run on Opus instead
  --no-review      -> skip peer review (standard: 8->5 agents; deep: 10->7 agents)

Proceed? [Y/n/{{IF standard}}deep{{ELSE}}standard{{ENDIF}}]

Provider note: Codex modes -> Code sent to Claude (Anthropic) + Codex (OpenAI). Use --no-codex to keep code Anthropic-only. Opus-only modes -> Code sent to Claude (Anthropic) only.

Step 1: Context Enrichment

Quickly scan ( git diff > securitypolicy > CLAUDE.md > project structure. (securitypolicy is capped ~3 KB and never displaces source lines -- evicting cited lines would trigger spurious [WEAK-CITATION] demotions.) If HYDRA_ITERATE: use git diff since previous report timestamp instead of full diff. Each iteration builds FRESH enriched context. Only Top Actions from the LATEST report (~100 tokens) are added, not accumulated from all prior reports. Apply secrets scan to enriched context.

Context sectioning: Tag enriched context sections internally for selective routing in Step 3:

  • [SECTION:source_code] -- file content (used for hydra this)
  • [SECTION:diff_context] -- diff hunks + 30 lines surrounding context (used for hydra branch, hydra iterate, hydra pr)
  • [SECTION:git_diff] -- git diff stat/summary output
  • [SECTION:claude_md] -- CLAUDE.md contents
  • [SECTION:project_structure] -- directory tree
  • [SECTION:config_files] -- package.json, tsconfig, etc.
  • [SECTION:pr_context] -- PR title + description from gh pr view (used for hydra pr; UNTRUSTED data, boundary-wrapped like the diff)
  • [SECTION:security_policy] -- target repo's SECURITY.md / THREATMODEL content, concatenated (security reviews only: SECURITYAUDIT or --focus security; UNTRUSTED data, boundary-wrapped like prcontext; see Security-Policy Detection below)

Security-Policy Detection (only when SECURITY_AUDIT question type OR --focus security):

  • Resolve the policy root in Step 1 (mode-independent -- do NOT use Step 3's TARGET_ROOT): POLICY_ROOT=$(git -C "" rev-parse --show-toplevel 2>/dev/null). If empty (non-git target), SKIP detection entirely -- emit no section, never fall back to pwd.
  • Candidates: the FIRST existing of $POLICY_ROOT/SECURITY.md > $POLICY_ROOT/.github/SECURITY.md > $POLICY_ROOT/docs/SECURITY.md, PLUS $POLICY_ROOT/THREATMODEL.md and $POLICY_ROOT/docs/THREATMODEL.md when present (gather both a SECURITY.md and a THREATMODEL; first-match-only would shadow the threat model).
  • Precondition per candidate (anti-exfiltration): regular non-symlink file ([ -f "$p" ] && [ ! -L "$p" ]) whose realpath stays under $POLICY_ROOT. On violation, skip that file and print [Hydra] policy file skipped (symlink/path escape).
  • Emit surviving files concatenated under SECURITY: and THREATMODEL: sub-headers into [SECTION:security_policy source=]. Cap ~3 KB, counted inside the 5000-token Step-1 limit. Prefer policy sections whose headings match scope-signal terms (scope, out of scope, threat model, trusted, responsibility, unsupported) over head-of-file bytes. On truncation, append [TRUNCATED] to the section header. Apply the standard secrets scan.
  • Emit ONLY when in security scope AND >=1 candidate passes the preconditions; otherwise omit the section (zero behavior change).

Smart Context Windowing (for hydra branch, hydra iterate, hydra pr):

source_code and diff_context are mutually exclusive. Use diff_context when the review is diff-anchored (branch/iterate/pr). Use source_code when the user provides specific code (hydra this).

Construction of [SECTION:diff_context]:

# --- Input validation (defense against malicious filenames / state.json tampering) ---
# reviewed_files must only contain safe path chars and must not start with '-' (otherwise
# git may interpret the value as a flag). Abort on any violation.
for f in "${reviewed_files[@]}"; do
  case "$f" in
    -*) echo "[Hydra] Refusing suspicious filename (leading dash): $f" >&2; exit 1 ;;
  esac
  [[ "$f" =~ ^[A-Za-z0-9._/-]+$ ]] || {
    echo "[Hydra] Invalid filename in reviewed_files: $f -- aborting" >&2; exit 1
  }
done

# PREV_TIMESTAMP must match YYYYMMDDTHHMMSS (matches the report-slug convention); if
# state.json was tampered or carries garbage, discard the field rather than interpolate.
if [[ -n "$PREV_TIMESTAMP" && ! "$PREV_TIMESTAMP" =~ ^[0-9]{8}T[0-9]{6}$ ]]; then
  echo "[Hydra] Invalid PREV_TIMESTAMP '$PREV_TIMESTAMP' -- falling back to full diff" >&2
  unset PREV_TIMESTAMP
fi

# PREV_HEAD_SHA (state.json `latest.head_sha`, written by Step 6) is the PREFERRED iterate
# anchor -- an immutable commit beats the reflog-by-date `@{...}` form, which silently diffs
# against the OLDEST reflog entry on fresh clones / post-gc / CI (empty reflog). Tamper-guard
# it BEFORE interpolation (state.json is an untrusted surface), then confirm it is a real commit.
if [[ -n "$PREV_HEAD_SHA" && ! "$PREV_HEAD_SHA" =~ ^[0-9a-f]{7,40}$ ]]; then
  echo "[Hydra] Invalid PREV_HEAD_SHA -- ignoring" >&2; unset PREV_HEAD_SHA
fi
if [[ -n "$PREV_HEAD_SHA" ]] && ! git cat-file -e "${PREV_HEAD_SHA}^{commit}" 2>/dev/null; then
  echo "[Hydra] PREV_HEAD_SHA not present (rebased/squashed/shallow) -- ignoring" >&2; unset PREV_HEAD_SHA
fi

# hydra branch / hydra pr: hunks against the base branch (`--` separator enforces pathspec).
# Resolve the base robustly so a non-`main` default branch (e.g. axios uses `v1.x`) or a
# gitflow `develop` repo is never mis-detec

…

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Zandereins](https://github.com/Zandereins)
- **Source:** [Zandereins/hydra](https://github.com/Zandereins/hydra)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.