τ-mux persists settings to ~/Library/Application Support/hyperterm-canvas/settings.json. The settings panel (⌘,) writes this file, and so do the command palette toggles and RPC verbs like claude.auto_approve — those paths persist and apply live. Hand-editing the file works too, but τ-mux does not watch it: an external edit is only picked up on the next launch (and will be overwritten if the app writes settings first).
Schema: AppSettings in src/shared/settings.ts. Defaults: DEFAULT_SETTINGS. Validation: validateSettings (per-field schemas in settings.schema.ts, so an out-of-range or wrong-typed value falls back to the default rather than breaking the app).
This page lists every field, with the default read from DEFAULT_SETTINGS.
Field Type Default Effect shellPathstring ""Shell binary. Empty = $SHELL. New surfaces only — existing shells keep running. scrollbackLinesnumber 10000Lines retained in the scrollback buffer per surface. fontFamilystring 'JetBrainsMono Nerd Font Mono', 'JetBrains Mono', 'Berkeley Mono', 'SF Mono', 'Menlo', monospaceTerminal font stack. fontSizenumber 13Terminal font size in px. lineHeightnumber 1Line-height multiplier (0.8–2.0). cursorStyle"block" | "bar" | "underline""block"Terminal cursor shape. cursorBlinkboolean trueBlink the terminal cursor. terminalRenderer"dom" | "webgl""dom"Experimental GPU renderer. Falls back to DOM automatically on unsupported hardware, init failure, or context loss — the settings panel shows a live “running on DOM — reason” hint when it has. It shipped enabled in v0.4.9 and rendered panes blank on some setups; a one-time migration in v0.4.12 reset a persisted webgl back to dom. Command palette: “Use WebGL/DOM Terminal Renderer”.terminalOsc94Enabledboolean trueHonour OSC 9;4 progress sequences (per-pane progress chip).
Field Type Default Effect themePresetstring "tau"Named theme preset. See Themes . chromeTheme"system" | "graphite-dark" | "graphite-light" | "high-contrast""system"App chrome theme, independent of the terminal palette. accentColorstring "#6fe9ff"Primary accent (cyan — focus, selection, human identity). secondaryColorstring "#ffc56b"Secondary accent (amber — agent identity). foregroundColorstring "#d6e2e8"Default terminal foreground. bgBasestring "0, 0, 0"Terminal background as an r, g, b triple, combined with terminalBgOpacity. terminalBgOpacitynumber 1Terminal background opacity, 0–1. ansiColorsobject 16-colour TAU palette The full ANSI 16 (black…brightWhite). terminalBloomboolean falseWebGL bloom layer over the terminal. bloomIntensitynumber 0Bloom strength, 0–2. legacyBloomIntensitynumber 0Snapshot of the pre-TAU bloom value, kept so the migration is reversible. bloomMigratedToTauboolean falseInternal migration marker — do not set by hand. paneGapnumber 2Gap between panes in px, 0–20. sidebarWidthnumber 320Sidebar width in px, 200–600. layoutVariant"bridge" | "cockpit" | "atlas""bridge"Chrome layout variant.
Field Type Default Effect workspaceCardDensity"compact" | "comfortable" | "spacious""comfortable"Vertical density of workspace cards. workspaceCardShowMetaboolean trueShow the meta row (cwd, branch). workspaceCardShowStatsboolean trueShow CPU / memory / pane stats. workspaceCardShowPanesboolean trueShow the per-pane list. workspaceCardShowManifestsboolean trueShow the package.json / Cargo.toml card. workspaceCardShowFileExplorerboolean trueShow the inline file explorer. workspaceFileExplorerShowHiddenboolean falseInclude dotfiles in the file explorer. workspaceFileExplorerMaxEntriesnumber 200Cap on entries listed per directory. workspaceCardShowStatusPillsboolean trueShow ht set-status pills on the card. workspaceCardShowProgressboolean trueShow the progress bar (ht set-progress, OSC 9;4). statusBarKeysstring[] ["workspace","panes","cpu","mem","procs","fg","cwd","branch","ht-all","ports","time"]Which segments the bottom status bar renders, in order. htStatusKeyOrderstring[] []Explicit ordering for ht set-status keys; unlisted keys follow. htStatusKeyHiddenstring[] []ht set-status keys to hide.
Field Type Default Effect notificationSoundEnabledboolean truePlay finish.mp3 when a sidebar notification arrives. notificationSoundVolumenumber 1Arrival-cue volume, 0–1. notificationOverlayEnabledboolean trueShow the transient on-screen notification overlay. notificationOverlayMsnumber 6000How long the overlay stays up, in ms.
See the Claude Code integration .
Field Type Default Effect claudeAutoApproveboolean falseAuto-accept the permission prompt Claude Code shows in a terminal pane by sending Enter. Only fires for that terminal prompt — never the τ-mux approval modal, never the Claude Code pane — pauses itself after a burst, and logs every approval to the pane’s sidebar log. Off by default: this grants unattended consent for commands the agent asks to run. claudeAutoApproveDelayMsnumber 700Delay before the Enter keystroke, 0–10000 ms. The prompt is re-checked when the delay expires, so a prompt you answered yourself never receives a stray Enter.
Field Type Default Effect browserSearchEngine"google" | "duckduckgo" | "bing" | "kagi""google"Engine used when the address bar input isn’t a URL. browserHomePagestring ""Page opened for a new browser surface. Empty = blank. browserForceDarkModeboolean falseAsk pages to render in dark mode. browserInterceptTerminalLinksboolean falseOpen links clicked in a terminal in a browser pane instead of the system browser. browserPartitionMode"shared" | "per-surface""per-surface"Cookie/storage partitioning across browser panes.
Field Type Default Effect packageRunner"bun" | "npm" | "pnpm" | "yarn""bun"Command used to run package.json scripts from the sidebar.
See auth & hardening .
Field Type Default Effect webMirrorPortnumber 3000Mirror listen port, 1–65535. autoStartWebMirrorboolean falseStart the mirror at launch. webMirrorBind"127.0.0.1" | "0.0.0.0""0.0.0.0"Bind address. 0.0.0.0 exposes the mirror to your whole LAN — set webMirrorAuthToken before enabling it there. webMirrorAuthTokenstring ""Shared token for mirror access. Empty means authentication is off. rpcSocketRequireTokenboolean trueRequire the per-boot token for state-mutating ht socket calls. On by default since v0.4.12; every first-party client presents it automatically.
See the Telegram bridge .
Field Type Default Effect telegramEnabledboolean falseRun the long-poll bot service. telegramBotTokenstring ""BotFather token. telegramAllowedUserIdsstring ""Comma-separated Telegram user ids allowed to talk to the bot. Fail-closed: empty rejects everyone. telegramNotificationsEnabledboolean falseForward sidebar notifications to Telegram. telegramNotificationButtonsEnabledboolean falseAdd inline action buttons to forwarded notifications. telegramAskUserEnabledboolean falseForward ht ask questions to Telegram (answer from your phone).
Nested object — see auto-continue .
Field Type Default Effect autoContinue.engine"off" | …"off"Which decision engine runs. off disables the feature entirely. autoContinue.dryRunboolean trueDecide and log, but never send the continue keystroke. autoContinue.cooldownMsnumber 3000Minimum gap between continues. autoContinue.maxConsecutivenumber 5Runaway guard — pauses after this many consecutive continues. autoContinue.modelProviderstring "anthropic"Provider for the model-backed engine. autoContinue.modelNamestring "claude-haiku-4-5-20251001"Model used by the model-backed engine. autoContinue.modelApiKeyEnvstring "ANTHROPIC_API_KEY"Env var read for that provider’s key.
Field Type Default Effect auditsGitUserNameExpectedstring | null nullExpected git config user.name; the startup audit warns on drift. null disables the check.
Most fields apply live across all panes the moment they’re saved. Exceptions:
shellPath — new surfaces only.
webMirrorPort, webMirrorBind, webMirrorAuthToken — restart a running mirror (they are honoured on auto-start at launch since v0.3.161).
autoStartWebMirror — only at launch (toggle the mirror manually any time).
rpcSocketRequireToken — applies to new ht socket connections immediately.
terminalRenderer — applies to newly created panes.
τ-mux reads this file at launch and rewrites it whenever settings change; it does not watch it. So edit it while the app is closed, or prefer the settings panel / palette / RPC, which apply immediately. Unknown fields are dropped on load with a logger warning, and invalid values fall back to their default.
$EDITOR ~ /Library/Application \ Support/hyperterm-canvas/settings.json