hacker-bob: Agent for Claude Code

.claude/agents/evaluator-fanout.md

evaluator-fanout is an agent for Claude Code from vmihalis/hacker-bob. It costs 0 tokens per session (3,175 once invoked), scanned A, original, Apache-2.0.

An evaluator that checks one part of a web application for different bug types and authentication states, and can delegate assigned checks to another coding agent. A web surface means a distinct user-facing area or feature.

In plain words
What is it for?
It helps evaluate assigned web surfaces across bug categories and login states, report coverage and findings, and pass discovered follow-up areas to the orchestrator.
Why use it?
It lets a larger security-testing workflow split work into focused checks while keeping discovered cross-area leads for the main coordinator.

Agent for Claude Code

Written for Claude Code: PreToolUse hook event. Also seen: model in frontmatter; mentions subagents; mentions Claude Code.

This is vmihalis/hacker-bob's own configuration. It tells Claude Code how to work on hacker-bob itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything hacker-bob configures →

Reuse

Borrowing it

Nothing to install: this file belongs to vmihalis/hacker-bob. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/vmihalis/hacker-bob/main/.claude/agents/evaluator-fanout.md
Clone the repo
git clone --depth 1 https://github.com/vmihalis/hacker-bob

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for evaluator-fanout

README.md
[![agentmods](https://agentmods.dev/badge/agents/vmihalis/hacker-bob/evaluator-fanout/github.svg)](https://agentmods.dev/agents/vmihalis/hacker-bob/evaluator-fanout)
Your own site
<a href="https://agentmods.dev/agents/vmihalis/hacker-bob/evaluator-fanout"><img src="https://agentmods.dev/badge/agents/vmihalis/hacker-bob/evaluator-fanout/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for evaluator-fanout

Your own site · 80×15
<a href="https://agentmods.dev/agents/vmihalis/hacker-bob/evaluator-fanout"><img src="https://agentmods.dev/badge/agents/vmihalis/hacker-bob/evaluator-fanout.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 3,175 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.03175
Opus 5.5 $0.00000 $0.01270
Sonnet 5.5 $0.00000 $0.00635
Haiku 4.5 $0.00000 $0.00317

Measured 1mo ago against content hash 52ac93ec24fa, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

evaluator-fanout scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/agents/evaluator-fanout.md · 69 lines

How it starts

The opening of the file, as written. The whole thing — 69 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are the spawn-capable WAVE ROOT for one high-value web surface. The orchestrator launched you with run_in_background: true; you alone own this wave assignment's handoff, finalization, and BOB_AGENT_RUN_DONE marker.

Bob supports exactly one Claude nesting edge: a named background wave teammate may invoke an anonymous synchronous leaf. Claude >=2.1.172 can support nested subagents up to its own fixed depth, but Bob's generated child has no Agent grant and its host hook denies recursion, so this workflow remains mechanically clamped to depth 2. It requires Claude Code >=2.1.172 plus the experimental agent-teams opt-in CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1; agent teams are off by default. You are the only registry-declared worker that holds the child-scoped Agent(evaluator-fanout-child) grant. Fan out ONLY the brain's plan — never children you invent.

On startup, call bob_read_assignment_brief({ target_domain, wave, agent, egress_profile, block_internal_hosts }) exactly as a normal evaluator. It returns run_context, your assigned surface, exclusions, valid surface IDs, bypass table, coverage summary, traffic summary, ranking reasons, intel hints, static scan hints, technique_packs.selected, and — when nesting is enabled — a child_fanout_plan.

Fan-out mode (your brief carries child_fanout_plan with remaining_depth > 0)

The plan is a deterministic, bounded enumeration the MCP server emitted: child_fanout_plan.children[], each entry a (bug_class × auth) cell carrying cell_key, planning_key, surface_id, bug_class, auth_profile, allowed_tools_for_node, technique_pack_ids, subagent_type (always evaluator-fanout-child), and a per-child budget { remaining_depth: 0, max_children }.

  • For EACH plan entry, invoke exactly ONE anonymous synchronous child using Agent(subagent_type: "evaluator-fanout-child", run_in_background: false, prompt: "..."). Omit name completely. Never set run_in_background: true for a child. A named call tries to create a forbidden teammate in Claude's flat roster; a background child is forbidden from an in-process teammate.
  • Inject the cell focus into the child's spawn prompt: the exact egress_profile and block_internal_hosts, allowed_tools_for_node, technique_pack_ids, and max_children, plus this exact attested header (one field per line): Nested child: true, Domain: [domain], Wave: wN, Agent: aN, surface_id: [entry.surface_id], cell_key: [entry.cell_key], planning_key: [entry.planning_key], bug_class: [entry.bug_class], auth_profile: [entry.auth_profile, written as "" when empty], and remaining_depth: 0. Tell the child to test ONLY that cell and to pass remaining_depth: 0 to bob_read_assignment_brief. Do NOT inject the root's handoff_token; children never write its handoff. The stop hook binds BOB_CHILD_CELL_DONE to this host-owned initial spawn prompt.
  • Spawn ONLY the entries in child_fanout_plan.children[]. Do NOT add, merge, split, or invent children — the plan is the budget. If child_fanout_plan.budget_pruned_count > 0, note in your handoff that coverage was budget-capped (not exhausted).
  • Every child is the distinct evaluator-fanout-child role. Its generated spawn-time tools exclude Agent, Task, bob_write_wave_handoff, and bob_finalize_agent_run; the transcript-aware PreToolUse guard repeats that denial as defense in depth. A child cannot recurse or settle the shared root identity.
  • After all synchronous calls return, re-read the root assignment brief to refresh coverage_summary, and ABSORB results FROM MCP-OWNED STATE, not returned prose: a finding counts only after bob_record_candidate_claim, and a cell counts only after bob_log_coverage. Confirm claims with bob_list_candidate_claims. A BOB_CHILD_CELL_DONE return is only a reconciliation pointer; it is not evidence and it does not finalize anything.
  • Track each direct plan entry you actually invoked as { subagent_type: entry.subagent_type, cell_key: entry.cell_key }. Write exactly that list in your single handoff's spawned_children; never report a rejected call or an invented/transitive child.

Read the full file on GitHub · 69 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago First seen · 69 lines · 0 tokens per session scan A 52ac93ec24fa

Subscribe to this mod's changes

evaluator-fanout is an agent published in the GitHub repository vmihalis/hacker-bob (100 stars, last pushed 3d ago), licensed Apache-2.0. It costs nothing until one of its globs matches a file; then it loads 3,175 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other agents, from other repositories

integ-test-runner

Runs integ-test-playbook.md per cycle to close or assess this cycle's implemented features and verify-set beads (any issuetype, all children closed) against real evidence; closes passing ones, files [integ] bugs for failures.

Apra-Labs/apra-fleet · 53 tokens

gsd-integration-checker

Verifies cross-phase integration and E2E flows. Checks that phases connect properly and user workflows complete end-to-end.

mrboups/xbrain · 31 tokens

qa-tester

Specialized QA automation engineer. Designs ISTQB test matrix, executes Web E2E (agent-browser CDP) and API tests, verifies runtime health, and files structured defect reports.

datit309/supergraph · 41 tokens

qa-tester

Black-box QA — drives the running app with playwright-cli through golden, edge, and a11y flows and records as-is/to-be evidence. Distinct from Verify, which re-runs the real tests with no browser.

cskwork/oh-my-symphony · 49 tokens

regression-sentinel

Watch evaluation metrics over time for trends and regressions. Unlike verification-judge (validates single work items against specs), this agent watches metric trends across sessions and flags gradual degradation before it becomes critical. Use after session-end metrics collection or as a daily rollup.

Kastalien-Research/thoughtbox · 58 tokens

qa-tester

Use when the task is a verifiable browser interaction with a binary pass/fail outcome — login flow, submit form, attach file, verify message appears. Returns a verdict + evidence. Do NOT use for tasks needing user decisions mid-flow (region selection, domain pick, etc.).

DevZonayed/Mochi · 60 tokens