From b994eb843aba835050fc88a5fe7230adc480038a Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 22 Sep 2026 21:47:38 -0700 Subject: [PATCH 1/3] docs(marketing): update workflow guides and comparisons --- .../content/blog/claude-code-codex-iphone.mdx | 105 ++++++++ .../blog/parallel-coding-agents-guide.mdx | 247 ++++++------------ .../blog/scheduled-agent-maintenance.mdx | 69 +++++ .../content/blog/superset-mobile.mdx | 5 + .../content/compare/conductor-alternative.mdx | 81 ++---- .../content/compare/emdash-alternative.mdx | 72 ++--- .../compare/git-worktrees-for-ai-agents.mdx | 22 +- .../multiple-claude-code-agents-parallel.mdx | 6 +- .../content/compare/orca-alternative.mdx | 74 ++---- .../content/compare/superset-vs-conductor.mdx | 94 ++----- .../content/compare/superset-vs-emdash.mdx | 102 ++------ .../content/compare/superset-vs-orca.mdx | 98 ++----- .../videos/blog/phone-diff-review/demo.mp4 | Bin 0 -> 115025 bytes .../videos/blog/phone-diff-review/poster.jpg | Bin 0 -> 20546 bytes 14 files changed, 428 insertions(+), 547 deletions(-) create mode 100644 apps/marketing/content/blog/claude-code-codex-iphone.mdx create mode 100644 apps/marketing/content/blog/scheduled-agent-maintenance.mdx create mode 100644 apps/marketing/public/videos/blog/phone-diff-review/demo.mp4 create mode 100644 apps/marketing/public/videos/blog/phone-diff-review/poster.jpg diff --git a/apps/marketing/content/blog/claude-code-codex-iphone.mdx b/apps/marketing/content/blog/claude-code-codex-iphone.mdx new file mode 100644 index 00000000000..5d7776bcab3 --- /dev/null +++ b/apps/marketing/content/blog/claude-code-codex-iphone.mdx @@ -0,0 +1,105 @@ +--- +title: "Manage Claude Code and Codex from your iPhone" +description: "Connect an iPhone to your Superset workspaces, unblock Claude Code or Codex, and inspect changes. Includes Pro requirements, host setup, and offline troubleshooting." +author: kiet +date: 2026-09-22 +category: Engineering +image: /images/blog/superset-mobile/diffs.png +relatedSlugs: + - superset-mobile + - parallel-coding-agents-guide + - scheduled-agent-maintenance +keywords: + - claude code iphone + - codex iphone + - coding agents from phone +--- + +Your agent asks a question just as you leave your desk. Open Superset on your iPhone, reply in the same terminal, and check the diff when the change is ready. + +Claude Code and Codex keep running on your computer. Superset Mobile gives you access to those workspaces from your phone. + +## What you need + +- An iPhone running **iOS 26 or later** and **Superset Pro**. +- A host computer with your repository and an authenticated coding agent. +- The same Superset account and organization on both devices. + +The host must stay awake and online. Closing your laptop can put it to sleep and disconnect the session. For work that needs to continue overnight, use a computer that stays on. + +Your agent subscription or API usage is billed separately. See [plans](/pricing). Android is on the [waitlist](/mobile#android). + + + +## Connect your computer + +In Superset desktop, open **Settings → Remote Access** and enable **Allow remote access to this device via relay**. Enable it before starting work: changing this setting restarts the host service and interrupts running terminals. + +On a dedicated host, use the CLI: + +```bash +superset auth login +superset start --daemon +superset status +``` + +See [remote access setup](https://docs.superset.sh/remote-access) for host permissions and connection settings. + +## Start a task on desktop + +Create a workspace in your repository and start Claude Code or Codex. For a small search-copy change, try: + +```text +Propose a clearer message for the search screen's no-results state. +Ask me to approve the wording before editing. Then change the message +and any existing test that asserts it. Run the relevant check. +Do not commit, push, or merge. +``` + +Replace the example with a task from your project. Asking for a proposal gives you a chance to choose the wording before the agent edits it. + +## Reply from your iPhone + +Open the connected host in Superset Mobile, then open the workspace. Read the proposal in its terminal and send your approval or a revision. + +You're continuing the session on your computer. You don't need to start a new chat or paste in the conversation. Try sending a message from your phone before leaving your desk to check the connection. + +## Review the diff + +Open **Files changed** to see what the agent edited. Check the message and its test result, then ask for any corrections in the terminal. + + + +Inspect the diff, then mark the file as viewed. + +For a larger change, continue the review on desktop. Open the same workspace, run any remaining checks, and commit or open a pull request when you're ready. + +## If you can't connect + +- **Host offline:** check that the computer is awake, online, and running the host service. +- **Host missing:** check your account, organization, and host membership on both devices. +- **Terminal works but the agent doesn't:** check the agent's login, usage limits, and repository setup on the host. +- **Session stopped after changing remote access:** reopen the workspace and check the terminal before resuming. + +## Frequently asked questions + +### Does Claude Code or Codex run on the iPhone? + +The agent runs on your connected computer. The iPhone lets you send instructions and review its work. + +### Can I use Claude Code and Codex together? + +Yes. Install and authenticate both on the host, then use separate workspaces for independent tasks. You can open either workspace from your phone. + +### Will work continue if my laptop is closed? + +Only if it stays awake and connected. Use another host that stays online if you need work to continue while your laptop sleeps. + +### Is the mobile app free? + +It's free to download. Mobile access requires Superset Pro, and agent usage is billed separately by its provider. + +For several tasks at once, follow the [parallel coding workflow](/blog/parallel-coding-agents-guide). To run work on a schedule, see the [maintenance automation guide](/blog/scheduled-agent-maintenance). diff --git a/apps/marketing/content/blog/parallel-coding-agents-guide.mdx b/apps/marketing/content/blog/parallel-coding-agents-guide.mdx index 7cc753d1044..d650063284a 100644 --- a/apps/marketing/content/blog/parallel-coding-agents-guide.mdx +++ b/apps/marketing/content/blog/parallel-coding-agents-guide.mdx @@ -1,220 +1,131 @@ --- -title: "The Complete Guide to Running Parallel AI Coding Agents" -description: "How to run multiple AI coding agents in parallel without conflicts. Covers isolation strategies, orchestration patterns, and practical workflows for scaling from 1 to 10+ agents." +title: "Run three AI coding tasks in parallel, then review each change" +description: "A practical Claude Code and Codex workflow: scope three tasks, isolate them in Git worktrees, handle a blocked agent, and test the combined result before merging." author: avi date: 2026-02-18 +lastUpdated: 2026-09-22 category: Engineering relatedSlugs: - working-with-worktrees-in-superset - - roadmap-to-100-agents - - git-worktrees-history-deep-dive + - claude-code-codex-iphone + - scheduled-agent-maintenance --- -Running one AI coding agent is straightforward. Running ten at once introduces problems that most developers haven't encountered before: file conflicts, branch collisions, resource contention, and a review bottleneck that grows linearly with agent count. This guide covers the patterns that work and the mistakes to avoid. +To run coding agents in parallel, give each independent task its own workspace and branch, define what it may change, and review the results separately. Git worktrees prevent agents from editing the same working copy. They do not prevent merge conflicts or incompatible changes when you combine the branches. ---- - -## Why Parallel Agents? - -A single coding agent handles one task at a time. You prompt, it works, you review, you iterate. At best, you're doing one unit of agent work per cycle. - -But most codebases have dozens of parallelizable tasks at any given time: - -- Writing tests for module A doesn't conflict with refactoring module B -- Updating API docs doesn't conflict with fixing a database query -- Adding input validation doesn't conflict with migrating a config format - -These tasks are independent. They can, and should, run simultaneously. The bottleneck isn't the agent or the model. It's the human orchestrating one task at a time. - ---- +Start with three small tasks in your repository: a test, a copy change, and a documentation fix. -## The Isolation Problem +## Choose three tasks with separate ownership -![How isolation works: one repository fans out into a Git worktree per task, each running its own agent on its own branch, producing independent diffs](/images/guides/worktree-isolation.svg) +For a small application, use these task shapes and replace the paths with ones that exist in your project: -Running two agents in the same directory creates immediate problems: +1. **Tests:** cover an existing formatting helper without changing its behavior. +2. **Interface:** improve a search empty-state message without changing the search API. +3. **Documentation:** clarify an existing setup step without changing dependencies or configuration. -``` -Agent 1: Opens src/auth/login.ts, starts refactoring -Agent 2: Opens src/auth/login.ts, starts adding validation -Agent 1: Writes its version of login.ts -Agent 2: Writes its version of login.ts (overwrites Agent 1) -Agent 1: Commits, but the file is Agent 2's version -``` +Avoid pairing an API rewrite with tests that depend on the old API. Different filenames alone do not make two tasks independent. -This isn't a theoretical risk. It happens every time two agents touch overlapping files. Even if they're editing different files, a shared `git index` means their commits can include each other's uncommitted changes. The clean fix is [a Git worktree per agent](/compare/git-worktrees-for-ai-agents). +Record the starting commit with `git rev-parse HEAD`. Use that same base for all three workspaces. This gives you a known point to compare against during review. -### Solution: One Worktree Per Agent +## Create one worktree per task -Git worktrees solve this at the filesystem level: +In Superset, open your project and create three workspaces, each with its own branch. Use descriptive names such as `demo/format-tests`, `demo/search-copy`, and `demo/setup-docs`. Start Claude Code or Codex in each workspace. -``` -~/project/ # Your main working tree -~/project-agent-tests/ # Agent 1: writing tests (own branch, own files) -~/project-agent-refactor/ # Agent 2: refactoring auth (own branch, own files) -~/project-agent-docs/ # Agent 3: updating docs (own branch, own files) -``` - -Each worktree has: -- Its own copy of the working directory -- Its own branch -- Its own staging area (git index) +![One repository with a separate worktree and branch for each task.](/images/guides/worktree-isolation.svg) -They share the git object store, so creating a worktree takes seconds and costs minimal disk space. - ---- - -## Orchestration Patterns - -### Pattern 1: Manual Worktrees - -The simplest approach is to create worktrees yourself and run agents manually: +You can also create the worktrees manually from a clean repository: ```bash -git worktree add ../project-tests -b agent/tests -cd ../project-tests -claude-code "Write unit tests for the auth module" +git worktree add -b demo/format-tests ../demo-format-tests HEAD +git worktree add -b demo/search-copy ../demo-search-copy HEAD +git worktree add -b demo/setup-docs ../demo-setup-docs HEAD +git worktree list ``` -This works for 2-3 agents but breaks down at scale. You're managing worktrees, branches, and terminals manually. - -### Pattern 2: Scripted Orchestration - -A shell script that automates worktree creation and agent launching: +In a separate terminal for each directory, launch the installed agent with `claude` or `codex`. For example: ```bash -#!/bin/bash -TASK_NAME="$1" -AGENT_CMD="$2" -BRANCH="agent/$TASK_NAME" -WORKTREE_DIR="../$(basename $(pwd))-$TASK_NAME" - -git worktree add "$WORKTREE_DIR" -b "$BRANCH" -cd "$WORKTREE_DIR" -eval "$AGENT_CMD" +cd ../demo-format-tests +claude ``` -Better, but still no unified view of all tasks, no session persistence, and no diff review workflow. - -### Pattern 3: Dedicated Orchestrator - -Tools like [Superset](https://superset.sh) handle orchestration end-to-end: - -1. **Task creation**: describe the task, pick an agent -2. **Automatic isolation**: worktree and branch created automatically -3. **Session management**: persistent daemon keeps sessions alive across crashes -4. **Diff review**: built-in diff viewer for reviewing agent output -5. **Editor integration**: open any worktree in VS Code, Cursor, JetBrains, or Xcode - -This is the approach that scales to 5-10+ concurrent agents without operational overhead. - ---- - -## Choosing the Right Agent Per Task +Use a worktree per independent writer. Opening three terminals inside one workspace does not give them three isolated working directories. -Different agents have different strengths. A parallel workflow lets you match agents to tasks: +## Give every agent an acceptance check -### Claude Code -- Complex multi-file refactors -- Architectural changes (new patterns, module restructuring) -- Debugging subtle issues that require deep codebase understanding -- Tasks requiring MCP tool integration +For the test task: -### Codex CLI -- Well-scoped, clearly defined tasks -- Full Auto mode for autonomous execution -- Tasks where OpenAI models (o3, o4-mini) perform well -- Cost-sensitive tasks using cheaper models - -### OpenCode -- Tasks where model flexibility matters (75+ providers) -- Cost optimization across different providers -- Teams running local models via Ollama -- Tasks that benefit from LSP integration - -### Aider -- Iterative pair programming tasks -- Small, focused changes with tight feedback loops -- Tasks requiring frequent back-and-forth - -You don't have to choose one agent for everything. Run Claude Code on the complex refactor and Codex on the test generation simultaneously. - ---- - -## The Review Bottleneck - -Parallel agents create a new problem: review throughput. If you run 10 agents and each produces a diff in 15 minutes, you have 10 diffs to review per hour. - -![Reviewing one agent's isolated diff before merging](/images/readme/diff-viewer.png) - -### Strategies for Fast Review - -**Prioritize by risk:** A test addition is low-risk and can be reviewed quickly. A database migration is high-risk and needs careful review. Triage diffs by impact. - -**Review diffs, not files:** Don't re-read the entire file. Focus on what changed. If the diff is scoped to what you asked for and the tests pass, a quick review is usually sufficient. - -**Let agents verify their own work:** Before reviewing, check if the agent ran tests. If tests pass and the diff is clean, your review is a sanity check rather than a first-pass audit. - -**Use structured task descriptions:** "Add input validation to the signup form: email must be valid, password must be 8+ characters, display inline errors" produces a reviewable diff. "Improve the signup form" produces something unpredictable. - -**Batch similar tasks:** Review all test additions together, then all refactors. Context switching between different types of changes is the biggest time sink in review. - ---- - -## Resource Management - -### CPU and Memory +```text +Add focused tests for the formatting helper's existing behavior. +Inspect the existing test framework first. Change only its test file. +Cover empty input and a normal input using the current contract. +Run the focused test command and report the exact command and result. +If the behavior is ambiguous, ask before changing production code. +Do not commit, push, or merge. +``` -Each agent consumes local resources for: -- The agent process itself (terminal, file I/O) -- Language servers (TypeScript, Go, Python) if the agent uses them -- Build processes if the agent runs builds -- Test suites if the agent runs tests +For the interface task: -On a modern laptop, 5-7 concurrent agents are comfortable. Beyond that, you may want to stagger agent launches or limit concurrent builds. +```text +Propose clearer copy for the search screen's no-results state. +Ask me to approve the wording before editing. Then change only that +message and the existing test that asserts it, if one exists. +Run the relevant check and report the diff. Do not commit, push, or merge. +``` -### API Rate Limits +For the documentation task: -Each agent makes API calls to its model provider. Running 10 Claude Code instances hits Anthropic's rate limits faster than one. Monitor your provider's rate limit headers and throttle if needed. +```text +Clarify one confusing step in the README's local setup instructions. +Check the documented command against package scripts or project config. +Keep the edit in the README. Do not install packages or change config. +Report what you verified and what still needs a human check. +Do not commit, push, or merge. +``` -Throttling only goes so far once a team is running agents all day. Shared API tiers are sized per account, so ten agents on one key share the same tokens-per-minute budget that one agent used to have to itself. If your agents run on open models, reserved capacity removes that ceiling: [Morph Dedicated Inference](https://www.morphllm.com/dedicated-inference) reserves B200 or B300 capacity by the GPU-hour on an isolated, OpenAI-compatible endpoint with a 99.9% availability SLA, so throughput is fixed by the hardware you reserve rather than a shared pool. For hosted models like Claude, the equivalent is a higher usage tier or a provisioned throughput plan from the provider. +If two tasks need to change the same dependency, assign that change to one agent before the others continue. -### Disk Space +## Handle a blocked agent without losing the other tasks -Each worktree is a full checkout of your working directory. For a 1GB repo, 10 worktrees use ~10GB. The git object store is shared, so history isn't duplicated. Clean up completed worktrees promptly. +The interface agent should pause for wording approval. Open its workspace, read the proposed message, and reply. The test and documentation tasks remain in their own workspaces. ---- +If you leave your desk, the [iPhone walkthrough](/blog/claude-code-codex-iphone) explains how to continue the same session. That requires Pro, an eligible iPhone, and a reachable host; a sleeping laptop cannot keep an agent working. -## Common Mistakes +## Give previews and services their own resources -### Running Too Many Agents at Once +A Git worktree separates files and the index. It does not allocate a new database, port, container name, or provider rate limit. -Start with 2-3 until you're comfortable with the review workflow. Scaling to 10 before you can review at speed creates a backlog that slows everything down. +If two tasks need web previews, give their dev servers distinct ports using the project's supported configuration. Use separate test data or isolated databases for tasks that write data. Install dependencies and configure the environment in each workspace according to the project's setup instructions. -### Vague Task Descriptions +Watch memory, build load, and provider limits. Start fewer agents if the machine becomes slow or the review queue grows. -"Fix the bugs" will produce unpredictable results. "Fix the null pointer in UserService.getProfile when user.avatar is null: add a null check and return a default avatar URL" gives the agent exactly what it needs. +## Review each diff, then test the combined result -### Ignoring Branch Conflicts +![Superset's diff viewer showing an isolated change.](/images/readme/diff-viewer.png) -If two agents modify the same file on different branches, you'll hit merge conflicts when merging. Plan your task allocation to minimize overlap. If tasks must touch the same files, run them sequentially. +For each workspace: -### Not Running Tests +1. Inspect `git status --short` for unexpected files. +2. Read the diff, including changes outside the requested scope. +3. Check the exact test command and its output. A skipped or failed check stays unresolved. +4. Ask for corrections in that workspace before accepting the patch. +5. Commit and open a pull request through your normal review process. -If the agent doesn't run tests, you're reviewing blind. Either include "run tests and fix any failures" in your prompt, or verify tests pass before reviewing the diff. +`git diff` shows unstaged changes; `git diff --cached` shows staged changes. For committed changes, compare with the base you recorded. Do not mistake an empty unstaged diff for “nothing changed.” ---- +Integrate accepted branches one at a time. Run the relevant checks on the combined result after each merge. Two individually passing branches can still fail together, even when Git reports no textual conflict. Review changed code in context, especially contracts, permissions, and error paths. -## Getting Started +## Clean up only after accepting the result -1. **Pick an orchestrator**: [Superset](https://superset.sh) handles worktrees, sessions, and review -2. **Pick your agents**: Start with Claude Code or Codex, expand later -3. **Start with 2-3 tasks**: Parallelizable, non-overlapping tasks -4. **Review quickly**: Focus on diffs, not full file reads -5. **Scale gradually**: Add more agents as your review speed improves +Stop the workspace's dev server and agent before removing its worktree. If you used manual worktrees, remove each completed directory from your main checkout: -The goal isn't to run the most agents possible. It's to maximize useful throughput: tasks completed per hour that meet your quality bar. Parallel agents get you there faster than sequential work, but only if the orchestration and review workflow supports it. +```bash +git worktree remove ../demo-format-tests +git worktree remove ../demo-search-copy +git worktree remove ../demo-setup-docs +git worktree list +``` ---- +Git refuses removal when a worktree contains changes it needs you to handle. Inspect those changes instead of adding `--force`. Removing a worktree keeps its branch; decide separately whether the branch should be retained. -**Related:** [Best Agentic IDE in 2026](/compare/best-agentic-ide) · [Git Worktrees for AI Coding Agents](/compare/git-worktrees-for-ai-agents) · [How to Run Multiple Claude Code Agents in Parallel](/compare/multiple-claude-code-agents-parallel) +For the underlying Git behavior, read the [worktree walkthrough](/compare/git-worktrees-for-ai-agents) and [Git's worktree documentation](https://git-scm.com/docs/git-worktree). For product selection, compare [Superset and Orca](/compare/superset-vs-orca), [Conductor](/compare/superset-vs-conductor), and [Emdash](/compare/superset-vs-emdash). diff --git a/apps/marketing/content/blog/scheduled-agent-maintenance.mdx b/apps/marketing/content/blog/scheduled-agent-maintenance.mdx new file mode 100644 index 00000000000..5448e34eef4 --- /dev/null +++ b/apps/marketing/content/blog/scheduled-agent-maintenance.mdx @@ -0,0 +1,69 @@ +--- +title: "Schedule an agent maintenance check you can review" +description: "Set up a recurring Superset agent check on a connected host, inspect its workspace, and handle offline runs. Includes a bounded maintenance prompt and review checklist." +author: kiet +date: 2026-09-22 +category: Engineering +relatedSlugs: + - parallel-coding-agents-guide + - claude-code-codex-iphone +--- + +Have an agent check your repository every week and leave a report you can review. Superset Automations run the task on a computer you choose and keep the work in a workspace you can reopen. + +Start with a check that reports findings without changing files. + +## Prepare the host and project + +Automations require **Superset Pro or Enterprise**, an available target device, and an installed, authenticated agent. Choose a project with an existing test or lint command. Set up its dependencies and credentials on the host first. + +Use a connected machine that will be awake when the schedule fires. A remote host requires appropriate host membership; see [remote access](https://docs.superset.sh/remote-access). Your model subscription or API usage is separate from Superset's plan. + +## Create a weekly maintenance check + +Open **Automations → New automation**. Select the project, device, and agent, then use a title such as “Weekly test and documentation check.” Choose a weekly time when you can review the result. The schedule uses the timezone selected at creation. + +Use this prompt and add the test or lint command from your project: + +```text +Inspect this project's documented local setup and run its existing +focused test or lint command. Do not install or upgrade dependencies, +change files, commit, push, open issues, or contact external services. + +Report: +- the starting commit; +- the exact command and exit status; +- any setup documentation that disagrees with package scripts; +- at most three actionable findings, with paths and supporting output; +- which checks could not run and why. + +If the environment is missing a dependency or credential, stop and +report the missing prerequisite. Do not attempt to repair the host. +This job may run more than once; do not create duplicate external work. +``` + +For expensive test suites, name a focused command and time budget rather than asking the agent to “check everything.” An empty findings list is a valid outcome. + +## Run it once before relying on the schedule + +Use **Run now**, then open **Run History**. Open the created workspace and inspect the terminal and report. Confirm the agent used the intended repository, command, and scope. + +A run marked **created** means Superset created the workspace. It does **not** mean the agent's checks passed or its work was correct. Read the actual output before treating the maintenance job as successful. + +## Handle offline and duplicate runs + +If the target host is offline at dispatch time, the run fails and the schedule advances. Restore the host, inspect the recorded error, and retry the run. Do not assume the missed work was completed later. + +A retry can occasionally start the job twice. Write prompts that are safe to repeat, especially if a later version opens issues or pull requests. + +## Turn a finding into an isolated change + +Choose one validated finding and start a separate workspace for its fix. Ask the agent to make the smallest relevant change and run the focused check. Review the diff and combined test result before merging, using the [parallel-workflow review steps](/blog/parallel-coding-agents-guide). + +After a few runs, check whether the findings are worth the time and model usage. Narrow the prompt or pause the schedule if it keeps reporting noise. + +## Share the review responsibility + +Choose who will review each run. Teammates need host and project access to continue the work. The automation owner can edit the schedule, pause it, or run it manually. + +See the [Automations documentation](https://docs.superset.sh/automations) for CLI commands and schedule options. diff --git a/apps/marketing/content/blog/superset-mobile.mdx b/apps/marketing/content/blog/superset-mobile.mdx index 929ad41a87a..2baafc1cafa 100644 --- a/apps/marketing/content/blog/superset-mobile.mdx +++ b/apps/marketing/content/blog/superset-mobile.mdx @@ -3,6 +3,7 @@ title: "Superset Mobile: leave your desk, keep building" description: "Prompt coding agents, follow terminal sessions, and review changes from your iPhone. Pick up the Superset workspaces you already use on your computer." author: kiet date: 2026-09-21 +lastUpdated: 2026-09-22 category: Product image: /images/blog/superset-mobile/hero.png --- @@ -105,6 +106,10 @@ I use Superset on my phone and iPad. Remote access is key. I no longer sit and w +## Try the complete workflow + +Follow the [Claude Code and Codex iPhone walkthrough](/blog/claude-code-codex-iphone) to configure a host, unblock an agent, inspect its diff, and troubleshoot an offline connection. + ## Get started 1. Set up Superset on your computer and keep your machine online and connected. diff --git a/apps/marketing/content/compare/conductor-alternative.mdx b/apps/marketing/content/compare/conductor-alternative.mdx index e64d2d62517..001f10730f9 100644 --- a/apps/marketing/content/compare/conductor-alternative.mdx +++ b/apps/marketing/content/compare/conductor-alternative.mdx @@ -1,8 +1,8 @@ --- title: "Best Conductor Alternatives in 2026" -description: "The best alternatives to Conductor for running AI coding agents in parallel Git worktrees, including Superset, Orca, Crystal, Claude Squad, and Vibe Kanban." +description: "Compare alternatives to Conductor by platform, mobile access, hosting, licensing, and the work you need to review. Compare desktop support, phone access, and cloud options." date: 2026-07-13 -lastUpdated: 2026-07-13 +lastUpdated: 2026-09-22 type: "roundup" competitors: - orca @@ -19,89 +19,56 @@ keywords: - agentic ide --- -Conductor is a popular macOS app for running Claude Code, Codex, and Cursor agents in parallel Git worktrees. It is polished and focused, but it is Mac only, proprietary, and limited to a few agents, so plenty of developers look for an alternative that is cross-platform, agent-agnostic, open source, or extends beyond a single machine. Here are the best Conductor alternatives in 2026. - ---- +Conductor now supports OpenCode as well as Claude Code, Codex, and Cursor, and offers cloud workspaces, multiplayer, and an API. A comparison that treats it as only a local three-agent app is out of date. ## The Short Version -| Alternative | Best for | Platform | License | -|---|---|---|---| -| **Superset** | Agent-agnostic orchestration with remote/cloud | macOS now; Windows and Linux coming | Source-available | -| **Orca** | Free cross-platform desktop workspace | macOS, Windows, Linux | Open source (MIT) | -| **Crystal (Nimbalyst)** | Open-source Claude Code + Codex app | macOS, Windows, Linux | Open source (MIT) | -| **Claude Squad** | Terminal-native parallel agents | macOS, Linux | Open source (AGPL) | -| **Vibe Kanban** | Kanban board over agents | Cross-platform | Open source (Apache) | -| **cmux** | Native terminal for agent sessions | macOS | Open source (GPL) | - -## Why Look for a Conductor Alternative? - -Conductor does one thing well: parallel agents in worktrees on a Mac. You might want an alternative if you need Windows or Linux, want an open-source tool, run agents beyond Claude Code, Codex, and Cursor, or want orchestration that extends to remote and cloud hosts. The tools below cover those gaps in different ways. +Start with the feature you need: iPhone access, managed cloud workspaces, or support for your desktop platform. ## The Best Alternatives ### Superset -Superset is the closest alternative for anyone who likes Conductor's worktree model but wants more. It runs any CLI agent, such as Claude Code, Codex, OpenCode, Cursor, Copilot, Gemini, and Mistral Vibe, each in its own Git worktree, and adds a built-in diff editor, an in-app browser, MCP, and remote and cloud workspaces that run across your own network devices. It ships on macOS now, with Windows and Linux planned. Where Conductor is a focused Mac app for three agents, Superset is an agent-agnostic workspace built to scale. +Superset is worth trying if you want your coding workspaces, terminal sessions, and diff review on desktop and iPhone. The iPhone app requires iOS 26 or later, Pro, and a reachable host. Desktop targets macOS, with experimental Linux support; Windows is not available. The source uses Elastic License 2.0. -For the direct comparison, see [Superset vs Conductor](/compare/superset-vs-conductor). +Read the [detailed comparison](/compare/superset-vs-conductor). ### Orca -Orca is a free, open-source desktop "agent development environment" that runs many agents in parallel, each with its own worktree and browser tab. It is agent-agnostic with 25+ supported agents and runs on macOS, Windows, and Linux with mobile companions. It is the most direct cross-platform, open-source analog to Conductor's model. - -See [Superset vs Orca](/compare/superset-vs-orca). - -### Crystal (now Nimbalyst) +Orca is a candidate when an MIT license, Windows support, or an Android companion is important. Its current documentation covers worktrees, remote hosts, mobile access, and scheduled automations. -Crystal is an open-source Electron app for running Claude Code and Codex in parallel worktrees, with strong in-app Git operations. It is cross-platform and MIT licensed, and its active development now continues under the name Nimbalyst. A good pick if you want an open-source, cross-platform Conductor-style app. +Read the [detailed comparison](/compare/superset-vs-orca). -See [Superset vs Crystal](/compare/superset-vs-crystal). +### Emdash -### Claude Squad +Emdash is a candidate for its Apache-2.0 desktop app, macOS/Windows/Linux support, issue intake, and scheduled tasks. Cloud and enterprise plans are available separately. -Claude Squad is an open-source terminal app that manages multiple agents in separate worktrees using tmux. It is lean, keyboard-driven, and agent-agnostic, ideal if you prefer the terminal over a desktop UI. +Read the [detailed comparison](/compare/superset-vs-emdash). -See [Superset vs Claude Squad](/compare/superset-vs-claude-squad). +## Run a useful trial -### Vibe Kanban +Use the same repository commit, agent, model, and three small tasks in each candidate. Follow the [parallel-task walkthrough](/blog/parallel-coding-agents-guide), including a paused agent, separate previews, and a combined test run. Record setup time, review time, rework, and any missing capability. -Vibe Kanban puts a Kanban board over coding agents, running them in parallel worktrees. It is open source and cross-platform. Note that it is sunsetting as a maintained product, continuing as community open source, so weigh long-term maintenance. +For mobile, verify you can reconnect, reply to the agent, and inspect the intended diff. A host that is asleep cannot continue local work. Try the [Superset iPhone workflow](/blog/claude-code-codex-iphone) for a concrete example. -See [Superset vs Vibe Kanban](/compare/superset-vs-vibe-kanban). +For recurring work, inspect the workspace and output after dispatch. Check that the agent finished its task and that its checks passed. The [maintenance guide](/blog/scheduled-agent-maintenance) shows what to check. -### cmux +## Product documentation -cmux is a native macOS terminal built for agents, keeping many sessions organized in panes and tabs. It is not a worktree orchestrator, but if your goal is a great terminal for agents rather than automatic isolation, it is worth a look. +See [Orca's docs](https://www.onorca.dev/docs), [Orca automations](https://www.onorca.dev/docs/cli/automations), [Conductor's docs](https://www.conductor.build/docs), [Conductor Cloud](https://www.conductor.build/docs/cloud), [Emdash's docs](https://emdash.com/docs), and [Emdash enterprise](https://emdash.com/enterprise). Superset requirements are on [pricing](/pricing) and [mobile](/mobile). -See [Superset vs cmux](/compare/superset-vs-cmux). - -## How To Choose - -- For agent-agnostic orchestration with remote and cloud hosts, choose **Superset**. -- For a free, cross-platform, open-source desktop workspace, choose **Orca**. -- For an open-source Claude Code and Codex app, choose **Crystal (Nimbalyst)**. -- For terminal-native parallel agents, choose **Claude Squad**. -- For a Kanban metaphor, consider **Vibe Kanban** (note its sunset). - -## Verdict - -Conductor is excellent if you are on macOS and use Claude Code, Codex, or Cursor. If you need cross-platform support, open source, more agents, or remote and cloud hosting, the strongest alternative is Superset, with Orca and Crystal (Nimbalyst) as leading open-source options. For the full landscape, see [Best Agentic IDE in 2026](/compare/best-agentic-ide). +For more options, see the [agentic IDE roundup](/compare/best-agentic-ide). ## Frequently Asked Questions -### What is the best Conductor alternative? - -For most people wanting more than Conductor's Mac-only, three-agent focus, Superset is the closest alternative: agent-agnostic worktree orchestration with remote and cloud workspaces. Orca and Crystal (Nimbalyst) are strong open-source options. - -### Is there an open-source Conductor alternative? +### Which alternative is best? -Yes. Orca (MIT), Crystal/Nimbalyst (MIT), Claude Squad (AGPL), and Vibe Kanban (Apache) are all open source. Superset is source-available under ELv2. +Choose the one that meets your platform and hosting requirements and lets you review an actual task with the least friction. Try a task in your own repository before switching. -### What is a cross-platform alternative to Conductor? +### Is Superset free and open source? -Conductor is macOS only. Orca and Crystal (Nimbalyst) run on macOS, Windows, and Linux. Superset ships on macOS now with Windows and Linux planned. +Superset has a free tier and paid plans, and its source uses Elastic License 2.0. Mobile, remote access, and automations require an eligible paid plan. It is not MIT- or Apache-licensed. -### Do these alternatives use Git worktrees like Conductor? +### Do these tools replace my coding-agent subscription? -Most do. Superset, Orca, Crystal, Claude Squad, and Vibe Kanban all isolate agents in Git worktrees. cmux is the exception, being a terminal rather than a worktree orchestrator. +No. Account for the agent provider's subscription or API usage separately, along with any compute or hosting charges. diff --git a/apps/marketing/content/compare/emdash-alternative.mdx b/apps/marketing/content/compare/emdash-alternative.mdx index 5218d8ccb96..645f92badc7 100644 --- a/apps/marketing/content/compare/emdash-alternative.mdx +++ b/apps/marketing/content/compare/emdash-alternative.mdx @@ -1,8 +1,8 @@ --- title: "Best Emdash Alternatives in 2026" -description: "The best alternatives to Emdash for running parallel AI coding agents in Git worktrees, including Superset, Orca, Conductor, Herdr, and Crystal." +description: "Compare alternatives to Emdash by platform, mobile access, hosting, licensing, and the work you need to review. Compare desktop support, phone access, and cloud options." date: 2026-08-07 -lastUpdated: 2026-08-07 +lastUpdated: 2026-09-22 type: "roundup" competitors: - emdash @@ -19,82 +19,56 @@ keywords: - parallel ai coding agents --- -Emdash is a well-built open-source agentic development environment (YC W26): a worktree per task, 30+ agent providers, a dozen issue-tracker integrations, diff review, an in-app browser, and cron automations, all free under Apache-2.0. Its limits are surfaces and teams: there is no CLI, SDK, or API, automation is cron-only inside the app, and there is no team or enterprise offering. Here are the best Emdash alternatives in 2026. - ---- +Emdash supports scheduled tasks and remote development, and has cloud and enterprise offerings. Evaluate the specific workflow you need rather than assuming it stops at a single-user desktop app. ## The Short Version -| Alternative | Best for | Platform | License | -|---|---|---|---| -| **Superset** | Scriptable surfaces (CLI/MCP/SDK/Slack) and teams | macOS now; Windows and Linux coming | Source-available (ELv2) | -| **Orca** | Biggest open-source community, mobile apps | macOS, Windows, Linux + iOS/Android | Open source (MIT) | -| **Conductor** | Focused, polished Mac app | macOS | Proprietary | -| **Herdr** | Terminal-native runtime with persistence | macOS, Linux, Windows (beta) | Open source (Apache-2.0) | -| **Crystal (Nimbalyst)** | Lean open-source Claude Code + Codex app | macOS, Windows, Linux | Open source (MIT) | - -## Why Look for an Emdash Alternative? - -Emdash covers the desktop loop well. You might want an alternative if you need to drive orchestration from scripts, CI, or other agents (Emdash has no CLI or API), want automations that compose into pipelines rather than fire on cron, need team plans or enterprise controls, or want reach beyond the desktop -- cloud workspaces or mobile monitoring. +Start with the feature you need: iPhone access, managed cloud workspaces, or support for your desktop platform. ## The Best Alternatives ### Superset -Superset matches Emdash's core -- any CLI agent in an isolated worktree with diff review, browser, and scheduled runs -- and adds the surfaces Emdash lacks: a CLI, an MCP server so agents and tools can drive the workspace, a TypeScript SDK for building pipelines, and a Slack bot for team workflows, plus remote and cloud workspaces across your own devices. If Emdash's ceiling is "what the app's UI offers," Superset is the programmable version. +Superset is worth trying if you want your coding workspaces, terminal sessions, and diff review on desktop and iPhone. The iPhone app requires iOS 26 or later, Pro, and a reachable host. Desktop targets macOS, with experimental Linux support; Windows is not available. The source uses Elastic License 2.0. -For the direct comparison, see [Superset vs Emdash](/compare/superset-vs-emdash). +Read the [detailed comparison](/compare/superset-vs-emdash). ### Orca -Orca is the most popular project in the category (~39,000 stars, MIT): fleets of agents in parallel worktrees, split terminals, Design Mode for UI work, SSH/VPS worktrees, and shipped iOS and Android companions. It lacks Emdash's scheduler, but the community and release velocity are unmatched. +Orca is a candidate when an MIT license, Windows support, or an Android companion is important. Its current documentation covers worktrees, remote hosts, mobile access, and scheduled automations. -See [Superset vs Orca](/compare/superset-vs-orca). +Read the [detailed comparison](/compare/superset-vs-orca). ### Conductor -Conductor is a proprietary macOS app running Claude Code, Codex, and Cursor agents in parallel worktrees. Narrower agent support and macOS only, but polished and stable -- a good pick if Emdash's breadth is more than you use. - -See [Superset vs Conductor](/compare/superset-vs-conductor). +Conductor is a candidate for its Mac workflow and managed cloud collaboration. Its docs list Claude Code, Codex, Cursor, and OpenCode. Check current availability and plan terms for the features you need. -### Herdr +Read the [detailed comparison](/compare/superset-vs-conductor). -Herdr is an open-source terminal runtime rather than a desktop app: an always-on server that keeps agent terminals alive through disconnects, with worktree management in the CLI, a JSON socket API, and a plugin marketplace. The opposite trade from Emdash -- all persistence and scriptability, no built-in review UI. +## Run a useful trial -See [Superset vs Herdr](/compare/superset-vs-herdr). +Use the same repository commit, agent, model, and three small tasks in each candidate. Follow the [parallel-task walkthrough](/blog/parallel-coding-agents-guide), including a paused agent, separate previews, and a combined test run. Record setup time, review time, rework, and any missing capability. -### Crystal (now Nimbalyst) +For mobile, verify you can reconnect, reply to the agent, and inspect the intended diff. A host that is asleep cannot continue local work. Try the [Superset iPhone workflow](/blog/claude-code-codex-iphone) for a concrete example. -Crystal is a lean, MIT-licensed app for running Claude Code and Codex in parallel worktrees with solid in-app Git operations, continuing development under the Nimbalyst name. Less surface area than Emdash, but simple and cross-platform. +For recurring work, inspect the workspace and output after dispatch. Check that the agent finished its task and that its checks passed. The [maintenance guide](/blog/scheduled-agent-maintenance) shows what to check. -See [Superset vs Crystal](/compare/superset-vs-crystal). +## Product documentation -## How To Choose +See [Orca's docs](https://www.onorca.dev/docs), [Orca automations](https://www.onorca.dev/docs/cli/automations), [Conductor's docs](https://www.conductor.build/docs), [Conductor Cloud](https://www.conductor.build/docs/cloud), [Emdash's docs](https://emdash.com/docs), and [Emdash enterprise](https://emdash.com/enterprise). Superset requirements are on [pricing](/pricing) and [mobile](/mobile). -- For programmable orchestration and team features, choose **Superset**. -- For the biggest open-source community and mobile companions, choose **Orca**. -- For a focused Mac app, choose **Conductor**. -- For terminal-native persistence and scripting, choose **Herdr**. -- For a lean open-source two-agent app, choose **Crystal (Nimbalyst)**. - -## Verdict - -Emdash is one of the best free ADEs available, and if the desktop app covers your workflow there is little reason to leave. The moment you need to script it, schedule beyond cron, or roll it out to a team, Superset is the strongest alternative, with Orca as the leading open-source option. For the full landscape, see [Best Agentic IDE in 2026](/compare/best-agentic-ide). +For more options, see the [agentic IDE roundup](/compare/best-agentic-ide). ## Frequently Asked Questions -### What is the best Emdash alternative? - -For most teams, Superset: the same worktree-per-task model plus a CLI, MCP server, TypeScript SDK, Slack bot, and remote/cloud workspaces. Orca is the strongest open-source alternative. - -### Is there an open-source Emdash alternative? +### Which alternative is best? -Yes. Orca (MIT), Herdr (Apache-2.0), and Crystal/Nimbalyst (MIT) are all open source, like Emdash itself. Superset is source-available under ELv2 with a free tier. +Choose the one that meets your platform and hosting requirements and lets you review an actual task with the least friction. Try a task in your own repository before switching. -### Which alternatives support as many agents as Emdash? +### Is Superset free and open source? -Emdash lists 30+ providers. Orca lists 25+ named agents plus any CLI agent, and Superset runs any terminal agent. In practice all three cover the mainstream agents; the long tails differ. +Superset has a free tier and paid plans, and its source uses Elastic License 2.0. Mobile, remote access, and automations require an eligible paid plan. It is not MIT- or Apache-licensed. -### Do these alternatives integrate with issue trackers? +### Do these tools replace my coding-agent subscription? -Emdash's 12-tracker intake is the broadest. Superset integrates GitHub and Linear (plus tasks over MCP/SDK). Orca integrates GitHub, Linear, and Jira. If Asana, Monday, or Trello intake is essential, Emdash keeps an edge. +No. Account for the agent provider's subscription or API usage separately, along with any compute or hosting charges. diff --git a/apps/marketing/content/compare/git-worktrees-for-ai-agents.mdx b/apps/marketing/content/compare/git-worktrees-for-ai-agents.mdx index 3f5ebb3721e..26d79926b2e 100644 --- a/apps/marketing/content/compare/git-worktrees-for-ai-agents.mdx +++ b/apps/marketing/content/compare/git-worktrees-for-ai-agents.mdx @@ -2,7 +2,7 @@ title: "Git Worktrees for AI Coding Agents: The Parallel Workflow" description: "How Git worktrees let you run multiple AI coding agents in parallel without collisions. Learn the workflow, the tradeoffs, and the tools that automate it." date: 2026-07-13 -lastUpdated: 2026-07-13 +lastUpdated: 2026-09-22 type: "tutorial" competitors: - git-worktrees @@ -15,7 +15,7 @@ keywords: - visual studio code git worktree --- -If you run more than one AI coding agent on the same repository, the single most useful tool you can learn is the Git worktree. It is the clean, native way to give each agent its own isolated place to work, so parallel changes never collide. This guide explains what worktrees are, why they matter for agents, the exact workflow, and the tools that automate it. For the workflow around worktrees, see the complete guide to [parallel coding agents](/parallel-coding-agents). +If you run more than one AI coding agent on the same repository, the single most useful tool you can learn is the Git worktree. It is the clean, native way to give each agent its own isolated place to work, so agents edit separate working directories. This guide explains what worktrees are, why they matter for agents, the exact workflow, and the tools that automate it. For the workflow around worktrees, see the complete guide to [parallel coding agents](/parallel-coding-agents). --- @@ -25,8 +25,8 @@ A Git worktree is an additional working directory attached to the same repositor ```bash # from your repo -git worktree add ../myrepo-feature-a feature-a -git worktree add ../myrepo-bugfix bugfix-123 +git worktree add -b feature-a ../myrepo-feature-a HEAD +git worktree add -b bugfix-123 ../myrepo-bugfix HEAD ``` Now `feature-a` and `bugfix-123` each have their own directory. Edits in one do not touch the other, and both share the same `.git` data. When you are done, you remove the worktree and keep the branch. @@ -36,9 +36,9 @@ Now `feature-a` and `bugfix-123` each have their own directory. Edits in one do AI coding agents edit files and run commands autonomously. Run two agents in the same directory and they overwrite each other's work, fight over the branch, and produce a tangled mess. Worktrees solve this cleanly: - **Isolation:** each agent gets its own directory and branch -- **Parallelism:** many agents run at once without collisions +- **Parallelism:** agents edit separate working copies - **Reviewability:** each worktree produces its own diff you can review independently -- **Safety:** a bad run is contained to one worktree, not your main checkout +- **Scope:** each change has a separate working copy; a worktree is not a security sandbox ![One repository fanning out into a Git worktree per agent, each on its own branch, producing independent diffs that converge into review and merge](/images/guides/worktree-isolation.svg) @@ -66,6 +66,12 @@ Each worktree produces its own diff. Review them one at a time and merge the one Remove finished worktrees with `git worktree remove`. The branch stays; only the extra directory goes. +## What isolation does not cover + +Worktrees share your machine and usually its credentials. They do not isolate databases, port numbers, provider quotas, or external services. Give previews distinct ports, separate writable test data, and run checks on the combined branches before accepting the result. + +A Git merge can succeed while the application fails: one branch might rename an API field that another branch expects. Review contracts as well as textual conflicts. The [three-task walkthrough](/blog/parallel-coding-agents-guide) includes scoped prompts and the review sequence. + ## Doing It Manually vs Automatically You can run this whole workflow by hand with `git worktree`, tmux, and discipline. It works, and for two or three occasional agents it may be all you need. The friction grows with scale: creating, tracking, and cleaning up worktrees, launching agents, managing ports for dev servers, and reviewing many diffs becomes real overhead. @@ -90,11 +96,11 @@ To go deeper, see [How to Run Multiple Claude Code Agents in Parallel](/compare/ ### What is a Git worktree used for? -A Git worktree lets you check out multiple branches at once, each in its own directory sharing the same repository. For AI coding, it gives each agent an isolated place to work so parallel changes do not collide. +A Git worktree lets you check out multiple branches at once, each in its own directory sharing the same repository. For AI coding, it gives each agent an isolated place to work so agents do not edit the same working copy. ### How do I run multiple AI agents without conflicts? -Give each agent its own Git worktree and branch so they never share a working directory. Do it manually with `git worktree add`, or automatically with a workspace like Superset that creates a worktree per task. +Give each independent writer its own Git worktree and branch. This prevents shared-checkout edits, but merging can still introduce conflicts or incompatible behavior. Do it manually with `git worktree add`, or automatically with a workspace like Superset that creates a worktree per task. ### Do AI coding tools use Git worktrees? diff --git a/apps/marketing/content/compare/multiple-claude-code-agents-parallel.mdx b/apps/marketing/content/compare/multiple-claude-code-agents-parallel.mdx index 6dbad4ddd94..a555e45dc94 100644 --- a/apps/marketing/content/compare/multiple-claude-code-agents-parallel.mdx +++ b/apps/marketing/content/compare/multiple-claude-code-agents-parallel.mdx @@ -2,7 +2,7 @@ title: "How to Run Multiple Claude Code Agents in Parallel" description: "Learn the safest way to run multiple Claude Code sessions at once. Compare terminal tabs, tmux, manual Git worktrees, and Superset's orchestration workflow." date: 2026-03-20 -lastUpdated: 2026-03-20 +lastUpdated: 2026-09-22 type: "tutorial" competitors: - claude-code @@ -30,6 +30,8 @@ If two sessions share one working directory, they can both edit the same files, That is why "multiple agents" is really an isolation problem first and an interface problem second. +For a complete exercise with three scoped prompts, a deliberate approval pause, separate previews, and an integration check, follow the [three-task walkthrough](/blog/parallel-coding-agents-guide). + ## The Three Common Approaches ### 1. Multiple Terminal Tabs or tmux Panes @@ -54,7 +56,7 @@ git worktree add ../repo-refactor -b ai/refactor Then you `cd` into each directory and launch Claude Code there. -This is safe and effective. It is also repetitive. You still have to create branches, name directories, track which session maps to which task, and review each diff manually in your editor or Git UI. +This separates working files, but does not sandbox the agent or prevent merge conflicts. It is also repetitive. You still have to create branches, name directories, track which session maps to which task, and review each diff manually in your editor or Git UI. ### 3. Superset + Claude Code diff --git a/apps/marketing/content/compare/orca-alternative.mdx b/apps/marketing/content/compare/orca-alternative.mdx index 1dbdbcbaa3c..7e5a90a0c76 100644 --- a/apps/marketing/content/compare/orca-alternative.mdx +++ b/apps/marketing/content/compare/orca-alternative.mdx @@ -1,8 +1,8 @@ --- title: "Best Orca Alternatives in 2026" -description: "The best alternatives to Orca (the open-source ADE) for running parallel AI coding agents, including Superset, Conductor, Emdash, Herdr, and super.engineering." +description: "Compare alternatives to Orca by platform, mobile access, hosting, licensing, and the work you need to review. Compare desktop support, phone access, and cloud options." date: 2026-08-07 -lastUpdated: 2026-08-07 +lastUpdated: 2026-09-22 type: "roundup" competitors: - orca @@ -19,82 +19,56 @@ keywords: - parallel ai coding agents --- -Orca is the most popular open-source agent development environment -- roughly 39,000 GitHub stars, MIT licensed, running fleets of agents in parallel worktrees on macOS, Windows, and Linux with mobile companions. It is a strong default. But it has no scheduler, its programmatic surfaces are young (a CLI plus experimental orchestration), it moves fast enough that near-daily releases can mean churn, and there is no team or enterprise track behind it. Here are the best Orca alternatives in 2026. - ---- +Superset, Conductor, and Emdash each offer a way to run coding agents in separate workspaces. Superset adds iPhone access to your terminals and diffs. Conductor offers managed cloud collaboration. Emdash provides an Apache-2.0 app for macOS, Windows, and Linux. ## The Short Version -| Alternative | Best for | Platform | License | -|---|---|---|---| -| **Superset** | Automations, CLI/MCP/SDK surfaces, teams | macOS now; Windows and Linux coming | Source-available (ELv2) | -| **Emdash** | Open-source ADE with 12 issue-tracker integrations | macOS, Windows, Linux | Open source (Apache-2.0) | -| **Conductor** | Polished, focused Mac app | macOS | Proprietary | -| **Herdr** | Terminal-native runtime; agents survive disconnects | macOS, Linux, Windows (beta) | Open source (Apache-2.0) | -| **super.engineering** | Native Rust performance, keyboard-driven | macOS (Apple Silicon) | Proprietary (alpha) | - -## Why Look for an Orca Alternative? - -Orca nails interactive parallel work: fan a prompt across agents, compare, merge the winner. You might want an alternative if you need agents to run on a schedule without external wiring, want deeper scriptability (SDK, MCP server) for pipelines, need team features and enterprise controls, prefer a calmer release cadence, or simply want a different interface model -- terminal-native or natively rendered. +Start with the feature you need: iPhone access, managed cloud workspaces, or support for your desktop platform. ## The Best Alternatives ### Superset -Superset shares Orca's foundation -- any CLI agent, one Git worktree per task, diff review, an in-app browser -- and extends it where Orca stops. Automations run agent sessions on a schedule, a TypeScript SDK and MCP server make the orchestration programmable, a Slack bot brings it to team channels, and remote and cloud workspaces carry whole workspaces across your own devices. It is the alternative for making parallel agents a dependable workflow rather than an interactive session. - -For the direct comparison, see [Superset vs Orca](/compare/superset-vs-orca). +Superset is worth trying if you want your coding workspaces, terminal sessions, and diff review on desktop and iPhone. The iPhone app requires iOS 26 or later, Pro, and a reachable host. Desktop targets macOS, with experimental Linux support; Windows is not available. The source uses Elastic License 2.0. -### Emdash - -Emdash (YC W26, Apache-2.0) is the closest open-source swap: worktree per task, 30+ auto-detected agent CLIs, diff review with push-and-create-PR, an in-app browser, cron automations, and intake from a dozen trackers including Jira, Asana, Notion, and Trello. If Orca's licence and price are why you chose it, Emdash keeps both and adds scheduling. - -See [Superset vs Emdash](/compare/superset-vs-emdash). +Read the [detailed comparison](/compare/superset-vs-orca). ### Conductor -Conductor is a polished, proprietary macOS app for running Claude Code, Codex, and Cursor agents in parallel worktrees. It supports fewer agents and fewer platforms than Orca, but it is focused and stable -- a good fit if you found Orca's surface area more than you need. +Conductor is a candidate for its Mac workflow and managed cloud collaboration. Its docs list Claude Code, Codex, Cursor, and OpenCode. Check current availability and plan terms for the features you need. -See [Superset vs Conductor](/compare/superset-vs-conductor). +Read the [detailed comparison](/compare/superset-vs-conductor). -### Herdr +### Emdash -Herdr flips the model: instead of a desktop workspace, it is an open-source terminal runtime whose server keeps agent sessions alive through disconnects and restarts, with worktree management in the CLI and a plugin marketplace. Pick it if you live in the terminal and want persistence more than UI. +Emdash is a candidate for its Apache-2.0 desktop app, macOS/Windows/Linux support, issue intake, and scheduled tasks. Cloud and enterprise plans are available separately. -See [Superset vs Herdr](/compare/superset-vs-herdr). +Read the [detailed comparison](/compare/superset-vs-emdash). -### super.engineering +## Run a useful trial -super.engineering (formerly Superconductor) is a closed-source native macOS orchestrator written in Rust with a GPU-rendered terminal and a keyboard-driven, unlimited-parallel-agents pitch. It is in alpha with nightly-only releases, but if Orca's Electron-style app feels heavy, it is the performance-purist alternative. +Use the same repository commit, agent, model, and three small tasks in each candidate. Follow the [parallel-task walkthrough](/blog/parallel-coding-agents-guide), including a paused agent, separate previews, and a combined test run. Record setup time, review time, rework, and any missing capability. -See [Superset vs super.engineering](/compare/superset-vs-super-engineering). +For mobile, verify you can reconnect, reply to the agent, and inspect the intended diff. A host that is asleep cannot continue local work. Try the [Superset iPhone workflow](/blog/claude-code-codex-iphone) for a concrete example. -## How To Choose +For recurring work, inspect the workspace and output after dispatch. Check that the agent finished its task and that its checks passed. The [maintenance guide](/blog/scheduled-agent-maintenance) shows what to check. -- For scheduled automations, programmable surfaces, and team features, choose **Superset**. -- For a like-for-like open-source ADE with tracker intake and cron scheduling, choose **Emdash**. -- For a focused, polished Mac app, choose **Conductor**. -- For terminal-native persistence, choose **Herdr**. -- For native performance on a Mac, watch **super.engineering**. +## Product documentation -## Verdict +See [Orca's docs](https://www.onorca.dev/docs), [Orca automations](https://www.onorca.dev/docs/cli/automations), [Conductor's docs](https://www.conductor.build/docs), [Conductor Cloud](https://www.conductor.build/docs/cloud), [Emdash's docs](https://emdash.com/docs), and [Emdash enterprise](https://emdash.com/enterprise). Superset requirements are on [pricing](/pricing) and [mobile](/mobile). -Orca earns its popularity, and for free interactive parallel work it is hard to beat. The gaps show when parallel agents become infrastructure: scheduling, scripting, teams. That is where Superset is the strongest alternative, with Emdash as the best open-source swap. For the full landscape, see [Best Agentic IDE in 2026](/compare/best-agentic-ide). +For more options, see the [agentic IDE roundup](/compare/best-agentic-ide). ## Frequently Asked Questions -### What is the best Orca alternative? - -For most teams, Superset: the same agent-agnostic worktree model plus scheduled automations, a TypeScript SDK, an MCP server, a Slack bot, and remote/cloud workspaces. Emdash is the closest open-source alternative. - -### Is there a free, open-source Orca alternative? +### Which alternative is best? -Yes. Emdash (Apache-2.0) is the most direct one, and Herdr (Apache-2.0) covers the terminal-native angle. Superset has a free tier and is source-available under ELv2. +Choose the one that meets your platform and hosting requirements and lets you review an actual task with the least friction. Try a task in your own repository before switching. -### Do these alternatives use Git worktrees like Orca? +### Is Superset free and open source? -Superset, Emdash, and Conductor all isolate each task in its own worktree. Herdr manages worktrees through its CLI. super.engineering creates a worktree per task as well. +Superset has a free tier and paid plans, and its source uses Elastic License 2.0. Mobile, remote access, and automations require an eligible paid plan. It is not MIT- or Apache-licensed. -### Which alternative has mobile apps like Orca? +### Do these tools replace my coding-agent subscription? -None of these match Orca's shipped iOS and Android companions today; Superset's mobile app is on its roadmap. If mobile monitoring is a hard requirement, that is a real Orca advantage. +No. Account for the agent provider's subscription or API usage separately, along with any compute or hosting charges. diff --git a/apps/marketing/content/compare/superset-vs-conductor.mdx b/apps/marketing/content/compare/superset-vs-conductor.mdx index 1635724cad9..cdd41039b52 100644 --- a/apps/marketing/content/compare/superset-vs-conductor.mdx +++ b/apps/marketing/content/compare/superset-vs-conductor.mdx @@ -1,8 +1,8 @@ --- -title: "Superset vs Conductor (2026): Comparing AI Agent Orchestration Platforms" -description: "Compare Superset and Conductor for managing AI coding agents. See how these orchestration tools differ in agent support, workflow, and developer experience." +title: "Superset vs Conductor: local agents, cloud workspaces, and review" +description: "Compare Superset and Conductor for parallel coding agents, cloud workspaces, team collaboration, and iPhone access." date: 2026-02-02 -lastUpdated: 2026-07-13 +lastUpdated: 2026-09-22 type: "1v1" competitors: - conductor @@ -14,90 +14,50 @@ keywords: - conductor vs superset --- -Superset and Conductor both run multiple coding agents in parallel with Git worktrees. The difference is scope: Conductor is a focused macOS app for Claude Code, Codex, and Cursor, while Superset has grown into a broader local-first workspace for many agents, with chat, browser, and review surfaces around the orchestration core. - ---- +Superset and Conductor both organize parallel coding tasks into isolated workspaces. Conductor now includes cloud workspaces, shared team conversations, and an API. Superset lets you continue workspace terminals and review diffs from its iPhone app. ## At a Glance -| | **Superset** | **Conductor** | +| Requirement | Superset | Conductor | |---|---|---| -| **What it does** | Runs 100+ AI agents in parallel with Git worktree isolation | Runs Claude Code / Codex / Cursor agents in parallel with Git worktree isolation | -| **Agent support** | Any CLI agent (Claude Code, Codex, OpenCode, Cursor, Gemini, etc.) | Claude Code, Codex, and Cursor | -| **Repo model** | Uses your existing local repo and creates isolated worktrees per task | Clones your repo and creates isolated workspaces on your Mac | -| **Editor handoff** | VS Code, Cursor, JetBrains, Xcode | Cursor and VS Code handoff documented directly | -| **Workflow style** | Agent-agnostic workspace orchestration | Mac app centered on Claude Code / Codex / Cursor task flow | -| **Platform** | Local-first desktop app | macOS app | - ---- - -## What Is Superset? - -Superset is a local-first desktop workspace for AI coding agents. It launches Claude Code, Codex, OpenCode, Aider, Copilot, Cursor Agent, Gemini CLI, Superset Chat, and other agent workflows inside isolated Git worktrees with persistent terminal sessions. Around that core, it adds a built-in diff/file editor, chat panel, in-app browser for docs and dev servers, port management, and MCP tooling. You can review inside Superset or jump into VS Code, Cursor, Windsurf, JetBrains, or Xcode. Source-available under Elastic License 2.0 (ELv2). - ---- - -## What Is Conductor? - -Conductor is a macOS app from Melty Labs for running Claude Code, Codex, and Cursor agents in parallel. Its homepage positions it as a Mac app that runs those agents in isolated workspaces, then lets you review and merge changes and open pull requests. The docs emphasize workflow guides like issue-to-PR setup, provider configuration, and opening workspaces in Cursor or VS Code. - ---- +| Agents | Installed CLI coding agents | Claude Code, Codex, Cursor, OpenCode | +| Work location | Local workspaces and connected hosts | Local Mac workspaces and cloud sandboxes | +| Review | Workspace diffs and pull-request workflow | Diffs, checks, pull requests, merge and archive | +| Team access | Host membership and organization access | Shared cloud workspaces and conversations | +| Phone | Shipped iPhone app, iOS 26+, Pro | Coming soon | -## Key Differences +Conductor's [current introduction](https://www.conductor.build/docs) lists four agent harnesses and its review path. Its [Cloud documentation](https://www.conductor.build/docs/cloud) explains shared environments and isolated sandboxes. Its [iPhone app](https://www.conductor.build/) is listed as coming soon. -### Agent Flexibility +## Superset requirements -Superset is deliberately broad -- any process that runs in a shell can fit into its workflow, and the current product also layers chat, browser preview, and review tooling around those agents. Conductor supports Claude Code, Codex, and Cursor. If those are your primary agents, that focus can be a feature. If you want to mix in OpenCode, Gemini, custom scripts, or whatever launches next month, Superset gives you more room to adapt. +Superset runs CLI coding agents in separate workspaces, with terminals and diff review in one app. Desktop supports macOS and an experimental Linux AppImage. Windows is not yet available. Superset is source-available under Elastic License 2.0. -### Mac App Workflow vs Agent-Agnostic Terminal +To use [Superset on iPhone](/mobile), you need iOS 26 or later, Pro, and a host that stays online. Remote access and automations also require a paid plan. See [pricing](/pricing) and [remote access setup](https://docs.superset.sh/remote-access). -Conductor is purpose-built around its Mac app workflow: clone the repo, deploy Claude Code or Codex agents, review the work, then merge. Superset is broader and less tied to one agent pair. It now has its own chat, diff/file review, and browser surfaces, but it still keeps the orchestration layer independent from the underlying agents. That makes Conductor easier to grasp if you want one polished app for a narrow agent set, while Superset is better if you want flexibility. +## Try it in your repository -### Local Workspaces vs Existing Repo Worktrees +Run one of your usual tasks in each app with the same agent and model. Open the diff, ask for a correction, and run your project's checks. Compare how much setup and review each app takes. The [parallel-task guide](/blog/parallel-coding-agents-guide) has prompts you can use. -Conductor's current homepage says it clones your repo and works entirely on your Mac, then creates an isolated workspace for each agent. Superset typically starts from the repo you already have open and creates additional Git worktrees around that existing checkout. Both use worktrees; the difference is which local workflow they wrap around. +![Reviewing a change in Superset.](/images/readme/diff-viewer.png) -### Workflow Integration +## Which should you choose? -Conductor's docs lean into workflow guides: issue-to-PR, provider setup, migrating from Cursor, and opening workspaces in Cursor or VS Code. Superset integrates with more editors and broader CLI agent combinations, and it now includes more first-party surface area inside the app itself, but it still leaves more of the surrounding process up to you than a narrowly scoped product does. +Choose Superset if you want to answer an agent from your iPhone and review its changes while the task runs on your computer. Validate the setup with the [phone walkthrough](/blog/claude-code-codex-iphone). ---- - -## Pricing - -Superset offers a free tier and Pro at $20/seat/month. Conductor's current website is download-first and does not emphasize a separate public pricing page. In both cases, you still pay the underlying providers for Claude Code, Codex, or any compatible API usage. - ---- - -## Which Should You Choose? +Choose Conductor if its Mac app, supported harnesses, and managed cloud collaboration match your team's workflow. Its cloud offering deserves a direct trial if shared agent conversations are central to your process. -**Choose Superset if you:** - -- Use multiple CLI agents or want the freedom to adopt new ones instantly -- Want orchestration to stay separate from any one agent vendor or app -- Prefer reviewing code in your own editor stack (JetBrains, Xcode, VS Code, Cursor) -- Need a broader bring-your-own-agent model - -**Choose Conductor if you:** - -- Primarily use Claude Code, Codex, and Cursor and want a focused Mac app for them -- Want a polished issue-to-PR style workflow around those agents -- Prefer Conductor's workspace dashboard and documented Cursor/VS Code handoff - -**Verdict:** Conductor is strongest if your world already revolves around Claude Code, Codex, and Cursor on macOS. Superset is the better fit if you expect your agent mix to change, want the orchestration layer to stay editor-independent, or care more about breadth than a tightly scoped app workflow. - ---- +Compare the current [Superset plans](/pricing) and [Conductor pricing](https://www.conductor.build/pricing), including compute and agent-provider costs. Agent-provider usage is billed separately. ## Frequently Asked Questions -### Is Conductor Mac-only? +### Is Conductor only for local work? -Conductor currently markets itself as a Mac app. Its homepage language and download flow are Mac-focused, while Superset's compare story is about orchestrating CLI agents more broadly. +No. Conductor documents both local Mac workspaces and cloud sandboxes, including team collaboration. -### Can Conductor run agents other than Claude Code? +### Can Conductor run OpenCode? -Conductor supports Claude Code, Codex, and Cursor. If you want OpenCode, Gemini, or custom CLI tools in the same orchestrator, Superset is the more flexible choice. +Yes. Its current introduction lists OpenCode alongside Claude Code, Codex, and Cursor. -### Do both tools use Git worktrees? +### Does Superset require switching editors? -Yes. Both create isolated Git worktrees for each agent, giving every task its own branch and working directory. The underlying isolation mechanism is the same. +No. You can open a workspace directory in your editor while Superset manages its terminals and workspaces. Keep one owner for overlapping edits. diff --git a/apps/marketing/content/compare/superset-vs-emdash.mdx b/apps/marketing/content/compare/superset-vs-emdash.mdx index 255f0fbd008..915dba6feee 100644 --- a/apps/marketing/content/compare/superset-vs-emdash.mdx +++ b/apps/marketing/content/compare/superset-vs-emdash.mdx @@ -1,8 +1,8 @@ --- -title: "Superset vs Emdash (2026): Two Agentic Development Environments Compared" -description: "Compare Superset and Emdash for running AI coding agents in parallel Git worktrees. See how these agentic development environments differ in surfaces, automation, and team features." +title: "Superset vs Emdash: parallel tasks, remote hosts, and automation" +description: "Compare Superset and Emdash for parallel coding agents, scheduled tasks, remote development, desktop platforms, and licensing." date: 2026-08-07 -lastUpdated: 2026-08-07 +lastUpdated: 2026-09-22 type: "1v1" competitors: - emdash @@ -15,98 +15,50 @@ keywords: - worktree agent workspace --- -Superset and Emdash are two of the closest comparisons in the agent-orchestration space. Both are desktop apps that run many CLI coding agents in parallel, both isolate every task in its own Git worktree, and both wrap the core with diff review, an in-app browser, and scheduled automations. Emdash (YC W26) is open source under Apache-2.0 and leans into breadth -- 30+ agent providers and a dozen issue-tracker integrations. Superset leans into surfaces and teams: CLI, MCP server, TypeScript SDK, Slack bot, cloud workspaces, and an enterprise track. - ---- +Superset and Emdash both organize coding agents into worktrees, provide diff review, and schedule recurring tasks. Emdash supports macOS, Windows, and Linux under an Apache-2.0 license. Superset offers an iPhone app for continuing work on a connected host. ## At a Glance -| | **Superset** | **Emdash** | +| Requirement | Superset | Emdash | |---|---|---| -| **What it does** | Runs 100+ AI agents in parallel with Git worktree isolation, chat, review, and browser | Runs multiple coding agents in parallel, each task in its own branch and worktree | -| **Category** | Local-first agent workspace with remote/cloud hosts | Open-source agentic development environment (ADE) | -| **Agent support** | Any CLI agent (Claude Code, Codex, OpenCode, Cursor, Copilot, Gemini, Mistral Vibe, and more) | 30+ providers (Claude Code, Codex, Cursor, Copilot, Amp, Droid, OpenCode, Goose, Kimi, and more) | -| **Isolation** | Automatic Git worktree per task | Automatic Git worktree per task | -| **Issue trackers** | GitHub and Linear integrations | 12 integrations (Linear, GitHub, Jira, GitLab, Asana, Notion, Trello, and more) | -| **Remote** | Remote and cloud workspaces across your network devices | SSH remote projects and ephemeral remote tasks | -| **Automation** | Automations: scheduled agent sessions, TypeScript SDK, Slack bot | Scheduled (cron) automations with run history | -| **Surfaces** | Desktop app, CLI, MCP server | Desktop app (macOS, Windows, Linux) | -| **License** | Source-available (ELv2) | Open source (Apache-2.0) | - ---- - -## What Is Superset? - -Superset is a local-first desktop workspace for AI coding agents. It launches Claude Code, Codex, OpenCode, Cursor Agent, Copilot, Gemini CLI, Mistral Vibe, and other agent workflows inside isolated Git worktrees with persistent terminal sessions. Around that core, it adds a built-in diff/file editor, chat panel, in-app browser for docs and dev servers, port management, and MCP tooling. It also runs across your own network devices through remote and cloud workspaces, and it can schedule agent sessions as automations with a TypeScript SDK and a Slack bot. You can review inside Superset or jump into VS Code, Cursor, Windsurf, JetBrains, or Zed. Source-available under Elastic License 2.0 (ELv2). - -## What Is Emdash? - -Emdash is an open-source agentic development environment from General Action (YC W26). Each task gets its own Git branch and worktree, keeping the branch, terminal, conversation, and review state together, with tmux support for long-running sessions and terminal state that survives restarts. It auto-detects 30+ installed agent CLIs, pulls tasks in from a dozen issue trackers, and wraps the loop with a diff view (unified and split, staging, in-place edits, push-and-create-PR), CI-check monitoring, an in-app browser with isolated per-task profiles, a prompts/skills library, MCP-server management for agents, and cron-scheduled automations. It runs on macOS, Windows, and Linux, supports SSH remote projects and ephemeral per-task remote workspaces, and is free under Apache-2.0. - -## Key Differences - -### Overlap First, Honestly - -The core loop is nearly identical: pick a task, get a worktree, run your agent of choice, watch the diff, review, push a PR. Both have in-app browsers, both schedule recurring agent runs, both handle multiple GitHub accounts, and both persist sessions across restarts. Choosing between them is about the edges, not the center. - -### Breadth of Integrations vs Breadth of Surfaces +| Parallel tasks | Workspaces with separate branches and worktrees | Tasks with separate branches and worktrees | +| Desktop | macOS; experimental Linux; Windows unavailable | macOS, Windows, Linux | +| Scheduling | Pro automations on a selected host | Scheduled tasks with run history | +| Remote work | Connected hosts with membership controls | SSH projects and provisioned workspaces | +| Source license | Elastic License 2.0 | Apache-2.0 | -Emdash's edge is intake: 30+ agent providers auto-detected, and issues flowing in from Linear, GitHub, Jira, GitLab, Asana, Monday, Notion, Trello, Plane, Featurebase, Plain, and Forgejo. If your work arrives from many trackers and your team runs exotic agents, Emdash probably supports it today. Superset's edge is output surfaces: beyond the desktop app there is a CLI, an MCP server, a TypeScript SDK, and a Slack bot, so the same orchestration can be scripted, embedded in other tools, and driven from chat. Emdash has no CLI, SDK, or public API; its automation is what the app's UI offers. +Emdash's [documentation](https://emdash.com/docs) covers agent providers, issue intake, previews, and review. Its [automation reference](https://emdash.com/docs/automations) describes scheduled and manual runs. It also offers [cloud workspaces](https://emdash.com/cloud) and an [enterprise plan](https://emdash.com/enterprise). -### Automation Depth +## Superset requirements -Both schedule agent runs. Emdash's automations are cron-based with a clean run history and a convert-run-to-task flow. Superset's automations add programmatic control -- a TypeScript SDK for building agent pipelines, an MCP server so other agents can drive Superset, and Slack triggers -- which matters when scheduled runs need to compose into larger workflows rather than fire independently. +Superset runs CLI coding agents in separate workspaces, with terminals and diff review in one app. Desktop supports macOS and an experimental Linux AppImage. Windows is not yet available. Superset is source-available under Elastic License 2.0. -### Remote and Team +To use [Superset on iPhone](/mobile), you need iOS 26 or later, Pro, and a host that stays online. Remote access and automations also require a paid plan. See [pricing](/pricing) and [remote access setup](https://docs.superset.sh/remote-access). -Emdash covers remote work with SSH: persistent remote projects and ephemeral per-task remote workspaces provisioned by your own scripts. Superset's remote access and cloud workspaces put whole workspaces on your own devices and network, with the same UI local or remote. On teams, Emdash is a free single-player tool; Superset has unlimited-user Pro plans, Slack-based team workflows, and an enterprise tier with SSO and audit logs. +## Try it in your repository -### Licensing +Run one of your usual tasks in each app with the same agent and model. Open the diff, ask for a correction, and run your project's checks. Compare how much setup and review each app takes. The [parallel-task guide](/blog/parallel-coding-agents-guide) has prompts you can use. -Emdash is Apache-2.0, fully open source and free, with no paid tiers as of August 2026. Superset is source-available under ELv2 with free and paid plans. If a permissive OSS license is a hard requirement, Emdash has the cleaner answer; if you want a vendor with a support contract, that is Superset's model. +![Reviewing a change in Superset.](/images/readme/diff-viewer.png) ---- - -## Pricing - -Superset offers a free tier and Pro at $20/seat/month. Emdash is free and open source with no paid tiers. Both are bring-your-own-agent: you pay Anthropic, OpenAI, or other providers for the underlying agents either way. - ---- - -## Which Should You Choose? +## Which should you choose? -**Choose Superset if you:** +Choose Superset if you want to continue Claude Code or Codex sessions from your iPhone and review changes before returning to your desk. Try the [mobile walkthrough](/blog/claude-code-codex-iphone), then the [maintenance automation](/blog/scheduled-agent-maintenance). -- Want CLI, MCP server, SDK, and Slack surfaces around the same orchestration core -- Need automations that compose programmatically, not just fire on a schedule -- Want cloud workspaces and team/enterprise features (SSO, audit logs) -- Prefer a supported commercial product +Choose Emdash if its supported desktop platforms, Apache-2.0 license, or documented issue integrations are decisive. Test the particular provider and tracker you need instead of selecting by the largest advertised integration count. -**Choose Emdash if you:** - -- Want a free, Apache-2.0 open-source ADE -- Pull tasks from trackers like Jira, Asana, Notion, or Trello that Superset does not integrate -- Run niche agent CLIs that Emdash already auto-detects -- Only need the desktop app and are happy with cron automations - -**Verdict:** Emdash is one of the strongest open-source options in this category -- broad provider support, real diff review, an in-app browser, and scheduled automations, all free. Superset is the better fit when the desktop app is not enough: scriptable surfaces (CLI, MCP, SDK, Slack), cloud workspaces, and team features turn the same worktree-orchestration core into something a whole engineering org can standardize on. - ---- +Both products offer ways to inspect agent output. Use the same task and acceptance checks to decide which makes that review easier for your team. Emdash describes its core desktop app as free; cloud and enterprise are separate offerings whose current terms should be checked. Superset's paid feature requirements are listed on [pricing](/pricing). Agent-provider usage is separate. ## Frequently Asked Questions -### Do Superset and Emdash both use Git worktrees? - -Yes. Both create an isolated branch and worktree per task automatically. The isolation model is the same in practice; the differences are in surfaces, integrations, and team features. - -### Is Emdash open source? +### Can Emdash schedule recurring work? -Yes. Emdash is Apache-2.0 licensed and free, developed by General Action (YC W26). Superset is source-available under the Elastic License 2.0 with a free tier and paid plans. +Yes. Emdash documents scheduled tasks with run history and manual runs. Superset also supports automations. -### Which supports more agents? +### Does Emdash support remote development? -Emdash's docs list 30+ auto-detected providers, from Claude Code and Codex to Goose, Droid, and Kimi. Superset runs Claude Code, Codex, OpenCode, Cursor, Copilot, Gemini, Mistral Vibe, and any custom terminal agent. In practice both run the mainstream agents; Emdash enumerates a longer tail. +Yes. Its documentation covers SSH and provisioned remote workspaces, and it has a cloud offering. -### Can both schedule recurring agent runs? +### Is Superset open source under the same license? -Yes. Emdash has cron-scheduled automations with run history inside the app. Superset's automations add a TypeScript SDK, an MCP server, and a Slack bot, so scheduled sessions can be scripted and integrated into larger pipelines. +No. Superset is source-available under Elastic License 2.0. Emdash uses Apache-2.0. Read the licenses if redistribution or service hosting is part of your requirements. diff --git a/apps/marketing/content/compare/superset-vs-orca.mdx b/apps/marketing/content/compare/superset-vs-orca.mdx index 6b9bba63e16..3fa92960e0f 100644 --- a/apps/marketing/content/compare/superset-vs-orca.mdx +++ b/apps/marketing/content/compare/superset-vs-orca.mdx @@ -1,8 +1,8 @@ --- -title: "Superset vs Orca (2026): Comparing Worktree-Based Agent Workspaces" -description: "Compare Superset and Orca for running AI coding agents in parallel Git worktrees. See how these agent development environments differ in automation, remote workflows, and scope." +title: "Superset vs Orca: worktrees, mobile, and scheduled agents" +description: "Compare Superset and Orca for parallel coding agents, iPhone and Android access, scheduled tasks, desktop support, and pricing." date: 2026-07-13 -lastUpdated: 2026-08-07 +lastUpdated: 2026-09-22 type: "1v1" competitors: - orca @@ -15,94 +15,50 @@ keywords: - worktree agent workspace --- -Superset and Orca are unusually close in design. Both are desktop workspaces that run many AI coding agents in parallel, give each task its own Git worktree, and add diff review and an in-app browser around the orchestration core. The differences are not about the core idea -- they are about automation, surfaces, mobile, and how each product is built and licensed. - ---- +Superset and Orca both support parallel coding work, remote hosts, mobile access, and scheduled automations. Scheduling and a phone companion are shared capabilities. Choose by platform, license, host setup, and the review workflow you actually use. ## At a Glance -| | **Superset** | **Orca** | +| Requirement | Superset | Orca | |---|---|---| -| **What it does** | Runs 100+ AI agents in parallel with Git worktree isolation, chat, review, and browser | Runs a fleet of parallel agents with worktree isolation, per-task browser tabs, and design mode | -| **Category** | Local-first agent workspace with remote/cloud hosts | Open-source agent development environment (ADE) | -| **Agent support** | Any CLI agent (Claude Code, Codex, OpenCode, Cursor, Copilot, Gemini, Mistral Vibe, and more) | 25+ named agents, plus any CLI agent | -| **Isolation** | Automatic Git worktree per task | Automatic Git worktree per task | -| **Remote** | Remote and cloud workspaces across your network devices | SSH/remote worktrees on your own machines or a VPS | -| **Mobile** | Mobile app on the roadmap | iOS app (App Store) and Android APK companions | -| **Automation** | Automations: scheduled agent sessions, TypeScript SDK, Slack bot | Orca CLI and experimental agent-to-agent orchestration; no scheduling | -| **Platform** | Desktop (macOS now; Windows and Linux coming), CLI, MCP server | Desktop (macOS, Windows, Linux) + mobile companions + CLI | -| **License** | Source-available (ELv2) | Open source (MIT) | - ---- - -## What Is Superset? - -Superset is a local-first desktop workspace for AI coding agents. It launches Claude Code, Codex, OpenCode, Cursor Agent, Copilot, Gemini CLI, Mistral Vibe, and other agent workflows inside isolated Git worktrees with persistent terminal sessions. Around that core, it adds a built-in diff/file editor, chat panel, in-app browser for docs and dev servers, port management, and MCP tooling. It also runs across your own network devices through remote and cloud workspaces, and it can schedule agent sessions as automations with a TypeScript SDK and a Slack bot. You can review inside Superset or jump into VS Code, Cursor, Windsurf, JetBrains, or Zed. Source-available under Elastic License 2.0 (ELv2). - -## What Is Orca? - -Orca is a free, open-source "agent development environment" from Stably (YC-backed), and one of the most popular projects in the category at roughly 39,000 GitHub stars as of August 2026. It runs a fleet of coding agents in parallel, giving every task its own Git worktree, terminal, and browser tab, and its pitch is fan-out: one prompt across several agents, compare the results, merge the winner. Around that core it has grown quickly: Design Mode (click an element in the embedded browser and send its HTML/CSS and a screenshot into the agent prompt), diff annotation, GitHub, Linear, and Jira integration, WebGL-rendered split terminals, SSH/remote worktrees for running agents on a VPS, an Orca CLI, and experimental agent-to-agent orchestration with a coordinator inbox. It ships on macOS, Windows, and Linux with an iOS companion app and an Android APK, supports 25+ named agents plus any CLI agent, and is MIT licensed with near-daily releases. - -## Key Differences - -### Same Worktree Model, Overlapping Reach - -Both products make one Git worktree per task the default primitive, and as of mid-2026 both extend beyond a single desktop: Superset through remote access and cloud workspaces that put whole workspaces on any of your network devices, Orca through SSH/remote worktrees that run agents on another machine or a VPS with port forwarding and auto-reconnect. The practical difference is the workflow around it -- Superset treats a workspace on a remote host as the same first-class thing as a local one, while Orca's remote story centers on worktrees you reach over SSH, monitored from desktop or phone. +| Parallel work | Separate workspaces and Git worktrees | Worktrees with terminals and browser tools | +| Desktop | macOS; experimental Linux; Windows unavailable | macOS, Windows, Linux | +| Phone | iPhone, iOS 26+, Pro; Android waitlist | iOS and Android companion, documented as beta | +| Scheduling | Pro automations on a selected host | Scheduled automations through CLI and desktop | +| License | Source-available, Elastic License 2.0 | MIT | -### Automation and Scheduling +Orca's [product page](https://www.onorca.dev/) describes its worktree, browser, and CLI workflow. Its [automation docs](https://www.onorca.dev/docs/cli/automations) cover schedules, host selection, and run management. Its [mobile docs](https://www.onorca.dev/docs/mobile) describe pairing, status, terminal access, and source-control review. -Superset includes Automations: you can schedule agent sessions like cron jobs, drive them with a TypeScript SDK, and trigger or receive them through a Slack bot. That suits recurring or unattended work such as nightly dependency bumps, scheduled test runs, or triage. Orca has grown programmatic surfaces of its own -- a headless CLI and experimental agent-to-agent orchestration where a coordinator dispatches work to workers -- but it has no scheduler, so recurring runs still need external wiring. If you want agents on a schedule out of the box, Superset has more built in. +## Superset requirements -### Where Each Is Ahead +Superset runs CLI coding agents in separate workspaces, with terminals and diff review in one app. Desktop supports macOS and an experimental Linux AppImage. Windows is not yet available. Superset is source-available under Elastic License 2.0. -Orca's standouts: Design Mode is the best click-the-UI-tell-the-agent flow in the category, mobile companions are real shipped apps with live agent status and chat, and usage/rate-limit tracking across Claude and Codex accounts is genuinely handy. Superset's standouts: scheduled automations with an SDK, an MCP server so other tools and agents can drive the workspace, a Slack bot for team workflows, cloud workspaces, and an enterprise track (SSO, audit logs). Day to day the core loop feels similar; the edges serve different users -- Orca leans solo-developer breadth, Superset leans workflow depth and teams. +To use [Superset on iPhone](/mobile), you need iOS 26 or later, Pro, and a host that stays online. Remote access and automations also require a paid plan. See [pricing](/pricing) and [remote access setup](https://docs.superset.sh/remote-access). -### Licensing +## Try it in your repository -Orca is MIT licensed, which is maximally permissive. Superset is source-available under the Elastic License 2.0. For most individual developers and teams the practical experience is the same, but if a fully permissive open-source license is a hard requirement, that is a real distinction worth noting. +Run one of your usual tasks in each app with the same agent and model. Open the diff, ask for a correction, and run your project's checks. Compare how much setup and review each app takes. The [parallel-task guide](/blog/parallel-coding-agents-guide) has prompts you can use. ---- - -## Pricing - -Superset offers a free tier and Pro at $20/seat/month. Orca is free and open source, with a bring-your-own-subscription model. In both cases, you still pay the underlying providers for Claude Code, Codex, or any compatible API usage. - ---- - -## Which Should You Choose? +![Reviewing a change in Superset.](/images/readme/diff-viewer.png) -**Choose Superset if you:** +## Which should you choose? -- Need scheduled or unattended agent runs through automations and an SDK -- Want CLI and MCP server surfaces around the same orchestration -- Want cloud workspaces alongside remote ones -- Care about enterprise features like SSO and audit logs +Choose Superset if you want to send instructions to your coding agents and review their diffs from an iPhone, then continue in the same workspace on desktop. Follow the [phone walkthrough](/blog/claude-code-codex-iphone) and [scheduled-maintenance guide](/blog/scheduled-agent-maintenance) to test those requirements. -**Choose Orca if you:** +Orca is a strong candidate if Windows, Android, or an MIT license is a requirement. If both products meet your platform needs, try the same task in each and compare the review workflow. -- Want a free, MIT-licensed desktop ADE with a huge community -- Value the fan-out-and-compare workflow and Design Mode for UI work -- Want shipped mobile apps to monitor and chat with your fleet -- Prefer a fully permissive open-source license - -**Verdict:** Orca and Superset share the same foundation, and Orca has become the most popular open-source expression of it -- fast-moving, free, and excellent for solo developers, especially on UI-heavy work. Superset is the better fit if you want the orchestration to run on a schedule, expose CLI/MCP/SDK surfaces for larger workflows, and come with team and enterprise features behind it. - ---- +Both require an agent provider account or API access. Superset has free and paid plans; Orca describes its core app as free and open source. Check current terms and any optional services before comparing total cost. ## Frequently Asked Questions -### Do Superset and Orca both use Git worktrees? - -Yes. Both create an isolated Git worktree for each task, giving every agent its own branch and working directory. The isolation mechanism is the same; the products differ in automation, surfaces, and team features. - -### Is Orca open source? +### Does Orca support scheduled agents? -Yes. Orca is MIT licensed, free to use, and sits around 39,000 GitHub stars as of August 2026. Superset is source-available under the Elastic License 2.0 and offers a free tier plus paid Pro. +Yes. Orca documents scheduled automations. Superset also supports scheduled agent sessions; scheduling alone does not distinguish them. -### Can both run agents other than Claude Code? +### Does Superset have a mobile app? -Yes. Both are agent-agnostic. Orca lists 25+ named agents and runs any CLI agent, and Superset runs Claude Code, Codex, OpenCode, Cursor, Copilot, Gemini, Mistral Vibe, and custom terminal agents. +Yes. Superset's iPhone app is available. It requires iOS 26 or later, Pro, and a connected host. Android is on the waitlist. -### Which one works across multiple machines? +### Do worktrees prevent all conflicts? -Both, differently. Superset's remote and cloud workspaces move whole workspaces across your own network devices. Orca runs agents in SSH/remote worktrees on another machine or VPS, with iOS and Android companions for monitoring and chat. +No. They keep working copies separate. Combined changes still need review, conflict resolution when necessary, and tests. diff --git a/apps/marketing/public/videos/blog/phone-diff-review/demo.mp4 b/apps/marketing/public/videos/blog/phone-diff-review/demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..256ed75145eef5b6960dda1a982c9c61de016c53 GIT binary patch literal 115025 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 literal 0 HcmV?d00001 diff --git a/apps/marketing/public/videos/blog/phone-diff-review/poster.jpg b/apps/marketing/public/videos/blog/phone-diff-review/poster.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c770ed4fac2b421e5ac0b01d6ef38a96a9350611 GIT binary patch literal 20546 zcmeIad03j)+AmC+CT-IUwZ_ERR$GlRY6-!4*zGonQIwt7IDkVVi3Sk~&LV1e(#AMJ zjd31m6NRP%R%LKPYaFN}6%tTzh!V5}Cmc~64(YqkdH1`|d+qa`@B8QbqwBihS<`c` zwSMbf_j9j%-OsZ>y1xhb0CFP{VRzoCd+e-qW!)zdRDG|<=A(>F9UHa7m`6I0W(XRSaWxBYHFE#Ls)z@Y;N z0RI^d9ylMZH^Nce$Oc3`{#+Ra>=XMl# zIwA@2CCn`k54o!af#Zg=ny6ifj9WCCG8SPWL3Zkjf@}%Ks|7(-EKw|{)#J>p*C%w0 z%bOP}DXiTmJl52Zyn&DL1;tb-PSGMzG*xe-k;@M^dxiF#XNi(`If~*70t`>-V=m~$ z$ZBw6{NKH^VH4r3lGO*Ldq+*KZcruYN_I#ws`vR=bY1jT+DZ&Y)xMO`I`%TH04qsM z8fcpOiuD@HZ)A6>i~H*KC~SRhXv^-0??<6-KPaVkL%$h>pw@t?7)eMEJB`vX$3$Hj zIMpU3-EXVs$Jg~6fAR-D2MeY@x*Hi3{;y#5TU?0-!+|f4YhXO8fQOF2y2S#gizsan zNTy{J5%5m*LXdqW4_(jGOB9rep=W(CI@w}z4@OH$fqn&lL94q>3r8a>O|AZM$F*Bs z#fO@1aq<32DNbCZrfJzm^o-UgnlMA^4xeKWK?+%(75Sl8UCxW3_f0Lj0)H3m12$}T zEtva&mdiV|PU(DY5JO4zA>&O=Bhr6=Ef)J7_US#lcpiSrAk^$rg&_^b%k6gid)I_> z2D;-_Ixlfatf$c8f!*K6uSAvzr|<#dPmB+y5tfWn!q82$4A^L_N7`zL{)rzWo73oB z#$;asV*skh&9Pm*u$6IsBEy49UussnPTIk9H@PvA@z0WHrga9QtDcu#%757CW+#tQ z{p#XVi9!t*W-)k-OO3mb0OD=QrI|Z3vJ1Jwf#{+-Zy%rsUJIj}RjPR0=n@`*Kgm1O zrPrVMpcziepUC)nU>_h1gd>}%LW@(L?$Zf>L zB#3mYH3u23yBZ_Ei?CL>5p-q99&Nt+$-xzp0rYo-WRV;D+5)Nq+~>El7Kfiw-^fC3pJ)DQVf;- zi86g?N6x_8W5BS}$FUTri;7jM`iFSVKXcZhsf{Skvx$CEV?#K%iH5$N%aTG0^BfUX z1p|Q!%0S>UE?tl|vB?oOnK8Z^y;;HBnS5P>KE0+uW61DJWj7!2&CLa9oOfsa&2|Hk zxihS|S^@Wuunr<7mnhz6+l$+`NJppJH+IY&c>4U}l9h5{J%;k5O^nQ^SbTzMkeiZ} zAo(hL8(S990vknYfwNeJikOhdfhQdiu^UyQ)nNNjk8WG?tec)m5I6R+mt@zJgxRWA;Q1S)ovl=8?S#$+p-|rerY|A&zke->(mK zY*NZ-;gQp%V-|sNx5ksw+GBl1;Gc(K%N@GZmAc{{?Om_0Tr(E}b`Nf3>;r7~0kX@) zv*lINwu$M^dv2(kJ?uQ-weXf}7aqu~Jye$}Bfk9k4Vnk~mW%%ql}o-*^wB?qtBKp0 zbsoLcFbV+ZEDqFj$6Jd;sE24+L|?BUtf$%^EeNdQTv+}aTo)vh+#*NYvs_B%3T?ym z2UCA>C8wH8>UWc)YK(XLg#$G z#F6feCWh_g>;sMtSnLBvr`D=OdvcQ%c1rIbWT~lbS22pcW~sLna$Z)qZQz@4UrN*! ztTP`d9|XR1d$4$NiIam;UrL>IeSTT5!V$}*6c;bf@FPPIRIF4$uRFQ8E3!|S3`;0u z)X=m7X=XL3uy;khg4L>@5<@1XZs!7HBl_^k;RqdTWEtN)q3Sci0o(?9*pMckL1bSuntjzE+qSj@ZFsp}fzNM|bnd-kS zaoupi8jR~M5R?y#<_IIy6d}6$$K)hd4>7LX?e;*9F%+s(>!n$eN-2fV$ahjltxgTk zlA_&zo7w9>GclVzLuZ!FWK9RrBI^5bgWbIa?v4oY0u;4Nck(Mx?E|qiwB38O~kK4}wFwino)P}yDty0oZUVA0fOC2@P%ZfS2u)_1i>3x8Ddu-Ff zGOH>3M?!v^{N0tgc8sqzxkM>43U_(38!LPV{`_B9_J1W2z@OgBGx!MXv2$bCNdb02%5`(Nw-yVP5^dr}nS{5jW;Ni`;QCh_+IqkV0y zJa(6}Q9vo+m;bocAn*y4kk)cpFt>f65Zhx0Pas8YWfbm3MhGx^aUsC~J){#v?sPd< z&UY()M@!tYd+wL0rcnk;e+&E%5`Pf76(}4rjx*`jB}Omqvgg^ico2hJ*JmP@(<_m& z52|{Q%c&JTmW;w#(D=4_XMbtaS38V-fZ2uaNw$a%HMmrzHK(rttYUwcSl<`ej)wq$`7I31@`Pd*rP}JrmpW`a`0e`dp-aj$qNmG(8V*8^nBsIBih6mZTCw)o zJXYex%V z(_MtESXg}awMIMAh;iuNUxdcA4b1%dJ^(3sCt-Bb(mA-$O4E38gVTC}O{Gb%Xe1IFRoU5SE&Zf3izI*a&isNVo$?_(coW z?g_t*3A^L*hKr7=xF9Orke7`*cyopInQDejA=%RmS@U z|4PSZU@Xa1ft81=u%asiWr%66iGs1Wknw!Ygki*GZ&c=~&7T#vi7$-bthDY;$f}Io zY#6Rgd-}3=_lHUNypVgG%l?X`FU!gr-`NM?OeeQ!QajSSJMOjzm0S0|KKS#C5`KhB z`I&}2=d_Q$`Gd*-_|p?819pDgJ7<)|564sfmiFF8W6BsyJ%4>Fai_JdkzL*E6;Xjb zDMMRT!(7)Z(@`1ogb;enZcDr17)xalnXXHVi3@RcO}8u+1qnklCe_0+TTNuCjY~2O zay8q`#QH*3sc5FO68G~wM{0X>T!PIpc44us!udN4zCgRK3+S|VXhE_Mm?vuF11CT= z6OuN!0uL#UlJMfjH^#5BX!4MDE7%F$wPKkX;3lLF}O3i;L zstQ&B!Sc`+m4_K02aJYoEz+L7ev;c_@Px`BLC1 z^30LDh6Zrde{G*!vQyKLcN1IE!;H_$iAOIp{1ZfB?}>Vyl5I?uzLkEmh>|#`*%#=i zM_IVO)hP3a{hr$D{C>cCr(6;gC<<_gO+JlSAr#>ZbGE`z=Wkd#~&NWjUEeWYf zgy+#E8SH8Wp*&mRuy>suS{34yjQakpbGmFim7uQo-8|iugUxPA(k868N3GJ^8X)qt z3!=xt>hEFUMK z>^DXudKeYSr~l`8vtaf0HcGb z@bRsrDFkaQ$1wm?S8@jY(Y@u~x z_104AxP50)y)$fK#rF)=Bg4v*ZE#V#$xzU#tuazmnn>&>mDGZgC45yvwQvN5VAcV> zJ)psbqAq%liCR{)L5`kiWzSAXA7n4qU6~U+6KE}&SP~yjjio(VG_aX2&NxjEZf366 zCacc-XC#JS;G20$DPOy4&)dgME!me-gH~nZh#gJ?>Y*V0v@B2+As$Nc7_K*Ra`BqV zo{~Y8xKLYGYhF9Dedd}$ zlFfz#$vt}yJ3Q@doy7Pyv)}I@2mHQqe0l?Vi!o2CB+slCHPy??AtHVs4|!uiygO_FPpo~=%o*Px$acjzjzL==>zLQz7@dcQJGw=rIqC^sf$BqY(o>Dr42 zOoq^OM7w59PD|hiEM=%I8y3>&_JMJ)SYE>pRdGS&m^8O{ALO}6uT*`#aynjU?(*^$ zw8zBr!sTF1j}LHS8tX{@IS~a^q-^KFcYqDwo{f9&-04(Xw8|eAKOmnI?E}i;67h(- z)ZK$RtkM26+;0vo6<|{K{6pMl!}^t*(A;yfrQNxSDdx?E=BJQ##zj=w_OO?~xdqe; zf?O8kxPzzu0_ZmjdVsoF6~Ne$z?P|!wKocp{zv}_+CO5G5`^Rx^NAa>OUuX{IP4P{ zcFe3Zc9RN^ie!1sl?>^0k zU~iWD3qm5V&^dVX(`=ei7MBntdaq8&V>_Z`{Sj`;$45&RvRA$1OO%@)Pc_@89cl+8 z<6S>b;m5xFfEeeH#aXQcf}d9Eb7RAkljJ~eLo6bQHW0hH>`g94SVLy16~HrpNsK^)G{H3@k~+9GNNLB9S;4|= zy!oX2EDl*?PBAx+C;lcnAdFXv`pwf{#Y`p(ps5)rHts>*v~QF(@{7S$r~xwz0jSx zezRvTKYZ|C#_}fdUW2T!Yw zSz7Mf=rr)A-)~o>Gkx7*-{)T8D!!Di|MYJ6pBev`c>MA&6Z8Kn`F1mK>ST9lQT5=( z$JW}~V0K_tyTJIv2LNx~23S$sHGvnhe?+^ttqn|iS2U{iZ`ybZp01xxntAu@f7JOh zQG%PaEuIeT~zLamJ9ay5!_bJ-b7GHu9rDUcu#nSdobFPiJARBj! z<-(AG;2CEVa(Y`JkOV}-!~&~zaC>nz^gMbY(|83LliUD@60AV>*{a@pCGsO;s<>Vd ziJmk}9n^w6s!_(&YJpCR@|0q$5JVt<1UOzj!bXKS9a1vg_zP^`OqC zP+8^YHu7?u*CLiKlvh$Q=VMl14cyVP#e+J3CUdrcGj$Oe&yCHJ?Mvzs_|E~LadM)fTyJ|p0w^( zI;@NLV%RxIV7Y*a4zZZYs=llz@~y<<{Ss-j*7RT|@6=k7F6Q1R0$S}Ue)u{u9i%1b zJGF#ibP>O7;QQejmqdY&lnPv2cjA%cmkVSrS-rH8kyl zFkT?(sm-+E+9viDC(u~zp|Vx}_7K{x%(qar6LA1-^ZJHliW#%=RbOkhw6dd?utBML zC}ib3`GZwBIrT^9rGa6EyDa0kIFdJaIW^rjXX!OPx+O7G4q7TeYOPlJSGrXmcn7_p zVml-`=hl-xP23}`u$0_3NP^tDn>K#g0vc|9%}r}8Q6;V&<} zNYZ;s7_EJ{&duoYWb~ldemU#x_M&;}#!&g`;|^^pz6Hn!BCoZT)sf*T@utzh^R?s* z8`H=~a_Vr4M|@QyPIzU=Wy!aAS>Y=F6E(1EuG08nXf*W&C;7= zj9<%$MLz7XES0+BEzkCnipM0y-ZADEh#9_(^bRuqz~z4({~>t7IJ;czU%Kie4-#7H z(5&k2w_Iapkt&{k^sjaQDgB;#0u3<`Hk125^P*q!(l}e!(*3lB*2aFu%ai5NvFl~B zPB*2GEp&ulaO5vXy2EbWqgfTWayUL#p8J4Ar~XRKZg3KlB8=RA((m%aAEX9yx32U~ zUORdz7%j6fNbv;fVcCx=(6W!ZZ)vhM@q1du1}Xoj64~zy`lAG2Ep>Zy&z~6@Jf`Ax zIoV$Wegqu(+PHKh(r&;8hIaq>{wC{KPs8H*eZYAExP}(U4N@Vs1Yvsl!9SVGXQRg6d$Aj~=gA;QgT-&bU@C#JlkQL$^ z86$l}{UffA`cvSBOyeGGP z%q^ywX#JkYc!suX+hfz@rR$rLl^TV418s_Z`Dj5VHplhn-e$`{2E-$IC}O1MvFjQN zZ5J?kDfCoLno|#@*pnX#H9@=Fgw|AcV}*&5P9LGqt!qQ9E@GyU@LWC$%Mh{&Ch#kH z5glLDlWsBd=)w%p{Q@_7v#U$TAb;wtVp)}Nn$R0J;JF>X$=&m(H=sUgDt2z^qt>1r z^+1pz>fF?fYv3C6X(la9SVD~_)*QAjY>a3>J7p-$w_}Aw3bHTftqVd9S5?7~?UFEQ zg0p7y0e1bCnWCPuQe{t*7S!}C9*FA(tAP%)@_Q`d)WWH6hFg(75 zM!rz`cjGFUoVEG4Y7KDB&JiL^+4-RrY3bT|-g`B(SouESDZMOSDSvU1M>KYPK#rQt z%8Nk3MORi-GoL^2;2xZ=cpgScIX&#p}zT zli2Z+<>y`y3ruMHMY2v z)~m+|=Q<6$G&-l0t9V_auoIcr4NmnoZ^lc)#}OS4s#q)sWhV&Lhnb3b_uKW!sX-nH z_YFy)M-s5K-(AuEuo`9l6G3n*O^6B?0+(q^4}~JHOAZP;$&KW-II&>aJUXwO<^~Q0 z2cAd4x_uO70z!m1p~_C`Ud?3}T?GlIejR8gfV4!Cp|7G)Rw9nHQ`ZiA&nVn%R{sEz>qHo9V`p1 zpW;>Z{%y>@7{4HXyehmNr9=y!yb3SuwFFK4})oDKS-U1yqlzJue<3WzfDsK z*O=y$`aG{*@2JFf#b>$gVR}dc=}y+yEy%+PK_cp?D!(Qv9Mvju7*kttnmbUT2S< zmSn|al{6j9ZZ#yg*=9tRq0H+b3%aZnmh)8TqmrT4T<`!;U%HNX$$R)oRsqxoGj5h>7#6jn{C3w-5VABDilvtaa5DM_G(*4h)k1z6$KD`s*qZE8 zR5mjQpByu92kBHpdcyH&>th=O=3VwR1$piIlN!URH-7?!<2`!X8?|#l;EH=xF|F`uj_XqnrK@1Q?fX*a#KD@+9cAZF!BKZ`r-!8~9@H;hVMU zZ^vmhpRnvdCZyv%y-iX75pW8)thW;G1WBqiWw!U1e{Fy~q@@CS77-zRlYoJV8d{kUj<3?zS zCC1j+9|;I6uMEJ54SY6}(XJ5^A0`<;i=^`8MZD7UXj$~X@9-poT1Q4 zn4qk5F-HF&nzeis?3a;JKfbY(pA(mj4Mm-jf`U|$Q`4oy2)f~>=1@KgTaI9#nG573 zYzZgK-LB=-4H>n)mC>7iI&AYvQ#zTuSHs?W_MBIyu3!(O1EY(|;d$XqA-*;=-{cG` zr)lENu}SgbqIz&EErf0uRDV-*A}tSZ<9Z6&r3!8B*`I?v29qJ&k@NNon+_hmOfYL3 z-%US)7;2upIndOGSc|YN|1@5eEUykA`udUcDJ|*K8REcwfITsAZSQCaQ}hjF$I(oN zncN--dT#xC7nIx0v#KDkcbwo7uaA`@%j13?#evt&nSI)Uf}(;9&2ySDfDv&sn--8L zu4YSccT*Hdn`IGAPTY^Y0(WG)(T!LRS=4Eo0#r96L*r5`pIlk&4$y6;Pbeq?zpz3H zLmV;cE47)zSyLsO{8+EEF(z|4j1!?P$3)-N+FWvhZ6p}jB z9|8 zJxWWJrKFl{E!SV4_L_z}D03<^28vp2(w3e&4^f`D53bqmSOgNYt>#?aHfEy(2JT_g zW<|!6>tx1I;Iw^T-LzC2h)$dRIKmkOl7ieJIotIqkZzvsF{>z{bR!@Y(mgxi6K-KX zWo9pd?z<5#)dM>#-?oKvMb3;nEOBp z7KP{|lv;UT@}$>Cb%#xtU(P+ph21EAucKtAd4>BZfZMP7VLp6614_nQ0mwR0T z7f>Dw?V5C(N}S3*N#nhxv2f0z_W}EW*q>)3CL$uzOG~kJwX5zR8F0H{ZO?4RWd^t9 z>hx$m_5Mcw?K+z=Sofe@3zTD+K)UsgvBWlJK|M7n#KPTch(^}HegQnT+`~iVk@{n* z>o__CM2pyCO{x%e-$VPxMI}#{$v@h z^o~G49lY#VGZSGJVit1JTRI*c7f^}Lu{LKvAn9&q{mzGGV|%@ZqbAoxGue_nvYQ{! zDQ!5lsn@PVjJIcB)~}!>S4z22VXnQSKcnMf>LI8J2c(wz(F0kTyRUDa&*Z9Ie`Et3-&3^|`r&YeIo*#FxEWn+aud9iVVA za_Jm)0eM;&V^Q+V367c20x}b2**33|_gSBBK z)u+xid}L{WUI$Jpe5~2(uL$GS`L8vnu51Y2U4sAP*Zkf2**3%5^l?oVORlN&()@|R@kpGc^6B(!<>XZBMQ z-{KGyS(3g{M{)OOrrFZfd(YQg>RSjeI6FcY2Mj2a;Dq23l%W~fFDN1A8OPhNk>@10 z7U9-;tPwreqkfszDgG9QJxm!o;sTW$;*THX1!>mXmy%bby{@2_yi|<=fOzhjwebsv zPvp`!tGSHICSfCeQ?PcK;-D~C;h6Qeh*t;7jRl{&gbfJdsr)v zl}=vW2eiA-Kh;ZfA1MLKJz>#+^47i1AnE(!gr5dr)sOG6BPfWjGc3zM) zwy7Sz`dZeRa~!804z?GN)N5rt{z`sZdbZ1sio#uMc_B8ZJRGxtX5`6NuNqrSy6!H{=up!u@72&B)M0 zMivixK*xaJboaJ+401z)Ln^D{B}p+Y880b&*G`pFl~te*1!tN{q8C;!8ICq+blpC0 z2)_1qDK26ol^!y&GQXit>oqJ||7@0ijMD-QoO?Jzg|+XrtflzXqdbt>Ky9i1Fez3g zgP}G8&N=$X1=q(I9dYfONd7VO-yUW{0@F4_H|+1ZRm`lHc&M>m=7r zZ5uNYPKCcCV=>!9uV*7FLTpc$RuveBD&jiU7h5OXpYfKz?V!rZjg%se+pJ~9N3ItM->8mJd>q1#|W#}n5})+WrP(Rmck~Ed7eG}O zdS#MXTZ#X1C#iXD;dd^Z<*|U%A03E2II=gi6dvb?3~4{&G0k&~RmzIb^;iRGl;!St zdDy23l3EA!S-EllkL23V_GRn;-lcaFO{3|n^C9!n5W z9^L~2`8cPtrX%z7cf!l0yrzm2w3Z9P7iY3|X+mSqJ{i!SC}fA>0e zo;mz6eo!joF~s(6#B8mt}{!_ia^)k#tTdum`j9ai_@*3p&C_gDo9&CM=uZA z^4}cs)%kVoEAmmt)kvn(c0zvC&^0vzIEw=MHN2}tMtvPF@KRQZW5&nXxSFLc8uYS%L+lvB0pK8txd&m(^ z$hwg92a44b-p&tdOIx01Nis|ho%=FYDi&o@sx}F*u;Abbv-Mj2^=&6B$L0AaC}!!< z!+JM*aW1fbA8>ll>GdF!?xA}~g6&D(!!b)L(t$xETU>ci<~U#Fu#Q->`ttG0(Z79k%~C?sfd z9jo0dj?mFEavJP>*>zHiQCvivvW1=Z!TH2fd+Y0bixe}$f%;Bo)S}(kLKzTNU&Q7< z8yR?}6edu4P>_H}7D};A49Cq25PA}}kV}s@>UPCFoD^+E$vz~ib(~QwC968g#umL>)I>$Iw2QW+;9dQNTDt+46xao}kyU8fFfDD^l@{K}9>TXM z`fZ8di28Am?$-mk-C+uPmG=tgr1H)%7j?HJ1Jv9{*s2$OauFCuLt&2l^@B;SC)*sB z;nuaq_7s969(#o$xgxJgAT+KnL#7|a?{M2&%pO6*62GHIjNPc@Y#Kz127(i5u>t1p zzUy-;v{8ilr$w%WBWUI9M2vN&P{gNUSF3byknZxA$Z~4ccmxw zT0|qb5=>p8?rIyGL0VI$PZxnq&OF2=39X)O^8yJVD!1ZNS--^(+yrs@^93~_PX1CN zFuo#1hmUxB^p>GqBge=*8+3+8o&GwOgit&2IeaJCYEli^=y5^3mhC(uK#drnU zOi&`bnz@Yfm`G!vsaoBqa)n|2FiEF5K5HB7;UQ~?Kq8MUt|D>{9}QZbt$5zWae7oYaS7b<4s?4Ddc?AvC!8QoH`3b#Dw~=b5ARjrc^o zLCVw&d1iy|HAh3`2y*zV+SNS^b_8G@^u4GgL%2)Id7NWI=pJqB+9<*ZrO*4eSrTGV z9Zz^51>-Q6t&v~cf{DdSs>D+mpH*qt5`g!s!b{7<~;8>@h*qS z46k<^k)9<+^gxF(8jnmkKQU#dIl{cYx+mQ-OQD~-`#$2E!ESU0>6wMKFtDjHakp*3 zwpqN0F8fSeH~^nnn{`x$l1?f@@Y~IqH}1CLV(e3v?l(t_WS1znOKo*3%~$n>ruD8a zGQ&vmCcoXU4|8NTMuLmEbA$V^8Pz=Pa9$41@n59`Rx!(X-d}_W1vl;qxgnGA$Q~-T z!Vo+8qSBnnc4XkmHwNAk-wzSSTmGf8JcVl!EyillJMjWGR4F!64Lg-_aK>L1k%=b*y6srN5cz4s+M z)ur63*QKZjS=PhsdDv`4$(*4Mq6D4LiZQ#@;3nFIKJSaQx0TdxRhM!6Zq)AbJ+R^e zDZ71g`I7Q+05y#=l|H~o&#;}q1@P=N4vuZk!uv9>9;)Ii3$qU{ZPo zbJn3(=iWK9n(225>jd#y=M^V4choX@P+z5XFNV-ah*!WbZmZPP^s93wDKz}_al%yM zo!lp|epXqf%X+|5Xh2+n`P>CqQ~SAM+7tK?-ip{2L^_7(v{|)I&2tB7pX?(}w>z@) zz$&y4K7N^Tna>6j9n?dJVK=24TTlch$AJom8{M?iLluqYLP=#2SHN_<7>l>#AeV>s z0VjPJgeti^IPpA%IeMerQxOu;s12OcI?q18$O#Sv$^+L>x3fgtLMAd+L%UZn zm5a(ng|wFM18R_Az@J`AUhZVlimjCpTmae4o<{j(@wn}H71-0S(iweshTVteH=c9x_CcYI7e`V9Kmry`u@5t_*8nOCE}k`HXib*YS?Ta4?+g@`$PM zzVJ^giw9x{o2&P)q8=f#I^+7RB$BswNiA2 z&!XANVtw8FqBl?WMd3~_?Ao2koq6=^xO*XP z*m1xSEEgHB6J7md>NRsuP5GsxjvmL|X|t7!nc4e*Z!xUN!hwe@Ci3--K7uup-$pY6 zlWw`&O{!BKbi7xZm;Sy`xhcH$wBO~W(B);^3PCFm4FcK=*~G?A$HeSYc^Z$59P2v~ zoTqqyMz{Ys4pu?qn)Gl=Rt_z_j(vt+R;%kfsh?`&I|gpIUVM*Z zi65=i-4a^`F)?+>WS&Q4rSO6z!~aZB(Y zX`q>-fKDhoVWYHq9{|g0o%CH?FU>~KEKhO?9rqs*Z;PlqGU%JeFr=g)DIY9>HZDJ4W`#ntM#@CPI)t^YH|7ezwVrq-^xfUfoC)lLMJjqYx&$O$$E}u!=Ib%5 zTH;g~ZRwN9mOE>o4a3m#R#^=89-)fFn6#v&pk6W7i4JeX!i#mc((KaK$r!i92^Y=5 z<3)92-m8FPv64sKMlfnu`MISpkhF(Z@1n`v7p;TAEuhX3HJ!>$DG4Qtf!6k^b;lv!@ni)^xH#i}F~5MLhFZKKH)FQMU~+=Q3#l5o%Y?ze+Zo8_Fu5K@`$QO`v7Rh z{L>WkA`ZE5I;g5pRFp5Hs=k*Q-_b}(ec5=${&3D1|$DKBURk zb3V1jr?x*SFv5x&TcUXfOF42UAR#kuY%_)SFu#dqn0($Jt%Vvk*l{!k3lpllp}(zK zBZiNm=8j35LroMK8^vp1`z@v-8Z=?&e5O;gqQvZ;0;3g;Q>;((CC@pac9^S+zR{eG z^G(S#7xyZUHDzoN%0Z!e8)HCATJ#(gY^(E)5b%#{ssxujC{>;1>`vegb8Vb>;lee7 zp1t8Z)y*MVM6=2;`mFL0YfjqJ+C zf_kviJmQIDItu0xkYrbWIZ*l<8d~+Mx@cGxdvl0)7?N^+Dz9F~O(|gvb}O@FMlRET zd9%_q>>TMB4Dnw@`FBKxN-Ennqv4QN)J(ZlA~+r#&<9DZmWpN`v~~NSjS}v6L{rg8 z&f`gaIT{;Y==CyUA*`yt5Vg=?<+U8#YUS@78A}z{+wFAd zmgYr53h4P#Cw$?KbERD!6dn34-Lu7gzqVWVscl&ILOA zfHFRQz5=s~Do@#xEGDW}7wf}5K|WI!6$FFqmYH%xlv8i}wv9_WlO-u#Bo%b5P(}ve zH!3!U)NPR`6}NZMH)h4$3VqSAw$V^zN_(SB`U7|RJMJ4U((qS!OU1z-zW<-zD1To6 zMBq;Z{zTwU1pY+ePXzu%;7SC zZgJE-UCq}I?B%GRTJF%0+mUk8>H(xkrZufKebl&5;?}>A+Hp%VOQYS3!vt(qqP>w1 zN3?J$NMkTRy^t+#ADC*w*p~;FXNOl(beZ+s+EeAw#bKsgP}jlwdR4h-qD~7_sxv+} zQJ&asuT$-Id{0z;z5LJlr!vGR8r^?ho*pnDg`U4zhICLtpvJI0E0ocJxx_l#n(7~! z4Weh0>F%E3|LZ}%-6Snkm^gfCo={41ysi1%#}#M|>-{3<#l7+)(LmYS&w}D@_xqbU zFfg@M#-rWpCu{d|xhNET-Dsa9hqmV^dH zJH}3z=9z0=+22X4Z2&QvWfZR0z{ z?oml6loL~HTN#Y^N$QS`f}P`v?c{wx_Twa*u?ahH&F1K;KdY2x@#$7?3#uCL&yPp$ zJzq4Dwsy!@G@qQPEl+A5m+Ljo4(TkfpAX$mGbG0!E;lS7yRT5TpX@$0b@a`15#>lI z(}euJ4F0h@|NB_~4>^ezmjM|6@%BgAaS_cKFz}Z8-dBjz)q5KxNJeQ9V;8q8+y{Ji z^l@X%ch6!GL?L@;bRXah+oB~4mNj3h5Y4{V@ajQUjYXJ{P3m_G>v{ZtXz%}b#V7X1 F{s)Yc_X+?2 literal 0 HcmV?d00001 From 9594422ab8934ffb014fed25b9d20777fc76d5bf Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Wed, 23 Sep 2026 08:55:30 -0700 Subject: [PATCH 2/3] docs(marketing): polish blog copy and keep selected guides unlisted --- .../agent-orchestration-not-another-agent.mdx | 120 +++--------- .../content/blog/claude-code-codex-iphone.mdx | 1 + .../blog/git-worktrees-history-deep-dive.mdx | 54 +++--- .../marketing/content/blog/how-to-get-hit.mdx | 18 +- .../blog/parallel-coding-agents-guide.mdx | 1 + .../content/blog/roadmap-to-100-agents.mdx | 30 ++- .../blog/scheduled-agent-maintenance.mdx | 1 + .../content/blog/superset-mobile.mdx | 15 +- .../switching-between-ai-coding-agents.mdx | 22 +-- .../blog/terminal-daemon-deep-dive.mdx | 38 ++-- .../content/blog/the-production-run.mdx | 18 +- .../working-with-worktrees-in-superset.mdx | 177 ++++-------------- apps/marketing/src/app/[lang]/blog/page.tsx | 4 +- apps/marketing/src/app/feed.xml/route.ts | 4 +- apps/marketing/src/lib/blog-utils.ts | 1 + apps/marketing/src/lib/blog.test.ts | 42 +++++ apps/marketing/src/lib/blog.ts | 9 +- 17 files changed, 211 insertions(+), 344 deletions(-) create mode 100644 apps/marketing/src/lib/blog.test.ts diff --git a/apps/marketing/content/blog/agent-orchestration-not-another-agent.mdx b/apps/marketing/content/blog/agent-orchestration-not-another-agent.mdx index fdce53e5799..83385d34d5f 100644 --- a/apps/marketing/content/blog/agent-orchestration-not-another-agent.mdx +++ b/apps/marketing/content/blog/agent-orchestration-not-another-agent.mdx @@ -1,6 +1,6 @@ --- -title: "You Don't Need Another AI Coding Agent: You Need an Orchestrator" -description: "The AI coding tools landscape is flooded with agents. The real bottleneck isn't agent quality. It's managing multiple agents at scale. Here's why orchestration is the missing layer." +title: "Managing Several Coding Agents at Once" +description: "Give coding agents separate workspaces, keep track of blocked tasks, and review changes while other agents keep working." author: satya date: 2026-02-18 category: Product @@ -10,118 +10,50 @@ relatedSlugs: - working-with-worktrees-in-superset --- -Every month, a new AI coding agent launches. Claude Code. Codex. Aider. OpenCode. Cursor's agent mode. Windsurf's Cascade. Devin. The list keeps growing. Each promises to be smarter, faster, more capable than the last. +One coding agent is easy to follow. With several running at once, you need to know which task each one owns, which agent needs an answer, and which changes are ready to review. -The agents are already good enough. Claude Code can refactor a module. Codex can write a test suite. Aider can iterate on a bugfix. The quality difference between top-tier agents is shrinking. What's not getting better is the workflow around them. +That's the problem we built Superset to help with. It runs the agents you already use in separate workspaces and gives you a place to manage their output. -The real bottleneck isn't agent quality. It's agent quantity. +## Start with independent tasks ---- - -## The Single-Agent Ceiling - -Most developers use AI coding agents the same way: - -1. Open terminal -2. Describe a task -3. Watch the agent work -4. Review the output -5. Give feedback or merge -6. Repeat - -This is sequential. One task at a time. The agent might take 5 minutes. Your review might take 10. That's one task per 15 minutes, four tasks per hour. For an individual developer, that's a solid productivity boost. - -But your codebase has 50 parallelizable tasks right now. Writing tests for untested modules. Refactoring deprecated patterns. Updating stale documentation. Migrating config formats. Fixing lint warnings. Each task is independent. None requires the output of another. - -Running them one at a time means 50 tasks at 15 minutes each: over 12 hours. Running 5 in parallel: under 3 hours. Running 10 in parallel: under 2 hours. The math is straightforward. The orchestration is the hard part. - ---- +A test for an existing helper, a documentation correction, and a small UI change can often run separately. An API rewrite and tests that depend on that rewrite need an order. -## Why Orchestration Is Hard +Parallel work helps when one task can progress while you're reviewing another. More agents also create more output to check. Add tasks at a pace you can review, and watch for shared dependencies that make them less independent than they look. -### Isolation +The [parallel coding guide](/blog/parallel-coding-agents-guide) walks through three tasks, with prompts and review steps. -Two agents in the same directory destroy each other's work. You need filesystem-level isolation: each agent in its own working directory with its own branch. Git worktrees solve this elegantly, but setting them up manually for every task is tedious. +## Give each task its own workspace -### Session Management +Agents editing the same working directory can overwrite each other's changes or mix them in the staging area. A Git worktree gives each task a separate checkout and index while sharing the repository's history. -Agents crash. Terminals close. Laptops go to sleep. If your agent's session dies, you lose the context and have to restart. For a single agent, this is annoying. For 10 agents, it's unmanageable. +In Superset, create a workspace and branch for each independent task. The agent works there while you keep using your main checkout. When it's ready, review its diff before merging. -### Review +Worktrees separate files. They don't isolate ports, databases, credentials, or machine resources. Two branches can also make incompatible changes, so test the combined result after merging. -The review workflow matters more with parallel agents, not less. You need to see what each agent changed, verify it against the task description, and decide whether to merge or iterate. Without a unified view across all tasks, you're tab-switching between terminals. +## Keep sessions separate from the app window -### Task Allocation - -Not every task suits every agent. Claude Code handles complex refactors better than Codex. Codex is faster for well-defined tasks. Aider excels at iterative changes. An orchestrator lets you match agents to tasks instead of using one agent for everything. - ---- - -## Orchestration vs More Agents - -The AI coding industry is betting heavily on better agents. Smarter models, larger context windows, better tool use. These improvements are real and valuable. - -But consider: a 20% improvement in agent quality (smarter code, fewer bugs) improves throughput by 20%. Running 5 agents in parallel instead of 1 improves throughput by 5x. The orchestration layer has more leverage than the agent layer. - -This isn't an argument against better agents. It's an argument that the orchestration layer deserves equal attention. The best coding agent in the world, run one at a time, is slower than a good agent run ten at a time. - ---- +Closing the interface shouldn't end the work running inside it. Superset's terminal daemon owns terminal sessions separately from the desktop UI, so you can reconnect after an app restart. -## What Good Orchestration Looks Like +The host and daemon still need to be running. A machine reboot stops the processes; saved terminal history helps you recover context, but it doesn't keep an agent executing through a reboot. The [terminal daemon deep dive](/blog/terminal-daemon-deep-dive) explains the design. -![A workspace board triaging a fleet of coding agents by status: working, needs attention, needs review, and merged](/changelog/2026-08-16-workspaces-board.png) +## See what needs your attention -### Automatic Isolation +![Superset's workspace board showing tasks that are working, need attention, or are ready for review.](/changelog/2026-08-16-workspaces-board.png) -Creating a task should automatically create a Git worktree and branch. No manual setup, no remembering to checkout a new branch, no worrying about file conflicts. The orchestrator handles this transparently. +A useful workspace view tells you where to act next. Answer the agent waiting for a decision, then review a completed task while the others keep running. -### Session Persistence +For each change, check what the agent edited and whether it ran the right tests. Open the workspace in your editor when you need more context. A short diff can still change important behavior. -Agent sessions should survive crashes, app restarts, and laptop sleep cycles. A background daemon that owns the sessions independently of the UI solves this: the same pattern that tmux uses for terminal multiplexing, applied to agent orchestration. +## Choose agents without rebuilding your workflow -### Agent Agnosticism +Use the agent and model that work for your repository. Keep the task description and acceptance checks consistent when trying another tool so you can compare the results. -Lock-in to a single agent is a strategic mistake. The AI landscape moves fast. Today's best agent might be tomorrow's second-best. An orchestrator should run any CLI-based agent: Claude Code, Codex, Aider, OpenCode, or whatever ships next week. +Superset runs CLI agents in workspace terminals. You can use Claude Code for one task and Codex for another, then review both through the same workspace workflow. Your editor stays part of the process: open the worktree in VS Code, Cursor, JetBrains, Xcode, or the editor you prefer. -### Unified Review +## Start with two tasks -All active tasks, their status, and their diffs should be visible in one place. When a task completes, the review workflow should be fast: see the diff, open in your editor if needed, merge or give feedback. Seconds per review, not minutes. +Give each agent a clear scope and a check it must run. When one finishes, review it while the other continues. If the review queue grows faster than you can clear it, start fewer tasks or make them smaller. -### Editor Integration - -Developers have strong editor preferences. The orchestrator shouldn't force an editor choice. It should integrate with whatever you use (VS Code, Cursor, JetBrains, Xcode, Neovim) and let you open any worktree in your preferred environment. - ---- - -## Building This at Superset - -We built [Superset](https://superset.sh) because we hit this ceiling ourselves. We were running Claude Code for everything, and it was great for individual tasks. But scaling to 5-7 agents manually was operational overhead that distracted from the actual work. - -The architecture is intentionally simple: - -- **Git worktrees** for isolation (no containers, no VMs) -- **Persistent daemon** for session management (Unix domain sockets, survives crashes) -- **Any CLI agent** as a first-class citizen (no SDK integrations to maintain) -- **Built-in diff viewer** for fast review -- **Editor integration** for deep inspection (VS Code, Cursor, JetBrains, Xcode) - -The orchestrator doesn't make agents smarter. It makes using agents at scale practical. That's the missing layer in most developers' AI workflows: not a better agent, but a better way to run the agents they already have. - ---- - -## The Compound Effect - -Running parallel agents has a compound effect on productivity: - -1. **More tasks completed per day**: 5x agents means 5x throughput (minus review overhead) -2. **Faster iteration**: while one agent iterates on feedback, others are working on new tasks -3. **Better agent matching**: use the right agent for each task instead of one-size-fits-all -4. **Reduced context switching**: tasks run to completion in isolation instead of being stashed and resumed - -The developers we work with who've adopted parallel agent workflows don't go back to single-agent work. The throughput difference is too large. The question shifts from "which agent should I use?" to "how many agents can I actually manage?" - -That's the right question. And the answer is: as many as your orchestrator supports and your review speed allows. - ---- +The point is to finish useful work with less waiting. The number of open terminals is only part of that. -**Related:** [Best Agentic IDE in 2026](/compare/best-agentic-ide) · [Best AI Coding Tools and Agents (2026)](/compare/best-ai-coding-agents-2026) · [Best Conductor Alternatives](/compare/conductor-alternative) +**Related:** [Working with Git Worktrees in Superset](/blog/working-with-worktrees-in-superset) · [Best Agentic IDE in 2026](/compare/best-agentic-ide) diff --git a/apps/marketing/content/blog/claude-code-codex-iphone.mdx b/apps/marketing/content/blog/claude-code-codex-iphone.mdx index 5d7776bcab3..0db79c2de35 100644 --- a/apps/marketing/content/blog/claude-code-codex-iphone.mdx +++ b/apps/marketing/content/blog/claude-code-codex-iphone.mdx @@ -3,6 +3,7 @@ title: "Manage Claude Code and Codex from your iPhone" description: "Connect an iPhone to your Superset workspaces, unblock Claude Code or Codex, and inspect changes. Includes Pro requirements, host setup, and offline troubleshooting." author: kiet date: 2026-09-22 +unlisted: true category: Engineering image: /images/blog/superset-mobile/diffs.png relatedSlugs: diff --git a/apps/marketing/content/blog/git-worktrees-history-deep-dive.mdx b/apps/marketing/content/blog/git-worktrees-history-deep-dive.mdx index bab002cb37e..df95bb0efc2 100644 --- a/apps/marketing/content/blog/git-worktrees-history-deep-dive.mdx +++ b/apps/marketing/content/blog/git-worktrees-history-deep-dive.mdx @@ -9,11 +9,11 @@ relatedSlugs: - how-to-get-hit --- -Git worktrees have been around since 2015. For most of that time, they were a curiosity: something kernel developers used, something that showed up in obscure Stack Overflow answers, something most developers had never heard of. +Git worktrees let you check out several branches of one repository in separate directories. Git added them in 2015; running coding agents in parallel gives developers another reason to use them. -Now they're having a moment. AI coding agents need isolated environments. Developers are working on multiple features simultaneously. Code review culture demands quick context switches. The workflows that make worktrees valuable finally caught up to the feature. +An agent can edit its own checkout while you review a PR or work on another branch. To understand the benefits and limits of that setup, it helps to know what Git shares between worktrees. -This is the story of how worktrees came to be, how they actually work under the hood, and why they suddenly matter. +Here is how worktrees developed, how they store files, and how to use them. --- @@ -35,7 +35,7 @@ git stash pop # wait, where was I? ``` -The friction isn't just the commands. It's the mental overhead. Your editor reloads files. Your language server re-indexes. Your node_modules might need reinstalling. Your brain has to context-switch twice. +Switching also disrupts your environment. Your editor reloads files. Your language server re-indexes. Your node_modules might need reinstalling. Your brain has to context-switch twice. For years, developers worked around this with various hacks: @@ -71,11 +71,9 @@ The git community wanted something better. Git 2.5, released on July 29, 2015, introduced `git worktree` as a first-class feature. The primary author was Nguyễn Thái Ngọc Duy, who had been working on the concept for years. -The [GitHub blog announcement](https://github.blog/open-source/git/git-2-5-including-multiple-worktrees-and-triangular-workflows/) described the new capability: +The [GitHub announcement](https://github.blog/open-source/git/git-2-5-including-multiple-worktrees-and-triangular-workflows/) explained the key change: each linked working tree gets its own checkout while referring back to the main repository for shared history. -> "Each *linked working tree* is a pseudo-repository with its own checked-out working copy. Its `.git` is actually a file that refers to the history and references from the main repository." - -Notably, the feature shipped with a warning: it was labeled **experimental**, with caveats about potential bugs and a recommendation against using it with submodules. A decade later, these rough edges have been smoothed out. +The feature shipped with an experimental label and warnings about submodules. Submodule support remains incomplete in the [Git worktree documentation](https://git-scm.com/docs/git-worktree); check those limits before using multiple checkouts of a superproject. The initial commit message laid out the vision: @@ -92,7 +90,7 @@ These don't have to live in the same place. Worktrees formalized this separation When you create a worktree, git does the following: ```bash -git worktree add ../feature-branch feature-branch +git worktree add -b feature-branch ../feature-branch ``` 1. **Creates a new directory** at the path you specified @@ -247,11 +245,11 @@ Each interruption previously meant stash/switch/pop. With worktrees, you open a ### 2. CI/CD and Local Testing -Complex projects often need you to test against different branches. Does this PR break when merged with that other PR? With worktrees, you can have both checked out and test interactions without rebasing. +Worktrees let you build and test branches independently. To check whether two PRs work together, you still need to combine their changes on a test branch and run the relevant checks. ### 3. Monorepo Workflows -Large monorepos make cloning expensive. If your repo is 10GB, cloning it twice for parallel work wastes 10GB. Worktrees share the object store, so each additional worktree only costs the size of the working files. +Large monorepos make cloning expensive. If your repo is 10GB, cloning it twice for parallel work wastes 10GB. Worktrees share the object store, but each checkout still needs its own working files and may need dependencies and build artifacts. ### 4. AI Coding Agents @@ -262,7 +260,7 @@ When an AI agent modifies code, it needs somewhere to work. If it works in your - You can't easily diff agent changes vs your changes - Agent experiments pollute your working tree -Worktrees solve this elegantly: +Give the agent a separate checkout: ``` ~/project/ # You work here @@ -273,11 +271,11 @@ The agent can: - Make changes freely - Commit to its own branch - Run builds and tests -- Iterate without affecting you +- Iterate without changing files in your checkout When it's done, you review the diff and merge. It's the same workflow as reviewing a coworker's PR, but the coworker is an AI and works in a worktree instead of a fork. -This pattern (parallel human + AI work on the same codebase) is driving a resurgence in worktree usage that the git developers probably never anticipated. +The checkouts are separate, but running processes may still share ports, databases, and other services. Worktrees do not isolate those resources. --- @@ -308,7 +306,7 @@ The code that handles this is in `setup.c` and `path.c` in the git source. The f Multiple worktrees can run git commands simultaneously. Git uses lock files to prevent corruption: -- `.git/index.lock`: Prevents concurrent index modifications +- Each worktree's `index.lock`: Prevents concurrent changes to its staging area - `.git/refs/heads/.lock`: Prevents concurrent ref updates - `.git/worktrees//locked`: Marks a worktree as locked (won't be pruned) @@ -371,10 +369,12 @@ Add to your shell config: # Create a worktree for a new branch wt() { local branch="$1" - local repo_name=$(basename $(git rev-parse --show-toplevel)) + local repo_root repo_name + repo_root=$(git rev-parse --show-toplevel) || return + repo_name=$(basename "$repo_root") local worktree_path="$HOME/.worktrees/$repo_name/$branch" - git worktree add "$worktree_path" -b "$branch" - cd "$worktree_path" + git worktree add -b "$branch" "$worktree_path" || return + cd "$worktree_path" || return } # List worktrees @@ -403,22 +403,12 @@ Don't let old worktrees accumulate. ### Remember the Limitations - Can't checkout the same branch in multiple worktrees -- Can't nest worktrees inside each other -- Submodules need separate initialization per worktree +- Keep worktrees outside one another so their files are easy to distinguish +- Submodule support is incomplete; consult Git's documented limitations - Some IDE features might not understand worktrees --- -## Conclusion - -Git worktrees are a decade-old feature whose time has finally come. They solve parallel work, something that didn't matter much when developers worked linearly, but matters immensely now that AI agents are writing code alongside us. - -The implementation is elegant: share the expensive stuff (object store), separate the cheap stuff (working directory). It's the same insight that makes containers efficient: share the base, isolate the differences. - -Whether you're reviewing PRs, testing branches, or letting an AI agent work in parallel, worktrees provide isolation without duplication. They're not new technology. They're old technology that suddenly fits the moment. - -If you've been stashing to switch branches, maybe stop. There's a better way, and it's been there all along. - ---- +## Try a second checkout -**Related:** [Git Worktrees for AI Coding Agents](/compare/git-worktrees-for-ai-agents) · [Best Agentic IDE in 2026](/compare/best-agentic-ide) +The next time you need to review a PR while keeping unfinished work open, create a worktree for the review. Your current checkout stays in place, and both directories share the repository history. Remove the review worktree when you are done. diff --git a/apps/marketing/content/blog/how-to-get-hit.mdx b/apps/marketing/content/blog/how-to-get-hit.mdx index 33a77e7d379..250cc3ba492 100644 --- a/apps/marketing/content/blog/how-to-get-hit.mdx +++ b/apps/marketing/content/blog/how-to-get-hit.mdx @@ -9,23 +9,23 @@ relatedSlugs: - git-worktrees-history-deep-dive --- -I like fighting in most forms. I like to watch fights, train fighting, compete, and watch breakdowns. Here's something I learned in training and sparring that I feel is applicable to my own life, perhaps in startups and competition. +I like watching fights, training, competing, and watching breakdowns. One thing I've learned in sparring keeps coming up elsewhere in my life: how to react after getting hit. ![Me probably getting hit in the face (also my hands were way too high)](/blog/how-to-get-hit/muay-thai.jpg) ### Learning how to get hit -The first thing I try to learn when learning a new martial art, whether it’s BJJ (Brazilian jiujutsu), Muay Thai, or something else, is how to play defense. In jiujutsu, if you’re new, you’ll be working from your back a lot. In Muay Thai, you get punched in the face. +When I try a new martial art, whether it’s BJJ (Brazilian jiujutsu) or Muay Thai, I start with defense. In jiujutsu, if you’re new, you’ll be working from your back a lot. In Muay Thai, you get punched in the face. -When getting punched in the face, the natural response is to close your eyes, flinch, crouch, or turn your back. These are all bad. When you do any of these, your opponent has even more advantage to continue punching you since you can’t see them. It’s easier to punch someone when they can’t see you (source required). +When getting punched in the face, the natural response is to close your eyes, flinch, crouch, or turn your back. These are all bad. Turning away makes it harder to see the next punch coming. It’s easier to punch someone when they can’t see you (source required). -Learning how to get hit is learning how to fight against these natural urges. Instead of closing your eyes, you should keep them open such that you can see the next punches coming. Instead of crouching or turning away, you should face them, shell up, or step away while still looking at them. Knowing how to get it and not panic will allow you to figure out how to react. +Learning how to get hit is learning how to fight against these natural urges. Instead of closing your eyes, you should keep them open so you can see the next punches coming. Instead of crouching or turning away, you should face them, shell up, or step away while still looking at them. Learning not to panic gives me a chance to choose how to react. ### What to do after getting hit -After you get hit, there are many good options, I will just focus on my favorite option. Hit them back. Hitting your opponent back disrupts their flow, now instead of focusing on hitting you, they have to focus on not getting hit. It’s harder to hit someone when you’re also getting hit (source also required). +After getting hit, my favorite response in sparring is to hit back. It interrupts the other person: now they have to defend too. It’s harder to hit someone when you’re also getting hit (source also required). -It’s also better to hit them back more than once. If your opponent lands one shot but receives multiple shots in return, they might want to think twice about throwing another shot. +It’s also better to hit them back more than once. If your opponent lands one shot but receives multiple shots in return, they might want to think twice about throwing another shot. -### Conclusion -I’m far from an expert in fighting, but I get to train with many experts who are much better than me. Hence, I get punched in the face a lot. I find these tips helpful for getting punched in the face and in other equivalent aspects of my life. +### Outside the gym +I’m far from an expert in fighting, but I get to train with many experts who are much better than me. So I get punched in the face a lot. Practicing how to respond helps me stay calm when something goes wrong outside the gym too. -If many people equate starting a company as getting punched in the face, at least now you know how to get punched in the face and how to do something about it. +If starting a company is like getting punched in the face, at least now you know how to get punched in the face and how to do something about it. diff --git a/apps/marketing/content/blog/parallel-coding-agents-guide.mdx b/apps/marketing/content/blog/parallel-coding-agents-guide.mdx index d650063284a..110b4df3e79 100644 --- a/apps/marketing/content/blog/parallel-coding-agents-guide.mdx +++ b/apps/marketing/content/blog/parallel-coding-agents-guide.mdx @@ -4,6 +4,7 @@ description: "A practical Claude Code and Codex workflow: scope three tasks, iso author: avi date: 2026-02-18 lastUpdated: 2026-09-22 +unlisted: true category: Engineering relatedSlugs: - working-with-worktrees-in-superset diff --git a/apps/marketing/content/blog/roadmap-to-100-agents.mdx b/apps/marketing/content/blog/roadmap-to-100-agents.mdx index 7dda7ce310c..93ad8f0c4a5 100644 --- a/apps/marketing/content/blog/roadmap-to-100-agents.mdx +++ b/apps/marketing/content/blog/roadmap-to-100-agents.mdx @@ -1,5 +1,5 @@ --- -title: "Our plan for running 100 Parallel Coding Agents" +title: "Our Plan for Running 100 Coding Agents" description: "An attempt to crystallize our plans for 2026" author: satya date: 2026-02-02 @@ -11,12 +11,10 @@ category: Product Right now at Superset, we're able to reliably manage 5-7 coding agents in parallel - whether that's Claude Code, Codex, etc. - at a time. Our goal is to be able to manage 100 coding agents in parallel each by the end of 2026. -Most people believe that the path from seven to 100 agents is better models, faster inference, and smarter agents. It's -not. Agent compute is already cheap enough, you can run hundreds of agents a month all for less than the cost of one -engineer. +For us, the immediate limit is how much attention each agent needs. What's stopping us is every agent needs a human to review its code, give feedback, and decide what to work on next. -Scale the agents all you want - it's the humans that don't scale. +Adding agents also adds review and coordination work. # Mapping out the problem @@ -32,7 +30,7 @@ review their work than they spend doing it. At 100 agents, this model completely breaks. You can't review 100 diffs a day. You can't context-switch between 100 streams of work. -The fix is straightforward: pull the human out of steps where they're not needed, and make the remaining steps faster. +Our plan is to automate checks that do not need human judgment and prepare the remaining decisions for review. # How we'll improve it @@ -61,9 +59,7 @@ with its work or is sufficiently stuck. Your review becomes a final sign-off, no ### Stacking review agents and automated testing -Since you don't care how long an agent takes when you're running dozens of them, there's no downside to stacking checks. -Run five different review agents, each looking for different classes of issues, with a final agent consolidating the -feedback. Each layer increases the odds that problems are found and resolved before you ever see the code. +Several review agents could check different classes of issues, with one consolidating their findings. Those checks cost time and compute, so we need to measure which ones catch useful problems before adding more. The same logic applies to testing. Giving agents access to the browser through tools like [BrowserUse](https://browser-use.com/) or [Maestro](https://maestro.mobile.dev/) tests lets them verify their own work @@ -72,8 +68,7 @@ visually, catching UI regressions, layout issues, and interaction bugs that are ### Long-running agents Most agent workflows today are one-shot: you give a task, the agent works, it comes back. But agents should be able to -run longer loops: trying an approach, hitting an issue, adjusting, and iterating until they're confident or genuinely -stuck. [Ralph loops](https://ghuntley.com/loop/) are a popular pattern for this: treat the agent's work as clay on a +run longer loops: trying an approach, checking the result, and adjusting until the task is complete or they need help. [Ralph loops](https://ghuntley.com/loop/) are a popular pattern for this: treat the agent's work as clay on a wheel, refining iteratively, rather than laying bricks in a line. The result is fewer interruptions and higher-quality output when the agent does surface. An agent that's been iterating @@ -82,9 +77,7 @@ for an hour and is confident in its solution is far easier to review than one th ## Make it fast to review agents' work Most developer tools today are human-driven: you open a diff, you spin up a dev server, you navigate to the right page. -Agents plug into these tools, but the human is still doing the legwork. We want to shift the paradigm towards -agent-driven UIs - interfaces that agents orchestrate for the human's benefit, where each review takes seconds, not -minutes. +Agents plug into these tools, but the human is still doing the legwork. We want agents to prepare the review: open the relevant page, explain the change, and show the checks they ran. ### Investing in agent-driven UIs @@ -104,7 +97,7 @@ world, the tools need to meet you differently. Agents should be annotating their triaged by an agent, not presented as a raw log for you to parse. The tools we use every day were designed for human authors. Adapting them for human reviewers of agent work is a different design problem. -### Reducing friction to zero +### Make common decisions easier Every interaction between you and an agent should be as lightweight as possible. You should be able to click yes or no for straightforward changes. Agents should prep multiple-choice questions ("I found three approaches to this, which do @@ -112,8 +105,7 @@ you prefer?") so you're choosing instead of typing. When an agent does need writ prefill a draft response based on the context, so you're editing instead of writing from scratch. Quick actions like "create PR" or "deploy to staging" should also be easy to reach. -The goal isn't just faster review. It's making the interaction so lightweight that you can do it from your phone -between meetings. +We want routine reviews to be short enough to handle from your phone between meetings. ## Have agents be more proactive @@ -140,14 +132,14 @@ execute on a schedule or in response to events without anyone initiating them. ### Beyond code Even outside of code, this pattern is taking hold. [Circleback](https://circleback.ai/) listens to your meetings and -doesn't just take notes: it extracts action items, creates Linear tickets for feature requests mentioned in product +extracts action items from its notes, creates Linear tickets for feature requests mentioned in product demos, and updates your CRM after sales calls. The meeting ends and the downstream work is already in motion. We don't have all of this figured out yet. Some of it is live, some is on our roadmap, and some is still taking shape. But the throughput framing gives us a clear test for every feature we build: does this reduce the time a human spends per agent interaction? -If you're running agents at scale and hitting these walls, we'd love to compare notes, reach out to us at team@superset.sh +If you're running agents at scale and hitting these limits, we'd like to compare notes. Reach us at team@superset.sh. --- diff --git a/apps/marketing/content/blog/scheduled-agent-maintenance.mdx b/apps/marketing/content/blog/scheduled-agent-maintenance.mdx index 5448e34eef4..a9f8329e8a0 100644 --- a/apps/marketing/content/blog/scheduled-agent-maintenance.mdx +++ b/apps/marketing/content/blog/scheduled-agent-maintenance.mdx @@ -3,6 +3,7 @@ title: "Schedule an agent maintenance check you can review" description: "Set up a recurring Superset agent check on a connected host, inspect its workspace, and handle offline runs. Includes a bounded maintenance prompt and review checklist." author: kiet date: 2026-09-22 +unlisted: true category: Engineering relatedSlugs: - parallel-coding-agents-guide diff --git a/apps/marketing/content/blog/superset-mobile.mdx b/apps/marketing/content/blog/superset-mobile.mdx index 2baafc1cafa..4c764852127 100644 --- a/apps/marketing/content/blog/superset-mobile.mdx +++ b/apps/marketing/content/blog/superset-mobile.mdx @@ -4,15 +4,14 @@ description: "Prompt coding agents, follow terminal sessions, and review changes author: kiet date: 2026-09-21 lastUpdated: 2026-09-22 +unlisted: true category: Product image: /images/blog/superset-mobile/hero.png --- You give an agent a task, then step away from your desk. A few minutes later, it needs an answer. Or the work is ready to review. Either way, the next step is waiting on you. -Superset Mobile brings that next step to your iPhone. - -Open the workspaces you already use on your computer. Send a follow-up prompt, check the terminal, or review what changed. You can keep work moving without opening your laptop. +Open the same workspace in Superset Mobile on your iPhone. Send a follow-up prompt, check the terminal, or review what changed. You can keep work moving without opening your laptop. @@ -20,11 +19,11 @@ Requires iOS 26 or later and Superset Pro. See everything it does on the [Supers ![Superset Mobile terminal on an iPhone, with the headline Leave your desk. Keep building.](/images/blog/superset-mobile/hero.png) -## Same workspaces. Wherever you are. +## Continue the same workspace Superset Mobile connects you to your workspaces and sessions on your connected machine. Your agents run there; your phone gives you a way to pick up the conversation. -Your code, credentials, and agents stay on your machines. The phone is a window into them, not a copy. Sign in with the same account and every connected machine shows up with its workspaces and sessions. +Your agents keep running on the host. Sign in with the same account and organization to open the hosts you have access to. Keep the host awake and online. It works with Claude Code, Codex, and other terminal agents you use in Superset. You don't need to start a new session or explain the task again just because you've switched screens. @@ -40,8 +39,6 @@ An idea lands on a morning walk. Start a session, let it work, and come home to Check what an agent is doing in its terminal session. Answer its question, clarify the task, or send the next prompt from your phone. Type it, dictate it, or attach a photo. -That small interaction can be enough to keep a task moving while you're away from your desk. - ## Review before you merge Check pull request status and open syntax-highlighted diffs to see what changed. Read the full diff file by file, then give your agent feedback from the same workspace. @@ -106,7 +103,7 @@ I use Superset on my phone and iPad. Remote access is key. I no longer sit and w -## Try the complete workflow +## Set up phone access Follow the [Claude Code and Codex iPhone walkthrough](/blog/claude-code-codex-iphone) to configure a host, unblock an agent, inspect its diff, and troubleshoot an offline connection. @@ -126,4 +123,4 @@ To celebrate the launch, use **MOBILELAUNCH** at checkout on the monthly Pro pla Android is next. [Join the waitlist](/mobile#android) and we'll email you when it ships. -We'd love to hear what you build, and where mobile fits into your day. Send your feedback to [founders@superset.sh](mailto:founders@superset.sh). +Send feedback to [founders@superset.sh](mailto:founders@superset.sh). diff --git a/apps/marketing/content/blog/switching-between-ai-coding-agents.mdx b/apps/marketing/content/blog/switching-between-ai-coding-agents.mdx index b9d69d43752..62d3abc6bbd 100644 --- a/apps/marketing/content/blog/switching-between-ai-coding-agents.mdx +++ b/apps/marketing/content/blog/switching-between-ai-coding-agents.mdx @@ -1,6 +1,6 @@ --- title: "Switching Between AI Coding Agents Without Losing Context" -description: "Claude Code wedges, runs out of context, or turns out to be the wrong tool. Moving that session to another agent means moving the context. Here is what context actually is, why it does not travel, and the fork commands every major agent CLI ships." +description: "Keep useful context when a coding agent gets stuck. Learn when to resume, fork a session, or hand a summary to another agent." author: kiet date: 2026-08-30 category: Engineering @@ -10,11 +10,11 @@ relatedSlugs: - working-with-worktrees-in-superset --- -You are forty minutes into a session. The agent knows your repo, the three files that matter, the approach you rejected twice, and the one test that keeps failing. Then it wedges. Or it burns through its context window. Or you realize it is simply the wrong tool for this particular job and a different model would have solved it in one turn. +You are forty minutes into a session. The agent knows your repo, the three files that matter, the approach you rejected twice, and the one test that keeps failing. Then it wedges. Or it burns through its context window. Or you want to try a different model. -Starting over means explaining it again. So most people do the thing that feels cheaper: they keep pushing the stuck session, because re-teaching a fresh agent costs more than tolerating a bad one. +Starting over means explaining it again. It can feel cheaper to keep pushing the stuck session than to explain the task to a fresh agent. -That trade is the actual problem. Here is what context consists of, why it does not move between agents, and what each CLI gives you today. +A useful handoff needs more than the files the agent changed. It needs the task, the decisions already made, and the checks still failing. --- @@ -26,11 +26,11 @@ That trade is the actual problem. Here is what context consists of, why it does **The working state.** The branch, the worktree, the files already edited. This lives on disk rather than in the agent, so it transfers on its own: a second agent pointed at the same directory sees the same code. Process state is a different matter. A running dev server, its port, and anything held in memory belong to the process that started them, and the next agent inherits none of it. -**The instructions.** `AGENTS.md`, `CLAUDE.md`, skills, MCP server config. Also on disk, also portable, and the most underrated of the four. Anything you teach an agent here survives not just a handoff but the agent itself. +**The instructions.** `AGENTS.md`, `CLAUDE.md`, skills, MCP server config. These live on disk too, though tools differ in which files and formats they read. Keep recurring instructions here so you can reuse them across sessions. **The reasoning.** Why you rejected the first approach, which lead went nowhere. This one lives only in the transcript, and it hurts to lose, because the diff never shows it. -The files and the instructions travel on their own. The fight is over the conversation and the reasoning. +The files and the instructions travel on their own. The conversation and the reasons behind decisions need an explicit handoff. --- @@ -38,7 +38,7 @@ The files and the instructions travel on their own. The fight is over the conver No vendor-neutral interchange format exists for agent sessions. Each vendor stores transcripts in its own schema, and by default none of them read another's. A few one-way importers have appeared, such as `grok import`, which pulls the current Claude Code conversation into Grok and prints a resume command. Check whether one exists for your pair before falling back to replay. -That leaves two honest options, and they fail differently. +Two common options are native session forks and transcript replay. **Native fork or resume** keeps full fidelity, because the harness reads its own store. It only works inside one harness. Claude cannot resume a Codex session. @@ -69,7 +69,7 @@ A fork leaves the original untouched, and most CLIs fork from the saved session ## The scrollback trap -If you want to move context to a *different* agent, you have to capture the old session's output. This is where the obvious approach quietly fails, and the failure is worth understanding because it applies to anything that scrapes a terminal. +If you want to move context to a *different* agent, you have to capture the old session's output. Reading the visible terminal buffer can miss most of the conversation. Most fullscreen agent TUIs draw to the **alternate screen buffer**. That is the same mechanism `vim` and `less` use, the reason your prompt reappears untouched when you quit them. The alternate screen keeps no scrollback. Nothing scrolls off, because nothing scrolls: the program redraws in place. It depends on the mode, not the tool: Pi's default `regular` mode renders to the main buffer and keeps normal scrollback, while its fullscreen mode does not. @@ -88,9 +88,9 @@ The fix is to read the raw pty output rather than the rendered screen, which mea ## Practical patterns -**Put durable knowledge in `AGENTS.md`, not in the chat.** Anything you find yourself re-explaining after a handoff belongs in a file. This is the highest-leverage habit here, because it makes every future switch cheaper and it survives the agent going away entirely. +**Put durable knowledge in `AGENTS.md`, not in the chat.** Anything you find yourself re-explaining after a handoff belongs in a file. Keep it in a file the next agent will read. -**Fork before anything irreversible.** A large refactor, a dependency bump, a migration. Forking costs nothing and gives you a thread to fall back to. +**Fork to try another approach.** A fork gives you another conversation to return to. It does not undo file edits or database changes; use a separate worktree when you need an independent checkout. **Switch tools on capability, not frustration.** A wedged agent is often a context-window problem, and a fresh session of the *same* agent fixes it. Change harness when you want a different model's strengths. @@ -113,4 +113,4 @@ superset agents create --workspace W --agent claude --fork-session S The handoff reads the retained pty stream rather than the visible screen, for the reason above, and prefers a harness's own conversation store when one exists. -The broader point stands whichever tool you use: the parts of context you keep on disk are the parts you never have to move. Everything else is a copy, and every copy loses something. +Before switching tools, save a short handoff: the goal, current changes, rejected approaches, and remaining checks. Give the next agent that summary and the workspace path. diff --git a/apps/marketing/content/blog/terminal-daemon-deep-dive.mdx b/apps/marketing/content/blog/terminal-daemon-deep-dive.mdx index 58e05c5728a..165a003f164 100644 --- a/apps/marketing/content/blog/terminal-daemon-deep-dive.mdx +++ b/apps/marketing/content/blog/terminal-daemon-deep-dive.mdx @@ -1,5 +1,5 @@ --- -title: "The Terminal That (Almost) Never Dies: Building a Persistent Terminal Daemon for Electron" +title: "Keeping Terminal Sessions Alive Across Electron App Restarts" description: "How we built a process-isolated terminal host that survives app restarts, handles backpressure gracefully, and enables cold restore from disk." author: avi date: 2026-01-26 @@ -9,13 +9,13 @@ relatedSlugs: - how-to-get-hit --- -One of the slickest features of Superset is how our terminal survives app restarts. This is a deep dive on how we built it. Huge credits to [Andreas Asprou](https://x.com/andyasprou) who spearheaded this entire effort. +Superset keeps terminal sessions running when the desktop app restarts. [Andreas Asprou](https://x.com/andyasprou) led the work. This post explains how we separated the terminals from the app process. --- -When you're building an integrated terminal for Superset, we ran into an inconvenient issue: **terminals are ephemeral processes**. This is inconvenient for many reasons. We like to update a lot. Losing progress across 10 worktrees everytime you update is a big deterrent for updating. Or if the app crashes, you lose all your processes. +Our original terminal processes ended when the app closed. That made updates expensive: restarting Superset meant interrupting work across every open workspace. An app crash could do the same. -Using on Tmux as an existence proof, we knew ephemeral terminals were possible. +tmux showed that terminal sessions could outlive the interface attached to them. ## The Problem: Electron Terminals Are Fragile @@ -25,11 +25,11 @@ In a usual Electron + node-pty setup, your terminal lifecycle looks like this: App starts → spawn PTY → user runs commands → app closes → PTY dies ``` -In this workflow, the PTY is spawned in the main Node process of the app. This process is killed when the app closes, killing its child process as well. +In this workflow, the PTY is spawned in the main Node process of the app. This process is killed when the app closes, killing its child process as well. ## The Tempting Solution: Just Use tmux -In our first iteration of the solve, we used tmux. It's battle-tested, handles persistence natively, and has a relatively easy interface. +We tried tmux first. It's battle-tested, handles persistence natively, and has a relatively easy interface. Our workflow with tmux became: @@ -45,15 +45,15 @@ tmux attach-session -t "superset-pane-123" We also used tmux with headless to make it feel native in xterm. -** Why this sucks actually ** +**Why we moved away from tmux** -1. An extra dependencies. Now on top of installing the app, users will have to install tmux. -2. Not cross platform. Tmux does not work for windows. We'd have to build another equivalent integration. -3. xterm incompatibility. As a terminal simulator itself, tmux takes over the scroll bar, selection, hotkeys, and the likes. This hijack inside of xterm makes it feel extremely clunky. +1. An extra dependency. Users also had to install tmux. +2. Platform support. Native Windows support would need a different approach. We'd have to build another equivalent integration. +3. Competing terminal controls. tmux manages scrolling, selection, and shortcuts, which made the integration with xterm feel awkward. -We needed another way +We built a separate terminal process instead. -## Architecture: A detachable Daemon +## Architecture: A detachable daemon Our solution splits terminal management across three process layers: @@ -93,7 +93,7 @@ With this architecture, the Electron app becomes just a *client* of the terminal ### Spawning the Daemon -The daemon is a Node.js process spawned with a clever Electron trick: +The daemon uses Electron’s bundled Node.js runtime: ```typescript const daemon = spawn(process.execPath, [daemonScript], { @@ -128,9 +128,9 @@ Communication between the main process and daemon uses newline-delimited JSON ov ### The Two-Socket Split -Our first protocol version used a single socket for everything. This caused a nasty problem: **head-of-line blocking**. +Our first protocol version used a single socket for everything. That caused **head-of-line blocking**. -When a terminal produces output faster than the socket can drain, the kernel buffer fills up. Every `socket.write()` for data events would block, queuing behind them any RPC responses. The result? A user opens a new terminal, but `createOrAttach` times out because the response is stuck behind megabytes of `cat bigfile.log` output. +When a terminal produces output faster than the socket can drain, the kernel buffer fills up. Data events and RPC responses shared the same output queue, so responses could be delayed behind terminal output. The result? A user opens a new terminal, but `createOrAttach` times out because the response is stuck behind megabytes of `cat bigfile.log` output. Protocol v2 splits communication: @@ -158,7 +158,7 @@ What surviving looks like in practice: ![An interrupted Claude Code session offering a one-click Resume after the client died: the daemon kept the session alive](/changelog/2026-08-09-resume-banner.png) -The magic is in **attachment semantics**: +The attach request checks whether the session is still running: ```typescript async createOrAttach(params: CreateSessionParams) { @@ -203,7 +203,7 @@ On next app launch, we detect unclean shutdown (no `endedAt` in metadata) and of // Old scrollback preserved, new shell spawns in same directory ``` -This gives users the best of both worlds: they see what happened before the crash, and can kinda where they left off. +Users can read the output from before the crash and start a new shell in the same directory. The old process is gone. ## Backpressure: The Hidden Challenge @@ -252,7 +252,7 @@ pty.onData((data) => { }); ``` -This avoids the O(n²) string concatenation problem while maintaining ~30fps visual updates. +Batching reduces the number of messages sent to the UI. ## The Headless Emulator: State Without a Screen @@ -358,7 +358,7 @@ Users see their active terminal first, background tabs hydrate gradually. ## The Future: Cloud Backends -The abstraction boundary we've built isn't just about local persistence. The `TerminalRuntime` interface is provider-neutral: +The `TerminalRuntime` interface separates the renderer from the process that owns the terminal: ```typescript interface TerminalRuntime { diff --git a/apps/marketing/content/blog/the-production-run.mdx b/apps/marketing/content/blog/the-production-run.mdx index 19c7daa567a..4a5cd12c80e 100644 --- a/apps/marketing/content/blog/the-production-run.mdx +++ b/apps/marketing/content/blog/the-production-run.mdx @@ -13,7 +13,7 @@ A factory doesn't prove itself with a prototype. Anyone can build one good car b We've spent two years arguing that software is heading that way. We wrote down what the levels look like in [Factory 2026](/factory-2026) and what our own path to 100 parallel agents looks like in [our 2026 roadmap](/blog/roadmap-to-100-agents). What we never did was put a number on ourselves and let it be checked. -So: **by August 2028, we expect the factory to be running on our leaderboard: more than one in five developers at the top tier, and the median developer at the tier below it.** Ten or more agent workstreams at once, ten agent-written PRs merging every week, for a fifth of the board. Today that number is zero. +So: **by August 2028, we expect the factory to be running on our leaderboard: more than one in five developers at the top tier, and the median developer at the tier below it.** Ten or more agent workstreams at once, ten agent-written PRs merging every week, for a fifth of the board. On August 27, 2026, that number was zero. This post is that prediction, the instrument we're measuring it with, and the first run, which starts in September and asks for something much smaller than ten agents. @@ -23,7 +23,7 @@ This post is that prediction, the instrument we're measuring it with, and the fi A production run is a fixed window where we all push one number and see what actually moves. -Not a demo. Not a launch week. Everyone on the board works the same way for a month, we measure the same things, and at the end we know whether the thing we claim about software development is true for us, before we claim it about anyone else. +For one month, everyone on the board works toward the same target. We measure the results to test our claims about software development against our own work. Predictions that can't be checked are marketing. This one has a date, a metric, and a public scoreboard. If we're wrong, the [leaderboard](/leaderboard) will say so in front of everybody, which is the point. @@ -56,7 +56,7 @@ The tier is the **minimum** across all five, not an average. Ten parallel sessio Cost is graded on dollars per merged PR rather than on spend, because spend is about to get trivially easy, and grading it would grade the calendar. Efficiency doesn't: closing the gap from $15 a change to $3.50 takes fewer wasted sessions, not a bigger budget. -None of your work leaves your machine. Not your prompts, not your file paths, not repo or branch names, not PR titles or numbers. The payload is five numbers a day, plus whatever handle you choose to publish under. +The leaderboard payload contains five aggregate numbers a day and your chosen handle. It does not include prompts, file paths, repo or branch names, or PR titles or numbers. > **A note on this being wrong.** These thresholds are calibration guesses. The parallelism numbers are quoted from Factory 2026, but the token and PR floors are our best estimates and they will move as we see real data. The Output axis is the weakest of them today: PR sync is GitHub-only, it sees work inside Superset workspaces and nothing outside them, and a merge observed while the app is closed can go unrecorded. We'd rather ship an instrument that undercounts and fix it in public than wait for a perfect one. Expect this to change. We'll say so when it does. @@ -137,11 +137,11 @@ The bottom drains steadily; the top tier stays near zero for a year and a half b | Feb 2028 | 27% | 33% | 31% | 9% | | Aug 2028 | 13% | 25% | 40% | 22% | -That first row is real. One person out of the 320 developers ranked on the board on 27 August 2026 was above the bottom tier, and we're publishing it rather than quietly recalibrating until the chart looks better. +That first row is real. One person out of the 320 developers ranked on the board on 27 August 2026 was above the bottom tier, and we're publishing it without recalibrating to make the chart look better. -Some of that gap is the instrument. Output is conjunctive with the other three axes, and Output is the axis that currently can't see most people's merged PRs, so developers who are genuinely running four or five agents in parallel are reading as Button pushers because the sync never observed their work landing. Fixing that measurement is on us and it's the first thing we're doing. Some of the gap is real, though, and no amount of instrument work will move it. Telling those two apart is most of what September is for. +Some of that gap is the instrument. Output must pass alongside the other four axes, and Output is the axis that currently can't see most people's merged PRs, so developers who are genuinely running four or five agents in parallel are reading as Button pushers because the sync never observed their work landing. Fixing that measurement is on us and it's the first thing we're doing. Some of the gap is real, though, and no amount of instrument work will move it. Telling those two apart is most of what September is for. -One rule holds this together: **the floors never move to chase that curve.** If we lowered thresholds to make the distribution look healthy, a 2028 Henry Ford would mean exactly what a 2026 Henry Ford meant, and there'd be no progress to show, just a ranking. The numbers stay put. The distribution moves because people change. +One rule holds this together: **the floors never move to chase that curve.** If we lowered thresholds to make the distribution look healthy, a 2028 Henry Ford would no longer mean what a 2026 Henry Ford meant, and there'd be no progress to show, just a ranking. The numbers stay put. The distribution moves because people change. Which is also what makes the prediction falsifiable. If eighteen months from now the observed doubling time is twenty months instead of seven, we were wrong, and the same scoreboard that made the claim will be the thing that disproves it. @@ -151,9 +151,9 @@ The table above says Operator becomes the board's median tier sometime in mid 20 **The September production run has one goal: everybody on the board reaches Operator.** -That's it. Not Henry Ford. Not ten agents. For thirty days, five small numbers: +For thirty days, the target is: -- **Two agents at once.** Not ten. Two, often enough that it's your median rather than your best afternoon. +- **Two agents at once.** Often enough that it's your median rather than your best afternoon. - **2.5M tokens per session.** Give a session a whole task instead of a question. - **One merged agent PR a week.** Four in the month. The work has to land. - **Ten active days.** A third of the month. @@ -163,7 +163,7 @@ Clear all five inside the window and you get three things: a dated, numbered Run We picked a tiny goal on purpose. Operator is the smallest tier by the numbers and the hardest one by everything else, because it's the only rung where you give up something you're currently good at. Going from two agents to three is logistics. Going from one to two is deciding you're no longer going to watch. Every tier above it is a variation on that same move. You can't get to ten streams without first getting comfortable not watching two. -There's a version of this that's just a leaderboard with badges on it, and that version is worthless. The reason to run it as a fixed month with one shared target is that we find out something we don't currently know: whether the bottleneck to running more agents is the tooling, which is our problem to fix, or the habit, which is yours. We think it's mostly ours. September is how we find out. +One month with a shared target should help us distinguish limits in the tooling from the difficulty of changing work habits. We think the tooling is the larger problem. September is how we test that. The board is [public](/leaderboard). Opt in from the desktop app, and your tier and progress show up alongside everyone else's. If you'd rather compete without a name attached, you can publish privately and still see where you land. diff --git a/apps/marketing/content/blog/working-with-worktrees-in-superset.mdx b/apps/marketing/content/blog/working-with-worktrees-in-superset.mdx index eab2a0aaf4d..6a41d9cfdda 100644 --- a/apps/marketing/content/blog/working-with-worktrees-in-superset.mdx +++ b/apps/marketing/content/blog/working-with-worktrees-in-superset.mdx @@ -1,6 +1,6 @@ --- title: "Working with Git Worktrees in Superset" -description: "How Superset uses Git worktrees to run multiple AI coding agents in parallel without conflicts. A practical guide to the workflow that lets you 10x your throughput." +description: "Create separate workspaces for coding agents, review their diffs, and merge changes. Learn what Git worktrees isolate and which resources remain shared." author: kiet date: 2026-02-18 category: Engineering @@ -9,170 +9,75 @@ relatedSlugs: - roadmap-to-100-agents --- -Running one AI coding agent is useful. Running ten at once is a different game entirely. But running ten agents in the same working directory is a disaster: they step on each other's files, create merge conflicts mid-edit, and leave your codebase in an unpredictable state. +When two agents edit the same checkout, they can overwrite each other's files or mix changes in the staging area. Give each independent task a Git worktree so you can review and merge it separately. -Superset solves this with Git worktrees. Every agent gets its own branch and its own copy of the working directory, all backed by the same Git object store. No duplication, no conflicts, no chaos. This post walks through how it works in practice. +Superset creates workspaces around that workflow. Each worktree has its own working directory and index, with a branch for the task. The repository's Git history is shared. ---- - -## Why Worktrees Matter for Agent Orchestration - -When you run a coding agent like Claude Code or Codex, the agent reads files, writes code, and runs commands. If two agents try to edit the same file simultaneously, you get corrupted state. If they share a staging area, commits get tangled. - -Git worktrees eliminate this problem at the filesystem level. Each worktree is a separate checkout with its own: - -- **Working directory**: files on disk that the agent can read and modify -- **Branch**: an isolated ref that tracks the agent's changes -- **Index**: a separate staging area for commits - -What's shared across all worktrees: +## What a worktree separates -- **Object store**: commits, trees, and blobs exist exactly once -- **Refs**: branches created in one worktree are visible in all others -- **Config**: repository settings, remotes, hooks +Each worktree has its own checked-out files, uncommitted changes, and staging area. Commits and branch references belong to the shared repository, so a commit made in one worktree is available from the others. -This means creating a new worktree is fast (seconds, not minutes) and cheap (megabytes, not gigabytes). You're not cloning the repo. You're checking out another copy of the files while sharing the entire history. +Creating a worktree checks out another copy of the files without downloading the repository's history again. Dependencies and build output can still take substantial disk space in each checkout. ---- - -## The Superset Workflow - -Here's what happens when you create a new task in Superset: +## Create a workspace for each task -### 1. Create a Task +Open your project in Superset and create a workspace for a task such as “add input validation to the signup form.” Choose a branch, then start your agent in that workspace. -You describe what you want done: "add input validation to the signup form" or "refactor the payment service to use the new API." Superset creates a new Git worktree and checks out a fresh branch. - -``` -~/my-project/ # Your main working tree +```text +~/my-project/ # Main working tree ~/.superset/worktrees/my-project/ - └── add-signup-validation/ # Agent's isolated worktree - ├── .git # Points back to main repo - └── (full project checkout) + └── add-signup-validation/ # Task's worktree + ├── .git # Points back to the repository + └── (project files) ``` -### 2. Agent Works in Isolation - -The agent runs inside its worktree. It can: +Install the project's dependencies and run its setup steps in the new checkout. The agent can edit files and run tests there while you continue working in your main directory. -- Read and write any file -- Install dependencies -- Run builds and tests -- Make commits to its branch +Worktrees aren't a security boundary. An agent with permission to access other directories or shared services can still affect them. -Meanwhile, your main working directory is untouched. You can keep coding, run your dev server, or create more tasks, each in its own worktree. +## Run independent tasks in parallel -### 3. Review the Diff +![Claude working in one Superset workspace while other agents run in separate workspaces.](/images/readme/agents-working.gif) -When the agent finishes, Superset shows you a diff of everything it changed. The built-in diff viewer highlights additions, deletions, and modifications across all files. You can also open the worktree in your editor (VS Code, Cursor, JetBrains, Xcode) to inspect changes in full context. +Start with two or three tasks that don't depend on each other. For example: -### 4. Merge or Iterate +- Add tests for an existing formatting helper. +- Improve a search screen's empty-state message. +- Correct a README setup instruction. -If the changes look good, merge the branch. If not, give the agent feedback and let it iterate, still in its own worktree, still isolated from everything else. +Give each task its own workspace and branch. When one agent finishes, review its diff while the others keep working. The [parallel coding guide](/blog/parallel-coding-agents-guide) includes prompts for this example. ---- - -## Running Multiple Agents in Parallel - -The real power of worktrees shows up when you're running multiple agents simultaneously. Here's a typical session: - -![Claude streaming a billing migration in one Superset workspace while other agents run in parallel workspaces](/images/readme/agents-working.gif) - -``` -Task 1: "Write unit tests for the auth module" - → Branch: agent/auth-tests - → Status: Running (Claude Code) +Use whichever agent works for your project. Keep the scope small enough that you can explain the resulting change and check its behavior. -Task 2: "Refactor database queries to use prepared statements" - → Branch: agent/db-refactor - → Status: Running (Codex) +## Review the change in context -Task 3: "Update API documentation for v2 endpoints" - → Branch: agent/api-docs - → Status: Complete, ready for review +Open the workspace's diff in Superset. Check for unexpected files, read the changed code, and confirm that the relevant tests ran. Open the worktree in your editor when you need to trace a caller or understand surrounding behavior. -Task 4: "Fix the race condition in the websocket handler" - → Branch: agent/ws-fix - → Status: Running (Claude Code) -``` - -Each task has its own worktree and branch. Agent 1 can't accidentally break Agent 2's work. When Agent 3 finishes, you review its diff while the others keep working. No waiting, no conflicts, no context switching between stashes. - -### How Superset Manages Concurrency +Ask for corrections in the same workspace. Once the change is ready, commit it and follow your normal pull-request process. -Superset's persistent daemon manages all agent sessions via Unix domain sockets. This architecture means: - -- **Sessions survive crashes**: close and reopen Superset, your agents are still running -- **Priority-based scheduling**: the focused pane gets full resources, background tabs hydrate gradually -- **No interference**: each agent's terminal session is completely independent - ---- +Merge accepted branches one at a time and test the combined result. Separate working directories prevent simultaneous edits to the same checkout, but they don't prevent merge conflicts or incompatible changes. -## Practical Tips +## Plan for shared resources -### Start Small, Scale Up +Two dev servers may try to use the same port. Two tests may write to the same database. Multiple agents also share the host's memory, CPU, and provider limits. -Begin with 2-3 parallel agents to get comfortable with the review workflow. As you build confidence in reviewing diffs quickly, scale up. Most developers find a sweet spot around 5-7 concurrent agents before review becomes the bottleneck. +Give previews distinct ports and use separate test data where tasks write to shared services. If a task needs stronger runtime isolation, use an appropriate container or separate host alongside the worktree. -### Choose the Right Agent for Each Task +Superset's terminal daemon keeps sessions separate from the desktop UI, so an app restart can reconnect to running processes. The host and daemon must remain running. See the [terminal daemon design](/blog/terminal-daemon-deep-dive) for the difference between reconnecting and restoring saved history. -Different agents have different strengths. Superset is agent-agnostic. Use whatever works best for the job: +## Clean up finished work -- **Claude Code**: strong at complex refactors, architectural changes, and multi-file edits -- **Codex**: fast for well-scoped tasks with clear specifications -- **Aider**: good for iterative changes with tight feedback loops -- **OpenCode**: flexible with 75+ model providers, great for cost optimization +After a change is merged, stop its agent and dev server, then remove the workspace when you no longer need it. Check for uncommitted work before deleting it. -### Organize Your Tasks +For a worktree you created manually, use: -Give each task a clear, specific description. "Fix bugs" is too vague. "Fix the null pointer exception in UserService.getProfile when the user has no avatar" gives the agent enough context to work independently. - -### Review Diffs, Not Code - -When an agent finishes, don't re-read the entire file. Focus on the diff. Superset's built-in diff viewer shows exactly what changed. If a change touches files you didn't expect, that's worth investigating. If it's scoped to what you asked for, a quick review is usually sufficient. - -### Clean Up Finished Worktrees - -After merging, remove the worktree. Superset handles this automatically when you close a completed task, but it's good practice to keep your worktree list clean. Old worktrees don't affect performance, but they clutter the list. - ---- - -## Worktrees vs Other Isolation Methods - -Why worktrees instead of containers, VMs, or separate clones? - -| Method | Setup Time | Disk Cost | Shared History | Merge Workflow | -|---|---|---|---|---| -| **Git worktrees** | Seconds | Low (shared objects) | Yes | Native git merge | -| **Separate clones** | Minutes | High (full repo copy) | No (separate remotes) | Push/pull between repos | -| **Docker containers** | Minutes | Medium (image layers) | Depends on mount | Volume-based, complex | -| **VMs** | Minutes | High (full OS) | No | Network-based, slow | - -Worktrees win on every axis that matters for coding agents: they're fast to create, cheap on disk, share git history natively, and use standard git merging. The agent doesn't know or care that it's in a worktree: it just sees a normal git repository. - ---- - -## When Worktrees Aren't Enough - -Worktrees isolate files and branches, but they share the runtime environment. If two agents both need to run `npm install` with conflicting dependencies, they'll still conflict at the system level. For full environment isolation, you'd layer containers on top of worktrees, but for the vast majority of coding tasks, worktree-level isolation is sufficient and dramatically simpler. - -The other limitation is the one-branch rule: Git doesn't allow the same branch to be checked out in multiple worktrees simultaneously. This is actually a feature: it prevents the exact class of bugs that parallel work creates. Superset enforces unique branches per task by default. - ---- - -## Getting Started - -If you're already using a CLI coding agent, adding Superset takes about two minutes: - -1. **Download Superset** from [superset.sh](https://superset.sh) -2. **Open your project**: Superset detects your git repository automatically -3. **Create a task**: describe what you want done, pick your agent -4. **Watch it work**: the agent runs in its own worktree while you keep coding - -The first time you see three agents working in parallel (each on its own branch, none interfering with each other), the workflow clicks. It's not three times faster (review is still human-speed), but it's dramatically more throughput than running agents one at a time. +```bash +git worktree list +git worktree remove ../completed-task +``` -Git worktrees have been in Git since 2015. They were designed for a world where humans needed to work on multiple branches. Turns out, they're even more useful in a world where AI agents do. +Removing the worktree keeps its branch. Delete the branch separately when you're sure its work is merged. ---- +For the Git commands and file layout, read [how worktrees work](/blog/git-worktrees-history-deep-dive) or [Git's worktree reference](https://git-scm.com/docs/git-worktree). -**Related:** [Git Worktrees for AI Coding Agents](/compare/git-worktrees-for-ai-agents) · [How to Run Multiple Claude Code Agents in Parallel](/compare/multiple-claude-code-agents-parallel) · [Best IDE for Claude Code](/compare/best-ide-for-claude-code) +**Related:** [Git Worktrees for AI Coding Agents](/compare/git-worktrees-for-ai-agents) · [Running Multiple Claude Code Agents](/compare/multiple-claude-code-agents-parallel) diff --git a/apps/marketing/src/app/[lang]/blog/page.tsx b/apps/marketing/src/app/[lang]/blog/page.tsx index b5d1905fc66..e0165025014 100644 --- a/apps/marketing/src/app/[lang]/blog/page.tsx +++ b/apps/marketing/src/app/[lang]/blog/page.tsx @@ -4,7 +4,7 @@ import { getI18nInstance } from "@superset/i18n/server"; import type { Metadata } from "next"; import { localeUrl, localizedAlternates } from "@/app/[lang]/metadata"; import { initServerI18n } from "@/app/i18n-server"; -import { getBlogPosts } from "@/lib/blog"; +import { getListedBlogPosts } from "@/lib/blog"; import { BlogCard } from "./components/BlogCard"; import { GridCross } from "./components/GridCross"; @@ -50,7 +50,7 @@ export async function generateMetadata(): Promise { export default async function BlogPage() { await initServerI18n(); - const posts = getBlogPosts(); + const posts = getListedBlogPosts(); return (

