docs/config/configuration

Configuration

Configure Agent Dash behavior

Agent Dash reads its configuration from ~/.config/agent-dash/config.toml or ~/.config/agent-dash/config.json. Both formats use the same keys.

If both files exist, config.toml is used and config.json is ignored. If neither exists, defaults apply. Changes are picked up live, including creating or removing either file.

Options

text
1command = "claude"
2layout = "vertical"
3theme = "dark"
4sharedState = false
5autoTrackSessions = true
6defaultTmuxSession = "main"
7 
8[[modes]]
9name = "yolo"
10command = "claude --dangerously-skip-permissions"
11 
12[worktree]
13create = "git worktree add ../{{name}} -b {{name}} {{base}}"
14checkout = "git worktree add ../{{name}} {{name}}"
15 
16[claudeCode]
17previewScrollMode = "scrollback"

The same configuration as JSON:

text
1{
2 "command": "claude",
3 "layout": "vertical",
4 "theme": "dark",
5 "sharedState": false,
6 "autoTrackSessions": true,
7 "modes": [
8 { "name": "yolo", "command": "claude --dangerously-skip-permissions" }
9 ],
10 "defaultTmuxSession": "main",
11 "worktree": {
12 "create": "git worktree add ../{{name}} -b {{name}} {{base}}",
13 "checkout": "git worktree add ../{{name}} {{name}}"
14 },
15 "claudeCode": {
16 "previewScrollMode": "scrollback"
17 }
18}

command

The command used to start a new session (c). Resuming a closed session runs it with --resume <session id> appended. Defaults to "claude".

modes

Optional. Named alternatives to command, set as a [[modes]] array (TOML) or a modes array (JSON). Each entry needs a name and a command. With at least one mode, the new-session dialog (c) gets a Mode row right under Folder; leave it unset and the row is hidden.

The first mode is always default, which runs the top-level command; yours follow in config order as 1, 2, and so on. The dialog starts on default every time. With Mode focused (Tab), press its number (0 to 9) to choose it, or use ←/→ or the arrow keys and Ctrl+n/Ctrl+p to step through the list below, which shows each mode's command. Enter starts the session with the chosen mode's command, also when a worktree is created. Resuming a closed session always uses command.

text
1[[modes]]
2name = "yolo"
3command = "claude --dangerously-skip-permissions"
4 
5[[modes]]
6name = "plan"
7command = "claude --permission-mode plan"

worktree

Optional. Shell commands that create git worktrees, set under a worktree table (TOML) or object (JSON). With create set, the new-session dialog (c) gets a Worktree checkbox; leave it unset and the checkbox is hidden.

KeyPlaceholdersRuns when
create{{name}}, {{base}}The name is not an existing local branch: makes a new branch and its worktree
checkout{{name}}The name is an existing local branch with no worktree yet. Optional: without it the dialog says "no worktree.checkout configured"

With the checkbox on, Name and Base take branch names, and the list at the bottom of the dialog suggests branches for whichever field has focus (local branches for Name, local and remote for Base, most recently committed first). Pick from the list like zsh's menu completion: the arrow keys or Ctrl+n/Ctrl+p write the highlighted suggestion into the field, and moving back up past the first one restores what the field held before (what you typed, or the prefilled Base). The list is filtered by what you typed, so it stays put while you cycle. Tab only moves to the next field and Enter always creates the session from what the fields contain. A line under the fields says what the name will do:

Base starts as the folder's current branch. The checkbox starts as you left it the last time you created a session.

Commands run with sh -c in the chosen folder, which is the repository root when the folder is inside a git repository. The placeholders are replaced with the values you entered, already shell-quoted, so don't add quotes around them. Any other {{...}} placeholder, including {{base}} in checkout, is an error.

text
1# plain git: a sibling directory per branch
2[worktree]
3create = "git worktree add ../{{name}} -b {{name}} {{base}}"
4checkout = "git worktree add ../{{name}} {{name}}"
5 
6# worktrunk
7[worktree]
8create = "wt switch --create {{name}} --base {{base}} --no-cd"
9checkout = "wt switch {{name}} --no-cd"

Agent Dash then finds the worktree through git worktree list, so the command must leave a worktree checked out on the branch called {{name}}. The new session starts in that worktree and is named after it. The commands run in the background, so slow hooks don't freeze the UI; a failure shows the last line of its stderr.

layout

Controls the pane layout direction.

ValueDescription
"vertical"Session list on the left, preview on the right (default)
"horizontal"Session list on top, preview on the bottom

theme

"dark" (default) or "light". The AGENT_DASH_THEME environment variable (light, anything else means dark) overrides it.

sharedState

When true, which groups are collapsed is shared by every Agent Dash instance. By default it is kept per tmux client. View settings (S) and the session list itself are always shared.

autoTrackSessions

When true (default), every Claude session found running in a tmux pane is added to the session list. When false, only sessions you start with c are added automatically; other running Claude panes stay out of the list. Sessions already in the list keep updating either way: they still resume, archive when closed, and get the unread mark. Use agent-dash import to add existing sessions by hand.

defaultTmuxSession

Closing a live session (a to archive it, or x) exits Claude Code and removes its tmux pane. When that pane was the last one in its tmux session, tmux would detach any client attached to it. Agent Dash moves those clients to another session first: the one named here if it exists, otherwise the session you attached to most recently. With no other session, the clients are left alone and tmux detaches them. Unset by default.

previewScrollMode

Controls how scrolling works in the Claude Code preview pane. Set it as previewScrollMode under the claudeCode table (TOML) or object (JSON).

ValueDescription
"scrollback"Captures the full tmux scrollback history so you can scroll through past output (default)
"virtualized"Forwards scroll events to the running app (e.g. Claude Code) so it handles its own viewport
Removed options

defaultView, groupNameSeparator, and sessionNameFormatter no longer exist. Sessions are no longer grouped by tmux session name, so there is nothing to format. Leftover keys in your config file are ignored. Choose a grouping with S instead.

Data Storage

PathPurpose
~/.config/agent-dash/config.tomlConfiguration (takes precedence over config.json)
~/.config/agent-dash/config.jsonConfiguration (used when no config.toml exists)
~/.config/agent-dash/sessions.jsonEvery known session: title, folder, last activity, archived, unread
~/.config/agent-dash/state.jsonView settings (status, grouping, last activity), the Worktree checkbox state and collapsed groups
/tmp/agent-dash-{pid}-preview.fifoTemporary FIFO pipes for preview