Skip to Content
Desktop AppSettings

Settings

The Settings panel is a sidebar-on-the-left / content-on-the-right modal that covers every globally configurable ShipCode option. It’s mounted from apps/desktop/src/renderer/components/SettingsPanel.tsx with navigation from SettingsSidebar.tsx.

All settings persist in the local SQLite DB under the single settings row. The full type is AppSettings in packages/shared/src/types.ts.

Sections

General

SettingDefaultPurpose
themesystemLight / dark / follow OS
fontStyledm-sansRenderer font family style
fontSize13Base renderer font size
projectSortOrderrecentSidebar project ordering — alpha / recent / added
projectOpenTargetcursorDefault app for opening project folders
telemetryEnablednullError-reporting consent: null waits for explicit first-launch consent, true allows Sentry, false disables it
terminalOpenTargetterminalDefault app for opening terminal sessions
terminalScrollback10000Max lines retained in the Terminal drawer per thread
worktreeRoot~/.shipcode/worktreesWhere isolated pipeline worktrees live — set to a blank string for legacy project-local behavior
worktreeBranchFormatshipcode/{id}-{slug}Branch template for generated issue worktree branches (non-issue worktrees use shipcode/{slug})
addProjectStartsIn—Optional starting folder for the add-project file browser

Privacy and Error Reporting

ShipCode does not send crash or pipeline failure reports until you explicitly choose Allow in the first-launch error reporting dialog. Choosing Decline stores telemetryEnabled: false; choosing Allow stores telemetryEnabled: true. You can change the same setting later from Settings -> General -> Privacy.

When enabled and a Sentry DSN is configured, reports include failure metadata such as thread id, project id, GitHub issue number, pipeline phase, retry counts, and sanitized exception context. Reports do not include prompts, terminal output, raw agent logs, tokens, secrets, or local file contents.

Set SHIPCODE_TELEMETRY_ENABLED=false before launching the desktop app to disable reporting before runtime initialization. The environment override is authoritative: Sentry is not initialized, and the Settings toggle is shown as disabled by environment until the app is relaunched without that override.

Pipeline

SettingDefaultPurpose
requireApprovalfalseApp default for the human approval gate. Project and issue overrides can require approval for a narrower scope, or turn it off for a specific repo / issue
revisionCount0Default number of review → revise cycles before approval or execution. 0 skips plan review for the fastest path; per-project and per-issue overrides can raise or lower it
maxConcurrentPipelines3Workspace-wide active pipeline cap
maxConcurrentExecutions3Per-project execution cap after planning/approval
pipelineSpeedProfilesmart_fastDefault scheduling/execution profile
agentRunModesprogrammatic (structured phases & Codex execute); interactive (Claude execute, terminal fixes, instant)Per-provider, per-phase output transport. Programmatic streams claude -p / codex exec --json; interactive drives the official CLI in a terminal pane. Programmatic Claude execute requires the sandbox below; Claude terminal-fix/instant stay interactive (host tools, no sandbox path); Codex programmatic runs sandboxed via codex exec
claudeExecuteSandboxEnabledtrueRequired to select Programmatic for Claude execute. Wraps claude -p in the srt OS sandbox (@anthropic-ai/sandbox-runtime, macOS Seatbelt / Linux bubblewrap) so file/shell/MCP access is confined to the worktree. When false, programmatic Claude execute fails closed. No effect on Codex or the tool-less structured Claude phases
claudeExecuteSandboxNetworkPolicyanthropic-githubOutbound allowlist for the sandboxed execute run. anthropic-only = Anthropic API only; anthropic-github also permits GitHub + npm registry (branch pushes, dependency installs)
claudeExecuteSandboxExtraWritePaths[]Extra absolute / ~-prefixed paths the sandbox may write to, beyond the worktree and temp dir
plannerReasoningEffortlowDefault planner effort. Exact options depend on the selected provider
reviewerReasoningEfforthighDefault reviewer effort. Exact options depend on the selected provider
executorReasoningEffortmediumDefault executor effort. Exact options depend on the selected provider
verifierReasoningEfforthighDefault verifier effort. Exact options depend on the selected provider
autoRunPriorities[]Priority filter for auto-run. Empty = all priorities. Example: ["p0", "p1"]
autoRunMaxTasks0Maximum tasks launched by auto-run. 0 means all matching tasks
githubPollingIntervalMs30000GitHub polling interval when auto-pickup is enabled
githubBotUsername—Label filter used to skip issues already handled by the bot

Models

