Machine state
A machine's shape — cores, memory, disk, ports — is easy to write down. What is inside it usually is not: packages someone installed, a service someone enabled, a config file someone edited. That knowledge lives in the machine, so losing the machine loses it.
Machine state moves it into git. Every machine with an agent keeps its insides as code, and the platform replays that code whenever the machine is rebuilt. Agents work the same way — they diagnose freely, but changes they make to a machine land as commits you can read and revert.
Every machine with an agent has a blueprint
Turn on the agent for a VM and the workspace gains a repo named <machine>-state. It describes what the machine is — packages, services, config files, users — as declared state, not as a log of commands someone ran. Project code stays in its own repos; this one is the machine.
my-box-state/ site.yml the play (targets the machine, runs as root) tasks/main.yml the tasks — what the machine should have README.md the conventions CHANGELOG.md
Describe the machine, don't command it
Each task says what should be true, so applying it twice changes nothing the second time. That is what makes the file replayable months later — and readable in review, because a diff shows the machine changing rather than a shell transcript.
- name: nginx is installed
ansible.builtin.package:
name: nginx
state: present
- name: nginx runs at boot
ansible.builtin.systemd_service:
name: nginx
enabled: true
state: startedA push converges the machine
Commit and push, and within about a minute the machine matches what is committed. Removing a task is how you undo it — flip present to absent, or revert the commit, and the machine follows. The result shows up in your workspace Activity either way.
$ git commit -m "install nginx: serves the API" $ git push # Activity: # applying machine state 4f2a1c9 to my-box # machine state 4f2a1c9 applied to my-box
Rebuild, and the machine comes back
This is the point of all of it. Delete a machine and its blueprint is kept on purpose. Create a machine with that name again — from the dashboard, the API, or Terraform — and the platform replays the blueprint onto it as it boots. New disk, same machine. Your machines stop being things you are afraid to lose.
# Activity, on recreate: # deleted workload my-box — its machine state is kept in my-box-state # created workload my-box (vm-ubuntu) # rebuilding my-box from its machine state 4f2a1c9 # machine state 4f2a1c9 applied to my-box
Ask whether a machine still matches
Someone logs in and changes something by hand; now the machine and its blueprint disagree. A check reports what would change without touching anything — and applying makes the machine match again.
$ curl -X POST -H "x-api-key: $LIVELLM_API_KEY" \
-d '{"plan":true}' \
https://platform.live-llm.com/v1/me/tenant/workloads/my-box/state/apply
# Activity:
# my-box has drifted from its machine state — 1 change(s) pending
# Drop "plan" to converge it back.It gives you reproducibility and a readable history: any machine can be rebuilt from its blueprint, and every change to it is a commit with a reason. It is not an undo button — reverting a commit converges the machine back, which is the right answer for packages, services and config, but not for something irreversible like dropping a database. Take a backup before that kind of change.