Configuration Reference

This reference documents all configuration options for Praxis components.

Environment Variables

RabbitMQ

VariableDefaultDescription
PRAXIS_RABBITMQ_URLamqp://praxis:praxis@localhost:5672RabbitMQ connection URL

Database (Service)

VariableDefaultDescription
PRAXIS_DATABASE_URL~/.praxis/operations.dbDatabase connection

Formats:

  • postgresql://user:pass@host:5432/dbname - PostgreSQL
  • sqlite:///path/to/file.db - SQLite with URL prefix
  • /path/to/file.db - SQLite (implicit)

See Database Configuration for detailed setup.

Service

VariableDefaultDescription
PRAXIS_NODES_DIR(none)Directory containing node binaries for download. No Rust code in this repo reads it — it only appears in the Dockerfile and pkg/ packaging examples, so it may be vestigial or packaging-only rather than something Praxis itself consumes.

Build

VariableEffect
PRAXIS_NOT_HIDDENDisable hidden desktop for DevTools agents. Defaults to 1 in debug builds (visible for development) and 0 in release builds (hidden for production). Set to 1 to make the browser window visible for debugging.
PRAXIS_VERSIONDocker build arg. Version of the prebuilt release tarball to download from GitHub Releases. Defaults to the version pinned in the Dockerfile. Usage: PRAXIS_VERSION=1.0.0 docker compose up --build
PRAXIS_RELEASE_BASEDocker build arg. Base URL for the release download (without trailing /v<version>/...). Defaults to https://github.com/originsec/praxis/releases/download. Override to pull from a fork or mirror.

Logging

VariableExampleDescription
RUST_LOGinfoLog level filter
RUST_LOGdebugVerbose logging
RUST_LOGpraxis_node::intercept=debugModule-specific logging

Service Configuration

Service configuration is stored in the database and managed via the praxis TUI.

Application Logging

KeyDefaultDescription
application_logs_enabledfalseEnable centralized application/event logging from service and nodes

When disabled or missing, logging is off by default. The service broadcasts the current setting to nodes and clients at startup and on registration.

Log Query

KeyDefaultDescription
log_query_row_limit10000000Maximum rows returned from database tables in KQL log-query searches

LLM Provider Settings

Access via Settings (Ctrl+S) > LLM in the praxis TUI.

LLM configuration has two levels: a single list of named model definitions, and per-feature keys that each point at one definition by name.

KeyFormatDescription
llm_model_definitionsJSON arrayNamed model definitions. Each entry has name, provider, model, apiKey, and an optional baseUrl override.
llm_feature_semantic_parserstringName of the model definition used for semantic parsing
llm_feature_traffic_parserstringName of the model definition used for traffic analysis
llm_traffic_parser_body_limit_kbintegerMaximum text body sent to the Traffic Parser, in KiB (default: 60; larger bodies retain their beginning and end)
llm_feature_semantic_opsstringName of the model definition used for semantic operations
llm_feature_orchestratorstringName of the model definition used for the Orchestrator
llm_feature_doc_helperstringName of the model definition used for the documentation helper agent; falls back to llm_feature_orchestrator when unset

Example llm_model_definitions value:

[
  {
    "name": "sonnet",
    "provider": "anthropic",
    "model": "claude-sonnet-4-20250514",
    "apiKey": "sk-ant-..."
  },
  {
    "name": "haiku",
    "provider": "anthropic",
    "model": "claude-haiku-4-5-20241022",
    "apiKey": "sk-ant-..."
  }
]

Each llm_feature_* key stores the name of one entry above (e.g. llm_feature_orchestrator = "sonnet"). A feature with no assigned model definition, or one whose name no longer resolves, is disabled.

Prompt Timeout

KeyDefaultDescription
prompt_timeout_secs600Maximum time in seconds a single agent prompt can run before the agent process is killed. Applies to all sessions unless overridden per-session.

Claude Bridge Settings

Access via Settings (Ctrl+S) > Claude Bridge in the praxis TUI.

