These are user-generated quotes that should preserve the original wording. The domain migration should not rewrite what users said. Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
599 lines
39 KiB
JSON
599 lines
39 KiB
JSON
{
|
||
"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"
|
||
},
|
||
"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-jump-1-8": "Jump to workspace 1–8",
|
||
"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 1–8",
|
||
"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.",
|
||
"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."
|
||
},
|
||
"navItems": {
|
||
"gettingStarted": "Getting Started",
|
||
"concepts": "Concepts",
|
||
"configuration": "Configuration",
|
||
"keyboardShortcuts": "Keyboard Shortcuts",
|
||
"apiReference": "API Reference",
|
||
"browserAutomation": "Browser Automation",
|
||
"notifications": "Notifications",
|
||
"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"
|
||
}
|
||
}
|