Skip to content
Download

DOCS / REFERENCE

Settings reference

One window holds all of Birch’s settings (⌘, / Ctrl+,), organized into eight panes with a filter box over them. This page walks each pane top to bottom, then lists the handful of keys that currently have no UI switch.

The left sidebar groups eight panes — APPLICATION: General, Health · WORKFLOW: Git, Integrations, Task automation · AGENTS: Workspaces, Status integrations · ADVANCED: Advanced — under a Filter sections… box, which matches section names and related keywords (ssh, statusline, epic, …) and jumps to the first match. Each pane loads the first time you open it.

The footer is always Cancel + Save changes:

  • Buffered edits — General, Health, Git identity and common git settings, Task automation, Workspaces (except Claude profiles) and Advanced — survive moving between panes. Save changes writes every pane you changed, in sidebar order, then closes. If one fails, the window stays on that pane with the error; panes saved before it stay saved, the rest stay unsaved for a retry.
  • Immediate actions — accounts, Git credentials, the free-form git Set / Unset, Claude profiles, CLI and plugin installs — apply on click, and their panes say so: Cancel cannot undo them.

Cancel, Escape or closing the window discards unsaved edits on every pane, without asking. A pane whose data failed to load retries when you select it again, and Save changes won’t write it until a load succeeds, so a broken read can’t overwrite good values.

“Choose your editor and notifications.”

SectionOptionDefaultKey
External editorRadio: Visual Studio Code / Sublime Text / Custom command.Visual Studio Codeeditor.kind (vscode | sublime | custom)
External editorCustom command, e.g. nvim {path} or /usr/local/bin/myeditor — {path} is replaced with the folder path, or the path is appended when the placeholder is absent.emptyeditor.customCommand
Teams notificationsTeams webhook URL (HTTPS; empty disables). Kept in the system keychain, not in settings — see Notifications.empty—
Teams notificationsNotify when someone approves / reviews or requests changes on / comments on my PR.all offnotifications.teamsOnPrApproved / teamsOnPrReviewed / teamsOnPrCommented
Inbox notificationsSound · desktop notification · app-icon count. See Notifications.all onnotifications.inboxSoundOn / inboxDesktopOn / inboxBadgeOn

About & diagnostics (at the end of General) shows the Birch version with Copy version, Open logs folder and Report a problem… (all immediate; Report a problem… closes Settings first), and Offer to send a report after Birch closes unexpectedly (diagnostics.offerCrashReports, default on, saved as soon as you switch it). That option only controls the question Birch asks after a crash — nothing is sent without your click. See Report a problem.

“Schedule focused work and regular breaks.” See Health breaks.

OptionDefaultKey
Remind me to take breaksoffhealth.enabled
Work for (minutes, 1–240, step 5)50health.workMinutes
Then rest for (minutes, 1–60)10health.breakMinutes
Notify me when a break startsonhealth.notifyOn

Writes real git config and credentials, not Birch settings. Three tabs; when a repository is selected in the main window, the pane names it and adds per-repository controls.

  • Identity — Global identity (Name / Email) and Global signing: Sign commits (commit.gpgsign), Key (user.signingkey), Format (openpgp / ssh); plus repository overrides of both. See Git identity & signing.
  • Configuration — a Global / This repository toggle. Common settings (pull.rebase, core.autocrlf, credential.helper) save with Save changes; Add or update a key and the All entries list’s Set / Unset apply immediately.
  • Credentials — the credential-helper status, HTTPS tokens per remote (Save / Forget) and the SSH key (Choose key… / Clear). See Git credentials.

Six provider tiles — GitHub, GitLab, Jira, Azure DevOps, Linear, YouTrack. A tile opens its connected accounts (Sync now, Remove) and a connect form (Verify & connect; multiple accounts supported). Each form lists the Token permissions that provider needs above its create-token link; GitHub offers Create a classic token on GitHub ↗ and Create a fine-grained token ↗, and the GitHub and GitLab links open with those permissions already ticked. Tokens are stored in the system keychain and used only for API calls, never for git push or pull — see Storage & data and Providers overview. Git credentials are under Git → Credentials.

With no account connected, the pane says only: “Connect an account in Settings > Integrations to configure this.”

Issue-status offers come first — two rows per account, “When a workspace starts from the task” and “When a PR is created from its workspace”, each with a mode picker, the remembered status (Remembered status: …) and a Reset. See Issue status transitions.

