Settings Fields

Reference: Settings Fields

Every settings field with its exact name, type, default, and effect — useful for reading or writing the JSON directly. Source of truth: supacode/Features/Settings/Models/GlobalSettings.swift and RepositorySettings.swift.

Keywords:settings fieldsglobal settingsrepository settingsdefaultssettings.jsonprowl.jsonconfigjson schema

For the UI grouping of these into tabs, see components/settings.md.

On-disk locations#

ScopePath
Global settings~/.prowl/settings.json
Global custom commands + agent profiles~/.prowl/global.onevcat.json
Per-repository settings~/.prowl/repo/<repo-name>/prowl.json
Per-repository custom commands + agent-profile memory~/.prowl/repo/<repo-name>/prowl.onevcat.json

JSON is pretty-printed with sorted keys. Legacy ~/.supacode is migrated to ~/.prowl on first launch.

Global settings (GlobalSettings)#

FieldTypeDefaultEffect
appearanceModeenum (system/light/dark)darkApp appearance.
defaultEditorIDStringautoDefault app to open worktrees (overridable per repo); auto prefers an app matching the detected project type.
confirmBeforeQuitBooltrueConfirm before quitting Prowl.
updatesAutomaticallyCheckForUpdatesBooltrueBackground update checks.
updatesAutomaticallyDownloadUpdatesBoolfalseAuto-download updates.
inAppNotificationsEnabledBooltrueIn-app alerts / bell indicators.
notificationSoundenum (never / system sound raw values like hero / supacodeClassic)supacodeClassicSound played for notifications when system banners are off; never disables it. Migrates the legacy notificationSoundEnabled Bool (truesupacodeClassic, falsenever); unknown raw values fall back to the default.
systemNotificationsEnabledBoolfalsemacOS system banners.
muteNotificationsForActiveSurfaceBooltrueSuppress the banner, sound, and dock bounce when the notification’s pane is the one you’re actively viewing (selected worktree, focused pane, key + visible window). Workflow status-edge notices use selected-worktree visibility because their status is worktree-level.
moveNotifiedWorktreeToTopBooltrueFloat a notified worktree to top.
commandFinishedNotificationEnabledBooltrueNotify when a long command finishes.
commandFinishedNotificationThresholdInt (seconds)10Minimum duration before that notification fires.
analyticsEnabledBooltrueSend usage analytics (PostHog; off in Debug).
crashReportsEnabledBooltrueSend crash reports (Sentry).
githubIntegrationEnabledBooltrueEnable GitHub/PR features (via gh).
deleteBranchOnAutomaticCleanupBoolfalseDelete the local branch when automatic cleanup (merged-PR delete action, archived auto-delete) removes a Prowl-created worktree. Migrates the legacy deleteBranchOnDeleteWorktree key. The manual delete dialog is independent: it remembers the last confirmed choice in UserDefaults (deleteBranchOnManualWorktreeDelete).
mergedWorktreeActionenum?nilWhat to do with a merged worktree (e.g. auto-archive); nil = ask.
promptForWorktreeCreationBooltrueShow the creation dialog vs. auto-create.
fetchOriginBeforeWorktreeCreationBooltruegit fetch before creating a worktree.
defaultWorktreeBaseDirectoryPathString?nilDefault parent directory for new worktrees.
copyIgnoredOnWorktreeCreateBoolfalseCopy .gitignore’d files into new worktrees.
copyUntrackedOnWorktreeCreateBoolfalseCopy untracked files into new worktrees.
pullRequestMergeStrategyenum (merge/squash/rebase)mergeDefault PR merge strategy.
restoreTerminalLayoutOnLaunchBoolfalseRestore tabs/splits on launch.
terminalFontSizeFloat32?nilRemembered terminal font size.
archivedAutoDeletePeriodenum? (days)nilAuto-delete archived worktrees after N days; nil = never.
keybindingUserOverridesobjectemptyUser keyboard-shortcut remappings.
defaultViewModeenum (normal/shelf/canvas)normalView mode on launch.
canvasDefaultLayoutenum (uniform/tile)tileInitial Canvas layout: uniform packs same-size cards, tile resizes cards to fill the screen.
dimUnfocusedSplitsBooltrueDim panes that aren’t focused.
autoShowActiveAgentsPanelBoolfalseAuto-open the Active Agents panel on a new agent.
showActiveAgentTabTitlesBoolfalseShow pane titles (surface title, falling back to the tab title; vs. branch) in the agents panel.
showActiveAgentStatusInShelfBooltrueShow agent status markers on Shelf tab icons.
agentIslandSilentOpacityDouble0.35Quiet floating island opacity (0.2–1.0), under Agents → Display. Notched monitors stay fully opaque.
agentIslandEnabledBoolfalseShow Agent Island, including its empty state unless agentIslandOnlyShowWithAgents is enabled.
agentIslandOnlyShowWithAgentsBoolfalseHide Agent Island when the Active Agents roster is empty.
agentIslandFloatingPositionsobject ({"positionsByDisplayID":{}})Empty positionsSaved horizontal positions per display UUID (0–1); absent entries use the center. Applies to displays without a notch.
agentIslandDisplayPreferenceobject ({"mode":"automatic"} or {"mode":"display","id":"<CG display UUID>","name":"<last known name>"}){"mode":"automatic"}Select Agent Island placement. A missing fixed display temporarily follows Automatic while preserving its UUID for reconnection.
windowTintModeenum (none/repositoryColor/custom)repositoryColorHow the window chrome is tinted.
windowTintCustomColorcolordefaultThe custom tint color (when windowTintMode = custom).
showRunButtonInToolbarBooltrueShow the Run Script button in the toolbar.
showDefaultEditorInToolbarBooltrueShow the open-in-editor button in the toolbar.
dockBounceModeenum (off/once/continuous)offDock bounce on notification.
showNotificationDotOnDockBoolfalseNumeric unread badge on the Dock icon.
shelfSpineTintFallbackenum (neutral/systemTint)neutralShelf spine color when a repo has no color.
shelfSpineTintFollowsRepositoryColorBooltrueTint shelf spines by repo color.
externalDiffToolIDStringbuilt-inTool used by diff badges and Show Diff: built-in, hunk, filemerge, kaleidoscope, or custom.
externalDiffCustomCommandString""Command template for externalDiffToolID = custom; supports {leftPath}, {rightPath}, {worktreePath}, {repoPath}, and {branch}.
detectRepositoryIconsAutomaticallyBooltrueScan newly added repositories locally for a high-confidence project icon (app icon, launcher, favicon/logo) and use it as the repo icon. Applies to future additions only; never replaces a manual icon.

