cmux/web/messages/en.json
Lawrence Chen 84af32c56e
Add cmux omo command for oh-my-openagent integration (#2087)
* Add `cmux omo` command for OpenCode + oh-my-openagent integration

Same pattern as `cmux claude-teams`: creates a tmux shim so
oh-my-openagent's TmuxSessionManager spawns agents as native cmux
splits instead of tmux panes. Sets TMUX/TMUX_PANE env vars, prepends
shim to PATH, and execs into opencode.

Closes https://github.com/manaflow-ai/cmux/issues/2085

* Auto-install oh-my-opencode plugin when running cmux omo

Before launching opencode, cmux omo now:
- Checks if oh-my-opencode is registered in ~/.config/opencode/opencode.json
- If not, creates/updates the config with the plugin entry
- Checks if the npm package is installed in node_modules
- If not, runs bun add (or npm install) to install it
- Then proceeds with tmux shim setup and exec

* Use shadow config dir to avoid modifying user's opencode setup

Instead of writing directly to ~/.config/opencode/opencode.json,
cmux omo now creates a shadow config at ~/.cmuxterm/omo-config/ that
layers oh-my-opencode on top of the user's existing config. Symlinks
node_modules, package.json, bun.lock, and plugin config from the
original dir. Sets OPENCODE_CONFIG_DIR to the shadow directory.

Running plain `opencode` remains unaffected.

* Add Agent Integrations docs section with Claude Code Teams and oh-my-opencode pages

Adds sectioned sidebar navigation to the docs site. The new Agent
Integrations section contains separate pages for cmux claude-teams and
cmux omo, documenting usage, tmux shim mechanics, directory layout,
environment variables, and the shadow config approach. Both pages
include a nightly-only warning. Full English and Japanese translations,
nav item keys added to all 19 locales.

* Remove uppercase from sidebar section headers

* Add more spacing above and below sidebar section headers

* Enable tmux mode in oh-my-opencode config, improve docs

- cmux omo now writes tmux.enabled=true to the shadow oh-my-opencode.json
  config. Without this, oh-my-openagent's TmuxSessionManager won't spawn
  visual panes even though $TMUX is set (the config defaults to false).
- Nightly warnings now link to /nightly instead of generic text.
- Added "What you get" section to oh-my-opencode docs explaining the
  visual pane behavior (auto-layout, idle cleanup, queueing).
- Added tmux.enabled step to first-run and how-it-works sections.

* Add terminal-notifier shim to route oh-my-openagent notifications to cmux

oh-my-openagent sends macOS notifications via terminal-notifier
(args: -title <t> -message <m> [-activate <id>]). The shim in
~/.cmuxterm/omo-bin/terminal-notifier intercepts these calls and
routes them through cmux notify, so notifications appear in cmux's
sidebar panel instead of as raw macOS notifications.

* Add pane geometry to tmux-compat for oh-my-openagent grid planning

oh-my-openagent's TmuxSessionManager needs pane geometry (columns,
rows, position, window dimensions) to decide where to spawn agent
panes. Without this data, agents run headlessly.

Server side:
- pane.list v2 response now includes pixel_frame, cell_size, columns,
  rows per pane, plus container_frame at the top level
- Uses BonsplitController.layoutSnapshot() for pixel geometry and
  ghostty_surface_size() for terminal grid dimensions

CLI side:
- tmuxEnrichContextWithGeometry() computes character-cell positions
  from pixel frames and cell dimensions for tmux format variables
  (pane_width, pane_height, pane_left, pane_top, pane_active,
  window_width, window_height)
- list-panes now resolves pane targets (%uuid) via tmuxResolvePaneTarget
  instead of failing with "Workspace not found"
- display-message enriched with geometry for format strings like
  #{pane_width},#{window_width}
- tmux -V now returns "tmux 3.4" (needed by oh-my-openagent's
  tmux-path-resolver verification)

* Add socket tests for tmux-compat pane geometry

6 tests verifying the geometry enrichment works end-to-end:
- pane.list returns pixel_frame, columns, rows, cell_size, container_frame
- tmux -V returns version string
- list-panes -F renders geometry format variables as integers
- list-panes -t %<uuid> resolves pane targets
- display -p renders pane_width and window_width
- After split, two panes have different positions and halved widths

All 6 pass on macmini (cmux-macmini).

* Handle tmux -V in shim script directly (no socket needed)

oh-my-openagent's tmux-path-resolver runs tmux -V to verify the binary
works. The __tmux-compat handler requires a socket connection, which
may not be established at verification time. Handle -V in the bash
shim directly to avoid the socket dependency.

* Lower default tmux pane min widths for cmux omo

oh-my-openagent defaults: main_pane_min_width=120, agent_pane_min_width=40,
requiring 161+ columns. Most terminal windows are narrower, causing
decideSpawnActions to return canSpawn=false and defer agents forever.

cmux omo now sets: main_pane_min_width=60, agent_pane_min_width=30,
main_pane_size=50, requiring only 91 columns. Also moved tmux -V
handling into the bash shim to avoid needing a socket connection for
the version check.

* Resolve merge conflicts with main (main-vertical layout, focus param)

- Keep upstream main-vertical layout anchoring from #2119
- Keep upstream focus param (v2Bool) instead of no_focus
- Combine with our -d flag handling: -d sets focus=false
- Include customCommands nav item from main

* Implement select-layout equalize and resize-pane absolute width

When oh-my-openagent spawns agent panes, it calls select-layout
main-vertical after each split to redistribute panes evenly, then
resize-pane -x <columns> to set the main pane width. Both were
previously no-ops, causing cascading uneven splits.

Server side:
- Add workspace.equalize_splits v2 API that calls the existing
  TabManager.equalizeSplits (sets all dividers to 0.5)

CLI side:
- select-layout now calls workspace.equalize_splits before tracking
  main-vertical state
- resize-pane -x <columns> without directional flags now computes
  the pixel delta from current to desired width and resizes accordingly

* Fix equalize to use proportional divider positions

The previous equalize set all dividers to 0.5, which in a right-
recursive binary tree (from successive splits) gives 50/25/12.5/6.25%
instead of equal sizes.

New algorithm counts leaf panes on each side of each split and sets
the divider to N_left / (N_left + N_right). For 5 panes in a chain:
1/5, 1/4, 1/3, 1/2, giving each pane exactly 20%.

* Fix select-layout main-vertical to only equalize vertical splits

The proportional equalize was treating the top-level horizontal split
(main vs agent column) the same as vertical splits, setting the main
pane to 1/6 of the window with 5 agents.

For main-vertical layout, only equalize vertical splits (the agent
column), leaving the horizontal main/agent divider untouched. The
subsequent resize-pane -x handles the main pane width.

workspace.equalize_splits now accepts an optional orientation filter
("vertical" or "horizontal") to scope which splits get equalized.

* Re-equalize agent column after kill-pane

* Address PR review comments

- Fix cmux omo --help: remove omo from the help-bypass guard so
  --help shows usage text instead of trying to launch opencode
- Don't overwrite unreadable opencode.json: fail with an error
  instead of silently resetting to empty config
- Drain installer pipes concurrently before waitUntilExit to
  prevent deadlock from full pipe buffers during bun/npm install

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-26 16:07:59 -07:00

757 lines
50 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."
},
"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": {
"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"
},
"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",
"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"
}
}