An autonomous agent run
This walkthrough shows the end-to-end shape of ZTD: you initiate, the agent runs
unattended in isolation, and the only thing that leaves the VM is a git branch you
can review. Every step below is implemented today — ztd cattle composes the whole
sequence into one command.
The scenario
You want an agent to attempt a change on myapp without babysitting approval
prompts and without any risk to your host.
1. Launch the VM
cd myapp
./ztd upThe guest boots with its own Docker daemon and a per-VM ephemeral SSH key. Locally your working tree is live-mounted over virtiofs; on a remote backend, sync it up:
TARGET=proxmox ./ztd mount # sshfs-syncs your tree (incl. .git) into the guestThe guest holds no forge credentials — it never talks to your forge.
2. Let the agent work
In Phase 1, cloud-init auto-launches the agent; today you start it yourself:
./ztd ssh
cd ~/myapp
claude --dangerously-skip-permissions # the agent works, builds, tests — isolated
git commit -am "attempt 1" # local commits only; no remote is contactedThe agent does its thing inside the VM — installing packages, running builds, committing — none of which can touch your host or reach your forge.
3. Pull the results back, then push from the host
The valuable output leaves the VM as git commits, pulled back to your host:
# local backend: same .git over virtiofs — the commits are already here.
TARGET=proxmox ./ztd fetch # remote: pull the guest's commits back
git log --oneline ztd/attempt-1 # review
git push origin ztd/attempt-1 # host push, YOUR creds — the guest never had them4. Destroy
./ztd downWhat this demonstrates
- The host was never at risk: no shared Docker socket, and no forge credentials in the guest — only an ephemeral SSH key that grants nothing on your forge.
- The valuable output — reviewable commits — survived; the VM did not.
- This is the cattle model and the zero-trust model working together.