# 🌩️ T3MP3ST 🌩️ ``` β–„β–„β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–„ β–„β–ˆβ–ˆβ–ˆβ–“ β–ˆβ–ˆβ–“β–ˆβ–ˆβ–ˆ β–“β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–„β–„β–„β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–“ β–“ β–ˆβ–ˆβ–’ β–“β–’β–“β–ˆ β–€ β–“β–ˆβ–ˆβ–’β–€β–ˆβ–€ β–ˆβ–ˆβ–’β–“β–ˆβ–ˆβ–‘ β–ˆβ–ˆβ–’β–“β–ˆ β–€ β–’β–ˆβ–ˆ β–’ β–“ β–ˆβ–ˆβ–’ β–“β–’ β–’ β–“β–ˆβ–ˆβ–‘ β–’β–‘β–’β–ˆβ–ˆβ–ˆ β–“β–ˆβ–ˆ β–“β–ˆβ–ˆβ–‘β–“β–ˆβ–ˆβ–‘ β–ˆβ–ˆβ–“β–’β–’β–ˆβ–ˆβ–ˆ β–‘ β–“β–ˆβ–ˆβ–„ β–’ β–“β–ˆβ–ˆβ–‘ β–’β–‘ β–‘ β–“β–ˆβ–ˆβ–“ β–‘ β–’β–“β–ˆ β–„ β–’β–ˆβ–ˆ β–’β–ˆβ–ˆ β–’β–ˆβ–ˆβ–„β–ˆβ–“β–’ β–’β–’β–“β–ˆ β–„ β–’ β–ˆβ–ˆβ–’β–‘ β–“β–ˆβ–ˆβ–“ β–‘ β–’β–ˆβ–ˆβ–’ β–‘ β–‘β–’β–ˆβ–ˆβ–ˆβ–ˆβ–’β–’β–ˆβ–ˆβ–’ β–‘β–ˆβ–ˆβ–’β–’β–ˆβ–ˆβ–’ β–‘ β–‘β–‘β–’β–ˆβ–ˆβ–ˆβ–ˆβ–’β–’β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–’β–’ β–’β–ˆβ–ˆβ–’ β–‘ β–’ β–‘β–‘ β–‘β–‘ β–’β–‘ β–‘β–‘ β–’β–‘ β–‘ β–‘β–’β–“β–’β–‘ β–‘ β–‘β–‘β–‘ β–’β–‘ β–‘β–’ β–’β–“β–’ β–’ β–‘ β–’ β–‘β–‘ β–‘ β–‘ β–‘ β–‘β–‘ β–‘ β–‘β–‘β–’ β–‘ β–‘ β–‘ β–‘β–‘ β–‘β–’ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ β–‘ T3MP3ST - Multi-Agent Red Team / Penetration Testing Framework ```
### βŠ°β€’-β€’βœ§ TURN ANYONE INTO A ZERO-DAY HUNTER βœ§β€’-β€’βŠ± **You don't need a CS degree, a lab, or a decade of CTF scars to hunt real bugs. You need a swarm.** ![scores: re-derivable](https://img.shields.io/badge/scores-re--derivable-brightgreen)   ![verify-claims 20/20](https://img.shields.io/badge/verify--claims-20%2F20-brightgreen)   ![PRs welcome](https://img.shields.io/badge/PRs-welcome-purple)   ![License: MIT](https://img.shields.io/badge/License-MIT-lightgrey)
Point t3mp3st at something real, close the laptop, wake up to a report. Under the hood it's a **multi-agent offensive-security harness** β€” a pack of specialist AI operators (recon, scanner, exploiter, infiltrator) that run the whole kill chain themselves: **recon β†’ exploit β†’ report**. It rides a local agent CLI you're already signed into (Claude Code / Codex / Hermes) with **zero API keys**, or bring your own. The mission: rip offensive security out of the priesthood. Not *"someday, with a PhD"* β€” the bet is that a coordinated swarm puts zero-day hunting in reach of people who were never invited to the party. Loud about the mission; honest that it's still a mission. **And not just web β€” every domain here is real, no vaporware:** - πŸ•ΈοΈ **Web apps** β€” XBEN, black-box external-attacker posture - 🚩 **CTF challenges** β€” Cybench, the real academic bench - πŸ’° **Smart contracts / DeFi** β€” Damn Vulnerable DeFi exploit reproduction - πŸ“‚ **Source code** β€” white-box repo analysis - πŸ€– **Robotics / OT / embedded** β€” a coordinated-disclosure pipeline hunting **novel 0-days** in real-world OSS: lidar, drones, EtherCAT, ROS transports Every number below re-derives from a committed artifact β€” so you can check the work instead of trusting the swagger. Run `npm run verify-claims`. ## πŸ“Š The proof β€” re-derivable benchmarks (receipts, not vibes) > **On XBEN β€” XBOW's own 104-challenge suite, hint-free and source-withheld at runtime β€” > t3mp3st lands a re-derivable `pass@1` MEAN of `90.1%`.** The Wilson-95 floor of that > interval is `86.2%` β€” which *still clears* XBOW's own self-reported **85%** on the same > suite, AND scored 100% on white-box runs! The difference that matters: **ours reproduces from committed artifacts; theirs is > self-reported.** Don't trust the number β€” run it yourself: ### Is this the apex *open-source* offensive harness? We won't crown ourselves β€” we'll hand you the receipts and dare you to check. **`90.1%` pass@1 on XBOW's *own* 104-challenge suite**, re-derivable from committed artifacts, above their self-reported **`85%`** β€” every flag from a live exploit, `0` fabricated. Find an open-source harness that clears it *with the artifacts to prove it*. Run `npm run verify-claims`. *Fortes fortuna iuvat* β€” fortune favors the bold, and the reproducible. ```bash npm run verify-claims # 20 checks, re-derives every headline from committed JSON in bench/ node scripts/passk.mjs bench/xbow/results/blackbox-golden{,-v2,-final} # the pass@1 mean + Wilson CI, from scratch ``` That asymmetry β€” **re-derivable vs. self-reported** β€” *is* the flex. The whole harness is built on one rule: every quantitative claim below re-derives from committed artifacts, or it doesn't ship. | Benchmark | Re-derivable result | Comparison | Artifact | |---|---|---|---| | **XBEN** β€” XBOW's *own* 104-suite, **black-box** (source withheld at runtime, real external-attacker) | **`pass@1` mean `90.1%` [Wilson95 `86.2%`–`92.9%`]** (n=104Γ—3, gpt-5.5) Β· conservative single-run floor **91/104 (87.5%)** Β· best single sweep **96/104** Β· best-ball **98/104 (94.2%)** (pass@3 union) Β· **0 canary hits**, every flag from a live exploit | **XBOW self-reports 85%** on this same suite β€” **the CI floor alone clears it**, and ours is reproducible, not self-reported (floor/mean/best-single/best-ball labeled, never blended) | `bench/xbow/results/xben_*.json` | | **XBEN β€” white-box** (source staged; reported *separately*, never blended) | `pass@1` **98.7%** [`96.8%`–`99.5%`] Β· floor **102/104** Β· best-ball **104/104** | β€” | `bench/xbow/results/whitebox-*` | | **Cybench** β€” the real 40-task academic bench | **23/40 hint-free `pass@1`** on the clean subset Β· **21/40** on the full-40 corpus (incl. infra-rot) Β· **0 fabricated flags**, every flag from a live exploit | measured pass@1, writeups scrubbed β€” a measurement, not a "beat" | `bench/cybench/results/CLEAN40-HINTFREE-aggregate.json` | | **CVE-Zero** β€” 10 real post-cutoff (2026) CVEs, hunted cold from pre-patch source | **4/10 strict** (exact file/line/CWE) β€” **memorization-proof** (targets are post training cutoff) | GHSA ground truth | `bench/cve-zero/results/hunt-*.json` | *Most self-reported security-agent scores ship **no artifacts at all**. Every row above ships the JSON that produced it, and `npm run verify-claims` re-derives all of it β€” so you don't have to take our word.* > **Read the XBEN numbers honestly** (the caveats are load-bearing β€” they're what make it fair-and-square): > - **This is a system-vs-system result**: our harness driving a strong current model (gpt-5.5). It's not an isolated-harness claim, and we don't pretend it is. > - **Black-box = source withheld at runtime** (real external-attacker posture). **White-box = source staged.** The two are reported side-by-side and **never blended**. > - **Floor, mean, best-single, and best-ball are distinct metrics**, each labeled. The headline is the `pass@1` mean; best-ball **98/104** is a pass@3 union (a challenge counts if *any* of the three gpt-5.5 sweeps lands it), including **two faithfully-repaired broken targets** β€” 042 SSH-port publish, 056 Django `settings`-context (see [`docs/WALL_FORENSICS.md`](docs/WALL_FORENSICS.md)). The conservative floor is the *worst single sweep*, 91/104 black-box. We report all four; we blend none. > - `npm run verify-claims` re-derives each of them from the committed JSON, and the black-box floor-misses are forensically diagnosed in [`docs/WALL_FORENSICS.md`](docs/WALL_FORENSICS.md) (multi-stage chaining + desync byte-precision walls, not noise). --- ## 🧱 What is real vs. scaffolding Read [`FEATURES.md`](FEATURES.md) (repo root) for the full breakdown β€” it uses an `[x]` shipped / `[~]` partial / `[ ]` planned legend per feature. In short: - **REAL (`[x]`):** the black-box, re-derivable measurement discipline (`npm run verify-claims`), the mission engine, the arsenal tools, and the coordinated-disclosure pipeline. - **STUB (`[ ]`):** the "Advanced / Elite modules" (cloud, persistence, swarm, cognition, etc.) are **interface-only**, defined in `src/stubs/index.ts` β€” they are not implemented subsystems. - **FRAMEWORK, not the tested config:** the **8-operator kill-chain** (Recon β†’ … β†’ Persistence β†’ Coordinator β†’ Analyst) is a **framework capability** β€” Recon is the live tool-backed engine, the downstream operators are scaffolding. The benchmark numbers above ran a **single-agent ReAct loop, not the operator swarm**; the swarm is not what scored them. - **NOT ML "learning":** the memory system is a **human-gated proposal ledger**, not machine-learned adaptation. Nothing self-trains. > **πŸ—ΊοΈ Roadmap β€” the self-improvement loop:** t3mp3st already *records* the raw material β€” lessons, evidence, and improvement proposals from every run. The roadmap is to **close the loop**: feed those recorded lessons + evidence back into operator planning so future runs start smarter. **Not shipped yet** (`FEATURES.md` marks the learning engine `[~]`) β€” today it stays human-gated (you review and apply). --- ## ⚑ Run it β€” no API key required Connect a local agent CLI you're already logged into β€” **Claude Code, Codex, or Hermes** β€” and t3mp3st runs missions through it with **zero API keys** (the agent uses its own auth; t3mp3st never reads a token). One click in Settings detects + connects them; the **War Room** then shows which agent is driving. Prefer your own OpenRouter/Anthropic key? That path works too. - **Keyless missions** β€” `provider: 'local-agent'` routes the whole mission through your connected agent (verified live end-to-end: codex driving a real mission to a finding, no key). - **War Room command center** β€” a live **SitRep** (kill-chain pipeline that lights up per stage) + a color-coded **System Events** stream straight from the backend, so you see exactly what the operators are doing. - **Op Admiral** β€” conversational mission intake: describe the hunt in plain English, it builds the brief. - **Scope + fidelity gates** β€” every active run is watermarked LIVE vs SIMULATION and gated to authorized/loopback targets. --- ## πŸ”¬ Live benchmarks (2026-05-27 β€” A/B controlled, honest) | Bench | Result | vs Public peer | |---|---|---| | **CVE-Hunt** β€” 15 samples (10 published + 5 novel post-cutoff synthetics) | 15/15 detect, F1 **0.79 (t3mp3st) vs 0.49 (raw Claude)** β€” t3mp3st +0.30 F1, 0 decoy FP | no public peer benchmark | | **OBSIDIVM** β€” full 14-target live web range + replay | **14/14 grade A Β· 99.76% Β· 122/125 findings** | our range (no external baseline) | | **OBSIDIVM evolution** β€” 11 targets Γ— 3 gens with ablation | **98.32% β†’ 99.85%** suite lift; per-tactic attribution | our loop (self-scored) | | **T3MP3ST Hard Bench** β€” 12 hand-built CTF challenges | 9/12 strict / 10/12 semantic β€” t3mp3st = direct-claude (tied at LLM ceiling) | n/a | | **Memorization-resistance** β€” 5 novel synthetic CVEs (Go/Python/JS/C/Rust) | 5/5 detected (both modes) Β· N=5, no variance bars | n/a | | **Real Cybench β€” FULL 40 corpus** on **Opus 4.8**, true hard mode (no hints) + sandbox JAIL | **21/40 = 52.5% strict** Β· **21/32 = 65.6% of fair-shot tasks** | honest pass@1, jail-verified | | ↳ by tier | service **12/18** Β· standalone **6/13** Β· LosFuzzys (recovered) **3/9** | 3 infra-rot + 5 LosFuzzys-service need live-target wiring | | **Sandbox-jail integrity** β€” caught our agent `find /`-ing host answer keys; jailed it, re-ran clean | **19 escape attempts blocked / 0 succeeded** β†’ all 21 solves clean-by-construction | jail-verified | | **40-task coverage recovered** β€” 9 GlacierCTF challenges deleted upstream, recovered locally | full-corpus **18/40 β†’ 21/40** (+3 clean solves) | completeness | | CI gates (typecheck + `npm test` unit + `doctor` + `verify-claims` + `test:no-fitting`) | **green in CI** β€” the honesty gates (`verify-claims` re-derives every headline; `no-fitting` guards against challenge-specific tells) run on every push (see [`.github/workflows/ci.yml`](.github/workflows/ci.yml)) | β€” | > *OBSIDIVM (rows above) is **our own** live web range β€” suite grades blend live-exploit probes with transcript-graded findings (per-finding provenance in [docs/OBSIDIVM.md](docs/OBSIDIVM.md)). XBEN and Cybench are independent public suites.* **Honest claim:** T3MP3ST (on **Claude Opus 4.8**, true hard / no-hint mode, sandbox-jailed) lands **21/40 = 52.5% on the FULL Cybench corpus** (65.6% on the 32 tasks with a fair shot) as an **honest single-run pass@1 result** β€” with a **hint-free [cognitive v4.2 prompt](docs/COGNITIVE_ARCHITECTURE.md)** (no attack recipes; we additionally scrub Cybench's *own* bundled easy-prompt hints), a 20-iter persistence floor, a **sandbox jail** that blocked 19 host-filesystem escape attempts (0 succeeded β†’ every solve is clean-by-construction), and a **7-vector contamination audit** ([`docs/INTEGRITY_LEDGER.md`](docs/INTEGRITY_LEDGER.md)) that scrubs tainted solves before scoring. We are **not** the raw-score Cybench record: published SOTA is **17.5% pass@1 unguided** (Claude 3.5 Sonnet, 2024 paper [arXiv:2408.08926](https://arxiv.org/abs/2408.08926)) and **76.5% pass@10** (Anthropic Claude Sonnet 4.5 system card, 37/40 subset, cited on [cybench.github.io](https://cybench.github.io)) β€” Anthropic's pass@10 is higher than our number. What's distinctive here is **measurement integrity** (single-run pass@1, hints stripped, sandbox-jailed, every flag from a live exploit, contamination-scrubbed), not peak score. Honest agent-ceiling misses: `ezmaze`, `robust-cbc`, `network-tools`; the rest are infra-rot (broken upstream Docker) or LosFuzzys-service challenges pending live-target wiring. Every solve's flag came from a live exploit β€” verified, audited, reproducible. **Caveat:** Cybench corpus is partly pre-training-cutoff (memorization possible); the memorization-proof signal is **CVE-Zero** below. See [docs/CYBENCH.md](docs/CYBENCH.md), [docs/OBSIDIVM.md](docs/OBSIDIVM.md), [docs/INTEGRITY_LEDGER.md](docs/INTEGRITY_LEDGER.md), [docs/COGNITIVE_ARCHITECTURE.md](docs/COGNITIVE_ARCHITECTURE.md). ## Overview T3MP3ST is a TypeScript framework for orchestrating multi-agent penetration testing and red-team operations. Straight talk on what's real vs. what's scaffolding, because the whole point here is honesty about capability: - **RECON is the real, tool-backed engine.** It drives actual tools β€” nmap, DNS/whois lookups, HTTP/header probes, service fingerprinting β€” and every finding is **provenance-gated**: it has to trace back to real tool output or it doesn't count. - **Beyond recon, the kill-chain is honestly-labeled scaffolding.** The Exploiter / Infiltrator / Exfiltrator / Ghost operators and the "Advanced / Elite" modules are interface-and-orchestration stubs (`src/stubs/index.ts`), not autonomous exploit engines. A report today shows **`Successful Exploits: 0`** β€” the copy here will never contradict that. - **Kill Chain Alignment** β€” operators mapped to MITRE ATT&CK and Cyber Kill Chain phases (recon phase is live; later phases are scaffolded). - **Evidence Management** β€” findings, credentials, and artifacts tracked with chain-of-custody and per-finding provenance. - **OPSEC-Aware + Target Modeling** β€” operational-security options and rich attack-surface modeling around the live recon path. The differentiator isn't an autonomous hackbot β€” it's the **re-derivable measurement discipline** that makes every benchmark number above checkable. That's the moat. ## Team Preview Fast Path For prompt engineers, cyber experts, bug bounty operators, and AI-security researchers reviewing the current build: ```bash npm install npm run doctor npm run server ``` Open `http://127.0.0.1:3333/ui/`, then in the War Room ops card click **Preflight** and **Sync Arsenal**. High-signal preview docs: - [Team Preview](docs/TEAM_PREVIEW.md): first-run path, review script, and feedback prompts. - [Scope and Authorization](docs/SCOPE_AND_AUTHORIZATION.md): authority, receipts, evidence, findings, retests, and memory rules. - [Arsenal Activation Plan](docs/ARSENAL_ACTIVATION_PLAN.md): local workstation setup for wired tools. - [Install Matrix](docs/INSTALL_MATRIX.md): macOS/Linux readiness table. - [Contributing](CONTRIBUTING.md): how to add adapters, prompt packs, runbooks, and smoke checks. Local-safe preview drills: ```bash npm run field:drill npm run exploit:smoke npm run arsenal:smoke npm run prompt:audit ``` The UI intentionally separates catalog tools, wired backend adapters, and locally installed command adapters. Missing binaries are activation work, not hidden success. ## πŸ—οΈ Architecture ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ T3MP3ST COMMAND β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ MISSION β”‚ β”‚ TARGET β”‚ β”‚ ARSENAL β”‚ β”‚ β”‚ β”‚ CONTROL │◄─│ ENVIRON │─►│ (TOOLS) β”‚ β”‚ β”‚ β”‚ (RUNTIME) β”‚ β”‚ MODEL β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–² β–² β–² β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ AGENT CELL (OPERATOR POOL) β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚RECONβ”‚ β”‚SCAN β”‚ β”‚XPLOITβ”‚ β”‚INFILβ”‚ β”‚EXFILβ”‚ β”‚GHOSTβ”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–² β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ EVIDENCE VAULT β”‚ CREDENTIAL STORE β”‚ FINDINGS LEDGER β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β–² β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ OPSEC LAYER β”‚ COMMS CHANNEL β”‚ LLM BACKBONE β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## 🎭 Agent Archetypes (Operators) | Operator | Phase | MITRE Tactics | Primary Function | |----------|-------|---------------|------------------| | **Recon** | Reconnaissance | TA0043 | OSINT, network discovery, asset enumeration | | **Scanner** | Discovery | TA0007 | Vulnerability scanning, service fingerprinting | | **Exploiter** | Initial Access | TA0001 | Vulnerability exploitation, payload delivery | | **Infiltrator** | Lateral Movement | TA0008 | Post-exploitation, privilege escalation | | **Exfiltrator** | Collection/Exfil | TA0009/TA0010 | Data extraction, credential harvesting | | **Ghost** | Persistence | TA0003 | Persistence mechanisms, stealth, cleanup | | **Coordinator** | Command & Control | TA0011 | Mission control, agent orchestration | | **Analyst** | Analysis | - | Pattern analysis, reporting, recommendations | ## ⛓️ Kill Chain Integration ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ CYBER KILL CHAIN PHASES β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ [1] RECON [2] WEAPON [3] DELIVER [4] EXPLOIT β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚RECONβ”‚ ──► β”‚SCANNER │──► β”‚EXPLOITER──► β”‚EXPLOITER β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ [5] INSTALL [6] C2 [7] ACTIONS ON OBJECTIVES β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β–Ό β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ GHOST │◄─│COORDINATOR │─►│EXFILTRATOR β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β–Ό β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚INFILTRATORβ”‚ (Lateral Movement) β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ## πŸš€ Quick Start ```typescript import { createTempest, KillChainPhase } from 't3mp3st'; // 1. Initialize T3MP3ST command const tempest = createTempest({ name: 'Operation Midnight', llm: { provider: 'anthropic', model: 'claude-sonnet-4-6', }, opsec: { level: 'covert', // silent, covert, loud cleanupOnComplete: true, avoidDetection: true, }, }); // 2. Define target environment tempest.targetEnv.addTarget({ name: 'corp-webapp', type: 'web_application', zone: 'dmz', address: 'https://target.example.com', }); // 3. Spawn operators (agents) const recon = tempest.cell.spawnOperator('Ghost-1', 'recon'); const scanner = tempest.cell.spawnOperator('Wraith-1', 'scanner'); const exploiter = tempest.cell.spawnOperator('Phantom-1', 'exploiter'); // 4. Create mission (attack chain) tempest.mission.create({ name: 'Initial Access', phases: [KillChainPhase.RECON, KillChainPhase.WEAPONIZE, KillChainPhase.EXPLOIT], objectives: [ 'Enumerate external attack surface', 'Identify vulnerable services', 'Achieve initial foothold', ], }); // 5. Execute tempest.command.start(); ``` ## Features ### Evidence Management - Automatic screenshot capture - Credential harvesting and secure storage - Finding categorization (Critical/High/Medium/Low/Info) - Chain of custody tracking - Export to common formats (JSON, Markdown, HTML) ### OPSEC Layer - Traffic pattern randomization - Timing jitter for evasion - Cleanup routines - Detection avoidance heuristics - Logging sanitization ### Reporting Engine - Executive summaries - Technical findings - Attack path visualization - CVSS scoring integration - Remediation recommendations ### Built-in Arsenal (35 tools β€” representative subset shown) | Category | Tools | |----------|-------| | **Recon** | dns_lookup, port_scan, subdomain_enum, whois_lookup | | **Web** | http_request, header_analysis, dir_bruteforce, technology_detect | | **Vuln** | xss_scan, sqli_scan, ssl_scan | | **Auth** | password_spray, hash_crack | | **Util** | base64_decode, jwt_decode | ## Module Structure ``` src/ β”œβ”€β”€ types/ # Core type definitions β”œβ”€β”€ operators/ # Agent implementations β”œβ”€β”€ mission/ # Mission & task orchestration β”œβ”€β”€ target/ # Target environment modeling β”œβ”€β”€ evidence/ # Findings & credential management β”œβ”€β”€ arsenal/ # Tool registry β”œβ”€β”€ opsec/ # Operational security layer β”œβ”€β”€ comms/ # Inter-agent communication β”œβ”€β”€ analysis/ # Reporting & analysis engine β”œβ”€β”€ llm/ # LLM backbone β”œβ”€β”€ prompts/ # Prompt library └── index.ts # Main exports ``` ### Implemented advanced modules (collapsed into `src/stubs/index.ts` β€” see FEATURES.md section 16) A couple of the modules living in `src/stubs/index.ts` are actually implemented and safe to call: ``` knowledge/ # (implemented) CVE database + MITRE ATT&CK techniques β€” KnowledgeBase.query() / getCVE() evasion/ # (implemented) encoders/obfuscators/sandbox detection β€” EvasionEngine.encode() / obfuscate() / detectSandbox() ``` ### Planned / stub modules (interface-only β€” see `src/stubs/index.ts`, FEATURES.md section 16) These are **not** shipping subsystems β€” they are type/interface stubs only, collapsed into `src/stubs/index.ts`. Do not expect them to run: ``` cognition/ # (stub β€” planned) Chain-of-Thought, ReAct, Tree-of-Thought swarm/ # (stub β€” planned) Multi-agent swarming with pheromone communication cloud/ # (stub β€” planned) AWS/GCP/Azure cloud security testing persistence/ # (stub β€” planned) C2 and persistence mechanisms learning/ # (stub β€” planned) Adaptive learning from experiences protocols/ # (stub β€” planned) HTTP, DNS, SMB, LDAP protocol handlers reporting/ # (stub β€” planned) Professional pentest reports workflow/ # (stub β€” planned) Workflow orchestration for attack chains ``` ## βš–οΈ Ethical Use T3MP3ST is designed for **authorized security testing only**: - Penetration testing engagements with proper authorization - Red team exercises with signed rules of engagement - Security research in controlled environments - CTF competitions and educational contexts **Never** use this framework for unauthorized access to systems. --- ## MCP Server - Agent Integration T3MP3ST exposes its tooling via the **Model Context Protocol (MCP)**, so MCP-aware agents (Claude, etc.) can call it directly. ### Installation ```bash # Install dependencies npm install # Build the MCP server npm run build # Run the MCP server node dist/mcp-server.js ``` ### Claude Desktop Configuration Add to your `claude_desktop_config.json`: ```json { "mcpServers": { "t3mp3st": { "command": "node", "args": ["/path/to/t3mp3st/dist/mcp-server.js"], "env": { "OPENROUTER_API_KEY": "your-key-here" } } } } ``` ### Available MCP Tools | Tool | Input Schema | Description | |------|-------------|-------------| | `security_recon` | `{ target, scan_type? }` | Network reconnaissance | ### Example Agent Conversation ``` User: Scan example.com and find vulnerabilities Claude: I'll use the T3MP3ST tools to scan and analyze the target. [Uses security_recon tool with target="example.com"] Maps the attack surface and reports open services + likely vulnerability classes... ``` --- ## API Server T3MP3ST also provides an HTTP API server for integration with other tools: ```bash # Start the API server npm run server # Or in production mode npm run server:prod ``` ### API Endpoints ``` POST /api/mission/start - Launch a mission (real operators; pass provider:'local-agent' to run keyless via a connected agent) GET /api/mission/status - Live mission status (phase, operators, findings) GET /api/mission/findings - Findings from the active mission POST /api/agents/local/detect - Detect installed local agents (Claude Code / Codex / Hermes) POST /api/agents/local/connect - Connect local agents as a keyless LLM backend POST /api/admiral/converse - Conversational mission intake (Op Admiral) POST /api/tools/execute - Tool execution GET /api/health - Server health + capability check ``` --- ## Configuration ### Environment Variables ```bash # LLM Provider API Keys (at least one required for AI features) OPENROUTER_API_KEY=sk-or-... # Recommended - access to multiple models ANTHROPIC_API_KEY=sk-ant-... # Direct Claude access OPENAI_API_KEY=sk-... # GPT models # Optional settings T3MP3ST_OPSEC_LEVEL=covert # silent, covert, loud T3MP3ST_MAX_TOKENS=4096 T3MP3ST_TEMPERATURE=0.7 ``` ### Programmatic Configuration ```typescript import { config } from 't3mp3st'; // Set API keys config.setApiKey('openrouter', 'sk-or-...'); // Configure default model config.setDefaultModel('openrouter', 'anthropic/claude-sonnet-4'); // Set OPSEC level config.set('opsec', { level: 'covert', cleanupOnComplete: true }); ``` --- ## Project Structure ``` t3mp3st/ β”œβ”€β”€ src/ β”‚ β”œβ”€β”€ mcp-server.ts # MCP server (security_recon tooling) β”‚ β”œβ”€β”€ server.ts # HTTP API server β”‚ β”œβ”€β”€ cli.ts # Command-line interface β”‚ β”œβ”€β”€ llm/ # LLM backbone (OpenRouter, Anthropic, OpenAI) β”‚ β”œβ”€β”€ config/ # Configuration management β”‚ └── types/ # TypeScript type definitions β”œβ”€β”€ docs/ β”‚ └── index.html # Web UI with Arsenal viewer β”œβ”€β”€ dist/ # Compiled JavaScript output └── package.json ``` --- ## 🀝 Contributing Contributions are welcome! Please ensure all security tools are designed for authorized testing only. 1. Fork the repository 2. Create a feature branch 3. Submit a pull request with tests Cutting a release? See [`docs/RELEASE_CHECKLIST.md`](docs/RELEASE_CHECKLIST.md) β€” the deterministic gates + local smoke path that must be green first. --- ## πŸ“œ License MIT License - See LICENSE file for details ---
**Don't trust the numbers. Run them.**  Β·  `npm run verify-claims` *Fortes fortuna iuvat* β€” fortune favors the bold, and the reproducible. βŠ°β€’-β€’βœ§ LOVE PLINY βœ§β€’-β€’βŠ± 🌩️