Returns control-plane health plus guest-runtime health.
Report or reclaim stale inspectors-managed storage.
Request body:
{
"mode": "report"
}Use "apply" to remove reclaim candidates instead of only reporting them.
Response includes:
runtime_rootcache_rootexports_rootlegacy_build_rootcandidate_countcandidates[]reclaimed[]limitations[]
Use the reclaim endpoint for inspectors-managed stale runtime directories and old qemu prep workdirs. Detached anonymous Docker volumes from older versions may still require manual Docker review because inspectors cannot attribute them safely once their original containers are gone.
Create a sandbox session.
Default request example (provider omitted -> qemu + product):
{
"width": 1440,
"height": 900
}Explicit QEMU request example:
{
"provider": "qemu",
"qemu_profile": "product",
"shared_host_path": "../taskers",
"width": 1280,
"height": 720
}Explicit Xvfb fallback example:
{
"provider": "xvfb",
"width": 1440,
"height": 900
}Optional QEMU fields:
qemu_profile:productorregressionshared_host_path: host path mounted into the guest via/shared/hostshareboot: optional explicit boot override for low-level/debug sessionscontainer_image: optional explicitqemux/qemuimage overridedesktop_user: optional default user for GUI-sensitive display actionsdesktop_home: optional home directory paired withdesktop_userdesktop_runtime_dir: optional runtime dir paired withdesktop_user
Return session metadata and whether the browser adapter is attached.
QEMU sessions may include:
live_desktop_viewreview_recordingviewer_urlruntime_base_urlbridge_statusreadiness_stateqemu_profiledesktop_userdesktop_homedesktop_runtime_dir
Stop the session and clean up child processes/containers.
Default storage semantics:
- session-owned runtime storage is deleted on normal teardown,
- reusable qemu assets stay under cache,
- retained evidence should be treated as explicit export/pin state.
Return the latest desktop observation, including summary, raw, screenshot metadata, and action history.
Return the latest screenshot as image/png for screenshot-capable sessions, including xvfb and qemu fallback/action planes.
Return the canonical live desktop stream for qemu product sessions, including proxied noVNC assets and websocket upgrades.
Non-stream sessions return a structured live_desktop_view_unavailable error instead of pretending they have a live desktop stream.
Session metadata now includes:
mode:stream,screenshot_poll, orunavailablestatus:ready,degraded,stale, orunavailablecanonical_url: control-plane path the UI should renderdebug_url: optional raw provider/debug URLmatches_action_plane: whether the human view matches the active action planereason: explanatory fallback/unavailability textrefresh_interval_ms: screenshot polling cadence when relevant
Session metadata may also include:
mode:sparse_timelineorunavailablestatus:active,idle,exported, orunavailableretention:ephemeral_until_exportortemporary_postmortem_pinevent_count: number of canonical review timeline entriesscreenshot_count: number of deduplicated screenshot assets retained in the runtime/export bundleapprox_bytes: approximate review bundle sizelast_captured_at: latest review capture timestampexportable: whether the session can currently export a durable review bundleexported_bundle: optionalArtifactRefpointing at the latest exported bundlepostmortem_retained_until: optional bounded retention timestamp for failed/postmortem sessionsreason: explanatory text when review recording is unavailable
V1 review recording is intentionally not default video capture. Inspectors records a sparse review bundle for qemu product sessions: review.json, timeline.jsonl, and deduplicated screenshots stored only at meaningful action/state boundaries.
Export the current sparse review bundle into the durable artifacts/exports/ tier. This route is available for qemu product sessions in v1.
Response example:
{
"bundle": {
"kind": "review_bundle",
"path": "/absolute/path/to/artifacts/exports/<session-id>-review",
"mime_type": null
},
"review_recording": {
"mode": "sparse_timeline",
"status": "exported",
"retention": "ephemeral_until_export",
"event_count": 18,
"screenshot_count": 7,
"approx_bytes": 16384,
"last_captured_at": "2026-04-15T11:12:13Z",
"exportable": true,
"exported_bundle": {
"kind": "review_bundle",
"path": "/absolute/path/to/artifacts/exports/<session-id>-review",
"mime_type": null
},
"postmortem_retained_until": null,
"reason": null
}
}Return runtime capabilities plus browser-adapter availability details.
Run one action. Returns an ActionReceipt or a structured error.
Desktop-sensitive action notes:
open_appaccepts optionalrun_as_userrun_commandaccepts optionalrun_as_userrun_as_user: "desktop"resolves to the session's configured desktop user when available
Example GUI-safe Taskers launch in a qemu product guest:
{
"kind": "run_command",
"command": "LIBGL_ALWAYS_SOFTWARE=1 GDK_BACKEND=x11 nohup /home/ubuntu/taskers-bundle/bin/taskers >/tmp/taskers.log 2>&1 &",
"run_as_user": "desktop"
}Create a task bound to a session.
The simplest supported workflow is:
POST /api/sessionswith provider omittedGET /api/sessions/:iduntil the session is actionablePOST /api/tasksorPOST /api/sessions/:id/actions- Observe
live_desktop_view/GET /api/sessions/:id/observation POST /api/sessions/:id/review/exportwhen you need durable later-review evidenceDELETE /api/sessions/:idunless you explicitly want to retain exported evidence
Read task status and latest receipt.
Update task lifecycle state.
Return current tasks plus per-session action history.
Return runtime health and current session count.
Create a guest session. Supported providers:
qemu(default product path whenprovideris omitted)xvfb(explicit local/dev fallback)display
For QEMU, the host-side provider eventually attaches a remote runtime session using either:
displayfor the full-desktop product guestxvfbfor the lighter regression fixture
viewer_only: VM viewer is reachable but there is no actionable bridge yetbridge_waiting: bootstrap / health checks are runningruntime_ready: guest bridge is healthy and direct runtime actions are allowedfailed: bootstrap or health checks failed
bootingdesktop_readybridge_listeningbridge_attachedruntime_readyfailed
runtime_ready should only appear after /health succeeds and the host has attached a usable remote runtime session.
{
"error": {
"code": "provider_bridge_unavailable",
"message": "actions require a guest runtime bridge inside the VM",
"category": "provider",
"details": {
"provider": "qemu",
"qemu_profile": "product",
"viewer_url": "http://172.17.0.4:8006",
"bridge_status": "bridge_waiting",
"readiness_state": "bridge_listening"
}
}
}