← the studio
hunter-engine · shared substrate

The 80% every Hunter AI
doesn't need to rebuild.

Extracted from Crypto Hunter AI: the scout → gate → debate → mission machinery that turned out to have almost no crypto in it at all. Two extension points (a gate-hard check hook, a spec-class hook) let a new domain plug in its own verification without forking the engine.

Why this exists

Crypto-hunter's own gate is 95% domain-agnostic.

An audit of the shipped, live, 47-test Crypto Hunter AI found that almost none of its trust machinery is actually about crypto. The gate's fail-closed logic, the debate's Advocate/Skeptic/Strategist mechanism, the deterministic mission-budget packer, the SQLite store — none of it references a chain or a token. Only the domain's own verification check (crypto: on-chain contract lookup) and a few optional fields were crypto-specific — and even those already degraded gracefully when absent. So instead of copy-pasting that 80% into every new domain, it became its own package.

hunter-engine spec · gate · debate · mission Crypto Hunter AI (reference, not migrated) Collectible Hunter AI comp-arbitrage gate Free Money Hunter AI registry gate
One substrate, three verification models. Crypto-hunter stays on its own code — live on a daily cron, not worth the migration risk.

The two extension points

This is the whole API surface a new domain needs.

Gate.extra_checks

A list of callables, each (spec) -> GateEvidence, appended to the built-in evidence list. This is where a domain's own gate-hard verification lives — comp-price confirmation for collectibles, official-registry confirmation for unclaimed benefits.

DataHub.spec_cls

The one real coupling the audit found: the store needs to know which concrete OpportunitySpec subclass to validate into. Pass your own domain spec class and every read/write round-trips it correctly.

What's generic vs. what a domain supplies

ModuleGeneric (this package)Domain supplies
spec.pyAll fields except type's meaningA closed type enum + extra fields, via subclassing
gate.pyAllowlist, domain-age, confirmation-count, scam-report checksOne or more extra_checks
store.pyThe whole SQLite schema and APIIts own spec_cls and db path
mission.py, debate.py, scoring.py100% — zero changes neededAn org_name string, a profile
agents/runtime.py100% — the whole LLM tool-calling loopNothing
agents/scouts.pyThe Beat/run_scout mechanismIts own BEATS dict + SPEC_SHAPE

Where it stands

✓ shipped  extracted from crypto-hunter, 31 tests green
✓ proven  two independent consumers (Collectible + Free Money Hunter AI) exercising every extension point — no changes needed to hunter-engine itself once both were live
✓ live-validated  both consumers ran real day-cycles against real APIs
Installed by consumers as a local editable dependency — no PyPI, this is a personal multi-repo setup under one GitHub org.