
Cmux Customization
- 4.1k installs
- 25.6k repo stars
- Updated August 5, 2026
- manaflow-ai/cmux
cmux-customization is a skill for editing cmux.json actions, workspace layouts, Dock controls, settings, and Ghostty terminal preferences with validation.
About
cmux Customization guides user-facing changes to the cmux terminal workspace app while preserving existing config and validating before completion. Customizable surfaces include reusable actions in cmux.json for Command Palette, surface tab bars, shortcuts, and plus-button menus; ui.newWorkspace.action and contextMenu for replacing default new-workspace behavior; ui.surfaceTabBar.buttons with built-in IDs like cmux.newTerminal; commands with workspace layouts for worktrees, SSH, browsers, and split panes; Dock controls in .cmux/dock.json for git TUIs and dev servers; cmux-settings for appearance, sidebar, notifications, and shortcuts; and Ghostty config for fonts, themes, and terminal keybindings outside cmux. Scope rules prefer project-local .cmux/cmux.json for repo commands and global ~/.config/cmux/cmux.json for app preferences. Workflow inspects files, backs up with timestamped .bak copies, edits JSONC preserving unrelated sections, runs cmux-settings validate, reloads via cmux reload-config, and verifies action IDs. Examples cover Codex new-tab actions, worktree-agents plus-button layouts, dev server plus browser splits, custom tab bar buttons, and Dock lazygit controls. Rule.
- Edits cmux.json actions, UI wiring, workspace layouts, Dock, and notification hooks.
- Separates global ~/.config/cmux from project-local .cmux/cmux.json scopes.
- Uses cmux-settings helper for validated app preferences and shortcuts.
- Ghostty config owns terminal fonts, themes, and keybindings outside cmux.
- Backs up config, validates JSONC, runs cmux reload-config, and verifies placements.
Cmux Customization by the numbers
- 4,072 all-time installs (skills.sh)
- +330 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #131 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
cmux-customization capabilities & compatibility
- Capabilities
- custom actions for command palette, tab bars, sh · workspace layout commands with horizontal and ve · dock controls for git tuis, dev servers, and cmu · cmux settings validated global preferences and n · backup, validate, reload config workflow with ro
- Works with
- github
- Use cases
- orchestration · devops · planning
- Platforms
- macOS
What cmux-customization says it does
Keep the user's config intact, prefer schema-backed edits, and validate before reporting completion
If a request can be handled by Ghostty config, say that and use Ghostty config instead
Do not store secrets directly in actions, commands, or prompts
npx skills add https://github.com/manaflow-ai/cmux --skill cmux-customizationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4.1k |
|---|---|
| repo stars | ★ 25.6k |
| Security audit | 3 / 3 scanners passed |
| Last updated | August 5, 2026 |
| Repository | manaflow-ai/cmux ↗ |
How do I customize cmux actions, plus-button behavior, workspace splits, Dock controls, and shortcuts without breaking existing config?
Customize cmux actions, workspace layouts, plus-button behavior, Dock controls, settings, shortcuts, and Ghostty terminal preferences with validated JSON edits.
Who is it for?
cmux users configuring worktree agent layouts, custom tab bar buttons, Dock git or feed controls, and Command Palette actions.
Skip if: Skip when the request is pure Ghostty terminal theming; use Ghostty config directly instead of cmux UI settings.
When should I use this skill?
User wants to change cmux.json actions, newWorkspace behavior, surface tab bar, Dock controls, cmux-settings, or workspace layout commands.
What you get
Validated cmux.json or dock.json edits with backups, reload-config applied, and confirmed UI entrypoints for requested actions.
- updated cmux.json or dock.json
- timestamped config backups
- validated reload-ready config
Files
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
1. 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.json2. 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. 3. 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. 4. 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-settings instead. 5. 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, and notifications. 6. Reload config after successful edits:
cmux reload-config7. 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.
interface:
display_name: "cmux Customization"
short_description: "Customize cmux actions, UI, layouts, and presets."
default_prompt: "Use $cmux-customization to pick an examples-library preset, wire it into cmux.json, and validate the cmux config."
cmux Customization Examples
Use these examples as starting points. Merge only the relevant top-level keys into the target config file named above each code block. Unlabeled JSON examples target cmux.json. Preserve unrelated sections, then run cmux reload-config when available.
Prefer project-local .cmux/cmux.json for team workflows and global ~/.config/cmux/cmux.json for personal app preferences.
Worktree Agents
Use this when the user wants the plus button to open a worktree or checkout layout, and right-click to offer alternate starters.
{
"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",
"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": "Claude", "command": "claude" }
]
}
}
]
}
}
}
]
}Full-Stack Dev
Use this when a repo needs terminals, browser preview, and persistent Dock controls for repeated local development.
.cmux/cmux.json:
{
"commands": [
{
"name": "Full-Stack Dev",
"workspace": {
"name": "Dev",
"cwd": ".",
"layout": {
"direction": "horizontal",
"split": 0.55,
"children": [
{
"direction": "vertical",
"children": [
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "Web", "command": "bun dev" }
]
}
},
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "Tests", "command": "bun test --watch" }
]
}
}
]
},
{
"pane": {
"surfaces": [
{ "type": "browser", "name": "Preview", "url": "http://localhost:3000" }
]
}
}
]
}
}
}
]
}.cmux/dock.json:
{
"controls": [
{ "id": "git", "title": "Git", "command": "lazygit", "cwd": ".", "height": 320 },
{ "id": "feed", "title": "Feed", "command": "cmux feed tui --opentui", "height": 260 }
]
}SSH Devbox
Use this when the user's normal environment is remote, or when local cmux should open a known SSH session beside project notes or a browser preview.
{
"commands": [
{
"name": "SSH Devbox",
"keywords": ["ssh", "remote", "devbox"],
"workspace": {
"name": "Devbox",
"cwd": ".",
"layout": {
"direction": "horizontal",
"children": [
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "SSH", "command": "ssh devbox" }
]
}
},
{
"pane": {
"surfaces": [
{ "type": "browser", "name": "Preview", "url": "http://localhost:3000" }
]
}
}
]
}
}
}
]
}Review PR
Use this when a project needs one command to review a pull request with a terminal, browser, and notes panel. Adjust the URL and command for the user's GitHub workflow.
{
"commands": [
{
"name": "Review PR",
"keywords": ["review", "pull request", "pr"],
"workspace": {
"name": "PR Review",
"cwd": ".",
"layout": {
"direction": "horizontal",
"children": [
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "GitHub", "command": "gh pr status" }
]
}
},
{
"pane": {
"surfaces": [
{ "type": "browser", "name": "Pull Request", "url": "https://github.com/owner/repo/pulls" }
]
}
}
]
}
}
}
]
}Docs Workspace
Use this when a repo needs one command for docs authoring with a dev server, browser preview, and markdown viewer. Adjust the command, URL, and markdown path for the docs stack.
{
"commands": [
{
"name": "Docs Workspace",
"keywords": ["docs", "documentation", "preview"],
"workspace": {
"name": "Docs",
"cwd": ".",
"layout": {
"direction": "horizontal",
"split": 0.45,
"children": [
{
"direction": "vertical",
"children": [
{
"pane": {
"surfaces": [
{ "type": "terminal", "name": "Docs Server", "command": "bun run docs:dev" }
]
}
},
{
"pane": {
"surfaces": [
{
"type": "terminal",
"name": "Markdown",
"command": "cmux markdown open docs/README.md --direction right --focus false; exec ${SHELL:-/bin/zsh} -l"
}
]
}
}
]
},
{
"pane": {
"surfaces": [
{ "type": "browser", "name": "Docs Preview", "url": "http://localhost:3000/docs" }
]
}
}
]
}
}
}
]
}Quick Agent Buttons
Use this when the user wants tab bar buttons for common agents while keeping the default new terminal and browser buttons.
{
"actions": {
"codex-new-tab": {
"type": "agent",
"agent": "codex",
"title": "Codex",
"target": "newTabInCurrentPane",
"palette": true
},
"claude-new-tab": {
"type": "agent",
"agent": "claude",
"title": "Claude",
"target": "newTabInCurrentPane",
"palette": true
}
},
"ui": {
"surfaceTabBar": {
"buttons": [
"cmux.newTerminal",
"cmux.newBrowser",
{ "action": "codex-new-tab", "title": "Codex" },
{ "action": "claude-new-tab", "title": "Claude" }
]
}
}
}CI Watch
Use this when the user wants a repeatable place for GitHub Actions, CircleCI, or release-monitoring commands. Prefer Dock controls for long-running monitors.
.cmux/dock.json:
{
"controls": [
{
"id": "gh-runs",
"title": "GitHub Runs",
"command": "gh run list --limit 10 && exec ${SHELL:-/bin/zsh} -l",
"cwd": ".",
"height": 260
},
{
"id": "feed",
"title": "Feed",
"command": "cmux feed tui --opentui",
"height": 260
}
]
}Validation Checklist
- Parse any changed JSON or JSONC before reporting success.
- Keep
cwdinside theworkspaceobject for workspace commands. - Confirm
workspaceCommand.commandNamematches acommands[].name. - Use
ui.newWorkspace.contextMenuin new examples, not the alias. - Keep built-in tab bar buttons only when the user wants them visible.
- Keep secrets out of config. Use shell profiles, env vars, or a secret store.
Related skills
FAQ
Where do project-specific cmux settings go?
Use .cmux/cmux.json in the repo for actions and commands; global app preferences stay in ~/.config/cmux/cmux.json.
Who owns terminal fonts and themes?
Ghostty config at ~/.config/ghostty/config, not cmux UI settings, per the choose-the-right-surface rules.
What validation should run after edits?
cmux-settings validate for app settings, JSON parse for dock.json, and cmux reload-config when the CLI is available.
Is Cmux Customization safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.