Skip to Content
DocsGetting StartedConfiguration

Configuration

Wallbreaker uses config.toml. Copy the example and edit:

$ cp config.example.toml config.toml
InfoPrefer api_key_env (the name of an environment variable holding the key) over literal keys. Validate your file any time with wallbreaker check.

[profiles.*] — Provider Endpoints

Profiles are reusable provider endpoints. protocol selects the wire format (openai, anthropic, xai, or claude-code); api_key_env names the environment variable that holds the key:

default_profile = "openrouter" [profiles.openrouter] protocol = "openai" base_url = "https://openrouter.ai/api/v1" api_key_env = "OPENROUTER_API_KEY" model = "anthropic/claude-sonnet-4.5" [profiles.zai] protocol = "anthropic" base_url = "https://api.z.ai/api/anthropic" api_key_env = "ZAI_API_KEY" model = "glm-4.6" [profiles.claude-code] protocol = "claude-code" model = "sonnet" # CLI alias: sonnet / opus / haiku, or a full model id

claude-code uses the local claude CLI as the brain — no base URL or API key needed (the CLI authenticates itself). xai is OpenAI-wire-compatible: set protocol = "xai" and model, and the key env defaults to XAI_API_KEY.

[agents.*] — Role Assignment

Each role (attacker, target, judge) is assigned a provider/model directly, or a named profile:

[agents.attacker] provider = "openrouter" model = "anthropic/claude-sonnet-4.5" [agents.target] provider = "openrouter" model = "openai/gpt-4o-mini" [agents.judge] provider = "openrouter" model = "openai/gpt-4o-mini"

[agent_profiles.*] — Named Role Profiles

Role-specific profiles add prompt behavior on top of an endpoint. prompt_source is "none", "inline", or "file" (inline text and a file are mutually exclusive):

[agent_profiles.target."default target"] provider = "openrouter" model = "openai/gpt-4o-mini" prompt_source = "inline" system_prompt = "You are the model under an authorized red-team evaluation."

[target] — The Model Under Test

[target] protocol = "openai" base_url = "https://openrouter.ai/api/v1" api_key_env = "OPENROUTER_API_KEY" model = "openai/gpt-4o-mini"
FieldDefaultDescription
protocolrequiredWire format: openai, anthropic, xai
base_urlrequiredAPI base URL
api_key_envEnv var holding the API key
modelrequiredModel identifier
timeout120Per-request timeout (seconds)
reasoningfalseAsk reasoning models to emit their chain-of-thought (the judge grades it — targets often leak harm in thinking while the visible answer refuses)
system_modedefaultHow system prompts are delivered: default (native), merge (fold into the first user turn — for targets hardened against system-level attacks), drop
modalitytexttext or image (T2I models ride the same chat API)
providerOpenRouter backend pin for reproducible routing (single name or list, e.g. "WandB" — different backends have different safety configs)

Toggle system mode live in the TUI with /target sysmode merge.

[judge] — Verdict Evaluator

The judge grades text targets and vision-grades generated images — for image targets it MUST be a vision-capable model:

[judge] protocol = "openai" base_url = "https://openrouter.ai/api/v1" api_key_env = "OPENROUTER_API_KEY" model = "openai/gpt-4o-mini"

[[mcp.servers]] — MCP Tool Servers (client side)

Each enabled server is spawned over stdio at startup and its tools are proxied into the agent’s tool registry:

[[mcp.servers]] name = "custom-tools" command = "python" args = ["-m", "my_tool_server"] # env = { MY_VAR = "value" } # enabled = true # tool_prefix = ""

Schema fields: name, command, args, env, enabled, tool_prefix. The P4RS3LT0NGV3 engine is wired in natively as parsel_* tools (vendored via wallbreaker parsel update, Node.js required) — the example server block in config.example.toml is only for running that same engine out-of-process.

Wallbreaker also runs as an MCP server exposing wb_* tools to other agents — see MCP Server.

State Files

FilePurpose
sessions/run-*.jsonlCanonical run logs (JSONL, one object per event)
sessions/autosave.jsonTUI autosave
sessions/.wallbreaker_history.sqlite3Rebuildable search/correlation index (V2)
wb_runs/, wb_images/, wb_artifacts/, findings/Engagement artifacts (gitignored)

JSONL is the source of truth; the SQLite index may be deleted and rebuilt at any time. All of these are gitignored.

DangerFor authorized security testing only.
Next
First Session →
Last updated on