changelog
Every change, documented.
Keep a Changelog format · semantic versioning · raw on GitHub
unreleased
- Provider coverage expanded 12 → 37 rules for LLM-inference parity: OpenRouter, Groq, Together, Fireworks, xAI, Perplexity, Hugging Face, Cerebras, Replicate, Vercel AI Gateway, NVIDIA NIM, Chutes, Requesty, Novita, Upstage, Baseten, Baidu Qianfan, fal.ai, DashScope, Moonshot Kimi, Mistral, Cohere, Scaleway.
- Generic fallback rules: unattributed
sk-32-char key shape and generic JWT. - OpenAI rule tightened to the
T3BlbkFJmarker — no longer double-fires with the genericsk-rule. - Prefixless and generic-prefix shapes are keyword-gated: the provider name must appear in the scanned text before the regex is tried.
- Providers with no publicly documented key format get keyword-gated opaque rules — attribution + rotation URL, not shape confidence. No guessed regexes, ever.
planned next
- Silent redaction via
updatedToolOutputfor PostToolUse hooks — the agent never sees the raw value. - Active verification mode — "is this key actually live?"
--file-pathflag onscan --stdinfor path-based allowlists.
v0.1.0
- Initial release.
- Detection core: regex patterns (12 built-in providers), bash escape-hatch detector, entropy candidates.
- Claude Code plugin with 6 hook scripts covering 8 detection rows.
- CLI peer with
scan,list,close,watchcommands. - Pattern layering: builtin →
~/.token-hunt/patterns.local.toml→./.token-hunt/patterns.local.toml. - Allowlist engine (path-based + fingerprint-based).
rotations.logJSONL store with 72-hour OVERDUE tracking.- Bash escape-hatch detection — the
${VAR:+SET}${VAR:-UNSET}bug class no regex scanner sees. TOKEN_HUNT_DISABLE=1opt-out ·TOKEN_HUNT_ALLOW=1one-shot bypass.- Fail-closed: scanner crashes BLOCK with a bypass hint, never silently allow.