Settings

August 16, 2026 · View on GitHub

OMK uses JSON settings files with project settings overriding global settings, except settings explicitly marked global-only.

LocationScope
~/.omk/agent/settings.jsonGlobal (all projects)
.omk/settings.jsonProject (current directory)

Edit directly or use /settings for common options.

All Settings

Model & Thinking

SettingTypeDefaultDescription
defaultProviderstring-Default provider (e.g., "anthropic", "openai")
defaultModelstring-Default model ID
defaultThinkingLevelstring-"off", "minimal", "low", "medium", "high", "xhigh", "max", "ultra"
hideThinkingBlockbooleanfalseHide thinking blocks in output
thinkingBudgetsobject-Custom token budgets per thinking level
reasoningRouterLearningobject-Opt-in v4 router learning bias (global settings file only)
adaptorchBridgeobject-Opt-in AdaptOrch advisory bridge for the auto thinking-level resolver (global settings file only)

thinkingBudgets

{
  "thinkingBudgets": {
    "minimal": 1024,
    "low": 4096,
    "medium": 10240,
    "high": 32768
  }
}

reasoningRouterLearning

{
  "reasoningRouterLearning": {
    "enabled": false
  }
}

This opt-in remains global-only, but its default data is isolated per repository or git worktree under ~/.omk/agent/router-feedback/repositories/<opaque-scope>/. The scope is derived from the canonical worktree root and never stores the raw path. Set biasSnapshotPath or feedbackLedgerPath only when intentionally overriding that isolation with fixed paths.

adaptorchBridge

Global-only, default-off lifecycle for a future v4 advisory source. The timeout, TTL, consult-budget, and circuit-breaker controls are wired, but the current transport is a no-op and cannot change the resolved level. A project-scope .omk/settings.json value is ignored by design.

{
  "adaptorchBridge": {
    "enabled": false,
    "ttlMs": 300000,
    "timeoutMs": 1500,
    "maxConsultsPerSession": 5,
    "failureThreshold": 3
  }
}

UI & Display

SettingTypeDefaultDescription
themestring"dark"Theme name ("dark", "light", or custom)
quietStartupbooleanfalseHide startup header
collapseChangelogbooleantrueShow condensed changelog after updates (set false for the full "What's New" block)
footerSystemMetricsbooleanfalseShow system-wide CPU/MEM usage in the footer stats line
enableInstallTelemetrybooleantrueSend an anonymous install/update version ping after first install or changelog-detected updates. This does not control update checks
doubleEscapeActionstring"tree"Action for double-escape: "tree", "fork", or "none"
treeFilterModestring"default"Default filter for /tree: "default", "no-tools", "user-only", "labeled-only", "all"
editorPaddingXnumber0Horizontal padding for input editor (0-3)
autocompleteMaxVisiblenumber5Max visible items in autocomplete dropdown (3-20)
showHardwareCursorbooleanfalseShow the terminal cursor while TUI positions it for IME support
pinStatusSidebarbooleanfalsePin the bottom status bar as a responsive right rail (opencode-style): width scales with the terminal (~26%, 34–48 cols), the MCP roster grows on taller terminals, and the content column shrinks to match so the prompt is never covered. Toggle anytime with Ctrl+Q. Also enabled by OMK_PIN_STATUS_SIDEBAR=1

Telemetry and update checks

enableInstallTelemetry only controls the anonymous install/update ping to the OMK install telemetry endpoint. Opting out of telemetry does not disable update checks; OMK can still fetch the OMK latest-version endpoint to look for the latest version.

Set OMK_SKIP_VERSION_CHECK=1 to disable the OMK version update check. Use --offline or OMK_OFFLINE=1 to disable all startup network operations described here, including update checks, package update checks, and install/update telemetry.

Warnings

SettingTypeDefaultDescription
warnings.anthropicExtraUsagebooleantrueShow a warning when Anthropic subscription auth may use paid extra usage
{
  "warnings": {
    "anthropicExtraUsage": false
  }
}

Compaction

SettingTypeDefaultDescription
compaction.enabledbooleantrueEnable auto-compaction
compaction.modelstringsession modelAuthenticated canonical provider/model used only for compaction
compaction.reserveTokensnumber16384Legacy/default output reserve (tokens reserved for the LLM response)
compaction.reservedOutputTokensnumberreserveTokensOptional override for output-only reserve
compaction.reservedToolResultTokensnumber0Reserve tokens for pending tool results
compaction.safetyMarginTokensnumber0Extra safety margin added to the reserve
compaction.imageReserveTokensnumber0Reserve tokens for image content
compaction.keepRecentTokensnumber20000Recent tokens to keep (not summarized)
compaction.maxUsageRationumber0.9Normal trigger ratio (fraction of context window)
compaction.rearmRationumber0.75 × maxUsageRatioRatio below which a triggered compaction can rearm
compaction.emergencyRationumber0.98Emergency compaction ratio

