- 480+
- settings
- 5
- resolution layers
- 3
- first decisions
1. Where does a value come from?
Values resolve from lowest to highest priority:
- Schema default
- Global config,
~/.omp/agent/config.yml - Project config,
<cwd>/.omp/config.yml - Ordered
--configoverlays, includingPI_CONFIG_FILES - CLI and runtime overrides
Three facts people learn the hard way:
- Project settings do not walk up ancestors. Context files (
AGENTS.md,RULES.md, and standaloneCLAUDE.md) do. A.omp/config.ymlin a parent directory of where you launched is silently ignored. - Arrays replace wholesale, per layer. They do not merge. If a project
.omp/config.ymldefinesbash.patterns, it deletes every global pattern for that project. If you keep global guardrails in an array, either never define that array at project level, or load the global version as a--configoverlay (viaPI_CONFIG_FILESin your shell profile) so it resolves after project config. Caveat: GUI-spawned omp (ACP, launchd) never sources your shell profile, so an env-based overlay does not reach it. omp config get <key>shows the merged, effective value from wherever your shell runs it, overlays included. When a change seems to have no effect, ask which layer you edited and which layer wins.
Useful commands:
omp config list --json # every key with its effective value
omp config get <key>
omp config set <key> <value>
omp config path # which directory the global config lives in
/settings # same thing with a UI
2. Which approval mode should I choose?
Fresh installs default to yolo. Start with write: read and workspace-write tools stay automatic, while exec-tier actions still require approval.
The mode is the baseline. tools.approval overrides it per tool, and the first matching bash.patterns rule overrides the bash policy:
tools:
approvalMode: write
approval:
bash: prompt
bash:
patterns:
- { match: "git status*", approval: allow }
- { match: "rm -r*", approval: deny }
Under yolo, only deny and prompt rules change bash behavior. deny blocks, prompt asks, and allow rules must match the full command while deny and prompt inspect compound-command segments. eval needs its own approval policy: Python and JavaScript cells can spawn exec-tier shells, so use tools.approval.eval when that boundary matters.
3. What belongs in my first config?
| Key | Shipped default | Start here because |
|---|---|---|
tools.approvalMode |
yolo |
write keeps routine reads and workspace writes fast while asking before exec-tier actions. |
defaultThinkingLevel |
high |
auto chooses a level per turn instead of fixing every task at high. |
secrets.enabled |
false |
true redacts credential-shaped tokens before they reach providers. |
defaultThinkingLevel: auto
secrets:
enabled: true
tools:
approvalMode: write
4. What should I add later?
Cross-session recall
memory.backend ships off. Enable it when you want recall across sessions. Read memory tips first.
Parallel writers
task.isolation.enabled ships false. Set it to true before parallel agents edit. isolation.backend ships auto and selects the available backend. Read isolation guidance.
Rate-limit control
task.maxConcurrency ships 32; providers.maxInFlightRequests is unlimited. Cap both before broad fan-out. Read autonomy traps.
Provider fallback
retry.fallbackChains ships empty. Add it after choosing a real backup provider.
Full reference
The full key catalog stays sourced from data/settings.json. Search the list below for your install’s shipped defaults, or run omp config list --json for your effective values.
Browse all 557 settings
| Key | Shipped default | Description |
|---|---|---|
advisor.continueSeverity |
concern |
Minimum severity of an advisor note that wakes the agent after it finished with a final answer. Lower-severity notes stay as a card at the end of the transcript and reach the agent with your next message. |
advisor.enabled |
false |
Pair a second model (assigned to the 'advisor' role) that passively reviews each turn and injects notes. |
advisor.evictStaleResults |
true |
Before each review, replace the advisor's read/grep/glob output from older reviews with a short placeholder. The latest review is kept. |
advisor.immuneTurns |
3 |
After an advisor concern or blocker interrupts, route further concerns as non-interrupting asides for this many primary turns. Blockers are exempt from the cooldown. |
advisor.maxNotesPerUpdate |
4 |
Maximum non-blocker advice notes accepted per advisor prompt update (1–32; UI offers 1–5 quick picks). Blockers are exempt. |
advisor.reviewInterval |
1 |
Default advisor cadence when no WATCHDOG.yml roster is present: review every Nth eligible primary update. 1 = every update. Skipped updates are sent with the next scheduled review. |
advisor.reviewMode |
turn |
Default advisor cadence when no WATCHDOG.yml roster is present. turn reviews every primary turn; agent-end reviews only final yields. |
advisor.syncBacklog |
off |
Pause main agent until advisor backlog falls below threshold. Numeric values cap wait at 30 seconds; strict waits for all scheduled reviews without a wall-clock cap. Off disables catch-up delays. Abort, failure, and disposal release waits. |
archive.enabled |
true |
Enable the read-only archive eval prelude: prompt history, recent projects, past sessions and recaps |
ask.enabled |
true |
Enable the ask tool for interactive user questions |
ask.notify |
on |
Notify when the ask tool is waiting for input |
ask.timeout |
0 |
Auto-select the recommended ask option after this many seconds (0 disables). Also bounds cfg:// approval prompts; an unanswered approval denies the write instead of auto-selecting |
astEdit.enabled |
true |
Enable the ast_edit tool for structural AST rewrites |
astGrep.enabled |
false |
Enable the ast_grep tool for structural AST search |
async.enabled |
true |
Enable async bash commands and background task execution |
async.maxJobs |
100 |
No description provided. |
auth.accountPolicies |
[] |
No description provided. |
auth.broker.token |
No shipped default | No description provided. |
auth.broker.url |
No shipped default | No description provided. |
autoResume |
false |
Automatically resume the most recent session in the current directory |
autocompleteMaxVisible |
10 |
Max visible items in autocomplete dropdown (3-20) |
autolearn.autoContinue |
false |
When on, auto-run one private capture turn at stop (uses extra tokens). When off, only standing auto-learn guidance remains. |
autolearn.enabled |
false |
After the agent stops, nudge it to capture lessons to memory and create/enhance isolated managed skills |
autolearn.minToolCalls |
5 |
No description provided. |
bash.allowCompoundCommands |
false |
Evaluate literal && chains per command; unmatched commands use normal bash approval policy and mode |
bash.autoBackground.enabled |
true |
Automatically background long-running bash commands and deliver the result later |
bash.autoBackground.thresholdMs |
60000 |
No description provided. |
bash.direnv |
auto |
Auto-load a repo's direnv/devenv `.envrc` into the bash session so devenv tools and env vars are present without manual `direnv exec`. Honors direnv's allow list: an `.envrc` you haven't `direnv allow`ed is never executed |
bash.direnvLoadTimeoutMs |
30000 |
Max wait for the first `direnv export` (a cold devenv shell can be slow); on timeout the session runs without the direnv env |
bash.enabled |
true |
Enable the bash tool for shell command execution |
bash.gitGuard |
false |
Refuse git commands that discard or move shared work in the bash tool: stash, reset --hard or to another commit, and checkout/switch/restore outside a merge or rebase conflict |
bash.patterns |
[] |
Ordered bash command approval rules. Each item has match and approval fields; only '*' wildcards are supported. |
bashInterceptor.enabled |
false |
Block shell commands that have dedicated tools |
bashInterceptor.patterns |
[{"message":"Use the `read` tool instead of cat/head/tail. It provides better context and handles binary files.","pattern":"^\\s*(cat|head|tail|less|more)\\s+","tool":"read"},{"message":"Use the `grep` tool instead of grep/rg. It respects .gitignore and provides structured output.","pattern":"^\\s*(grep|rg|ripgrep|ag|ack)\\s+","tool":"grep"},{"message":"Use the `glob` tool instead of find/fd. It respects .gitignore and is faster for glob patterns.","pattern":"^\\s*(find|fd|locate)\\s+.*(-name|-iname|-type|--type|-glob)","tool":"glob"},{"message":"Use the `edit` tool instead of sed -i. It provides diff preview and fuzzy matching.","pattern":"^\\s*sed\\s+(-i|--in-place)","tool":"edit"},{"message":"Use the `edit` tool instead of perl -i. It provides diff preview and fuzzy matching.","pattern":"^\\s*perl\\s+.*-[pn]?i","tool":"edit"},{"message":"Use the `edit` tool instead of awk -i inplace. It provides diff preview and fuzzy matching.","pattern":"^\\s*awk\\s+.*-i\\s+inplace","tool":"edit"},{"message":"Use the `write` tool instead of echo/cat redirection. It handles encoding and provides confirmation.","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 `bash` with `name` instead of nohup or background shell syntax so the service stays observable and managed.","pattern":"^\\s*nohup\\s+|(?<!&)\\&\\s*$","tool":"bash"},{"message":"Use `bash` with `name` for services, watchers, and debuggers; inspect with `read proc://<name>`.","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":"bash"},{"message":"Use `bash` with `name` for watch mode so its output, input, and lifecycle stay managed.","pattern":"^\\s*(?:(?:bun|npm|pnpm|yarn)\\s+(?:run\\s+)?\\S+|cargo\\s+watch|watchexec|pytest|vitest|jest|tsc)(?:.|\\n)*(?:--watch|-w)(?:\\s|$)","tool":"bash"}] |
No description provided. |
branchSummary.enabled |
false |
Prompt to summarize when leaving a branch |
branchSummary.reserveTokens |
16384 |
No description provided. |
browser.cdpUrl |
No shipped default | Default HTTP CDP discovery endpoint (for example http://127.0.0.1:9222) to attach to instead of launching a browser. Explicit app.cdp_url or app.path on the tool call take precedence. |
browser.cmux |
true |
Use cmux WKWebView surfaces for browser automation when a cmux socket is available. Set PI_BROWSER_CMUX=0 or PI_BROWSER_CMUX=1 to override. |
browser.enabled |
true |
Enable the browser eval prelude for scripted Chromium automation (Puppeteer) |
browser.freezeOnTurnEnd |
true |
Freeze OMP-owned headless browser tabs when a turn settles so animated pages stop burning CPU/GPU while idle. Tabs unfreeze automatically on next use; pass persist:true on open to opt a tab out. |
browser.headless |
true |
Launch browser in headless mode (disable to show browser UI) |
browser.idleCloseSec |
1800 |
Close OMP-owned headless browser tabs and Tern browser picture-in-pictures idle longer than this many seconds (0 = never; session dispose still reaps). Never touches relay/CDP/spawned browsers or other sessions' tabs. |
browser.relay |
false |
Drive your own Chrome tabs through the omp browser relay. Install the extension once (`omp browser-relay install`); the relay server auto-starts when the browser prelude needs it. Takes precedence over Browser CDP URL; set PI_BROWSER_RELAY=0 or PI_BROWSER_RELAY=1 to override. |
browser.relayUrl |
No shipped default | omp browser relay endpoint (default http://127.0.0.1:9224). |
browser.screenshotDir |
No shipped default | Directory to save screenshots. If unset, screenshots go to a temp file. Supports ~. Examples: ~/Downloads, ~/Desktop, /sdcard/Download (Android) |
browser.tern |
true |
Inside a Tern pane, open browser tabs as picture-in-pictures over omp's pane (native web view) instead of headless Chromium; falls back to Chromium when no Tern window can host them. Explicit app options, the relay and Browser CDP URL take precedence; app.tern:false opts one open out. Set PI_BROWSER_TERN=0 or PI_BROWSER_TERN=1 to override. |
checkpoint.enabled |
false |
Enable the checkpoint and rewind tools for context checkpointing |
claudeResets.autoRedeem |
unset |
Spend eligible Claude Cedar or Juniper resets automatically. Cedar is spent only for covered limits; Juniper can only recover a sole 5-hour block. unset asks before the first spend (with no prompt UI, it spends only a reset expiring within 5 minutes), yes spends without prompting, and no disables blocked recovery and expiry salvage. |
claudeResets.keepCredits |
0 |
Keep at least this many Claude resets banked (0 allows the last eligible reset to be spent automatically). The reserve applies to early salvage, but not to eligible resets expiring within 5 minutes. |
claudeResets.minBlockedMinutes |
60 |
Only auto-redeem when the natural unblock — the latest reset among the exhausted covered windows — is at least this many minutes away. A 5-hour-only reset is never used for a weekly or model-scoped block. |
claudeResets.salvageHorizonHours |
12 |
With auto-redeem enabled, use a server-selected Cedar reset within this many hours of expiry when its covered windows have meaningful usage. 0 disables early salvage; eligible Cedar or Juniper resets expiring within 5 minutes are still attempted regardless of usage or reserve. Provider limit requirements still apply. |
codexResets.autoRedeem |
unset |
Spend saved Codex rate-limit resets automatically: restore an account blocked by an exhausted 5h or weekly window when a turn is stuck and no other account can take over, and salvage credits that are about to expire. unset asks before the first spend (with no prompt UI, it spends only a reset expiring within 5 minutes), yes spends without prompting, and no disables both checks. |
codexResets.keepCredits |
0 |
Never auto-spend below this many saved resets (0 = the last credit may be spent automatically). Credits about to expire are exempt — a reserved credit that expires preserves nothing. |
codexResets.minBlockedMinutes |
60 |
Only auto-redeem when the natural unblock — the latest reset among the exhausted 5h/weekly windows — is at least this many minutes away (don't spend a scarce credit to save a short wait). Raise it (e.g. 360) to ignore 5h-only blocks. |
codexResets.salvageHorizonHours |
12 |
With auto-redeem enabled, spend a saved Codex reset within this many hours of expiry when either chat window has meaningful usage. 0 disables early salvage; credits expiring within 5 minutes are still attempted regardless of usage. |
collab.autoStart |
off |
Host every interactive session via collab.relayUrl as it starts and publish it to the local registry (omp collab list); rooms rotate on session switch |
collab.displayName |
|
Name shown to other collab participants (default: OS username) |
collab.relayUrl |
wss://my.omp.sh |
Relay used by /collab (wss://host[:port]) |
collab.webUrl |
|
Browser UI used by /collab links; empty derives from collab.relayUrl; explicit http:// is localhost-only |
colorBlindMode |
false |
Use blue instead of green for diff additions |
commands.enableClaudeProject |
true |
Load commands from .claude/commands/ |
commands.enableClaudeUser |
false |
Load commands from ~/.claude/commands/ |
commands.enableOpencodeProject |
true |
Load commands from .opencode/commands/ |
commands.enableOpencodeUser |
false |
Load commands from ~/.config/opencode/commands/ |
commit.cacheEnabled |
true |
No description provided. |
commit.cacheTtlDays |
14 |
No description provided. |
commit.changelogMaxDiffChars |
120000 |
No description provided. |
commit.mapBatchTokenBudget |
16000 |
No description provided. |
commit.mapReduceEnabled |
true |
No description provided. |
commit.mapReduceThreshold |
5000 |
No description provided. |
compaction.asyncEnabled |
true |
Speculatively summarize in the background as context nears the compaction threshold, then splice the ready result in when the threshold is crossed |
compaction.autoContinue |
true |
No description provided. |
compaction.dropUseless |
true |
Prune tool results flagged contextually useless (no matches, timed-out waits) once consumed (cache-aware) |
compaction.enabled |
true |
Automatically compact context when it gets too large |
compaction.experimentalContextManagement |
false |
Keep persistent notes and searchable raw history across context windows. |
compaction.handoffSaveToDisk |
false |
Save generated handoff documents to markdown files for the auto-handoff flow |
compaction.idleEnabled |
false |
Compact context while idle when token count exceeds threshold |
compaction.idleThresholdTokens |
200000 |
Token count above which idle compaction triggers |
compaction.idleTimeoutSeconds |
300 |
Seconds to wait while idle before compacting; with a 1-hour prompt cache, compaction instead runs just before the cache expires |
compaction.keepRecentTokens |
20000 |
No description provided. |
compaction.methodOrder |
["remote","snapcompact","handoff","shake","soft"] |
Preferred fallback order for automatic context maintenance; unavailable or failed methods advance to the next choice |
compaction.midTurnEnabled |
true |
Check thresholds at safe mid-turn tool-loop boundaries before the next provider request; subagents always check, since their whole assignment is one turn |
compaction.modelThresholds |
{} |
No description provided. |
compaction.modelThresholdsEnabled |
true |
No description provided. |
compaction.remoteEndpoint |
No shipped default | No description provided. |
compaction.remoteStreamingV2Enabled |
true |
Use Responses streaming compaction for compatible remote compaction models |
compaction.reserveTokens |
No shipped default | No description provided. |
compaction.supersedeReads |
true |
Prune older read results when the same file is read again (cache-aware, runs every turn) |
compaction.thresholdPercent |
-1 |
Percent threshold for context maintenance; set to Default to use legacy reserve-based behavior |
compaction.thresholdTokens |
-1 |
Fixed token limit for context maintenance; overrides percentage if set |
compaction.v2RetainedMessageBudget |
64000 |
No description provided. |
completion.notify |
on |
Notify when the agent finishes a turn |
composer.predictions |
false |
After a completed turn, ask the active model to predict your next message and show it as ghost text in the empty composer; ⇥ or → inserts it without sending. Extra usage: every completed turn sends one more billed request over the whole conversation (counted in /stats) |
composer.recallClearedDrafts |
true |
Keep drafts cleared with Ctrl+C in local ↑/↓ history until exit; disabling affects future clears |
composer.shape |
band |
Visual layout of the input editor and status line |
composer.tokenRate |
false |
Show a live generation tok/s readout: on the working row next to the session title, or in the native composer bar right after the thinking level, where the last reading stays between turns. Estimated from streamed deltas and corrected by the provider's billed output count as each message completes. |
computer.backgroundFallback |
takeover |
What window input does when its background route is unavailable: rerun it in takeover and return focus to your app (macOS; elsewhere plain takeover), or refuse, which also keeps the agent from taking the foreground or opening macOS menus itself |
computer.display |
active |
Active window's display (active), all displays (all), or a native display id |
computer.enabled |
false |
Enable the scriptable host-desktop eval prelude (screenshots, input, accessibility) |
computer.maxHeight |
2400 |
Maximum screenshot height in pixels |
computer.maxWidth |
3840 |
Maximum screenshot width in pixels |
contextFiles.extra |
[] |
Extra instruction filenames loaded beside AGENTS.md. Use a JSON list of names, not paths, e.g. ["AGENTS.local.md"]; [] disables extras. Start a new session to load them. |
contextPromotion.enabled |
false |
Promote to the model's contextPromotionTarget on context overflow instead of compacting. Retry fallback switches are controlled by Retry Model Fallback |
cycleOrder |
["smol","default","slow"] |
No description provided. |
debug.enabled |
true |
Enable the debug tool for DAP-based debugging |
defaultThinkingLevel |
high |
Reasoning depth for thinking-capable models |
dev.autoqa |
true |
Automated tool issue reporting (xd://report_issue). On by default; the first report asks for consent, and denying it disables reporting until re-enabled explicitly |
dev.autoqaConsent |
unset |
No description provided. |
dev.autoqaPush.endpoint |
https://qa.omp.sh/v1/grievances |
Full URL receiving Auto QA JSON reports (default https://qa.omp.sh/v1/grievances) |
dev.autoqaPush.token |
No shipped default | No description provided. |
disabledExtensions |
[] |
No description provided. |
disabledProviders |
[] |
No description provided. |
display.cacheMissMarker |
false |
Show a divider after an assistant turn whose request lost (missed) the prompt cache |
display.collapseCompacted |
true |
Collapse pre-compaction history behind the summary divider on the live transcript; disable to keep the full transcript inline with dividers at each compaction point |
display.hideToolActivity |
false |
Hide model-initiated tool calls and results from the transcript |
display.pinnedAgents |
collapsed |
Pinned live-agent jump list above the editor (off hides it; collapsed shows a few rows with an expander; full lists all) |
display.shimmer |
classic |
Animation style for working/loading messages |
display.showTokenUsage |
false |
Show per-turn token usage on assistant messages |
display.showTurnTime |
false |
Show the total prompt-to-yield time (including tool calls) on assistant message usage rows |
display.smoothStreaming |
true |
Reveal assistant text and streamed tool input smoothly while chunks arrive |
display.subagentLivePreview |
false |
Show each pinned subagent's current (or most recent) tool call beneath its row |
doubleEscapeAction |
rewind |
What pressing ⎋ twice with an empty editor does: open the transcript rewind selector, open the session tree, or nothing |
edit.autoRepair.enabled |
false |
When an edit breaks a file's AST parse, ask the smol model to fix the broken region (validated by re-parse; falls back to a warning) |
edit.blackbox.enabled |
false |
Append full before/after source when an edit introduces an AST parse failure |
edit.blockAutoGenerated |
true |
Prevent editing of files that appear to be auto-generated (protoc, sqlc, swagger, etc.) |
edit.enforceSeenLines |
true |
Reject edits anchored on lines a prior read/search never displayed in full |
edit.fuzzyMatch |
true |
Accept high-confidence fuzzy matches for whitespace differences |
edit.fuzzyThreshold |
0.95 |
Similarity threshold (0-1) for accepting fuzzy matches |
edit.mode |
hashline |
Select the edit tool variant (replace, patch, hashline, or apply_patch) |
edit.modelVariants |
{} |
No description provided. |
edit.recoverInlineEdits |
true |
Execute edit payloads the model emits as plain text by converting them into edit tool calls |
edit.streamingAbort |
false |
Abort streaming edit tool calls when patch preview fails |
emojiAutocomplete |
true |
Suggest emojis from `:name:` shortcodes and expand text emoticons like `:D` or `:-)` |
enabledModels |
[] |
No description provided. |
enabledProviders |
[] |
No description provided. |
error.notify |
off |
Notify when the agent stops with an error |
eval.autoBackground.enabled |
false |
Automatically background long-running eval cells and deliver the result later |
eval.autoBackground.thresholdMs |
60000 |
No description provided. |
eval.autoProvision |
true |
Automatically create the managed JavaScript eval package environment on first install |
eval.js |
true |
Allow the eval tool to dispatch JavaScript cells to the in-process runtime |
eval.py |
true |
Allow the eval tool to dispatch Python cells to the IPython kernel |
eval.tools.enabled |
true |
Let eval cells define tools (@tool in Python, tool(fn) in JS) that task, agent(), and workpool() subagents can call |
eval.workpool.freshAgents |
false |
Spawn a new subagent for every workpool item instead of reusing workers or batching queued items |
exa.enabled |
true |
Enable the Exa web search provider |
exa.searchDelayMs |
1000 |
Minimum delay between Exa web search requests in milliseconds; set 0 to disable pacing |
expandThinkingBlocks |
false |
Keep finished thinking blocks expanded instead of collapsing them when the turn ends |
extendedContext |
false |
Use larger context windows where supported; may incur premium pricing. Off keeps default or standard-pricing windows |
extensionHandlers.toolCallTimeoutMs |
30000 |
Positive finite active-work timeout for extension tool_call handlers; invalid values use 30000ms, and time awaiting OMP-owned dialogs does not count |
extensions |
[] |
No description provided. |
externalThinking |
false |
Private scratchpad; not shown to user. Disables supported GPT, Claude, and Gemini reasoning |
features.unexpectedStopDetection |
mechanical |
Automatically recover when the assistant stops without a visible message. Smart also classifies text-only stops with a small model. |
fetch.enabled |
true |
Allow the read tool to fetch and process URLs |
find.enabled |
auto |
Enable the find tool: natural-language search for files and line ranges, judged by the judge model role. Auto enables it only when the judge role resolves to a native TypeSafe jev model |
followUpMode |
one-at-a-time |
How to drain follow-up messages after a turn completes |
gc.archive |
true |
No description provided. |
gc.blobs |
true |
No description provided. |
gc.coldArchiveAfterDays |
30 |
No description provided. |
gc.compress |
false |
No description provided. |
gc.compressAfterDays |
7 |
No description provided. |
gc.retainNewestGlobal |
20 |
No description provided. |
gc.retainNewestPerCwd |
10 |
No description provided. |
gc.stale |
false |
No description provided. |
gc.staleRetainDays |
30 |
No description provided. |
gc.staleRetainNewest |
20 |
No description provided. |
gc.wal |
true |
No description provided. |
generate_image.enabled |
false |
Enable the generate_image tool (text-to-image generation and editing). Exposed as an xd:// device when tools.xdev is on. |
git.enabled |
true |
Show git branch, status, and PR information in the TUI and watch repository metadata. |
github.cache.enabled |
true |
Cache rendered issue/PR view output in ~/.omp/cache/github-cache.db so repeated reads are free |
github.cache.hardTtlSec |
604800 |
Past the soft TTL the cached row is returned and refreshed in the background; past the hard TTL it is dropped (seconds; default 7 days) |
github.cache.softTtlSec |
300 |
Within this window, cached issue/PR view rows are returned directly (seconds; default 5 minutes) |
github.enabled |
false |
Enable the github tool (op-based dispatch for repository, issue, pull request, diff, search, checkout, push, and Actions watch workflows) |
glob.enabled |
true |
Enable the glob tool for glob-based file lookup |
goal.continuationModes |
["interactive"] |
Run modes where active goals may auto-continue between turns ("interactive", "rpc") |
goal.enabled |
true |
Enable per-session goal mode and the hidden goal tool |
goal.statusInFooter |
true |
Show token budget alongside the goal indicator in the status line |
grep.contextAfter |
3 |
Lines of context after each grep match |
grep.contextBefore |
1 |
Lines of context before each grep match |
grep.enabled |
true |
Enable the grep tool for regex content search |
hideThinkingBlock |
false |
Hide thinking blocks in assistant responses |
hindsight.apiToken |
No shipped default | Bearer token for authenticated Hindsight servers |
hindsight.apiUrl |
http://localhost:8888 |
Hindsight server URL (Cloud or self-hosted) |
hindsight.autoRecall |
true |
Recall memories on the first turn of each session |
hindsight.autoRetain |
true |
Retain transcript every N turns and at session boundaries |
hindsight.bankId |
No shipped default | Memory bank identifier (default: project name) |
hindsight.bankIdPrefix |
No shipped default | No description provided. |
hindsight.bankMission |
No shipped default | No description provided. |
hindsight.debug |
false |
No description provided. |
hindsight.mentalModelAutoSeed |
true |
At session start, create any built-in mental models (project-conventions, project-decisions, user-preferences) that do not yet exist on the bank. |
hindsight.mentalModelMaxRenderChars |
16000 |
No description provided. |
hindsight.mentalModelsEnabled |
true |
Read 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.recallBudget |
mid |
No description provided. |
hindsight.recallContextTurns |
1 |
No description provided. |
hindsight.recallMaxQueryChars |
800 |
No description provided. |
hindsight.recallMaxTokens |
1024 |
No description provided. |
hindsight.recallTimeoutMs |
30000 |
No description provided. |
hindsight.recallTypes |
["world","experience"] |
No description provided. |
hindsight.reflectTimeoutMs |
120000 |
No description provided. |
hindsight.requestTimeoutMs |
30000 |
No description provided. |
hindsight.retainContext |
omp |
No description provided. |
hindsight.retainEveryNTurns |
3 |
No description provided. |
hindsight.retainMission |
No shipped default | No description provided. |
hindsight.retainMode |
full-session |
full-session = upsert one document per session, last-turn = chunked |
hindsight.retainOverlapTurns |
2 |
No description provided. |
hindsight.retainTimeoutMs |
60000 |
No description provided. |
hindsight.scoping |
per-project-tagged |
global = one shared bank; per-project = isolated bank per cwd; per-project-tagged = shared bank with project tags so global + project memories merge on recall |
ida.enabled |
true |
Open executables read with `read` in IDA Pro (idalib) and enable the `ida` tool; inert when no IDA install is found |
ida.idleCloseSec |
900 |
Save and close IDA databases idle longer than this many seconds (0 = never); the exec namespace resets on reopen |
ida.installDir |
|
Directory containing libidalib, exported as IDADIR; empty auto-detects ($IDADIR, ida-config.json, standard install paths) |
ida.maxOpen |
4 |
Most IDA databases (omp.ida.* daemons in omp ps) open at once per project; opening another saves and closes the least recently used idle one |
ida.python |
|
Python interpreter that can import ida_domain and idapro; empty auto-detects |
images.autoResize |
true |
Resize large images to 2000x2000 max for better model compatibility |
images.blockImages |
false |
Prevent images from being sent to LLM providers |
images.describeForTextModels |
true |
When 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 |
images.questionTimeoutMs |
300000 |
Per-request timeout for the vision-model call behind read's ?q= image questions, in milliseconds. A stalled provider fails fast with a timeout error instead of blocking until manual abort. Set to 0 to disable the timeout. |
images.urls.backends |
["provider-files","tailscale","cloudflared","litterbox"] |
Ordered destinations tried when publishing images for provider access |
images.urls.bindHost |
127.0.0.1 |
Host the blob server binds to; loopback for tunnels, 0.0.0.0 for direct serving |
images.urls.command |
No shipped default | Argv template for the command backend; {file} is the image path, {mime}/{ext} optional. The last URL printed on stdout is used (e.g. pasta -b -f {file}) |
images.urls.credentials |
No shipped default | No description provided. |
images.urls.enabled |
false |
Publish outgoing images through the configured backend chain and send URL-fetching providers short URLs instead of inline base64. Falls back to inline automatically when every backend or a provider fetch fails |
images.urls.options |
{} |
No description provided. |
images.urls.publicBaseUrl |
No shipped default | Externally reachable base URL fronting the blob server (required for ssh, optional for direct) |
images.urls.sshRemotePort |
8787 |
Remote listen port of the ssh reverse forward that your web server proxies to |
images.urls.sshTarget |
No shipped default | user@host destination for the ssh reverse forward |
images.urls.ttlHours |
72 |
Serving window for locally hosted image URLs, measured from the last time a conversation sent them; resuming a conversation re-arms the window at the same link. 0 keeps links alive while the broker runs |
includeModelInPrompt |
true |
Surface the active model identifier in the system prompt so the agent knows which model it is |
includeWorkspaceTree |
false |
Render the workspace directory tree in the system prompt. WARNING: This can bust prompt caching across sessions when files are modified. |
inlineToolDescriptors |
auto |
Render full tool descriptors in the system prompt and strip top-level/nested descriptions from provider tool schemas so descriptor text is sent once. Auto enables this for Gemini models and disables it otherwise |
input.bareExitOnEmptySession |
true |
Submitting exactly `exit`, `quit`, or `q` (any case) before the first message quits instead of prompting the model |
input.bareSlashCommands |
false |
Submitting exactly a command name without the leading `/` (e.g. `model`, `compact`) runs that slash command; once the session has messages, press Enter twice to confirm |
interruptMode |
immediate |
When steering messages interrupt tool execution |
isolation.backend |
auto |
Backend used for subagent isolation and worktree cloning |
launch.enabled |
true |
Enable named bash services and proc:// supervision for shared long-running project processes |
live.voice |
sol |
Voice used by Codex-backed realtime voice sessions |
loop.conditionTimeoutMs |
30000 |
Max wait for a `/loop --while` / `--until` condition command before treating it as broken and stopping the loop. Set to 0 to wait indefinitely |
loop.mode |
prompt |
What happens between /loop iterations before re-submitting the prompt |
lsp.diagnosticsDeduplicate |
true |
Suppress post-edit LSP diagnostics already shown for a file; only surface new or changed ones |
lsp.diagnosticsOnEdit |
false |
Return LSP diagnostics after editing code files |
lsp.diagnosticsOnWrite |
true |
Return LSP diagnostics after writing code files |
lsp.enabled |
true |
Enable the lsp tool for code intelligence (definitions, references, diagnostics, rename) |
lsp.formatOnWrite |
false |
Automatically format code files using LSP after writing |
lsp.lazy |
true |
Start language servers on first use (lsp tool or editing a matching file type) instead of at session startup |
lsp.requestTimeout |
10 |
Seconds to wait for a language server's diagnostics, hover and other answers when the agent sets no timeout; late post-edit diagnostics wait at least this long. Raise it for servers that are slow on a cold start. The lsp tool's timeout argument can still raise or lower it per call |
lsp.shared |
true |
Start language servers through the per-project daemon broker. Each connection gets its own server. While another omp instance in the project is running, a released server stays warm and the next connection reuses it instead of cold-starting (falls back to private servers when unavailable) |
magicKeywords.enabled |
true |
Enable hidden notices for standalone ultrathink, orchestrate, workflowz, jevify keywords |
magicKeywords.jevify |
true |
Let standalone jevify append its hidden bulk-judge classification notice |
magicKeywords.orchestrate |
true |
Let standalone orchestrate append its hidden multi-agent orchestration notice |
magicKeywords.ultrathink |
true |
Let standalone ultrathink request maximum automatic thinking and append its hidden notice |
magicKeywords.workflow |
true |
Let standalone workflowz append its hidden eval workflow notice |
marketplace.autoUpdate |
notify |
Check for plugin updates on startup |
mcp.enableProjectConfig |
true |
Load .mcp.json/mcp.json from project root |
mcp.notificationDebounceMs |
500 |
Debounce window in milliseconds for MCP resource updates before injecting them into the conversation |
mcp.notifications |
false |
Inject MCP resource updates into the agent conversation |
mcp.renderMarkdownResults |
true |
Render non-JSON MCP text results as Markdown in the transcript |
mcp.startupTimeoutMs |
250 |
Wait this many milliseconds for initial MCP tool discovery; 0 waits until connections settle |
memories.enabled |
false |
No description provided. |
memories.fallbackTokenLimit |
16000 |
No description provided. |
memories.maxRawMemoriesForGlobal |
200 |
No description provided. |
memories.maxRolloutAgeDays |
30 |
No description provided. |
memories.maxRolloutsPerStartup |
64 |
No description provided. |
memories.minRolloutIdleHours |
12 |
No description provided. |
memories.phase1InputTokenLimit |
4000 |
No description provided. |
memories.phase2HeartbeatSeconds |
30 |
No description provided. |
memories.phase2LeaseSeconds |
180 |
No description provided. |
memories.phase2RetryDelaySeconds |
180 |
No description provided. |
memories.rolloutPayloadPercent |
0.7 |
No description provided. |
memories.stage1Concurrency |
8 |
No description provided. |
memories.stage1LeaseSeconds |
120 |
No description provided. |
memories.stage1RetryDelaySeconds |
120 |
No description provided. |
memories.summaryInjectionTokenLimit |
5000 |
No description provided. |
memories.threadScanLimit |
300 |
No description provided. |
memory.backend |
off |
Off, local summary pipeline, Mnemopi SQLite, Hindsight remote memory, or Sharpshooter |
minP |
-1 |
Minimum probability threshold (0-1, -1 = provider default) |
mnemopi.autoRecall |
true |
Recall local memories into the first turn of each session |
mnemopi.autoRetain |
true |
Retain completed conversation turns into local Mnemopi memory |
mnemopi.bank |
No shipped default | Optional shared bank base name. Per-project modes derive project-local banks from it. |
mnemopi.dbPath |
No shipped default | Optional SQLite DB path. Defaults to the agent memories directory. |
mnemopi.debug |
false |
No description provided. |
mnemopi.embeddingApiKey |
No shipped default | Optional embedding API key passed to Mnemopi |
mnemopi.embeddingApiUrl |
No shipped default | Optional OpenAI-compatible embedding endpoint passed to Mnemopi |
mnemopi.embeddingModel |
No shipped default | Advanced: explicit embedding model id that overrides the variant. Leave empty to use mnemopi.embeddingVariant. |
mnemopi.embeddingVariant |
en |
Local embedding model family. en = stronger English model; multilingual = cross-language model. Changing this rebuilds existing memory embeddings on next start. |
mnemopi.enhancedRecall |
false |
Cache recall results for repeated and similar queries with identical options; any memory write clears it |
mnemopi.injectionTokenLimit |
5000 |
No description provided. |
mnemopi.llmApiKey |
No shipped default | Optional LLM API key for Mnemopi remote mode |
mnemopi.llmBaseUrl |
No shipped default | Optional OpenAI-compatible LLM endpoint for Mnemopi remote mode |
mnemopi.llmMode |
smol |
Use no LLM, the online tiny model (the TINY role from /models, else @smol), or a remote OpenAI-compatible endpoint |
mnemopi.llmModel |
No shipped default | Optional LLM model name for Mnemopi remote mode |
mnemopi.noEmbeddings |
false |
Force deterministic FTS-only recall instead of vector embeddings |
mnemopi.polyphonicRecall |
false |
Fuse recall with graph, fact, vector and temporal voices so linked memories surface without a keyword match |
mnemopi.proactiveLinking |
false |
Ingest new memories into the episodic graph as they are stored, linking them to related entities and memories |
mnemopi.recallContextTurns |
3 |
No description provided. |
mnemopi.recallLimit |
8 |
No description provided. |
mnemopi.recallMaxQueryChars |
4000 |
No description provided. |
mnemopi.retainEveryNTurns |
4 |
No description provided. |
mnemopi.scoping |
per-project |
global = one shared bank; per-project = isolated bank per cwd; per-project-tagged = project-local writes plus global recall visibility |
model.loopGuard.checkAssistantContent |
true |
Apply loop guard to assistant prose messages in addition to thinking logs |
model.loopGuard.enabled |
true |
Enable automatic stream loop detection for model reasoning and prose |
model.loopGuard.toolCallReminder |
true |
When 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.enabled |
true |
Detect consecutive identical tool calls across turns and inject a corrective steer |
model.toolCallLoopGuard.exemptTools |
["wait"] |
Tool names that may repeat consecutively without triggering the cross-turn loop guard |
model.toolCallLoopGuard.threshold |
5 |
Consecutive identical tool calls required before the corrective steer is injected |
modelPresets |
{} |
No description provided. |
modelProviderOrder |
[] |
No description provided. |
modelRoleStorage |
global |
Where model selector role assignments are saved |
modelRoles |
{} |
No description provided. |
modelTags |
{} |
No description provided. |
omitThinking |
false |
Instruct upstream providers to completely omit thinking summaries from responses (where supported) |
paste.largeMenuThreshold |
100 |
When 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). |
personality |
default |
Communication style rendered into the system prompt's personality block |
plan.autosave |
false |
Automatically save approved plans to disk when plan mode completes |
plan.autosaveDir |
No shipped default | Directory for autosaved plans. Supports ~, absolute, and cwd-relative paths. Empty uses <project>/.omp/plans/. |
plan.defaultOnStartup |
false |
Automatically enter plan mode at the start of every new session |
plan.enabled |
true |
Enable plan mode for read-only exploration and planning before execution |
power.sleepPrevention |
idle |
Prevent the system sleeping during active sessions. Each level is cumulative — it adds the flags of all lower levels. |
presencePenalty |
-1 |
Penalty for introducing already-present tokens (-1 = provider default) |
prewalk.auto |
off |
Ask the native judge resolved through the 'judge' role whether each new top-level user task front-loads its hard reasoning. Needs a native judge; without one nothing is classified. Independent of Enable Prewalk. |
prewalk.autoTarget |
@smol |
Model or role (default '@smol') auto-prewalk hands off to at the first edit/write. |
prewalk.enabled |
false |
Start on the active model, then switch to a fast/cheap model (default the 'smol' role) at the first edit/write after the plan nudge's todo list exists — the strong model plans, commits the todos, and starts the implementation before handing off. Overridable per session with --prewalk / --no-prewalk. |
proseOnlyThinking |
true |
Omit code blocks from thinking summaries and replace them with an ellipsis |
provider.appendOnlyContext |
auto |
Cache 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. |
providers.anthropic.serverSideFallback |
false |
When a Claude Fable 5 / Mythos 5 request is blocked by Anthropic's safety classifier, retry it on Claude Opus 5 server-side (Anthropic `server-side-fallback-2026-06-01` beta). Opt-in — leaving this off preserves the pre-fallback behavior for every request. |
providers.anthropic.slowMode |
off |
No description provided. |
providers.antigravityEndpoint |
auto |
Endpoint routing strategy for google-antigravity providers (chat, search, image, discovery) |
providers.autoThinkingMaxEffort |
xhigh |
Highest effort the `auto` classifier may resolve. `xhigh` keeps the classifier one tier below the top, so only an explicit `ultrathink` reaches `max`; `max` lets a turn the classifier judges exceptional bill the top tier on models that expose it. |
providers.cacheRetention |
auto |
Prompt-cache retention forwarded to providers that support it (Anthropic, Bedrock, OpenRouter, OpenAI) |
providers.cacheWarming |
idle |
Re-send the last request with a one-token output budget shortly before its prompt-cache entry expires |
providers.fetch |
auto |
Reader backend priority for the fetch/read URL tool |
providers.fireworksTier |
standard |
Serving 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. |
providers.kimiApiFormat |
auto |
API format for Kimi Code provider (auto follows live model metadata) |
providers.maxInFlightRequests |
{} |
Maximum concurrent LLM requests per provider id (for example "openai" or "anthropic"), shared across local OMP processes with this config root. Omitted providers are unlimited. |
providers.muse-code.storeResponses |
false |
Store Muse Code results on Meta's servers so a turn whose connection drops is recovered instead of re-run. Stored runs keep prompts and outputs on Meta's side. |
providers.ollama-cloud.maxConcurrency |
3 |
Maximum concurrent Ollama Cloud subagent runs per process; 0 disables the provider-specific limit |
providers.openaiLiveSteering |
true |
Deliver messages typed while a GPT-6 response streams into that response over the Codex WebSocket, instead of waiting for the next tool boundary |
providers.openaiWebsockets |
auto |
Websocket policy for OpenAI Codex models (auto uses model defaults, on forces, off disables) |
providers.openrouterVariant |
default |
Default routing-variant suffix appended to OpenRouter model IDs (overridden when the selector already names a variant) |
providers.streamFirstEventTimeoutSeconds |
-1 |
Seconds to wait for the first model stream event; -1 uses provider/env defaults, 0 disables the watchdog |
providers.streamIdleTimeoutSeconds |
-1 |
Seconds a model stream may stay silent between events; -1 uses provider/env defaults, 0 disables the watchdog |
providers.tinyModelDevice |
default |
Inference backend for local tiny models (titles + memory): an ONNX execution provider, or `mlx` to download MLX weights and run them through mlx-lm on Apple silicon. Default uses CPU-only ONNX. The PI_TINY_DEVICE env var overrides this. |
providers.tinyModelDtype |
default |
ONNX quantization/precision for local tiny models. Default uses each model's shipped dtype (q4); lower precision is faster, higher is more faithful. Ignored by the MLX backend (its repos are pre-quantized 4-bit). The PI_TINY_DTYPE env var overrides this. |
providers.webSearchTimeoutSeconds |
60 |
Hard timeout for each provider's search transport before web_search advances to the next fallback, in seconds (maximum 300) |
python.interpreter |
|
Optional path to an exact Python executable. When set, automatic Python runtime discovery is skipped. |
python.kernelMode |
session |
Keep the IPython kernel alive across eval calls or start fresh each time |
ratchet.enabled |
false |
Enable the ratchet eval/hillclimb prelude; /ratchet turns it on for the current session |
read.defaultLimit |
300 |
Default number of lines returned when agent calls read without a limit |
read.renderMarkdown |
false |
Render Markdown read results as formatted terminal Markdown previews instead of raw source |
read.summarize.enabled |
true |
Return structural code summaries when read is called without an explicit selector |
read.summarize.minBodyLines |
4 |
Minimum multiline body or literal length before read summaries collapse it |
read.summarize.minCommentLines |
6 |
Minimum multiline block comment length before read summaries collapse it |
read.summarize.minTotalLines |
100 |
Files with fewer total lines are read verbatim instead of structurally summarized |
read.summarize.prose |
false |
Return structural summaries for Markdown and plain text reads |
read.summarize.unfoldLimit |
100 |
Hard 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. |
read.summarize.unfoldUntil |
50 |
BFS-unfold elidable spans until the summary is at least this many visible lines. 0 keeps only the outermost elisions. |
read.toolResultPreview |
false |
Render read tool results inline in the transcript instead of summary rows |
readLineNumbers |
false |
Prepend line numbers to read tool output by default |
recap.enabled |
true |
Generate a brief LLM recap of where things stand after the terminal has been idle |
recap.idleSeconds |
240 |
Seconds to wait while idle before showing the recap |
repetitionPenalty |
-1 |
Penalty for repeated tokens (-1 = provider default) |
retry.baseDelayMs |
500 |
No description provided. |
retry.enabled |
true |
No description provided. |
retry.fallbackChains |
{} |
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. An id-prefixed wildcard ("openrouter/google/*") re-prefixes the failing model's bare id (google-antigravity/gemini-x -> openrouter/google/gemini-x) and, used as a key, matches only that provider's ids under the prefix. A fallback entry may carry an explicit thinking suffix ("provider/model:low", ":high", ":max", ":off"); a bare entry inherits the failing turn's effort, and "provider/*" entries always inherit. |
retry.fallbackOn |
any |
Which failed requests may switch to a configured fallback model |
retry.fallbackRevertPolicy |
cooldown-expiry |
When to return to the primary model after a fallback |
retry.maxDelayMs |
300000 |
Maximum 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). 0 disables the ceiling — to let the session auto-resume through provider-stated quota resets. |
retry.maxRetries |
10 |
Maximum retry attempts on API errors |
retry.modelFallback |
true |
Allow retry recovery to switch to models in retry.fallbackChains after provider errors. Independent of Auto-Promote Context |
retry.usageAwareFallback |
false |
Use reliable coding-plan quota reports to prefer same-provider accounts, then configured fallback models, before a hard usage limit. Ordinary configured API keys are excluded. |
retry.usageReservePct |
10 |
Treat a coding-plan model as near its limit below this remaining percentage. Unknown or unmapped usage keeps the primary model. |
retry.usageReservePolicy |
confirm |
What to do when every same-provider coding-plan account is inside the reserve margin. |
retry.waitForUsageReset |
false |
When a provider reports usage-limit exhaustion with a reset time (5-hour or weekly quota windows on any provider), sleep until the reset instead of failing fast past retry.maxDelayMs. Waits are abortable (⎋) but also hold subagents, so leave off for unattended runs. |
searxng.basicPassword |
No shipped default | No description provided. |
searxng.basicUsername |
No shipped default | No description provided. |
searxng.categories |
No shipped default | No description provided. |
searxng.endpoint |
No shipped default | Base URL of a self-hosted SearXNG instance used for web search |
searxng.engines |
No shipped default | No description provided. |
searxng.language |
No shipped default | No description provided. |
searxng.safesearch |
No shipped default | No description provided. |
searxng.token |
No shipped default | No description provided. |
secrets.enabled |
false |
Obfuscate configured secrets and redact credential-shaped tokens before sending to AI providers |
security.enabled |
false |
Enable OMP-native security scan planning, execution, and the read-only security:// resource namespace |
setupVersion |
0 |
No description provided. |
share.redactSecrets |
true |
Run the secret obfuscator over /share snapshots before upload (uses the secrets.* config) |
share.serverUrl |
https://my.omp.sh/s |
Share viewer/upload base used by /share (encrypted blob upload + viewer; links are <base>/<id>#<key>) |
share.store |
blob |
Where /share uploads the encrypted session blob |
sharpshooter.injectionTokenLimit |
15000 |
No description provided. |
sharpshooter.intervalMinutes |
5 |
No description provided. |
sharpshooter.minPromptLength |
16 |
No description provided. |
sharpshooter.model |
No shipped default | Model selector for extraction/consolidation, empty = smol role |
shellMinimizer.enabled |
true |
Compress verbose shell output (git, npm, cargo, etc.) before returning it to the agent |
shellMinimizer.except |
[] |
No description provided. |
shellMinimizer.legacyFilters |
No shipped default | No description provided. |
shellMinimizer.maxCaptureBytes |
4194304 |
No description provided. |
shellMinimizer.only |
[] |
No description provided. |
shellMinimizer.settingsPath |
No shipped default | No description provided. |
shellMinimizer.sourceOutlineLevel |
default |
Source outline mode for cat/read of source files: default or aggressive |
shellPath |
No shipped default | No description provided. |
showHardwareCursor |
true |
Show terminal cursor for IME support |
skillful |
true |
List available skills in the system prompt; disable to save context and toggle per-session with /skillful |
skills.customDirectories |
[] |
No description provided. |
skills.enableAgentsProject |
true |
No description provided. |
skills.enableAgentsUser |
true |
No description provided. |
skills.enableClaudeProject |
true |
No description provided. |
skills.enableClaudeUser |
false |
No description provided. |
skills.enableCodexUser |
false |
No description provided. |
skills.enablePiProject |
true |
No description provided. |
skills.enablePiUser |
true |
No description provided. |
skills.enableSkillCommands |
true |
Register skills as /skill:name commands |
skills.enabled |
true |
No description provided. |
skills.ignoredSkills |
[] |
No description provided. |
skills.includeSkills |
[] |
No description provided. |
skills.registryUrl |
https://skills.omp.sh |
Skillshare registry used by `omp skill` to install, search, and publish skills (https://host[:port]) |
snapcompact.shape |
auto |
Frame shape snapcompact prints text with (compaction archive and inline imaging). Auto picks a shape tuned for the current model. |
snapcompact.systemPrompt |
none |
Experimental: render selected system prompt text as dense PNG image(s) and attach to the first user message (vision models only). Saves tokens; loses prompt caching for imaged text. |
snapcompact.toolResults |
false |
Experimental: render large tool results, the newest one included, as dense PNG image(s) instead of text (vision models only). Saves tokens on accumulated search and command output; read results stay text unless the model is known to edit exactly from images. |
speech.enabled |
false |
Speak the assistant's output aloud through the speakers as it streams |
speech.enhanced |
false |
Rewrite 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.mode |
assistant |
What to speak: all = assistant messages + thinking; assistant = messages only; yield = only the final message at turn end |
speech.speed |
1 |
Speaking rate when reading the assistant's output aloud. 1 = normal; clamped to 0.5–2.5 |
speech.voice |
af_heart |
Kokoro voice used when speaking the assistant's output aloud |
speechgen.enabled |
false |
Enable the tts tool for on-device (Kokoro) or xAI Grok Voice speech-file synthesis |
spelling.autocomplete |
auto |
Show predicted word completions as inline hints: ⇥ accepts with a space, → without |
spelling.autocorrect |
false |
Apply confident macOS spelling corrections after completed words |
spelling.typoDetection |
true |
Mark misspelled prompt words with the active macOS dictionaries |
startup.changelogMode |
summary |
Choose whether update notes start as a summary, full details, or stay hidden |
startup.checkUpdate |
true |
Check for omp updates on startup |
startup.quiet |
false |
Skip welcome screen and startup status messages |
startup.setupWizard |
true |
Show newly added onboarding steps once per setup version |
startup.showSplash |
false |
Show the full animated setup splash on normal interactive startup without rerunning setup. Quiet Startup still suppresses it. |
statusLine.compactThinkingLevel |
true |
Show the thinking level as a single icon on the model name instead of a separate ` · <level>` suffix; in Tern's composer, as the model chip's icon instead of a separate chip (click the icon to cycle it). |
statusLine.contextLine |
embedded |
How the line between the left and right segments reflects context usage (box composer only) |
statusLine.leftSegments |
["vim","model","mode","path","git","pr"] |
No description provided. |
statusLine.preset |
default |
Pre-built status line configurations |
statusLine.rightSegments |
["session_name","token_total","cost","context_pct"] |
No description provided. |
statusLine.segmentOptions |
{} |
No description provided. |
statusLine.separator |
powerline-thin |
Style of separators between segments |
statusLine.sessionAccent |
true |
Use the session name color for the editor border and status line gap |
statusLine.showHookStatus |
true |
Display hook status messages below the status line |
statusLine.transparent |
false |
Use the terminal's default background for the status line instead of the theme's `statusLineBg`. Powerline end caps are dropped because they need a contrasting fill to bridge into the surrounding terminal. |
steeringMode |
one-at-a-time |
How to process queued messages while agent is working |
stream.redactPatterns |
[] |
Additional regular expressions redacted from every streamed row, on top of env/secrets.yml values and built-in credential shapes |
stream.serverUrl |
https://live.omp.sh |
Live stream server used by `omp stream` (https://host[:port]); viewers watch at <base>/<your Stencil username> |
stt.enabled |
false |
Enable speech-to-text input via microphone |
stt.language |
en |
No description provided. |
stt.submitTrigger |
never |
Choose when speech dictation automatically submits: Never, Release (2+ words), Release with complete sentence, or When I Say Submit. |
symbolPreset |
unicode |
Glyph set for icons and symbols (Unicode, Nerd Font, or ASCII) |
task.agentAccountPools |
{} |
No description provided. |
task.agentAdvisor |
{} |
No description provided. |
task.agentCompactionThresholdOverrides |
{} |
No description provided. |
task.agentIdleTtlMs |
420000 |
How long an idle subagent stays live in memory before being parked to disk (ms). Parked agents are revived automatically when messaged or resumed. 0 keeps idle agents live until exit. |
task.agentModelOverrides |
{} |
No description provided. |
task.agentPrewalk |
{} |
No description provided. |
task.agentServiceTierOverrides |
{} |
No description provided. |
task.agentSoftRequestBudget |
{} |
No description provided. |
task.batch |
true |
Switch the task tool to its batch shape: one call carries { context, tasks[] } — one subagent per item, with an optional per-item agent (defaulting to the session spawn-policy agent), 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. |
task.completionProbe |
true |
Ask a working subagent, through a cached side request like /btw, to estimate how complete its task is: after 2, 5, 10 and 30 more minutes, then hourly. The estimate shows next to the subagent in wait and task views. Only subagents spawned by the main agent of an interactive session are asked; print, RPC, ACP and SDK runs never probe. |
task.disabledAgents |
[] |
No description provided. |
task.eager |
default |
How strongly to push delegating work to subagents |
task.enableEffort |
false |
Expose the optional effort parameter on task spawns, allowing callers to override each subagent's thinking level |
task.enableLsp |
false |
Allow subagents spawned via the task tool to use the lsp tool. Off by default to keep subagents cheap; enable when LSP-aware delegation is worth the extra tokens. |
task.isolation.apply |
true |
Automatically apply successful isolated task changes to the parent checkout; disable to retain patch or branch artifacts |
task.isolation.commits |
generic |
Commit message style for nested repo changes (generic or AI-generated) |
task.isolation.enabled |
false |
Allow per-task isolation with `isolated: true`; tasks without it run in the shared checkout |
task.isolation.merge |
patch |
How isolated task changes are integrated (patch apply or branch merge) |
task.maxConcurrency |
32 |
Maximum number of subagents running concurrently |
task.maxEffort |
max |
Maximum reasoning effort allowed for the task tool's per-spawn effort hint. Lower values prevent callers from escalating subagents above this ceiling; the default preserves the model's full range. |
task.maxRecursionDepth |
2 |
How many levels deep subagents can spawn their own subagents |
task.maxRuntimeMs |
0 |
Hard 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. |
task.prewalk |
false |
Arm prewalk for the bundled generic `task` subagent: it starts on its resolved model, plans and begins the implementation, then hands off to the 'smol' role at its first edit/write. Per-agent overrides (task.agentPrewalk, configured from the /agents hub) and user agent `prewalk` frontmatter apply regardless of this toggle. |
task.showResolvedModelBadge |
false |
Display the actual model ID used by each subagent in the task widget status line |
task.softRequestBudget |
200 |
Soft per-subagent request budget (assistant requests per run). Crossing it injects a wrap-up steering notice (see task.softRequestBudgetNotice); at 1.5x the budget the run is force-stopped and the agent must hand back its partial findings. 0 disables the guard. Bundled scout/sonic agents cap out at a lower built-in budget, so a value below that cap still applies to them. A task.agentSoftRequestBudget entry replaces this budget for the agent it names. |
task.softRequestBudgetNotice |
true |
Inject one steering notice when a subagent crosses its soft request budget, asking it to wrap up before the 1.5x forced-yield stop. |
task.speculativeLaunch |
true |
Start each batch subagent as soon as its tasks[] item finishes streaming instead of waiting for the whole task call. Launched agents are aborted if the finished call fails validation, is blocked, or its arguments change. Requires auto-allowed task approval and no extension tool lifecycle handlers. |
task.structured |
false |
Expose outputSchema/schemaMode on the task tool and return subagent results through the yield tool, validated against caller or agent output schemas. Off: task subagents have no yield tool and return their final message as plain text, except agents whose definition sets structured: true. Eval agent()/workpool spawns always keep structured results. |
tasks.todoClearDelay |
60 |
Delay before completed or abandoned todos are removed from the todo widget |
telemetry.otlpExportEnabled |
true |
Allow OMP to export traces, logs, and metrics using OTEL_* endpoints. Changes take effect on the next launch. |
temperature |
-1 |
Sampling temperature (0 = deterministic, 1 = creative, -1 = provider default) |
terminal.programStatus |
true |
Report whether the agent is working, waiting on you, done, or failed over OSC 7501, for terminal tab indicators and agent inboxes |
terminal.showImages |
true |
Render images inline in the terminal |
terminal.showProgress |
false |
Emit OSC 9;4 indeterminate progress while the agent or context maintenance is running (always on in Tern) |
textVerbosity |
medium |
OpenAI Responses and Codex response verbosity (low, medium, or high) |
theme.dark |
titanium |
Theme used when the terminal has a dark background |
theme.light |
light |
Theme used when the terminal has a light background |
thinkingBudgets.high |
16384 |
No description provided. |
thinkingBudgets.low |
2048 |
No description provided. |
thinkingBudgets.max |
32768 |
No description provided. |
thinkingBudgets.medium |
8192 |
No description provided. |
thinkingBudgets.minimal |
1024 |
No description provided. |
thinkingBudgets.xhigh |
32768 |
No description provided. |
tier.advisor |
none |
Service Tier for the advisor model. None = standard processing; Inherit = match the main agent's live per-family tiers; pick a value to apply it to the advisor model's family. |
tier.anthropic |
none |
Processing tier for Claude requests. `priority` realizes fast mode (`speed: "fast"`) on supported direct Anthropic models; ignored on Bedrock/Vertex Claude and via OpenRouter. |
tier.google |
none |
Processing tier for Gemini (Google AI Studio + Vertex) requests, and Google-family models routed via OpenRouter (none = omit). Sent as the top-level `serviceTier` field. |
tier.openai |
none |
Processing tier for OpenAI / OpenAI-Codex requests, and OpenAI-family models routed via OpenRouter (none = omit). Sent as `service_tier`. |
tier.subagent |
inherit |
Service Tier for spawned task/eval subagents. Inherit = match 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. |
title.generator |
fork |
What names an untitled session from the user's messages |
title.icons |
nf+emoji |
Icon and short code that head new generated or /rename session titles |
title.refreshOnReplan |
true |
Refresh generated session titles after todo init replans unless the title was set by the user |
todo.eager |
default |
How strongly to push automatic todo-list creation after the first message |
todo.enabled |
true |
Enable the todo tool for task tracking |
todo.reminders |
true |
Remind the agent to complete todos before stopping |
todo.remindersMax |
3 |
Maximum number of todo reminders before giving up |
tools.abortOnFabricatedResult |
true |
With 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.approval |
{} |
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. |
tools.approvalMode |
yolo |
Default approval behavior for tool calls. 'Always ask' auto-approves read-only tools only. 'Write' auto-approves read and workspace-write tools. 'Yolo' auto-approves all tiers; user policy may still prompt or block. |
tools.artifactHeadBytes |
20 |
Amount of head content kept inline alongside the tail when output spills to artifact (middle elision). 0 disables — keep tail only. |
tools.artifactMaxBytes |
16 |
Maximum size of the artifact file saved for streaming tool output (bash, python, js eval). Larger output keeps its beginning (up to 3 MB) and its most recent remainder, with a truncation notice between them. 0 = unlimited. |
tools.artifactSpillThreshold |
50 |
Tool output above this size is saved as an artifact; tail is kept inline |
tools.artifactTailBytes |
20 |
Amount of tail content kept inline when output spills to artifact |
tools.artifactTailLines |
500 |
Maximum lines of tail content kept inline when output spills to artifact |
tools.format |
auto |
Controls 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. |
tools.intentTracing |
true |
Ask the agent to describe the intent of each tool call before executing it |
tools.maxTimeout |
0 |
Maximum timeout in seconds the agent can set for any tool (0 = no limit) |
tools.outputMaxColumns |
768 |
Per-line byte cap for streaming tool outputs (bash, python, js eval) and `read`. Lines wider than this are ellipsis-truncated; remaining bytes up to the next newline are dropped. 0 disables. |
tools.speculativeExecution.enabled |
false |
Enable the discard-safe first slice: validated local reads through direct read calls and nested eval. Network requests, provider completions, and live filesystem writes are not part of this baseline. |
tools.speculativeExecution.maxInFlight |
2 |
Maximum number of validated local reads allowed to run before normal dispatch. |
tools.xdev |
true |
Mount rarely-used (discoverable) tools under xd:// device URLs driven via read/write instead of shipping their schemas on every request. Sessions whose explicit tool list grants read but omits write mount devices through a device-only write transport (only local:// scratch stays writable besides devices). Disable to expose every enabled tool top-level. |
tools.xdevDocs |
catalog |
Choose which mounted-device docs and schemas are inlined in the system prompt. Built-ins keeps core tools inline while MCP and extension tools stay on-demand. |
tools.xdevInlineDevices |
[] |
When xd:// Prompt Docs is Built-ins Only, inline dynamic devices whose names match these glob patterns (for example mcp__context_mode_*). Catalog Only ignores this setting. |
topK |
-1 |
Sample from top-K tokens (-1 = provider default) |
topP |
-1 |
Nucleus sampling cutoff (0-1, -1 = provider default) |
treeFilterMode |
default |
Default filter mode when opening the session tree |
tts.localSpeed |
1 |
Speaking rate of the local TTS backend (tts tool, omp say). 1 = normal; clamped to 0.5–2.5 |
tts.localVoice |
af_heart |
Kokoro voice used by the local TTS backend (American/British, female/male) |
ttsr.builtinRules |
true |
Load the default rules shipped with the agent (override individually with ttsr.disabledRules) |
ttsr.contextMode |
discard |
What to do with partial output when TTSR triggers |
ttsr.disabledRules |
[] |
Rule names to ignore entirely (applies to bundled defaults and your own rules) |
ttsr.enabled |
true |
Interrupt the agent mid-stream when output matches rule patterns (Time-Traveling Stream Rules) |
ttsr.interruptMode |
always |
When to interrupt mid-stream vs inject warning after completion |
ttsr.judge |
auto |
Ask the judge model role each `question` rule about completed replies, reasoning, and tool calls; a yes injects the rule as a warning |
ttsr.repeatGap |
10 |
Messages before a rule can trigger again |
ttsr.repeatMode |
once |
How rules can repeat: once per session or after a message gap |
tui.autoGraph |
always |
Draw a chart under numeric tables in the agent's answers, in your theme's colors, on terminals that show graphics |
tui.codexResetFireworks |
false |
Celebrate unscheduled Codex weekly usage resets and newly banked saved resets with a top-third fireworks overlay that remains until ⎋ |
tui.completeScrollback |
false |
Send transcript rows pushed off screen by a growing HUD or dialog straight to scrollback; when it shrinks, blank rows sit between the transcript and the input until new output fills them |
tui.hyperlinks |
auto |
Wrap paths and URLs in OSC 8 hyperlinks for terminal-native click-to-open (auto: detect support; off: never; always: unconditional) |
tui.imeSafeCursor |
false |
Move the prompt's bottom border to a separate row so macOS IME preedit cannot displace it |
tui.maxInlineImageColumns |
100 |
No description provided. |
tui.maxInlineImageRows |
20 |
No description provided. |
tui.maxInlineImages |
8 |
No description provided. |
tui.mouse |
false |
Capture mouse clicks in the main session so live subagent cards and HUD rows focus on click, with a hover highlight on the target. Native text selection becomes ⇧+drag and wheel scroll becomes ⇧+wheel while on |
tui.reactions |
true |
Invite the agent to react to your message with an emoji badge on its bubble |
tui.renderMermaid |
true |
Render Mermaid fenced code blocks as ASCII diagrams |
tui.renderSvg |
true |
Invite the agent to draw diagrams and charts as SVG, rendered inline as images on terminals that show graphics |
tui.resizeScrollback |
rebuild |
How a settled terminal resize refreshes transcript rows retained in terminal scrollback |
tui.textSizing |
false |
Render 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. |
tui.tight |
false |
Remove the 1-character horizontal padding from the left and right of the terminal output |
tui.titleSpinner |
braille |
Glyph set for the working-state spinner in the terminal title — braille sweep, filling moon, single-dot cycle, or ASCII-safe line |
tui.titleState |
true |
Show the agent run state in the terminal title's separator — an animated spinner while working (a static ':' under WSL), '>' when it's your turn, '!' when the agent is waiting on you |
tui.vimMode |
false |
Modal prompt editing. ⎋ leaves Insert mode; Normal mode has hjkl, 0, $, ^, w, b, e, gg, G, counts, x/D/C, dd/yy, p and u; operators take motions or text objects (diw, ca(, dap); v/V start a Visual selection that y copies and d deletes |
tui.vimModeDisplay |
text |
How the current Vim mode appears in the status line |
update.channel |
stable |
Update channel used by omp update and the startup update check |
vault.enabled |
false |
Enable 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. |
web_search.enabled |
true |
Enable the web_search tool for live web results |
workspace.additionalDirectories |
[] |
Extra workspace directories added to every session as additional roots (multi-root workspace). Managed live via /add-dir and /remove-dir. Paths resolve relative to cwd; absolute paths recommended. The agent is told these roots exist and can read/grep/glob them. |
worktree.base |
No shipped default | Base directory for agent-managed worktrees — task-isolation copies, `github` PR checkouts, and `omp worktree` cleanup all live here. Unset uses ~/.omp/wt. Must be an absolute or ~-relative path; relative paths are ignored. The OMP_WORKTREE_DIR env var overrides this. |
worktree.cleanSource |
false |
When creating a worktree with `/wt`, reset tracked changes and remove untracked files from the original checkout after carrying them over |
worktree.clone |
true |
New worktrees from `github pr_checkout` and `git worktree add` in bash start as a copy-on-write clone of the current checkout so ignored build artifacts (node_modules, target) carry over; falls back to a plain checkout when the filesystem cannot clone |
worktree.onExit |
keep |
What to do on exit with worktrees created since omp started (on start or with `/wt`) |
worktree.onStart |
off |
Whether fresh interactive sessions start in a new linked worktree |