T3 Code
T3 Code runs coding agents such as Claude Code. The T3 Code Solution installs a headless T3 Code server as one app environment. You reach it from the T3 desktop, web and mobile apps, and agents and other programs can drive it through its MCP endpoint.
The image installs a pinned, unmodified T3 Code stable release, plus Claude Code, git and gh. Its source, the
upgrade policy and an optional Slack and REST bridge live in
quaveone/t3-code-kit.
What the Solution creates
| Setting | Value |
|---|---|
| Image | ghcr.io/quaveone/t3-code:stable, with image auto-deploy on |
| Port | 3773, health check GET / |
| Resources | 8 zClouds (4 CPU, 4 GB of memory) |
| Storage | A persistent volume at /data, starting at your account's default disk size |
| Containers | 1 |
The volume holds everything the server keeps: threads, projects, pairings, cloned repositories, agent worktrees, Claude Code settings and any tools the agents install.
Install
From the dashboard
- Start a new project and choose Solutions.
- Pick T3 Code and fill in the inputs below. Both are optional, and you can set them later as environment variables.
- Confirm. When the environment is running, follow Pair your apps.
From the Public API or MCP
curl -X POST \
-H 'Authorization: YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"accountId": "ACCOUNT_ID",
"solutionSlug": "t3-code",
"appName": "T3 Code",
"region": "us-5",
"inputs": {
"claudeCodeOauthToken": "CLAUDE_CODE_TOKEN",
"githubToken": "GITHUB_TOKEN"
}
}' \
https://api.quave.cloud/api/public/v1/solutions
With MCP, call list-solutions, then create-solution with solutionSlug: "t3-code".
Inputs
| Input | Key | Required | Stored as |
|---|---|---|---|
| Claude Code token | claudeCodeOauthToken | No | Secret env var CLAUDE_CODE_OAUTH_TOKEN |
| GitHub token | githubToken | No | Secret env var GH_TOKEN |
Claude Code token
Agents use your Claude Pro or Max subscription. Create the token on any machine with a browser:
claude setup-token
Sign in, approve, paste the code back, and copy the token it prints. The token starts with sk-ant-oat01-, is valid
for one year and is shown only once. The image removes ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN at start, so
agents never fall back to per-token API billing.
A subscription belongs to one person: install one T3 Code server per person.
GitHub token
Agents use it to clone repositories and push branches. gh reads GH_TOKEN, and git uses gh as its credential
helper. Give it write access only to the repositories the agents work on, for example a machine account that is a
collaborator on those repositories, or a fine-grained token limited to them.
Environment variables
Change them on the environment like any other variable and redeploy.
| Variable | Secret | Meaning |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN | Yes | Claude subscription token. |
GH_TOKEN | Yes | GitHub token for clone and push. |
GIT_AUTHOR_NAME, GIT_AUTHOR_EMAIL | No | Identity on the agents' commits. |
MCP_SERVERS_JSON | No | Remote MCP servers to add to Claude Code at start. See Give agents an MCP server. |
T3_PORT | No | Server port. Default 3773; keep it in sync with the app port. |
Pair your apps
-
Open the environment's Console and run:
as-t3 t3 pair -
Open the printed link, or scan the QR code, from the T3 desktop or mobile app. Opening the link in a browser pairs the T3 web app.
The server also prints a one-time pairing link in its logs every time it starts, so treat its logs as sensitive.
Requests without a paired session get 401.
The Console opens as root. Prefix T3 and Claude commands with as-t3 so the files they create belong to the
server's user.
Add projects
In the T3 app, choose Add project and clone a repository, or ask an agent in a thread to clone one. Repositories are stored on the volume and stay there across deploys.
Give agents an MCP server
MCP_SERVERS_JSON names each server, its URL, and the environment variable that holds its bearer token. For example,
to let agents use the Quave ONE MCP:
MCP_SERVERS_JSON={"quave-one":{"url":"https://mcp.quave.cloud/","bearerEnv":"QUAVE_ONE_MCP_KEY"}}
QUAVE_ONE_MCP_KEY=<an MCP key, stored as a secret>
Create a dedicated MCP key with only the scopes the agents need. Check it in the Console with
as-t3 claude mcp list.
One container
T3 Code keeps its state in SQLite on the volume, and SQLite allows one writer. Keep containers at 1:
- The persistent volume already turns off blue-green deploys and limits the environment to one container.
- Do not move the server to a shared volume or an object storage volume.
- To serve more people or more parallel work, install another T3 Code server.
Capacity
Memory is the limit. Each active agent thread uses about 300 MB on small repositories. Measured on the default size (4 CPU, 4 GB):
| Parallel threads | Result |
|---|---|
| 1 to 8 | All completed. CPU stayed under one core. Memory went from about 0.6 GB idle to about 3 GB. |
Plan for up to 8 parallel threads on small repositories, or 6 on repositories with heavy installs or builds. For more, add another server.
Disk
The volume starts at your account's default disk size, and repositories, dependencies and worktrees fill it quickly. Raise the disk in Settings → Resources, or turn on disk autoresize. Contact support if you need a larger volume than your account allows.
Snapshots and restore
- In Snapshots, set the recovery point interval to every hour.
- Run Validate on a recovery point to check that it restores.
- To recover, restore a recovery point into a new environment, open it in the T3 app, and check your projects and threads.
Alerts
Create alerts on:
- memory above 85% for 5 minutes (too many parallel threads);
- CPU above 90% for 10 minutes;
- disk usage above 80%.
Updates
Updates are automatic. The image tag :stable moves to a new image only after it passes the kit's tests, and every new
T3 Code and Claude Code stable release is picked up within hours. The Solution turns on
image auto-deploy, so Quave ONE deploys each new :stable digest within minutes.
- Your data stays on the volume. T3 Code migrates its own data when the new version starts.
- The environment runs one container, so a deploy restarts it: threads that are running at that moment stop and can be continued afterwards. Expect about a minute of downtime.
- To choose when updates happen, turn off image auto-deploy in the environment settings and redeploy
:stableyourself, or pin an exact tag from the t3-code-kit images. - To roll back, restore the last snapshot from before the update into a new environment with an earlier exact tag. Deploying an older version over the same volume is not supported.
The release process has the details.
Slack and REST (optional)
The t3-code-kit bridge is a small separate app that starts and continues T3 threads from a REST API and from Slack mentions. Install it as a second app with its own volume. It signs in to the server's MCP endpoint once and is approved in T3.
Security
- Every client must be paired, and every outside agent must be approved in T3. Review and revoke them in the T3 app under Settings → Sharing & access.
- Agents run with every secret of the environment in reach: the Claude token, the GitHub token and any MCP keys. Scope each one to what the agents need.
- Account members with Secrets Access can read secret environment variables. Install the server in an account where that is acceptable for the person whose subscription it uses.
Troubleshooting
| Symptom | What to do |
|---|---|
A thread fails with Not logged in · Please run /login | Set or renew CLAUDE_CODE_OAUTH_TOKEN and redeploy. |
| Agents cannot push | Check GH_TOKEN has write access to the repository. In the Console: as-t3 gh auth status. |
| An MCP server is missing in Claude | Check MCP_SERVERS_JSON is valid JSON and its token variable is set, then as-t3 claude mcp list. |
| Memory alert fires | Fewer threads in parallel, or install another server. |
Files in /data owned by root | They were created from the Console without as-t3. The next start fixes their ownership. |