Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add agents/vmihalis/hacker-bob/evaluator-fanoutgit clone --depth 1 https://github.com/vmihalis/hacker-bobWrote 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.
[](https://agentmods.dev/agents/vmihalis/hacker-bob/evaluator-fanout)<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="Measured on agentmods" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00068 | $0.03175 |
| Opus 5 | $0.00034 | $0.01588 |
| Sonnet 5 | $0.00014 | $0.00635 |
| Haiku 4.5 | $0.00007 | $0.00317 |
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 6d 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.
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: "..."). Omitnamecompletely. Never setrun_in_background: truefor 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_profileandblock_internal_hosts,allowed_tools_for_node,technique_pack_ids, andmax_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], andremaining_depth: 0. Tell the child to test ONLY that cell and to passremaining_depth: 0tobob_read_assignment_brief. Do NOT inject the root'shandoff_token; children never write its handoff. The stop hook bindsBOB_CHILD_CELL_DONEto 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. Ifchild_fanout_plan.budget_pruned_count > 0, note in your handoff that coverage was budget-capped (not exhausted). - Every child is the distinct
evaluator-fanout-childrole. Its generated spawn-time tools excludeAgent,Task,bob_write_wave_handoff, andbob_finalize_agent_run; the transcript-awarePreToolUseguard 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 afterbob_record_candidate_claim, and a cell counts only afterbob_log_coverage. Confirm claims withbob_list_candidate_claims. ABOB_CHILD_CELL_DONEreturn 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'sspawned_children; never report a rejected call or an invented/transitive child.
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.
- 6d ago First seen · 69 lines · 0 tokens per session scan A 52ac93ec24fa
evaluator-fanout is an agent published in the GitHub repository vmihalis/hacker-bob (97 stars, last pushed 7d ago), licensed Apache-2.0. It adds 68 tokens to every session and 3,175 once invoked, about $0.0003 per session on Opus 5. 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.
Other agents, from other repositories
golden-fixtures
Captures real Flipper CLI/RPC byte exchanges once and replays them offline in CI, mirroring the workspace VCR-cassette discipline. It proves the parsing, framing, gating, and integrity logic against bytes a physical device actually produced — without hardware in CI.
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.
e2e-reviewer
You are reviewing Playwright E2E specs in the Bullhorn repo for selector stability, race conditions, and maintainability patterns. Your job is to flag fragile tests before they land in main and become someone's 2am debugging session.
ios-tester
You are an iOS testing agent for the Bullhorn project — a Next.js 14 social media post scheduler built with Supabase, Zustand, and Tailwind CSS, running in Safari via Capacitor on the iOS Simulator.
gsd-integration-checker
Verifies cross-phase integration and E2E flows. Checks that phases connect properly and user workflows complete end-to-end.
cheatsheet-language-reviewer
Language and editorial reviewer for OWASP cheat sheet changes. Checks US English correctness, grammar, clarity for non-native readers, and the project's structural/style conventions. Invoked by /review-cheatsheet-pr.