Features

Disposable task machines

`1vm task run` clones a golden, waits for it to be ready, runs your command and disposes of the machine — with a snapshot on each side of the work.

1VMTool — Disposable task machines

Why it matters

A test that has to run on a clean machine usually runs on a dirty one instead, because building a clean machine costs more than the test does. When the clone is free, the clean machine wins.

What changes

Without it

  • You reuse one test VM and hope the last run did not leave anything behind.
  • Or you build a fresh one and wait minutes for it, so you do it rarely.
  • Debugging a failure means guessing at what state it started from.

With 1VMTool

  • Clone → ready → exec → dispose, in one command, from a pinned golden.
  • before-task and after-task snapshots bracket the run, so a failure is inspectable.
  • Nothing survives the command unless you asked it to.

How it works

  1. Start from a golden

    Pin a configured machine as a golden with `1vm template pin`. Every task clones it as an APFS linked clone, so the copy costs about a millisecond and almost no disk.

  2. Wait for ready, not for time

    The runner polls SSH on Linux or the guest agent on Windows rather than sleeping a guessed number of seconds.

  3. Bracket the work

    A snapshot is taken before the command and after it. If the run fails, both states are still there to compare.

  4. Dispose

    The machine is deleted when the command exits. `1vm agent gc` catches anything an interrupted run left behind.

What it covers

  • `1vm task run -- <cmd>` for the whole clone-and-dispose loop
  • Linked clones from any pinned golden
  • Automatic before-task and after-task snapshots
  • Readiness polling over SSH or the guest agent
  • Available over MCP as tasks_run and tasks_start

What you get out of it

  • Run a test on a genuinely clean machine every time
  • Keep CI-shaped work on your own Mac instead of a paid runner
  • Stop reasoning about what the last run left behind

Try it on your own Mac

Every screen states its limits before you commit to anything.