Skip to content
Habakkuk

Configuration

Every section of config.yaml, the settings for providers, agents and channels, and where each one is explained.

On this page

$HABAKKUK_HOME/config.yaml is strict YAML: unknown keys are errors. Settings ending in _env name an environment variable (or a .env entry, or a secret manager reference) that holds the value; secrets never go in the file. habakkuk init writes a commented starter config, and habakkuk doctor checks one.

Top-level sections#

Key What it configures Guide
version The config format version; must be 1
providers Model APIs, keyed by a name you choose Models and providers
agents Agents, keyed by name Agents
channels Chat accounts, keyed by account name Channels
mcp_servers MCP servers whose tools agents can use MCP servers
mcp_server Habakkuk as an MCP server over HTTP (http, allow_send) MCP servers
http The HTTP server: listen, token_env, public_url, webhooks Dashboard and web chat
transcription Speech-to-text for voice notes and habakkuk talk: provider, model, prompt Models and providers
tts Speech for speak and voice replies: provider, key_env, base_url, model, voice, format, instructions, max_chars Voice
realtime Live voice mode in the dashboard: provider, model, voice, key_env, base_url, transcription, instructions, ttl Voice
talk habakkuk talk: wake, follow_up, silence, threshold, input, device, player, barge_in Voice
images image_generate: provider, key_env, base_url, model, edit_model, size Tools and approvals
video video_generate: provider, key_env, base_url, model, image_model, size, seconds, timeout Tools and approvals
search web_search: provider, key_env, url Tools and approvals
browser The browser toolset: mode, path, cdp_url, headless, args, allowed_urls, blocked_urls, allow_private, idle_timeout, timeout Browser and computer use
computer The computer toolset: backend, display, screen, max_actions, confirm_apps, native, timeout Browser and computer use
meeting Meeting attendance: name, announce, max_duration, lobby_timeout, alone_timeout, headless, summary_model Meetings
memory embeddings (provider, model, dimensions), review, review_model, review_idle, nightly, stale_days Memory and skills
skills registries, default_registry, curate, archive_after_days Memory and skills
hooks A list of {event, command, timeout, match} Tools and approvals
pricing Model prices per million tokens: input, output, cache_read, cache_write Models and providers
a2a Agent2Agent: serve, token_env, name, description, agents, peers Integrations
homeassistant url, token_env, allow_domains, confirm, triggers Integrations
nodes Device nodes: url, allow, timeout, pair_ttl Integrations
timezone The time zone for schedules, e.g. America/Toronto (default the server's) Schedules
language The default language of Habakkuk's own text Agents
workers concurrency and job lease
retention days: transcripts and finished jobs older than this are pruned; 0 disables Deployment
metrics public: serve /metrics without the API token Deployment
telemetry OTLP traces: otlp_endpoint, headers_env, include_content, service_name Deployment
logging max_mb, backups for habakkuk.log rotation Deployment
tools allow_private_urls for fetch_url and A2A Tools and approvals
secrets sources and refs for secret managers Deployment

Enabled plugins add MCP servers, skills, hooks and commands to the loaded configuration without changing the file; see Plugins.

Providers#

Key Meaning
type anthropic, openai (any OpenAI-compatible API), responses, gemini or bedrock
preset A known service that fills in type, base URL and key variable; a provider named after a preset uses it
base_url The API endpoint
keys_env Variables holding keys, tried in order and rotated on rate limits and auth failures
auth chatgpt or copilot for a subscription login instead of keys
region bedrock: the AWS region (default AWS_REGION or the shared config)

Agents#

Key Default Meaning
model <provider>/<model id>
fallbacks Models tried in order after model
effort low, medium, high, xhigh or max
max_tokens 64000 Output tokens per model call
max_iterations 200 Model calls per turn
permission workspace read-only, ask, workspace or full
approvals human human, reviewer or reviewer_then_human
reviewer_model the agent's chain The approval reviewer's model
workspace The agent's working folder
toolsets core, memory, skills, schedule, delegate, board The tools it gets; a list replaces the default
web true Use the provider's hosted web search and fetch
compact_at 600000 on anthropic, else 150000 Prompt size that triggers compaction; -1 turns it off
sandbox none none, docker (with docker: {image, network, cpus, memory, user}) or ssh (with ssh: {host, port, user, key_env, workdir})
checkpoints true Snapshot the workspace before turns change it
checkpoint_max_mb 200 Skip a snapshot larger than this
tool_search_over 60 Switch to tool search above this many tools; -1 turns it off
title_model the agent's chain The model that writes session titles; off disables them

Channels#

Key Meaning
type The platform: see Channels
agent The default agent for this account's conversations
routes Conversation (or Slack team) id to agent
allow_from Sender ids allowed to talk; "*" allows everyone
groups off, mention (default) or all
session_idle Fresh session after this much silence (default 24h; web never; 0 never)
token_env Telegram and Discord bot token, Matrix access token, WhatsApp agent API key
app_token_env, bot_tokens_env Slack: the Socket Mode app token, and a bot token per workspace
account, homeserver Signal: the bot's number; Matrix: its user id and the homeserver URL
api_url Override the platform API base URL; Signal: the signal-cli daemon
voice_replies, voice_text Spoken replies: off, mirror or always, and whether the text is sent too
progress draft (default) or off
reactions React to the user's message when a turn starts and ends
language The language of Habakkuk's own messages on this channel
email, sms, msteams, googlechat, bluebubbles, line, mattermost, irc, ntfy, whatsappcloud, messenger, instagram, feishu, dingtalk, wecom, zulip, rocketchat, nextcloudtalk, twitch The block for that type; see Telegram, Slack, Discord and more

The source of truth is internal/config: each setting is documented beside its field.