"He doesn't just find flaws. He verifies them."
Local-first, agentic application security assessment — that investigates its own findings before it trusts them.
Dexter doesn't run a fixed set of checks and dump a static report. It runs every scan through a closed loop — Scan → Analyze → Verify → Refine — that investigates its own findings before it trusts them.
dexter --target ./your-project -n --instruction "prioritize secrets and access control"
Why Dexter?
Most vulnerability scanners share the same weaknesses: high false-positive rates, no correlation between tools, and no transparent path from "flagged" to "confirmed." Dexter's Verify stage is a real tool-calling agent (ReAct pattern) — it reads surrounding code, computes entropy on suspected secrets, and greps the codebase for related usage before handing back a plain-English verdict instead of just a severity label.
Every tool can also run sandboxed: a disposable, per-scan Docker container instead of your host machine. See Docker Sandbox.
The SAVR Loop
| Stage | What happens |
|---|---|
| Scan | 14 integrated tools + local static-analysis rules |
| Analyze | Base confidence score assigned per finding |
| Verify | Agentic investigation — reads code, checks entropy, searches the repo |
| Refine | Instruction-aware confidence boost, bounded by a circuit breaker |
Both entry points — the one-shot dexter CLI (CI-friendly, non-zero exit on findings) and the interactive wakeupdexter REPL — call the same underlying engine. No logic is duplicated between them.
Quickstart
python -m venv .venv
.venv\Scripts\activate # Windows — use `source .venv/bin/activate` on macOS/Linux
pip install wakeupdexter
dexter --target ./your-project -n --instruction "prioritize secrets and access control"
wakeupdexter # or launch the interactive command center
Recommended: build the sandbox once so tools don't need host installation.
dexter sandbox build
set DEXTER_SANDBOX=1 # Windows CMD — PowerShell: $env:DEXTER_SANDBOX="1"
dexter --target ./your-project -n
Docker Sandbox
With DEXTER_SANDBOX=1 set, every containerized tool runs inside a disposable, per-run container. The target is bind-mounted read-only at /workspace, and the container is destroyed the moment the scan finishes. No per-platform tool installs, no PATH issues, no Windows-specific tool ports.
dexter sandbox build # fast path (~5–10 min)
dexter sandbox build --with-browser # + Chromium/agent-browser (~20–30 min, not yet used by any adapter)
dexter sandbox status # check Docker + image status
If Docker isn't available, Dexter prints a notice and falls back to running tools on the host — DEXTER_SANDBOX=1 is always safe to leave set.
Scanning something running on your own machine? Containers don't share the host's
localhost. Use Docker Desktop's special DNS name instead:dexter authorize http://host.docker.internal:5000 dexter --target http://host.docker.internal:5000 -n
Integrated Tools
14 tools total, spanning SAST, secrets, dependency CVEs, and authorized recon/DAST.
| Tool | Type | Gate | Sandboxed |
|---|---|---|---|
| Semgrep | SAST | none | ✅ |
| Bandit | Python SAST | none | ✅ |
| Gitleaks | Secrets | none | ✅ |
| Trufflehog | Secrets + live-credential check | none | ✅ |
| Trivy | Dependency CVEs | none | ✅ |
| Retire.js | Frontend dependency CVEs | none | ✅ |
| ESLint (security ruleset) | JS/TS SAST | none | ✅ |
| ast-grep | Structural SAST | none | ✅ |
| httpx | Recon / fingerprint | authorization | ✅ |
| katana | Web crawler | authorization | ✅ |
| ffuf | Content discovery | authorization | host-only |
| Nmap | Port/service recon | authorization | host-only |
| Nuclei | Template-based DAST | authorization | host-only |
| Nikto | Web misconfig | authorization | host-only* |
| OWASP ZAP | DAST | authorization + running daemon | host-only |
| sqlmap | Exploitation | authorization + exploit command |
host-only |
| jwt_tool | JWT weakness testing | exploit command |
host-only |
| Metasploit | Exploitation | — | not auto-wired, by design |
* Perl-based; needs Strawberry Perl on Windows.
Full sandbox parity for the host-only tools is tracked in Roadmap.
Safety & Authorization
Dexter treats "authorized targets only" as enforced behavior, not a suggestion:
- Live-target tools refuse to run against anything not explicitly added via
dexter authorize <target>. - Exploitation-tier tools (
sqlmap,jwt_tool) are structurally outside the automatic scan registry — enforced by a dedicated test, not just convention. - Exploit-tier actions require an explicit, separate command and a confirmation prompt in the interactive dashboard — never triggered by a normal scan.
- Metasploit has no automatic invocation at all.
- Even authorized, sandboxed scans mount the target read-only.
Only test systems you own or have explicit written permission to assess.
Usage
dexter --target ./app --scan-mode standard
dexter -n -t ./app --instruction "Prioritize authentication and access control"
dexter --target-list ./targets.txt --run-name ci-scan
dexter report ci-scan --format human
dexter report ci-scan --format markdown --output report.md
dexter view ci-scan
dexter tools
dexter auth
dexter authorize <target>
dexter exploit sqlmap "<url>" --param id
dexter exploit jwt_tool "<jwt>"
dexter sandbox build [--with-browser]
dexter sandbox status
wakeupdexter # interactive REPL
Inside wakeupdexter:
scan <path-or-url> [instructions] full SAVR loop
/semgrep, /bandit, /gitleaks, /trivy <path> run one tool directly
/nmap, /nuclei, /nikto, /zap, /ffuf <target> run one live-target tool (needs authorize first)
exploit sqlmap <url> --param <name> explicit exploitation step, asks for confirmation
authorize <target> allow a live target for gated tools
/tools show installed/missing tool status
runs · report [run] [human] · view [run] · pool
Exit status is non-zero when findings are present — -n mode is CI-safe.
LLM Provider Setup
Create ~/.dexter/.env (Windows: %USERPROFILE%\.dexter\.env):
DEXTER_LLM_KEYS=key-one,key-two,key-three
| Variable | Purpose |
|---|---|
DEXTER_LLM_KEYS |
Comma-separated key pool. A 429 cools that key down and rotates to the next. |
DEXTER_LLM_BASE_URL |
Any OpenAI-compatible endpoint — Groq by default. |
DEXTER_LLM_LOCAL_URL |
Fallback tier when every pooled key is cooling — point at local Ollama or llama.cpp. |
DEXTER_LLM_COOLDOWN_SECONDS |
Cooldown duration per key (default 5 hours). |
dexter auth shows live status of every key and the local fallback. Dexter functions fully offline with zero API keys via its deterministic fallback.
Never commit a real key. If one ends up in a scanned project's
.env, Dexter's own Gitleaks/Trufflehog adapters will correctly flag it — that's not a false positive, rotate it.
Architecture
dexter (CLI) wakeupdexter (interactive REPL)
│ │
└────────────┬───────────┘
▼
dexter.loop.run_savr()
│
┌───────────────┬──────────────┼──────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼
SCAN ANALYZE VERIFY REFINE REPORT
containers/Dockerfile sandbox image (Kali-based)
src/dexter/
├── cli.py one-shot CLI entry point
├── dashboard.py wakeupdexter interactive REPL
├── loop.py the SAVR loop; opens/tears down the sandbox per target
├── agentic_verify.py ReAct tool-calling verification agent
├── tools.py external tool adapters + registry (sandbox-aware)
├── sandbox.py per-run Docker container lifecycle
├── scanner.py local static-analysis rules
├── provider_pool.py LLM key rotation + tool-calling support
├── authorization.py authorized-target list
├── report.py human-language report generation
├── env_file.py ~/.dexter/.env loader
└── wordlists/common.txt bundled ffuf wordlist
tests/ 65 tests, isolated from network/tool/Docker availability
Roadmap
- Full sandbox parity for Nmap, Nuclei, Nikto, ffuf, sqlmap, jwt_tool
- Cross-tool finding correlation & deduplication
- Agentic Analyze and Refine stages
- Multi-agent coordinator spawning per-stage subagents
- Historical run diffing across scans
- Browser-driven verification (Chromium/agent-browser already installable via
--with-browser) - Metasploit resource-script passthrough
- Revisit the web dashboard (currently shelved on
backup-web-platform)
Team
| Name | Role |
|---|---|
| Kartik R. Pagariya | |
| Vikrant K. Kadam | |
| Aditya U. Dengale | |
| Pranali D. Yelavikar | |
| Dr. Parikshit Mahalne | Project Guide |
VIT — AI & Data Science, Final Year Project
License
MIT
Only test systems you own or have explicit written permission to assess.
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 wakeupdexter-1.0.2.tar.gz.
File metadata
- Download URL: wakeupdexter-1.0.2.tar.gz
- Upload date:
- Size: 55.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c2ffb588b93fb55367495e229246245c1a63eeba070fc237fb58140d1deb69f4
|
|
| MD5 |
532d054ae2d058fc4c55151c1ed4ad33
|
|
| BLAKE2b-256 |
00df2ba2e5ed46525dd64eb51f4b528aaa35627f2b9222ff1c61f0e38c46f33d
|
File details
Details for the file wakeupdexter-1.0.2-py3-none-any.whl.
File metadata
- Download URL: wakeupdexter-1.0.2-py3-none-any.whl
- Upload date:
- Size: 49.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
976762b74bfde5a8b32aa2b216881dc369f41c3aefae8b30bcd1f7835918374a
|
|
| MD5 |
c6afe2eed4c316c52729e2978d6315f7
|
|
| BLAKE2b-256 |
eaa31542929fcd8769ff4ccb125e2122063c4bdd0e26b62696dac76e39352e81
|