CLI commands

Everything Dapper does is driven by the ./dapper script. Arguments are passed as KEY=value pairs in any order. The command is the first positional argument; running ./dapper with no command (or help) prints usage. This page documents every command and flag.

  1. Command summary
  2. start — run a pentest
  3. logs — stream worker activity
  4. query — progress snapshot
  5. stop — shut down
  6. web — launch the web console
  7. deepagent — alternative orchestrator
  8. help
  9. Monitoring URLs

Command summary

Command Purpose
start Run a pentest workflow on the Temporal pipeline.
logs Tail the live log for a running workflow.
query Print a progress snapshot for a workflow.
stop Stop the containers (optionally wipe all data).
web Launch the DeepAgents web console (FastAPI).
deepagent Run a pentest through the LangChain DeepAgents orchestrator.
help Show usage. (Also --help, -h, or any unknown command.)

.env is sourced automatically when present, so credentials and provider settings defined there are available to every command.


start — run a pentest

./dapper start URL=<url> REPO=<name> [options]

URL and REPO are required. The script verifies that an LLM credential is set (ANTHROPIC_API_KEY or CLAUDE_CODE_OAUTH_TOKEN, or an alternative provider key when ROUTER=true), ensures the Temporal containers are healthy, then submits the workflow.

Flag Required Default Description
URL The live target. Use host.docker.internal instead of localhost for apps on the host.
REPO Folder name under ./repos/ containing the source, or an absolute container path under /repos/ or /benchmarks/. The folder must exist.
SUBDIR   Subdirectory within the repo to focus analysis on (e.g. src/api). Leading/trailing slashes are stripped; the path must exist within the repo.
CONFIG   Path to a YAML configuration file.
OUTPUT   ./audit-logs/ Output directory for the session folder. Created with permissions for the container user (UID 1001).
PIPELINE_TESTING   false true runs a fast, shallow pass with minimal prompts and short retry intervals.
ROUTER   false true routes requests through claude-code-router for alternative providers. See LLM providers.
REBUILD   false true forces a clean Docker image rebuild (--no-cache) before starting — use when code changes are not picked up.
# Basic run
./dapper start URL=https://example.com REPO=app

# Focus on a subdirectory
./dapper start URL=https://example.com REPO=app SUBDIR=services/api

# With an authenticated-testing config
./dapper start URL=https://example.com REPO=app CONFIG=./configs/app.yaml

# Custom output directory
./dapper start URL=https://example.com REPO=app OUTPUT=./my-reports

# Fast smoke test
./dapper start URL=https://example.com REPO=app PIPELINE_TESTING=true

# Force a clean rebuild and route through an alternative provider
./dapper start URL=https://example.com REPO=app REBUILD=true ROUTER=true

REPO can be a bare folder name (resolved under ./repos/) or an absolute container path beginning with /repos/ or /benchmarks/. For container paths the host-side existence check is skipped.

logs — stream worker activity

./dapper logs ID=<workflow-id>
Flag Required Description
ID The workflow ID returned by start.

Tails the live workflow.log for a workflow — agents, tool calls, and phase transitions. The script looks first at ./audit-logs/<ID>/workflow.log, then searches up to three directory levels deep to handle custom OUTPUT paths.

./dapper logs ID=example.com_dapper-1234567890

query — progress snapshot

./dapper query ID=<workflow-id>
Flag Required Description
ID The workflow ID to inspect.

Prints the current phase, active agent, completed agents, and aggregated metrics for the workflow.

./dapper query ID=dapper-1234567890

stop — shut down

./dapper stop [CLEAN=true]
Flag Required Default Description
CLEAN   false true brings containers down with volumes (down -v), wiping all Temporal/workflow data. Without it, data is preserved.

Both forms also stop the router profile container if it is running.

./dapper stop                # stop containers, preserve workflow data
./dapper stop CLEAN=true     # full reset including volumes

web — launch the web console

./dapper web [HOST=0.0.0.0] [PORT=8000]
Flag Required Default Description
HOST   0.0.0.0 Host/interface to bind the FastAPI server to.
PORT   8000 Port to serve on.

Starts the DeepAgents web console via Uvicorn (scripts.deepagents.webapp:app). Set DAPPER_WEB_PASSWORD to require sign-in — see Environment variables.

./dapper web
./dapper web HOST=127.0.0.1 PORT=9000

deepagent — alternative orchestrator

./dapper deepagent [URL=<url>] [REPO=<name>] [CONFIG=<file>] [OUTPUT=<path>]

Runs a pentest through the LangChain DeepAgents orchestrator (scripts.deepagents.orchestrator) instead of the Temporal pipeline. If arguments are omitted, it falls back to interactive setup.

Flag Required Maps to Description
URL   --url Target URL.
REPO   --repo Repository to analyze.
CONFIG   --config YAML config file.
OUTPUT   --deliverables Deliverables output directory.
CLASSES   --classes Restrict to specific vulnerability classes.
SKIP_EXPLOIT   --skip-exploit true skips the exploitation phase.
./dapper deepagent URL=https://example.com REPO=app
./dapper deepagent URL=https://example.com REPO=app CLASSES=injection,xss SKIP_EXPLOIT=true

help

./dapper help     # also: ./dapper --help, ./dapper -h, or no command

Prints the usage banner and examples.


Monitoring URLs

Surface URL
Temporal dashboard http://localhost:8233
Web console (after ./dapper web) http://localhost:8000