diff --git a/apps/marketing/src/app/feed.xml/route.ts b/apps/marketing/src/app/feed.xml/route.ts index 3778fc81735..da900473406 100644 --- a/apps/marketing/src/app/feed.xml/route.ts +++ b/apps/marketing/src/app/feed.xml/route.ts @@ -1,8 +1,8 @@ import { COMPANY } from "@superset/shared/constants"; -import { getBlogPosts } from "@/lib/blog"; +import { getListedBlogPosts } from "@/lib/blog"; export async function GET() { - const posts = getBlogPosts(); + const posts = getListedBlogPosts(); const baseUrl = COMPANY.MARKETING_URL; const escapeXml = (str: string) => diff --git a/apps/marketing/src/lib/blog-utils.ts b/apps/marketing/src/lib/blog-utils.ts index a6ebea0c0e2..8f9c997c916 100644 --- a/apps/marketing/src/lib/blog-utils.ts +++ b/apps/marketing/src/lib/blog-utils.ts @@ -26,6 +26,7 @@ export interface BlogPost { faq?: Array<{ question: string; answer: string }>; keywords?: string[]; draft?: boolean; + unlisted?: boolean; content: string; } diff --git a/apps/marketing/src/lib/blog.test.ts b/apps/marketing/src/lib/blog.test.ts new file mode 100644 index 00000000000..0eb6e896937 --- /dev/null +++ b/apps/marketing/src/lib/blog.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, test } from "bun:test"; +import { + getAllSlugs, + getBlogPost, + getBlogPosts, + getListedBlogPosts, + getRelatedPosts, +} from "./blog"; + +const unlistedSlugs = [ + "claude-code-codex-iphone", + "scheduled-agent-maintenance", + "parallel-coding-agents-guide", + "superset-mobile", +]; + +describe("unlisted blog posts", () => { + test("remain published for direct routes, sitemaps, and LLM discovery", () => { + for (const slug of unlistedSlugs) { + expect(getBlogPost(slug)?.unlisted).toBe(true); + expect(getBlogPosts().some((post) => post.slug === slug)).toBe(true); + expect(getAllSlugs()).toContain(slug); + } + }); + + test("stay out of listings, feeds, and related-post recommendations", () => { + const posts = getListedBlogPosts(); + expect(posts.length).toBeGreaterThan(0); + expect(posts.some((post) => unlistedSlugs.includes(post.slug))).toBe(false); + expect( + getRelatedPosts({ + slug: "working-with-worktrees-in-superset", + relatedSlugs: unlistedSlugs, + }), + ).toEqual([]); + expect( + getRelatedPosts({ slug: "working-with-worktrees-in-superset" }).some( + (post) => unlistedSlugs.includes(post.slug), + ), + ).toBe(false); + }); +}); diff --git a/apps/marketing/src/lib/blog.ts b/apps/marketing/src/lib/blog.ts index d98f9eb2359..8dcad9ab017 100644 --- a/apps/marketing/src/lib/blog.ts +++ b/apps/marketing/src/lib/blog.ts @@ -45,6 +45,7 @@ function parseFrontmatter(filePath: string): BlogPost | null { faq: data.faq, keywords: data.keywords, draft: data.draft === true, + unlisted: data.unlisted === true, content, }; } catch { @@ -70,6 +71,10 @@ export function getBlogPosts(): BlogPost[] { }); } +export function getListedBlogPosts(): BlogPost[] { + return getBlogPosts().filter((post) => !post.unlisted); +} + export function getBlogPost(slug: string): BlogPost | undefined { const filePath = path.join(BLOG_DIR, `${slug}.mdx`); @@ -101,10 +106,10 @@ export function getRelatedPosts({ if (relatedSlugs && relatedSlugs.length > 0) { return relatedSlugs .map((s) => getBlogPost(s)) - .filter((post): post is BlogPost => post !== undefined); + .filter((post): post is BlogPost => post !== undefined && !post.unlisted); } - return getBlogPosts() + return getListedBlogPosts() .filter((post) => post.slug !== slug) .slice(0, MAX_RELATED_POSTS); } From df0684cb9ec97fbbd1a276109359c926bd83c34c Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Wed, 23 Sep 2026 08:57:21 -0700 Subject: [PATCH 3/3] docs(marketing): name automation recovery actions --- apps/marketing/content/blog/scheduled-agent-maintenance.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/marketing/content/blog/scheduled-agent-maintenance.mdx b/apps/marketing/content/blog/scheduled-agent-maintenance.mdx index a9f8329e8a0..f8ec0d5ab93 100644 --- a/apps/marketing/content/blog/scheduled-agent-maintenance.mdx +++ b/apps/marketing/content/blog/scheduled-agent-maintenance.mdx @@ -53,7 +53,7 @@ A run marked **created** means Superset created the workspace. It does **not** m ## Handle offline and duplicate runs -If the target host is offline at dispatch time, the run fails and the schedule advances. Restore the host, inspect the recorded error, and retry the run. Do not assume the missed work was completed later. +If the target host is offline at dispatch time, the run fails and the schedule advances. Restore the host and inspect the recorded error. Use **Run now** to re-dispatch that automation, or **Retry all** on the **Mine** tab to re-dispatch all your automations whose latest run failed. Do not assume the missed work was completed later. A retry can occasionally start the job twice. Write prompts that are safe to repeat, especially if a later version opens issues or pull requests.