Configuration

Boitata reads its settings from a TOML file (default: boitata.toml in the current directory) so credentials never need to be passed on the command line. The file is git-ignored; commit boitata.example.toml as a template instead.

Finding the config file

The CLI resolves the config file in this order (later wins):

  1. ./boitata.toml
  2. the path passed to --config <path>
  3. the path in the BOITATA_CONFIG environment variable

Start from the template:

cp boitata.example.toml boitata.toml

Secrets

Prefer environment variables for real secrets. They take precedence over the file and keep credentials off disk:

export BOITATA_API_KEY="your-key"
Env varOverridesPurpose
BOITATA_CONFIGconfig file pathPoint at a non-default config
BOITATA_API_KEYapi_keyAPI key (takes precedence over the file)

The Config struct implements Debug by hand to redact api_key, and McpServerConfig redacts auth_token plus the values of env/headers. The secrets are never written to the audit log either.

Fields

Core

FieldTypeDefaultDescription
providerstringnone"anthropic", "openai", or "ollama"
modelstringnoneModel identifier (e.g. "glm-4.6")
api_keystring?noneAPI key. Prefer BOITATA_API_KEY
base_urlstring?provider defaultOverride the provider's endpoint
max_tokensusize?conservativeOutput token budget per request
max_iterationsusize?50Maximum agent iterations before giving up
system_promptstring?sensible defaultCustom system prompt for the agent

Logging

FieldTypeDefaultDescription
audit_logstring?boitata-audit.logPath to the JSONL audit log

See Audit Log for what gets written.

Context management

FieldTypeDefaultDescription
auto_compact_thresholdfloat?0.8Fraction of the context window at which older turns are summarized. 0.0 disables compaction

Tools and security

FieldTypeDefaultDescription
allow_execute_commandbool?trueRegister the arbitrary execute_command tool
workspace_rootstring?current dirRoot that path-taking tools are confined to
confine_toolsbool?trueConfine path-taking tools to workspace_root
tool_policystring?"allow_all""allow_all" or "read_only"
denied_commands[string]?[]Regexes; a matching execute_command is denied

See Security for how these compose.

MCP servers

A list of [[mcp_servers]] blocks. Each server's tools are discovered at startup and exposed to the agent. See MCP Servers.

FieldTypeDescription
namestringNamespacing identifier (e.g. "git")
commandstring?Executable to spawn (selects the stdio transport)
args[string]Arguments for command
envmapExtra env vars for the server process
urlstring?Remote endpoint (selects the Streamable HTTP transport)
auth_tokenstring?Bearer token for HTTP
headersmapExtra HTTP headers

Set exactly one of command or url per server. Setting both, or neither, is a config error that aborts the run.

Blueprints

Only used with --blueprint:

FieldTypeDefaultDescription
blueprint_max_stepsusize?executor limitCap on super-steps (bounds cyclic graphs)
blueprint_max_retriesusize?0Times to retry a failed super-step, restoring pre-step state

See Blueprints.

Complete example

provider   = "openai"
model      = "glm-4.6"
base_url   = "https://api.z.ai/api/paas/v4/chat/completions"
max_tokens = 4096

# audit_log          = "boitata-audit.log"
# max_iterations     = 50
# auto_compact_threshold = 0.8

# --- security ---
# allow_execute_command = true
# confine_tools         = true
# workspace_root        = "/path/to/project"
# tool_policy           = "read_only"
# denied_commands       = ['rm\s+-rf\s+/', 'sudo\b']

# --- MCP servers ---
# [[mcp_servers]]
# name    = "filesystem"
# command = "npx"
# args    = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]