All numeric token reserves must be non-negative safe integers. Ratios must be finite and in (0, 1]. Invalid values fail session creation instead of silently weakening the policy.

{
  "compaction": {
    "enabled": true,
    "model": "zai/glm-5.2",
    "reserveTokens": 16384,
    "reservedToolResultTokens": 8192,
    "safetyMarginTokens": 1024,
    "keepRecentTokens": 20000,
    "maxUsageRatio": 0.9,
    "rearmRatio": 0.7,
    "emergencyRatio": 0.98
  }
}

Context Budget

SettingTypeDefaultDescription
contextBudget.enabledbooleanfalseGlobally enable prompt resource budgeting and its in-memory, session-scoped plan/representation cache
{
  "contextBudget": { "enabled": true }
}

This setting is global-only: .omk/settings.json cannot enable or disable it. Use OMK_CONTEXT_GOVERNOR=1 to force it on for one process or OMK_CONTEXT_GOVERNOR=0 to force it off for a baseline run. The cache is never persisted or shared between sessions.

Agent Tool Execution

SettingTypeDefaultDescription
agent.toolSchedulerstring"dag-v2"Deterministic resource-claim scheduler. Use "waves-v1" for compatibility rollback
agent.maxToolConcurrencynumber4Maximum calls in one DAG level; 0 removes the cap
agent.toolTimeoutMsnumber0Fallback tool execution timeout in milliseconds; 0 disables the fallback timer
agent.toolTimeoutsobjectbuilt-in defaultsPer-tool-name timeout overrides; 0 disables that tool's timer

Built-in defaults are 30 seconds for read, grep, find, and ls; 60 seconds for edit and write; and 300 seconds for bash. Explicit agent.toolTimeouts entries override these defaults. Extension tools may override settings per call with resolveTimeoutMs(ctx); otherwise custom tools without a per-name value use agent.toolTimeoutMs. Timeout values must be integer milliseconds from 0 through 2147483647.

{
  "agent": {
    "toolScheduler": "dag-v2",
    "maxToolConcurrency": 4,
    "toolTimeoutMs": 0,
    "toolTimeouts": {
      "read": 30000,
      "write": 60000,
      "bash": 300000,
      "my_mcp_tool": 120000,
      "my_browser_tool": 180000
    }
  }
}

OMK_TOOL_SCHEDULER overrides the file setting for one process. Set it to waves-v1 for rollback or dag-v2 to force the resource DAG. Invalid scheduler and timeout values fail session creation instead of silently weakening the policy.

The DAG preserves source-order result artifacts. bash, unknown tools, and extension tools without explicit resource claims remain exclusive. Tool timeout is logical cancellation: OMK closes the tool call and signals cancellation, but arbitrary JavaScript or external side effects may continue if the tool ignores that signal.

Branch Summary

SettingTypeDefaultDescription
branchSummary.reserveTokensnumber16384Tokens reserved for branch summarization
branchSummary.skipPromptbooleanfalseSkip "Summarize branch?" prompt on /tree navigation (defaults to no summary)

Retry

SettingTypeDefaultDescription
retry.enabledbooleantrueEnable automatic agent-level retry on transient errors
retry.maxRetriesnumber3Maximum agent-level retry attempts
retry.baseDelayMsnumber2000Base delay for agent-level exponential backoff (2s, 4s, 8s)
retry.provider.timeoutMsnumberSDK defaultProvider/SDK request timeout in milliseconds
retry.provider.maxRetriesnumber0Provider/SDK retry attempts
retry.provider.maxRetryDelayMsnumber60000Max server-requested delay before failing (60s)

