A run belongs to whoever launched it and carries their color wherever it appears. Two runs in one file get a warning rather than a lock, and the timeline keeps the record of who did what.
On a tailnet, Tailscale has already proven who the teammate is. They link and wait as a pending collaborator until an admin approves them, unless the server runs with --tailnet-auto-join. From outside a tailnet an admin mints a one-time code, and whoever redeems it is a collaborator immediately.
Steer covers attaching with write access, injecting, approving, pausing and resuming. Kill covers killing and closing.
| ROLE | OWN RUNS | OTHERS' RUNS | WORKSPACE |
|---|---|---|---|
| viewer | - | view | read the feed |
| collaborator (default) | everything | view, steer, kill | launch runs, push, use templates |
| admin | everything | everything | members, workspaces, budgets, templates, settings |
Teammates can steer each other's agents with no setup, and every privileged act is attributed rather than prevented.
Scoped commands take --workspace and default to it when there is exactly one.
| COMMAND | WHAT IT DOES |
|---|---|
| aether runs | Every run you can see, colored by owner. --attention lists only the ones waiting on a human. |
| aether who | Who is online and which runs they are watching. |
| aether attach <run> | Raw PTY passthrough. Several people at once; writing needs steer. |
| aether inject <run> <message> | Push an instruction into a running agent as a banner in your member color. |
| aether handoff <run> <member> | Transfer ownership, notifications and cost attribution to someone else. |
| aether inbox | The shared approval queue. Any steer-holder can decide. |
| aether timeline | The workspace's whole history. --jsonl exports it. |
Every member gets a stable color from a colorblind-safe palette when they join, and aether member color <#rrggbb> overrides it.
A workspace carries a hard cap and a soft warning in dollars. At the cap new runs are refused while the ones already running finish.
Cost reports break spend down per member and per run. A harness that reports no token usage is counted as unmetered and labelled that way, so the total reads as a floor rather than a guess.
The container boundary, the local gateway, and run-to-run coordination.