Config Reference
Config file location: ~/.config/ccmux/config.toml
Editable inline from the Settings screen in the TUI (↑/↓ to move, Enter to edit, e to open $EDITOR).
Interface language
lang = "ru" # en, zh, es, ja, ko, fr, de, pt-br, ru; omit to follow LC_ALL, then LANG
lang is a top-level key: place it before any [section] headers. The TUI supports English, Simplified Chinese, Spanish, Japanese, Korean, French, German, Brazilian Portuguese, and Russian. Change the language row in Settings to switch immediately; reopening the tour and search panels uses the new language too. Most CLI output remains English. List the available languages with ccmux language, or save a preference with ccmux language ru.
[projects]
[projects]
root = "~/Projects" # where ccmux looks for projects
[agents]
[agents]
default = "claude" # "claude" | "codex" | "antigravity" | "cursor" | "pi" | "grok" | "muse"
Sets the agent used by ccmux new when no --agent flag is given. Overridden per-project by the .ccmux/agent file.
[claude]
[claude]
default_model = "claude-opus-4-8" # or "opus" / "sonnet" / "haiku" / "opusplan" / ""
Pins a default Claude model for sessions ccmux itself launches. ccmuxd
exports it as ANTHROPIC_MODEL when starting claude, so the pin
survives the claude --continue || claude || zsh fallback chain (a
--model flag would only apply to the first invocation). The daemon
re-reads config on every launch, so a change takes effect immediately —
no restart needed.
Two ways to set it without editing this file:
- TUI: open the Claude screen and press
M(shift-M). The picker shows the model catalog the daemon discovered — first viaclaude -p(works for subscription and API users sinceclaudehandles its own auth), then via/v1/modelsifANTHROPIC_API_KEYis set, falling through to a curated in-binary list. A[current]tag marks your existing pin. - CLI:
ccmux agents set-default-model <id>writes the same key. Pass no argument to clear.ccmux agents models [--refresh] [--json]lists the discovered catalog.
Empty (or unset) inherits Claude Code’s own ~/.claude/settings.json
default. The pin is per-machine; sister Claude installs on shared
home dirs (NFS, sshfs) keep their own settings.
[daemon]
[daemon]
poll_interval_seconds = 2
idle_seconds_for_needs_input = 3
listen_tailnet = false # set true on a server-mode host
tailnet_port = 7474
[sleep]
[sleep]
# "off" | "safe" | "dangerous" | "very_dangerous"
mode = "safe"
idle_release_minutes = 10
low_battery_cutoff = 20 # dangerous mode auto-downgrades below this %
| Mode | Behaviour |
|---|---|
off |
No sleep prevention |
safe |
caffeinate -s (AC only) on macOS; systemd-inhibit on Linux |
dangerous |
Works on battery; auto-downgrades when battery < low_battery_cutoff |
very_dangerous |
Lid-close override via pmset/systemctl; requires passwordless sudo |
The default macOS mode prevents system sleep on AC power but does not override lid-close sleep. Battery behavior and system-wide overrides depend on the selected mode and platform. For unattended work, use a host that can remain powered and online.
[notifications]
[notifications]
bell = true # terminal BEL on needs_input
moshi_suppresses_bell = false # mute bell when moshi-hook is also reporting
[agents.muse]
[agents.muse]
command = "/path/to/muse"
Help improve ccmux
Found a bug, an unclear guide, or a translation that could read better? Contributions of any size are welcome. Open an issue or send a pull request.
Spotted an error or something out of date? Edit this page on GitHub.