Skip to main content

Configuration Reference

The sections of ~/.aethon/config.yaml, field by field. A missing or empty file produces a fully-defaulted config. The opt-in capabilities, macos, lsp, runtime_tools, session_recorder, ambient, and prompt blocks are covered in the conceptual guide (linked at the bottom). For that guide and the ${ENV_VAR} resolution rules, see Configuration.

model

FieldTypeDefaultMeaning
providerstr"openai"Model provider backend (openai, anthropic, ollama, bedrock, gemini, litellm, mistral, …), or fake/echo for an offline canned-reply backend (no network; used for tests).
hoststr"http://localhost:11434"Base URL: the Ollama host, or an OpenAI-compatible endpoint when provider: openai.
model_idstr"gpt-4o"Model identifier.
api_keystr""API key for the provider.
temperaturefloat1.0Sampling temperature.
top_pfloat0.95Nucleus sampling probability mass.
top_kint40Top-k sampling cutoff.
max_tokensint8192Max tokens to generate per response.
regionstr"us-west-2"Provider region (e.g. for Bedrock-style backends).
extradict{}Arbitrary extra provider params.

channels

channels.cli

FieldTypeDefaultMeaning
enabledbooltrueEnable the CLI channel.

channels.webchat

FieldTypeDefaultMeaning
enabledbooltrueEnable the web chat channel.
portint18790Web chat listen port.
hoststr"127.0.0.1"Bind address; loopback only by default. Set 0.0.0.0 to expose (also set dashboard.auth_token).
allowed_originslist[str][]Extra browser Origins accepted on WS upgrades (full origins, e.g. https://chat.example.com). Empty = same-host only.

channels.telegram

FieldTypeDefaultMeaning
enabledboolfalseEnable the Telegram channel.
tokenstr""Telegram bot token.
chat_idstr""Default destination for proactive/outbound sends (scheduler, send_message, notifications). Reactive replies ignore it.

channels.discord

FieldTypeDefaultMeaning
enabledboolfalseEnable the Discord channel.
tokenstr""Discord bot token.
channel_idstr""Default destination for proactive/outbound sends (channel id or user id for a DM). Reactive replies ignore it.

channels.slack

FieldTypeDefaultMeaning
enabledboolfalseEnable the Slack channel.
bot_tokenstr""Slack bot token (xoxb-…).
app_tokenstr""Slack app-level token (xapp-…).
channelstr""Default destination for proactive/outbound sends (channel id C…, user id U…, or channel name). Reactive replies ignore it.

channels.whatsapp

FieldTypeDefaultMeaning
enabledboolfalseEnable the WhatsApp channel (experimental).
chatstr""Default destination for proactive/outbound sends (phone number / chat user id). Reactive replies ignore it.

security

FieldTypeDefaultMeaning
bypass_tool_consentbooltrueRun tools without the per-tool consent prompt (AETHON runs headless and has its own guardrails). Set false to restore per-tool prompts.
workspace_onlyboolfalseWhen true, confine file tools to ~/.aethon/workspace; when false (default), allow anywhere under $HOME except blocked system/credential paths.
require_approvallist[str]["shell", "file_write", "send_message"]Reserved; not currently enforced. Approval gating is configured in the approval section.
blocked_commandslist[str]["rm -rf /", "sudo", "mkfs"]Shell command substrings that are blocked.
allowed_sendersdict[str, list[str]]{}Per-channel allowlist of sender identifiers (empty list on a messaging bot = reject everyone).
mark_untrusted_contentbooltrueWrap external-content tool results (scraper/http_request/jsonrpc/use_github) and webhook payloads in [UNTRUSTED EXTERNAL CONTENT] markers (honest marking, not an injection detector).
sandboxstr"none"none = shell runs on the host under the blocklist; docker = shell runs in a per-session container (fails closed if docker is unavailable).
sandbox_imagestr"python:3.12-slim"Container image for the docker sandbox.
sandbox_networkstr"none"docker --network; none = no host/network access.
sandbox_memorystr"512m"docker --memory cap.
sandbox_cpusstr"1.0"docker --cpus cap.
sandbox_pids_limitint256docker --pids-limit cap.
sandbox_timeoutint60Seconds per shell command in the sandbox.
sandbox_read_onlybooltrueRead-only container rootfs (writable /tmp + the workspace mount).

session

FieldTypeDefaultMeaning
storage_dirstr"~/.aethon/sessions"Directory where session state is stored.
conversation_managerstr"summarizing"Conversation manager strategy.
summary_ratiofloat0.3Fraction of history to summarize when compacting.
preserve_recent_messagesint10Number of recent messages kept verbatim.
compact_enabledboolfalseReplace old, large tool outputs in the model input with a compact marker (in-memory; the disk audit trail keeps the full output). Opt-in.
compact_keep_last_n_turnsint4Never compact the most recent N turns.
compact_min_charsint800Only compact a result bigger than this.
compact_trigger_charsint16000Run a compaction pass once this much old bulk piles up.

memory

FieldTypeDefaultMeaning
enabledbooltrueEnable vector memory.
embedding_providerstr"ollama"Embedding provider (ollama, openai).
embedding_modelstr"nomic-embed-text"Embedding model name.
embedding_hoststr"http://localhost:11434"Embedding endpoint for the ollama provider (independent of the chat model host).
embedding_api_keystr""API key for the embedding provider.
db_pathstr"~/.aethon/memory.sqlite"SQLite path for the vector store.
auto_recallboolfalseEmbed each incoming message and inject top-matching memories as a ## Recalled Memories prompt layer (opt-in).
recall_top_kint3Number of memories to recall.
recall_min_scorefloat0.0Only inject matches at/above this similarity.
recall_max_charsint1500Max characters of recalled memory injected.

multi_agent

FieldTypeDefaultMeaning
enabledbooltrueEnable the multi-agent system.
max_handoffsint10Max agent-to-agent handoffs.
max_iterationsint10Max iterations per run.
execution_timeoutfloat300.0Overall execution timeout (seconds).
node_timeoutfloat120.0Per-node timeout (seconds).

sops

FieldTypeDefaultMeaning
enabledbooltrueEnable SOP execution.
builtin_sops_enabledbooltrueEnable built-in SOPs.

logging

FieldTypeDefaultMeaning
enabledbooltrueAttach a rotating file handler to the root logger (also captures third-party errors).
levelstr"INFO"Log level for AETHON's own loggers.
third_party_levelstr"WARNING"Log level for libraries (strands/uvicorn/aiogram/discord/slack).

approval

FieldTypeDefaultMeaning
enabledboolfalseEnable the interrupt-based approval hook.
requires_approvallist[str]["shell", "file_write", "manage_tools", "manage_specialists"]Action types requiring approval via this hook.
timeout_secondsfloat120.0Seconds to wait for a human approval answer before denying.

reliability

All gates are advisory by default (they append feedback); strict flips them to hard gates.

FieldTypeDefaultMeaning
strictboolfalseEscalate findings from advisory feedback to hard gates.
post_edit_verifybooltrueRun a verify command on edited files and append a [Verify] PASS/FAIL block.
verify_cmdstr""Verify command; {paths} is replaced with edited paths. Empty = auto-detect (ruff check on edited *.py).
verify_timeoutint30Seconds before a verify run is abandoned.
completion_gatebooltrueAppend a Definition-of-Done reminder when a success claim lacks verification evidence.
anglicization_guardbooltruePause edits that replace existing Turkish text with English-only text (advisory).
input_validatorbooltrueCancel malformed tool calls (empty shell command, missing file path).

core_loop

The autonomous core loop (work intake → plan → bounded executor → proof-of-work receipt). Every knob is opt-in / off by default unless noted.

FieldTypeDefaultMeaning
intake_enabledboolfalseClassify a clear unit of work and open it as a planned project instead of answering as chat.
intake_work_phraseslist[str](TR/EN phrases)Phrases that force the work verdict.
intake_chat_phraseslist[str](TR/EN phrases)Phrases that force the chat verdict (chat wins ties).
plan_approvalboolfalseWhen the executor runs, require user approval before executing a freshly-planned project.
executor_enabledboolfalseEnable the bounded project executor.
executor_max_iterationsint20Hard cap on task turns per project run.
executor_max_task_attemptsint3Drop a task after N no-progress turns (durable).
executor_stop_on_budgetbooltrueHalt between tasks once the budget ceiling is breached.
pulse_enabledbooltrueSend progress pulses to the origin channel while executing.
pulse_every_n_tasksint3Send a pulse every N newly-completed tasks.
receipt_enabledbooltrueDeliver a proof-of-work receipt when a run ends.
capability_dietboolfalseLoad heavy/domain tools only when the session needs them.
dynamic_specialistsboolfalseExpose manage_specialists; let the agent define + persist custom specialists.
allow_powerful_specialistsboolfalsePermit a dynamic specialist to hold a powerful tool (shell/python_repl/file_write/editor/http_request).

telemetry

FieldTypeDefaultMeaning
enabledbooltrueEnable the telemetry hook.
max_historyint10000Max telemetry events retained.

budget

FieldTypeDefaultMeaning
daily_usdfloat0.0Daily spend ceiling in USD; 0 = unlimited (measure only). Turns are warned near the ceiling and blocked once breached (also stops ambient/scheduler turns).
warn_ratiofloat0.8Warn once spend crosses this fraction of the ceiling.
pricingdict{}Override the built-in pricing table: USD per 1M tokens, {model_substring: {"input": x, "output": y}}.

memory_guard

FieldTypeDefaultMeaning
enabledbooltrueEnable the memory guard hook.
custom_patternslist[str][]Additional patterns the guard should catch.

scheduler

FieldTypeDefaultMeaning
enabledbooltrueEnable the scheduler.
default_channelstr"cli"Default channel for scheduled outputs.
jobsdict{}Scheduled job definitions.

dashboard

FieldTypeDefaultMeaning
enabledbooltrueEnable the web dashboard.
pixel_agentsbooltrueEnable the pixel-agents visualization.
auth_tokenstr""Optional shared token; empty = no auth. Gates /dashboard and protected /api/* + /ws/dashboard via ?token=, Authorization: Bearer, or the aethon_dash cookie.

webhook

FieldTypeDefaultMeaning
enabledbooltrueEnable the webhook endpoint.
secretstr""Shared secret to validate incoming webhooks (HMAC-SHA256).

mcp

FieldTypeDefaultMeaning
enabledboolfalseEnable MCP server integration.
serverslist[dict][]List of MCP server definitions.

performance

FieldTypeDefaultMeaning
model_warmupboolfalseSend a real model request on boot to reduce first-message latency (off by default; spends quota).
session_cache_sizeint10Number of sessions cached in memory.
embedding_cache_sizeint100Number of embeddings cached.
max_tool_output_charsint12000Cap a single tool result so it can't overflow the context (0 = off).

repo_map

FieldTypeDefaultMeaning
enabledboolfalseCache a compact path → {purpose, symbols, hash} summary of read files in workspace/REPO_MAP.json and inject a ## Repo Map prompt layer (opt-in).
max_filesint100Cap the map to the newest N files.
max_file_bytesint200000Skip files larger than this.
max_snapshot_charsint2000Prompt-layer size cap.

retention

FieldTypeDefaultMeaning
enabledbooltruePrune session-reset backups + recordings at boot (aethon doctor reports disk usage).
cleared_keepint10Newest cleared/batch_* kept per session (0 = unlimited).
recordings_keepint20Newest recording archives kept.
recordings_max_age_daysint0Age cap on recordings; 0 = no age cap.

paths

FieldTypeDefaultMeaning
workspacestr"~/.aethon/workspace"Workspace root directory.
sessionsstr"~/.aethon/sessions"Sessions directory.
memory_dbstr"~/.aethon/memory.sqlite"Vector memory SQLite path.
logsstr"~/.aethon/logs"Logs directory.
credentialsstr"~/.aethon/credentials"Credentials directory.
recordingsstr"~/.aethon/recordings"Session recordings directory.
note

~ in path-valued fields is stored literally; it is expanded only for the config-file path itself in load()/write(). Some values overlap intentionally (e.g. memory.db_path and paths.memory_db both default to ~/.aethon/memory.sqlite; session.storage_dir and paths.sessions both ~/.aethon/sessions).

For the opt-in capabilities, macos, lsp, runtime_tools, session_recorder, ambient, and prompt blocks, see Configuration and Capabilities.