KeyDefaultDescription
claude_ccrv1_enabledfalseEnable the CCRv1 (WebSocket) bridge listener
claude_ccrv1_port8586Port for CCRv1 WebSocket connections
claude_ccrv2_enabledfalseEnable the CCRv2 (HTTP+SSE) bridge listener
claude_ccrv2_port8587Port for CCRv2 HTTP connections

TLS is always on for both bridges; CCRv1 only accepts wss:// and CCRv2 only accepts https://. Leaf certs are minted per SNI on the fly and signed by a self-signed CA at ~/.praxis/bridge/ca_cert.pem.

The Claude Bridge allows Claude Code to connect directly to the service as a virtual node, without deploying a full Praxis node. See Claude Bridge for protocol details and setup instructions.

MCP Server Settings

Access via Settings (Ctrl+S) > Service in the praxis TUI.

KeyDefaultDescription
mcp_server_enabledtrueEnable the built-in MCP server
mcp_server_port8585Port for the MCP server

The MCP server exposes all Praxis tools via the Model Context Protocol over streamable-HTTP transport. It is used by the built-in Orchestrator and can also be used by external AI agents. See MCP Server for full details.

Praxis Agent Settings

Access via Settings (Ctrl+S) > Agents in the praxis TUI.

KeyFormatDescription
praxis_agent_settingsJSON: {"modelRef": "<name>", "thinkingEffort": "<string>", "enabled": bool}Config for the built-in Praxis agent connector. modelRef names an entry in llm_model_definitions; thinkingEffort is a free-form string (e.g. low/medium/high) appended to the session system prompt.
praxis_agent_system_promptstringOptional system prompt override for the Praxis agent connector

Supported Providers

Provider IDNameAPI KeyBase URL
anthropicAnthropicrequiredfixed
openaiOpenAIrequiredfixed
geminiGoogle (Gemini)requiredfixed
groqGroqrequiredfixed
cerebrasCerebrasrequiredfixed
mistralMistralrequiredfixed
xaixAIrequiredfixed
nvidiaNVIDIArequiredfixed
fireworksaiFireworks AIrequiredfixed
minimaxMiniMaxrequiredfixed
moonshotMoonshot AIrequiredfixed
openrouterOpenRouterrequiredfixed
ollamaOllama (local)optionaldefaults to http://localhost:11434/v1
customCustom (OpenAI-compatible)optionalrequired

Every model definition can carry an optional base_url field that overrides the provider default. For custom the base URL is required — discovery and inference both fail without it. For ollama the base URL defaults to the local daemon; set it explicitly if you run Ollama remotely or on a non-default port.

Model Reference Format

When specifying models in operations or chains:

provider::model

Examples:

  • anthropic::claude-sonnet-4-20250514
  • openai::gpt-4o
  • gemini::gemini-1.5-pro
  • groq::llama-3.3-70b-versatile

Node Configuration

Node Commands

Nodes accept configuration commands at runtime:

CommandParameterDescription
SetReportIntervalinterval_secs: u64How often to send information updates

Agent Connector Configuration

Each agent connector may have specific configuration. See individual connector documentation.

Claude Code

  • Config path: ~/.claude/settings.json (global settings) and ~/.claude.json (preferences)
  • MCP servers: ~/.claude/mcp.json, .mcp.json, and enabled plugin MCP definitions
  • Plugins: ~/.claude/plugins/installed_plugins.json with cached components in ~/.claude/plugins/cache/
  • Sessions: ~/.claude/projects/

Gemini CLI

  • Config path: ~/.gemini/settings.json
  • Sessions: ~/.gemini/tmp/<sha256-hash>/chats/

M365 Copilot

  • Mode: DevTools (via CDP)
  • Platform: Windows only

Claude Desktop

  • Config path: %APPDATA%\Claude\claude_desktop_config.json (MCP servers), plus config.json and developer_settings.json in the same directory
  • Sessions: none — Code/Chat are static UI modes driven via CDP, not session files
  • Platform: Windows only

