Operate your server
Keep ccr-cloud running: restart it, update it, back it up and watch host resources. Commands on this page run on the server, in the ccr-cloud folder, as the service user.
#Where things run
Setup starts the control plane in a tmux session named ccr-cloud. Each task's runner runs in its own tmux session, so tasks keep running while you restart or update the control plane.
tmux attach -t =ccr-cloud # view the control plane console; detach with Ctrl-b, then d#Restart the service
Restart after editing server.env or updating the code. Stopping the control plane doesn't stop tasks; their runners reconnect when it comes back.
tmux kill-session -t =ccr-cloud
npm run setup -- --start
npm run doctor -- --servicenpm run setup -- --start never restarts a service that's already running, so stop it first.
#Update ccr-cloud
tmux kill-session -t =ccr-cloud # stops the control plane only, not task runners
git pull --ff-only
npm ci
npm run setup -- --start
npm run doctor -- --serviceRefresh the browser afterwards. If the app shows missing features or not found errors after an update, an older control plane is probably still running; see Troubleshooting.
In Docker mode, also rebuild the session image with npm run image.
#After a reboot
A reboot stops tmux, so it stops the control plane and every task. ccr-cloud doesn't install a boot service yet. After the server starts:
- Run
npm run setup -- --start. - Start Tailscale Serve or your Cloudflare tunnel again if you use one.
- Open each task you want to continue and select Resume session.
#Back up your data
Back up the data directory, ~/.local/share/ccr-cloud by default, or wherever CCR_CLOUD_DATA points. It holds the owner token, task records and logs, task workspaces with uncommitted edits, saved projects, push keys and registered devices.
Keep it private: it contains credentials and task content. Task branches alone don't preserve uncommitted work. Never delete the data directory to fix a login problem.
#Logs
| What | Where |
|---|---|
| Control plane | tmux attach -t =ccr-cloud, or tmux capture-pane -p -S -200 -t =ccr-cloud: |
| A task's runner | DATA_DIR/host/SESSION_ID/runner.log |
| A task's files | DATA_DIR/host/SESSION_ID/workspace |
| Setup details | npm run setup -- --verbose |
#Check host resources
npm run resourcesSetup, doctor and service startup run the same read-only check. It warns, and never blocks or deletes anything, at these thresholds:
| Resource | Warning | Critically low |
|---|---|---|
| Memory | Under 1 GiB available, or under 2 GiB total | Under 256 MiB available |
| Disk | Under 5 GiB or 10% free | Under 1 GiB or 3% free |
| Inodes | Under 5% or 1,000 free | |
| CPU | One-minute load above twice the CPU count |
If you see warnings, run fewer tasks at once or add capacity. Linux memory uses MemAvailable. Disk checks cover the data directory, your repository roots and, in Docker mode, default Docker storage.
#Rotating credentials
Each task snapshots its environment when it's created, and Resume reuses that snapshot. After rotating an environment-based credential, start new tasks to pick it up.