Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Settings reference

Every setting the schema declares: the ones /settings shows, grouped as that screen groups them, then the ones that exist only in a configuration file.

Generated by scripts/gen-settings-reference.ts. Edit the ui block on the setting in packages/coding-agent/src/config/settings-domains/, then run bun scripts/gen-settings-reference.ts --write. Never edit this file by hand: a test compares it against the generator and fails when the two disagree.

Read Settings first for where settings live, how precedence and merging work, and how to read and write them. The tables below are grouped as the /settings tabs are.

Set any of these keys in config.yml with the dotted path shown in the first column, or from the command line:

veyyon config set tui.tight true
veyyon config get compaction.threshold

Appearance

Theme

KeySettingTypeDefaultWhat it does
theme.darkDark ThemestringtitaniumTheme used when the terminal has a dark background.
theme.lightLight ThemestringlightTheme used when the terminal has a light background.
symbolPresetSymbol PresetenumunicodeGlyph set for icons and symbols (Unicode, Nerd Font, or ASCII). Values: unicode, nerd, ascii.
colorBlindModeColor-Blind ModebooleanfalseUse blue instead of green for diff additions.

Status Line

KeySettingTypeDefaultWhat it does
statusLine.enabledComposer FootlinebooleantrueShow the quiet metadata line under the composer (model, mode, path, git, context). Off leaves the composer carrying nothing; the agent-focus exit hint still shows while a view is proxied.
statusLine.presetStatus Line PresetenumdefaultPre-built status line configurations. Values: default, minimal, compact, full, nerd, ascii, custom.
statusLine.sessionAccentSession AccentbooleantrueUse the session name color for the editor border. Shown under the tab’s Advanced fold.
statusLine.compactThinkingLevelCompact Thinking LevelbooleanfalseShow the thinking level as a single icon on the model name instead of a separate · \<level> suffix. Shown under the tab’s Advanced fold.
statusLine.showHookStatusShow Hook StatusbooleantrueDisplay hook status messages below the status line. Shown under the tab’s Advanced fold.
statusLine.showAccountShow Serving AccountbooleanfalseName the account serving the next request on the composer footline, when the active provider stores more than one. Off: /account answers it on demand. Shown under the tab’s Advanced fold.

Display

KeySettingTypeDefaultWhat it does
terminal.showImagesShow Inline ImagesbooleantrueRender images inline in the terminal.
images.autoResizeAuto-Resize ImagesbooleantrueResize large images to 2000x2000 max for better model compatibility. Shown under the tab’s Advanced fold.
terminal.showProgressNative Terminal ProgressbooleanfalseEmit OSC 9;4 indeterminate progress while the agent or context maintenance is running. Shown under the tab’s Advanced fold.
tui.textSizingLarge Headings (Kitty)booleanfalseRender Markdown H1 headings at 2x scale using Kitty’s OSC 66 text-sizing protocol. Only takes effect on Kitty terminals; ignored everywhere else. Off by default. Shown under the tab’s Advanced fold.
tui.renderMermaidRender Mermaid DiagramsbooleantrueRender Mermaid fenced code blocks as ASCII diagrams. Shown under the tab’s Advanced fold.
tui.hyperlinksTerminal HyperlinksenumautoWrap paths and URLs in OSC 8 hyperlinks for terminal-native click-to-open (auto: detect support; off: never; always: unconditional). Values: off, auto, always.
tui.paintGroundPaint Theme GroundenumautoSet the terminal background (OSC 11) to the theme’s ground color while Veyyon runs, restoring it on exit (auto: only when the terminal background already matches the theme so no seam appears; always: unconditional; never: inherit the terminal background). Values: auto, always, never.
tui.tightTight LayoutbooleanfalseRemove the 1-character horizontal padding from the left and right of the terminal output. Shown under the tab’s Advanced fold.
tui.scrollbackRebuildRewrite ScrollbackbooleantrueErase and replay terminal scrollback when a block’s final form replaces its live preview. On by default: with it off, the stale preview stays in history and the final content is appended underneath, so the same paragraph appears twice. Terminal multiplexers keep the append-below behaviour either way, because erasing there would take the pane’s own history with it. Shown under the tab’s Advanced fold.
tui.scrollIsolationScroll IsolationbooleanfalseRead the mouse wheel so the transcript scrolls with the prompt pinned at the bottom, showing the position on the right edge. This costs you drag-select: while it is on, veyyon holds the mouse, so plain dragging selects nothing and you need shift+drag, or /copy to pick text and code out of the conversation without the mouse. When off (default), the terminal keeps the wheel and the mouse, so native scrollback, drag-select and copy all behave exactly as they do in any other program, and the prompt still sits at the bottom of the live view. Shown under the tab’s Advanced fold.
display.transitionsTransitionsenumonStructural motion: overlay open transitions and the moving rail beside a running tool. Values: on, off.
display.shimmerShimmerenumdisabledAnimation style for working/loading messages. Values: classic, kitt, living, disabled.
display.smoothStreamingSmooth StreamingbooleantrueReveal assistant text and streamed tool input smoothly while chunks arrive.
display.showTokenUsageShow Token UsagebooleanfalseShow what each turn spent under the assistant message: tokens, how long it took, and its rate.
display.cacheMissMarkerCache Miss MarkerbooleanfalseShow a divider above an assistant turn whose request lost (missed) the prompt cache. Shown under the tab’s Advanced fold.
display.toolOutputExpandedExpand Tool OutputbooleanfalseStart tool calls expanded, showing full input and output instead of a preview; the in-session toggle updates this. Shown under the tab’s Advanced fold.
showHardwareCursorShow Hardware CursorbooleantrueShow terminal cursor for IME support. Shown under the tab’s Advanced fold.

Model

Compaction

KeySettingTypeDefaultWhat it does
display.collapseCompactedCollapse Compacted HistorybooleantrueCollapse pre-compaction history behind the summary divider on the live transcript; disable to keep the full transcript inline with dividers at each compaction point.
compaction.remoteRemote CompactionbooleantrueApplies only when the session model is a supported OpenAI Responses model, which includes Azure OpenAI Responses deployments and ChatGPT Codex sessions; every other model ignores this setting and compacts locally. On, veyyon has the provider compact the span and keeps the window it returns, which preserves reasoning state across the cut. That window is the whole compacted context, so the entry stores no summary text and the compaction model chain does not apply. There is no second local summary on purpose: it would pay a model to re-summarize a span the provider already compacted and leave two versions of one range that can disagree. Off, compaction runs locally on the usual summary path and stores readable summary text.
compaction.strategyCompaction TypeenumsummarySummary condenses history in place and continues the same session. Values: summary.
compaction.thresholdAuto-Compaction ThresholdstringautoWhen auto-compaction triggers. Auto uses the model’s window minus the reserve; a percent scales with each model’s window; a token amount is the same trigger on every model that can reach it, and a smaller model compacts at its own maximum.
compaction.modelCompaction ModelmodelChain(unset)Models used for in-place summary compaction, tried in order. Default: inherit — follows the main model live. Add fallbacks for when the first is unauthenticated or its window is too small.
compaction.modelFallbackStrategyCompaction FallbackenumautoWhat to try after the compaction models you configured. Auto stays on models you named: the main model, its same-provider compaction sibling, and your model roles. Any authenticated model also reaches the largest window available, on any provider you have credentials for. Configured only stops at the chain and fails loudly. Values: auto, any-model, configured-only.
compaction.modelContextWindowCompaction Model Contextnumber(unset)Context window in tokens to assume for the compaction model. Unset uses the compaction model’s own reported window. Candidates whose window cannot fit the summarization payload are skipped loudly.

Roles

KeySettingTypeDefaultWhat it does
modelRolesRole Modelsrecord{}Assign a model to each role (Fast, Thinking, Vision, Architect, Designer, Commit, Tiny). Opens a searchable picker with auth status. The advisor’s model is asked for in the Advisor group, and a subagent’s in Subagents → Roster, so neither appears here. Scoped to the active profile — never edit config by hand.

Thinking

KeySettingTypeDefaultWhat it does
defaultEffortDefault Effortrecord{}Effort per model, applied when a run does not ask for one. Add a model and pick its effort; the “any model” row covers every model without its own. Per profile.
hideThinkingBlockHide Thinking BlocksbooleanfalseHide thinking blocks in assistant responses.
proseOnlyThinkingProse Only ThinkingbooleantrueOmit code blocks from thinking summaries and replace them with an ellipsis.
omitThinkingOmit Thinking summariesbooleanfalseInstruct upstream providers to completely omit thinking summaries from responses (where supported).
model.loopGuard.enabledLoop GuardbooleantrueEnable automatic stream loop detection for model reasoning and prose.
model.loopGuard.checkAssistantContentLoop Guard Scan ProsebooleantrueApply loop guard to assistant prose messages in addition to thinking logs.
model.loopGuard.toolCallReminderLoop Guard Tool-Call ReminderbooleantrueWhen a Gemini reasoning stream emits many consecutive planning headers without calling a tool, interrupt it and inject a reminder to issue a tool call (requires Loop Guard).
model.toolCallLoopGuard.enabledTool-Call Loop GuardbooleantrueDetect consecutive identical tool calls across turns and inject a corrective steer.
model.toolCallLoopGuard.thresholdTool-Call Loop Thresholdnumber5Consecutive identical tool calls required before the corrective steer is injected.
model.toolCallLoopGuard.readSubsumptionThresholdRead Subsumption Loop Thresholdnumber3Consecutive fully-subsumed or redundant read calls on unchanged files before the corrective steer is injected.
model.toolCallLoopGuard.exemptToolsTool-Call Loop Exempt Toolsarray["job","irc"]Tool names that may repeat consecutively without triggering the cross-turn loop guard.
providers.autoThinkingModelAuto Thinking ModelenumonlineDifficulty classifier for the auto thinking level: online (the TINY role from /models, else smol) by default, or a local on-device model. Values: online, qwen3-1.7b, llama3.2:3b, gemma-3-1b, qwen2.5-1.5b, lfm2-1.2b.

Sampling