Codex CLI

  • Config path: ~/.codex/config.toml (MCP servers), ~/.codex/auth.json (credentials)
  • Sessions: ~/.codex/sessions/, ~/.codex/archived_sessions/

Cursor Agent

  • Config path: ~/.cursor/cli-config.json (global), .cursor/cli.json / .cursor/mcp.json (project)
  • Sessions: ~/.config/cursor/chats/<project_hash>/<chat_id>/ (SQLite store.db)

Droid CLI

  • Config path: ~/.factory/settings.json, ~/.factory/mcp.json
  • Sessions: ~/.factory/sessions/

Pi Coding Agent

  • Config path: ~/.pi/agent/settings.json (no MCP support — extensions are the intended extension mechanism)
  • Sessions: ~/.pi/agent/sessions/<encoded-cwd>/

Antigravity CLI

  • Config path: ~/.gemini/antigravity-cli/settings.json
  • Sessions: ~/.gemini/antigravity-cli/brain/

Operation Definitions

Operations are defined in JSON and stored in the service database.

JSON Format

{
  "item_type": "operation",
  "name": "find_credentials",
  "short_name": "find_credentials",
  "category": "recon",
  "description": "Search for hardcoded credentials",
  "agent_info": "Security researcher looking for exposed secrets",
  "timeout": 300,
  "operation_prompt": "Search the current directory for files that may contain hardcoded credentials, API keys, passwords, or secrets. List each finding with the file path and context.",
  "mode": "one-shot",
  "agent_iterations": 1,
  "yolo_mode": false,
  "disabled": false
}

Fields

FieldTypeRequiredDescription
item_typestringNoImport validation marker; if present must equal "operation"
namestringYesDisplay name
short_namestringYesShort name, combined with category to form full_name
descriptionstringYesHuman-readable description
categorystringYesCategory for organization
agent_infostringYesContext for the AI agent
timeoutu64No (default 60)Timeout in seconds
operation_promptstringYesThe prompt to execute
modestringNo (default one-shot)one-shot or agent
agent_iterationsu32NoMax iterations (agent mode)
yolo_modeboolNoAuto-approve actions
model_refstringNoModel override (provider::model)
disabledboolNoDisable the operation

Full Name

Operations are referenced by category::short_name, e.g., recon::find_credentials.

Chain Definitions

Chains are visual workflows stored in the service database.

Elements

Element TypeProperties
Triggerid, trigger_type
Operationid, operation_name, model_ref, session_group, block_config
Transformid, prompt, model_ref, session_group, block_config
GenericPromptid, prompt, session_group, block_config
Memoryid, mode (store or retrieve), key
Loopid, max_iterations
Toolid, tool_name, tool_params, block_config
Payloadid, payload_id, block_config
Terminationid, block_config

block_config fields (all optional):

FieldTypeDescription
max_runtimeu64Per-element timeout in seconds
yolo_modeboolAuto-approve for this element's session
working_dirstringWorking directory override
require_all_inputsboolWait for all upstream inputs before executing (default: true)

Session Groups

{
  "id": "group-1",
  "color": "#8B5CF6",
  "yolo_mode": true
}

Elements in the same session group share an agent session context.

Connections

{
  "id": "edge-1",
  "from_element": "trigger-1",
  "to_element": "op-1",
  "from_port": 0,
  "to_port": 0
}

condition is optional. Omit it entirely for a connection that always fires — when present, it must be OnSuccess or OnFailure. "Always" is not a valid value and fails to deserialize.

Intercept Rules

Rules for matching and processing intercepted traffic.

Rule Structure

{
  "name": "Capture API Keys",
  "regex_pattern": "Authorization:\\s*Bearer",
  "target_direction": "send",
  "scope": "all",
  "enabled": true,
  "summarization_prompt": "Extract and summarize the authentication tokens"
}

Target Direction

ValueDescription
sendMatch outgoing requests
receiveMatch incoming responses
bothMatch both directions

Scope

RuleScope carries no internal tag attribute (unlike sibling enums in the same file that do), so it serializes with serde's default external tagging rather than a {"type": "..."} shape.

