- No releases found. Check the{' '} - - GitHub Releases - {' '} - page. -
-No release notes available.
- )} -
- {codeBlockContent.join('\n')}
-
- );
- codeBlockContent = [];
- inCodeBlock = false;
- } else {
- // Start code block
- flushListItems(); // Flush any pending list items
- inCodeBlock = true;
- codeBlockStartIndex = i;
- }
- continue;
- }
-
- // If we're in a code block, just collect the content
- if (inCodeBlock) {
- codeBlockContent.push(line);
- continue;
- }
-
- // Handle HTML img tags
- if (line.includes('- Full Changelog:{' '} - - View diff - -
- ); - continue; - } - } - - // Empty lines - if (line.trim() === '') { - flushListItems(); // Flush any pending list items - continue; - } - - // Regular text with link processing - flushListItems(); // Flush any pending list items - const withLinks = processLinks(line); - elements.push(); - } - - // Flush any remaining list items - flushListItems(); - - return <>{elements}>; -} diff --git a/docs/components/CopyEmailButton.tsx b/docs/components/CopyEmailButton.tsx deleted file mode 100644 index e86461e11..000000000 --- a/docs/components/CopyEmailButton.tsx +++ /dev/null @@ -1,22 +0,0 @@ -'use client'; - -import * as React from 'react'; - -export function CopyEmailButton({ email }: { email: string }) { - const [state, setState] = React.useState<'idle' | 'copied'>('idle'); - - function onCopy() { - navigator.clipboard.writeText(email); - setState('copied'); - window.setTimeout(() => setState('idle'), 1200); - } - - return ( - - ); -} diff --git a/docs/components/CopyMarkdownButton.tsx b/docs/components/CopyMarkdownButton.tsx deleted file mode 100644 index f6d8fc0e2..000000000 --- a/docs/components/CopyMarkdownButton.tsx +++ /dev/null @@ -1,31 +0,0 @@ -'use client'; - -import * as React from 'react'; - -export function CopyMarkdownButton({ markdownUrl }: { markdownUrl: string }) { - const [state, setState] = React.useState<'idle' | 'copied' | 'error'>('idle'); - - async function onCopy() { - try { - setState('idle'); - const res = await fetch(markdownUrl, { cache: 'no-store' }); - if (!res.ok) throw new Error(`Failed to fetch markdown: ${res.status}`); - const md = await res.text(); - await navigator.clipboard.writeText(md); - setState('copied'); - window.setTimeout(() => setState('idle'), 1200); - } catch { - setState('error'); - window.setTimeout(() => setState('idle'), 1500); - } - } - - return ( - - ); -} diff --git a/docs/components/LastUpdated.tsx b/docs/components/LastUpdated.tsx deleted file mode 100644 index b0670491a..000000000 --- a/docs/components/LastUpdated.tsx +++ /dev/null @@ -1,19 +0,0 @@ -export function LastUpdated({ date }: { date: Date }) { - if (!date || isNaN(date.getTime())) { - return null; - } - - const formatted = new Intl.DateTimeFormat(undefined, { - year: 'numeric', - month: 'long', - day: 'numeric', - }).format(date); - - return ( -
-
-## Why Use It
-
-Different agents have different strengths. Running them in parallel lets you:
-
-- Compare solutions from different providers (Claude vs Codex vs Gemini)
-- Get multiple attempts at a tricky problem
-- Race agents to see which finishes first
-
-## How to Start
-
-When creating a task:
-
-1. Click the provider dropdown
-2. Select multiple providers, or increase the count for a single provider (e.g., 3× Claude Code)
-3. Click Create
-
-Emdash creates a separate git branch and worktree for each agent. They all start from the same base commit but work independently.
-
-
-
-## Working with Multiple Agents
-
-Each agent spawns in its own terminal tab. Switch between tabs to watch them work, or use the shared input bar to send the same message to all of them.
-
-## Comparing Results
-
-After agents finish, review their changes in the [diff view](/diff-view). Each agent's worktree has its own set of changes. Check the diff stats (files changed, lines added/removed) for a quick sense of each approach.
-
-Pick the best solution and merge that branch. Discard the rest.
-
-## Tips
-
-- Start with 2-3 agents. More than that gets hard to compare.
-- Use the same initial prompt for fair comparison.
-- Complex tasks benefit most from multiple perspectives.
diff --git a/docs/content/docs/bring-your-own-infrastructure.mdx b/docs/content/docs/bring-your-own-infrastructure.mdx
deleted file mode 100644
index 64f551e9d..000000000
--- a/docs/content/docs/bring-your-own-infrastructure.mdx
+++ /dev/null
@@ -1,323 +0,0 @@
----
-title: Bring Your Own Infrastructure
-description: Automatically provision and tear down remote workspaces for each task using your own infrastructure
----
-
-
-
-
-
-## Viewing Checks
-
-Once a task has a Pull Request, a **Checks** tab appears in the file changes panel. Click it to see all check runs for that PR's branch.
-
-Each check shows:
-
-- **Status**: Green checkmark (pass), red X (fail), amber spinner (pending), or grey dash (skipped/cancelled)
-- **Name and workflow**: Which check ran and from which workflow
-- **Duration**: How long the check took
-- **External link**: Click to open the full check run on GitHub
-
-A summary at the top shows the total count of passed, failed, and pending checks.
-
-## Auto-Refresh
-
-Emdash automatically polls for check updates:
-
-- **Every 10 seconds** while checks are still running
-- **Every 60 seconds** once all checks complete
-- **On window focus** — checks refresh when you switch back to Emdash
-
-Polling pauses when the app is in the background to save resources.
-
-## Requirements
-
-- The [GitHub CLI](https://cli.github.com/) (`gh`) must be installed and authenticated
-- The task's branch must have an open Pull Request on GitHub
-- Your repository must have GitHub Actions workflows configured
-
-If the Checks tab is disabled, it means no PR exists for the current task yet. Push a branch and open a PR to start seeing checks.
-
-## Tips
-
-- The Checks tab automatically activates when a PR exists but there are no local uncommitted changes.
-- Failed checks show a red dot on the tab badge so you can spot failures at a glance.
-- A spinning indicator on the tab badge means checks are still in progress.
-- Click the external link icon on any check to jump straight to the run details on GitHub.
diff --git a/docs/content/docs/contributing.mdx b/docs/content/docs/contributing.mdx
deleted file mode 100644
index ecaab77fe..000000000
--- a/docs/content/docs/contributing.mdx
+++ /dev/null
@@ -1,189 +0,0 @@
----
-title: Contributing
-description: Help improve Emdash - contribution guidelines and development setup
----
-
-Thanks for your interest in contributing! We favor small, focused PRs and clear intent over big bangs. This guide explains how to get set up, the workflow we use, and a few project‑specific conventions.
-
-## Quick Start
-
-### Prerequisites
-
-- **Node.js 20.0.0+ (recommended: 22.20.0)** and Git
-- Optional (recommended for end‑to‑end testing):
- - GitHub CLI (`brew install gh`; then `gh auth login`)
- - At least one supported coding agent CLI (see [Providers](/providers))
-
-### Setup
-
-```bash
-# Fork this repo, then clone your fork
-git clone https://github.com/
-
-## Where to Find It
-
-The diff view lives in the right sidebar when you have a task open. It updates automatically as the agent makes changes (polls every 5 seconds).
-
-## What You See
-
-For each changed file:
-
-- File path and type icon
-- Lines added (green) and removed (red)
-- Staged or unstaged status
-
-The header shows total files changed, overall additions/deletions, and PR status if a pull request exists.
-
-## Actions
-
-**Stage a file**: Click the + icon to add a file to the staging area.
-
-**Unstage or revert**: Click the undo icon. For staged files, this unstages them. For unstaged files, this discards all changes (resets to last commit).
-
-**View diff**: Click a file to open it in the diff viewer. You can edit the file directly in the diff view and save your changes.
-
-**View all changes**: Click "View All" to see diffs for every changed file in one scrollable view.
-
-**Commit and push**: Type a commit message and press Enter. Emdash commits staged changes and pushes to the branch.
-
-**Create PR**: After pushing, a "Create PR" button appears if your branch is ahead of main.
-
-## Inline Editing
-
-The diff viewer isn't read-only. Edit the modified version directly, then save. This is useful for quick fixes without switching to your editor.
diff --git a/docs/content/docs/file-editor.mdx b/docs/content/docs/file-editor.mdx
deleted file mode 100644
index 3243aa564..000000000
--- a/docs/content/docs/file-editor.mdx
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: File Editor
-description: Edit files directly in Emdash
----
-
-The file editor lets you browse and edit code in a task's worktree without switching to an external editor. Use it to explore the codebase, make edits yourself, or review what an agent has done.
-
-
-
-## Opening the Editor
-
-Click the code icon in the titlebar when viewing a task. The editor opens in a side panel with a file tree on the left and the code editor on the right.
-
-## Navigating Files
-
-The left panel shows your project's file tree. Click a file to open it. Files open in tabs at the top of the editor, so you can switch between multiple files.
-
-Common system directories like `node_modules`, `.git`, and build output are hidden by default. Click the eye icon to show or hide them.
-
-## Editing
-
-The editor is a full-featured code editor with syntax highlighting, find/replace, and the usual keyboard shortcuts. Changes auto-save after 2 seconds of inactivity, or press `⌘S` to save immediately.
-
-Git diff markers appear in the gutter:
-
-- Green dots for added lines
-- Orange dots for modified lines
-- Red markers for deleted lines
-
-These update automatically as you edit, so you can see what's changed compared to the last commit.
-
-## Saving
-
-Files with unsaved changes show a dot in their tab. Use `⌘⇧S` to save all open files at once, or click "Save All" in the header.
-
-After saving, the [diff view](/diff-view) updates to reflect your changes.
-
-## Images
-
-The editor also handles images. Click an image file to preview it instead of showing raw bytes.
-
-## Resizing
-
-Drag the divider between the file tree and editor to adjust panel widths. The layout remembers your preference.
diff --git a/docs/content/docs/index.mdx b/docs/content/docs/index.mdx
deleted file mode 100644
index e6ff48ad1..000000000
--- a/docs/content/docs/index.mdx
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Emdash Overview
-description: An Open Source Agentic Development Environment (ADE)
----
-
-Emdash is an open source desktop app for running multiple coding agents in parallel. Each agent works in an isolated Git worktree, so they don't interfere with each other.
-
-## Capabilities
-
-- **[Parallel agents](/tasks):** Run multiple agents simultaneously, each in its own worktree
-- **[Provider support](/providers):** Use any of 18+ CLI-based agents: Claude Code, Codex, Gemini, OpenCode, and more
-- **[Best-of-N](/best-of-n):** Run multiple agents on the same task and pick the best result
-- **[Diff view](/diff-view):** Review changes across agents side-by-side
-- **[Kanban view](/kanban-view):** Organize tasks visually across your workflow
-- **[Issue integration](/issues):** Pull tasks from Linear, Jira, or GitHub Issues directly
-
-## How It Works
-
-Click "Add Task" to create one or more worktrees. Each worktree runs its own agent. You can then review the diff when done, iterate if needed, and open a PR inside of Emdash.
-
-## Demo
-
-
-
-## Get Involved
-
-Emdash is [open source](https://github.com/generalaction/emdash) and part of [Y Combinator W26](https://ycombinator.com). We ship fast and welcome contributions - see the [contributing guide](/contributing).
-
-Available for macOS, Windows, and Linux.
diff --git a/docs/content/docs/installation.mdx b/docs/content/docs/installation.mdx
deleted file mode 100644
index 5a4a0b6a4..000000000
--- a/docs/content/docs/installation.mdx
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Installation
-description: Get started with Emdash
----
-
-## Download Emdash
-
-### macOS
-
-The easiest way to install on macOS is via Homebrew:
-
-```bash
-brew install --cask emdash
-```
-
-Or download directly:
-
-- [Apple Silicon (arm64)](https://github.com/generalaction/emdash/releases/latest/download/emdash-arm64.dmg)
-- [Intel (x64)](https://github.com/generalaction/emdash/releases/latest/download/emdash-x64.dmg)
-
-### Windows
-
-Download the installer or portable version:
-
-- [Installer (x64)](https://github.com/generalaction/emdash/releases/latest/download/emdash-x64-installer.exe)
-- [Portable (x64)](https://github.com/generalaction/emdash/releases/latest/download/emdash-x64.exe)
-
-### Linux
-
-Choose your preferred format:
-
-- [AppImage (x64)](https://github.com/generalaction/emdash/releases/latest/download/emdash-x86_64.AppImage)
-- [Debian package (x64)](https://github.com/generalaction/emdash/releases/latest/download/emdash-amd64.deb)
-
-Or run via Nix:
-
-```bash
-nix run github:generalaction/emdash
-```
-
-## Setup
-
-### 1. Install a CLI provider
-
-Emdash runs coding agents through their CLI. Install at least one [provider](/providers) before getting started:
-
-```bash
-curl -fsSL https://claude.ai/install.sh | bash
-```
-
-### 2. Connect GitHub
-
-To create PRs (and use GitHub Issues), connect your account in **Settings → Integrations**. Emdash works with OAuth or authentication via [GitHub CLI](https://cli.github.com):
-
-```bash
-gh auth login
-```
-
-You're ready to start using Emdash.
diff --git a/docs/content/docs/issues.mdx b/docs/content/docs/issues.mdx
deleted file mode 100644
index 0a3831173..000000000
--- a/docs/content/docs/issues.mdx
+++ /dev/null
@@ -1,68 +0,0 @@
----
-title: Passing Issues
-description: Pass issues from Linear, Jira, or GitHub directly to agents
----
-
-Emdash connects to Linear, Jira, and GitHub Issues. Pass issues from your tracker directly to agents. The issue title, description, and metadata become part of the agent's prompt.
-
-
-
-## How It Works
-
-1. Create a new task
-2. Click **Advanced Options**
-3. Select an issue from the dropdown (searchable by ID, title, or assignee)
-4. Start the task
-
-The agent receives the full issue context and begins working immediately.
-
-## Supported Trackers
-
-Emdash supports:
-
-- Linear
-- Jira
-- GitHub Issues
-
-Missing your tracker? [Open an issue](https://github.com/generalaction/emdash/issues) or message us on [Discord](https://discord.gg/f2fv7YxuR2).
-
-## Connecting Your Tracker
-
-Go to **Settings → Connections** to connect.
-
-### Linear
-
-1. Go to [Linear Settings → Security & access → Personal API keys](https://linear.app/settings/api)
-2. Create a new API key
-3. Paste the key in Emdash and click Connect
-
-### Jira
-
-1. Go to [Atlassian Account Settings → Security → API Tokens](https://id.atlassian.com/manage-profile/security/api-tokens)
-2. Create a new API token
-3. In Emdash, enter your site URL (e.g., `https://yourcompany.atlassian.net`), email, and token
-
-### GitHub Issues
-
-GitHub Issues requires the GitHub CLI (`gh`). Emdash auto-installs it if missing.
-
-1. Click **Sign in with GitHub**
-2. Copy the device code shown
-3. Authorize on GitHub when prompted
-
-## Auto-Closing Issues
-
-When you create a PR from a task that has a linked issue, Emdash automatically closes the associated GitHub or Linear issue by default. This only applies to issues that were passed to the task at creation time.
-
-If your workflow closes issues later, after environment testing, deployment, or customer approval, you can disable this in **Settings → Repository → Auto-close linked issues on PR creation**.
diff --git a/docs/content/docs/kanban-view.mdx b/docs/content/docs/kanban-view.mdx
deleted file mode 100644
index fa3f6b1e8..000000000
--- a/docs/content/docs/kanban-view.mdx
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: Kanban View
-description: Visualize your tasks on a board
----
-
-The Kanban view displays your tasks as cards on a board with three columns. Drag tasks between columns to track their status.
-
-
-
-## Columns
-
-- **To-do**: Tasks not yet started
-- **In-progress**: Tasks currently running
-- **Ready for review**: Completed tasks with changes to review
-
-## Automatic Transitions
-
-Tasks move between columns automatically based on activity:
-
-- When an agent starts working, the task moves to In-progress
-- When an agent finishes (terminal exits, changes detected, or PR created), the task moves to Ready for review
-
-You can also drag cards manually to change their status.
-
-## Card Information
-
-Each card shows:
-
-- Task name
-- Branch name
-- Provider/agent running the task
-- Activity spinner when the agent is busy
-
-Hover over a card to see more details: provider list, and a summary of file changes (files changed, lines added/removed).
-
-## Creating Tasks
-
-Click the + button in the To-do column to create a new task. This opens the same task creation modal as the main "Add Task" button.
-
-## Opening a Task
-
-Click any card to open that task's detail view with the terminal and diff panel.
diff --git a/docs/content/docs/mcp.mdx b/docs/content/docs/mcp.mdx
deleted file mode 100644
index 168c5a0cd..000000000
--- a/docs/content/docs/mcp.mdx
+++ /dev/null
@@ -1,84 +0,0 @@
----
-title: MCP Servers
-description: Connect your agents to external tools and data sources via MCP
----
-
-MCP (Model Context Protocol) lets your coding agents connect to external tools and data sources — databases, APIs, browsers, and more. Emdash manages MCP server configs across all your installed agents from a single place, so you configure once and every agent picks it up.
-
-## Getting Started
-
-Open the MCP view by clicking **MCP** in the left sidebar. You'll see two sections:
-
-- **Added** — servers you've already configured
-- **Recommended** — a curated catalog of popular MCP servers ready to add
-
-Use the search box to filter by name or description.
-
-## Adding a Server from the Catalog
-
-1. Find a server in the **Recommended** section (e.g. Playwright, Supabase, Sentry)
-2. Click **Add** on the card
-3. The modal opens pre-filled with the server's default config
-4. Fill in any required credentials (marked with an asterisk)
-5. Select which agents to sync to under **Sync to agents**
-6. Click **Add**
-
-Emdash writes the config into each selected agent's native config file. The server is available in your next agent session.
-
-## Adding a Custom Server
-
-1. Click **Custom MCP** in the toolbar
-2. Enter a name and choose the transport type:
- - **stdio** — runs a local process (provide a command and optional arguments)
- - **http** — connects to a remote URL (provide the endpoint and optional headers)
-3. Add any environment variables the server needs
-4. Select target agents and click **Add**
-
-## Editing and Removing
-
-Click an installed server card to edit its config — change credentials, update the URL, or adjust which agents it syncs to. Click **Remove** to delete the server from all agents.
-
-## Agent Sync
-
-When you add or edit a server, Emdash translates the config into each agent's native format and writes it to the correct location:
-
-| Agent | Config file |
-| -------------- | ---------------------------------- |
-| Claude Code | `~/.claude.json` |
-| Cursor | `~/.cursor/mcp.json` |
-| Codex | `~/.codex/config.toml` |
-| Amp | `~/.config/amp/settings.json` |
-| Gemini | `~/.gemini/settings.json` |
-| Qwen | `~/.qwen/settings.json` |
-| OpenCode | `~/.config/opencode/opencode.json` |
-| GitHub Copilot | `~/.copilot/mcp-config.json` |
-| Droid | `~/.droid/settings.json` |
-
-This means MCP servers configured through Emdash also work when you run these agents outside of Emdash.
-
-## Transport Compatibility
-
-MCP servers use one of two transports: **stdio** (local process) or **http** (remote URL). Most agents support both, but Codex currently only supports stdio servers. When adding an HTTP server, incompatible agents are automatically disabled in the agent selector.
-
-## Catalog Servers
-
-The built-in catalog includes 40+ servers for common services:
-
-- **Browser & DevTools**: Playwright, Chrome DevTools
-- **Databases & Data**: Supabase, PlanetScale, MotherDuck, BigQuery
-- **Hosting & Infrastructure**: Vercel, Netlify, Cloudflare, AWS Marketplace
-- **Monitoring & Analytics**: Sentry, PostHog, Honeycomb, Amplitude
-- **Project Management**: Linear, Asana, ClickUp, Notion, Jira (Atlassian)
-- **Design & Content**: Figma, Canva, Miro, Webflow, Sanity, Cloudinary, WordPress
-- **Communication**: Slack, Intercom
-- **Payments & Auth**: Stripe, Clerk
-- **AI & Search**: Hugging Face, Exa, Context7
-- **Automation**: Make
-
-Each catalog entry includes a link to the server's documentation for setup details.
-
-## Tips
-
-- You can sync a single MCP server to multiple agents at once — no need to configure each one separately.
-- Environment variables with credential keys are highlighted in the modal so you know what to fill in.
-- Click **Refresh** to re-detect installed agents if you've installed a new CLI since opening Emdash.
diff --git a/docs/content/docs/meta.json b/docs/content/docs/meta.json
deleted file mode 100644
index 29771fabc..000000000
--- a/docs/content/docs/meta.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "title": "Docs",
- "pages": [
- "index",
- "installation",
- "---Using Emdash---",
- "tasks",
- "automations",
- "issues",
- "---Capabilities---",
- "best-of-n",
- "providers",
- "project-config",
- "diff-view",
- "file-editor",
- "kanban-view",
- "skills",
- "mcp",
- "ci-checks",
- "remote-projects",
- "bring-your-own-infrastructure",
- "tmux-sessions",
- "---More---",
- "contributing",
- "roadmap",
- "changelog",
- "telemetry"
- ]
-}
diff --git a/docs/content/docs/project-config.mdx b/docs/content/docs/project-config.mdx
deleted file mode 100644
index 78acc2cab..000000000
--- a/docs/content/docs/project-config.mdx
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: Project Configuration
-description: Customize Emdash behavior per project
----
-
-Emdash can be configured per project from the **Project config** modal (`Edit config` on the project page). Use it to control what gets copied to worktrees and what scripts run for each task.
-
-## Copying files to worktrees
-
-When you create a new task, Emdash sets up a Git worktree so the agent can work in isolation. By default, worktrees start fresh from your repository, which means gitignored files like `.env` won't be there.
-
-To solve this, Emdash automatically copies certain gitignored files from your main project into each new worktree. This happens once when the worktree is created, and only for files that don't already exist in the destination.
-
-The default patterns cover common environment files:
-
-```
-.env
-.env.keys
-.env.local
-.env.*.local
-.envrc
-docker-compose.override.yml
-```
-
-These defaults work well for most projects, but you can customize them if needed.
-
-## Custom preserve patterns
-
-In **Preserved patterns**, enter one glob pattern per line.
-
-```text
-.env
-.env.local
-config/local.yml
-secrets/*.json
-```
-
-When you define `preservePatterns`, it replaces the defaults entirely. Include any default patterns you still want alongside your custom ones.
-
-Patterns support basic glob syntax, so `secrets/*.json` will match all JSON files in the secrets directory. Files inside `node_modules`, `.git`, `vendor`, and other common build directories are automatically excluded regardless of your patterns.
-
-## How it works
-
-Emdash looks for gitignored files in your main project that match your preserve patterns. For each match, it copies the file to the same relative path in the new worktree. If a file already exists in the worktree, it's left untouched, so your worktree-specific changes won't be overwritten.
-
-This means you can safely modify environment files in a worktree without worrying about them being reset when you create new tasks.
-
-## Script fields
-
-Project config has four script fields:
-
-- `Setup script`: runs once right after task creation (good for installs/bootstrap)
-- `Run script`: long-running command you start/stop from the task terminal (good for dev servers)
-- `Stop script`: runs when the run script is stopped, before the process is killed (good for graceful shutdown)
-- `Teardown script`: runs when a task is deleted or archived
-
-The setup script runs as soon as the worktree is ready, in parallel with the agent.
-
-## Task env vars
-
-When a task terminal starts, Emdash injects convenience environment variables you can use inside setup scripts and other terminal commands.
-
-If you run multiple tasks in parallel, do not hardcode `localhost:3000`. Use `EMDASH_PORT` so each task gets its own localhost port automatically.
-
-| Variable | Purpose |
-| ----------------------- | ---------------------------------------------------------------- |
-| `EMDASH_TASK_ID` | Stable unique task id |
-| `EMDASH_TASK_NAME` | Shell-safe task name slug |
-| `EMDASH_TASK_PATH` | Absolute task (worktree) path |
-| `EMDASH_ROOT_PATH` | Absolute project root path |
-| `EMDASH_DEFAULT_BRANCH` | Default branch name (e.g., main) |
-| `EMDASH_PORT` | Unique localhost base port per task (use for `PORT` or `--port`) |
-
-`EMDASH_PORT` is different for each task. Example: one task might run on `localhost:50120`, another on `localhost:50730`, so they do not collide on `localhost:3000`.
-
-### Avoid localhost port collisions
-
-Use this as your **Run script** value:
-
-```bash
-PORT=$EMDASH_PORT pnpm run dev
-```
-
-If your dev server expects a `--port` flag instead of `PORT`:
-
-```bash
-pnpm run dev -- --port=$EMDASH_PORT
-```
-
-For multiple local services, use `EMDASH_PORT` with small offsets:
-
-```bash
-APP_PORT=$EMDASH_PORT
-DB_PORT=$((EMDASH_PORT + 1))
-REDIS_PORT=$((EMDASH_PORT + 2))
-```
-
-### Example: docker-compose override with task ports
-
-```yaml
-services:
- db:
- ports:
- - '${EMDASH_PORT:-5432}:5432'
- app:
- environment:
- - DATABASE_PORT=${EMDASH_PORT:-5432}
-```
-
-### Examples
-
-Node app (recommended):
-
-`Setup script`:
-
-```bash
-pnpm install
-```
-
-`Run script`:
-
-```bash
-PORT=$EMDASH_PORT pnpm run dev
-```
-
-Python project with virtual environment:
-
-`Setup script`:
-
-```bash
-python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt
-```
-
-## Editing the config
-
-On the project page, click **Edit config**, fill the fields, then click **Save**. Emdash stores these settings in `.emdash.json`.
-
-
diff --git a/docs/content/docs/providers.mdx b/docs/content/docs/providers.mdx
deleted file mode 100644
index a7c0ac8a1..000000000
--- a/docs/content/docs/providers.mdx
+++ /dev/null
@@ -1,66 +0,0 @@
----
-title: Providers
-description: Supported coding agents and CLI providers
----
-
-Emdash supports 22 coding agent CLIs. Install any of them and Emdash detects it automatically.
-
-
-
-## Supported Providers
-
-| Provider | Install Command |
-| -------------- | -------------------------------------------------------------------------------------------- |
-| Claude Code | `curl -fsSL https://claude.ai/install.sh \| bash` |
-| Codex | `npm install -g @openai/codex` |
-| Gemini | `npm install -g @google/gemini-cli` |
-| Qwen Code | `npm install -g @qwen-code/qwen-code` |
-| Cursor | `curl https://cursor.com/install -fsS \| bash` |
-| GitHub Copilot | `npm install -g @github/copilot` |
-| Amp | `npm install -g @sourcegraph/amp@latest` |
-| Auggie | `npm install -g @augmentcode/auggie` |
-| Autohand Code | `npm install -g autohand-cli` |
-| Cline | `npm install -g cline` |
-| Continue | `npm install -g @continuedev/cli` |
-| Codebuff | `npm install -g codebuff` |
-| OpenCode | `npm install -g opencode-ai` |
-| Charm | `npm install -g @charmland/crush` |
-| Kilocode | `npm install -g @kilocode/cli` |
-| Kimi | `uv tool install kimi-cli` |
-| Goose | `curl -fsSL https://github.com/block/goose/releases/download/stable/download_cli.sh \| bash` |
-| Droid | `curl -fsSL https://app.factory.ai/cli \| sh` |
-| Kiro | `curl -fsSL https://cli.kiro.dev/install \| bash` |
-| Rovo Dev | `acli rovodev auth login` |
-| Mistral Vibe | `curl -LsSf https://mistral.ai/vibe/install.sh \| bash` |
-| Pi | `npm install -g @mariozechner/pi-coding-agent` |
-
-## Feature Support
-
-Not all providers support the same features. Here's what varies:
-
-**Auto-approve**: Skip permission prompts for file operations. Supported by Autohand Code, Claude Code, Codex, Gemini, Qwen, Cursor, Kilocode, Rovo, and Mistral.
-
-**Resume**: Continue from previous session. Supported by Claude Code, Gemini, Qwen, Kilocode, Continue, and Pi.
-
-**Initial prompt**: Pass instructions when starting the agent. Most providers support this.
-
-## Adding a Provider
-
-Providers are detected automatically when you install them. Open Emdash, go to Settings, and click "Refresh" to scan for newly installed CLIs.
-
-If a provider isn't detected, make sure its CLI is in your PATH.
-
-## Request a Provider
-
-Missing your favorite coding agent? [Open an issue](https://github.com/generalaction/emdash/issues) or message us on Discord.
diff --git a/docs/content/docs/remote-projects.mdx b/docs/content/docs/remote-projects.mdx
deleted file mode 100644
index 1b9fca206..000000000
--- a/docs/content/docs/remote-projects.mdx
+++ /dev/null
@@ -1,168 +0,0 @@
----
-title: Remote Projects
-description: Run coding agents on remote machines over SSH
----
-
-Run coding agents on a remote server over SSH. Instead of working only with local repositories, you can connect to any machine and orchestrate agents against codebases hosted there.
-
-
-
-## Adding a Remote Project
-
-1. On the home screen, click **Add Remote Project**
-2. A wizard walks you through four steps:
-
-### Step 1: Connection Details
-
-Enter the SSH connection info:
-
-- **Name** — a label for this connection (e.g., "Dev Server")
-- **Host** — hostname or IP address
-- **Port** — SSH port (default: 22)
-- **Username** — your SSH user
-
-If you have an existing `~/.ssh/config`, Emdash detects it automatically. Select a host from the dropdown to pre-fill the form.
-
-
-
-### Step 2: Authentication
-
-Choose an authentication method:
-
-| Method | Description |
-| --------------- | ------------------------------------------------------------------------------------------------ |
-| **SSH Agent** | Uses your system SSH agent. No keys stored in Emdash. Recommended. |
-| **Private Key** | Point to a key file (e.g., `~/.ssh/id_ed25519`). Passphrase stored securely in your OS keychain. |
-| **Password** | Direct password auth. Password stored in your OS keychain. |
-
-Click **Test Connection** to verify before proceeding.
-
-If SSH agent auth fails, Emdash suggests falling back to key-based auth and shows common key paths.
-
-
-
-### Step 3: Path Selection
-
-Browse the remote filesystem via SFTP and select your project directory. The browser starts at your home directory.
-
-
-
-### Step 4: Confirmation
-
-Review the connection summary and click **Save**. The project appears in your sidebar.
-
-## Connection Status
-
-Remote projects show a connection indicator in the sidebar:
-
-- **Connected** — ready to use
-- **Connecting** — establishing SSH session
-- **Error** — connection failed (click to retry)
-- **Disconnected** — no active session
-
-Emdash auto-connects when you select a remote project and monitors the connection with periodic health checks. If the connection drops, it reconnects automatically with exponential backoff (up to 3 attempts).
-
-## How It Works
-
-When you create a task on a remote project:
-
-1. A git worktree is created on the remote machine
-2. The agent runs in a shell session over SSH
-3. File browsing and git operations happen remotely via SFTP
-4. Terminal output streams back to your local Emdash UI in real time
-
-All shell commands are executed on the remote server. Your local machine only runs the Emdash interface.
-
-## Security
-
-- **Credentials** are stored in your OS keychain (macOS Keychain, Linux Secret Service, Windows Credential Manager) — never in the database
-- **Host keys** are verified against `~/.ssh/known_hosts` to prevent MITM attacks
-- **Shell commands** are escaped using POSIX single-quote wrapping to prevent injection
-- **Path traversal** is blocked — sensitive directories like `/etc`, `/proc`, `/sys`, and `.ssh` are restricted
-
-## Requirements
-
-- SSH access to the remote machine
-- Git installed on the remote server
-- At least one [provider](/providers) CLI installed on the remote machine
-
-## Supported Git Features
-
-Remote projects support the same git workflow as local projects:
-
-- File status watching with automatic change detection
-- File diffs with side-by-side viewer
-- Stage, unstage, and revert individual files or all files
-- Commit and push from the UI
-- Branch status (ahead/behind counts)
-- Branch listing and branch rename
-- PR creation (regular and draft), merge, and status checks
-- PR comments and CI check runs
-
-## Remote Server Prerequisites
-
-Your remote server needs the following for full functionality:
-
-1. **Git** installed and configured with `user.name` and `user.email`
-2. **GitHub CLI (`gh`)** installed and authenticated (required for PR features)
-3. **SSH key for GitHub** configured on the server (required for push/pull)
-
-See the [SSH Setup Guide](https://github.com/generalaction/emdash/blob/main/docs/ssh-setup.md) for detailed server preparation steps.
-
-## Current Limitations
-
-Some features are not yet available for remote projects:
-
-- Worktree pooling (instant task start)
-- Worktree merge via UI
-- Session isolation for multi-chat (--session-id)
-- Plan lock/unlock
-- Remote lifecycle scripts
-
-## Emdash Cloud for Teams
-
-For business and team setups — including managed remote environments, centralized configuration, and admin controls — visit [emdash.sh/cloud](https://emdash.sh/cloud) to learn more.
diff --git a/docs/content/docs/roadmap.mdx b/docs/content/docs/roadmap.mdx
deleted file mode 100644
index 7c3d02819..000000000
--- a/docs/content/docs/roadmap.mdx
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Roadmap
-description: Emdash Product Roadmap
----
-
-Emdash is [open source](https://github.com/generalaction/emdash) and we strive to be fully transparent what we're working on and what's next. This roadmap is a living document and we'll update it as we make progress.
-
-## Join the Discussion
-
-We actively discuss features and the product roadmap with our community:
-
-- **[GitHub Discussions](https://github.com/generalaction/emdash/discussions)** - Share ideas, vote on features, and discuss the roadmap with the community
-- **[Discord Server](https://discord.gg/f2fv7YxuR2)** - Chat with the team and other users about features and development
-
-## Feature Requests
-
-Have an idea for a new feature? We'd love to hear from you!
-
-- **[Submit a feature request](https://github.com/generalaction/emdash/issues/new?labels=enhancement)** - Open a new issue with the enhancement label
-- **[View existing requests](https://github.com/generalaction/emdash/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement)** - See and vote on community feature requests
-- **[Join the Ideas discussion](https://github.com/generalaction/emdash/discussions/categories/ideas)** - Participate in feature discussions
-
-## Contributing
-
-Want to help build these features? Check out our [Contributing Guide](/contributing) to get started.
diff --git a/docs/content/docs/skills.mdx b/docs/content/docs/skills.mdx
deleted file mode 100644
index 245cf7ea6..000000000
--- a/docs/content/docs/skills.mdx
+++ /dev/null
@@ -1,115 +0,0 @@
----
-title: Skills
-description: Extend your agents with reusable skill modules
----
-
-Skills are reusable capability modules that extend your coding agents with specialized functionality. They follow the open [Agent Skills](https://agentskills.io) standard and work across all supported agents—Claude Code, Codex, OpenCode, Cursor, Gemini, Roo Code, and Mistral Vibe.
-
-
-
-## Browsing Skills
-
-Open the Skills view by clicking **Skills** (puzzle icon) in the left sidebar. You'll see a catalog of available skills sourced from:
-
-- [OpenAI skill library](https://github.com/openai/skills/)
-- [Anthropic skill library](https://github.com/anthropics/skills/)
-- [skills.sh](https://skills.sh/) — a community skill registry
-
-Click **Refresh** to fetch the latest skills from the OpenAI and Anthropic catalogs. Use the search box to filter by name or description. When you search, Emdash also queries the skills.sh API to surface community-contributed skills beyond the built-in catalogs.
-
-If you want to use skills from another library, feel free to let us know through the feedback modal in the app.
-
-
-
-## Installing a Skill
-
-1. Find a skill in the catalog
-2. Click the skill card to view details, example prompts, and documentation
-3. Click **Install**
-
-Emdash downloads the skill to `~/.agentskills/` and automatically syncs it to all installed agents on your machine. The skill is immediately available in your next agent session.
-
-## Uninstalling a Skill
-
-1. Click an installed skill card
-2. Click **Uninstall** in the detail modal
-
-This removes the skill from `~/.agentskills/` and removes the symlinks from all agent directories.
-
-## Creating Custom Skills
-
-1. Click **New Skill** in the Skills view
-2. Enter a name (lowercase, hyphens, 2–64 characters) and description
-3. Click **Create**
-
-Emdash generates a `SKILL.md` file in `~/.agentskills/
-
-## Worktrees
-
-By default, each task creates a git worktree—a separate copy of your codebase on its own branch. This keeps agent changes isolated from your main branch and other tasks.
-
-Worktrees are created in a sibling `worktrees/` directory outside your repo.
-
-You can disable worktrees to work directly on your current branch. A warning appears since changes won't be isolated.
-
-## Multi-Agent Mode
-
-Run [multiple agents in parallel](/best-of-n) on the same problem:
-
-- Select multiple providers (e.g., Claude Code + Codex)
-- Or run the same provider multiple times (e.g., 3× Claude Code)
-
-Each agent gets its own worktree. Compare approaches and pick the best result. See [Best of N](/best-of-n).
-
-If tasks start local servers, use `EMDASH_PORT` in your Project config script fields to avoid port collisions between parallel tasks. See [Project Configuration](/project-config).
-
-## Advanced Options
-
-Click **Advanced Options** when creating a task to access:
-
-- **Auto-approve**: Skip permission prompts for file operations (if provider supports it)
-- **Initial prompt**: Give the agent starting instructions
-- **Link an issue**: Attach a Linear, Jira, or GitHub issue (see [Passing Issues](/issues))
-
-## After Starting
-
-Once a task starts:
-
-1. A new branch is created and pushed to your remote
-2. The agent spawns in the terminal
-3. Chat with the agent or let your initial prompt guide it
-
-Terminal state saves automatically. Close and reopen Emdash, and agents resume where they left off.
diff --git a/docs/content/docs/telemetry.mdx b/docs/content/docs/telemetry.mdx
deleted file mode 100644
index 6bc5291e0..000000000
--- a/docs/content/docs/telemetry.mdx
+++ /dev/null
@@ -1,157 +0,0 @@
----
-title: Telemetry
-description: What data Emdash collects, what it doesn't, and how to opt out
----
-
-## Summary
-
-- Anonymous usage telemetry, enabled by default
-- Explicit allowlisted events only (no autocapture or session recording)
-- Sent to [PostHog](https://posthog.com)
-- Easy to disable
-
-## Opt Out
-
-### In-App
-
-Settings → General → Privacy & Telemetry → Toggle off
-
-
-
-### Environment Variable
-
-```bash
-TELEMETRY_ENABLED=false
-```
-
-## What We Collect
-
-Anonymous, aggregated usage data only. If you have authenticated with GitHub, your GitHub username may be included with telemetry events to help us understand user engagement patterns.
-
-### App Lifecycle
-
-**`app_started`** / **`app_closed`**
-
-- `app_version`, `electron_version`, `platform`, `arch`, `is_dev`, `install_source`
-- `github_username` (if authenticated with GitHub)
-
-**`app_session`** (on quit)
-
-- `session_duration_ms`
-
-**`daily_active_user`** (once per calendar day)
-
-- `date`, `timezone`
-- `github_username` (if authenticated with GitHub)
-
-### Feature Usage
-
-Events track which features are used, not what you do with them:
-
-- Project management (create, open, delete)
-- Task management (create, delete, switch provider)
-- Terminal (open, execute)
-- Changes (view diff, create PR)
-- Plan mode (enable/disable)
-- Settings (theme, notifications, default provider)
-- Integrations (Linear, Jira, GitHub issues)
-- Skills (view, install, uninstall, create)
-- Remote projects (SSH connection, test)
-- Browser preview (open, close, navigate)
-- UI interactions (toolbar, sidebar, Kanban)
-
-All events include only: event name, anonymized properties (e.g., `provider: "claude"`). No file paths, code, prompts, or identifying information.
-
-