Skip to main content

Dexter Logo

"He doesn't just find flaws. He verifies them."

Local-first, agentic application security assessment — that investigates its own findings before it trusts them.

PyPI Python License: MIT Tests SAVR Loop Sandboxed Tools

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

wakeupdexter-1.0.2.tar.gz (55.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wakeupdexter-1.0.2-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

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

Hashes for wakeupdexter-1.0.2.tar.gz
Algorithm Hash digest
SHA256 c2ffb588b93fb55367495e229246245c1a63eeba070fc237fb58140d1deb69f4
MD5 532d054ae2d058fc4c55151c1ed4ad33
BLAKE2b-256 00df2ba2e5ed46525dd64eb51f4b528aaa35627f2b9222ff1c61f0e38c46f33d

See more details on using hashes here.

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

Hashes for wakeupdexter-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 976762b74bfde5a8b32aa2b216881dc369f41c3aefae8b30bcd1f7835918374a
MD5 c6afe2eed4c316c52729e2978d6315f7
BLAKE2b-256 eaa31542929fcd8769ff4ccb125e2122063c4bdd0e26b62696dac76e39352e81

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 files

1.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page