diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
deleted file mode 100644
index dc0dd412fe..0000000000
--- a/.github/workflows/docs.yml
+++ /dev/null
@@ -1,108 +0,0 @@
-name: Deploy Docs
-
-on:
- push:
- branches: ["main"]
- paths:
- - "docs/**"
- - ".github/workflows/docs.yml"
- pull_request:
- paths:
- - "docs/**"
- - ".github/workflows/docs.yml"
- workflow_dispatch: # Allow manual triggering
-
-# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
-permissions:
- contents: read
- pages: write
- id-token: write
-
-# Allow only one concurrent deployment
-concurrency:
- group: "pages"
- cancel-in-progress: false
-
-jobs:
- build:
- runs-on: ${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-16' || 'ubuntu-latest' }}
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- with:
- fetch-depth: 0 # Required for git describe to find tags
-
- - name: Setup Rust toolchain
- uses: dtolnay/rust-toolchain@stable
-
- - name: Cache cargo binaries
- uses: actions/cache@v4
- with:
- path: ~/.cargo/bin
- key: ${{ runner.os }}-cargo-bins-mdbook-mermaid-0.16.0-linkcheck-0.7.7-pagetoc-0.2.1
- restore-keys: |
- ${{ runner.os }}-cargo-bins-
-
- - name: Setup mdBook
- uses: peaceiris/actions-mdbook@v2
- with:
- mdbook-version: "0.4.52"
-
- - name: Install mdbook-mermaid
- run: |
- if ! command -v mdbook-mermaid &> /dev/null; then
- cargo install mdbook-mermaid --version 0.16.0
- fi
- mdbook-mermaid install docs
-
- - name: Install mdbook-linkcheck
- run: |
- if ! command -v mdbook-linkcheck &> /dev/null; then
- cargo install mdbook-linkcheck --version 0.7.7
- fi
-
- - name: Install mdbook-pagetoc
- run: |
- if ! command -v mdbook-pagetoc &> /dev/null; then
- cargo install mdbook-pagetoc --version 0.2.1
- fi
-
- - name: Setup Bun
- uses: oven-sh/setup-bun@v2
- with:
- bun-version: latest
-
- - name: Install dependencies
- run: bun install
-
- - name: Build docs
- run: cd docs && mdbook build
-
- - name: Copy CNAME to build output
- run: |
- cp docs/CNAME docs/book/html/CNAME
- echo "✅ CNAME file copied to docs/book/html/"
- cat docs/book/html/CNAME
- echo ""
- echo "📦 Files in build output (docs/book/html/):"
- ls -la docs/book/html/ | head -20
- echo ""
- echo "🔍 Checking for index.html:"
- ls -lh docs/book/html/index.html
-
- - name: Upload artifact
- uses: actions/upload-pages-artifact@v3
- with:
- path: ./docs/book/html
-
- deploy:
- if: github.event_name != 'pull_request'
- environment:
- name: github-pages
- url: ${{ steps.deployment.outputs.page_url }}
- runs-on: ${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-16' || 'ubuntu-latest' }}
- needs: build
- steps:
- - name: Deploy to GitHub Pages
- id: deployment
- uses: actions/deploy-pages@v4
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000..0ee412f2ff
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,2 @@
+# Mintlify docs that use JSX comments which prettier mangles
+docs/system-prompt.md
diff --git a/Makefile b/Makefile
index 49a6c5d0fa..b79b8ec82a 100644
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,7 @@ include fmt.mk
.PHONY: test test-unit test-integration test-watch test-coverage test-e2e smoke-test
.PHONY: dist dist-mac dist-win dist-linux
.PHONY: vscode-ext vscode-ext-install
-.PHONY: docs docs-server docs-watch check-docs-links
+.PHONY: docs-server
.PHONY: storybook storybook-build test-storybook chromatic
.PHONY: benchmark-terminal
.PHONY: ensure-deps rebuild-native
@@ -213,7 +213,7 @@ build/icon.png: docs/img/logo.webp scripts/generate-icons.ts
@bun scripts/generate-icons.ts png
## Quality checks (can run in parallel)
-static-check: lint typecheck fmt-check check-eager-imports check-bench-agent check-docs-links ## Run all static checks (includes startup performance checks)
+static-check: lint typecheck fmt-check check-eager-imports check-bench-agent ## Run all static checks
check-bench-agent: ## Verify terminal-bench agent configuration and imports
@./scripts/check-bench-agent.sh
@@ -337,23 +337,8 @@ vscode-ext-install: ## Build and install VS Code extension locally
@$(MAKE) -C vscode install
## Documentation
-docs: ## Build documentation
- @./scripts/docs_build.sh
-
-docs-server: ## Serve documentation locally (opens browser)
- @./scripts/docs.sh
-
-docs-watch: ## Watch and rebuild documentation
- @cd docs && mdbook watch
-
-check-docs-links: ## Check documentation for broken links (requires mdbook tools via nix)
- @if command -v mdbook >/dev/null 2>&1 && command -v mdbook-linkcheck >/dev/null 2>&1; then \
- $(MAKE) docs && \
- echo "🔗 Checking documentation links..." && \
- cd docs && mdbook-linkcheck --standalone .; \
- else \
- echo "⏭️ Skipping docs link check (mdbook tools not installed - use 'nix develop' for full checks)"; \
- fi
+docs-server: node_modules/.installed ## Serve documentation locally (Mintlify dev server)
+ @cd docs && npx mintlify dev
## Storybook
storybook: node_modules/.installed ## Start Storybook development server
diff --git a/docs/AGENTS.md b/docs/AGENTS.md
index 81f31c75d1..a671f38140 100644
--- a/docs/AGENTS.md
+++ b/docs/AGENTS.md
@@ -1,4 +1,7 @@
-# AGENT INSTRUCTIONS
+---
+title: AGENTS.md
+description: Agent instructions for AI assistants working on the mux codebase
+---
**Prime directive:** keep edits minimal and token-efficient—say only what conveys actionable signal.
@@ -153,7 +156,7 @@ Avoid mock-heavy tests that verify implementation details rather than behavior.
- Prefer fixes that simplify existing code; such simplifications often do not need new tests.
- When adding complexity, add or extend tests. If coverage requires new infrastructure, propose the harness and then add the tests there.
-
+{/_ IMPORTANT: Do not rename these Mode headings; the parser extracts them verbatim. _/}
## Mode: Exec
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
deleted file mode 100644
index 9942ce0bab..0000000000
--- a/docs/SUMMARY.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Summary
-
-# Introduction
-
-- [Introduction](./intro.md)
-- [Install](./install.md)
-- [CLI](./cli.md)
-- [Why Parallelize?](./why-parallelize.md)
-
-# Features
-
-- [Workspaces](./workspaces.md)
- - [Runtimes](./runtime.md)
- - [Local](./runtime/local.md)
- - [Worktree](./runtime/worktree.md)
- - [SSH](./runtime/ssh.md)
- - [Forking](./fork.md)
- - [Init Hooks](./init-hooks.md)
-- [VS Code Extension](./vscode-extension.md)
-- [Models](./models.md)
-- [Keyboard Shortcuts](./keybinds.md)
- - [Vim Mode](./vim-mode.md)
-- [Context Management](./context-management.md)
-- [Instruction Files](./instruction-files.md)
-- [Project Secrets](./project-secrets.md)
- - [Agentic Git Identity](./agentic-git-identity.md)
-
-# Advanced
-
-- [Prompting Tips](./prompting-tips.md)
-- [System Prompt](./system-prompt.md)
-- [Telemetry](./telemetry.md)
-- [Mux Codes](./mux-codes.md)
-
-# Development
-
-- [Storybook](./storybook.md)
-- [Terminal Benchmarking](./benchmarking.md)
-- [AGENTS](./AGENTS.md)
diff --git a/docs/agentic-git-identity.md b/docs/agentic-git-identity.md
index 2b7934eae4..c69cf89f16 100644
--- a/docs/agentic-git-identity.md
+++ b/docs/agentic-git-identity.md
@@ -1,4 +1,7 @@
-# Agentic Git Identity
+---
+title: Agentic Git Identity
+description: Configure a separate Git identity for AI-generated commits
+---
Configure mux to use a separate Git identity for AI-generated commits, making it easy to distinguish between human and AI contributions. Reasons to use a separate identity include:
@@ -23,7 +26,7 @@ Create a separate GitHub account for your agent:
2. Use a distinctive username (e.g., `yourname-agent`, `yourname-ai`)
3. Use a separate email (GitHub allows plus-addressing: `yourname+ai@example.com`)
-> **Note**: This is optional but recommended. You can also use your main account with a different email/name.
+This is optional but recommended. You can also use your main account with a different email/name.
## Step 2: Generate Classic GitHub Token
@@ -54,7 +57,7 @@ Add the Git identity environment variables as [Project Secrets](./project-secret
These environment variables will be automatically injected when the agent runs Git commands in that project.
-> **Note**: If you need the agent identity outside of mux, you can alternatively set these as global environment variables in your shell configuration (`~/.zshrc`, `~/.bashrc`, etc.)
+If you need the agent identity outside of mux, you can alternatively set these as global environment variables in your shell configuration (`~/.zshrc`, `~/.bashrc`, etc.)
## Step 4: Configure GitHub Authentication
@@ -98,4 +101,4 @@ git config --global credential.helper ""
git config --global --add credential.helper '!gh auth git-credential'
```
-⚠️ **Warning**: The "replace all" approach will disable platform keychain helpers and may break Git authentication for non-GitHub remotes (GitLab, Bitbucket, etc.).
+The "replace all" approach will disable platform keychain helpers and may break Git authentication for non-GitHub remotes (GitLab, Bitbucket, etc.).
diff --git a/docs/benchmarking.md b/docs/benchmarking.md
index c479d64729..091e4e2be2 100644
--- a/docs/benchmarking.md
+++ b/docs/benchmarking.md
@@ -1,11 +1,14 @@
-# Terminal Benchmarking
+---
+title: Terminal Benchmarking
+description: Run Terminal-Bench benchmarks with the mux adapter
+---
mux ships with a headless adapter for [Terminal-Bench](https://www.tbench.ai/). The adapter runs the Electron backend without opening a window and exercises it through the same IPC paths we use in integration tests. This page documents how to launch benchmarks from the repository tree.
## Prerequisites
- Docker must be installed and running. Terminal-Bench executes each task inside a dedicated Docker container.
-- `uv` is available in the nix `devShell` (provided via `flake.nix`), or install it manually from .
+- `uv` is available in the nix `devShell` (provided via `flake.nix`), or install it manually from [docs.astral.sh/uv](https://docs.astral.sh/uv/).
- Standard provider API keys (e.g. `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`) should be exported so mux can stream responses.
Optional environment overrides:
diff --git a/docs/book.toml b/docs/book.toml
deleted file mode 100644
index e27b57ad36..0000000000
--- a/docs/book.toml
+++ /dev/null
@@ -1,35 +0,0 @@
-[book]
-authors = ["Ammar Bandukwala"]
-language = "en"
-multilingual = false
-src = "."
-title = "mux docs"
-
-[build]
-build-dir = "book"
-create-missing = true
-use-default-preprocessors = true
-
-[preprocessor.mermaid]
-command = "mdbook-mermaid"
-
-[preprocessor.pagetoc]
-
-[preprocessor.shiki]
-command = "bun ../scripts/mdbook-shiki.ts"
-renderer = ["html"]
-
-[output.html]
-git-repository-url = "https://github.com/coder/mux"
-edit-url-template = "https://github.com/coder/mux/edit/main/docs/{path}"
-additional-js = ["mermaid.min.js", "mermaid-init.js", "theme/pagetoc.js", "theme/copy-buttons.js"]
-additional-css = ["theme/custom.css", "theme/pagetoc.css"]
-default-theme = "navy"
-preferred-dark-theme = "navy"
-favicon = "theme/favicon.webp"
-
-[output.html.fold]
-enable = true
-level = 0
-
-[output.linkcheck]
diff --git a/docs/cli.md b/docs/cli.md
index c86187f96f..139bf339c0 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -1,4 +1,7 @@
-# Command Line Interface
+---
+title: Command Line Interface
+description: Run one-off agent tasks from the command line with mux run
+---
Mux provides a CLI for running one-off agent tasks without the desktop app. Unlike the interactive desktop experience, `mux run` executes a single request to completion and exits.
diff --git a/docs/context-management.md b/docs/context-management.md
index 89459f471f..5dd6957afa 100644
--- a/docs/context-management.md
+++ b/docs/context-management.md
@@ -1,4 +1,7 @@
-# Context Management
+---
+title: Context Management
+description: Commands for managing conversation history and token usage
+---
Commands for managing conversation history length and token usage.
@@ -149,7 +152,7 @@ Remove oldest 50% of messages.
### OpenAI Responses API Limitation
-⚠️ **`/truncate` does not work with OpenAI models** due to the Responses API architecture:
+`/truncate` does not work with OpenAI models due to the Responses API architecture:
- OpenAI's Responses API stores conversation state server-side
- Manual message deletion via `/truncate` doesn't affect the server-side state
diff --git a/docs/custom.css b/docs/custom.css
new file mode 100644
index 0000000000..149e834a76
--- /dev/null
+++ b/docs/custom.css
@@ -0,0 +1,82 @@
+/* Override logo height */
+.nav-logo {
+ height: 2.4rem !important;
+}
+
+/* Target logo images specifically */
+img[src*="/img/light.svg"],
+img[src*="/img/dark.svg"] {
+ height: 2.4rem !important;
+}
+
+/* Override Tailwind h-6 class specifically for logo */
+.nav-logo.h-6,
+.h-6[src*="/img/"] {
+ height: 2.4rem !important;
+}
+
+/* More specific targeting for Mintlify logo classes */
+.w-auto.relative.object-contain.hidden.dark\:block.px-1.h-6.max-w-48,
+.w-auto.relative.object-contain.block.dark\:hidden.px-1.h-6.max-w-48 {
+ height: 2.4rem !important;
+}
+
+/* Override link colors to match grayscale theme */
+a,
+.prose a,
+main a,
+[data-testid="main-content"] a {
+ color: #999 !important;
+}
+
+a:hover,
+.prose a:hover,
+main a:hover,
+[data-testid="main-content"] a:hover {
+ color: #FFF !important;
+}
+
+/* Apply styling to all images in docs */
+main img,
+.prose img,
+[data-testid="main-content"] img,
+.content img {
+ margin: 24px 0 !important;
+ border-radius: 8px !important;
+}
+
+/* Apply same styling to videos in docs */
+main video,
+.prose video,
+[data-testid="main-content"] video,
+.content video {
+ margin: 24px 0 !important;
+ border-radius: 8px !important;
+}
+
+/* Make table headers left-aligned */
+main th,
+.prose th,
+[data-testid="main-content"] th,
+.content th {
+ text-align: left !important;
+}
+
+/* Hide only the Powered by Mintlify attribution in footer */
+[data-testid="footer-powered-by"],
+footer a[href*="mintlify.com"],
+footer a[href*="//mintlify.com"],
+footer a[href^="https://mintlify"],
+footer a[href^="http://mintlify"],
+footer a[href*="mintlify.app"],
+footer a[href*="mintcdn.com"][aria-label*="Mintlify"],
+footer [aria-label*="Powered by Mintlify"],
+footer [aria-label="Powered by Mintlify"] {
+ display: none !important;
+}
+
+/* Preserve footer layout even if attribution is removed */
+footer [data-testid="footer-powered-by"] + *,
+footer a[href*="mintlify.com"] + * {
+ margin-left: 0 !important;
+}
diff --git a/docs/docs.json b/docs/docs.json
new file mode 100644
index 0000000000..4ae93545d9
--- /dev/null
+++ b/docs/docs.json
@@ -0,0 +1,78 @@
+{
+ "$schema": "https://mintlify.com/docs.json",
+ "theme": "maple",
+ "name": "mux",
+ "logo": {
+ "light": "/img/light.svg",
+ "dark": "/img/dark.svg"
+ },
+ "favicon": "/favicon.svg",
+ "colors": {
+ "primary": "#999",
+ "light": "#FFF",
+ "dark": "#000"
+ },
+ "appearance": {
+ "default": "dark"
+ },
+ "interaction": {
+ "drilldown": true
+ },
+ "icons": {
+ "library": "lucide"
+ },
+ "css": ["/custom.css"],
+ "navigation": {
+ "tabs": [
+ {
+ "tab": "Documentation",
+ "groups": [
+ {
+ "group": "Introduction",
+ "pages": ["index", "install", "cli", "why-parallelize"]
+ },
+ {
+ "group": "Features",
+ "pages": [
+ {
+ "group": "Workspaces",
+ "pages": [
+ "workspaces",
+ {
+ "group": "Runtimes",
+ "pages": ["runtime", "runtime/local", "runtime/worktree", "runtime/ssh"]
+ },
+ "fork",
+ "init-hooks"
+ ]
+ },
+ "vscode-extension",
+ "models",
+ {
+ "group": "Keyboard Shortcuts",
+ "pages": ["keybinds", "vim-mode"]
+ },
+ "context-management",
+ "instruction-files",
+ {
+ "group": "Project Secrets",
+ "pages": ["project-secrets", "agentic-git-identity"]
+ }
+ ]
+ },
+ {
+ "group": "Advanced",
+ "pages": ["prompting-tips", "system-prompt", "telemetry", "mux-codes"]
+ },
+ {
+ "group": "Development",
+ "pages": ["storybook", "benchmarking", "AGENTS"]
+ }
+ ]
+ }
+ ]
+ },
+ "footerSocials": {
+ "github": "https://github.com/coder/mux"
+ }
+}
diff --git a/docs/favicon.svg b/docs/favicon.svg
new file mode 100644
index 0000000000..7b3c1cd3a8
--- /dev/null
+++ b/docs/favicon.svg
@@ -0,0 +1,4 @@
+
diff --git a/docs/fork.md b/docs/fork.md
index 28a982e5f0..ab104f03a8 100644
--- a/docs/fork.md
+++ b/docs/fork.md
@@ -1,4 +1,7 @@
-# Forking Workspaces
+---
+title: Forking Workspaces
+description: Clone workspaces with conversation history to explore alternatives
+---
Use `/fork` to clone a workspace with its full conversation history and UI state. The forked workspace gets a new workspace on a new branch (using the same backend as the current workspace).
diff --git a/docs/img/dark.svg b/docs/img/dark.svg
new file mode 100644
index 0000000000..9b390ab80e
--- /dev/null
+++ b/docs/img/dark.svg
@@ -0,0 +1,4 @@
+
diff --git a/docs/img/light.svg b/docs/img/light.svg
new file mode 100644
index 0000000000..c31296c141
--- /dev/null
+++ b/docs/img/light.svg
@@ -0,0 +1,4 @@
+
diff --git a/docs/intro.md b/docs/index.md
similarity index 86%
rename from docs/intro.md
rename to docs/index.md
index 8cec08c169..fb80c37dba 100644
--- a/docs/intro.md
+++ b/docs/index.md
@@ -1,6 +1,9 @@
-# Introduction
+---
+title: Introduction
+description: mux - Coding Agent Multiplexer for AI-assisted development
+---
-
+
**mux** (Coding Agent Multiplexer) is a cross-platform desktop application for AI-assisted development with isolated workspace management.
diff --git a/docs/init-hooks.md b/docs/init-hooks.md
index eaa14e050d..dd84bea71d 100644
--- a/docs/init-hooks.md
+++ b/docs/init-hooks.md
@@ -1,4 +1,7 @@
-# Init Hooks
+---
+title: Init Hooks
+description: Run setup commands automatically when creating new workspaces
+---
Add a `.mux/init` executable script to your project root to run commands when creating new workspaces.
diff --git a/docs/install.md b/docs/install.md
index 752e770c4c..45a6e582f6 100644
--- a/docs/install.md
+++ b/docs/install.md
@@ -1,4 +1,7 @@
-# Install
+---
+title: Install
+description: Download and install mux for macOS, Linux, and Windows
+---
## Downloads
@@ -19,7 +22,7 @@ Download pre-built binaries of `main` from [GitHub Actions](https://github.com/c
- `macos-dmg-arm64` (Apple Silicon)
- **Linux**: AppImage (portable, works on most distros)
-> **Note**: Windows builds are only available from [releases](https://github.com/coder/mux/releases), not from development builds.
+Windows builds are only available from [releases](https://github.com/coder/mux/releases), not from development builds.
To download:
@@ -54,11 +57,11 @@ The app is code-signed and notarized by Apple, so it will open without security
3. Follow the installation prompts
4. Launch Mux from the Start menu or desktop shortcut
-> ⚠️ Windows support is currently in alpha. Please [report any issues](https://github.com/coder/mux/issues) you encounter.
+Windows support is currently in alpha. Please [report any issues](https://github.com/coder/mux/issues) you encounter.
### Testing Pre-Release Builds
-⚠️ **Note**: Only builds from the `main` branch are signed and notarized. If you're testing a build from a pull request or other branch, you'll need to bypass macOS Gatekeeper:
+Only builds from the `main` branch are signed and notarized. If you're testing a build from a pull request or other branch, you'll need to bypass macOS Gatekeeper:
1. After installing, open Terminal
2. Run: `xattr -cr /Applications/Mux.app`
diff --git a/docs/instruction-files.md b/docs/instruction-files.md
index 3264ce7311..998e32001d 100644
--- a/docs/instruction-files.md
+++ b/docs/instruction-files.md
@@ -1,4 +1,7 @@
-# Instruction Files
+---
+title: Instruction Files
+description: Configure agent behavior with AGENTS.md files
+---
## Overview
@@ -9,7 +12,7 @@ mux layers instructions from two locations:
Priority within each location: `AGENTS.md` → `AGENT.md` → `CLAUDE.md` (first match wins). If the base file is found, mux also appends `AGENTS.local.md` from the same directory when present.
-> **Note:** mux strips HTML-style markdown comments (``) from instruction files before sending them to the model. Use these comments for editor-only metadata—they will not reach the agent.
+mux strips HTML-style markdown comments (``) from instruction files before sending them to the model. Use these comments for editor-only metadata—they will not reach the agent.
## Scoped Instructions
diff --git a/docs/keybinds.md b/docs/keybinds.md
index 15b14339dc..3d97ee43a9 100644
--- a/docs/keybinds.md
+++ b/docs/keybinds.md
@@ -1,8 +1,11 @@
-# Keyboard Shortcuts
+---
+title: Keyboard Shortcuts
+description: Complete keyboard shortcut reference for mux
+---
mux is designed to be keyboard-driven for maximum efficiency. All major actions have keyboard shortcuts.
-> **Note**: This document should be kept in sync with `src/utils/ui/keybinds.ts`, which is the source of truth for keybind definitions.
+This document should be kept in sync with `src/utils/ui/keybinds.ts`, which is the source of truth for keybind definitions.
## Platform Conventions
diff --git a/docs/models.md b/docs/models.md
index e356b755dd..53a374d66f 100644
--- a/docs/models.md
+++ b/docs/models.md
@@ -1,4 +1,7 @@
-## Models
+---
+title: Models
+description: Configure AI providers including Anthropic, OpenAI, Google, xAI, and more
+---
See also:
diff --git a/docs/mux-codes.md b/docs/mux-codes.md
index d75feba8fa..720f383382 100644
--- a/docs/mux-codes.md
+++ b/docs/mux-codes.md
@@ -1,4 +1,7 @@
-# Mux Codes
+---
+title: Mux Codes
+description: Redeem free LLM token credits for evaluating Mux
+---
Mux codes are free LLM token credits for evaluating Mux. Coder employees disburse them at events to users we think will enjoy Mux. If you want to get your hands on a code, ask the nearest Coder employee.
diff --git a/docs/project-secrets.md b/docs/project-secrets.md
index 59e9721b55..bba674a36a 100644
--- a/docs/project-secrets.md
+++ b/docs/project-secrets.md
@@ -1,4 +1,7 @@
-# Project Secrets
+---
+title: Project Secrets
+description: Manage environment variables and API keys for your projects
+---
Securely manage environment variables for your projects in mux. Project secrets are automatically injected when the agent executes bash commands, making it easy to provide API keys, tokens, and other sensitive configuration.
diff --git a/docs/prompting-tips.md b/docs/prompting-tips.md
index ecb77d6aa8..398fd94cc6 100644
--- a/docs/prompting-tips.md
+++ b/docs/prompting-tips.md
@@ -1,4 +1,7 @@
-# Prompting Tips
+---
+title: Prompting Tips
+description: Tips and tricks for getting the most out of your AI agents
+---
> Some tips and tricks from the mux developers on getting the most out of your agents.
@@ -35,7 +38,7 @@ passes.
## Aggressively prune context
Even though Sonnet 4.5 has up to 1M in potential context, we experience a noticeable improvement in
-quality when kept <100k tokens. We suggest running `/compact` with a continue message
+quality when kept under 100k tokens. We suggest running `/compact` with a continue message
often to keep context small. For example:
```
diff --git a/docs/runtime.md b/docs/runtime.md
index 8efafa570d..78c9d019c7 100644
--- a/docs/runtime.md
+++ b/docs/runtime.md
@@ -1,4 +1,7 @@
-# Runtimes
+---
+title: Runtimes
+description: Configure where and how mux executes agent workspaces
+---
Runtimes determine where and how mux executes agent workspaces.
diff --git a/docs/runtime/local.md b/docs/runtime/local.md
index 24275b6239..0c43094a5f 100644
--- a/docs/runtime/local.md
+++ b/docs/runtime/local.md
@@ -1,4 +1,7 @@
-# Local Runtime
+---
+title: Local Runtime
+description: Run agents directly in your project directory
+---
Local runtime runs the agent directly in your project directory—the same directory you use for development. There's no worktree isolation; the agent works in your actual working copy.
@@ -10,9 +13,9 @@ Local runtime runs the agent directly in your project directory—the same direc
## Caveats
-⚠️ **No isolation**: Multiple local workspaces for the same project see and modify the same files. Running them simultaneously can cause conflicts. mux shows a warning when another local workspace is actively streaming.
+**No isolation**: Multiple local workspaces for the same project see and modify the same files. Running them simultaneously can cause conflicts. mux shows a warning when another local workspace is actively streaming.
-⚠️ **Affects your working copy**: Agent changes happen in your actual project directory.
+**Affects your working copy**: Agent changes happen in your actual project directory.
## Filesystem
diff --git a/docs/runtime/ssh.md b/docs/runtime/ssh.md
index 908ae1357c..27fe3d4c58 100644
--- a/docs/runtime/ssh.md
+++ b/docs/runtime/ssh.md
@@ -1,4 +1,7 @@
-# SSH Runtime
+---
+title: SSH Runtime
+description: Run agents on remote hosts over SSH for security and performance
+---
mux supports using remote hosts over SSH for workspaces. When configured, all tool operations will
execute over SSH and the agent is securely isolated from your local machine.
@@ -33,7 +36,7 @@ Host ovh-1
## Authentication
-> **Note**: As we delegate to `ssh`, this is really an abbreviated reference of how `ssh` authenticates.
+As we delegate to `ssh`, this is really an abbreviated reference of how `ssh` authenticates.
There are a few practical ways to set up authentication.
diff --git a/docs/runtime/worktree.md b/docs/runtime/worktree.md
index 04187c0d8f..c1e63fe323 100644
--- a/docs/runtime/worktree.md
+++ b/docs/runtime/worktree.md
@@ -1,4 +1,7 @@
-# Worktree Runtime
+---
+title: Worktree Runtime
+description: Isolated git worktree environments for parallel agent work
+---
Worktree runtime uses [git worktrees](https://git-scm.com/docs/git-worktree) on your local machine. Worktrees share the `.git` directory with your main repository while maintaining independent working changes and checkout state.
diff --git a/docs/storybook.md b/docs/storybook.md
index 3a1d73b6d6..4b87ceb78a 100644
--- a/docs/storybook.md
+++ b/docs/storybook.md
@@ -1,4 +1,7 @@
-# Storybook
+---
+title: Storybook
+description: Develop and test UI components in isolation
+---
Storybook is a tool for developing and testing UI components in isolation. It provides a sandboxed environment where you can build, view, and test components without running the full Electron application.
diff --git a/docs/system-prompt.md b/docs/system-prompt.md
index b422eb8526..fb5bb1305c 100644
--- a/docs/system-prompt.md
+++ b/docs/system-prompt.md
@@ -1,3 +1,8 @@
+---
+title: System Prompt
+description: How mux constructs the system prompt for AI models
+---
+
# System Prompt
`mux` is interested in supporting a variety of models at different levels of performance.
@@ -8,7 +13,8 @@ Even with consistent support at the protocol layer, we have found that different
Here's a snippet from `src/node/services/systemMessage.ts` which is our shared system prompt (minus tools).
-
+
+{/* BEGIN SYSTEM_PROMPT_DOCS */}
```typescript
// The PRELUDE is intentionally minimal to not conflict with the user's instructions.
@@ -56,4 +62,5 @@ You are in a git worktree at ${workspacePath}
}
```
-
+
+{/* END SYSTEM_PROMPT_DOCS */}
diff --git a/docs/theme/copy-buttons.js b/docs/theme/copy-buttons.js
deleted file mode 100644
index 35bbc87ced..0000000000
--- a/docs/theme/copy-buttons.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Copy button handler for statically rendered code blocks
- * Attaches click handlers to pre-rendered buttons
- */
-
-(function () {
- "use strict";
-
- // Initialize copy buttons after DOM loads
- if (document.readyState === "loading") {
- document.addEventListener("DOMContentLoaded", initCopyButtons);
- } else {
- initCopyButtons();
- }
-
- function initCopyButtons() {
- document.querySelectorAll(".code-copy-button").forEach(function (button) {
- button.addEventListener("click", function () {
- var wrapper = button.closest(".code-block-wrapper");
- var code = wrapper.dataset.code;
-
- if (navigator.clipboard && navigator.clipboard.writeText) {
- navigator.clipboard
- .writeText(code)
- .then(function () {
- showFeedback(button, true);
- })
- .catch(function (err) {
- console.warn("Failed to copy:", err);
- showFeedback(button, false);
- });
- } else {
- // Fallback for older browsers
- fallbackCopy(code);
- showFeedback(button, true);
- }
- });
- });
- }
-
- function showFeedback(button, success) {
- var originalContent = button.innerHTML;
-
- // Match the main app's CopyButton feedback - show "Copied!" text
- if (success) {
- button.innerHTML = 'Copied!';
- } else {
- button.innerHTML = 'Failed!';
- }
- button.disabled = true;
-
- setTimeout(function () {
- button.innerHTML = originalContent;
- button.disabled = false;
- }, 2000);
- }
-
- function fallbackCopy(text) {
- var textarea = document.createElement("textarea");
- textarea.value = text;
- textarea.style.position = "fixed";
- textarea.style.opacity = "0";
- document.body.appendChild(textarea);
- textarea.select();
- document.execCommand("copy");
- document.body.removeChild(textarea);
- }
-})();
diff --git a/docs/theme/custom.css b/docs/theme/custom.css
deleted file mode 100644
index dfe4ff72c7..0000000000
--- a/docs/theme/custom.css
+++ /dev/null
@@ -1,639 +0,0 @@
-/* mux Documentation Theme — cohesive with the desktop app
- ---------------------------------------------------------
- Goals
- - Honor the app's color tokens and typography
- - Improve readability (spacing, line-length, contrast)
- - Sharpen components (sidebar, code, tables, kbd, details)
- - Keep mdBook structure intact; override with CSS variables only
-*/
-
-:root {
- /* Core tokens mirrored from src/styles/colors.tsx */
- --color-background: hsl(0deg 2.51% 10.04%);
- --color-background-secondary: hsl(0deg 0% 0%);
- --color-border: hsl(240 2% 25%);
- --color-text: hsl(0 0% 83%);
- --color-text-secondary: hsl(0 0% 42%);
-
- /* Brand/Mode accents */
- --color-plan-mode: hsl(210 70% 40%);
- --color-plan-mode-hover: color-mix(in srgb, var(--color-plan-mode), white 20%);
- --color-exec-mode: hsl(268.56 94.04% 55.19%);
- --color-edit-mode: hsl(120 50% 35%);
- --color-interrupted: hsl(38 92% 50%);
-
- /* Docs-specific tokens */
- --color-code: hsl(214.52deg 100% 71.11%);
- --link-color: rgb(62, 140, 218);
- --link-hover: var(--color-plan-mode-hover);
- --content-max-width: 78ch;
- --radius-lg: 8px;
- --radius-md: 6px;
- --radius-sm: 4px;
- --radius-xs: 3px;
- --shadow-1: 0 1px 1px hsl(0 0% 0% / 0.25);
- --shadow-2: 0 2px 10px hsl(0 0% 0% / 0.35);
-
- /* Typography tokens (fallbacks match src/styles/fonts.tsx) */
- --font-primary:
- system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Helvetica Neue", Arial,
- sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- --font-monospace:
- "Monaco", "Menlo", "Ubuntu Mono", "Consolas", "Courier New", monospace, "Apple Color Emoji",
- "Segoe UI Emoji", "Segoe UI Symbol";
-
- /* mdBook variable overrides */
- --bg: var(--color-background) !important;
- --fg: var(--color-text) !important;
- --sidebar-bg: var(--color-background-secondary) !important;
- --sidebar-fg: var(--color-text) !important;
- --icons: var(--color-text-secondary) !important;
- --table-alternate-bg: var(--color-background-secondary) !important;
- --line-height: 1.6;
-}
-
-/* Base layout and typography */
-html,
-body {
- background: var(--color-background) !important;
- color: var(--color-text) !important;
- font-family: var(--font-primary);
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-rendering: optimizeLegibility;
-}
-
-.content .page,
-.content {
- line-height: var(--line-height);
- background: var(--color-background) !important;
-}
-
-.content .chapter {
- max-width: var(--content-max-width);
- margin: 0 auto;
- padding: 2rem 2.25rem;
- line-height: var(--line-height);
- letter-spacing: 0.01em;
-}
-
-/* Headings */
-h2,
-h3 {
- margin-block-start: 1em;
-}
-h4,
-h5 {
- margin-block-start: 1em;
-}
-.content .chapter h1,
-.content .chapter h2,
-.content .chapter h3,
-.content .chapter h4,
-.content .chapter h5,
-.content .chapter h6 {
- color: var(--color-text);
- border-bottom-color: var(--color-border) !important;
-}
-
-.content .chapter h1 {
- font-size: 2rem;
- padding-bottom: 0.5rem;
- border-bottom: 2px solid var(--color-border);
- margin-top: 0.5rem;
-}
-.content .chapter h2 {
- font-size: 1.55rem;
- padding-bottom: 0.35rem;
- border-bottom: 1px solid var(--color-border);
- margin-top: 2.2rem;
-}
-.content .chapter h3 {
- font-size: 1.25rem;
- margin-top: 1.8rem;
- color: color-mix(in srgb, var(--color-text), white 5%);
-}
-
-/* Heading anchors */
-.header .anchor {
- color: var(--color-text-secondary) !important;
-}
-.header .anchor:focus-visible {
- outline: 2px solid var(--color-plan-mode);
- outline-offset: 2px;
- border-radius: var(--radius-xs);
-}
-
-/* Links */
-a {
- color: var(--link-color) !important;
- text-underline-offset: 2px;
- text-decoration-thickness: 0.08em;
-}
-a:hover {
- color: var(--link-hover) !important;
- text-decoration: none;
-}
-a:focus-visible {
- outline: 2px solid var(--color-plan-mode);
- outline-offset: 2px;
- border-radius: var(--radius-xs);
-}
-
-/* Sidebar */
-.sidebar {
- background: var(--sidebar-bg) !important;
- border-right: 1px solid var(--color-border) !important;
-}
-.sidebar .part-title {
- color: color-mix(in srgb, var(--color-text), white 20%) !important;
- font-weight: 700;
-}
-.sidebar .chapter li.chapter-item a {
- color: var(--color-text) !important;
-}
-.sidebar .chapter li.chapter-item a.active {
- color: var(--color-plan-mode) !important;
- background: transparent !important;
-}
-.sidebar .chapter li.chapter-item a:hover {
- color: var(--link-hover) !important;
- background: color-mix(in srgb, var(--color-background-secondary), white 8%);
-}
-.sidebar-resize-handle {
- background: var(--color-background-secondary) !important;
-}
-
-/* Menu bar */
-#menu-bar {
- background: var(--color-background-secondary) !important;
- border-bottom: 1px solid var(--color-border) !important;
-}
-.icon-button {
- color: var(--color-text-secondary) !important;
-}
-.icon-button:hover {
- color: var(--color-text) !important;
-}
-#theme-toggle,
-.theme-popup {
- display: none !important;
-}
-
-/* Search */
-#searchbar {
- background: var(--color-background-secondary) !important;
- border: 1px solid var(--color-border) !important;
- color: var(--color-text) !important;
- border-radius: var(--radius-sm);
-}
-#searchbar:focus {
- border-color: var(--color-plan-mode) !important;
- outline: none;
- box-shadow: 0 0 0 3px hsl(from var(--color-plan-mode) h s l / 0.15);
-}
-
-/* Paragraph rhythm */
-.content .chapter p {
- margin: 0.9rem 0;
-}
-
-/* Lists */
-.content .chapter ul,
-.content .chapter ol {
- padding-left: 1.4rem;
- margin: 0.75rem 0;
-}
-.content .chapter li {
- margin: 0.35rem 0;
-}
-.content .chapter li::marker {
- color: var(--color-text-secondary);
-}
-
-.content ul {
- margin-block-start: 0;
- line-height: 1.6;
-}
-
-.content p {
- line-height: var(--line-height);
-}
-
-/* Remove margin between p and following list */
-p:has(+ ul),
-p:has(+ ol) {
- margin-block-end: 0.5em;
-}
-
-/* Inline code */
-:not(pre) > code {
- background: var(--color-background-secondary) !important;
- color: var(--color-code) !important;
- padding: 2px 6px;
- font-family: var(--font-monospace);
- font-size: 0.92em;
- border-radius: var(--radius-xs);
-}
-
-/* Code blocks */
-pre {
- background: var(--color-background-secondary) !important;
- border: 1px solid var(--color-border) !important;
- border-radius: var(--radius-md);
- box-shadow: var(--shadow-1);
- overflow: auto;
- margin: 1rem 0;
-}
-pre > code {
- background: transparent !important;
- color: var(--color-code) !important;
- display: block;
- padding: 0.9rem 1rem;
- font-family: var(--font-monospace);
- white-space: pre-wrap;
-}
-
-/* Code blocks inside lists */
-.content .chapter li > pre,
-.content .chapter li > div > pre {
- margin: 0.75rem 0 0.9rem;
-}
-
-/* Tables */
-table {
- border-collapse: separate;
- border-spacing: 0;
- width: 100%;
- margin: 1.1em 0;
- background: var(--color-background-secondary) !important;
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
- overflow: hidden;
-}
-table thead {
- background: color-mix(in srgb, var(--color-background-secondary), white 8%);
-}
-table thead tr:first-child th:first-child {
- border-top-left-radius: var(--radius-md);
-}
-table thead tr:first-child th:last-child {
- border-top-right-radius: var(--radius-md);
-}
-table tbody tr:last-child td:first-child {
- border-bottom-left-radius: var(--radius-md);
-}
-table tbody tr:last-child td:last-child {
- border-bottom-right-radius: var(--radius-md);
-}
-table th,
-table td {
- padding: 0.75em 1em;
- border-right: 1px solid var(--color-border);
- border-bottom: 1px solid var(--color-border);
- text-align: left !important;
- color: var(--color-text) !important;
-}
-table th:first-child,
-table td:first-child {
- border-left: none;
-}
-table th:last-child,
-table td:last-child {
- border-right: none;
-}
-table thead th {
- border-bottom: 2px solid var(--color-border) !important;
-}
-table tbody tr:last-child td {
- border-bottom: none;
-}
-table th {
- font-weight: 700;
- font-size: 1.05em;
- color: color-mix(in srgb, var(--color-text), white 10%) !important;
-}
-table tbody tr:hover {
- background: color-mix(in srgb, var(--color-background-secondary), white 2%) !important;
-}
-table code {
- background: var(--color-background) !important;
- color: var(--color-code) !important;
- font-family: var(--font-monospace);
- font-size: 0.9em;
-}
-
-/* Blockquotes with GitHub-style alerts support */
-blockquote {
- border-left: 3px solid var(--color-plan-mode);
- background: color-mix(in srgb, var(--color-background-secondary), white 3%);
- padding: 1rem 1.2rem;
- margin: 1.5rem 0;
- border-radius: var(--radius-md);
- color: var(--color-text);
-}
-
-blockquote p {
- margin: 0.5rem 0;
-}
-
-blockquote p:first-child {
- margin-top: 0;
-}
-
-blockquote p:last-child {
- margin-bottom: 0;
-}
-
-/* GitHub-style alert callouts */
-/* NOTE: blue */
-blockquote:has(p:first-child > strong:first-child:is([class*="Note"], [class*="note"])),
-blockquote > p:first-child:has(strong:first-child:is([class*="Note"], [class*="note"])) {
- border-left-color: hsl(210 70% 50%);
-}
-blockquote:has(p:first-child > strong:first-child:is([class*="Note"], [class*="note"]))
- p:first-child
- strong:first-child,
-blockquote > p:first-child strong:first-child:is([class*="Note"], [class*="note"]) {
- color: hsl(210 70% 60%) !important;
-}
-
-/* TIP: green */
-blockquote:has(p:first-child > strong:first-child:is([class*="Tip"], [class*="TIP"])),
-blockquote > p:first-child:has(strong:first-child:is([class*="Tip"], [class*="TIP"])) {
- border-left-color: hsl(120 50% 45%);
-}
-blockquote:has(p:first-child > strong:first-child:is([class*="Tip"], [class*="TIP"]))
- p:first-child
- strong:first-child,
-blockquote > p:first-child strong:first-child:is([class*="Tip"], [class*="TIP"]) {
- color: hsl(120 50% 55%) !important;
-}
-
-/* IMPORTANT: purple */
-blockquote:has(p:first-child > strong:first-child:is([class*="Important"], [class*="IMPORTANT"])),
-blockquote > p:first-child:has(strong:first-child:is([class*="Important"], [class*="IMPORTANT"])) {
- border-left-color: hsl(268 94% 60%);
-}
-blockquote:has(p:first-child > strong:first-child:is([class*="Important"], [class*="IMPORTANT"]))
- p:first-child
- strong:first-child,
-blockquote > p:first-child strong:first-child:is([class*="Important"], [class*="IMPORTANT"]) {
- color: hsl(268 94% 65%) !important;
-}
-
-/* WARNING: orange/yellow */
-blockquote:has(p:first-child > strong:first-child:is([class*="Warning"], [class*="WARNING"])),
-blockquote > p:first-child:has(strong:first-child:is([class*="Warning"], [class*="WARNING"])) {
- border-left-color: hsl(38 92% 50%);
-}
-blockquote:has(p:first-child > strong:first-child:is([class*="Warning"], [class*="WARNING"]))
- p:first-child
- strong:first-child,
-blockquote > p:first-child strong:first-child:is([class*="Warning"], [class*="WARNING"]) {
- color: hsl(38 92% 60%) !important;
-}
-
-/* CAUTION: red */
-blockquote:has(p:first-child > strong:first-child:is([class*="Caution"], [class*="CAUTION"])),
-blockquote > p:first-child:has(strong:first-child:is([class*="Caution"], [class*="CAUTION"])) {
- border-left-color: hsl(0 70% 55%);
-}
-blockquote:has(p:first-child > strong:first-child:is([class*="Caution"], [class*="CAUTION"]))
- p:first-child
- strong:first-child,
-blockquote > p:first-child strong:first-child:is([class*="Caution"], [class*="CAUTION"]) {
- color: hsl(0 70% 60%) !important;
-}
-
-/* Default strong styling in blockquotes */
-blockquote strong {
- color: var(--color-plan-mode);
-}
-
-/* kbd (for keybinds page) */
-kbd {
- display: inline-block;
- padding: 0.15em 0.45em;
- font-family: var(--font-monospace);
- font-size: 0.9em;
- line-height: 1.2;
- color: color-mix(in srgb, var(--color-text), white 5%);
- background: var(--color-background-secondary);
- border: 1px solid var(--color-border);
- border-bottom-width: 2px;
- border-radius: var(--radius-sm);
- box-shadow: inset 0 -1px 0 hsl(0 0% 0% / 0.25);
-}
-
-/* Details/Summary */
-details {
- background: color-mix(in srgb, var(--color-background-secondary), white 1%);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
- padding: 0.75rem 1rem;
- margin: 1rem 0;
-}
-details > summary {
- cursor: pointer;
- list-style: none;
- font-weight: 600;
-}
-details > summary::-webkit-details-marker {
- display: none;
-}
-details > summary::before {
- content: "▸";
- display: inline-block;
- margin-right: 0.5rem;
- color: var(--color-text-secondary);
- transition: transform 0.2s ease;
-}
-details[open] > summary::before {
- transform: rotate(90deg);
-}
-
-/* Navigation buttons */
-.nav-chapters {
- color: var(--color-text-secondary) !important;
-}
-.nav-chapters:hover {
- color: var(--color-text) !important;
- background: color-mix(in srgb, var(--color-background-secondary), white 2%) !important;
-}
-
-/* Selection */
-::selection {
- background: hsl(from var(--color-plan-mode) h s l / 0.25);
- color: white;
-}
-
-/* Fix mermaid blocks background to blend in */
-.mermaid {
- background: var(--color-background-secondary);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
- padding: 0.75rem;
-}
-
-/* Images */
-.content .chapter img {
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
- box-shadow: var(--shadow-1);
-}
-
-/* Small utilities */
-.hr-dim {
- border: none;
- border-top: 1px solid var(--color-border);
- margin: 1.5rem 0;
-}
-
-/* Respect prefers-reduced-motion */
-@media (prefers-reduced-motion: reduce) {
- * {
- transition: none !important;
- animation: none !important;
- }
-}
-
-/* Add logo before menu title */
-.menu-title::before {
- content: "";
- display: inline-block;
- width: 32px;
- height: 32px;
- margin-right: 8px;
- vertical-align: middle;
- background-image: url("../img/logo.webp");
- background-size: contain;
- background-repeat: no-repeat;
-}
-
-/* Page TOC (Table of Contents) overrides */
-@media only screen and (min-width: 1440px) {
- .pagetoc a {
- /* Reduce vertical spacing for more compact TOC */
- padding-top: 2px !important;
- padding-bottom: 2px !important;
- line-height: 1.4;
- font-size: 0.9em;
- }
-
- /* Tighter indentation for nested levels */
- .pagetoc .pagetoc-H2 {
- padding-left: 15px !important;
- }
- .pagetoc .pagetoc-H3 {
- padding-left: 30px !important;
- }
- .pagetoc .pagetoc-H4 {
- padding-left: 45px !important;
- }
-
- /* Add subtle visual hierarchy */
- .pagetoc .pagetoc-H2 a {
- font-weight: 500;
- }
- .pagetoc .pagetoc-H3 a {
- font-weight: 400;
- opacity: 0.9;
- }
- .pagetoc .pagetoc-H4 a {
- font-weight: 400;
- opacity: 0.8;
- }
-}
-
-/* Code block wrapper with line numbers and copy button (from mux app) */
-.code-block-wrapper {
- position: relative;
- margin: 0.75em 0;
-}
-
-/* Code block with line numbers - each line is a grid row */
-.code-block-container {
- display: grid;
- grid-template-columns: auto 1fr;
- background: var(--color-background-secondary);
- border: 1px solid var(--color-border);
- border-radius: var(--radius-md);
- padding: 6px 0;
- font-family: var(--font-monospace);
- font-size: 12px;
- line-height: 1.6;
- overflow-x: auto;
-}
-
-.line-number {
- background: rgba(0, 0, 0, 0.2);
- padding: 0 8px 0 6px;
- text-align: right;
- color: rgba(255, 255, 255, 0.4);
- user-select: none;
- border-right: 1px solid rgba(255, 255, 255, 0.2);
-}
-
-.code-line {
- padding: 0 8px;
- white-space: pre;
-}
-
-.code-line code {
- background: transparent;
- padding: 0;
-}
-
-/* Reusable copy button styles */
-.copy-button {
- padding: 6px 8px;
- background: rgba(0, 0, 0, 0.6);
- border: 1px solid rgba(255, 255, 255, 0.1);
- border-radius: 4px;
- color: rgba(255, 255, 255, 0.6);
- cursor: pointer;
- transition:
- color 0.2s,
- background 0.2s,
- border-color 0.2s;
- font-size: 12px;
- display: flex;
- align-items: center;
- gap: 4px;
-}
-
-.copy-button:hover {
- background: rgba(0, 0, 0, 0.8);
- color: rgba(255, 255, 255, 0.9);
- border-color: rgba(255, 255, 255, 0.2);
-}
-
-.copy-icon {
- width: 14px;
- height: 14px;
-}
-
-.copy-feedback {
- font-size: 11px;
- color: rgba(255, 255, 255, 0.9);
-}
-
-/* Code block specific positioning */
-.code-copy-button {
- position: absolute;
- bottom: 8px;
- right: 8px;
- opacity: 0;
- transition: opacity 0.2s;
-}
-
-.code-block-wrapper:hover .code-copy-button {
- opacity: 1;
-}
-
-/* Hide mdBook's default highlight.js styles for transformed blocks */
-.code-block-wrapper pre,
-.code-block-wrapper .hljs {
- display: none;
-}
diff --git a/docs/theme/favicon-180.webp b/docs/theme/favicon-180.webp
deleted file mode 100644
index c71d471796..0000000000
Binary files a/docs/theme/favicon-180.webp and /dev/null differ
diff --git a/docs/theme/favicon.webp b/docs/theme/favicon.webp
deleted file mode 100644
index 4b3bf909d1..0000000000
Binary files a/docs/theme/favicon.webp and /dev/null differ
diff --git a/docs/vim-mode.md b/docs/vim-mode.md
index 87f4d13849..fe68f614d7 100644
--- a/docs/vim-mode.md
+++ b/docs/vim-mode.md
@@ -1,10 +1,7 @@
-
-
-# Vim Mode
+---
+title: Vim Mode
+description: Vim-style editing in the mux chat input
+---
mux includes a built-in Vim mode for the chat input, providing familiar Vim-style editing for power users.
@@ -170,8 +167,8 @@ In Vim mode, **Ctrl+C always interrupts streams** (similar to terminal interrupt
Features that may be added in the future:
- **ge** - Backward end of word motion
-- **f{char}**, **t{char}** - Find character motions
-- **i"**, **i'**, **i(**, **i[**, **i{** - More text objects
+- **f\{char\}**, **t\{char\}** - Find character motions
+- **i"**, **i'**, **i(**, **i[**, **i\{** - More text objects
- **2w**, **3dd**, **5x** - Count prefixes
- **Visual mode** - Character, line, and block selection
- **Macros** - Recording and replaying command sequences
diff --git a/docs/vscode-extension.md b/docs/vscode-extension.md
index 1be6b1d3a6..6b4f0b1f02 100644
--- a/docs/vscode-extension.md
+++ b/docs/vscode-extension.md
@@ -1,4 +1,7 @@
-# VS Code Extension
+---
+title: VS Code Extension
+description: Pair mux workspaces with VS Code and Cursor editors
+---
The mux VS Code extension allows you to easily pair with mux during development. Our extension works with VS Code and Cursor.
diff --git a/docs/why-parallelize.md b/docs/why-parallelize.md
index 857c67b92b..d3257e5e54 100644
--- a/docs/why-parallelize.md
+++ b/docs/why-parallelize.md
@@ -1,4 +1,7 @@
-# Why Parallelize?
+---
+title: Why Parallelize?
+description: Use cases for running multiple AI agents in parallel
+---
Here are some specific use cases we enable:
diff --git a/docs/workspaces.md b/docs/workspaces.md
index 877791d16b..61f606ab7e 100644
--- a/docs/workspaces.md
+++ b/docs/workspaces.md
@@ -1,4 +1,7 @@
-# Workspaces
+---
+title: Workspaces
+description: Isolated development environments for parallel agent work
+---
Workspaces in mux provide isolated development environments for parallel agent work. Each workspace maintains its own Git state, allowing you to explore different approaches, run multiple tasks simultaneously, or test changes without affecting your main repository.
diff --git a/scripts/docs.sh b/scripts/docs.sh
deleted file mode 100755
index fa34c2a644..0000000000
--- a/scripts/docs.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-# Ensure mdbook-mermaid assets are installed
-if [ ! -f "docs/mermaid-init.js" ] || [ ! -f "docs/mermaid.min.js" ]; then
- echo "📦 Installing mermaid assets..."
- cd docs && mdbook-mermaid install
- cd ..
-fi
-
-# Serve the docs (bind to all hosts for remote access, port 3001 to avoid conflict with main app)
-cd docs && mdbook serve --hostname 0.0.0.0 --port 3001 --open
diff --git a/scripts/docs_build.sh b/scripts/docs_build.sh
deleted file mode 100755
index 7d8d8ea2c2..0000000000
--- a/scripts/docs_build.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-# Ensure mdbook-mermaid assets are installed
-if [ ! -f "docs/mermaid-init.js" ] || [ ! -f "docs/mermaid.min.js" ]; then
- echo "📦 Installing mermaid assets..."
- cd docs && mdbook-mermaid install
- cd ..
-fi
-
-# Build the docs
-cd docs && mdbook build
diff --git a/scripts/sync_system_prompt_docs.sh b/scripts/sync_system_prompt_docs.sh
index 3ec1a19ee9..97069eeeb7 100755
--- a/scripts/sync_system_prompt_docs.sh
+++ b/scripts/sync_system_prompt_docs.sh
@@ -23,8 +23,9 @@ generate_section() {
}
# Extract the current synced section from docs
+# Uses JSX-style comments for Mintlify MDX compatibility
extract_current_section() {
- sed -n '//,//p' "$DOCS_FILE" \
+ sed -n '/{\/\* BEGIN SYSTEM_PROMPT_DOCS \*\/}/,/{\/\* END SYSTEM_PROMPT_DOCS \*\/}/p' "$DOCS_FILE" \
| tail -n +2 | head -n -1 \
|
# Remove first and last lines (markers)
@@ -43,14 +44,15 @@ if [[ "${1:-}" == "check" ]]; then
echo "✅ $DOCS_FILE is in sync"
else
# Replace section between markers using temp file approach
+ # Uses JSX-style comments for Mintlify MDX compatibility
{
# Print everything up to and including BEGIN marker
- sed -n '1,//p' "$DOCS_FILE"
+ sed -n '1,/{\/\* BEGIN SYSTEM_PROMPT_DOCS \*\/}/p' "$DOCS_FILE"
echo ""
generate_section
echo ""
# Print END marker and everything after
- sed -n '//,$p' "$DOCS_FILE"
+ sed -n '/{\/\* END SYSTEM_PROMPT_DOCS \*\/}/,$p' "$DOCS_FILE"
} >"$DOCS_FILE.tmp"
mv "$DOCS_FILE.tmp" "$DOCS_FILE"
echo "Updated $DOCS_FILE"