agentafk
Reference

Configuration keys

Settable configuration keys, types, validation, and sensitivity tiers.

These keys are accepted by the configuration mutation API. Agent tier keys are nonsecret behavioural settings that the agent may change. Human tier keys control identity, trust, routing, or safety and require the human CLI; the agent configuration tool refuses them. Keys are sorted by dotted path.

See editing configuration for file locations and precedence.

PathTypeValues or clampTierDescription
autoResumeOnUsageLimitbooleanagentAuto-resume after a usage-limit pause.
autoRouting.chatbooleanagentAuto-route model for chat.
autoRouting.interactivebooleanagentAuto-route model in the REPL.
autoRouting.telegrambooleanagentAuto-route model for Telegram.
bgSummariesbooleanagentBackground summarisation.
daemon.taskstringhumanDaemon task prompt.
daemon.taskIdstringhumanDaemon task id.
daemon.verifyDonebooleanhumanDaemon-surface "Done" verification gate (default: true): a cron-tick completion push whose response self-certifies "Done" with no corroborating evidence (a successful file write/edit or executed command) is relabelled "⚠️ Done (unverified)" with a caveat line. Set to false to disable. The daemon analog of telegram.verifyDone (which is REPL-only); the daemon is single-turn-per-tick, so the only honest enforcement is relabelling the outgoing push rather than bouncing a next turn. Human-tier: a self-honesty check on the agent's own completion reporting — the agent must not be able to disable it on its own config, same rationale as telegram.verifyDone.
disabledPluginHooksobjecthumanPer-plugin hook disable list: maps plugin name (from plugin.json) → array of "<Event>" or "<Event>:<matcher>" specifiers to suppress. Human-tier: disabling a hook is an operator decision the agent must not reverse.
enablePluginHooksbooleanhumanEnable Claude Code plugin-contributed hooks (trust gate for third-party plugin hooks.json; independent of enableShellHooks).
enableShellHooksbooleanhumanEnable shell hooks (trust gate).
enforceDoneEvidencebooleanhumanOpt-in AFK terminal-state enforcement gate: in autonomous mode a turn that self-certifies "Done" with no corroborating evidence (a successful file write/edit or executed command) gets a framework correction injected into the next turn, which must substantiate or downgrade the claim (issue #237). Human-tier: a self-honesty check the agent must not be able to disable on its own config, same rationale as telegram.verifyDone. Sibling of telegram.verifyDone (which only relabels the Telegram push; this one bounces the turn).
interactive.suggestGhostbooleanagentGhost-text suggestions in the REPL.
interactive.thinkingUienumsummary, live, digest, offagentDefault REPL thinking-display mode.
interactive.worktreeAutonamebooleanagentAuto-name worktrees.
interactive.worktreeBasestringhumanWorktree base ref (git-flag sensitive).
interactive.worktreeBranchPrefixstringhumanWorktree branch prefix (git-flag sensitive).
interactive.worktreeOnExitenumask, keep, removehumanClean-worktree quit policy (ask | keep | remove).
maxSummaryCallsPerSessionnumber1 to 500; integeragentCap on summary calls per session.
maxTokensnumber1 to 1000000; integeragentDeprecated and inert: not read by the generation path. Use AFK_MAX_OUTPUT_TOKENS or --max-output-tokens to cap per-response output.
modelstringagentDefault model id / alias.
models.largemodel-slotagentLarge-tier model id. Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth — chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here).
models.localmodel-slotagentLocal-tier model id (OpenAI-compatible shim: Ollama, LM Studio, vLLM, MLX). Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth — chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here).
models.mediummodel-slotagentMedium-tier model id. Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth — chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here).
models.smallmodel-slotagentSmall-tier model id. Accepts a bare id string or a { id, provider, name } object (provider: anthropic | openai | chatgpt-oauth | xai | xai-oauth — chatgpt is accepted shorthand; baseUrl/apiKey are human-gated: set them via the AFK_MODEL_<TIER>_BASE_URL / _API_KEY env vars, not here).
permissionModeenumdefault, plan, autonomous, bypassPermissionshumanSession permission mode for afk chat/interactive (human-tier: privilege-escalation vector). Unset → bypassPermissions (new-install default); set default to re-enable path containment + the approval prompt.
pluginHookEnvobjecthumanPer-plugin hook env allowlist: maps plugin name → array of env-var names forwarded to that plugin's hook subprocesses. Human-tier: only the user controls which secrets reach plugin hooks.
skills.hiddenstring-arrayhumanSkill names to hide from the model-facing manifest while keeping them slash-invocable (human-tier: an operator configuration the agent must not reverse). Accepts bare names (e.g. "forge") and plugin-qualified names (e.g. "awa-dev:qualify"). Matches both exact name and any "<plugin>:<name>" suffix.
systemPromptstringhumanOperator system-prompt overlay.
telegram.notify.modeenumprimary, broadcast, customhumanTelegram notify routing mode (human-tier: notification-redirect vector).
telegram.notify.primaryChatIdnumber-1000000000000000 to 1000000000000000; integerhumanPrimary Telegram chat id (human-tier: notification-redirect vector).
telegram.notify.targetsnumber-arrayhumanCustom Telegram target chat ids (human-tier: notification-redirect vector).
telegram.tagOnlyChatsnumber-arrayhumanChat ids where the bot answers only when addressed (reply to the bot, @mention, or text_mention resolving to the bot). Human-tier: it governs which chats the bot will respond in — a message-routing / who-can-drive-the-bot control, same class as the allowlist and telegram.notify.*. Requires Telegram privacy mode OFF for the bot to matter in groups.
telegram.verifyDonebooleanhumanOpt-in AFK "Done" verification gate (human-tier: a self-honesty check on the agent's own completion reporting — the agent must not be able to disable it on its own config, same rationale as enableShellHooks/permissionMode).
temperaturenumber0 to 2agentSampling temperature.
themeenumdark, light, umber, autoagentTUI color palette (dark | light | umber | auto). Display-only; auto detects a light/dark background from the terminal and falls back to dark. umber matches the Umber terminal and is dark-only, so auto never selects it.
updatePolicyenumnotify, auto, offhumanSelf-update policy (human-tier: auto self-update is scope-widening).