Connect the server
-
On the server, install Node.js 22 or newer and Claude Code or Codex, and
sign in to it (
claude auth login, orcodex login). On Linux, Claude Code’s sandbox also needsbubblewrapandsocat. -
In the repository agents should work in, run:
- Approve the link it prints, checking that the code matches. At a computer with a browser, press Enter to open it there. Over SSH, open the link on any device.
- Pick the agents that may start tasks there on the device’s page in Studio → Devices.
up runs one small real task and tells
you what it is doing. In a large repository this can take a minute.
On Linux servers tasks run in Claude Code only. Codex’s sandbox can’t yet keep a
task away from local services such as Docker, so it isn’t offered there.
If the sandbox can’t run on your server, up tells you what to fix. No browser on
the server is needed, and Connect a device → A server in Studio →
Devices gives a one-time command for setups with nobody at a keyboard.
Use status, logs, stop and attach <task> with the same command. attach
opens a task’s session in your terminal, outside its limits, so you can take over.
Where a task works
Each task works in its own checkout under~/.ando-tasks, on its own branch, made
from what you’ve committed. Your folder is never changed, and tasks hand work back
by pushing their branch.
A checkout also brings what a task needs that git doesn’t hold:
Uncommitted changes to tracked files are not copied, and neither is an untracked
file your repository doesn’t ignore. Nothing is taken from inside an ignored
folder, such as build output, unless
.worktreeinclude names it. In a workspace
with a node_modules in each package, only the top one comes along, so a task
may still need to run an install.
.worktreeinclude sits at the top of the repository and lists one path or
pattern per line, in the same form as .gitignore:
--in-place:
--checkout switches a folder back. A task that may not change files
works in the folder either way, since it has nothing to keep apart.
Cloud tools and sign-ins
Tasks run with the Claude Code or Codex sign-in already on the server. If the account has an~/.aws folder, a task’s aws commands use it: they read your
profiles, refresh single sign-on tokens, and follow AWS_PROFILE and
AWS_REGION when those were set in the shell where you ran up. A task cannot
change ~/.aws/config or ~/.aws/credentials. Your SSH keys, the keychain and
other tools’ sign-ins stay closed.
Keep it running
up then keeps the connector running in the background, and starts it again
after a restart, with systemd on Linux and launchd on a Mac. Run up in another
repository to add it. update moves to the newest connector, stop stops it until
the next up, and tasks that were running pick up where they left off. status --json is there for scripts. Nothing asks a question, so all of this works from a
script.
Run npx only in a repository you trust, because npx prefers what it finds where
it runs. For any other, run it elsewhere and name the repository with --folder.
In a container, or anywhere without systemd, up stays in the foreground. Make it
the container’s command, and keep ~/.config/ando on a volume so the container
reconnects without another approval.
Disconnecting the
device in Studio → Devices ends its connection for good.
Tasks run as the account that started the connector, so use an account with only
what agents need. They can’t read your other connected folders or what’s closed
in your home folder, but outside your home folder they may read what that account
can, such as /etc. A task folder can’t be your home folder or one that holds it.