Per-repository settings (RepositorySettings)#

Stored at ~/.prowl/repo/<repo-name>/prowl.json (schema v2). For the tri-state Bool? fields, nil means “inherit the global setting.”

FieldTypeDefaultEffect
setupScriptString""Script run automatically after a worktree is created.
archiveScriptString""Script run automatically before a worktree is archived.
runScriptString""The on-demand Run Script (⌘R).
openActionIDStringautoApp to open this repo’s worktrees (overrides defaultEditorID); auto prefers an app matching the detected project type.
worktreeBaseRefString?nilDefault base branch/ref for new worktrees.
worktreeBaseDirectoryPathString?nilParent directory for new worktrees (overrides global).
copyIgnoredOnWorktreeCreateBool?nilCopy ignored files; nil = use global.
copyUntrackedOnWorktreeCreateBool?nilCopy untracked files; nil = use global.
pullRequestMergeStrategyenum?nilPR merge strategy; nil = use global.
githubAccountOverrideobject?nilOptional { "host": "...", "login": "..." }; Prowl temporarily switches gh to this account for GitHub operations in this repo.
customTitleString?nilDisplay name override for the repository.
observeLineDiffsAutomaticallyBool?nil (= on)Keep worktree line-change badges updated; set false for large repos.
fetchPullRequestStateBool?nil (= on)Background-fetch PR state; set false to save GitHub rate limit.

Custom Commands live separately in prowl.onevcat.json. Each command has an isEnabled Boolean that defaults to true; turning it off preserves its structure (title, icon, command, execution mode, close-on-success, shortcut, and order) but removes it from every command surface and hotkey dispatch.

Global Custom Commands use the same command structure in ~/.prowl/global.onevcat.json. Repository prowl.onevcat.json files additionally store disabledGlobalCommandIDs: an absent ID means enabled for that repository, while an included ID hides that Global command there. Local commands are ordered before Global commands; matching titles do not hide either command.

Agent Profiles share these files: global.onevcat.json also stores the agentProfiles array and the one-shot didSeedAgentProfiles flag, and each repository’s prowl.onevcat.json stores defaultAgentProfileID (the explicit per-repo Default Agent Profile) and lastLaunchedAgentProfileID (launch memory for the Recommended resolution). See components/agent-profiles.md.

Workflows also persist in global.onevcat.json: disabledWorkflowIDs (bundle/<id>, user/<id>, or repo:<canonical root>/<id> keys of workflow definitions switched off — the Enabled control in Workflow Settings), workflowBindModeOverrides ({workflow_key, mode} entries, mode ask | auto; absent = follow the file’s bind — the detail’s Run Setup picker and the start sheet’s “Don’t ask again”), and workflowBindings (remembered launch-role Profile bindings, one per requirements digest — the page’s per-role pickers, or a start that resolved the role). Prefer the page over editing them by hand. See components/workflows.md.

Notes for agents#

  • Defaults here are the factory values; a human’s file may differ.
  • Tri-state Bool? per-repo fields: nil/absent = inherit global; true/false = explicit override.
  • Editing the JSON while Prowl is running may be overwritten on save — prefer the Settings UI, or change settings while the app is closed.