oss

tmux-ide is an open-source project by Prototyper.View source(opens in a new tab)

tmux-ide home

Configuration

Reference for the optional .tmux-ide/workspace.yml layout file and the global ~/.tmux-ide/config.json settings file, with every field and default.


tmux-ide reads two files, both optional:

FileScopePurpose
.tmux-ide/workspace.ymlOne projectA repeatable tmux layout: panes, commands, directories
~/.tmux-ide/config.jsonYour userApp, theme, notification, restore and tmux chrome settings

Workspace file

.tmux-ide/workspace.yml is optional. The app and tmux-ide adopt work with ordinary tmux sessions without it. Use a workspace file when you want tmux-ide to build a repeatable layout with named panes, commands, working directories, and environment variables.

Legacy ide.yml files are still supported through a compatibility adapter. Preview migration with tmux-ide migrate --dry-run; write the new file with tmux-ide migrate --write.

Scaffold one from your detected stack:

tmux-ide init          # or: tmux-ide detect --write

Or start from a template.

Example layout

version: 1
name: my-app # tmux session name
before: pnpm install # runs before the layout launches

terminal:
  rows:
    - size: 70% # row height
      panes:
        - { title: Claude, command: claude, focus: true, size: 50% }
        - { title: Shell }
    - panes:
        - { title: Changes, type: changes }
        - { title: Dev, command: pnpm dev, dir: apps/web, env: { PORT: "3000" } }

Launch it with tmux-ide or tmux-ide start in the project directory; see Open tmux-ide.

Fields

Top level

FieldRequiredNotes
versionyesMust be 1
namenotmux session name; falls back to the project directory
beforenoPre-launch shell hook
terminalnoRepeatable tmux rows, panes, and per-session colors
appnoApp views; validated, not read by the 2.9 app
harnessesnoAgent command profiles; validated, not run yet
agentsnoAgent role profiles; validated, not run yet
missionsnoMission defaults; validated, not run yet

Rows

terminal:
  rows:
    - size: 70% # optional row height (percent); rows split evenly if omitted
      panes: [...] # at least one pane

Panes

FieldTypeNotes
idstringStable semantic pane ID; unique when provided
titlestringPane border label
commandstringCommand to run in the pane
sizepercentPane width such as 50%
dirstringPer-pane working directory
focusbooleanInitial focus
envmapString or numeric environment values
typestringRender a supported widget instead of a shell
targetstringTarget path for widgets that accept one

Widget panes

Set type to run a built-in widget program in a pane instead of a shell. The widget is an ordinary process inside the tmux pane, so it shows up in Terminals like any other program:

panes:
  - title: Explorer
    type: explorer
    target: src/
  - title: Changes
    type: changes
TypeShows
explorerA file tree (optionally rooted at target)
changesGit changes in the project
previewA preview of the explorer's selection
configThe workspace config editor
sidebarA fleet navigation column

The setup wizard is a CLI surface (tmux-ide setup), not a workspace pane type. Explorer, changes and config also open as floating panels in tmux chrome sessions.

App views

app.views is accepted for forward compatibility. The schema lists the panel kinds home, terminals, files, diff and missions, with panel, split and tabs layout nodes. The 2.9 app does not read app.views: it always shows Home and Terminals, and the files, diff and missions views are not part of this release. Validation still checks the block, so an existing file keeps working.

Agent profiles and mission defaults

The harnesses, agents and missions blocks are validated, so existing files keep working, but nothing in 2.9.3 launches or dispatches them. Start agents with Commands → New agent… in the app or with a pane command.

Per-session theme

The terminal.theme block sets tmux colors for this session's panes:

terminal:
  theme:
    accent: colour75
    border: colour238
    bg: colour235
    fg: colour248

For the app's appearance, see Appearance.

Editing the workspace from the CLI

Use the typed config subcommands to mutate workspace fields, then validate the result with structured output:

tmux-ide config set name "my-app"
tmux-ide config add-pane --row 0 --title "Claude" --command "claude"
tmux-ide validate --json

See the CLI reference for the full config surface, and Templates for ready-made starting points.

Legacy compatibility

The legacy team, pane role/task metadata, sidebar, and orchestrator blocks are not represented in WorkspaceConfigV1. The migration command reports those fields as diagnostics instead of silently dropping them.

Do not copy the legacy orchestrator runtime block into .tmux-ide/workspace.yml; nothing in 2.9.3 runs agent or mission profiles.

Global config

~/.tmux-ide/config.json holds user-wide settings. Set TMUX_IDE_CONFIG to use another path. Every field is optional: a missing or mistyped value falls back to its default, and a malformed file never stops tmux-ide from starting. The app writes changes made in Appearance… back to this file.

{
  "theme": { "mode": "system", "preset": "tokyo", "automaticContrast": true },
  "notifications": {
    "toast": true,
    "macos": false,
    "terminal": true,
    "delaySeconds": 2,
    "sound": "blocked"
  },
  "restore": { "resumeAgents": false },
  "app": { "detachable": false }
}

app

FieldDefaultEffect
frontDoortrueBare tmux-ide (no workspace file here) opens the app
detachablefalseRun tmux-ide app hosted in tmux so it survives the terminal; Ctrl+Q detaches (same as --detachable)
dragSelect"agents"When a left drag selects text locally instead of going to a mouse-enabled pane: agents, always or never
newAgentCwd"pane"Where New agent… starts from Terminals: the focused pane's directory, or "session"
kittyKeystrueAsk the host terminal for the kitty keyboard protocol; turn off if your terminal misbehaves

theme

FieldDefaultEffect
mode"system"system (follow the terminal), dark or light
preset—A theme preset id, such as tokyo
automaticContrasttrueCorrect low-contrast text across the app and terminal panes
accent, muted, fg, status, glyphstmux coloursColors and glyphs for the tmux chrome

notifications

FieldDefaultEffect
toasttrueIn-tmux toast when an agent becomes blocked or done
macosfalseNative macOS notification
terminaltrueTerminal-native banner (OSC 9 / OSC 99) for terminals that support it
delaySeconds2Wait before OS-level channels fire, and skip them if the state already changed
sound"blocked"Play a sound on blocked only, on all notifications, or none

See Notifications and events.

Other sections

SectionFields (defaults)Effect
restoreresumeAgents (false)Make tmux-ide restore resume agent conversations by default
updatertickMs (2000), snapshotEvery (15)Background updater cadence and how often it writes restore snapshots
updatescheck (true), manifests (false)Daily update check; also refresh the agent-detection manifest pack
worktreesdir ("")Base directory for tmux-ide worktree; empty means <repo>-worktrees
welcomeshow (true)Allow the one-time tmux chrome welcome card
integrationsoffer (true)Allow the one-time offer to install the Claude Code integration
keyshome M-h, popup M-p, cheatsheet M-k, menu M-m, sidebar M-b, panels (explorer M-e, changes M-g, config M-,)Key binds for the tmux chrome; each also gets a prefix twin. Not used by the app

Common questions

Do I need a workspace file?

No. The app discovers ordinary tmux sessions, and tmux-ide adopt works on any session. A workspace file only matters when you want tmux-ide to build a repeatable layout.

Where does the session name come from?

From name in .tmux-ide/workspace.yml, or the project directory's name when name is not set.

How do I check my file?

tmux-ide validate --json

Run it after every change to the file.

See also