Skip to content

Orchestrating Agents

One agent, one terminal, one thing at a time — that is the default, and it is why you end up babysitting. Orchestration is the other way round: your agent opens panes beside itself, starts work in them, hands a task to a second agent, and comes back when everything is done.

📸 TL;DR

  • Install /otty from Settings (⌘,) → AgentsSkillsCopy, then paste it into your agent.
  • Turn on Allow agents to type into panes in the same dialog — half of orchestration is typing into another terminal.
  • Then ask for it in plain words: "run the test suite in a split while you keep going", "get a second agent reviewing the diff".

What it actually does

/otty is the skill that teaches your agent Otty's whole workspace, not one verb of it. Where /wait, /tell and /open each close one gap, this one composes them:

The agent canUsing
See every window, tab and pane, and which agent sits in whichotty pane list
Open a pane beside itself, at a size, in a directoryotty pane split
Run a command there and get its exit code — or its outputotty pane run / exec
Read what is on a screen, including a TUI or a pagerotty pane capture
Start a second coding agent and give it a tasksplit --command + send-text
Block until a build, a pane, a tab or another agent is idleotty pane wait / otty watch:<agent>
Tidy up the panes it openedotty pane close

Everything runs against the Otty you are already sitting in. Nothing is simulated, and there is no daemon to start: the skill is instructions, and the CLI it drives ships with the app.

Install it

  1. Open Settings (⌘,) → Agents, scroll to the Skills card.
  2. Click Copy on /otty.
  3. In the dialog, leave the switch Allow agents to type into panes on. Without it every send-text is refused and the multi-agent half of the skill fails on first use.
  4. Paste into your agent and send. It writes the skill file itself.

The Skills card in Settings ▸ Agents

The name is yours to change before copying — install it as otty-drive if /otty collides with something you already have. See naming.

You rarely have to type it

An agent picks a skill by reading its description, and this one is named after the word you already use for the terminal. Say "run that in a split" or "have Otty put a second agent on it" and the skill is pulled in on its own — /otty is there for when you want to be explicit.

Three things to ask for

Work beside you, not instead of you

"Run the full test suite in a split, keep reviewing the auth module while it goes, and tell me if anything fails."

The agent splits a pane, starts the suite there with otty pane run, and carries on with the review. run blocks on the pane, not on your conversation — so the test output is on screen the whole time, in a real terminal you can scroll, and the agent still knows the exit code when it lands.

Fan out, then join

"Build and lint in parallel, then report which one broke."

Two panes, two commands, one otty pane wait --tab that returns when both are idle. This is the shape that saves real time: the wait is a single blocking command, not a poll-and-guess loop, so the agent is not burning turns checking.

Hand work to another agent

"Get a second agent reviewing the diff while you finish the migration."

The agent opens a pane, starts claude (or codex, or opencode) in it, waits for it to come up, types the prompt, and waits for it to go idle — then reads the reply back with otty pane capture and folds it into what it tells you.

You see all of it happen. The second agent is a normal pane with a normal session: you can take it over, scroll it, answer a question it asks, or close it.

Sessions get a badge

A pane running an agent shows its state on the tab — spinner while it works, hand while it waits for input. See Monitor Tasks for the dashboard view of several at once.

What makes the waiting reliable

An agent that "waits" by sleeping and re-checking is guessing, and it guesses wrong on exactly the long builds where it matters. Otty gives the skill real completion signals instead:

  • Shell panes report through Shell Integration (OSC 133) — the terminal knows when a command started and finished, so otty pane wait returns on the fact, not on a timer.
  • Agent panes report through the agent's own lifecycle hook. That matters because an agent owns its terminal for its whole life: a shell-level view of it would read "busy forever". otty watch:claude <session> returns when the agent says it is idle.

Where a pane can report neither, the wait exits immediately and says so rather than hanging — and the skill is told to report that verbatim instead of falling back to a sleep. If you see it, the missing piece is almost always an agent integration that was never installed, or one installed after the session started.

Permission and safety

Typing into a pane is off by default. The /otty dialog carries the switch (ipc-allow-send-keys), which is also in Settings → Advanced → IPC Allow Send Keys. Everything else — splitting, running, capturing, waiting — works without it.

Some limits are not yours to turn off from the skill:

  • Panes in an SSH session or in sudo mode refuse typed input unless you additionally enable IPC Allow Sensitive Sessions.
  • The skill is instructed to close only panes it opened itself, and never the one it is running in — closing that would end the conversation with it.
  • Every pane it opens is opened without stealing focus, so work appears beside you rather than yanking you out of what you were typing.

Doing it yourself

The skill is a wrapper around commands you can run by hand — useful when you want a shell script, a Makefile target, or a CI step to drive the same layout:

bash
otty pane split --direction right --cwd "$PWD" --no-focus --json
otty pane run --pane p_19f0bfe5ce9_1a -- cargo test
otty pane wait --tab t_19f0bfe5ce9_1a --timeout-secs 600
otty watch:claude 226dd916-67cb-443c-ae87-04d5b6761a9b

Using the CLI in your Shell covers the whole surface, and the CLI reference has every flag and exit code.

See also

  • Skills — the three single-purpose skills /otty builds on, and how installing any of them works.
  • Setup — connecting an agent so its state can be waited on.
  • Monitor Tasks — badges and the dashboard when several agents are running at once.

Otty