# Runner and desktop Launch state: **Live**. This index is generated from the public operation registry (contract v1). Domain owner: **runner**. - Canonical skill: [/agent-skills/runner-and-desktop/SKILL.md](https://neotask.ai/agent-skills/runner-and-desktop/SKILL.md) - Authenticated capability snapshot: [/api/agent/v1/capabilities](https://neotask.ai/api/agent/v1/capabilities) - Knowledge manifest: [/agent-public-contracts/v1/knowledge-manifest.json](https://neotask.ai/agent-public-contracts/v1/knowledge-manifest.json) Read the capability snapshot before a request. A page documents the contract; it does not grant access. Planned rows are listed for discovery and have no mounted route. ## Operation pages - [Enroll a local or hosted runner](https://neotask.ai/docs/api/create-runner-enrollment.md): `POST /api/agent/v1/runners`, scope `neotask:runners:write`, status **implemented, currently approval_required**, reason `human_approval_required` - [List enrolled runners](https://neotask.ai/docs/api/list-agent-runners.md): `GET /api/agent/v1/runners`, scope `neotask:runners:read`, status **implemented**, reason `none` - [Rotate a runner credential](https://neotask.ai/docs/api/rotate-agent-runner.md): `POST /api/agent/v1/runners/{runnerId}/rotate`, scope `neotask:runners:write`, status **implemented**, reason `none` - [Revoke an enrolled runner](https://neotask.ai/docs/api/revoke-agent-runner.md): `DELETE /api/agent/v1/runners/{runnerId}`, scope `neotask:runners:write`, status **implemented**, reason `none` ## Runner control plane Enrolled runners use the [runner control-plane protocol](https://neotask.ai/docs/runner/control-plane.md) and [runner OpenAPI contract](https://neotask.ai/docs/runner/openapi.yaml). These routes require the Agent bearer scope `neotask:runners:execute` plus the per-installation runner HMAC proof. The Site-owned dispatch lease, event, and result records are not MCP tools. - `POST /api/agent-runner/v1/runners/{runnerId}/confirm`: confirm the enrollment challenge - `POST /api/agent-runner/v1/runners/{runnerId}/recovery/company-disposition`: read retention authority for a local company cache - `POST /api/agent-runner/v1/runners/{runnerId}/recovery/company-export-authorize`: check current owner/admin authority for an attended company export - `POST /api/agent-runner/v1/runners/{runnerId}/recovery/export-authorize`: check current owner/admin authority for an attended run export - `POST /api/agent-runner/v1/runners/{runnerId}/recovery/disposition`: read retention authority and an exact delivered-result receipt - `POST /api/agent-runner/v1/runners/{runnerId}/heartbeat`: liveness and capabilities - `POST /api/agent-runner/v1/runners/{runnerId}/lifecycle/drain`: begin a durable lifecycle fence - `POST /api/agent-runner/v1/runners/{runnerId}/lifecycle/drain/status`: inspect server-derived drain readiness - `POST /api/agent-runner/v1/runners/{runnerId}/lifecycle/drain/resume`: release a completed drain after local success - `POST /api/agent-runner/v1/runners/{runnerId}/lifecycle/drain/abort`: release a completed drain after a safe local abort - `POST /api/agent-runner/v1/runners/{runnerId}/leases/claim`: claim queued work (`204` when idle) - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/operation-authorize`: authorize one fenced live operation - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/tool-inventory`: report the selected execution's prepared tools under its live lease - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/prepared-tools/read`: read the current prepared-tool projection under its live lease - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/approvals/request`: request a human review for one runner tool call - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/approvals/read`: read the unchanged request under its live lease - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/approvals/consume`: claim the human decision once; never retry an uncertain claim - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/approvals/checkpoint`: retain complete pending review occurrences without deciding or executing them - `POST /api/agent-runner/v1/runners/{runnerId}/controls/poll`: poll for one fenced autonomy control (`204` when idle) - `POST /api/agent-runner/v1/runners/{runnerId}/controls/{commandId}/ack`: acknowledge one fenced autonomy control - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/ack`: acknowledge or requeue - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/renew`: renew a fenced lease - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/events`: append bounded events - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/result`: write one terminal result - `POST /api/agent-runner/v1/runners/{runnerId}/leases/{leaseId}/abandon`: requeue or mark execution unknown