orca-fleet — Claude Code skill: parallel agents in Orca
Runs several coding agents at once in Orca worktrees, each on its own clausona profile — a second Claude or Codex account, or an API model such as GLM.
npx skills add larcane97/clausona --skill orca-fleet -a claude-codeWhat orca-fleet does
Orca keeps agents side by side in git worktrees and lists them in a sidebar. This skill drives that setup: clausona assigns each worker its profile, so one task can run on another Claude account, on Codex, or on an API model like GLM or DeepSeek. Handy when a single account's limits would slow a fan-out.
It builds on the fleet-core skill, which holds the shared rules; orca-fleet adds the Orca-specific steps. First it checks that orca status reports runtimeReachable: true, that the repo appears in orca repo list --json, and that the repo has a remote, since workers push their branches. Then it creates a worktree and a terminal per task and sends clausona run <profile> -- <args>. It waits for the shell to settle, confirms the agent actually came up, and answers the folder-trust prompt the first time a profile meets a repo.
Do not use Orca's own account switcher or orchestration commands for workers — clausona run picks the account. Orca sets CODEX_HOME in its terminals, so a bare codex there runs on Orca's account; clausona run overrides that. Workers sharing one Claude profile go up one at a time, each after the previous one produces its first output.
What it helps with
- spread a batch of tasks across several accounts so one limit does not stall the run
- start agents in separate git worktrees and watch them from Orca's sidebar
- route some tasks to an API model such as GLM or DeepSeek
- wait for an agent's turn to end and pull its last reply
- retire workers once their work is done
Example prompts for the agent
- Split this across my accounts in Orca
- Run these on DeepSeek in Orca
- Start three agents in Orca and show which profile each one uses
How to install orca-fleet
1Skills CLI (Vercel)
npx skills add larcane97/clausona --skill orca-fleet -a claude-code2Manually: put the files in place
~/.claude/skills/orca-fleet/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/orca-fleet/
1Skills CLI (Vercel)
npx skills add larcane97/clausona --skill orca-fleet -a codex2Manually: put the files in place
.agents/skills/orca-fleet/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add larcane97/clausona --skill orca-fleet -a cursor2Manually: put the files in place
.cursor/skills/orca-fleet/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install larcane97/clausona orca-fleet2Manually: put the files in place
.github/skills/orca-fleet/SKILL.md1Skills CLI (Vercel)
npx skills add larcane97/clausona --skill orca-fleet -a gemini-cli2Platform CLI
gemini skills install https://github.com/larcane97/clausona --path plugins/orca-fleet/skills/orca-fleetManually: put the files in place
.devin/skills/orca-fleet/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add larcane97/clausona --skill orca-fleet -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about orca-fleet
How do I install orca-fleet in Claude Code?
Run npx skills add larcane97/clausona --skill orca-fleet -a claude-code. The skill file lands at ~/.claude/skills/orca-fleet/SKILL.md.
What does orca-fleet do?
It launches several coding agents in parallel inside Orca worktrees and has clausona give each one its own profile — a Claude or Codex account, or an API model. It then watches their screens, reads replies and retires them.
What does orca-fleet need to work?
Orca open with runtimeReachable: true, the repo listed in Orca, and a remote on that repo. The fleet-core skill must be installed too — without it orca-fleet stops and asks for it.
Source text
SKILL.md · MIT
---
name: orca-fleet
description: Run several coding agents in parallel in Orca worktrees, each under its own clausona profile (another Claude Code or Codex account, or an API model such as GLM or DeepSeek), then watch them, check their work and retire them. Use when the user works in Orca and wants work spread across accounts or models, when one account's limits would slow a fan-out, or says "split this across my accounts in Orca", "run these on DeepSeek in Orca".
---
# Orca fleet on clausona profiles
Orca runs agents side by side in git worktrees and lists them in its sidebar. clausona puts each
terminal's agent on the profile you choose.
## 0. Load the shared rules
Load the `fleet-core` skill first and follow it; this skill only adds the Orca steps. In Claude
Code, invoke it with the Skill tool. If that fails, or you run in Codex, read the first of these
files that exists, where `<base>` is this skill's base directory:
- `<base>/../../../fleet-core/skills/fleet-core/SKILL.md`
- `<base>/../../../../fleet-core/*/skills/fleet-core/SKILL.md` (if several versions match, read the
highest)
If none exists, stop and tell the user to install it: `claude plugin install fleet-core@clausona`
in Claude Code, or `codex plugin add fleet-core@clausona` in Codex.
## 1. Before anything
Stop and tell the user what is missing if any of these fails.
1. `orca status` shows `runtimeReachable: true`. If Orca is not open, ask the user to open it.
2. `orca repo list --json` lists the repo. If not, ask before adding it with
`orca repo add --path <repo> --json`: it adds the repo to the user's Orca sidebar.
3. The repo has a remote: workers push their branches.
Pass `--json` and read handles and paths from the reply; never guess them. Orca runs on macOS,
Linux and Windows, and the commands below are the same on each.
Orca has its own account switcher and orchestration commands. Do not use them for workers:
`clausona run` decides each worker's account. Orca also sets `CODEX_HOME` in its terminals, so a
bare `codex` there runs on Orca's account; `clausona run` overrides it.
## 2. Starting a worker
For each task, after `fleet-core` picked its profile:
1. **Worktree.** `orca worktree create --repo path:<repo> --name fleet-<task> --json`, and record
`.result.worktree.path` (under `~/orca/workspaces/` by default). Then
`orca worktree set --worktree path:<worktree> --display-name "<task> · <profile>"`, so the
sidebar shows which account runs where. Keep it under 26 characters.
2. **Terminal.** `orca terminal create --worktree path:<worktree> --json`, and record
`.result.terminal.handle`. Do not pass `--command`: the shell's start-up output can swallow it.
Do not rely on `--title` either: the shell renames the tab.
3. **Wait for the shell.** Read `orca terminal show --terminal <handle> --json` once a second until
its `lastOutputAt` is at least two seconds old, for at most 20 seconds. `orca terminal wait`
does not work for a plain shell.
4. **Start.** `orca terminal send --terminal <handle> --text "clausona run <profile> -- <args>" --enter`,
with the arguments from `fleet-core` section 4. Codex workers keep `--disable hooks`.
5. **Check it started.** After about 10 seconds, run `orca terminal show --terminal <handle> --json`.
The tool has started when `.result.terminal.title` is no longer the shell's (Claude Code sets
`✳ Claude Code`), or when `orca worktree ps --json` lists an agent under the worktree. The
`preview` field shows the screen, but it can lag behind a full-screen app that is still
starting, so never resend the launch line on the preview alone: a line sent to a running
Claude Code becomes its first prompt. Send it once more only when the title is still the
shell's after 20 seconds and the preview shows the launch line never ran. Otherwise tell the
user what the screen shows.
6. **Folder trust.** The first worker of a profile in a repo that profile never trusted asks
whether to trust the folder. Answer only that question, and only about this repository:
- Claude Code ("Is this a project you created or one you trust?"): the highlighted answer is
"No, exit". Send the down arrow, `orca terminal send --terminal <handle> --text $'\e[B'`
(PowerShell: `--text "$([char]27)[B"`), then `orca terminal send --terminal <handle> --enter`.
- Codex ("Trust this folder?"): the highlighted answer is "1. Trust and continue". Send
`orca terminal send --terminal <handle> --enter`.
7. **Brief.** Write it as `fleet-core` section 5 says, then
`orca terminal send --terminal <handle> --text "Read .fleet-brief.md in this folder and do what it says." --enter`,
and start waiting on it (section 3). In Codex, wait only once every worker has its brief.
8. **Record** the handle, worktree, branch and profile in the table.
Start workers on the same Claude Code profile one at a time, each after the previous one shows its
first output.
The user can open any worker's tab in Orca, read along and type into it at any time.
## 3. Waiting and reading
- **Wait:** right after each send, run
`sleep 5; orca terminal wait --terminal <handle> --for tui-idle --timeout-ms 1800000`
(PowerShell: `Start-Sleep 5; orca terminal wait …`). In Claude Code, run it as a background task.
The pause matters: right after a send the worker has not started, its screen is still idle, and
`tui-idle` would return at once. The wait returns when the worker's screen goes idle: its turn
ended, or it waits at a prompt.
- **Check it really stopped:** for a Claude Code worker, `orca worktree ps --json` lists the agent
under its worktree with `state` and `lastAssistantMessage`, from Orca's hooks (clausona shares
them across profiles). If `state` is still `working`, wait again without the pause. Codex workers
do not appear there; read their screen.
- **The reply:** `lastAssistantMessage` is a Claude Code worker's last reply, up to its first 8000
characters. Look for the DONE or BLOCKED line there first. When the reply is longer, its last
line is cut off: then, or when the field is missing, use `fleet-core`'s `last-reply.mjs`
(`fleet-core` section 8).
- **Read:** `orca terminal show --terminal <handle> --json`, field `.result.terminal.preview`. It
shows the current screen, including Claude Code's and Codex's full-screen views, once they are up;
`orca terminal read` returns only scrollback.
- **Follow-up:** write the file, then
`orca terminal send --terminal <handle> --text "Read .fleet-followup-<n>.md in this folder and do what it says." --enter`,
and wait as above.
- **After a timeout:** read the screen. If the worker still works, wait again without the pause.
- **In Codex** (one foreground wait at a time, three minutes each): give every worker its brief
before you wait on any, then wait on each unfinished worker in turn with
`orca terminal wait --terminal <handle> --for tui-idle --timeout-ms 180000`. Keep the five-second
pause only for a worker you sent something to in the last five seconds.
Orca has no "until it works again" wait. For a worker the user is answering, follow `fleet-core`
section 7.
## 4. When an account runs out
1. Create a new terminal in the same worktree and start the new profile there, as in section 2,
steps 2 to 7, with `fleet-core` section 9's brief.
2. `orca terminal close --terminal <old handle>`.
3. `orca worktree set --worktree path:<worktree> --display-name "<task> · <new profile>"`, so the
sidebar names the new account. Keep it under 26 characters, as in section 2.
## 5. Retiring
After `fleet-core` section 11's checks, run `orca worktree rm --worktree path:<worktree> --json`.
Never add `--force`. Orca refuses a worktree with changes ("Failed to delete worktree"); then keep
the worker and report why. When it succeeds, Orca closes the worktree's terminals and **deletes its
local branch** too, so only the pushed branch remains: never retire before the push check. Confirm
the worktree directory is gone.
Never close terminals or remove worktrees you did not create.
© larcane97 · MIT · larcane97/clausona