v0.1.2-alpha.25 is outsee the release →
[ TEAMS ]

Several people, one machine

A solo setup is a team of one. Everyone who joins after the first identity arrives as a collaborator, who can launch runs and steer or kill anyone's.


[ JOINING ]

Everyone on one server

One workspace, everyone's runs

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.

my-server:2222 / one workspace, three people
danaadmin
ruicollaborator
anacollaborator
ssh, one identity each
WORKSPACE · myprojectevent feed · presencebudget 12.40 of 25.00
a run belongs to whoever launched it
RUN 014danarunning
RUN 015ruineeds you
RUN 016anarunning
CONFLICTboth touch auth/refresh.go
WORKSPACE TIMELINEdanasteered run-016anaapproved a package installruiinjected a note into run-015

Over a tailnet, or by invite code

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.

my-server:2222 / shell
$
$
$
$
[ ROLES ]

What each role can do

Three roles

Steer covers attaching with write access, injecting, approving, pausing and resuming. Kill covers killing and closing.

ROLEOWN RUNSOTHERS' RUNSWORKSPACE
viewer-viewread the feed
collaborator (default)everythingview, steer, killlaunch runs, push, use templates
admineverythingeverythingmembers, workspaces, budgets, templates, settings

Collaborator is the default on purpose

Teammates can steer each other's agents with no setup, and every privileged act is attributed rather than prevented.

aether member role <id> viewerfor the person who should watch and read the feed, and nothing else
the first identity is the adminand everyone who joins afterwards is a collaborator
the last admin staysit can be neither removed nor demoted
steer_others=admins_onlya workspace setting that keeps other people's runs to admins
[ WORKING TOGETHER ]

On one box

The commands a team uses

Scoped commands take --workspace and default to it when there is exactly one.

COMMANDWHAT IT DOES
aether runsEvery run you can see, colored by owner. --attention lists only the ones waiting on a human.
aether whoWho 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 inboxThe shared approval queue. Any steer-holder can decide.
aether timelineThe workspace's whole history. --jsonl exports it.

Attribution, everywhere

Every member gets a stable color from a colorblind-safe palette when they join, and aether member color <#rrggbb> overrides it.

the same colormarks run rows, inject banners, timeline dots, overlapping diff hunks and dashboard cards
steer, kill, approve, handoffand settings changes are stamped into the workspace timeline with the actor
per-run diff snapshotsfeed an overlap index, so two runs in one file are flagged on both cards
a warning, not a locknothing is blocked, and overlapping runs can message each other through their agents

Budgets

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.

my-server:2222 / workspace budget
cap 25.00 · warn 20.0012.40 spent
warn
dana6.10rui4.30ana2.00fake · unmetered, so the total reads as a floor
under the warning. Spend is attributed as it lands.
aether budget set --limit 25 --warn 20aether budget set --overrideaether cost --runs

Budgets and cost

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.

my-server:2222 / shell
$
$
$

[ NEXT ]

The container is the boundary

The container boundary, the local gateway, and run-to-run coordination.

$ curl -fsSL https://raw.githubusercontent.com/3xDevOps/Aether/main/scripts/install.sh | sh
back to the landing page