This release is a pre-release and may not be stable for production use.
keyreach
Paste any leaked API key — cloud, AI, payment, comms, dev-tool, database, or SaaS — and get a full capability map plus a disclosure-ready security report with a computed severity, in one command.
⚠️ Status: early — building in public
keyreach cannot analyse a key yet. The package installs and
keyreach --helpworks, but detection, validation, enumeration, scoring and reporting are still ahead — every claim below the fold describes the destination, not today's behavior.Code lands one roadmap item at a time, each on its own feature branch and pull request, so the whole build is auditable in the open. Follow along in
ROADMAP.md: R0.1 (repo structure) and R0.2 (project scaffold) are done; next up is R0.3 — Core data models.
What it is
When a hunter finds an exposed key — a Google AIza…, an OpenAI sk-…, an AWS
AKIA…, a Stripe sk_live_…, a Slack xoxb-… — the value of that finding
depends entirely on what the key can actually do. Answering that today means
chaining a different tool per provider, ad-hoc curl recipes for everything
else, and hand-writing the report every single time.
keyreach collapses that into one deterministic command. Give it a key you own or are authorized to test, and it:
- identifies which provider the key belongs to, by rule;
- confirms whether it is live and whose account it belongs to;
- enumerates, read-only, exactly which services, scopes, and resources it reaches;
- computes a severity band (Info → Critical) from those confirmed capabilities, with a visible rationale;
- emits a disclosure-ready report — masked key, per-capability evidence, impact, and remediation — ready to paste into a HackerOne or Bugcrowd submission.
It is built for bug bounty hunters, pentesters, red teams, and blue teams doing exposure triage.
What it is NOT
keyreach is deliberately narrow. Knowing what it won't do is as important as knowing what it will.
| It is not… | Because that is… |
|---|---|
| A secret scanner. keyreach never crawls repos, S3 buckets, or Docker images looking for secrets. It starts from a key you already have — optionally piped in from a scanner. | TruffleHog / gitleaks / Nosey Parker territory. This is a deliberate wedge, not a gap. |
| An exploitation framework. No privilege escalation, no lateral movement, no destructive actions, no spend. | Pacu's domain. keyreach stays a scoping-and-reporting tool. |
| A CSPM / continuous audit platform. No posture management across a whole cloud estate. | Prowler / ScoutSuite's job. |
| An AI tool. No LLM-assisted classification, no "smart" heuristics that call a model, ever. | See below — it is a hard architectural constraint, not a preference. |
Core principles
These are non-negotiable and shape every decision downstream
(plan.md §1).
-
Deterministic and rule-based — no AI/LLM, ever. keyreach contains zero AI or LLM calls and zero AI/LLM SDK dependencies, anywhere. Detection, validation, enumeration, scoring, and reporting are all driven by explicit rules and real provider responses. Three reasons this is non-negotiable:
- Security — keyreach handles live secrets. Sending a key to an external model would itself be a credential leak.
- Reproducibility — the same key against the same provider state must always produce the same capability map, severity, and report. A finding you can't reproduce is a finding you can't report.
- Auditability — every verdict traces to a concrete rule and a concrete API response, so both you and the team receiving your report can verify exactly why the tool said what it said.
If a rule can't decide a capability, keyreach reports it as
unknown. It never guesses. A CI check (ai_ban) fails any build that introduces an AI/LLM dependency or model endpoint. -
Read-only by default. Every probe is non-destructive. keyreach never writes, deletes, or spends money in its default operation. The HTTP layer default-denies non-idempotent methods; anything aggressive is opt-in, explicitly flagged, and loudly warned.
-
Single-key ergonomics. One key in, full picture out. No scanning workflow to wade through.
-
Transparent severity. Severity is computed from the capabilities keyreach actually confirmed, with a visible rationale — never a hardcoded per-provider label. That rationale is the bounty argument.
-
Authorized use only. Built for keys you own or are explicitly authorized to test — bounty scope or engagement. See
SECURITY.md.
How it works
detect → validate → enumerate → score → report
- detect — deterministic pattern and entropy rules identify the provider.
- validate — the cheapest read-only liveness and identity call.
- enumerate — read-only probes map which services, scopes, and resources the key reaches.
- score — a pure, rule-based function turns confirmed capabilities into a severity band plus rationale.
- report — terminal, JSON, Markdown, or HTML output; masked key, evidence, impact, remediation.
Provider plugins declare probes; the engine executes them through a
single shared HTTP layer that owns rate limiting, record/replay, redaction, and
the read-only guard. That is what makes determinism enforceable in one place —
see implementation_plan.md §2.
Install
The keyreach name is reserved on PyPI, but there is no installable release
yet — only a 0.1.0.dev0 placeholder. pip install keyreach resolves nothing
on purpose: pip skips pre-releases by default, so nobody installs a tool that
cannot do anything. The first real release is
R1.6.
# Not available yet — planned for v0.1.0:
pipx install keyreach
To run the current scaffold from source (Python 3.11+):
git clone https://github.com/Phantom-IN/keyreach.git
cd keyreach
pipx install -e . # or: pip install -e '.[dev]'
keyreach --help
Usage
Coming soon. Right now only
--helpand--versiondo anything. The CLI surface below is the specification fromimplementation_plan.md§12, not a description of working software. CLI UX lands in roadmap item R1.5.
keyreach KEY # detect → validate → enumerate → score → terminal report
keyreach KEY --report md -o out.md
keyreach KEY --report html -o out.html
keyreach KEY --json # machine-readable, schema-validated
keyreach -f keys.txt # batch from file
cat keys.txt | keyreach - # batch from stdin
keyreach KEY --provider google # force provider, skip detection
keyreach KEY --no-enumerate # validity + identity only
keyreach KEY --delay 500ms # rate-limit probes
keyreach KEY --unmask # show full key (off by default)
keyreach KEY --fail-on high # exit nonzero if band >= high (CI gating)
Planned exit codes: 0 success/info, 2 a finding at or above the --fail-on
threshold, 1 operational error.
Provider coverage
Prioritized by leak frequency × blast radius, across cloud/infra, AI/LLM,
payment, communications, email/marketing, dev platforms, databases/data infra,
monitoring, auth/identity, and a generic bearer/JWT inspector. The full target
list is plan.md §8; the shipping order is
ROADMAP.md.
v0.1 target: ≥10 providers across ≥4 categories, including cloud, AI, payment, and comms.
Documentation
| Document | What it covers |
|---|---|
plan.md |
The product plan — what keyreach is and why. Scope, goals, non-goals, severity model intent, report contents, safety policy. |
implementation_plan.md |
The technical blueprint — how it is built. Architecture, interfaces, determinism enforcement, testing, CI guardrails, CLI spec. |
ROADMAP.md |
Every planned item, with acceptance criteria. One item per feature branch. |
CONTRIBUTING.md |
Dev setup, the build-in-public workflow, commit conventions, and the hard rules. |
SECURITY.md |
Responsible use, and how to report a vulnerability in keyreach itself. |
CLAUDE.md |
Working rules for agents and contributors touching this repo. |
CREDITS.md |
The prior art keyreach learns from and reuses. |
Contributing
Contributions are very welcome — especially new provider plugins. The target is that adding a provider is a small, self-contained, ~30-minute contribution: recognize the key, one cheap read-only validity check, a set of read-only probes, and metadata.
Start with CONTRIBUTING.md, then the provider checklist in
CLAUDE.md. Every roadmap item is tracked as an issue and lands via
its own pull request.
Legal & ethics
Use keyreach only against keys you own or are explicitly authorized to test — your own infrastructure, an in-scope bug bounty program, or a documented engagement. Validating a key generates authentication traffic and log entries on the target service. Testing credentials without authorization may be illegal in your jurisdiction, regardless of how the key was exposed.
keyreach is read-only by design and ships no exploitation features, but the
responsibility for authorization is yours. The authors accept no liability for
misuse. Full policy: SECURITY.md.
License
Apache License 2.0 — see LICENSE and NOTICE.
Third-party attributions are recorded in NOTICE and
THIRD_PARTY_LICENSES.md. keyreach never copies
AGPL/GPL code; such projects are studied and re-implemented from public
documentation only.
Credits
keyreach builds on work by the TruffleHog team, streaak (KeyHacks), Mazin Ahmed (secrets-patterns-db), Ozgur Alp (gmapsapiscanner), Andrés Riancho (enumerate-iam), Rhino Security Labs, gitleaks, Yelp (detect-secrets), Prowler, NCC Group (ScoutSuite), and ProjectDiscovery (nuclei).
Full acknowledgements: CREDITS.md.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file keyreach-0.1.0.dev0.tar.gz.
File metadata
- Download URL: keyreach-0.1.0.dev0.tar.gz
- Upload date:
- Size: 55.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8809132f46a28f022e9dee3059be10332a7591a0ccb6c6e61de8a04808f937b1
|
|
| MD5 |
f79c371baa4a0b59e47abd0de290d5c5
|
|
| BLAKE2b-256 |
73a903319338a3af82be8733382e6e6ebfb63ef20aacbb87f82daa9b0b611016
|
File details
Details for the file keyreach-0.1.0.dev0-py3-none-any.whl.
File metadata
- Download URL: keyreach-0.1.0.dev0-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70eb3d3b27ab73fc43fb3250e6f62f1c51a78a590b6e4833b066df53d4f87c2d
|
|
| MD5 |
0a590165b04559e8707f70035a37d7c4
|
|
| BLAKE2b-256 |
2ea29080050a70be40b0e91163b57a4e9172269f6b5b16c27ceed9a7f478c12e
|