> ## Documentation Index
> Fetch the complete documentation index at: https://tesser.sh/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Let your agent drive the boxes

> Install the tesser skill so Claude Code or Codex can run the boxes for you

Tesserc is designed to be driven by a coding agent. The agent edits files on
your laptop as it normally does, and when it needs to run something it calls
`tesser` the same way it would call `git` or `pnpm`. You watch the result in
the browser.

## Install the skill

```sh theme={"theme":"css-variables"}
tesser skill install
```

This writes `~/.claude/skills/tesser-cli/SKILL.md`, and it is only a few lines:
a description so the agent picks it up when a box is what the task needs,
and an instruction to run `tesser --help` first. Nothing in it changes
between releases, so installing it once is the end of it. For an agent that
reads instructions from somewhere else, `tesser skill install --dir <path>`
writes the same file there.

## Signing in

The agent can sign in for you. When the agent runs `tesser login` and finds no
saved token, the CLI prints a sign-in link and exits instead of opening a
browser. The agent sends you the link. Open it in any browser, choose the org,
and approve. Then tell the agent you have approved it, and it runs:

```sh theme={"theme":"css-variables"}
tesser login --wait
```

The CLI collects the token, saves it the same way a browser sign-in does, and
prints the account and org it signed in as. The link works for 10 minutes.
Each `tesser login --wait` waits up to 100 seconds for the approval, so the
agent can run it again if you have not approved yet. Only approve a link that
you or your agent just made: whoever made it gets to act as you.

## The CLI is the skill

Everything the agent needs to know lives in the binary, so it is current by
construction:

* `tesser --help` is the model and the rules: what a workbench is, what
  `dev` does, that files are edited on the laptop and never on the box, that
  `rm` does not confirm.
* `tesser <command> --help` is that command's actual behavior. `tesser dev --help` says it reuses the box per (worktree, service) and waits on its own
  port; `tesser wire --help` has the two-boxes recipe; `tesser service --help` is the manifest format.
* Errors name the next command to run.

`tesser update` replaces the binary, and with it every word of the above.
There is no second copy to fall behind.

## What you do

You open the address the agent gives you (`http://box-<id>.localhost:<port>`)
when it tells you a server is up. The daemon behind that address starts
itself the first time the agent runs `tesser dev`; `tesser daemon install`
makes it a login service so it is there after a reboot too. Every page served
through the daemon has a small panel in its corner that lists your boxes, so
when the agent has several branches running you can focus one and see it on
bare `localhost:<port>`, without using the terminal.

## A typical session

```sh theme={"theme":"css-variables"}
tesser exec -- pnpm install
tesser exec -- pnpm test
BOX=$(tesser dev web)          # the agent tells you to open http://localhost:3000
# the agent edits files, then:
tesser sync "$BOX"
tesser logs "$BOX" -f          # to read the dev server's output
tesser rm "$BOX"               # when the branch is finished
```

## Cloud agents

An agent that runs somewhere other than your laptop, such as Devin, uses the
same CLI and signs in with a token instead of a browser. An admin creates a
grant so the agent's own id token is exchanged for one, or you give it your
own token as `TESSER_TOKEN`. [Agents and CI](https://tesser.sh/docs/teams.md#agents-and-ci) has the
commands.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.