cmux/web/messages/en.json
Lawrence Chen 5835bff110
Update claude-teams blog: link to Claude docs, mention auto env setup (#2426)
* Link to Claude agent-teams docs, mention auto env var setup

* Add 0.63.0 changelog feature highlights

* Simplify GPL blog post to one paragraph

* Remove nightly-only warning from claude-teams and omo docs

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-31 05:28:40 -07:00

839 lines
58 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"meta": {
"title": "cmux — The terminal built for multitasking",
"description": "Native macOS terminal built on Ghostty. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool. Vertical tabs, notification rings, split panes, and a socket API.",
"ogDescription": "Native macOS terminal for AI coding agents. Works with Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, and any CLI tool."
},
"common": {
"downloadForMac": "Download for Mac",
"viewOnGitHub": "View on GitHub",
"closeMenu": "Close menu",
"openMenu": "Open menu",
"toggleTheme": "Toggle theme",
"backToBlog": "Back to blog",
"readTheDocs": "Read the Docs",
"viewChangelog": "View Changelog"
},
"nav": {
"docs": "Docs",
"blog": "Blog",
"changelog": "Changelog",
"community": "Community",
"github": "GitHub"
},
"footer": {
"product": "Product",
"resources": "Resources",
"legal": "Legal",
"social": "Social",
"blog": "Blog",
"community": "Community",
"docs": "Docs",
"changelog": "Changelog",
"privacy": "Privacy",
"terms": "Terms",
"eula": "EULA",
"github": "GitHub",
"twitter": "X / Twitter",
"discord": "Discord",
"contact": "Contact",
"nightly": "Nightly",
"copyright": "© {year} Manaflow",
"language": "Language"
},
"home": {
"taglinePrefix": "The terminal built for ",
"typingCodingAgents": "coding agents",
"typingMultitasking": "multitasking",
"subtitle": "Native macOS app built on Ghostty. Vertical tabs, notification rings when agents need attention, split panes, and a socket API for automation.",
"features": "Features",
"faq": "FAQ",
"communitySection": "Community",
"feature": {
"verticalTabs": "Vertical tabs",
"verticalTabsDesc": ": sidebar shows git branch, working directory, ports, and notification text",
"notificationRings": "Notification rings",
"notificationRingsDesc": ": panes light up when agents need attention",
"inAppBrowser": "In-app browser",
"inAppBrowserDesc": ": split a browser alongside your terminal with a scriptable API",
"splitPanes": "Split panes",
"splitPanesDesc": ": horizontal and vertical splits within each tab",
"scriptable": "Scriptable",
"scriptableDesc": ": CLI and socket API for automation and scripting",
"gpuAccelerated": "GPU-accelerated",
"gpuAcceleratedDesc": ": powered by libghostty for smooth rendering",
"lightweight": "Lightweight",
"lightweightDesc": ": native Swift + AppKit, no Electron",
"keyboardShortcuts": "Keyboard shortcuts",
"keyboardShortcutsDesc": ": <link>extensive shortcuts</link> for workspaces, splits, browser, and more"
},
"faqGhosttyQ": "How does cmux relate to Ghostty?",
"faqGhosttyA": "cmux is not a fork of Ghostty. It uses <link>libghostty</link> as a library for terminal rendering, the same way apps use WebKit for web views. Ghostty is a standalone terminal; cmux is a different app built on top of its rendering engine.",
"faqPlatformQ": "What platforms does it support?",
"faqPlatformA": "macOS only, for now. cmux is a native Swift + AppKit app.",
"faqAgentsQ": "What coding agents does cmux work with?",
"faqAgentsA": "All of them. cmux is a terminal, so any agent that runs in a terminal works out of the box: Claude Code, Codex, OpenCode, Gemini CLI, Kiro, Aider, Goose, Amp, Cline, Cursor Agent, and anything else you can launch from the command line.",
"faqNotificationsQ": "How do notifications work?",
"faqNotificationsA": "When a process needs attention, cmux shows notification rings around panes, unread badges in the sidebar, a notification popover, and a macOS desktop notification. These fire automatically via standard terminal escape sequences (OSC 9/99/777), or you can trigger them with the <cliLink>cmux CLI</cliLink> and <hooksLink>Claude Code hooks</hooksLink>.",
"faqShortcutsQ": "Can I customize keyboard shortcuts?",
"faqShortcutsA": "Terminal keybindings are read from your Ghostty config file (<configPath>~/.config/ghostty/config</configPath>). cmux-specific shortcuts (workspaces, splits, browser, notifications) can be customized in Settings. See the <link>default shortcuts</link> for a full list.",
"faqTmuxQ": "How does it compare to tmux?",
"faqTmuxA": "tmux is a terminal multiplexer that runs inside any terminal. cmux is a native macOS app with a GUI: vertical tabs, split panes, an embedded browser, and a socket API are all built in. No config files or prefix keys needed.",
"faqFreeQ": "Is cmux free?",
"faqFreeA": "Yes, cmux is free to use. The source code is available on <link>GitHub</link>."
},
"community": {
"title": "Community",
"description": "Connect with other cmux users and the team behind it.",
"metaTitle": "Community — cmux",
"metaDescription": "Join the cmux community on Discord, Twitter, GitHub, and more",
"discord": "Discord",
"discordAction": "Join our Discord",
"discordDesc": "Chat with the community, get help, and share feedback",
"githubAction": "View on GitHub",
"githubDesc": "Star the repo, report issues, and contribute",
"twitter": "Twitter",
"twitterAction": "Follow on X",
"twitterDesc": "Updates, announcements, and tips",
"youtube": "YouTube",
"youtubeAction": "Subscribe",
"youtubeDesc": "Demos, tutorials, and walkthroughs",
"linkedin": "LinkedIn",
"linkedinAction": "Follow us",
"linkedinDesc": "Company news and engineering updates"
},
"blog": {
"title": "Blog",
"layoutTitle": "cmux blog",
"metaTitle": "Blog",
"metaDescription": "News and updates from the cmux team",
"description": "News and updates from the cmux team",
"zenOfCmux": {
"metaTitle": "The Zen of cmux",
"metaDescription": "cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you."
},
"cmuxClaudeTeams": {
"metaTitle": "Claude Code teammate agents as native cmux panes",
"metaDescription": "Claude Code's teammate mode requires tmux. cmux fakes it so teammates become native splits with sidebar metadata and notifications."
},
"cmuxOmo": {
"metaTitle": "oh-my-openagent subagents as native cmux panes",
"metaDescription": "oh-my-openagent (formerly oh-my-opencode) orchestrates parallel specialist agents across Claude, GPT, and Gemini. cmux omo turns their tmux panes into native splits."
},
"gpl": {
"metaTitle": "cmux is now GPL",
"metaDescription": "cmux relicensed from AGPL-3.0 to GPL-3.0."
},
"cmuxSsh": {
"metaTitle": "cmux SSH",
"metaDescription": "One command gives you persistent remote sessions, browser panes that reach remote ports, and agent notifications that come home."
},
"cmdShiftU": {
"metaTitle": "Cmd+Shift+U",
"metaDescription": "How Cmd+Shift+U navigates between finished agents across workspaces in cmux."
},
"showHnLaunch": {
"metaTitle": "Launching cmux on Show HN",
"metaDescription": "cmux launched on Hacker News, hit #2, went viral in Japan, and people started building extensions on the CLI. Here's what happened."
},
"introducingCmux": {
"metaTitle": "Introducing cmux",
"metaDescription": "A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side."
},
"posts": {
"cmuxClaudeTeams": {
"title": "Claude Code teammate agents as native cmux panes",
"summary": "Claude Code's teammate mode requires tmux. cmux fakes it so teammates become native splits with sidebar metadata and notifications.",
"date": "March 30, 2026",
"p1": "Claude Code has an experimental <agentTeamsLink>teammate mode</agentTeamsLink> that spawns sub-agents in parallel. It requires tmux and setting <code>CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1</code>. <code>cmux claude-teams</code> handles all of that for you: it sets the env var, places a tmux shim on PATH that translates every tmux command (<code>split-window</code>, <code>send-keys</code>, <code>capture-pane</code>) into cmux's native split/workspace API, and execs into <code>claude --teammate-mode auto</code>. One command.",
"p2": "The shim translates <code>split-window</code> into <code>surface.split</code>, <code>send-keys</code> into <code>surface.send_text</code>, <code>capture-pane</code> into <code>surface.read_text</code>. Teammates stack vertically in a right column, auto-equalizing as agents spawn and exit. Every pane shows up in the sidebar with notifications. Works over SSH via the Go relay daemon.",
"p3": "The same shim powers <omoLink><code>cmux omo</code></omoLink> for oh-my-openagent (formerly oh-my-opencode)."
},
"cmuxOmo": {
"title": "oh-my-openagent subagents as native cmux panes",
"summary": "oh-my-openagent (formerly oh-my-opencode) orchestrates parallel specialist agents across Claude, GPT, and Gemini. cmux omo turns their tmux panes into native splits.",
"date": "March 30, 2026",
"p1": "<code>cmux omo</code> integrates oh-my-openagent (formerly oh-my-opencode), a plugin for OpenCode that orchestrates specialist agents across Claude, GPT, and Gemini in parallel. Each agent gets its own tmux pane. <code>cmux omo</code> uses the same tmux shim as <claudeTeamsLink><code>cmux claude-teams</code></claudeTeamsLink>: fake <code>TMUX</code> env var, every tmux command translated to cmux splits. It auto-installs the plugin into a shadow config so <code>~/.config/opencode</code> stays untouched.",
"p2": "The shim also intercepts <code>terminal-notifier</code> calls and routes them through <code>cmux notify</code>. Works over SSH via the Go relay daemon."
},
"gpl": {
"title": "cmux is now GPL",
"summary": "cmux relicensed from AGPL-3.0 to GPL-3.0.",
"date": "March 30, 2026",
"p1": "cmux relicensed from AGPL-3.0 to GPL-3.0. AGPL's network-use clause is irrelevant for a desktop app, but many companies ban AGPL entirely. GPL drops that clause while still requiring forks to stay open source. Dual-license (GPL + commercial) stays the same."
},
"cmuxSsh": {
"title": "cmux SSH",
"summary": "One command gives you persistent remote sessions, browser panes that reach remote ports, and agent notifications that come home.",
"date": "March 30, 2026",
"p1": "<code>cmux ssh user@remote</code> creates a workspace for the remote machine. Drag an image into a remote Claude Code session and it gets uploaded automatically. Browser panes route through the remote network, so localhost just works. Uses your <code>~/.ssh/config</code>, reconnects on drops.",
"features": "Browser panes route traffic through the remote network, so localhost:3000 reaches the remote dev server without -L flags. Coding agents on the remote box send notifications to your local sidebar. cmux claude-teams and cmux omo work over SSH, spawning teammate panes locally while computation runs remote. Drag a file into a remote terminal to upload via scp. The sidebar shows connection state and detected listening ports."
},
"cmdShiftU": {
"title": "Cmd+Shift+U",
"summary": "How Cmd+Shift+U navigates between finished agents across workspaces in cmux.",
"date": "March 4, 2026",
"p1": "My favorite cmux feature is Cmd+Shift+U. I have 17 workspaces open right now, each running an agent. I used to click through tabs and the notification panel to figure out what completed. Typing is faster.",
"p2": "Cmd+Shift+U jumps to the newest unread <link>notification</link>. In practice that means the last agent that finished. It switches to the right workspace, focuses the exact pane, flashes it so you see where to look, and marks it read. If the notification came from another window, that window comes forward."
},
"zenOfCmux": {
"title": "The Zen of cmux",
"summary": "cmux is a primitive, not a solution. It gives you composable pieces and your workflow is up to you.",
"date": "February 27, 2026",
"p1": "cmux is not prescriptive about how developers hold their tools. It's a terminal and browser with a CLI, and the rest is up to you.",
"p2": "cmux is a primitive, not a solution. It gives you a terminal, a browser, notifications, workspaces, splits, tabs, and a CLI to control all of it. cmux doesn't force you into an opinionated way to use coding agents. What you build with the primitives is yours.",
"p3": "The best developers have always built their own tools. Nobody has figured out the best way to work with agents yet, and the teams building closed products definitely haven't either. The developers closest to their own codebases will figure it out first.",
"p4": "Give a million developers composable primitives and they'll collectively find the most efficient workflows faster than any product team could design top-down."
},
"showHnLaunch": {
"title": "Launching cmux on Show HN",
"summary": "cmux hit #2 on Hacker News, got shared by Mitchell Hashimoto, and went viral in Japan.",
"date": "February 21, 2026",
"intro": "We posted cmux on <link>Show HN</link> on Feb 19:",
"blockquote1": "I run a lot of Claude Code and Codex sessions in parallel. I was using Ghostty with a bunch of split panes, and relying on native macOS notifications to know when an agent needed me. But Claude Code's notification body is always just \"Claude is waiting for your input\" with no context, and with enough tabs open, I couldn't even read the titles anymore.",
"blockquote2": "I tried a few coding orchestrators but most of them were Electron/Tauri apps and the performance bugged me. I also just prefer the terminal since GUI orchestrators lock you into their workflow. So I built cmux as a native macOS app in Swift/AppKit. It uses libghostty for terminal rendering and reads your existing Ghostty config for themes, fonts, colors, and more.",
"blockquote3": "The main additions are the sidebar and notification system. The sidebar has vertical tabs that show git branch, working directory, listening ports, and the latest notification text for each workspace. The notification system picks up terminal sequences (OSC 9/99/777) and has a CLI (cmux notify) you can wire into agent hooks for Claude Code, OpenCode, etc. When an agent is waiting, its pane gets a blue ring and the tab lights up in the sidebar, so I can tell which one needs me across splits and tabs. Cmd+Shift+U jumps to the most recent unread.",
"blockquote4": "The in-app browser has a scriptable API. Agents can snapshot the accessibility tree, get element refs, click, fill forms, evaluate JS, and read console logs. You can split a browser pane next to your terminal and have Claude Code interact with your dev server directly.",
"blockquote5": "Everything is scriptable through the CLI and socket API: create workspaces/tabs, split panes, send keystrokes, open URLs in the browser.",
"hitNumber2": "At peak it hit #2 on Hacker News. Mitchell Hashimoto shared it:",
"favoriteComment": "My favorite comment from the <link>HN thread</link>:",
"viralJapan": "Surprisingly, cmux went viral in Japan:",
"translation": "Translation: \"This looks good. A Ghostty-based terminal app designed so you don't get lost running multiple CLIs like Claude Code in parallel. The waiting-for-input panel gets a blue frame, and it has its own notification system.\"",
"viralChina": "And semi-viral in China:",
"extensions": "Another exciting thing was seeing people build on top of the cmux CLI. sasha built a pi-cmux extension that shows model info, token usage, and agent state in the sidebar:",
"scriptable": "Everything in cmux is scriptable through the CLI: creating workspaces, sending keystrokes, controlling the browser, reading notifications. Part of the cmux philosophy is being programmable and composable, so people can customize the way they work with coding agents. The state of the art for coding agents is changing fast, and you don't want to be locked into an inflexible GUI orchestrator that can't keep up.",
"cta": "If you're running multiple coding agents, <link>give cmux a try</link>."
},
"introducingCmux": {
"title": "Introducing cmux",
"summary": "A native macOS terminal built on Ghostty, designed for running multiple AI coding agents side by side.",
"date": "February 12, 2026",
"p1": "cmux is a native macOS terminal application built on top of Ghostty, designed from the ground up for developers who run multiple AI coding agents simultaneously.",
"whyTitle": "Why cmux?",
"whyP": "Modern development workflows often involve running several agents at once. Claude Code, Codex, and other tools each in their own terminal. Keeping track of which ones need attention and switching between them quickly is the problem cmux solves.",
"featuresTitle": "Key features",
"featureVerticalTabsLabel": "Vertical tabs",
"featureVerticalTabsDesc": "see all your terminals at a glance in a sidebar",
"featureNotificationsLabel": "Notification rings",
"featureNotificationsDesc": "tabs flash when an agent needs your input",
"featureSplitPanesLabel": "Split panes",
"featureSplitPanesDesc": "horizontal and vertical splits within each workspace",
"featureSocketApiLabel": "Socket API",
"featureSocketApiDesc": "programmatic control for creating tabs and sending input",
"featureGpuLabel": "GPU-accelerated",
"featureGpuDesc": "powered by libghostty for smooth rendering",
"getStartedTitle": "Get started",
"getStartedP": "Install cmux via Homebrew or download the DMG from the <link>getting started guide</link>."
}
}
},
"docs": {
"layoutTitle": "cmux docs",
"gettingStarted": {
"title": "Getting Started",
"metaTitle": "Getting Started",
"metaDescription": "Install cmux, the native macOS terminal for AI coding agents. Homebrew, DMG download, CLI setup, and auto-updates via Sparkle.",
"intro": "cmux is a lightweight, native macOS terminal built on Ghostty for managing multiple AI coding agents. It features vertical tabs, a notification panel, and a socket-based control API.",
"install": "Install",
"dmgRecommended": "DMG (recommended)",
"dmgDesc": "Open the .dmg and drag cmux to your Applications folder. cmux auto-updates via Sparkle, so you only need to download once.",
"homebrew": "Homebrew",
"updateLater": "To update later:",
"firstLaunchCallout": "On first launch, macOS may ask you to confirm opening an app from an identified developer. Click <strong>Open</strong> to proceed.",
"verifyTitle": "Verify installation",
"verifyDesc": "Open cmux and you should see:",
"verifyItem1": "A terminal window with a vertical tab sidebar on the left",
"verifyItem2": "One initial workspace already open",
"verifyItem3": "The Ghostty-powered terminal ready for input",
"cliSetup": "CLI setup",
"cliDesc": "cmux includes a command-line tool for automation. Inside cmux terminals it works automatically. To use the CLI from outside cmux, create a symlink:",
"cliThen": "Then you can run commands like:",
"autoUpdates": "Auto-updates",
"autoUpdatesDesc": "cmux checks for updates automatically via Sparkle. When an update is available you'll see an update pill in the titlebar. You can also check manually via cmux > Check for Updates in the menu bar.",
"sessionRestore": "Session restore (current behavior)",
"sessionRestoreDesc": "After relaunch, cmux restores layout and metadata only:",
"sessionItem1": "Window, workspace, and pane layout",
"sessionItem2": "Working directories",
"sessionItem3": "Terminal scrollback (best effort)",
"sessionItem4": "Browser URL and navigation history",
"sessionCallout": "cmux does not restore live process state yet. Active terminal app sessions such as Claude Code, tmux, and vim are not resumed after app restart.",
"requirements": "Requirements",
"reqItem1": "macOS 14.0 or later",
"reqItem2": "Apple Silicon or Intel Mac"
},
"concepts": {
"title": "Concepts",
"metaTitle": "Concepts",
"metaDescription": "How cmux organizes terminals: windows, workspaces, panes, and surfaces. The hierarchy behind the sidebar, splits, and socket API.",
"intro": "cmux organizes your terminals in a four-level hierarchy. Understanding these levels helps when using the socket API, CLI, and keyboard shortcuts.",
"hierarchy": "Hierarchy",
"windowTitle": "Window",
"windowDesc": "A macOS window. Open multiple windows with {shortcut}. Each window has its own sidebar with independent workspaces.",
"workspaceTitle": "Workspace",
"workspaceDesc": "A sidebar entry. Each workspace contains one or more split panes. Workspaces are what you see listed in the left sidebar.",
"workspaceNote": "In the UI and keyboard shortcuts, workspaces are often called \"tabs\" since they behave like tabs in the sidebar. The socket API and environment variables use the term \"workspace\".",
"contextHeader": "Context",
"termUsedHeader": "Term used",
"sidebarUI": "Sidebar UI",
"tab": "Tab",
"keyboardShortcuts": "Keyboard shortcuts",
"workspaceOrTab": "Workspace or tab",
"socketAPI": "Socket API",
"environmentVariable": "Environment variable",
"workspaceShortcuts": "Shortcuts: {new} (new), {jump} (jump), {close} (close), {prevNext} (prev/next)",
"paneTitle": "Pane",
"paneDesc": "A split region within a workspace. Created by splitting with {right} (right) or {down} (down). Navigate between panes with {nav} + arrow keys.",
"paneNote": "Each pane can hold multiple surfaces (tabs within the pane).",
"surfaceTitle": "Surface",
"surfaceDesc": "A tab within a pane. Each pane has its own tab bar and can hold multiple surfaces. Created with {new}, navigated with {prev} / {next} or {jump}.",
"surfaceNote": "Surfaces are the individual terminal or browser sessions you interact with. Each surface has its own CMUX_SURFACE_ID environment variable.",
"panelTitle": "Panel",
"panelDesc": "The content inside a surface. Currently two types:",
"panelTerminal": "Terminal: a Ghostty terminal session",
"panelBrowser": "Browser: an embedded web view",
"panelNote": "Panel is mostly an internal concept. In the socket API and CLI, you interact with surfaces rather than panels directly.",
"visualExample": "Visual example",
"visualExampleDesc": "In this example:",
"visualItem1": "The window contains a sidebar with three workspaces (dev, server, logs)",
"visualItem2": "Workspace \"dev\" is selected, showing two panes side by side",
"visualItem3": "Pane 1 has two surfaces ([S1] and [S2] in the tab bar), with S1 active",
"visualItem4": "Pane 2 has one surface",
"visualItem5": "Each surface contains a panel (a terminal in this case)",
"summary": "Summary",
"levelHeader": "Level",
"whatItIsHeader": "What it is",
"createdByHeader": "Created by",
"identifiedByHeader": "Identified by",
"macosWindow": "macOS window",
"sidebarEntry": "Sidebar entry",
"splitRegion": "Split region",
"tabWithinPane": "Tab within pane",
"terminalOrBrowser": "Terminal or browser",
"automatic": "Automatic",
"paneIdSocket": "Pane ID (socket API)",
"panelIdInternal": "Panel ID (internal)"
},
"configuration": {
"title": "Configuration",
"metaTitle": "Configuration",
"metaDescription": "Configure cmux via Ghostty config files. Font, theme, colors, split pane styling, scrollback, and app settings for automation mode.",
"intro": "cmux reads configuration from Ghostty config files, giving you familiar options if you're coming from Ghostty.",
"configLocations": "Config file locations",
"configLocationsDesc": "cmux looks for configuration in these locations (in order):",
"createConfig": "Create the config file if it doesn't exist:",
"appearance": "Appearance",
"font": "Font",
"colors": "Colors",
"splitPanes": "Split panes",
"behavior": "Behavior",
"scrollback": "Scrollback",
"workingDirectory": "Working directory",
"appSettings": "App settings",
"appSettingsDesc": "In-app settings are available via cmux > Settings ({shortcut}):",
"themeMode": "Theme mode",
"themeSystem": "System: follow macOS appearance",
"themeLight": "Light: always light mode",
"themeDark": "Dark: always dark mode",
"automationMode": "Automation mode",
"automationModeDesc": "Control socket access level:",
"automationOff": "Off: no socket control (most secure)",
"automationCmux": "cmux processes only: only allow processes started inside cmux terminals to connect",
"automationAll": "allowAll: allow any local process to connect (CMUX_SOCKET_MODE=allowAll, env override only)",
"automationCallout": "On shared machines, consider using \"Off\" or \"cmux processes only\" mode.",
"browserLinkBehavior": "Browser link behavior",
"browserLinkDesc": "In Settings > Browser, cmux exposes two host lists with different purposes:",
"browserHostsEmbed": "Hosts to Open in Embedded Browser: applies to links clicked from terminal output. Hosts in this list open in cmux; other hosts open in your default browser. Supports one host or wildcard per line (for example: example.com, *.internal.example).",
"browserHostsHttp": "HTTP Hosts Allowed in Embedded Browser: applies only to HTTP (non-HTTPS) URLs. Hosts in this list can open in cmux without a warning prompt. Defaults include localhost, 127.0.0.1, ::1, 0.0.0.0, and *.localtest.me.",
"exampleConfig": "Example config"
},
"customCommands": {
"title": "Custom Commands",
"metaTitle": "Custom Commands",
"metaDescription": "Define custom commands and workspace layouts in cmux.json. Per-project and global configuration with live file watching.",
"intro": "Define custom commands and workspace layouts by adding a cmux.json file to your project root or ~/.config/cmux/. Commands appear in the command palette.",
"fileLocations": "File locations",
"fileLocationsDesc": "cmux looks for configuration in two places:",
"localConfig": "Per-project:",
"localConfigDesc": "lives in your project directory, takes precedence",
"globalConfig": "Global:",
"globalConfigDesc": "applies to all projects, fills in commands not defined locally",
"precedenceNote": "Local commands override global commands with the same name.",
"liveReload": "Changes are picked up automatically — no restart needed.",
"schema": "Schema",
"schemaDesc": "A cmux.json file contains a commands array. Each command is either a simple shell command or a full workspace definition:",
"simpleCommands": "Simple commands",
"simpleCommandsDesc": "A simple command runs a shell command in the currently focused terminal:",
"simpleCommandFields": "Fields",
"fieldName": "Displayed in the command palette (required)",
"fieldDescription": "Optional description",
"fieldKeywords": "Extra search terms for the command palette",
"fieldCommand": "Shell command to run in the focused terminal",
"fieldConfirm": "Show a confirmation dialog before running",
"simpleCommandCwdNote": "Simple commands run in the focused terminal's current working directory. If your command relies on project-relative paths, prefix it with",
"simpleCommandCwdRepoRoot": "to run from the repo root, or",
"simpleCommandCwdCustomPath": "for any specific directory.",
"workspaceCommands": "Workspace commands",
"workspaceCommandsDesc": "A workspace command creates a new workspace with a custom layout of splits, terminals, and browser panes:",
"workspaceFields": "Workspace fields",
"wsFieldName": "Workspace tab name (defaults to command name)",
"wsFieldCwd": "Working directory for the workspace",
"wsFieldColor": "Workspace tab color",
"wsFieldLayout": "Layout tree defining splits and panes",
"restartBehavior": "Restart behavior",
"restartBehaviorDesc": "Controls what happens when a workspace with the same name already exists:",
"restartIgnore": "Switch to the existing workspace (default)",
"restartRecreate": "Close and recreate without asking",
"restartConfirm": "Ask the user before recreating",
"layoutTree": "Layout tree",
"layoutTreeDesc": "The layout tree defines how panes are arranged using recursive split nodes:",
"splitNode": "Split node",
"splitNodeDesc": "Divides space into two children:",
"or": "or",
"splitPosition": "Divider position from 0.1 to 0.9 (default 0.5)",
"splitChildren": "Exactly two child nodes (split or pane)",
"paneNode": "Pane node",
"paneNodeDesc": "A leaf node containing one or more surfaces (tabs within the pane).",
"surfaceDefinition": "Surface definition",
"surfaceDefinitionDesc": "Each surface in a pane can be a terminal or a browser:",
"surfaceName": "Custom tab title",
"surfaceCommand": "Shell command to auto-run on creation (terminal only)",
"surfaceCwd": "Working directory for this surface",
"surfaceEnv": "Environment variables as key-value pairs",
"surfaceUrl": "URL to open (browser only)",
"surfaceFocus": "Focus this surface after creation",
"cwdResolution": "Working directory resolution",
"omitted": "omitted",
"cwdRelative": "workspace working directory",
"cwdSubdir": "relative to workspace working directory",
"cwdHome": "expanded to home directory",
"absolutePath": "Absolute path",
"cwdAbsolute": "used as-is",
"fullExample": "Full example"
},
"keyboardShortcuts": {
"title": "Keyboard Shortcuts",
"description": "All keyboard shortcuts available in cmux, grouped by category.",
"metaTitle": "Keyboard Shortcuts",
"metaDescription": "All cmux keyboard shortcuts for workspaces, surfaces, split panes, browser, notifications, find, and window management on macOS.",
"searchPlaceholder": "Search shortcuts...",
"searchLabel": "Search keyboard shortcuts",
"noResults": "No shortcuts found",
"noResultsHint": "Try a different search term",
"cat": {
"workspaces": "Workspaces",
"workspacesBlurb": "Workspaces live in the sidebar. Each workspace has its own set of panes and surfaces.",
"surfaces": "Surfaces",
"surfacesBlurb": "Surfaces are tabs inside a pane.",
"splitPanes": "Split Panes",
"browser": "Browser",
"notifications": "Notifications",
"find": "Find",
"terminal": "Terminal",
"window": "Window"
},
"sc": {
"ws-new": "New workspace",
"ws-prev": "Previous workspace",
"ws-next": "Next workspace",
"ws-jump-1-8": "Jump to workspace 18",
"ws-jump-last": "Jump to last workspace",
"ws-close": "Close workspace",
"ws-rename": "Rename workspace",
"sf-new": "New surface",
"sf-prev-1": "Previous surface",
"sf-prev-2": "Previous surface",
"sf-jump-1-8": "Jump to surface 18",
"sf-jump-last": "Jump to last surface",
"sf-close": "Close surface",
"sp-right": "Split right",
"sp-down": "Split down",
"sp-focus": "Focus pane directionally",
"sp-browser-right": "Split browser right",
"sp-browser-down": "Split browser down",
"br-open": "Open browser surface",
"br-addr": "Focus address bar",
"br-forward": "Forward",
"br-reload": "Reload page",
"br-devtools": "Open Developer Tools",
"nt-panel": "Show notifications panel",
"nt-latest": "Jump to latest unread",
"nt-flash": "Trigger flash",
"fd-find": "Find",
"fd-next-prev": "Find next / previous",
"fd-hide": "Hide find bar",
"fd-selection": "Use selection for find",
"tm-clear": "Clear scrollback",
"tm-copy": "Copy (with selection)",
"tm-paste": "Paste",
"tm-font": "Increase / decrease font size",
"tm-reset": "Reset font size",
"wn-new": "New window",
"wn-settings": "Settings",
"wn-reload": "Reload configuration",
"wn-quit": "Quit"
}
},
"api": {
"title": "API Reference",
"metaTitle": "API Reference",
"metaDescription": "cmux CLI and Unix socket API reference. Workspace management, split panes, input control, notifications, sidebar metadata, environment variables, and detection methods.",
"intro": "cmux provides both a CLI tool and a Unix socket for programmatic control. Every command is available through both interfaces.",
"socket": "Socket",
"buildHeader": "Build",
"pathHeader": "Path",
"release": "Release",
"debug": "Debug",
"taggedDebug": "Tagged debug build",
"socketOverride": "Override with the CMUX_SOCKET_PATH environment variable. Send one newline-terminated JSON request per call:",
"socketCallout": "JSON socket requests must use method and params. Legacy v1 JSON payloads such as <legacy>'{'\"command\":\"...\"'}'</legacy> are not supported.",
"accessModes": "Access modes",
"modeHeader": "Mode",
"descriptionHeader": "Description",
"howToEnableHeader": "How to enable",
"offMode": "Socket disabled",
"offEnable": "Settings UI or CMUX_SOCKET_MODE=off",
"cmuxOnlyMode": "Only processes spawned inside cmux terminals can connect.",
"cmuxOnlyEnable": "Default mode in Settings UI",
"allowAllMode": "Allow any local process to connect (no ancestry check).",
"allowAllEnable": "Environment override only: CMUX_SOCKET_MODE=allowAll",
"accessCallout": "On shared machines, use Off or cmux processes only.",
"cliOptions": "CLI options",
"flagHeader": "Flag",
"customSocketPath": "Custom socket path",
"outputJson": "Output in JSON format",
"targetWindow": "Target a specific window",
"targetWorkspace": "Target a specific workspace",
"targetSurface": "Target a specific surface",
"idFormat": "Control identifier format in JSON output",
"workspaceCommands": "Workspace commands",
"listWorkspacesDesc": "List all open workspaces.",
"newWorkspaceDesc": "Create a new workspace.",
"selectWorkspaceDesc": "Switch to a specific workspace.",
"currentWorkspaceDesc": "Get the currently active workspace.",
"closeWorkspaceDesc": "Close a workspace.",
"splitCommands": "Split commands",
"newSplitDesc": "Create a new split pane. Directions: left, right, up, down.",
"listSurfacesDesc": "List all surfaces in the current workspace.",
"focusSurfaceDesc": "Focus a specific surface.",
"inputCommands": "Input commands",
"sendDesc": "Send text input to the focused terminal.",
"sendKeyDesc": "Send a key press. Keys: enter, tab, escape, backspace, delete, up, down, left, right.",
"sendSurfaceDesc": "Send text to a specific surface.",
"sendKeySurfaceDesc": "Send a key press to a specific surface.",
"notificationCommands": "Notification commands",
"notifyDesc": "Send a notification.",
"listNotificationsDesc": "List all notifications.",
"clearNotificationsDesc": "Clear all notifications.",
"sidebarMetadata": "Sidebar metadata commands",
"sidebarMetadataDesc": "Set status pills, progress bars, and log entries in the sidebar for any workspace. Useful for build scripts, CI integrations, and AI coding agents that want to surface state at a glance.",
"setStatusDesc": "Set a sidebar status pill. Use a unique key so different tools can manage their own entries.",
"clearStatusDesc": "Remove a sidebar status entry by key.",
"listStatusDesc": "List all sidebar status entries for a workspace.",
"setProgressDesc": "Set a progress bar in the sidebar (0.0 to 1.0).",
"clearProgressDesc": "Clear the sidebar progress bar.",
"logDesc": "Append a log entry to the sidebar. Levels: info, progress, success, warning, error.",
"clearLogDesc": "Clear all sidebar log entries.",
"listLogDesc": "List sidebar log entries.",
"sidebarStateDesc": "Dump all sidebar metadata (cwd, git branch, ports, status, progress, logs).",
"utilityCommands": "Utility commands",
"pingDesc": "Check if cmux is running and responsive.",
"capabilitiesDesc": "List available socket methods and current access mode.",
"identifyDesc": "Show focused window/workspace/pane/surface context.",
"envVariables": "Environment variables",
"variableHeader": "Variable",
"socketPathDesc": "Override the socket path used by CLI and integrations",
"socketEnableDesc": "Force-enable/disable socket (1/0, true/false, on/off)",
"socketModeDesc": "Override access mode (cmuxOnly, allowAll, off). Also accepts cmux-only/cmux_only and allow-all/allow_all",
"workspaceIdDesc": "Auto-set: current workspace ID",
"surfaceIdDesc": "Auto-set: current surface ID",
"termProgramDesc": "Set to ghostty",
"termDesc": "Set to xterm-ghostty",
"envCallout": "Legacy CMUX_SOCKET_MODE values full and notifications are still accepted for compatibility.",
"detectingCmux": "Detecting cmux",
"examples": "Examples",
"pythonClient": "Python client",
"shellScript": "Shell script",
"buildScriptNotification": "Build script with notification"
},
"notifications": {
"title": "Notifications",
"metaTitle": "Notifications",
"metaDescription": "Send desktop notifications from AI agents and scripts in cmux. CLI, OSC 99/777 escape sequences, and Claude Code hooks integration.",
"intro": "cmux supports desktop notifications, allowing AI agents and scripts to alert you when they need attention.",
"lifecycle": "Lifecycle",
"received": "Received: notification appears in panel, desktop alert fires (if not suppressed)",
"unread": "Unread: badge shown on workspace tab",
"read": "Read: cleared when you view that workspace",
"cleared": "Cleared: removed from panel",
"suppression": "Suppression",
"suppressionDesc": "Desktop alerts are suppressed when:",
"suppressItem1": "The cmux window is focused",
"suppressItem2": "The specific workspace sending the notification is active",
"suppressItem3": "The notification panel is open",
"notificationPanel": "Notification panel",
"notificationPanelDesc": "Press <openShortcut>⌘⇧I</openShortcut> to open the notification panel. Click a notification to jump to that workspace. Press <jumpShortcut>⌘⇧U</jumpShortcut> to jump directly to the workspace with the most recent unread notification.",
"customCommand": "Custom command",
"customCommandDesc": "Run a shell command every time a notification is scheduled. Set it in Settings > App > Notification Command. The command runs via /bin/sh -c with these environment variables:",
"customCommandNote": "The command runs independently of the system sound picker. Set the picker to \"None\" to use only the custom command, or keep both for a system sound plus a custom action.",
"sending": "Sending notifications",
"cli": "CLI",
"osc777Title": "OSC 777 (simple)",
"osc777Desc": "The RXVT protocol uses a fixed format with title and body:",
"osc99Title": "OSC 99 (rich)",
"osc99Desc": "The Kitty protocol supports subtitles and notification IDs:",
"variableHeader": "Variable",
"descriptionHeader": "Description",
"envTitle": "Notification title (workspace name or app name)",
"envSubtitle": "Notification subtitle",
"envBody": "Notification body text",
"featureHeader": "Feature",
"cmpTitleBody": "Title + body",
"cmpSubtitle": "Subtitle",
"cmpNotificationId": "Notification ID",
"cmpComplexity": "Complexity",
"cmpYes": "Yes",
"cmpNo": "No",
"cmpHigher": "Higher",
"cmpLower": "Lower",
"comparisonCallout": "Use OSC 777 for simple notifications. Use OSC 99 when you need subtitles or notification IDs. Use the CLI (cmux notify) for the easiest integration.",
"claudeCodeHooks": "Claude Code hooks",
"claudeCodeHooksDesc": "cmux integrates with <link>Claude Code</link> via hooks to notify you when tasks complete.",
"createHookScript": "1. Create the hook script",
"configureClaude": "2. Configure Claude Code",
"restartNote": "Restart Claude Code to apply the hooks.",
"copilotCliHooks": "GitHub Copilot CLI",
"copilotCliHooksDesc": "Copilot CLI supports <link>hooks</link> that run shell commands at lifecycle events like prompt submission, agent stop, and errors.",
"copilotCliRepoHooks": "For repo-level hooks, create a .github/hooks/notify.json file with the same structure:",
"integrationExamples": "Integration examples",
"notifyAfterLong": "Notify after long command",
"python": "Python",
"nodejs": "Node.js",
"tmuxPassthrough": "tmux passthrough",
"tmuxDesc": "If using tmux inside cmux, enable passthrough:"
},
"browserAutomation": {
"title": "Browser Automation",
"metaTitle": "Browser Automation",
"metaDescription": "cmux browser command reference for navigation, DOM interaction, waiting, inspection, JavaScript evaluation, tabs, dialogs, frames, downloads, and browser state.",
"intro": "The cmux browser command group provides browser automation against cmux browser surfaces. Use it to navigate, interact with DOM elements, inspect page state, evaluate JavaScript, and manage browser session data.",
"commandIndex": "Command Index",
"categoryHeader": "Category",
"subcommandsHeader": "Subcommands",
"navAndTargeting": "Navigation and targeting",
"waiting": "Waiting",
"domInteraction": "DOM interaction",
"inspection": "Inspection",
"jsAndInjection": "JavaScript and injection",
"framesDialogsDownloads": "Frames, dialogs, downloads",
"stateAndSession": "State and session data",
"tabsAndLogs": "Tabs and logs",
"targetingSurface": "Targeting a browser surface",
"targetingDesc": "Most subcommands require a target surface. You can pass it positionally or with --surface.",
"navigation": "Navigation",
"waitingSection": "Waiting",
"waitingDesc": "Use wait to block until selectors, text, URL fragments, load state, or a JavaScript condition is satisfied.",
"domSection": "DOM Interaction",
"domDesc": "Mutating actions support --snapshot-after for fast verification in scripts.",
"inspectionSection": "Inspection",
"inspectionDesc": "Use structured getters for scripts and snapshots/screenshots for human review.",
"jsSection": "JavaScript Eval and Injection",
"stateSection": "State",
"stateDesc": "Session data commands cover cookies, local/session storage, and full browser state snapshots.",
"tabsSection": "Tabs",
"tabsDesc": "Browser tab operations map to browser surfaces in the active browser tab group.",
"consoleSection": "Console and Errors",
"dialogsSection": "Dialogs",
"framesSection": "Frames",
"downloadsSection": "Downloads",
"commonPatterns": "Common Patterns",
"patternNavigate": "Navigate, wait, inspect",
"patternForm": "Fill a form and verify success text",
"patternDebug": "Capture debug artifacts on failure",
"patternSession": "Persist and restore browser session"
},
"ssh": {
"title": "SSH",
"metaTitle": "SSH",
"metaDescription": "Connect to remote machines with cmux ssh. Browser panes route through the remote network, images drag-and-drop via scp, and agent notifications come home.",
"intro": "cmux ssh creates a workspace for a remote machine. Browser panes route through the remote network, files drag-and-drop via scp, coding agents send notifications to your local sidebar, and sessions reconnect on drops.",
"usage": "Usage",
"usageDesc": "cmux ssh reads your ~/.ssh/config for host aliases, identity files, and proxy settings. All flags mirror their ssh equivalents.",
"flagsTitle": "Flags",
"flagName": "Flag",
"flagDesc": "Description",
"flagNameVal": "Set the workspace title",
"flagPort": "SSH port (default 22)",
"flagIdentity": "Path to identity file",
"flagSshOption": "Pass arbitrary SSH options (e.g. -o StrictHostKeyChecking=no)",
"flagNoFocus": "Create the workspace without switching to it",
"browserTitle": "Browser panes",
"browserDesc": "Browser panes in a remote workspace route all HTTP and WebSocket traffic through the remote machine's network. Type localhost:3000 and you're looking at the dev server running on the remote box. No -L flags, no manual port forwarding. Each remote workspace gets an isolated cookie store so sessions are scoped per-connection.",
"dragDropTitle": "Drag and drop",
"dragDropDesc": "Drag an image or file into a remote terminal and cmux uploads it via scp through the existing SSH connection. cmux detects the foreground SSH process by TTY and routes the upload through ControlMaster multiplexing.",
"notificationsTitle": "Notifications",
"notificationsDesc": "Processes on the remote machine can run cmux commands that execute on your local instance. When a coding agent calls cmux notify on the remote box, the notification appears in your local sidebar. The blue ring lights up on the workspace tab. Cmd+Shift+U jumps to it. Notification spam from flaky connections is suppressed with a per-host cooldown.",
"agentsTitle": "Coding agents over SSH",
"agentsDesc": "cmux claude-teams and cmux omo both work inside SSH sessions. The Go relay daemon on the remote host handles the same tmux-compat translation that the local Swift CLI does. Teammate agents spawn as native cmux splits on your local machine while computation runs on the remote box.",
"reconnectTitle": "Reconnect",
"reconnectDesc": "When the connection drops, cmux reconnects with exponential backoff (3s, 6s, 12s, up to 60s). The remote session persists and cmux reattaches on reconnect, resizing with smallest-screen-wins semantics. Default keepalive options (ServerAliveInterval=20, ServerAliveCountMax=2) are injected unless your config already sets them.",
"daemonTitle": "Relay daemon",
"daemonDesc": "On first connect, cmux probes the remote host (uname -s, uname -m) and uploads a versioned cmuxd-remote binary. The binary speaks JSON-RPC over stdio and handles three things:",
"daemonFeature": "Feature",
"daemonHow": "How",
"daemonProxy": "Browser traffic proxying",
"daemonProxyHow": "SOCKS5 and HTTP CONNECT over the daemon's stdio channel",
"daemonRelay": "CLI relay",
"daemonRelayHow": "Reverse TCP tunnel with HMAC-SHA256 auth so remote processes can call cmux commands locally",
"daemonSession": "Session management",
"daemonSessionHow": "Persists sessions across reconnects, coordinates PTY resize across multiple attachments",
"daemonPath": "The daemon binary is stored at ~/.cmux/bin/cmuxd-remote/<version>/<os>-<arch>/cmuxd-remote on the remote host and verified against a SHA-256 manifest embedded in the app."
},
"changelog": {
"title": "Changelog",
"metaTitle": "Changelog",
"metaDescription": "cmux release notes and version history. New features, bug fixes, and changes for the native macOS terminal."
},
"claudeCodeTeams": {
"title": "Claude Code Teams",
"metaTitle": "Claude Code Teams - cmux",
"metaDescription": "Run Claude Code with agent teams inside cmux. Teammate agents spawn as native cmux splits instead of tmux panes.",
"nightlyWarning": "Available in <nightly>nightly builds</nightly> only.",
"intro": "cmux claude-teams launches Claude Code with agent teams enabled. When Claude spawns teammate agents, they appear as native cmux splits instead of tmux panes, with full sidebar metadata and notifications.",
"usage": "Usage",
"usageDesc": "All arguments after claude-teams are forwarded to Claude Code. The command defaults teammate mode to auto and sets the environment so Claude uses cmux splits.",
"howItWorks": "How it works",
"howItWorksDesc": "cmux claude-teams creates a tmux shim script and configures the environment so Claude Code thinks it's running inside tmux. When Claude issues tmux commands to manage teammate panes, the shim translates them into cmux socket API calls.",
"shimStep1": "Creates a tmux shim at ~/.cmuxterm/claude-teams-bin/tmux that redirects to cmux __tmux-compat",
"shimStep2": "Sets TMUX and TMUX_PANE environment variables to simulate a tmux session",
"shimStep3": "Prepends the shim directory to PATH so Claude finds the shim before real tmux",
"shimStep4": "Enables CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 and sets teammate mode to auto",
"envVars": "Environment variables",
"envVarName": "Variable",
"envVarPurpose": "Purpose",
"envTmux": "Fake tmux socket path encoding the current cmux workspace and pane",
"envTmuxPane": "Fake tmux pane identifier mapped to the current cmux pane",
"envTeams": "Enables Claude Code agent teams feature",
"envSocket": "Path to the cmux control socket for the shim to connect to",
"directories": "Directories",
"dirPath": "Path",
"dirPurpose": "Purpose",
"dirShim": "Contains the tmux shim script that translates tmux commands to cmux API calls",
"dirStore": "Persistent storage for tmux-compat buffers and hooks",
"tmuxCommands": "Supported tmux commands",
"tmuxCommandsDesc": "The shim translates these tmux commands into cmux operations:",
"mapWorkspace": "creates a new cmux workspace",
"mapSplit": "splits the current cmux pane",
"mapSendText": "sends text to a cmux surface",
"mapReadText": "reads terminal text from a cmux surface",
"mapFocus": "focuses a cmux pane or workspace",
"mapClose": "closes a cmux surface or workspace",
"mapList": "lists cmux panes or workspaces"
},
"ohMyOpenCode": {
"title": "oh-my-opencode",
"metaTitle": "oh-my-opencode - cmux",
"metaDescription": "Run OpenCode with oh-my-openagent inside cmux. Multi-model agent orchestration with native cmux splits.",
"nightlyWarning": "Available in <nightly>nightly builds</nightly> only.",
"intro": "cmux omo launches OpenCode with the oh-my-openagent plugin in a cmux-aware environment. oh-my-openagent orchestrates multiple AI models (Claude, GPT, Gemini, Grok) as specialized agents working in parallel. When it spawns agent panes, they become native cmux splits.",
"usage": "Usage",
"usageDesc": "All arguments after omo are forwarded to OpenCode.",
"whatYouGet": "What you get",
"whatYouGetDesc": "oh-my-openagent's TmuxSessionManager spawns each background agent in its own pane. With cmux omo, those panes become native cmux splits instead of tmux panes:",
"whatYouGet1": "Each subagent (Hephaestus, Atlas, Oracle, etc.) gets its own cmux split, visible in the workspace",
"whatYouGet2": "Auto-layout management: agents are arranged in a grid (main-vertical by default) and resized as agents come and go",
"whatYouGet3": "Idle agents are automatically cleaned up after 3 consecutive idle polls with no new messages",
"whatYouGet4": "If the window is too small for a new agent pane, it queues and retries every 2 seconds until space is available",
"whatYouGet5": "Your main session stays in the primary pane while agents work beside it",
"firstRun": "First run",
"firstRunDesc": "On first run, cmux omo automatically sets up everything:",
"firstRunStep1": "Creates a shadow config at ~/.cmuxterm/omo-config/ with oh-my-opencode registered in the plugin array",
"firstRunStep2": "Installs the oh-my-opencode npm package using bun or npm if not already present",
"firstRunStep3": "Symlinks node_modules, package.json, and plugin config from your original ~/.config/opencode/ directory",
"firstRunStep4": "Enables tmux mode in the oh-my-opencode config (tmux.enabled defaults to false, cmux omo turns it on)",
"firstRunSafe": "Your original ~/.config/opencode/ config is never modified. Running plain opencode works the same as before.",
"howItWorks": "How it works",
"howItWorksDesc": "Same pattern as cmux claude-teams. A tmux shim intercepts tmux commands from oh-my-openagent's TmuxSessionManager and translates them into cmux API calls.",
"shimStep1": "Creates a tmux shim at ~/.cmuxterm/omo-bin/tmux that redirects to cmux __tmux-compat",
"shimStep2": "Sets TMUX and TMUX_PANE to simulate a tmux session",
"shimStep3": "Enables tmux.enabled in the oh-my-opencode config (required for visual pane spawning)",
"shimStep4": "Points OPENCODE_CONFIG_DIR at the shadow config",
"shimStep5": "Prepends the shim directory to PATH and execs into opencode",
"directories": "Directories",
"dirPath": "Path",
"dirPurpose": "Purpose",
"dirShim": "Contains the tmux shim script",
"dirShadow": "Shadow OpenCode config with oh-my-opencode plugin registered and tmux enabled (symlinks to your original config)",
"dirStore": "Persistent storage for tmux-compat buffers and hooks",
"shadowConfig": "Shadow config",
"shadowConfigDesc": "cmux omo uses a shadow config directory so your original OpenCode setup is unaffected:",
"shadowStep1": "Copies your ~/.config/opencode/opencode.json with oh-my-opencode added to the plugin array",
"shadowStep2": "Symlinks node_modules, package.json, and bun.lock from the original directory",
"shadowStep3": "Writes oh-my-opencode.json with tmux.enabled set to true",
"shadowStep4": "Sets OPENCODE_CONFIG_DIR to the shadow directory before launching opencode",
"envVars": "Environment variables",
"envVarName": "Variable",
"envVarPurpose": "Purpose",
"envTmux": "Fake tmux socket path encoding the current cmux workspace and pane",
"envTmuxPane": "Fake tmux pane identifier mapped to the current cmux pane",
"envConfigDir": "Points to the shadow config directory with oh-my-opencode enabled",
"envSocket": "Path to the cmux control socket for the shim to connect to"
},
"navItems": {
"gettingStarted": "Getting Started",
"concepts": "Concepts",
"configuration": "Configuration",
"customCommands": "Custom Commands",
"keyboardShortcuts": "Keyboard Shortcuts",
"apiReference": "API Reference",
"browserAutomation": "Browser Automation",
"notifications": "Notifications",
"ssh": "SSH",
"agentIntegrations": "Agent Integrations",
"claudeCodeTeams": "Claude Code Teams",
"ohMyOpenCode": "oh-my-opencode",
"changelog": "Changelog"
}
},
"legal": {
"privacyPolicy": "Privacy Policy",
"termsOfService": "Terms of Service",
"eula": "EULA"
},
"wallOfLove": {
"title": "Wall of Love",
"description": "What people are saying about cmux.",
"metaTitle": "Wall of Love — cmux",
"metaDescription": "What people are saying about cmux, the terminal built for multitasking."
},
"testimonials": {
"mitchellh": "Another day another libghostty-based project, this time a macOS terminal with vertical tabs, better organization/notifications, embedded/scriptable browser specifically targeted towards people who use a ton of terminal-based agentic workflows.",
"schrockn": "This is exactly the product I've been looking for. After two hours this am I've in love.",
"egrefen": "I've been using this all weekend and it's amazing.",
"max4c": "this has been my favorite tool for past two weeks",
"asaza": "cmux looks so good it might finally be time to say goodbye to VSCode",
"johnthedebs": "Hey, this looks seriously awesome. Love the ideas here, specifically: the programmability, layered UI, browser w/ api. Looking forward to giving this a spin. Also want to add that I really appreciate Mitchell Hashimoto creating libghostty; it feels like an exciting time to be a terminal user.",
"joeriddles": "Vertical tabs in my terminal! I never thought of that before. I use and love Firefox vertical tabs.",
"dchu17": "Gave this a run and it was pretty intuitive. Good work!",
"afruth": "I like it, ran it in the past day on three parallel projects each with several worktrees. Having this paired with lazygit and yazi / nvim made me a bit more productive than usual without having to chase multiple ghostty / iTerm instances. Also feels more natural than tmux.",
"northprint": "Tried cmux since it looked good — it's good",
"indykish": "cmux is pretty good.",
"kataring": "Switched to cmux.dev",
"scottw": "This has been such a useful find. I can't recommend it enough.",
"johnblythe": "grabbed this over the weekend and loved it. been waiting for something like this.",
"bchris91": "This is exactly what I've wanted. Amazing job thank you!",
"connorelsea": "Been using this for a week and it's fantastic. Vert tab for each WIP task. Inside, claudes on one side and browser with PR and resources on the other, switch between tasks and stay organized. Mix that with skills to have Claude watch CI recursively, etc. feeling enlightened tbh",
"tonkotsuboy": "I switched from Warp to Ghostty at the start of the year, but now I've switched to cmux. The vertical tabs are convenient, and I appreciate getting notified when Claude Code tasks finish. It's Ghostty-based so the blazing fast performance carries over. Branch display and completions I set up in Ghostty still work too."
},
"nightly": {
"title": "cmux NIGHTLY",
"subtitle": "Bleeding-edge builds from main",
"metaTitle": "cmux NIGHTLY — Nightly Builds",
"metaDescription": "Download cmux NIGHTLY, a separate app built automatically from the latest main commit. Runs alongside the stable version with its own auto-updates.",
"description": "cmux NIGHTLY is built automatically from the latest commit on main. It has its own bundle ID, so it runs alongside the stable version without conflicts. Use it to test new features before they ship.",
"download": "Download NIGHTLY for Mac",
"warning": "Nightly builds may contain bugs or incomplete features. If something breaks, report it on <githubLink>GitHub</githubLink> or in <discordLink>#nightly-bugs on Discord</discordLink>, and switch back to the stable release."
},
"languageSwitcher": {
"label": "Language"
}
}