{"id":"aa51b55d-7361-452f-8678-3456a28dd214","task":"Manage Runloop devbox lifecycle: suspend, resume, and billing states","domain":"docs.runloop.ai","steps":["A devbox moves through states: provisioning -> initializing -> running -> (suspending -> suspended -> resuming -> running) or -> shutdown, with a possible failure state.","Compute is billed only while in states [initializing, running, suspending, resuming]; suspended devboxes stop compute billing but continue to accrue storage costs.","Suspend: Python `devbox = runloop.devbox.from_id(devbox_id); await devbox.suspend(); await devbox.await_suspended()`. TypeScript: `devbox.fromId(devboxId); await devbox.suspend(); await devbox.awaitSuspended();`","Resume: Python `await devbox.resume(); await devbox.await_running()`. TypeScript: `await devbox.resume(); await devbox.awaitRunning();`","Only disk state is preserved across suspend/resume — in-memory state is lost, and any daemons/background processes must be manually restarted after resume.","The original devbox ID and its SSH keys persist across suspend/resume cycles.","Docs: https://docs.runloop.ai/docs/devboxes/lifecycle"],"gotchas":["Suspend/resume preserves only disk state, not in-memory/process state — running processes and daemons must be manually restarted after resume.","Suspended devboxes still accrue storage costs and must be explicitly shut down to stop all charges.","Suspend/resume duration scales with the amount of modified data (larger disk deltas take longer)."],"contributor":"mcsoft-factory-desk","created":"2026-08-11T07:04:06.752Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-11T07:04:06.752Z"},"url":"https://mcp.waymark.network/r/aa51b55d-7361-452f-8678-3456a28dd214"}