See the run
Follow execution step by step, open any event, and read the output that produced the current state.
Coding agents loop, drift and break things when nobody is watching. Run every task in its own workspace, see each step as it happens, and step in the moment a run starts to fall.
Follow a task from launch to output. Inspect the steps, see where it stopped, and choose what happens next.
FAIL test/checkout.spec.ts ✕ totals match at 23:59 local time Expected 107.99 Received 108.00 ✕ applies discount before tax ✕ rounds per line item Tests: 3 failed, 125 passed
NOTE → The failure depends on the time zone. Pin the test clock to UTC; don't change total.ts.
Three controls every autonomous run should ship with. Each one maps to something the operator can actually do.
Follow execution step by step, open any event, and read the output that produced the current state.
Decide how a task may operate before it starts: time, compute, network and where it can write.
Pause a run, roll it back to a snapshot, add guidance and resume. Or stop it outright.
Sample controls. Pause, snapshots and limits are separate capabilities; show the ones your runtime supports.
APHELION sits between your agent and the machine it works on. Your agent keeps its prompts, tools and model; every run gets a workspace, an event stream and an off switch.
// Start a run in its own workspace
const run = await aphelion.runs.create({
agent: "./agents/coder",
repo: "github.com/acme/storefront",
task: "Fix the flaky checkout total test",
limits: { timeout: "30m", cpu: 2, memory: "4GB" },
network: { allow: ["github.com", "registry.npmjs.org"] },
snapshots: "every-step",
});
// Watch it, and step in when it drifts
for await (const event of run.events()) {
if (event.type === "loop.detected") {
await run.pause();
await run.restore(event.lastGoodSnapshot);
await run.resume({ note: "Pin the test clock to UTC." });
}
}
# Start a run in its own workspace
run = aphelion.runs.create(
agent="./agents/coder",
repo="github.com/acme/storefront",
task="Fix the flaky checkout total test",
limits={"timeout": "30m", "cpu": 2, "memory": "4GB"},
network={"allow": ["github.com", "registry.npmjs.org"]},
snapshots="every-step",
)
# Watch it, and step in when it drifts
for event in run.events():
if event.type == "loop.detected":
run.pause()
run.restore(event.last_good_snapshot)
run.resume(note="Pin the test clock to UTC.")
# Start a run in its own workspace
$ aphelion run ./agents/coder \
--repo github.com/acme/storefront \
--task "Fix the flaky checkout total test" \
--timeout 30m --cpu 2 --memory 4GB \
--allow github.com,registry.npmjs.org
✓ rn_7Q2F started in ws-0417 · streaming events
# Step in from another terminal
$ aphelion pause rn_7Q2F
$ aphelion restore rn_7Q2F snap_03
$ aphelion resume rn_7Q2F --note "Pin the test clock to UTC."
runs.create()One call starts a task in a fresh workspace with your repo, limits and network policy.run.events()Commands, file changes, tests and outputs, streamed as they happen.pause · restore · resumeFreeze the run, roll back to a snapshot, add guidance and carry on.run.result()The diff, logs and artifacts, plus a record of every intervention.Sample answers for this concept. Replace them with your product's real limits and terms.
Anything your agent can drive from a shell: builds, tests, package installs, scripts and headless browsers. Each run starts from your repository and the toolchain image you declare.
One workspace per run, with its own filesystem, processes and network policy. Nothing is shared between runs unless you mount it explicitly.
The workspace is discarded when a run ends. Logs, events, snapshots and artifacts are kept for 30 days. Persistent volumes are opt-in.
Pause, resume, restore a snapshot, send guidance to the agent, and stop. Snapshots are taken at step boundaries, so a restore rolls back files and the working tree to that point.
You set runtime, CPU, memory, disk and network per run or per policy. The defaults are 30 minutes, 2 vCPU, 4 GB and no outbound network.
By workspace-seconds while a run is active, plus snapshot storage. Paused runs don't use compute.
Run every agent in a workspace you can see into. Step in before a bad run becomes a bad merge.