KeySettingTypeDefaultWhat it does
temperatureTemperaturenumber(unset)Sampling temperature. 0 is deterministic, 1 is creative. Unset lets the provider choose.
topPTop Pnumber(unset)Nucleus sampling cutoff, 0 to 1. Unset lets the provider choose.
topKTop Knumber(unset)Sample from the top K tokens. Unset lets the provider choose.
minPMin Pnumber(unset)Minimum probability threshold, 0 to 1. Unset lets the provider choose.
presencePenaltyPresence Penaltynumber(unset)Penalty for introducing tokens already present. Negative values encourage repetition; unset lets the provider choose.
repetitionPenaltyRepetition Penaltynumber(unset)Penalty for repeated tokens. Values below 1 encourage repetition; unset lets the provider choose.
textVerbosityText VerbosityenummediumOpenAI Responses and Codex response verbosity (low, medium, or high). Values: low, medium, high.
tier.openaiService Tier — OpenAIenumnoneHow your OpenAI / OpenAI-Codex requests are queued and served, including OpenAI-family models routed via OpenRouter (none = omit the field). Sent as service_tier. This is serving speed and cost, not reasoning depth; depth is Default Effort. Values: none, auto, default, flex, scale, priority.
tier.anthropicService Tier — AnthropicenumnoneHow your Claude requests are queued and served. priority realizes fast mode (speed: "fast") on supported direct Anthropic models, and is ignored on Bedrock/Vertex Claude and via OpenRouter. This is serving speed and cost, not reasoning depth; depth is Default Effort. Values: none, priority.
tier.googleService Tier — GoogleenumnoneHow your Gemini (Google AI Studio + Vertex) requests are queued and served, including Google-family models routed via OpenRouter (none = omit the field). Sent as the top-level serviceTier field. This is serving speed and cost, not reasoning depth; depth is Default Effort. Values: none, flex, priority.
tier.subagentService Tier — SubagentenuminheritHow spawned task/eval subagent requests are queued and served. Inherit matches the main agent’s live per-family tiers (tracks /fast); pick a value to apply it to whichever family the subagent’s model belongs to. Values: inherit, none, auto, default, flex, scale, priority.
tier.advisorService Tier — AdvisorenumnoneHow advisor-model requests are queued and served. None is standard processing, Inherit matches the main agent’s live per-family tiers, and picking a value applies it to the advisor model’s family. Values: inherit, none, auto, default, flex, scale, priority.

Prompt

KeySettingTypeDefaultWhat it does
inlineToolDescriptorsInline Tool DescriptorsenumautoRender full tool descriptors in the system prompt and strip top-level/nested descriptions from provider tool schemas so descriptor text is sent once. Auto follows the active model, enabling this for Gemini and disabling it otherwise. Values: auto, on, off.
includeModelInPromptInclude Model in PromptbooleanfalseSurface the active model identifier in the system prompt so the agent knows which model it is. Costs a full prompt-cache invalidation on every model switch.
includeWorkspaceTreeInclude Workspace TreebooleanfalseRender the workspace directory tree in the system prompt. WARNING: This can bust prompt caching across sessions when files are modified.
personalityPersonalitystringdefaultCommunication style rendered into the system prompt’s personality block. Extend via ~/.veyyon/personalities/<name>.md or project .veyyon/personalities/<name>.md.

Retry & Fallback