SettingDefaultPurpose
executorModelcodexDefault executor when no shipcode:agent:* label is present (claude / codex / openrouter)
plannerModelcodexGlobal default planner model
reviewerModelcodexGlobal default reviewer model
verifierModelcodexGlobal default verifier model
triageModelclaudeProvider for board review / Backlog triage
triageAutoApplyThreshold0.85Confidence threshold for auto-applying triage labels
prdRewriteCliclaudeFormat provider for PRD editing and automation prompt formatting

All four phase models are editable here. These are the global defaults that new projects inherit unless they opt into a project-level override.

Effort options are provider-specific:

  • Claude CLI: none, medium, high
  • Codex: low, medium, high, xhigh
  • OpenRouter: none, minimal, low, medium, high, xhigh

Override precedence:

  • Planner / Reviewer / Verifier: global settings -> project override
  • Executor: global settings -> project override -> issue override

Claude-heavy work should normally enter through an interactive issue terminal session. Autonomous no-label pipeline runs default to Codex so claude -p / Agent SDK credit is not consumed unless a user explicitly selects Claude for a phase or applies a Claude routing label.

The runtime tab shows Interactive CLI vs Programmatic output controls. Programmatic is intentionally disabled for now; the visible control reserves the setting shape without routing Claude through claude -p or an SDK wrapper while Anthropic’s billing behavior is in flux.

If an older stored value is no longer exact for the current provider, the UI shows the mapping explicitly instead of pretending it is supported. Kanban cards display the effective phase model plus the effective effort for the current phase.

OpenRouter-specific toggles (openrouterEnabled, tier defaults, per-phase overrides) are documented on the OpenRouter page.

Notifications

SettingDefaultPurpose
notificationsEnabledtrueMaster switch
notificationOsEnabledtrueFire native OS notifications
notificationBadgeEnabledtrueShow an unread count badge for Inbox items on the app icon
notificationSoundEnabledfalsePlay a sound on events
notificationEvents.approvalonFire when a run needs human approval before execution
notificationEvents.failedonFire when any phase fails
notificationEvents.completedonFire when a PR is opened; the item stays in Inbox until dismissed
notificationEvents.verificationExhaustedonFire when the verifier runs out of retries

Auto-commit

SettingDefaultPurpose
autoCommitEnabledtrueEnables AI-generated commits from the Git tab
autoCommitModelopenrouter/autoOpenRouter model used to group and write commit messages
autoCommitModesplitCommit grouping behavior
cleanupCriteriasee defaultsControls which merged/closed branches and worktrees appear in cleanup

Archived

Unarchive projects that have been hidden from the sidebar and restore locally archived issues. Archived projects retain all their threads, plans, and cost history.

Developer

Diagnostic actions for copying app/version info, opening Chrome DevTools, opening the log directory, and changing the file log level.

About

Version and update-track controls.

Shortcuts

Keyboard shortcut reference — not yet remappable. See the page itself for the current binding list.

Per-project settings

Some settings are per-project rather than global:

  • githubProjectUrl override for the Kanban board quick-link
  • Per-project requireApprovalOverride
  • Per-project revisionCountOverride
  • Per-project pipelineSpeedProfileOverride
  • Per-project prdQualityGate
  • Per-project planner / reviewer / executor / verifier model overrides
  • Per-project planner / reviewer / executor / verifier effort overrides
  • Per-project Discord/Telegram routing overrides
  • Repo memory/context generator settings
  • .shipcode/setup.json setup, verification, runtime QA, and env-file configuration

Issue-level overrides are narrower by design: the human approval gate, revision count, and phase models can be overridden from Issue Detail, and those overrides apply to the next run of that issue only.

Human Approval Behavior

Human approval resolves through inheritance:

  • app default in Settings
  • optional project override in Project Settings
  • optional issue override in Issue Detail
  • Mentioning “human approval” inside an issue body or PRD does not change runtime behavior by itself

Once a run is approved, ShipCode can still delay execution if that project’s execution slots are full. The UI treats that as Waiting, not Needs approval.

Approval decisions are made by the pipeline runtime, not by prompt text. For GitHub issue runs, the engine starts in autonomous mode and the effective inherited approval setting decides whether planning pauses before execution.

Troubleshooting logs

ShipCode writes a structured local event log at:

apps/desktop/logs/events.log

This file records pipeline starts, phase transitions, review outcomes, and approval-gate decisions. If a run behaves unexpectedly, ask the user to send events.log together with the thread or issue number.

Last updated on