Skip to main content

Configuration Reference

Crux reads YAML configuration from .crux/config.yaml. Every field can be overridden with CRUX_ prefixed environment variables.

Project

KeyTypeDefaultDescription
project.namestring"my-project"Human-readable project name
project.rootstring"."Project root directory
project.state_dirstring".crux"Directory for Crux state files

Environment overrides: CRUX_PROJECT_NAME, CRUX_PROJECT_ROOT, CRUX_PROJECT_STATE_DIR

Agents

Each agent is a named entry under agents: with the following fields:

KeyTypeRequiredDescription
pluginstringYesAdapter name: claude, codex, gemini, generic, or a custom plugin name
rolestringYesFunctional role: orchestrator, project-manager, engineer, reviewer
permissionstringYesSecurity tier: readonly, standard, elevated, autonomous
modelstringNoOptional model identifier passed to the plugin

Example:

agents:
orchestrator:
plugin: claude
role: orchestrator
permission: elevated
engineer-1:
plugin: claude
role: engineer
permission: standard
model: opus
engineer-2:
plugin: codex
role: engineer
permission: standard

Memory

KeyTypeDefaultDescription
memory.sqlite_pathstring".crux/memory.db"Path to SQLite database file
memory.vector_dirstring".crux/vectors"Directory for vector index persistence
memory.embedding_providerstring"chromem-default"Embedding backend: chromem-default or ollama
memory.embedding_modelstring"nomic-embed-text"Model name when using the ollama provider

Environment overrides: CRUX_MEMORY_SQLITE_PATH, CRUX_MEMORY_VECTOR_DIR, CRUX_MEMORY_EMBEDDING_PROVIDER, CRUX_MEMORY_EMBEDDING_MODEL

Phases

KeyTypeDefaultDescription
phases.spec_dirstring"docs/phases"Directory containing phase specification files

Environment override: CRUX_PHASES_SPEC_DIR

Security

KeyTypeDefaultDescription
security.audit_logstring".crux/audit.log"Path to the structured JSON audit log
security.max_cmds_per_minint60Maximum commands an agent may execute per minute
security.max_files_per_sessionint100Maximum files an agent may modify per session
security.allowed_paths[]string[]Restrict file operations to these path prefixes
security.denied_paths[]string[]Block file operations on these paths

Environment overrides: CRUX_SECURITY_AUDIT_LOG, CRUX_SECURITY_MAX_CMDS_PER_MIN, CRUX_SECURITY_MAX_FILES_PER_SESSION

Context

KeyTypeDefaultDescription
context.total_budgetint0Total token budget for all context sections
context.world_stateint0Token budget for world state injection
context.decision_ragint0Token budget for decision RAG context
context.summaryint0Token budget for work notes summary
context.reserveint0Token budget reserved for prompt structure

Generic Plugins

Custom plugin adapters configured via regex patterns:

KeyTypeRequiredDescription
namestringYesDisplay name
binarystringYesExecutable to launch
args[]stringNoDefault CLI arguments
ready_patternstringYesRegex for ready state detection
busy_patternstringYesRegex for busy state detection
error_patternstringYesRegex with capture group for error message
rate_limit_patternstringNoRegex for rate-limit detection
capabilities[]stringNoCapability strings this plugin supports

Example:

generic_plugins:
my-tool:
name: "My Tool"
binary: "my-tool"
args: ["--interactive"]
ready_pattern: "^> $"
busy_pattern: "\\.\\.\\.$"
error_pattern: "Error: (.+)"

Full Example

project:
name: my-project
root: .
state_dir: .crux

agents:
orchestrator:
plugin: claude
role: orchestrator
permission: elevated
engineer-1:
plugin: claude
role: engineer
permission: standard
engineer-2:
plugin: codex
role: engineer
permission: standard

memory:
sqlite_path: .crux/memory.db
vector_dir: .crux/vectors
embedding_provider: ollama
embedding_model: nomic-embed-text

phases:
spec_dir: docs/phases

security:
audit_log: .crux/audit.log
max_cmds_per_min: 60
max_files_per_session: 100
allowed_paths: ["."]
denied_paths: [".crux/secrets.env", ".git/"]