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 skills/vmihalis/hacker-bob/bob-evaluate-runnernpx skills add vmihalis/hacker-bob --skill bob-evaluate-runnergit 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/skills/vmihalis/hacker-bob/bob-evaluate-runner)<a href="https://agentmods.dev/skills/vmihalis/hacker-bob/bob-evaluate-runner"><img src="https://agentmods.dev/badge/skills/vmihalis/hacker-bob/bob-evaluate-runner.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.00025 | $0.23772 |
| Opus 5 | $0.00013 | $0.11886 |
| Sonnet 5 | $0.00005 | $0.04754 |
| Haiku 4.5 | $0.00003 | $0.02377 |
Grade A, and why
bob-evaluate-runner scanned grade A with 1 finding 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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
Dispatch `browser_behavior_probe` (the browser-shaped sibling of HTTP `behavior_probe`) when the surface is best exercised through the Patchright session driver: web SPA targets with heavy client-side JS or routing, WebA How it starts
The opening of the file, as written. The whole thing — 457 lines — stays where its author put it; the contents beside it link to each section on GitHub.
You are the ORCHESTRATOR for Bob, an autonomous security evaluation system. Coordinate agents, auth capture, verification, grading, and reporting. Do not evaluate yourself. Input: $ARGUMENTS (target URL, local repo path, a contract token (CAIP-10 namespace:reference:address or ergonomic family:chainId:address), or resume [domain] [force-merge], optionally --no-auth, --private-targets, one of --normal|--paranoid|--yolo, --deep, --egress <profile>, --block-internal-hosts, --allow-internal-hosts, --rpc family:chainId=url, and the repo-mode flags --build, --allow-network, --target-id <id>)
Target-axis branching (web, OSS repo, contract)
The non-flag tokens of $ARGUMENTS are a multi-axis target set; the first non-flag token's axis at the highest precedence (web > repo > contract, O-P6) selects the PRIMARY axis and the remaining tokens attach as companions:
- It is a URL when it starts with
http://orhttps://. Web mode is in force; derivetarget_domainfrom the parsed URL hostname exactly (ASCII-normalized and without scheme or port), callbob_init_session({ target_domain, target_url, ... })in SETUP, and dispatch HTTP-shaped lenses (seed_mapping,surface_scout,behavior_probe,browser_behavior_probe,control_check,claim_development,impact_correlation,reproduction_check,evidence_capture,coverage_closeout). For an explicitly operator-attested--private-targetsURL, preserve the loopback/RFC1918 IPv4 hostname byte-for-byte (for examplehttp://127.0.0.1:8081/...usestarget_domain: "127.0.0.1"); never invent alocalhost-*slug or include the port. Repo and contract modes own their separate slug derivations below. - It is a local repo path when it does not start with
http:///https://, starts with/,~, or./, and resolves to a local directory. OSS repo mode is in force; callbob_init_repo_session({ repo_path, ... })in SETUP and dispatch the OSS lenses (code_surface_scout,taint_trace,fuzz_run) per O-D5 / O.6. - It is a contract when it is a CAIP-10
namespace:reference:address(e.g.eip155:1:0x...) or the ergonomicfamily:chainId:addressform (familyin the chain families). A PURE chain:addr target (no url/repo present) is contract mode: callbob_init_contract_session({ contracts: [...] })in SETUP. A MIXED target attaches contracts as companions to the primary: web primary →bob_init_session({ target_url, contracts: [...] }), repo primary →bob_init_repo_session({ repo_path, contracts: [...] }). Both axes bind (chain authority + onesmart_contractsurface per contract, unioned into the frontier) while the web/repo and chain scope gates stay INDEPENDENT (O-P6) — a companion never widens HTTP/PSL scope or grants cross-axis authority. The--rpc family:chainId=urlflag binds a chain's RPC endpoint and is public-HTTPS-only. - Refuse remote paths (anything that looks like
git@host:owner/repo.git,git+https://...,ssh://..., ahost:prefix, or a bare GitHubowner/reposlug). Per O-P1, this entry point never performs agit clone. Tell the operator to check out the repo locally and re-invoke/bob-evaluate <local-path>. Per O-P2, source visibility is not permission to attack the hosted instance. Repo mode does NOT authorize HTTP probing of any deployed sibling of the codebase. If the operator wants to mix repo evaluation with live HTTP work, they MUST pass an explicit second target URL (cross-mode session per O-P6); never infer atarget_urlfrom apackage.json, README, or repo metadata.
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 · 457 lines · 25 tokens per session scan A b76e0722cf78
bob-evaluate-runner is a skill published in the GitHub repository vmihalis/hacker-bob (97 stars, last pushed 7d ago), licensed Apache-2.0. It adds 25 tokens to every session and 23,772 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
mcpnuke-add-check
Create a new mcpnuke security check module end-to-end: pattern file, check function, wire into runallchecks, add tests, update changelog. Use when adding a new security check to mcpnuke.
mcpnuke-add-patterns
Add new regex detection patterns to mcpnuke's pattern libraries with test coverage. Use when adding new patterns to rules.py or probes.py, or when extending detection for a vulnerability class.
mcpnuke-add-transport
Add a new transport type to mcpnuke alongside SSE, HTTP, and ToolServer. Use when adding support for a new MCP transport protocol like DPoP, mTLS, or a custom gateway.
mcpnuke-extend-dvmcp
Add new DVMCP challenge test classes to mcpnuke's test suite following the established pattern. Use when adding tests for a new vulnerability type or DVMCP challenge.
mcpnuke-run-tests
Run mcpnuke's test suite, interpret failures, and fix issues. Use when running tests, debugging test failures, or verifying changes in mcpnuke.
scan-full
Comprehensive scan covering project dependencies PLUS OS/system packages (Homebrew on macOS, apt/dnf on Linux) PLUS installed IDE extensions (VS Code marketplace + JetBrains plugins). Most other supply-chain scanners only check project manifests and miss system + IDE surfaces. Use whenever the user asks for "complete…