TypeExampleDescription
all"all"All nodes/agents (bare string)
node{"node": {"node_id": "abc123"}}Specific node
agent{"agent": {"node_id": "abc123", "agent_short_name": "claudecode"}}Specific agent

Database Schema

SQLite (Default)

Default location: ~/.praxis/operations.db

Tables:

  • service_config - Key-value configuration
  • operation_definitions - Semantic operations
  • operations - Operation executions
  • operation_chains - Chain workflows
  • chain_executions - Chain runs
  • chain_triggers - Automated chain triggers (scheduled, intercept-match, new-node)
  • chain_memories - Key-value store for chain Memory elements
  • chain_payloads - Static content for Payload chain elements
  • intercepted_traffic - Intercepted traffic
  • intercept_rules - Traffic rules
  • traffic_matches - Rule matches
  • recon_results - Stored recon data
  • event_log - Centralized logging table (controlled by application_logs_enabled)
  • session_transactions - Per-prompt transaction records (request/response text, timing, status)
  • lua_agent_scripts - Lua agent connector scripts (built-in and custom)
  • toolkit_actions - Toolkit tool execution log
  • remote_nodes - Persisted remote (virtual) node bridge configs
  • agent_chat_sessions - AgentChat sessions
  • agent_chat_agents - Agents participating in an AgentChat session
  • agent_chat_channels - AgentChat channels
  • agent_chat_messages - AgentChat channel and DM messages

PostgreSQL

For production and multi-instance deployments, use PostgreSQL. See Database Configuration for setup, migration, and tuning.

Default Ports

ServicePortProtocol
MCP Server8585HTTP
Claude Bridge CCRv18586WS
Claude Bridge CCRv28587HTTP
RabbitMQ5672AMQP
RabbitMQ Management15672HTTP
PostgreSQL5432TCP
Proxy (when enabled)DynamicHTTP

CLI Configuration

The Praxis CLI (praxis) stores state and can be configured via command-line options or its config file.

CLI State File

PlatformPath
Linux/macOS~/.praxis/cli.json
Windows%USERPROFILE%\.praxis\cli.json

Contents:

{
  "client_id": "uuid-generated-on-first-run",
  "sessions": {
    "<node_id>": "<session_id>"
  }
}

sessions maps node IDs to the CLI's currently active ACP session ID on that node, populated by session create and consumed by session prompt / session close.

CLI Options

The RabbitMQ URL is never read from a -r/--rabbitmq flag or an OS environment variable — no such flag exists. It is read from ~/.config/praxis/config (key PRAXIS_RABBITMQ_URL). Use praxis set-rabbitmqurl <url> to persist it and praxis config to see the resolved URL and its source.

OptionDefaultDescription
-t, --timeout600Connection/command timeout in seconds
-C, --command-Run a single command and exit
--status-Check connection status
--clear-Clear local state (client ID)
--acp-Run as ACP stdio proxy (forward JSON-RPC over stdin/stdout to the service)
--resume-Resume a saved orchestrator session, selected from a list
--continue-Continue the most recent local orchestrator session

File Locations

Linux

FilePath
Database~/.praxis/operations.db
CLI State~/.praxis/cli.json
CLI Binary/usr/local/bin/praxis (symlink to praxis_cli)
Claude Config~/.claude/settings.json and ~/.claude.json
Gemini Config~/.gemini/settings.json

macOS

FilePath
Database~/.praxis/operations.db
CLI State~/.praxis/cli.json
CLI Binary/usr/local/bin/praxis (symlink to praxis_cli)
Claude Config~/.claude/settings.json and ~/.claude.json
Gemini Config~/.gemini/settings.json

Windows

FilePath
Database%USERPROFILE%\.praxis\operations.db
CLI State%USERPROFILE%\.praxis\cli.json
CLI Binary%USERPROFILE%\.praxis\bin\praxis.exe (copy of praxis_cli.exe)
Claude Config%USERPROFILE%\.claude.json
Hosts FileC:\Windows\System32\drivers\etc\hosts