cmux-customization
manaflow-ai/cmux
Customize cmux configuration, actions, layouts, and terminal behavior for end users.
What is cmux-customization?
Customize cmux for an end user by editing cmux.json actions, workspace layouts, UI wiring, Dock controls, app settings, shortcuts, notifications, and Ghostty terminal preferences. Use this skill when modifying custom commands, tab bar buttons, Command Palette entries, browser routing, or terminal rendering.
- Define reusable custom actions that appear in Command Palette, tab bars, shortcuts, and context menus
- Create workspace layouts with deliberate split configurations for worktrees, checkouts, services, and SSH sessions
- Surface custom tab bar buttons and configure plus-button behavior with context menus
- Set up Dock controls for sidebar terminal management (logs, test watchers, dev servers, git TUIs)
- Configure app preferences including appearance, sidebar display, notifications, browser routing, and shortcuts
- Manage Ghostty terminal settings for fonts, themes, cursor style, copy-on-select, and shell integration
How to install cmux-customization
npx skills add null --skill cmux-customization- cmux installed and initialized
- ~/.config/cmux/ directory exists for global config or .cmux/ directory in project for local config
- Ghostty installed if customizing terminal rendering (optional)
How to use cmux-customization
- 1.Inspect existing config files to understand current setup (global ~/.config/cmux/cmux.json and/or project .cmux/cmux.json)
- 2.Decide scope: use project-local .cmux/cmux.json for repo-specific commands and global ~/.config/cmux/cmux.json for app preferences
- 3.Back up existing config files before editing using date-stamped .bak files
- 4.For app settings, use cmux-settings helper script to list supported settings and apply changes safely
- 5.For actions, layouts, and UI wiring, edit JSONC carefully while preserving unrelated sections
- 6.Run cmux reload-config to apply changes
- 7.Verify the configured actions, shortcuts, and entrypoints work as expected
Use cases
- Replace the default plus-button with a custom worktree or SSH setup action
- Create a full-stack dev layout with multiple panes for agents, services, and terminals
- Add project-specific workspace presets that travel with the repository
- Configure notification hooks and Feed event sources for team workflows
- Set up terminal appearance and keybindings via Ghostty config
- Development teams sharing workspace patterns in repositories
- Individual developers customizing their cmux environment
- Teams managing SSH devboxes and remote development setups
- Projects with custom CI, review, or documentation workflows
cmux-customization FAQ
Use project-local .cmux/cmux.json for repo-specific commands, actions, and workspace layouts so they travel with the repository. Use global ~/.config/cmux/cmux.json for app preferences like appearance, sidebar behavior, notifications, and shortcuts.
Define an action in cmux.json with palette: true. For example, a workspaceCommand action with type 'workspaceCommand' will appear in Cmd+Shift+P and can be wired to the plus-button or context menus.
Yes, use Ghostty config at ~/.config/ghostty/config for fonts, themes, cursor style, copy-on-select, shell integration, and terminal keybindings. Do not invent cmux UI settings for terminal rendering.
Use date-stamped backups: cp -p ~/.config/cmux/cmux.json ~/.config/cmux/cmux.json.$(date +%Y%m%d-%H%M%S).bak. Only create backups for files that already exist.
Read references/examples.md in the skill for patterns like worktree agents, full-stack dev layouts, SSH devboxes, PR review workspaces, and CI watches.
Full instructions (SKILL.md)
Source of truth, from manaflow-ai/cmux.
name: cmux-customization description: "Customize cmux for an end user. Use when changing cmux.json actions, custom commands, workspace layouts, plus-button behavior, surface tab bar buttons, Command Palette entries, Dock controls, sidebar and app settings, shortcuts, notifications, browser routing, examples-library presets, or Ghostty-backed terminal preferences."
cmux Customization
Use this skill for user-facing cmux customization. Keep the user's config intact, prefer schema-backed edits, and validate before reporting completion.
What Can Be Customized
- Custom actions: define reusable
actionsincmux.json. Actions can appear in Cmd+Shift+P, surface tab bars, shortcuts, and the plus-button right-click menu. - New workspace button: set
ui.newWorkspace.actionto replace the normal plus-button click, andui.newWorkspace.contextMenuto control right-click actions.ui.newWorkspace.rightClickis accepted as an alias, but new examples should usecontextMenu. - Surface tab bar buttons: set
ui.surfaceTabBar.buttonsto replace the default tab bar buttons. Include built-in IDs such ascmux.newTerminal,cmux.newBrowser,cmux.splitRight, andcmux.splitDownonly when they should stay visible. - Workflows and layouts: use
commandswith workspace definitions to open a worktree, multiple checkouts, local services, browser previews, or SSH sessions in a deliberate split layout. - Dock controls: create
.cmux/dock.jsonor~/.config/cmux/dock.jsonfor right-sidebar terminal controls such as logs, test watchers, git TUIs, dev servers, queues, orcmux feed tui --opentui. - Sidebar and app behavior: use
cmux-settingsfor supported settings such as appearance, sidebar display, notification behavior, browser routing, automation, shortcuts, and new-workspace placement. - Workspace metadata: use the cmux CLI or
cmux-workspacefor workspace names, descriptions, colors, read state, and sidebar metadata updates. - Feed and notifications: use
cmux hooks setupfor Feed event sources, notification settings for delivery behavior, and notification hooks incmux.jsonfor filtering or post-processing banners. - Team presets and examples: use project-local
.cmux/cmux.jsonand.cmux/dock.jsonto share worktree, SSH, review, dev, CI, and docs workspace patterns with a repo. - Import, export, and reset: back up the current config, apply the smallest diff, validate it, and keep a rollback path for user-owned customizations.
- Terminal behavior: use Ghostty config for fonts, themes, cursor style, copy-on-select, shell integration, terminal keybindings, and terminal rendering.
Choose the Right Surface
- cmux app preferences: use
cmux-settingsfor global~/.config/cmux/cmux.jsonsettings such as appearance, sidebar, notifications, browser behavior, automation, and shortcuts. - Custom actions, workspace layouts, tab bar buttons, plus-button behavior, and Command Palette entries: edit
~/.config/cmux/cmux.jsonglobally or.cmux/cmux.jsonin the project. Project-local actions and commands override global entries with the same ID or name. - Dock controls: edit
.cmux/dock.jsonin the project or~/.config/cmux/dock.jsonglobally. Runcmux docs dockwhen available. - Terminal rendering and terminal keybindings: use Ghostty config, usually
~/.config/ghostty/config. This includes fonts, cursor style, copy-on-select, shell integration, themes, and terminal keybindings. - Project-specific behavior: prefer
.cmux/cmux.jsonin the project so actions, commands, UI action wiring, and notification hooks travel with the repo. Do not put global app preferences there.
If a request can be handled by Ghostty config, say that and use Ghostty config instead of inventing cmux UI settings.
Examples Library
For reusable patterns such as worktree agents, full-stack dev layouts, SSH
devboxes, PR review workspaces, docs workspaces, quick agent tab buttons, and
CI watches, read references/examples.md. Load it when the user asks for examples, presets,
templates, starter configs, or a known workflow shape.
Workflow
-
Inspect existing config before editing.
test -f ~/.config/cmux/cmux.json && sed -n '1,220p' ~/.config/cmux/cmux.json test -f .cmux/cmux.json && sed -n '1,220p' .cmux/cmux.json -
Pick global or project-local scope. Ask only when the choice changes behavior meaningfully. Default to project-local for repo-specific commands and global for app preferences.
-
Before editing, back up the target file when it already exists:
stamp="$(date +%Y%m%d-%H%M%S)" test -f ~/.config/cmux/cmux.json && cp -p ~/.config/cmux/cmux.json ~/.config/cmux/cmux.json."$stamp".bak test -f .cmux/cmux.json && cp -p .cmux/cmux.json .cmux/cmux.json."$stamp".bakUse the applicable path only. Do not create a backup for a missing file.
-
For app settings and cmux-owned shortcuts, use the settings helper from the installed skill or checkout:
~/.agents/skills/cmux-settings/scripts/cmux-settings list-supported ~/.agents/skills/cmux-settings/scripts/cmux-settings set browser.openTerminalLinksInCmuxBrowser true ~/.agents/skills/cmux-settings/scripts/cmux-settings validateIf the user installed with
skills.sh, use~/.codex/skills/cmux-settings/scripts/cmux-settingsinstead. -
For actions, UI wiring, workspace layouts, notification hooks, and Dock controls, edit JSONC or JSON carefully. Preserve unrelated sections such as
vault,rightSidebar,commands,actions,ui, andnotifications. -
Reload config after successful edits:
cmux reload-config -
Verify the configured entrypoint exists. For shortcuts, read back the binding. For custom actions, confirm the action ID and where it should appear.
Common Patterns
Add a Command Palette action that opens Codex in a new tab. It will appear in Cmd+Shift+P unless palette is false:
{
"actions": {
"codex-new-tab": {
"type": "agent",
"agent": "codex",
"title": "Codex",
"subtitle": "Start Codex in this workspace",
"target": "newTabInCurrentPane",
"palette": true
}
}
}
Replace the plus-button click and define the plus-button right-click menu.
This is the pattern for "bring your own worktree, multiple checkouts, or SSH
setup". The workspaceCommand action ID is worktree-agents, and its
commandName must match a command named Worktree Agents in the same config:
{
"actions": {
"worktree-agents": {
"type": "workspaceCommand",
"title": "Worktree Agents",
"commandName": "Worktree Agents",
"icon": { "type": "symbol", "name": "folder.badge.plus" }
}
},
"ui": {
"newWorkspace": {
"action": "worktree-agents",
"contextMenu": [
{ "action": "worktree-agents", "title": "Worktree Agents" },
{ "type": "separator" },
{ "action": "cmux.newTerminal", "title": "New Terminal" },
{ "action": "cmux.newBrowser", "title": "New Browser" }
]
}
},
"commands": [
{
"name": "Worktree Agents",
"description": "Create a worktree and open agents inside it",
"workspace": {
"name": "Worktree Agents",
"cwd": "../worktrees/my-feature",
"layout": {
"direction": "horizontal",
"children": [
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "Codex", "command": "codex" }
]
}
},
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "SSH", "command": "ssh devbox" }
]
}
}
]
}
}
}
]
}
Add a project workspace layout:
{
"commands": [
{
"name": "dev",
"workspace": {
"name": "Dev",
"cwd": ".",
"layout": {
"direction": "horizontal",
"children": [
{ "pane": { "surfaces": [{ "type": "terminal", "command": "bun dev" }] } },
{ "pane": { "surfaces": [{ "type": "browser", "url": "http://localhost:3000" }] } }
]
}
}
}
]
}
Replace surface tab bar buttons:
{
"ui": {
"surfaceTabBar": {
"buttons": [
"cmux.newTerminal",
"cmux.newBrowser",
{
"action": "codex-new-tab",
"title": "Codex",
"icon": { "type": "symbol", "name": "terminal" }
}
]
}
}
}
Add project Dock controls:
{
"controls": [
{
"id": "git",
"title": "Git",
"command": "lazygit",
"cwd": ".",
"height": 300
},
{
"id": "feed",
"title": "Feed",
"command": "cmux feed tui --opentui",
"height": 260
}
]
}
Validation
- App settings: run
cmux-settings validate. - JSONC shape: keep valid JSONC and avoid duplicate keys.
- Dock JSON: parse
.cmux/dock.jsonor~/.config/cmux/dock.jsonwith a JSON parser before reporting completion. - Runtime reload: run
cmux reload-configwhen the CLI is available. - User-facing action: confirm the action title, shortcut, plus-button behavior, context-menu entry, or tab bar placement the user asked for.
Rules
- Do not overwrite whole top-level config sections unless you own the full section.
- Do not store secrets directly in actions, commands, or prompts. Use environment variables or the user's secret manager.
- Do not use app/runtime sleeps or timing workarounds in generated commands.
- Do not add a cmux setting for behavior Ghostty already owns.
- Keep labels short enough for menus, buttons, and the Command Palette.
Related skills
More from manaflow-ai/cmux and the wider catalog.
cmux
Control cmux topology, panes, workspaces, and focus for deterministic multi-pane terminal navigation.
cmux-browser
Browser automation for cmux webviews: open sites, interact with pages, wait for changes, extract data.
cmux-markdown
Display markdown files in a formatted panel with live reload alongside your terminal.
cmux-settings
View and edit cmux settings in ~/.config/cmux/cmux.json with validation and live reload.
cmux-workspace
Work within the current cmux workspace and terminal without disrupting user focus.
cmux-diagnostics
Diagnose cmux integration issues: hooks, notifications, session restore, settings, and socket access.