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 (⌘,) → Agents → Skills → Copy, 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