ModeBehaviorKey value
Ask each timePrompt with the status dialog (default).ask
Change automaticallyApply the remembered status silently. Offered only once a status has been remembered.always
Never offerSkip the prompt entirely.never

Keys: issue.status.{launch|pr}.mode.{accountId} and issue.status.{launch|pr}.target.{accountId}.

Inbox — “Hide task types you don’t want in the Inbox. Hidden tasks still sync, and unticking brings them back.” Per account, Hide these types: lists a checkbox for each type its tasks carry (ticked = hidden), and the box below adds one by name (e.g. Epic, Add or Enter). Where the tracker has sub-items there’s also a switch in its own word: Hide sub-tasks (Jira, YouTrack), Hide sub-issues (GitHub, Linear), Hide tasks (child items) (GitLab). Azure DevOps has no switch — hide Task by name; Linear has only the switch. Hidden tasks stay out of the Inbox and its Archive and never notify; a hidden parent’s children show at the top level. Keys: inbox.hiddenTypes.{accountId} (JSON array of names) and inbox.hideSubtasks.{accountId} (default false).

OptionDetailsDefaultKey
Agent commandRun in each new workspace terminal; empty means a plain shell. Also the Custom command agent’s command.claudeterminal.agentCommand
Default shell (Windows)PowerShell / Command Prompt (cmd.exe). Shown on Windows only.PowerShellterminal.defaultShell (powershell | cmd)
AgentsClaude / Codex / OpenCode / Custom command — which agents Birch offers.all onterminal.harness.{claude|codex|opencode|custom}.enabled

An agent switched off is hidden from both the create-workspace dialog and the tab strip’s ”+” menu; workspaces already created keep theirs. At least one stays on — the last ticked box is disabled.

Claude profiles run workspaces under several Claude accounts at once. The first row is your own ~/.claude; Add profile creates another with its own settings, skills, sessions and MCP servers (Rename, Test, Sign in…, Remove). Profile actions apply immediately.

All immediate.

  • birch CLI — Install birch CLI to PATH, and Use this app’s CLI when a different birch comes first on your PATH. All three plugins need it. See CLI overview.
  • Claude Code — Install plugin / Update / Uninstall for the birch-status plugin, plus Enable usage statusline, which points Claude Code’s statusLine at birch statusline (Usage statusline).
  • Codex — Install plugin / Uninstall; then use /hooks in a new Codex session to review and trust the hooks.
  • OpenCode — Install plugin / Update / Uninstall; a new OpenCode session loads it with no approval step.

Update the base branch when creating a workspace (workspace.updateBaseBranchOnCreate, default off) — fetch and fast-forward the selected base branch first; diverged branches are never rewritten. Debug builds also show Co-authors (experimental.coauthors) and Skills & plugins explorer (experimental.skills, default on — see Skills).

KeyValuesDefaultPurpose
update.channelstable | betastableAuto-update release channel — see Updates.
claudeCode.pluginPromptShowntrue | falseunsetSet once the first-run “install the Claude Code plugin” offer has been shown, so it never re-appears. Clear it to see the offer again.
claudeCode.pluginUpdatePromptedVersionversion stringunsetThe shipped plugin version the update nudge last asked about — each new shipped version prompts once.
codex.pluginPromptShowntrue | falseunsetThe same one-time flag for the contextual “install the Codex status plugin” offer.
opencode.pluginPromptShowntrue | falseunsetThe same for the OpenCode status plugin offer.
opencode.pluginUpdatePromptedVersionversion stringunsetThe OpenCode plugin’s update nudge — each new shipped version prompts once.

A few other keys have no Settings pane because their UI lives elsewhere — they remember a choice made in the dialog that owns them:

KeySet from
terminal.harnessKind, terminal.model, terminal.effort, terminal.permissionModeThe create-workspace dialog (last-used agent, Claude model, effort, and permission mode — pre-select the pickers next launch). terminal.permissionMode can also be planBypass — Plan + bypass, i.e. --permission-mode plan --allow-dangerously-skip-permissions.
terminal.codex.model / .effort / .sandbox / .approval, terminal.opencode.model / .agentThe same dialog, for Codex and OpenCode.
terminal.claudeCloud, terminal.claudeProfileIdThe same dialog’s Claude cloud toggle and Claude profile.
pull.strategy.{repositoryId}The Pull button’s strategy dropdown in the Git Changes tab (remembered per repository).
pr.titleGenerateConfirmed”Don’t ask again” on the ✨ generate-title cost warning in the Create PR dialog.