ReconPro v11
Pure-Python security reconnaissance engine — 28 modules, 81 commands, honest by construction.
Quickstart · Verify a release · Architecture · Screenshots · All documentation
ReconPro v11.2.0 is a pure-Python security reconnaissance platform: remote and local scanning behind a truth layer that validates every target before claiming anything about it, a sandboxed plugin SDK, machine-readable output (JSON / SARIF / Markdown / HTML) for CI/CD pipelines, MITRE ATT&CK mapping, and reproducible, signed releases.
Every number on this page was counted or measured from the repository, not invented:
- 28 scan modules (25 remote/advanced + 3 local:
host,dev,doctor) — counted viareconpro list --all; every module is execution-tested (reconpro/tests/test_module_execution.py) - 81 top-level commands — counted from
reconpro --helpand from the 81add_parser()calls inreconpro/cli.py - 3301 tests across 53 files (
pytest --collect-onlyon this tree), including a plugin sandbox-attack suite, a 150-test prompt-injection defense suite, and a secret-detection corpus with 22 positive secret classes (zero missed) and 15 negative lookalike classes (zero false positives) - Strict CLI — unknown commands and arguments exit
2with did-you-mean suggestions; thereconpro example.comshorthand still works for URL / IPv4 / dotted-domain / localhost targets - Honest scans — a target that cannot be resolved or reached is
reported as such (score 0, grade
U, one explanation finding); HIGH severity findings against unreachable targets are impossible by construction - Every finding carries evidence plus a
confidence(0–1) and theverification_stateof the target it came from (VERIFIED_TARGET/PARTIAL_TARGET/UNREACHABLE_TARGET) - TLS verified by default everywhere;
--insecure/-kis the single, audited opt-out — it validates the target withtls_valid: falsepermanently recorded in the report, and when the target only partially verifies (PARTIAL_TARGET, e.g. self-signed cert without--insecure) severities are capped at MEDIUM - Sandboxed plugin SDK — separate OS process with RLIMIT_AS 128 MiB / CPU 10 s / FSIZE 16 MiB, an audit hook blocking subprocess/sockets/ privilege changes/out-of-workdir writes, Ed25519 signing, and an install/verify/upgrade lifecycle — docs/PLUGINS.md
- Prompt-injection defense on all AI-facing components (chat, agent, copilot)
- Reproducible, signed releases — byte-identical wheel and sdist
rebuilds, CycloneDX 1.5 SBOM with licenses,
SHA256SUMSwith Ed25519 + GPG signatures, aPROVENANCE.jsontrust chain, and a mandatory release gate — docs/RELEASE.md, docs/RELEASES.md - Language SDKs — Python / Node.js / Java / Go / Rust wrappers around the CLI's JSON output — docs/SDKS.md
- Fast startup — the
--versioncold start measured 49.0 ms median (7-runtools/bench_startup.pysession on the v11.2.0 release tree; p95 ≤ 49.2 ms; ~46 ms on the developer workstation where the lazy-import work landed); CI gate at 100 ms — docs/PERFORMANCE.md
Quickstart — 60 seconds
pip install reconpro
reconpro --version # ReconPro 11.2.0
reconpro doctor # health-check this machine (local, no network)
reconpro tutorial # 8-step guided tour
reconpro scan example.com --modules recon --json --timeout 60 # (network)
Runnable scripts for every workflow live in examples/ —
each one was executed before being committed.
Installation
pip install reconpro # from PyPI
Optional extras: pip install "reconpro[full]" (aiohttp, playwright,
openai/anthropic, networkx, scapy, shodan, websockets) or pick
individually: async, browser, llm, graph, raw, intel,
collab, integrations.
Runtime dependencies: rich>=13, textual>=0.40, requests>=2.28,
cryptography>=41. Python 3.10+.
From source:
git clone https://github.com/falconxa0-commits/reconpro.git
cd reconpro
pip install -e . # editable install
# or build a reproducible wheel + sdist yourself:
python tools/release_manager.py build --reproducible
Verifying a release
Every release ships SHA256SUMS signed with Ed25519 (authoritative)
plus a GnuPG detach-signature, a CycloneDX 1.5 SBOM, and a
PROVENANCE.json trust chain (developer → commit → source digest →
build → signatures → user). The GPG public key
(5F3D 637E FDE1 E8F5 6568 BEE0 2331 2E75 1E3F 9F89) is published in
docs/keys/ and on keyserver.ubuntu.com /
keys.openpgp.org.
# after downloading the release assets (wheel, sdist, SBOM, SHA256SUMS,
# SHA256SUMS.ed25519, SHA256SUMS.asc) into one directory:
sha256sum -c SHA256SUMS # 1. every artifact hash
python3 - <<'EOF' # 2. the Ed25519 signature
from pathlib import Path
pub = bytes.fromhex(Path("tools/keys/release_key.pub").read_text().strip())
sig = bytes.fromhex(Path("SHA256SUMS.ed25519").read_text().strip())
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
Ed25519PublicKey.from_public_bytes(pub).verify(sig, Path("SHA256SUMS").read_bytes())
print("Ed25519 signature: VALID")
EOF
gpg --import docs/keys/reconpro-release-5F3D637E.asc # 3. the GPG signature
gpg --verify SHA256SUMS.asc SHA256SUMS
From a repository checkout you can instead run the all-in-one verifier (exit 0 = hashes, signatures, SBOM, manifest and provenance chain all consistent):
python tools/release_manager.py verify
Full procedure, key-rotation process and per-release evidence: docs/RELEASE.md, docs/keys/, docs/RELEASES.md, docs/PROVENANCE.md.
Architecture
┌────────────────────────────────────────────┐
│ CLI (reconpro/cli.py — 81 subcommands) │
│ strict argv parsing · JSON on stdout, │
│ human output on stderr · exit 0/1/2/130 │
└───────────────┬────────────────────────────┘
│ remote scan?
▼
┌────────────────────────────────────────────┐
│ TARGET VALIDATION PIPELINE (truth layer) │
│ DNS ──▶ TCP ──▶ HTTP/TLS │
│ VERIFIED_TARGET │ PARTIAL_TARGET │ │
│ UNREACHABLE_TARGET (short-circuit: no │
│ modules run, score 0, grade U) │
└───────────────┬────────────────────────────┘
▼
┌────────────────────────────────────────────┐
│ ENGINE (reconpro/engine.py, async) │
│ concurrent modules · per-module adaptive │
│ timeouts · module-health circuit breakers │
│ (unhealthy modules are quarantined) │
└───────────────┬────────────────────────────┘
▼
┌────────────────────────────────────────────────────────┐
│ 28 MODULES (reconpro/registry.py is the single │
│ source of truth): recon, auth, chain, bot, gorgon, │
│ oblivion, vibesec, nhi, pegasus, cloud_recon, team, │
│ quantum_fingerprint, dark_web_monitor, info_ops, │
│ steganography_detector, covert_channel, zero_day_ │
│ hunter, infrastructure_ghost, signal_intelligence, │
│ nation_state_attributor, weaponized_report, │
│ honeypot_dance, dead_drop, container_sec, iac_audit │
│ + local: host, dev, doctor │
└───────────────┬────────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────┐
│ FINDINGS — every one carries: evidence, confidence │
│ (0–1), verification_state, severity, category, │
│ remediation, points_deducted (reconpro/http_layer.py │
│ Finding dataclass) │
└───────────────┬────────────────────────────────────────┘
▼
┌────────────────────────────────────────────────────────┐
│ REPORTS — JSON / SARIF 2.1.0 / Markdown / HTML │
│ (+ printable-HTML PDF export; CSV via the Python API) │
│ each report includes target_validation + scan_metadata │
│ (started_at, duration_s) │
└───────────────┬────────────────────────────────────────┘
▼
HISTORY (~/.reconpro/history/*.json — one file per scan;
feeds `reconpro history`, `diff`, `export`, `report`)
Details: docs/development/ARCHITECTURE.md.
Screenshots
Real terminal captures — animated SVGs recorded from actual runs (see
docs/screenshots/; regenerate any of them with the commands shown):
|
The command surface — |
The module catalog — |
|
A live scan — |
Machine audit — |
Use it in CI — SARIF in ~10 lines
- uses: falconxa0-commits/reconpro/actions/reconpro-scan@v11.2.0
with:
target: .
The composite action runs AST analysis + secrets + project scan, exports SARIF 2.1.0, uploads the artifact and ingests it into GitHub Code Scanning. Tutorial: docs/TUTORIALS.md; pipeline exit-code contract: docs/guides/ENTERPRISE.md.
Python API
from reconpro import scan, audit_scan, __version__
result = audit_scan(".") # local, no network
print(result.total_score, result.grade) # 0-100, A+..F
print(result.severity_counts) # {'critical': 3, ...}
result = scan("example.com", modules=["recon"], timeout=60) # (network)
for f in result.findings: # every finding carries
print(f["confidence"], f["verification_state"])
Full JSON schema (including target_validation and scan_metadata):
docs/reference/API.md.
Documentation
Start at docs/README.md — the documentation index.
| Document | Contents |
|---|---|
| docs/GETTING_STARTED.md | install, first scan, doctor, tutorial, wizard, suggest — with real outputs |
| docs/TUTORIALS.md | beginner track: first scan, machine audit, SARIF in CI, first plugin, SDKs |
| docs/reference/CLI_REFERENCE.md | all 81 subcommands: usage, options tables, examples, exit codes |
| docs/reference/CONFIGURATION.md | ~/.reconpro/ layout, config.json, environment variables |
| docs/reference/API.md | the JSON output schema + Python API, field by field |
| docs/guides/SCANNING.md | module selection, timeouts, rate limiting, honest-scan semantics |
| docs/guides/REPORTS.md | JSON/SARIF/MD/HTML reports and the truth-layer fields |
| docs/guides/ADVANCED.md | blitz multi-target, diff, --insecure + PARTIAL_TARGET, plugins |
| docs/guides/ENTERPRISE.md | CI/CD, exit-code contract, air-gapped verification, key rotation |
| docs/PLUGINS.md | plugin SDK: sandbox guarantees, permissions, manifest, signing, lifecycle |
| docs/SECURITY.md | security posture: strict CLI, TLS-by-default, shell-free execution, sandbox |
| docs/security/THREAT_MODEL.md | what ReconPro protects against; attack surface of the tool itself |
| docs/development/ARCHITECTURE.md | registry, engine, http_layer, finding schema, target validation |
| docs/development/TESTING.md | chunked test strategy, how to run it, what CI runs |
| docs/RELEASE.md | release_manager, SBOM, checksums, signatures, reproducibility, gate |
| docs/PROVENANCE.md | the commit → build → signature → user trust chain |
| docs/RELEASES.md | release transparency: keys table, per-version evidence |
| docs/SDKS.md | the six language SDKs (Python/TS/Go/Rust/Node/Java) and their status |
| docs/IDE.md | VS Code / JetBrains / Neovim / GitHub Action / GitHub App |
| docs/PERFORMANCE.md | startup numbers, benchmark tool, CI gate, lazy-import architecture |
| docs/ROADMAP.md | what is next: enterprise, plugin marketplace, cloud dashboard, teams |
| CONTRIBUTING.md | developer onboarding: setup, gates, style, releasing |
Repository layout
reconpro/ the package (28 modules, CLI, engine, plugin SDK, tests)
examples/ runnable CLI + Python examples (executed before commit)
docs/ documentation + screenshots/ (real terminal captures)
tools/ release_manager, release gate, bench_startup, security_scan
sdks/ python / node / java / go / rust SDKs
ide/ vscode / jetbrains / neovim integrations
actions/ composite GitHub Action (reconpro-scan)
github-app/ GitHub App manifest + webhook receiver
.github/workflows/ ci.yml · security.yml · sdks.yml · release.yml · reconpro-scan.yml
dist/ signed release artifacts (wheel, sdist, SBOM, SHA256SUMS, signatures)
Honest status notes
- The repository is live and CI is green. All five workflows (
CI,Security,SDKs,Release,ReconPro Scan) pass onmain; history includes failed-and-fixed runs — nothing is hidden, see the Actions tab. - The test suite runs in CI chunks: the full suite in one pytest
invocation hangs (known issue); a handful of files are excluded with
documented reasons (see
tools/ci_test_groups.txt). - Both wheel and sdist are byte-reproducible since v11.2.0 (the release gate double-builds and compares bytes; the pre-v11.2.0 sdist was not — that gap is documented in docs/RELEASES.md).
- GPG key is published at docs/keys/ (the v11.1.0 key was never published — recorded honestly as a gap in docs/RELEASES.md).
- Go/Rust SDKs are CI-verified on GitHub Actions runners (the
SDKsworkflow compiles and tests them with real toolchains); a dev sandbox without toolchains gets an honestexit 3 ENVIRONMENT BLOCKEDfromsmoke.sh. The JetBrains plugin remains structurally validated only (no IDE host) — see docs/IDE.md. - The
compliancecommand maps findings to framework controls (e.g. SOC2, PCI-DSS); it is a mapping/reporting aid, not a certification or audit attestation.
Roadmap
Shipped in v11.2.0: sdist byte-reproducibility, GPG key publication, mandatory release gate, scanner truth layer, strict unknown-command handling, secret-detection corpus. Next: stricter lint, one-shot pytest, Windows/macOS CI matrix, report themes, CIS/STIG compliance packs — and beyond: enterprise RBAC + audit streams, a signed plugin marketplace, a cloud dashboard over the same engine, and team management — full plan in docs/ROADMAP.md.
Contributing
See CONTRIBUTING.md — setup, the four CI gates to run locally, code style, and the project's one rule: repository reality is the only truth.
License
MIT © ReconPro Security. See LICENSE.
Release files for reconpro 11.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| reconpro-11.2.0.tar.gz | 1.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| reconpro-11.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.2 MB
Release files / reconpro-11.2.0.tar.gz
| Download URL | reconpro-11.2.0.tar.gz |
|---|---|
| Size | 1.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8b1386c274691d980bbcba2c76186b39f14acaebce1bb9b93b7a0f2da0a097ee
|
|
BLAKE2b-256 checksum How to use checksums |
aec1bcf5044db1ec390d482f4dbff1151adb28c4cdeb4e9a074f29a845937beb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / reconpro-11.2.0-py3-none-any.whl
| Download URL | reconpro-11.2.0-py3-none-any.whl |
|---|---|
| Size | 1.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0b7cb0e96423f34326be7f173fc62c35b1ea089205732f9261c93de3ec074198
|
|
BLAKE2b-256 checksum How to use checksums |
f1326264ec1710c0f95a6de5628905b60b0ee74b34c2bc8af684a6aebf8f92f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|