When a provider requests a retry delay longer than retry.provider.maxRetryDelayMs (e.g., Google's "quota will reset after 5h"), the request fails immediately with an informative error instead of waiting silently. Set to 0 to disable the cap.

Keep retry.provider.maxRetries at 0 unless provider-level retries are explicitly needed. Setting it above 0 can make SDK/provider retries handle out-of-usage-limit errors before OMK sees them, which may block the agent until the provider quota resets in some circumstances.

At the agent level, recognized quota and billing-cycle failures are retryable so OMK can first switch to an authenticated providerResilience.failoverCandidates entry. If no candidate qualifies, normal retry backoff applies. See Provider Resilience.

{
  "retry": {
    "enabled": true,
    "maxRetries": 3,
    "baseDelayMs": 2000,
    "provider": {
      "timeoutMs": 3600000,
      "maxRetries": 0,
      "maxRetryDelayMs": 60000
    }
  }
}

Message Delivery

SettingTypeDefaultDescription
steeringModestring"one-at-a-time"How steering messages are sent: "all" or "one-at-a-time"
followUpModestring"one-at-a-time"How follow-up messages are sent: "all" or "one-at-a-time"
transportstring"auto"Preferred transport for providers that support multiple transports: "sse", "websocket", "websocket-cached", or "auto"
httpIdleTimeoutMsnumber300000HTTP header/body idle timeout in milliseconds, also used by providers with explicit stream idle timeouts. Set to 0 to disable.
websocketConnectTimeoutMsnumber15000WebSocket connect/open handshake timeout in milliseconds for providers that support WebSocket transports. Set to 0 to disable.

Terminal & Images

SettingTypeDefaultDescription
terminal.showImagesbooleantrueShow images in terminal (if supported)
terminal.imageWidthCellsnumber60Preferred inline image width in terminal cells
terminal.clearOnShrinkbooleanfalseClear empty rows when content shrinks (can cause flicker)
images.autoResizebooleantrueResize images to 2000x2000 max
images.blockImagesbooleanfalseBlock all images from being sent to LLM

Shell

SettingTypeDefaultDescription
shellPathstring-Custom shell path (e.g., for Cygwin on Windows)
shellCommandPrefixstring-Prefix for every bash command (e.g., "shopt -s expand_aliases")
npmCommandstring[]-Command argv used for npm package lookup/install operations (e.g., ["mise", "exec", "node@20", "--", "npm"])
{
  "npmCommand": ["mise", "exec", "node@20", "--", "npm"]
}

npmCommand is used for all npm package-manager operations, including installs, uninstalls, and dependency installs inside git packages. User-scoped npm packages install under ~/.omk/agent/npm/; project-scoped npm packages install under .omk/npm/. Use argv-style entries exactly as the process should be launched. When npmCommand is configured, git package dependency installs use plain install to avoid npm-specific flags in wrappers or alternate package managers.

Sessions

SettingTypeDefaultDescription
sessionDirstring-Directory where session files are stored. Accepts absolute or relative paths, plus ~.
{ "sessionDir": ".omk/sessions" }

When multiple sources specify a session directory, precedence is --session-dir, OMK_CODING_AGENT_SESSION_DIR, then sessionDir in settings.json.

Model Cycling

SettingTypeDefaultDescription
enabledModelsstring[]-Model patterns for Ctrl+P cycling (same format as --models CLI flag)
{
  "enabledModels": ["claude-*", "gpt-4o", "gemini-2*"]
}

Markdown

SettingTypeDefaultDescription
markdown.codeBlockIndentstring" "Indentation for code blocks

Resources

These settings define where to load extensions, skills, prompts, and themes from.

Paths in ~/.omk/agent/settings.json resolve relative to ~/.omk/agent. Paths in .omk/settings.json resolve relative to .omk. Absolute paths and ~ are supported.

SettingTypeDefaultDescription
packagesarray[]npm/git packages to load resources from
extensionsstring[][]Local extension file paths or directories
skillsstring[][]Local skill file paths or directories
promptsstring[][]Local prompt template paths or directories
themesstring[][]Local theme file paths or directories
enableSkillCommandsbooleantrueRegister skills as /skill:name commands

Arrays support glob patterns and exclusions. Use !pattern to exclude. Use +path to force-include an exact path and -path to force-exclude an exact path.

packages

String form loads all resources from a package:

{
  "packages": ["omk-skills", "@org/my-extension"]
}

Object form filters which resources to load:

{
  "packages": [
    {
      "source": "omk-skills",
      "skills": ["brave-search", "transcribe"],
      "extensions": []
    }
  ]
}

See packages.md for package management details.

Example

{
  "defaultProvider": "anthropic",
  "defaultModel": "claude-sonnet-4-20250514",
  "defaultThinkingLevel": "medium",
  "theme": "dark",
  "compaction": {
    "enabled": true,
    "reserveTokens": 16384,
    "keepRecentTokens": 20000
  },
  "contextBudget": { "enabled": true },
  "retry": {
    "enabled": true,
    "maxRetries": 3
  },
  "enabledModels": ["claude-*", "gpt-4o"],
  "warnings": {
    "anthropicExtraUsage": true
  },
  "packages": ["omk-skills"]
}

Project Overrides

Project settings (.omk/settings.json) override global settings. Nested objects are merged. contextBudget is the exception: it is read from global settings only.

// ~/.omk/agent/settings.json (global)
{
  "theme": "dark",
  "compaction": { "enabled": true, "reserveTokens": 16384 }
}

// .omk/settings.json (project)
{
  "compaction": { "reserveTokens": 8192 }
}

// Result
{
  "theme": "dark",
  "compaction": { "enabled": true, "reserveTokens": 8192 }
}