KeySettingTypeDefaultWhat it does
retry.maxRetriesRetry Attemptsnumber10Maximum retry attempts on API errors.
retry.maxDelayMsMax Retry Delaynumber300000Maximum wait between retries, in ms. When the provider asks us to wait longer than this and no credential or model fallback succeeds, the request fails fast instead of sleeping (e.g. 3-hour Anthropic rate-limit windows).
retry.modelFallbackRetry Model FallbackbooleantrueAllow retry recovery to switch to configured fallback models.
retry.fallbackChainsRetry Fallback Chainsrecord{}JSON object mapping model roles, model selectors (“provider/model-id”), or provider wildcards (“provider/”) to ordered fallback selectors, e.g. {“default”:[“openai/gpt-4o-mini”],“google-antigravity/”:[“google/”,“google-vertex/”]}. Model-oriented keys apply whenever that model/provider is active, regardless of role; a “provider/*” entry keeps the failing model’s id and swaps the provider.
retry.perProviderPer-Provider Retryrecord{}JSON object overriding retry limits for specific backends, keyed like Retry Fallback Chains: a model selector (“provider/model-id”), a provider wildcard (“provider/*”), or a bare provider name. Each value may set maxRetries, baseDelayMs, and maxDelayMs; anything omitted falls back to the global retry settings. Example: {“cursor”:{“maxRetries”:3,“baseDelayMs”:2000}}. Backends whose retries are intrinsically expensive (cursor, devin) already ship with sensible limits; an entry here overrides those.
retry.fallbackRevertPolicyFallback Revert Policyenumcooldown-expiryWhen to return to the primary model after a fallback. Values: cooldown-expiry, never.
providers.anthropic.serverSideFallbackAnthropic Server-Side Fallback (Fable 5)booleanfalseWhen a Claude Fable 5 / Mythos 5 request is blocked by Anthropic’s safety classifier, retry it on Claude Opus 4.8 server-side (Anthropic server-side-fallback-2026-06-01 beta). Opt-in — leaving this off preserves the pre-fallback behavior for every request.

Advisor

KeySettingTypeDefaultWhat it does
advisor.enabledEnable AdvisorbooleanfalsePair a second model that passively reviews each turn and injects notes. Which model it runs is Advisor Model, directly below.
advisor.subagentsAdvisor for SubagentsbooleanfalseAlso enable the advisor on spawned task/eval subagents.
advisor.syncBacklogAdvisor Sync BacklogenumoffPause the main agent for up to 30 seconds if the advisor falls behind by this many turns. Off disables catch-up delays. Values: off, 1, 3, 5.
advisor.immuneTurnsAdvisor Immune Turnsnumber3After an advisor concern or blocker interrupts, route further concerns/blockers non-interruptingly for this many primary turns.

Prewalk

KeySettingTypeDefaultWhat it does
prewalk.enabledEnable PrewalkbooleanfalsePlan on the strong model, then switch to the cheap model at the first edit/write after the plan nudge’s todo list exists — the strong model commits the todos and starts the implementation before handing off. The cheap model comes from Prewalk Cheap Model; Prewalk Strong Model overrides the start model. Overridable per session with –prewalk / –no-prewalk.
prewalk.cheapModelPrewalk Cheap ModelmodelChain(unset)Model prewalk hands off to at the first edit/write. Required once prewalk is on: /prewalk and –prewalk fail with a message naming this setting when it is unset. –prewalk-into overrides it per session; only the first entry is used.
prewalk.strongModelPrewalk Strong ModelmodelChain(unset)Model a prewalk session starts on — the strong model that plans before the handoff. Unset: inherit the normal start model (–model or the remembered default). Only the first entry is used.

Vision

KeySettingTypeDefaultWhat it does
images.describeForTextModelsDescribe Images for Text ModelsbooleantrueWhen an image is attached to a model without vision support, save it under local:// and inject a description from a vision-capable model instead of dropping it.

Interaction

Input

KeySettingTypeDefaultWhat it does
steeringModeSteering Modeenumone-at-a-timeHow to process queued messages while agent is working. Values: all, one-at-a-time.
followUpModeFollow-Up Modeenumone-at-a-timeHow to drain follow-up messages after a turn completes. Values: all, one-at-a-time.
interruptModeInterrupt ModeenumimmediateWhen steering messages interrupt tool execution. Values: immediate, wait.
loop.modeLoop ModeenumpromptWhat happens between /loop iterations before re-submitting the prompt. Values: prompt, compact, reset.
doubleEscapeActionDouble-Escape ActionenumtreeAction when pressing Escape twice with empty editor. Values: branch, tree, none.
treeFilterModeSession Tree FilterenumdefaultDefault filter mode when opening the session tree. Values: default, no-tools, user-only, labeled-only, all.
autocompleteMaxVisibleAutocomplete Itemsnumber5Max visible items in autocomplete dropdown (3-20).
emojiAutocompleteEmoji AutocompletebooleantrueSuggest emojis from :name: shortcodes and expand text emoticons like :D or :-).
paste.largeMenuThresholdLarge Paste Menunumber100When a paste reaches this many lines, offer a menu to wrap it in a code block, wrap it in XML tags, or save it to a file. 0 disables the menu (large pastes still collapse to a [Paste] marker).

Session

KeySettingTypeDefaultWhat it does
session.newKeepsBackground/new Keeps The Old SessionbooleanfalseRequires a restart: switching this on or off changes nothing in the running session. On /new while a response is still streaming, keep the old conversation running in the background and attach the screen to a fresh one. The status line counts running background conversations. Off stops the old turn and closes its provider stream before the new session starts, so nothing keeps billing once it leaves the screen.

Approvals

KeySettingTypeDefaultWhat it does
tools.approvalTool Approval Policiesrecord{}Per-tool approval policies. Set to ‘allow’ to auto-approve, ‘prompt’ to require confirmation, or ‘deny’ to block. Overrides are honored in every approval mode. Any other value denies that tool and is reported at startup.
tools.protectedPathsExtra Protected Pathsarray[]Additional absolute paths (a leading ~ is expanded) that a recursive delete must never target without approval. Adds to the built-in set; it cannot remove from it.
tools.approvalModeTool ApprovalenumautoHow much the agent may do without asking. Defaults to Auto: every tier runs, with the per-tool policies, working-directory boundary, credential and critical-call guards still asking. This is the persisted default; override it for one session with /permissions. Values: plan, ask, ask-command, auto, yolo, always-ask, write, auto-edit.

Notifications

KeySettingTypeDefaultWhat it does
completion.notifyCompletion NotificationenumoffNotify when the agent finishes a turn (off by default: the turn is on your screen). Values: on, off.
ask.timeoutAsk Timeoutnumber0Auto-select the recommended ask option after this many seconds (0 disables).
ask.notifyAsk NotificationenumonNotify when the agent is blocked on a question you have not answered. Values: on, off.
recap.enabledIdle RecapbooleantrueGenerate a brief LLM recap of where things stand after the terminal has been idle.
recap.idleSecondsIdle Recap Delaynumber240Seconds to wait while idle before showing the recap.

Speech

KeySettingTypeDefaultWhat it does
stt.enabledSpeech-to-TextbooleanfalseEnable speech-to-text input via microphone.
stt.modelNameSpeech ModelenumparakeetLocal on-device speech model. Parakeet TDT v3 (sherpa-onnx) is the SoTA default; Whisper base/small/large-v3-turbo tiers (transformers.js) trade size for multilingual coverage. Downloaded on first use. Values: fast, balanced, turbo, parakeet.
stt.submitTriggerSpeech-to-Text Submit TriggerenumneverChoose when speech dictation automatically submits: Never, Release (2+ words), Release with complete sentence, or When I Say Submit. Values: never, release, release-complete, say-submit.

Collab

KeySettingTypeDefaultWhat it does
collab.relayUrlRelay URLstringwss://share.veyyon.devRelay used by /collab (wss://host[:port]).
collab.webUrlWeb UI URLstring(empty)Browser UI used by /collab links; empty derives from collab.relayUrl; explicit http:// is localhost-only.
collab.displayNameDisplay Namestring(empty)Name shown to other collab participants (default: OS username).
share.serverUrlShare Serverstringhttps://share.veyyon.dev/sShare viewer/upload base used by /share (encrypted blob upload + viewer; links are <base>/<id>#<key>).
share.storeShare StoreenumblobWhere /share uploads the encrypted session blob. Values: blob, gist.
share.redactSecretsShare Secret RedactionbooleantrueRun the secret obfuscator over /share snapshots before upload (uses the secrets.* config).

Magic Keywords

KeySettingTypeDefaultWhat it does
magicKeywords.enabledEnable Magic KeywordsbooleantrueEnable hidden notices for standalone ultrathink, orchestratez, and workflowz keywords.
magicKeywords.ultrathinkUltrathink KeywordbooleantrueLet standalone ultrathink request maximum automatic thinking and append its hidden notice.
magicKeywords.orchestrateOrchestrate KeywordbooleantrueLet standalone orchestratez append its hidden multi-agent orchestration notice.
magicKeywords.workflowWorkflow KeywordbooleantrueLet standalone workflowz append its hidden eval workflow notice.
magicKeywords.turnBudgetTurn Budget DirectivebooleanfalseLet a standalone +500k or +2m set this turn’s output-token budget; when off, +Nk in a message is treated as ordinary text.

Startup & Updates

KeySettingTypeDefaultWhat it does
autoResumeAuto ResumebooleanfalseAutomatically resume the most recent session in the current directory.
startup.quietQuiet StartupbooleanfalseSkip welcome screen and startup status messages.
startup.showSplashShow Startup SplashbooleanfalseShow the full animated setup splash on normal interactive startup without rerunning setup. Quiet Startup still suppresses it.
startup.clearScrollbackClear Scrollback on StartupbooleanfalseErase the terminal’s saved scrollback when veyyon starts, so the session begins on an empty terminal. This also erases what was on screen before you launched, such as your shell history and any command output, and it cannot be undone. Off still starts you on a clear screen; it just leaves your history reachable by scrolling up.
startup.setupWizardSetup WizardbooleantrueRun onboarding on first install only (updates never re-run it).
startup.checkUpdateCheck for UpdatesbooleantrueCheck for Veyyon updates on startup.
marketplace.autoUpdateMarketplace Auto-UpdateenumnotifyCheck for plugin updates on startup. Values: off, notify, auto.
startup.autoUpdateAutomatic UpdatesbooleantrueInstall a newer version in the background; off means updates only when you run veyyon update.
startup.updateNoticeUpdate NoticebooleantrueShow a one-line notice on the first launch after an update.

Profile

KeySettingTypeDefaultWhat it does
profile.displayNameProfile Namestring(empty)Display name for the active profile, shown in /profile list and resolvable by /profile <name>. Stored per profile; empty falls back to the profile’s directory name (“default” for the base profile).
session.workdirDefault Working Directorystring(unset)Per-profile default session working directory used when launching without an explicit –cwd. Precedence: an explicit –cwd wins, then this setting, then the directory you launched from. Use an absolute or ~-relative path; a relative path or a missing directory makes launch fail loudly. The agent can override the live session cwd for that session only via set_cwd / /cwd without writing this setting.

Power (macOS)

KeySettingTypeDefaultWhat it does
power.sleepPreventionSleep PreventionenumidlePrevent macOS sleep during active sessions. Each level is cumulative — it adds the flags of all lower levels. Values: off, idle, display, system.

Agent

KeySettingTypeDefaultWhat it does
features.unexpectedStopDetectionDetect unexpected stopsbooleanfalseUse a small model to detect when the assistant says it will continue but stops without tool calls; automatically prompt it to continue.

Git

KeySettingTypeDefaultWhat it does
git.enabledEnable Git IntegrationbooleantrueShow git branch, status, and PR information in the TUI and watch repository metadata.

Resources

CPU

KeySettingTypeDefaultWhat it does
session.cpuLimitCoresSession CPU Limitnumber0Maximum CPU a session’s spawned processes may use, in cores (0 = off). This is the per-profile default: every session that profile starts inherits it, and one session can depart from it with /cpu-limit <cores> or lift it entirely with /cpu-limit remove, neither of which writes this setting. Every process the session starts (bash commands, MCP servers, custom tools, launch tasks, workers) joins a per-session budget group: a cgroup v2 quota on Linux, a Job Object hard cap on Windows, both kernel-enforced, so the group throttles as a whole. While the group runs saturated, new commands are refused with an error naming the budget. On macOS there is no kernel quota, so enforcement is policy-only (refuse new commands, renice, optional kill) and a startup warning says so. The harness’s own compute (agent turns, in-process workers) is never capped.
session.cpuLimitKillKill Over-Budget CommandsbooleanfalseWhat happens when spawned commands stay at the CPU limit for seconds at a time. Off (default): new commands are refused until usage drops, running ones keep running (throttled where the OS offers a quota, reniced on macOS). On: the over-budget group is also sent SIGTERM, and the kill is reported as a budget action, not a crash. /cpu-limit kill on|off changes it for one session without writing this setting.

Memory

KeySettingTypeDefaultWhat it does
session.memoryLimitGbSession Memory Limitnumber0Maximum resident memory the session tree may hold at once, in gigabytes (0 = off). The session tree is this session, every subagent under it at any depth, and every process any of them spawned: they share one budget group, so delegating work cannot multiply the allowance. This is a kernel cap, not a polite refusal: on Linux it is cgroup v2 memory.max on the session budget group, so a group at the limit is reclaimed first and then a process INSIDE it is OOM-killed by the kernel, whichever process the kernel picks, with no warning and no chance to finish. Set it where an OOM kill is preferable to the machine swapping, and leave it off if a killed command would cost more than the memory does. A host without a memory controller reports the limit as unenforceable once at startup rather than pretending to hold it.

Disk

KeySettingTypeDefaultWhat it does
session.writeBudgetGbSession Write Budgetnumber0Cumulative gigabytes the session tree may WRITE to disk before further writes are refused (0 = off). The session tree is this session, every subagent under it at any depth, and every process any of them spawned: they share one budget group, so delegating work cannot multiply the allowance. Writes are metered by the same group that meters CPU (cgroup v2 io accounting on Linux, Job Object I/O accounting on Windows). Once the total is reached, a new command is refused with an error naming the budget and how much it has written; already running commands keep running unless Kill Over-Budget Writers is on. A host where write accounting cannot be read reports the limit as unenforceable once at startup rather than pretending to hold it.
session.writeBudgetKillKill Over-Budget WritersbooleanfalseWhat happens when the session tree passes its write budget. Off (default): new commands are refused, and whatever is already writing runs to completion. On: the over-budget group is also sent SIGTERM, and the kill is reported as a budget action rather than a crash, so a command that vanished mid-write is explained instead of looking like a failure. Hidden while the write budget is 0, because a kill policy for a budget that does not exist is a knob with nothing behind it.

Processes

KeySettingTypeDefaultWhat it does
session.maxProcessesSession Max Processesnumber0Hard cap on how many processes may be alive at once across the session tree (0 = off). The session tree is this session, every subagent under it at any depth, and every process any of them spawned, all in one budget group, so the cap is not multiplied by delegating. Enforced by the kernel where it can be: cgroup v2 pids.max on Linux and a Job Object process limit on Windows both refuse the fork itself, so a runaway loop stops instead of filling the process table. Elsewhere the cap is policy-only, refusing a new spawn with an error naming the limit and the current count, and a startup notice says the kernel is not holding it.

Context

General

KeySettingTypeDefaultWhat it does
contextPromotion.enabledAuto-Promote ContextbooleanfalsePromote to a larger-context model on context overflow instead of compacting.
branchSummary.enabledBranch SummariesbooleanfalsePrompt to summarize when leaving a branch.
context.thinkingRetentionThinking Retentionnumber-1How many of the most recent assistant turns keep their unsigned thinking when the conversation is sent back. Gemini summarises its reasoning for you to read but replays the real reasoning from the signature on the tool call, so an old summary is transcript text the model re-reads and the provider ignores. Keep All resends every summary ever produced. Thinking that does carry a signature is always kept. Other providers ignore this. Shown under the tab’s Advanced fold.
context.thoughtSignatureRetentionThought Signature Retentionnumber-1How many of the most recent assistant turns keep their Gemini thought signature when the conversation is sent back. Signatures let the model replay its own reasoning, and they are large, so the recent ones are the ones worth paying to resend. Keep All resends every signature ever produced, which on a long session is the single biggest thing in the context. Other providers ignore this. Shown under the tab’s Advanced fold.
context.thoughtSignatureMaxLengthThought Signature Size Limitnumber-1Longest Gemini thought signature still worth resending, in characters. Anything longer sends the skip sentinel instead, however recent it is. Signature sizes are lopsided: the largest tenth of them carry roughly two thirds of all signature bytes, so a limit sheds most of the weight while keeping the great majority of the reasoning chain. Use this instead of Thought Signature Retention when you want a gentler trade, or alongside it, in which case a signature is resent only if it is both recent enough and small enough. Other providers ignore this. Shown under the tab’s Advanced fold.

Prompt Cache

KeySettingTypeDefaultWhat it does
cache.reportRejectionReport Cache RejectionsbooleantrueWarn when a turn asked the provider to cache a prefix and the provider cached nothing. Anthropic only; other providers do not report cache rejection.
cache.blockOnRejectionBlock On Cache RejectionbooleanfalseAnthropic only. Fail the next request after a rejected cache instead of continuing to pay full input rate. Off by default: the verdict is proven against provider usage reporting, so a provider that changes what it reports would stop the session rather than cost money.

Session Instrumentation

KeySettingTypeDefaultWhat it does
session.instrumentationInstrumentation LevelenumoffRecord structured, redacted study data in the session file. Higher levels add lifecycle, task-state, tool, model-turn, context, and agent-communication detail for veyyon session stats. Off still stores the normal resumable conversation and tool history, but adds no study fields. Values: off, basic, rich, ultra.

Rules

Rules

KeySettingTypeDefaultWhat it does
ttsr.builtinRulesBuilt-in RulesbooleantrueLoad the default rules shipped with the agent. Turn individual rules off under All Rules.
ttsr.disabledRulesAll Rulesarray[]Every rule this project loads, each on or off. Stores only the ones you turn off, so a rule added in a later release arrives on.

Stream Interrupts (TTSR)

KeySettingTypeDefaultWhat it does
ttsr.enabledTTSRbooleantrueInterrupt the agent mid-stream when output matches rule patterns (Time-Traveling Stream Rules).
ttsr.contextModeContext ModeenumdiscardWhat to do with partial output when TTSR triggers. Values: discard, keep.
ttsr.interruptModeRule Interrupt ModeenumalwaysWhen to interrupt mid-stream vs inject warning after completion. Values: never, prose-only, tool-only, always.
ttsr.repeatModeRepeat ModeenumonceHow rules can repeat: once per session or after a message gap. A rule may override this in its frontmatter. Values: once, after-gap.
ttsr.repeatGapRepeat Gapnumber10Messages before a rule can trigger again. A rule may override this in its frontmatter.

Memory

General

KeySettingTypeDefaultWhat it does
memory.backendMemory BackendenumoffOff, local summary pipeline, Mnemopi SQLite, or Hindsight remote memory. Values: off, local, hindsight, mnemopi.
providers.memoryModelMemory ModelenumonlineMnemopi LLM for fact extraction + consolidation: online (the TINY role from /models, else smol/remote) by default, or a local on-device model. Values: online, qwen3-1.7b, llama3.2:3b, gemma-3-1b, qwen2.5-1.5b, lfm2-1.2b.

Mnemopi

KeySettingTypeDefaultWhat it does
mnemopi.dbPathMnemopi DB Pathstring(unset)Optional SQLite DB path. Defaults to the agent memories directory.
mnemopi.bankMnemopi Bankstring(unset)Optional shared bank base name. Per-project modes derive project-local banks from it.
mnemopi.scopingMnemopi Scopingenumper-projectglobal = one shared bank; per-project = isolated bank per cwd; per-project-tagged = project-local writes plus global recall visibility. Values: global, per-project, per-project-tagged.
mnemopi.embeddingVariantEmbedding variantenumenLocal embedding model family. en = stronger English model; multilingual = cross-language model. Changing this rebuilds existing memory embeddings on next start. Values: en, multilingual.
mnemopi.autoRecallMnemopi Auto RecallbooleantrueRecall local memories into the first turn of each session.
mnemopi.autoRetainMnemopi Auto RetainbooleantrueRetain completed conversation turns into local Mnemopi memory.
mnemopi.polyphonicRecallMnemopi Polyphonic RecallbooleanfalseEnable 4-voice recall (vector, graph, fact, temporal) fused with reciprocal rank fusion.
mnemopi.enhancedRecallMnemopi Enhanced RecallbooleanfalseEnable the tiered query result cache for repeated and similar recall queries.
mnemopi.proactiveLinkingMnemopi Proactive LinkingbooleanfalseIngest new memories into the episodic graph as they are stored, linking them to related entities and memories.
mnemopi.noEmbeddingsMnemopi Disable EmbeddingsbooleanfalseForce deterministic FTS-only recall instead of vector embeddings.
mnemopi.embeddingModelMnemopi Embedding Modelstring(unset)Advanced: explicit embedding model id that overrides the variant. Leave empty to use mnemopi.embeddingVariant.
mnemopi.embeddingApiUrlMnemopi Embedding API URLstring(unset)Optional OpenAI-compatible embedding endpoint passed to Mnemopi.
mnemopi.embeddingApiKeyMnemopi Embedding API Keystring(unset)Optional embedding API key passed to Mnemopi.
mnemopi.llmModeMnemopi LLM ModeenumsmolUse no LLM, the online tiny model (the TINY role from /models, else @smol), or a remote OpenAI-compatible endpoint. Values: none, smol, remote.
mnemopi.llmBaseUrlMnemopi LLM Base URLstring(unset)Optional OpenAI-compatible LLM endpoint for Mnemopi remote mode.
mnemopi.llmApiKeyMnemopi LLM API Keystring(unset)Optional LLM API key for Mnemopi remote mode.
mnemopi.llmModelMnemopi LLM Modelstring(unset)Optional LLM model name for Mnemopi remote mode.

Hindsight

KeySettingTypeDefaultWhat it does
hindsight.apiUrlHindsight API URLstringhttp://localhost:8888Hindsight server URL (Cloud or self-hosted).
hindsight.bankIdHindsight Bank IDstring(unset)Base memory bank name. Unset uses veyyon. Hindsight Bank Prefix is prepended when set, and Hindsight Scoping decides whether the project name is appended (per-project) or carried as a project: tag instead (per-project-tagged).
hindsight.scopingHindsight Scopingenumper-project-taggedglobal = one shared bank; per-project = isolated bank per cwd; per-project-tagged = shared bank with project tags so global + project memories merge on recall. Values: global, per-project, per-project-tagged.
hindsight.autoRecallHindsight Auto RecallbooleantrueRecall memories on the first turn of each session.
hindsight.autoRetainHindsight Auto RetainbooleantrueRetain transcript every N turns and at session boundaries.
hindsight.retainModeHindsight Retain Modeenumfull-sessionfull-session = upsert one document per session, last-turn = chunked. Values: full-session, last-turn.
hindsight.mentalModelsEnabledHindsight Mental ModelsbooleantrueRead curated reflect summaries (mental models) into developer instructions at boot. Loads existing models on the bank — does not write. Pair with hindsight.mentalModelAutoSeed to also auto-create the built-in seed set.
hindsight.mentalModelAutoSeedHindsight Mental Model Auto-SeedbooleantrueAt session start, create any built-in mental models (project-conventions, project-decisions, user-preferences) that do not yet exist on the bank.

Files

Editing

KeySettingTypeDefaultWhat it does
edit.modeEdit ModeenumhashlineSelect the edit tool variant (replace, patch, hashline, or apply_patch). Values: apply_patch, hashline, patch, replace.
edit.fuzzyMatchFuzzy MatchbooleantrueAccept high-confidence fuzzy matches for whitespace differences.
edit.fuzzyThresholdFuzzy Match Thresholdnumber0.95Similarity threshold (0-1) for accepting fuzzy matches.
edit.streamingAbortAbort on Failed PreviewbooleanfalseAbort streaming edit tool calls when patch preview fails.
edit.blockAutoGeneratedBlock Auto-Generated FilesbooleantruePrevent editing of files that appear to be auto-generated (protoc, sqlc, swagger, etc.).
edit.afterEditAfter an EditenumverifyWhat happens when a turn ends having changed files: verify runs one check when none followed the last edit, review reads back every file the turn changed and judges correctness, maintainability and cross-file contracts, off ends the turn where the model ends it. Values: verify, review, off.

Reading

KeySettingTypeDefaultWhat it does
readLineNumbersLine NumbersbooleanfalsePrepend line numbers to read tool output by default.
read.defaultLimitDefault Read Limitnumber300Line count returned when read is called without one. The window also stops at the tool output budget, so a file of long lines returns fewer lines than this.
read.toolResultPreviewInline Read PreviewsbooleanfalseRender read tool results inline in the transcript instead of summary rows.

Read Summaries

KeySettingTypeDefaultWhat it does
read.summarize.enabledEnable Read SummariesbooleantrueReturn structural code summaries when read is called without an explicit selector.
read.summarize.proseProse SummariesbooleanfalseReturn structural summaries for Markdown and plain text reads.
read.summarize.minBodyLinesRead Summary Body Linesnumber4Minimum multiline body or literal length before read summaries collapse it.
read.summarize.minCommentLinesRead Summary Comment Linesnumber6Minimum multiline block comment length before read summaries collapse it.
read.summarize.minTotalLinesRead Summary Minimum File Lengthnumber100Files with fewer total lines are read verbatim instead of structurally summarized.
read.summarize.unfoldUntilRead Summary Unfold Targetnumber50BFS-unfold elidable spans until the summary is at least this many visible lines. 0 keeps only the outermost elisions.
read.summarize.unfoldLimitRead Summary Unfold Ceilingnumber100Hard ceiling on summary size while BFS-unfolding. An unfold whose revealed lines would exceed this is skipped (that span stays folded) and unfolding continues with the remaining spans.

LSP

KeySettingTypeDefaultWhat it does
lsp.enabledLanguage ServersbooleanfalseStart language servers. Files → LSP is the row you enter; this switch and the others on that page (agent tool, diagnostics after write, diagnostics after edit, format after write) are independent once servers are running.
lsp.toolAgent ToolbooleantrueGive the agent the lsp tool (definitions, references, rename, query diagnostics). Off keeps servers for format and injected diagnostics only.
lsp.lazyLazy StartupbooleantrueStart language servers on first use (lsp tool or editing a matching file type) instead of at session startup.
lsp.formatOnWriteFormat after WritebooleanfalseFormat the file with the language server after the write tool saves it. Independent of the agent tool and of diagnostics.
lsp.diagnosticsOnWriteDiagnostics after WritebooleantrueAfter the write tool saves a file, inject language-server diagnostics into the session. Independent of the agent tool.
lsp.diagnosticsOnEditDiagnostics after EditbooleanfalseAfter the edit tool saves a file, inject language-server diagnostics into the session. Independent of the agent tool.
lsp.diagnosticsDeduplicateDeduplicate DiagnosticsbooleantrueSuppress post-edit LSP diagnostics already shown for a file; only surface new or changed ones.

Shell

Bash

KeySettingTypeDefaultWhat it does
bash.enabledEnable BashbooleantrueEnable the bash tool for shell command execution.
bash.stallDetection.enabledBash Stall DetectionbooleanfalseWatch for a bash command that stops producing output; background it and tell the model it may be stuck so it can cancel a truly hung command. Recommends, never force-kills.
bashInterceptor.enabledBash InterceptorbooleanfalseBlock shell commands that have dedicated tools.
shellMinimizer.enabledShell MinimizerbooleantrueCompress verbose shell output (git, npm, cargo, etc.) before returning it to the agent.
shellMinimizer.sourceOutlineLevelShell Minimizer Source OutlineenumdefaultSource outline mode for cat/read of source files: default or aggressive. Values: default, aggressive.
bash.autoBackground.enabledBash Auto-BackgroundbooleantrueMove a long-running bash command to a background job on its own and deliver the result when it lands, instead of holding the turn open. Off, a command holds the foreground until it finishes or times out. Either way you can background the running command yourself with the composer’s background key.
bash.autoBackground.thresholdMsAuto-Background Afternumber300000Max wall-clock time a bash call runs in the foreground before it is moved to a background job (result delivered later). Frees the model to keep working and protects the prompt cache, which a long foreground command would otherwise blow past. Fires on elapsed time even while output is streaming. 0 backgrounds immediately.
bash.stallDetection.stallMsStall Afternumber30000When stall detection is on, how long a bash call may produce no new output before it is treated as possibly stuck, backgrounded, and flagged so the model can cancel it if it is truly hung. Measures idle time (quiet output), not total run time.

Eval & Runtimes

KeySettingTypeDefaultWhat it does
eval.pyPython Eval BackendbooleantrueAllow the eval tool to dispatch Python cells to the IPython kernel.
eval.jsJavaScript Eval BackendbooleantrueAllow the eval tool to dispatch JavaScript cells to the in-process runtime.
eval.rbRuby Eval BackendbooleanfalseAllow the eval tool to dispatch Ruby cells to the persistent Ruby kernel.
eval.jlJulia Eval BackendbooleanfalseAllow the eval tool to dispatch Julia cells to the persistent Julia kernel.
ruby.kernelModeRuby Kernel ModeenumsessionKeep the Ruby kernel alive across eval calls or start fresh each time. Values: session, per-call.
julia.kernelModeJulia Kernel ModeenumsessionKeep the Julia kernel alive across eval calls or start fresh each time. Values: session, per-call.
python.kernelModePython Kernel ModeenumsessionKeep the IPython kernel alive across eval calls or start fresh each time. Values: session, per-call.
python.interpreterPython Interpreterstring(empty)Optional path to an exact Python executable. When set, automatic Python runtime discovery is skipped.
ruby.interpreterRuby Interpreterstring(empty)Optional path to an exact Ruby executable. When set, automatic Ruby runtime discovery is skipped.
julia.interpreterJulia Interpreterstring(empty)Optional path to an exact Julia executable. When set, automatic Julia runtime discovery is skipped.

Tools

Available Tools

KeySettingTypeDefaultWhat it does
todo.enabledTodosbooleantrueEnable the todo tool for task tracking.
astEdit.enabledAST EditbooleantrueEnable the ast_edit tool for structural AST rewrites.
debug.enabledDebugbooleantrueEnable the debug tool for DAP-based debugging. The tool loads only where a configured adapter command resolves.
launch.enabledLaunchbooleantrueEnable the launch tool for supervising shared long-running project processes.
speechgen.enabledSpeech GenerationbooleanfalseEnable the tts tool for on-device (Kokoro) or xAI Grok Voice speech-file synthesis.
generate_image.enabledGenerate ImagebooleanfalseEnable the generate_image tool for text-to-image generation and editing.
inspect_image.enabledInspect ImagebooleanfalseEnable the inspect_image tool, delegating image understanding to a vision-capable model.
checkpoint.enabledCheckpoint/RewindbooleanfalseEnable the checkpoint and rewind tools for context checkpointing.
fetch.enabledRead URLsbooleantrueAllow the read tool to fetch and process URLs.
vault.enabledObsidian VaultbooleanfalseEnable the vault:// internal URL for reading and editing Obsidian vault content via the Obsidian CLI. When disabled, vault:// resolution is refused and the vault:// entry is omitted from the system prompt.
github.enabledGitHub CLIbooleanfalseEnable the github tool (op-based dispatch for repository, issue, pull request, diff, search, checkout, push, and Actions watch workflows).
web_search.enabledWeb SearchbooleantrueEnable the web_search tool for live web results.
ask.enabledAskbooleantrueEnable the ask tool for interactive user questions.
browser.enabledBrowserbooleanfalseEnable the browser tool for scripted Chromium automation (puppeteer).

Todos

KeySettingTypeDefaultWhat it does
todo.remindersTodo RemindersbooleantruePrompt continued execution when unfinished todos remain.
todo.reminders.maxTodo Reminder Limitnumber3Maximum distinct todo-state reminders before reminders stay silent.
todo.eagerCreate Todos AutomaticallyenumdefaultHow strongly to push automatic todo-list creation after the first message. Values: default, preferred, always.
tasks.todoClearDelayTodo Auto-Clear Delaynumber-1Delay before completed or abandoned todos are removed from the todo widget.

Launch

KeySettingTypeDefaultWhat it does
launch.cleanupWaitMsLaunch Cleanup Waitnumber900000How long an exited process record is retained before being purged from memory and disk (0 = never clean up).

Search Context

KeySettingTypeDefaultWhat it does
search.contextBeforeText Context Beforenumber1Lines of context before each text search match.
search.contextAfterText Context Afternumber1Lines of context after each text search match.

Browser

KeySettingTypeDefaultWhat it does
browser.headlessHeadless BrowserbooleantrueLaunch browser in headless mode (disable to show browser UI).
browser.cmuxcmux BrowserbooleantrueUse cmux WKWebView surfaces for browser automation when a cmux socket is available. Set VEYYON_BROWSER_CMUX=0 or VEYYON_BROWSER_CMUX=1 to override.
browser.screenshotDirScreenshot Directorystring(unset)Directory to save screenshots. If unset, screenshots go to a temp file. Supports ~. Examples: ~/Downloads, ~/Desktop, /sdcard/Download (Android).

GitHub

KeySettingTypeDefaultWhat it does
github.cache.enabledGitHub View CachebooleantrueCache rendered issue/PR view output in the active profile’s cache/github-cache.db so repeated reads are free.
github.cache.softTtlSecGitHub Cache Soft TTLnumber300Within this window, cached issue/PR view rows are returned directly (seconds; default 5 minutes).
github.cache.hardTtlSecGitHub Cache Hard TTLnumber604800Past the soft TTL the cached row is returned and refreshed in the background; past the hard TTL it is dropped (seconds; default 7 days).

Output Limits

KeySettingTypeDefaultWhat it does
tools.artifactSpillThresholdArtifact Spill Threshold (KB)number50Tool output above this size is saved as an artifact and the result keeps a head/tail window no larger than this size, plus the artifact:// id that reads the full text back, so a lower threshold costs a re-read rather than losing output. It governs every tool that streams output, including bash, eval, ssh and the interactive shell, as well as search and the browser.
tools.artifactTailBytesArtifact Tail Size (KB)number20Amount of tail content kept inline when output spills to artifact, bounded by the spill threshold.
tools.artifactHeadBytesArtifact Head Size (KB)number20Amount of head content kept inline alongside the tail when output spills to artifact (middle elision), bounded with the tail by the spill threshold. 0 disables — keep tail only.
tools.outputMaxColumnsOutput Column Capnumber768Per-line byte cap for streaming tool outputs (bash, ssh, python, js eval) and read. Lines wider than this are ellipsis-truncated; remaining bytes up to the next newline are dropped. 0 disables.
tools.artifactTailLinesArtifact Tail Linesnumber500Maximum lines of tail content kept inline when output spills to artifact.
tools.inlineOutputFloorInline Output Floornumber0.25Smallest share of the inline output budget an early tool result may use before the rest spills to an artifact. A result that arrives early is re-read on every later turn, so it is charged more tightly than one that arrives near the end. Lower spills sooner and costs fewer context tokens; 1 keeps the flat cap and never spills early. This governs every tool that streams output, including eval, bash, ssh and the interactive shell, as well as search and the browser. Shown under the tab’s Advanced fold.

Execution

KeySettingTypeDefaultWhat it does
tools.intentTracingIntent TracingbooleantrueAsk the agent to describe the intent of each tool call before executing it.
tools.abortOnFabricatedResultAbort On Fabricated Tool ResultbooleantrueWith in-band tool calls, stop the model immediately when it starts hallucinating a tool result mid-turn. Disable to let the model finish generating and discard the fabricated continuation instead.
tools.maxTimeoutMax Tool Timeoutnumber0Maximum timeout in seconds the agent can set for any tool (0 = no limit).
async.enabledAsync ExecutionbooleantrueEnable async bash commands and background task execution.
async.pollWaitDurationMax Poll TimeenumsmartHow long the poll tool waits for background job updates before returning the current state. A fixed value waits that exact duration every time. smart adapts: it starts at 30s and climbs to 4m on a back-to-back poll, then resets to 30s after about a minute without polling. The 4m ceiling stays below the 5-minute prompt-cache boundary. Values: 5s, 10s, 30s, 1m, 5m, smart.

Discovery & MCP

KeySettingTypeDefaultWhat it does
tools.discoveryModeTool DiscoveryenumautoHide tools behind a search tool to save tokens. ‘auto’ hides MCP tools once the tool set has more than 40 tools; ‘mcp-only’ always hides MCP tools; ‘all’ also hides non-essential built-ins and first-party heavyweight tools such as generate_image. Values: auto, off, mcp-only, all.
tools.essentialOverrideEssential Tools Overridearray[]Override the always-loaded built-in tools (default: read, bash, launch, edit, write, search, eval). Leave empty to use defaults.
mcp.discoveryModeMCP Tool DiscoverybooleanfalseHide MCP tools by default and expose them through a tool discovery tool.
mcp.discoveryDefaultServersMCP Discovery Default Serversarray[]Keep MCP tools from these servers visible while discovery mode hides other MCP tools.
mcp.notificationsMCP Update InjectionbooleanfalseInject MCP resource updates into the agent conversation.
mcp.notificationDebounceMsMCP Notification Debouncenumber500Debounce window in milliseconds for MCP resource updates before injecting them into the conversation.

Developer

KeySettingTypeDefaultWhat it does
dev.autoqaAuto QAbooleanfalseRecord unexpected built-in tool behavior in this profile’s local grievance database.
dev.autoqaPush.enabledAuto-upload GrievancesbooleanfalseSend new and queued grievances to veyyon.dev after recording them. Off keeps reports local until you run veyyon grievances push.
dev.autoqaPush.endpointGrievance Upload Endpointstringhttps://veyyon.dev/api/grievancesDestination for automatic and manual grievance uploads.

Tasks

Modes

KeySettingTypeDefaultWhat it does
plan.enabledPlan ModebooleantrueEnable plan mode for read-only exploration and planning before execution.
plan.defaultOnStartupStart in Plan ModebooleanfalseAutomatically enter plan mode at the start of every new session.
goal.enabledGoal ModebooleantrueEnable per-session goal mode and the hidden goal tool.
goal.modelBudgetsEnabledModel Goal BudgetsbooleanfalseExpose and enforce persisted per-goal token budgets for the model. This control is available only in Settings.
goal.statusInFooterGoal Progress Bar in FooterbooleantrueAdd a compact progress bar next to the goal token count in the status line. The token count is always shown; this controls the extra bar.
goal.continuationModesGoal Continuation Modesarray["interactive"]Run modes where active goals may auto-continue between turns.
title.refreshOnReplanRefresh Title on ReplanbooleantrueRefresh generated session titles after todo init replans unless the title was set by the user.

Commands & Skills

KeySettingTypeDefaultWhat it does
skills.enableSkillCommandsSkill CommandsbooleantrueRegister skills as /skill:name commands.
commands.enableClaudeUserClaude User CommandsbooleantrueLoad commands from ~/.claude/commands/.
commands.enableOpencodeUserOpenCode User CommandsbooleantrueLoad commands from ~/.config/opencode/commands/.

Subagents

Delegation

KeySettingTypeDefaultWhat it does
subagent.enabledSubagentsbooleantrueWhether this session may use subagents at all. Off removes the task tool and every delegation instruction from the prompt, so nothing can be spawned. This is the only setting that takes the ability away: Subagent Delegation below decides how hard the model is PUSHED to delegate, never whether it may. Your delegation strength and your Roster are kept while this is off and take effect again when you turn it back on.
subagent.delegationSubagent DelegationenumpreferredHow strongly this session routes work to the subagent types you enabled. Allowed leaves delegation available without prompting for it. Preferred asks for substantial eligible work to be delegated. Required adds a first-turn reminder. The enabled Roster is the routing policy: each name is a distinct type that owns only work matching its description, no type is a fallback for another, and work no enabled type covers stays with the main agent. Turn Subagents off above to remove delegation entirely. Values: allowed, preferred, required.
subagent.batchBatch Task CallsbooleantrueSwitch the task tool to its batch shape: one call carries { agent, context, tasks[] } — one subagent per item (with per-item isolation) and a required shared context prepended to every assignment. With async.enabled=true, each spawn runs as an independent background agent with the normal idle/parked lifecycle; otherwise the call blocks for merged results. Disable to restore the flat single-spawn schema. Shown under the tab’s Advanced fold.

Subagents

KeySettingTypeDefaultWhat it does
subagent.agentsRosterrecord{}Which subagent types the model may choose, and what each one runs. Enabled means the model can pick that subagent on its own; disabled means it cannot. With no row, only the general-purpose deep worker is enabled. Bundled specialists and subagents you add are opt-in through onboarding or this roster. Each subagent’s page carries its own Model and Effort, and a Subagents chain naming what it may spawn in turn, level by level; unset anywhere follows the level above, and an agent that names nothing runs the default model role. Same Model for All Subagents below replaces the per-agent Model and Effort rows with one pair for the whole roster.
subagent.maxNestedSpawnDepthMax Nested Spawn Depthnumber0How many nested levels subagents may spawn, for every level no roster chain decides. 0 still lets this session spawn direct subagents, but those children do not receive the task tool. Open Roster above, pick a subagent, then Subagents, to turn individual levels on or off for that one; this number answers from the first level its chain does not name.
subagent.sharedModelSame Model for All SubagentsbooleanfalseRun every subagent on one model and one effort instead of choosing per agent. Off, each agent’s page decides. On, the two rows below decide for the whole roster and the per-agent Model and Effort rows are hidden; what those rows hold is kept and comes back when this goes off.
subagent.modelShared ModelmodelChain(unset)The model chain every subagent runs while Same Model for All Subagents is on. Unset falls back to the default model role, the same model a new session starts on.
subagent.thinkingLevelShared Effortstring(unset)The effort every subagent runs at while Same Model for All Subagents is on. Narrowed to what the model above declares; a :level suffix on the chain still wins. Inherit leaves the documented default.
subagent.showResolvedModelBadgeShow Resolved Model BadgebooleantrueShow each subagent’s resolved model, and the setting that decided it, in the task widget status line and the agent surfaces. Shown under the tab’s Advanced fold.

Limits

KeySettingTypeDefaultWhat it does
subagent.maxConcurrencyMax Concurrent Subagentsnumber32Maximum number of subagents running concurrently.
subagent.maxRuntimeMsMax Subagent Runtimenumber0Hard wall-clock limit per subagent (ms). 0 disables it. Defense-in-depth against provider-side stream hangs that escape the inference-layer watchdog; triggers a normal subagent abort with a ‘timed out’ reason.
subagent.softRequestBudgetSoft Request Budgetnumber200Soft per-subagent request budget (assistant requests per run). Crossing it injects a wrap-up steering notice (see the notice setting below); at 1.5x the budget the run is force-stopped and the agent must yield its partial findings. 0 disables the guard. Bundled scout/sonic agents use a lower built-in budget.
subagent.softRequestBudgetNoticeSoft Request Budget NoticebooleantrueInject one steering notice when a subagent crosses its soft request budget, asking it to wrap up before the 1.5x forced-yield stop.
subagent.enableLspLSP in SubagentsbooleanfalseAllow spawned subagents to use the lsp tool. Off by default to keep subagents cheap; enable when LSP-aware delegation is worth the extra tokens.

Park

KeySettingTypeDefaultWhat it does
subagent.idleTtlMsPark Afternumber300000Stage one. How long a finished subagent stays live before it parks (ms). Parking releases the live session — the process, its MCP clients, its memory — and keeps everything else: the row stays in the roster and the agent rebuilds itself when messaged or opened. Counted from the agent’s last activity, so a revived agent starts this budget again from the revival. ‘Until exit’ keeps idle agents live for the whole session.

Prune

KeySettingTypeDefaultWhat it does
subagent.prune.enabledPrune Parked SubagentsbooleantrueStage two, and a different thing from parking. Pruning takes a parked subagent out of the roster and gives up the ability to wake it; parking only released its session. Nothing on disk is touched: the transcript stays where it is and stays readable at history://\<agent>. Off keeps every parked subagent listed and wakeable until you exit.
subagent.prune.afterMsPrune Afternumber3600000How long a parked subagent stays in the roster before it is pruned (ms). Counted from its last activity, so a subagent read back from a previous run is judged on when its transcript was last written rather than on when this session found it.
subagent.prune.waitingAfterMsPrune After While Waitingnumber7200000The same budget for a subagent whose last message said it was waiting on another agent (ms). It stopped on purpose to let a peer finish, so it keeps its row longer than one that simply went quiet: pruning it on the ordinary budget would drop the agent you are most likely to message next. Set it equal to Prune After to treat both the same; a shorter value is raised to it.

Isolation

KeySettingTypeDefaultWhat it does
subagent.isolation.modeIsolation ModeenumnoneIsolation backend for subagents. “auto” lets the native PAL pick the best available backend (CoW-aware filesystems, then overlayfs/ProjFS, then a git worktree / recursive-copy fallback). Values: none, auto, apfs, btrfs, zfs, reflink, overlayfs, projfs, block-clone, rcopy.
subagent.isolation.mergeIsolation Merge StrategyenumpatchHow isolated subagent changes are integrated (patch apply or branch merge). Values: patch, branch.
subagent.isolation.commitsIsolation Commit StyleenumgenericCommit message style for nested repo changes (generic or AI-generated). Values: generic, ai.
worktree.baseWorktree Base Directorystring(unset)Base directory for agent-managed worktrees: subagent isolation copies, github PR checkouts, and veyyon worktree cleanup all live here. Unset uses the active profile’s wt/ directory (~/.veyyon/profiles/<name>/wt, or its XDG data equivalent). Must be an absolute or ~-relative path; relative paths are ignored. The VEYYON_WORKTREE_DIR env var overrides this.

Coordination

KeySettingTypeDefaultWhat it does
irc.timeoutMsIRC Timeoutnumber120000Default timeout for irc wait (and send await:true) in milliseconds; 0 disables the timeout. IRC is how a parent and its subagents talk, which is why it is configured here.

Providers

Accounts

KeySettingTypeDefaultWhat it does
accounts.loadBalancingAccount Load BalancingbooleanfalseOff: only the account you chose is used, and a session waits out its quota window. On: when that account hits its quota or rate limit, continue on another account of the same provider and say so. A revoked account always fails over regardless, with a notice.

Services

KeySettingTypeDefaultWhat it does
providers.maxInFlightRequestsMax In-Flight Requestsrecord{}Maximum concurrent LLM requests per provider id (for example “openai” or “anthropic”), shared across local veyyon processes with this config root. Omitted providers are unlimited.
providers.ollama-cloud.maxConcurrencyOllama Cloud Max Concurrencynumber3Maximum concurrent Ollama Cloud subagent runs per process; 0 disables the provider-specific limit.
providers.webSearchWeb Search ProviderenumautoThe provider web_search uses; auto tries each in turn. Values: auto, perplexity, gemini, anthropic, codex, xai, zai, exa, tinyfish, jina, kagi, tavily, firecrawl, brave, kimi, parallel, synthetic, searxng, startpage, duckduckgo, google, mojeek, public.
providers.webSearchExcludeExcluded Web Search Providersarray[]Providers that web_search should never use, even as fallbacks.
providers.webSearchGeminiModelGemini web_search modelstring(unset)Model ID for Gemini Google Search grounding. Defaults to gemini-2.5-flash.
providers.antigravityEndpointAntigravity Endpoint ModeenumautoEndpoint routing strategy for google-antigravity providers (chat, search, image, discovery). Values: auto, production, sandbox.
providers.imageImage ProviderenumautoPreferred provider for image generation. Values: auto, openai, antigravity, xai, gemini, openrouter.
providers.ttsText-to-Speech ProviderenumautoBackend for the tts tool: local on-device neural TTS (Kokoro-82M) or xAI Grok Voice. Values: auto, local, xai.
tts.localModelLocal TTS ModelenumkokoroOn-device neural TTS model (Kokoro-82M) used by the local TTS backend. Values: kokoro.
tts.localVoiceLocal TTS Voiceenumaf_heartKokoro voice used by the local TTS backend (American/British, female/male). Values: af_heart, af_bella, af_nicole, af_aoede, af_kore, af_sarah, am_michael, am_fenrir, am_puck, bf_emma, bm_george, bm_fable.
speech.enabledSpeech VocalizationbooleanfalseSpeak the assistant’s output aloud through the speakers as it streams.
speech.modeSpeech Vocalization ModeenumassistantWhat to speak: all = assistant messages + thinking; assistant = messages only; yield = only the final message at turn end. Values: all, assistant, yield.
speech.enhancedEnhanced Speech RewritingbooleanfalseRewrite assistant output into natural spoken prose with the tiny/smol model before synthesis (describes code, drops links and markdown). Falls back to mechanical cleanup on failure.
speech.voiceSpeech Vocalization Voiceenumaf_heartKokoro voice used when speaking the assistant’s output aloud. Values: af_heart, af_bella, af_nicole, af_aoede, af_kore, af_sarah, am_michael, am_fenrir, am_puck, bf_emma, bm_george, bm_fable.
providers.fetchFetch ProviderenumautoReader backend priority for the fetch/read URL tool. Values: auto, native, trafilatura, lynx, parallel, jina.
codexResets.autoRedeemCodex Auto-Redeem Saved ResetsenumunsetWhen a turn is blocked by the Codex weekly limit on the active account and no other account is available, run the conservative saved-reset check. unset asks before spending the first eligible reset, yes spends eligible resets without prompting, and no disables the check entirely. Requires retries enabled. Values: unset, yes, no.
codexResets.minBlockedMinutesCodex Auto-Redeem Min Blocknumber60Only auto-redeem when the natural weekly reset is at least this many minutes away (don’t spend a ~30-day credit to save a short wait).
codexResets.keepCreditsCodex Auto-Redeem Reservenumber0Never auto-spend below this many saved resets (0 = the last credit may be spent automatically).
exa.enabledExabooleantrueMaster toggle for all Exa search tools.
exa.enableSearchExa SearchbooleantrueEnable Exa basic search, deep search, code search, and crawl tools.
exa.searchDelayMsExa Search Delaynumber1000Minimum delay between Exa web search requests in milliseconds; set 0 to disable pacing.
exa.enableResearcherExa ResearcherbooleanfalseEnable the Exa researcher tool for AI-powered deep research.
exa.enableWebsetsExa WebsetsbooleanfalseEnable Exa webset management and enrichment tools.
searxng.endpointSearXNG Endpointstring(unset)Base URL of a self-hosted SearXNG instance used for web search.

Discovery

KeySettingTypeDefaultWhat it does
discovery.importForeignConfigImport Other Tools’ ConfigbooleanfalseAuto-discover skills, context files, rules, and MCP servers authored for other AI tools (Claude, Codex, Gemini, Cursor, opencode, and more) found on disk. Off by default: veyyon runs on its own instruction layers only (the system prompt, the global ~/.veyyon/AGENTS.md, the active profile’s AGENTS.md, and the project’s own AGENTS.md/CLAUDE.md walked from the repo root down to cwd), and never ambiently picks up a foreign tool’s own config directory, GEMINI.md, or the skills, rules and MCP servers those tools define. Turn on to import them as a base layer.

Fireworks

KeySettingTypeDefaultWhat it does
providers.fireworksTierFireworks TierenumstandardServing path for Fireworks requests. Priority sends service_tier: "priority" for higher reliability during peak traffic at a higher price; Standard omits it. Fast (-fast) models ignore this — Fast is its own serving path. Values: standard, priority.

Tiny Model

KeySettingTypeDefaultWhat it does
providers.tinyModelSession Title ModelenumonlineSession-title model: online (the TINY role from /models, else @smol) by default, or a local on-device model. Values: online, lfm2-350m, qwen3-0.6b, gemma-270m, qwen2.5-0.5b, lfm2-700m.
providers.tinyModelDeviceTiny Model DeviceenumdefaultONNX execution provider for local tiny models (titles + memory). Default uses CPU-only inference. The VEYYON_TINY_DEVICE env var overrides this. Values: default, gpu, cpu, metal, webgpu, cuda, dml, coreml, auto, wasm, webnn, webnn-gpu, webnn-cpu, webnn-npu.
providers.tinyModelDtypeTiny Model PrecisionenumdefaultONNX quantization/precision for local tiny models. Default uses each model’s shipped dtype (q4); lower precision is faster, higher is more faithful. The VEYYON_TINY_DTYPE env var overrides this. Values: default, q4, q4f16, q8, fp16, fp32, int8, uint8, bnb4, q2, q2f16, q1, q1f16, auto.
providers.unexpectedStopModelUnexpected Stop ModelenumonlineClassifier for unexpected-stop detection: online (the TINY role from /models, else smol) by default, or a local on-device model. Values: online, qwen3-1.7b, llama3.2:3b, gemma-3-1b, qwen2.5-1.5b, lfm2-1.2b.

Protocol

KeySettingTypeDefaultWhat it does
providers.kimiApiFormatKimi API FormatenumanthropicAPI format for Kimi Code provider. Values: openai, anthropic.
providers.openaiWebsocketsOpenAI WebSocketsenumautoWebsocket policy for OpenAI Codex models (auto uses model defaults, on forces, off disables). Values: auto, off, on.
providers.openrouterVariantOpenRouter RoutingenumdefaultDefault routing-variant suffix appended to OpenRouter model IDs (overridden when the selector already names a variant). Values: default, nitro, floor, online, exacto.
provider.appendOnlyContextAppend-Only ContextenumautoCache system prompt + tool specs and keep an append-only message log so provider prefix caches (DeepSeek, Xiaomi/SGLang, Anthropic) hit at maximum rate. Auto enables for known prefix-cache providers. Values: auto, on, off.

Timeouts

KeySettingTypeDefaultWhat it does
providers.streamFirstEventTimeoutSecondsStream First Event Timeoutnumber-1Seconds to wait for the first model stream event; -1 uses provider/env defaults, 0 disables the watchdog.
providers.streamIdleTimeoutSecondsStream Idle Timeoutnumber-1Seconds a model stream may stay silent between events; -1 uses provider/env defaults, 0 disables the watchdog.

Privacy

KeySettingTypeDefaultWhat it does
images.blockImagesBlock ImagesbooleanfalsePrevent images from being sent to LLM providers.
secrets.enabledHide SecretsbooleanfalseObfuscate secrets before sending to AI providers. Storing a credential with /secret turns this on for you.
secrets.defaultTtlSecret Lifetimestring1dHow long a /secret lasts when the command does not say. Default 1d; also accepts forms like 30m, 12h, 7d, 2w, or “never”.
secrets.auditLogRecord Secret UsebooleantrueAppend which secret was used in which command to the profile’s log. Never records values.
secrets.expiryWarningsWarn Before A Secret ExpiresbooleantrueSay at the start of a session when a stored secret is halfway through its lifetime, and again near the end. Off: /secret list still shows the STATUS column and the status line still shows a deadline in the last hour.

Experimental

Argot

KeySettingTypeDefaultWhat it does
argot.enabledArgot ShorthandbooleanfalseLet the agent load token-saving shorthand for the projects it works in, kept in a local cache (nothing is written to the repository). The project you launch in is loaded for you, and the model loads any further project with the argot_load tool; it then writes short handles that the harness expands to full text before any tool runs or the display shows them.
argot.autoloadArgot Startup LoadbooleantrueLoad the project you started the session in, in the background, so shorthand works without the model spending a turn on it. Off, a session starts with no dictionary until the model calls argot_load itself. Either way a handle already written still expands.
argot.encode.modelsArgot Modelsarray[]Models allowed to write Argot shorthand, by model id. Empty (the default) means no model does, so turning Argot on alone stays inert until you add one here. A model left off this list is never taught the shorthand; handles already in history still expand.
argot.tokenBudgetArgot Dictionary Budgetnumber1000How many tokens the generated Argot dictionary may spend on its handle table. A larger budget teaches more handles (more transcript savings) but adds a longer preamble each turn; a smaller budget teaches only the most central strings. Changing it regenerates the dictionary.
argot.encode.disableAboveTokensArgot Context Cutoffnumber-1Stop teaching Argot shorthand once context passes this many tokens (the model then writes in full). Handles already written still expand losslessly. -1 disables the cutoff.
argot.subagentsArgot in SubagentsenumoffHow a subagent starts with Argot shorthand. Correctness never depends on this (handles never cross the parent/child wire); it only trades tokens. off: no shorthand in subagents. fresh: the subagent loads its task’s project itself through argot_load. inherit: the subagent starts from a copy of the parent’s loaded shorthand. Values: off, fresh, inherit.

Tool Calling

KeySettingTypeDefaultWhat it does
tools.formatTool Calling ModeenumautoControls how tools are exposed to the model. Auto uses provider-native tool calls unless the selected model is marked as not supporting them, then falls back to the GLM owned dialect. Native forces provider-native tools; the other values force the named owned dialect. Applies on session start. Values: auto, native, glm, hermes, kimi, xml, anthropic, deepseek, harmony, qwen3, gemini, gemma, minimax, pi-native.

Auto-Learn

KeySettingTypeDefaultWhat it does
autolearn.enabledEnable Auto-LearnbooleanfalseAfter the agent stops, nudge it to capture lessons to memory and create/enhance isolated managed skills.
autolearn.autoContinueAuto-run capture at stopbooleanfalseWhen on, auto-run one capture turn at stop (uses extra tokens). Off = passive reminder on your next turn.

Global

Machine Limits

KeySettingTypeDefaultWhat it does
machine.cpuLimitCoresMachine CPU Limitnumber0Maximum CPU every veyyon process on this machine may use TOGETHER, in cores (0 = no limit). Stored in ~/.veyyon/config.yml rather than in a profile, so it covers every profile and every veyyon running at once, which is what makes it a machine limit: held per profile, two profiles would read their own copy and the machine would get the sum. Each session’s budget group is created INSIDE this one, so on Linux the kernel caps the whole subtree and no combination of sessions can exceed it. A per-session limit larger than this one is bounded by it and does not raise it. The machine tier therefore needs a parent that delegates two levels; a host that delegates one, such as a container whose cgroup root holds processes, still holds per-session limits and reports the machine tier as unheld. Where the kernel cannot hold it, a notice says so once at startup rather than reporting a cap that does not exist. Stored machine-wide, not per profile.
machine.memoryLimitGbMachine Memory Limitnumber0Maximum memory every veyyon process on this machine may hold together, in gigabytes (0 = no limit). Stored in ~/.veyyon/config.yml, so it spans profiles and concurrent veyyon instances. Every session budget group sits inside this one, so on Linux this is cgroup v2 memory.max on the parent, with memory.swap.max pinned to 0 so the cap is the whole anonymous footprint rather than a resident cap a process escapes by swapping. The kernel reclaims, then OOM-kills, inside the subtree once the total is reached — whichever process the kernel picks, with no warning and no chance to finish. Set it where an OOM kill is preferable to the machine swapping. Where no memory controller is delegated the cap cannot be held, and a notice says so once at startup. Stored machine-wide, not per profile.
machine.writeBudgetGbMachine Write Budgetnumber0Cumulative gigabytes every veyyon process on this machine may WRITE before further writes are refused (0 = no limit). Stored in ~/.veyyon/config.yml, so it spans profiles and concurrent veyyon instances. Unlike CPU and memory this is a total that accumulates, not a level: it counts bytes written since the machine budget was last reset, across every session, and refuses new commands and harness writes once the total is reached. A write budget is the one limit no kernel enforces on its own — cgroup io accounting MEASURES bytes and caps rate, not a lifetime total — so this is a refusal, and work already writing runs to completion. Stored machine-wide, not per profile.
machine.maxProcessesMachine Max Processesnumber0Hard cap on how many processes every veyyon on this machine may have alive at once (0 = no limit). Stored in ~/.veyyon/config.yml, so it spans profiles and concurrent veyyon instances. Every session budget group sits inside this one, so on Linux this is cgroup v2 pids.max on the parent and the kernel refuses the fork itself once the subtree is full, whichever session asked. Where pids is not delegated the cap is a refusal at the spawn path instead, and a notice says so once at startup. Stored machine-wide, not per profile.

Profiles

KeySettingTypeDefaultWhat it does
defaultProfileDefault ProfilestringdefaultProfile used when no –profile flag or VEYYON_PROFILE is set. Stored in ~/.veyyon/config.yml. Use the profile name (default clears the override). Stored machine-wide, not per profile.
onboardingVersionOnboarding Versionnumber0Setup generation this machine has already completed. Stored in ~/.veyyon/config.yml, so switching profile or working directory never re-runs onboarding. Stored machine-wide, not per profile.

Credentials

KeySettingTypeDefaultWhat it does
profileSharingShare Credentials Across ProfilesbooleantrueWhen on (the default), every profile reads one machine-wide set of provider logins. Turn off to give each profile its own private credential store. Changing this setting shuts down the active session; restart is required before any further model dispatch. Stored machine-wide, not per profile.

Auth Broker

KeySettingTypeDefaultWhat it does
authBrokerUrlAuth Broker URLstring(empty)Base URL of the auth broker that mints provider credentials for this machine. Stored in ~/.veyyon/config.yml under auth.broker.url; empty disables broker discovery via config. Stored machine-wide, not per profile.
authBrokerTokenAuth Broker Tokenstring(empty)Bearer token for the auth broker. Write-only: a stored token shows as a mask and is never echoed. Enter a new value to replace it, leave the mask to keep it, or clear the field to delete it. Stored machine-wide, not per profile.

Configuration file only

These keys are not in /settings. Some are state veyyon writes for itself (a schema version, an onboarding marker), some are credentials that belong in a secret store rather than on a settings screen, and the rest are shapes a selector cannot edit, such as a table of patterns. All of them are read by production code, all of them are valid in config.yml, and all of them can be set with veyyon config set.

KeyTypeDefaultNotes
async.maxJobsnumber100
auth.broker.tokenstring(unset)
auth.broker.urlstring(unset)
autolearn.minToolCallsnumber5
bashInterceptor.patternsarray[{"pattern":"^\\s*(cat|head|tail|less|more)\\s+","tool":"read","message":"Use the readtool instead of cat/head/tail. It provides better context and handles binary files."},{"pattern":"^\\s*(grep|rg|ripgrep|ag|ack)\\s+","tool":"search","message":"Usesearchwithtype: "text"instead of shell grep/rg."},{"pattern":"^\\s*(find|fd|locate)\\s+.*(-name|-iname|-type|--type|-glob)","tool":"search","message":"Usesearchwithtype: "files"instead of shell find/fd."},{"pattern":"^\\s*sed\\s+(-i|--in-place)","tool":"edit","message":"Use theedittool instead of sed -i. It provides diff preview and fuzzy matching."},{"pattern":"^\\s*perl\\s+.*-[pn]?i","tool":"edit","message":"Use theedittool instead of perl -i. It provides diff preview and fuzzy matching."},{"pattern":"^\\s*awk\\s+.*-i\\s+inplace","tool":"edit","message":"Use theedittool instead of awk -i inplace. It provides diff preview and fuzzy matching."},{"pattern":"^\\s*(echo|printf|cat\\s*\<\<)\\s+(?:(?:[^\"'>]|\"[^\"]*\"|'[^']*')|(?\<!\\|)>{1,2}\\|?\\s*(?:\"/dev/(?:null|tty|stdout|stderr)\"|'/dev/(?:null|tty|stdout|stderr)'|/dev/(?:null|tty|stdout|stderr))(?:[\\s;&|]|$))*(?\<!\\|)>{1,2}\\|?\\s*(?!(?:\"/dev/(?:null|tty|stdout|stderr)\"|'/dev/(?:null|tty|stdout|stderr)'|/dev/(?:null|tty|stdout|stderr))(?:[\\s;&|]|$))[$\\w./~\"'-]","tool":"write","message":"Use thewritetool instead of echo/cat redirection. It handles encoding and provides confirmation."},{"pattern":"^\\s*nohup\\s+|(?\<!&)\\&\\s*$","tool":"launch","message":"Use thelaunchtool instead of nohup or background shell syntax so the process stays observable and managed."},{"pattern":"^\\s*(?:(?:bun|npm|pnpm|yarn)\\s+(?:run\\s+)?(?:dev|start)(?:\\s|$)|(?:vite|next\\s+dev|nuxt\\s+dev|nodemon|lldb|gdb|tail\\s+-f)(?:\\s|$)|docker\\s+compose\\s+up(?!.*(?:\\s-d(?:\\s|$)|--detach))(?:\\s|$))","tool":"launch","message":"Use thelaunchtool for services, watchers, and debuggers so other veyyon instances can observe and control them."},{"pattern":"^\\s*(?:(?:bun|npm|pnpm|yarn)\\s+(?:run\\s+)?\\S+|cargo\\s+watch|watchexec|pytest|vitest|jest|tsc)(?:.|\\n)*(?:--watch|-w)(?:\\s|$)","tool":"launch","message":"Use thelaunch tool for watch mode so its output, input, and lifecycle stay managed."}]
branchSummary.reserveTokensnumber16384
commit.changelogMaxDiffCharsnumber120000
commit.mapReduceEnabledbooleantrue
commit.mapReduceMaxConcurrencynumber5
commit.mapReduceMaxFileTokensnumber50000
commit.mapReduceMinFilesnumber4
commit.mapReduceTimeoutMsnumber120000
compaction.autoContinuebooleantrue
compaction.dropUselessbooleantrue
compaction.enabledbooleantrue
compaction.handoffSaveToDiskbooleanfalse
compaction.idleEnabledbooleanfalse
compaction.idleThresholdTokensnumber200000
compaction.idleTimeoutSecondsnumber300
compaction.keepRecentTokensnumber10000
compaction.midTurnEnabledbooleantrue
compaction.remoteEndpointstring(unset)
compaction.reserveTokensnumber(unset)
compaction.supersedeReadsbooleantrue
compaction.thresholdPercentnumber-1Retired: use compaction.threshold instead.
compaction.thresholdTokensnumber-1Retired: use compaction.threshold instead.
cycleOrderarray["smol","slow"]
defaultThinkingLevelenumhighValues: minimal, low, medium, high, xhigh, max, auto. Retired: use defaultEffort instead.
dev.autoqaPush.tokenstring(unset)
disabledExtensionsarray[]
disabledProvidersarray[]
edit.modelVariantsrecord{}
enabledModelsarray[]
eval.pyWorkspacebooleanfalse
extensionsarray[]
gc.archivebooleantrue
gc.blobsbooleantrue
gc.coldArchiveAfterDaysnumber30
gc.retainNewestGlobalnumber20
gc.retainNewestPerCwdnumber10
gc.walbooleantrue
gc.writeGraceMinutesnumber5
harness.profilesrecord{}
hindsight.apiTokenstring(unset)
hindsight.bankIdPrefixstring(unset)
hindsight.bankMissionstring(unset)
hindsight.debugbooleanfalse
hindsight.mentalModelMaxRenderCharsnumber16000
hindsight.mentalModelRefreshIntervalMsnumber300000
hindsight.recallBudgetenummidValues: low, mid, high.
hindsight.recallContextTurnsnumber1
hindsight.recallMaxQueryCharsnumber800
hindsight.recallMaxTokensnumber1024
hindsight.recallTimeoutMsnumber30000
hindsight.recallTypesarray["world","experience"]
hindsight.reflectTimeoutMsnumber120000
hindsight.requestTimeoutMsnumber30000
hindsight.retainContextstringveyyon
hindsight.retainEveryNTurnsnumber3
hindsight.retainMissionstring(unset)
hindsight.retainOverlapTurnsnumber2
hindsight.retainTimeoutMsnumber60000
memories.enabledbooleanfalse
memories.fallbackTokenLimitnumber16000
memories.maxRawMemoriesForGlobalnumber200
memories.maxRolloutAgeDaysnumber30
memories.maxRolloutsPerStartupnumber64
memories.minRolloutIdleHoursnumber12
memories.phase1InputTokenLimitnumber4000
memories.phase2HeartbeatSecondsnumber30
memories.phase2LeaseSecondsnumber180
memories.phase2RetryDelaySecondsnumber180
memories.rolloutPayloadPercentnumber0.7
memories.stage1Concurrencynumber8
memories.stage1LeaseSecondsnumber120
memories.stage1RetryDelaySecondsnumber120
memories.summaryInjectionTokenLimitnumber5000
memories.threadScanLimitnumber300
mnemopi.debugbooleanfalse
mnemopi.injectionTokenLimitnumber5000
mnemopi.recallContextTurnsnumber3
mnemopi.recallLimitnumber8
mnemopi.recallMaxQueryCharsnumber4000
mnemopi.retainEveryNTurnsnumber4
modelProviderOrderarray[]
modelTagsrecord{}
retry.baseDelayMsnumber500
retry.enabledbooleantrue
searxng.basicPasswordstring(unset)
searxng.basicUsernamestring(unset)
searxng.categoriesstring(unset)
searxng.languagestring(unset)
searxng.tokenstring(unset)
settingsMigrationVersionnumber0
setupVersionnumber0Retired: use onboardingVersion instead.
shellMinimizer.exceptarray[]
shellMinimizer.legacyFiltersboolean(unset)
shellMinimizer.maxCaptureBytesnumber4194304
shellMinimizer.onlyarray[]
shellMinimizer.settingsPathstring(unset)
shellPathstring(unset)
skills.enabledbooleantrue
skills.ignoredSkillsarray[]
skills.includeSkillsarray[]
statusLine.leftSegmentsarray[]
statusLine.rightSegmentsarray[]
statusLine.segmentOptionsrecord{}
statusLine.separatorenumpipeValues: powerline, powerline-thin, slash, pipe, block, none, ascii.
statusLine.transparentbooleantrue
stt.languagestringen
subagent.modelByDepthrecord{}Retired: use subagent.agents instead.
thinkingBudgets.highnumber16384
thinkingBudgets.lownumber2048
thinkingBudgets.maxnumber32768
thinkingBudgets.mediumnumber8192
thinkingBudgets.minimalnumber1024
thinkingBudgets.xhighnumber32768
ttsr.experimentalRulesarray[]
tui.maxInlineImageColumnsnumber100
tui.maxInlineImageRowsnumber20
tui.maxInlineImagesnumber8

353 settings in /settings, 121 configuration-file keys, 474 in all.