owlette docs
cli

cli readiness matrix

Status as of 2026-05-02. Source of truth for registered commands is cli/src/index.ts plus cli/src/commands/**.

Legend:

  • ready - command hits a public API route today.
  • ready preview - command is registered and calls a preview transport or preview API path.
  • local - command only changes local CLI state.
  • stub - command is registered and exits 3 with the canonical stub envelope.
  • planned - public routes exist, but no owlette noun is registered yet.
  • reference page - linked when a dedicated per-command page exists; pending means the command is registered but its dedicated page is not created yet.

top-level commands

commandstatusreference pagepublic route or reason
owlette auth loginreadyauthPOST /api/cli/device-code, then POST /api/cli/device-code/poll
owlette auth statusreadyauthalias of owlette whoami; GET /api/whoami
owlette auth logoutlocalauthclears the active profile's stored credential (OS keychain / credentials.json) and any legacy config.toml token; no API call
owlette whoamireadywhoamiGET /api/whoami
owlette versionreadyversionGET /api/version
owlette rollback <roostId>readyrollbackGET /api/roosts/{roostId}, GET /api/roosts/{roostId}/versions/{versionRef}/diff, POST /api/roosts/{roostId}/rollback
owlette listenready previewpending dedicated page (Task 4.9)GET /api/events/stream?siteId=<siteId>; scoped SSE liveness transport only until production fanout ships
owlette trigger <event>readypending dedicated page (Task 4.10)direct mode posts to the caller's URL; --via-api uses POST /api/webhooks/probe?siteId=<siteId>

roost

commandstatusreference pagepublic route or reason
owlette roost push <dir>readyroostPOST /api/chunks/check, POST /api/chunks/upload-urls, signed PUT, POST /api/roosts/{roostId}/versions
owlette roost listreadyroostGET /api/roosts?siteId=<siteId>
owlette roost get <roostId>readyroostGET /api/roosts/{roostId}?siteId=<siteId>
owlette roost diff <roostId>readyroostGET /api/roosts/{roostId}/versions/{versionRef}/diff?siteId=<siteId>&against=<versionRef>
owlette roost versions <roostId>readyroostGET /api/roosts/{roostId}/versions?siteId=<siteId>
owlette roost deploy <roostId>readyroostPOST /api/roosts/{roostId}/deploy

site-scoped operator nouns

commandstatusreference pagepublic route or reason
owlette site listreadysiteGET /api/sites
owlette site get <siteId>readysiteGET /api/sites/{siteId}
owlette quota showreadyquotaGET /api/sites/{siteId}/quota
owlette quota historyreadyquotaGET /api/sites/{siteId}/quota/history?period=<period>
owlette audit-log listreadyaudit-logGET /api/sites/{siteId}/audit-log
owlette audit-log get <recordHash>readyaudit-logGET /api/sites/{siteId}/audit-log/{recordHash}

machine

commandstatusreference pagepublic route or reason
owlette machine listreadymachineGET /api/sites/{siteId}/machines
owlette machine get <machineId>readymachineGET /api/sites/{siteId}/machines/{machineId}
owlette machine deployments <machineId>readymachineGET /api/sites/{siteId}/machines/{machineId}/deployments
owlette machine reboot <machineId>readymachinePOST /api/sites/{siteId}/machines/{machineId}/commands with type=reboot_machine
owlette machine shutdown <machineId>readymachinePOST /api/sites/{siteId}/machines/{machineId}/commands with type=shutdown_machine
owlette machine screenshot <machineId>readymachinePOST /api/sites/{siteId}/machines/{machineId}/commands with type=capture_screenshot, then GET /api/sites/{siteId}/machines/{machineId}/commands/{commandId}
owlette machine live-view <machineId>stubmachineno public route yet; public-api deferred: live-view-webrtc

cortex chat

commandstatusreference pagepublic route or reason
owlette chat newreadychatPOST /api/cortex/conversations
owlette chat listreadychatGET /api/cortex/conversations?siteId=<siteId>
owlette chat send <conversationId> <message>readychatPOST /api/cortex/conversations/{conversationId}
owlette chat delete <conversationId>readychatDELETE /api/cortex/conversations/{conversationId}
owlette chat rename <conversationId> <title>readychatPATCH /api/cortex/conversations/{conversationId}

classic deployments

commandstatusreference pagepublic route or reason
owlette deploy createreadydeployPOST /api/sites/{siteId}/deployments
owlette deploy listreadydeployGET /api/sites/{siteId}/deployments
owlette deploy get <deploymentId>readydeployGET /api/sites/{siteId}/deployments/{deploymentId}
owlette deploy retry <deploymentId>readydeployPOST /api/sites/{siteId}/deployments/{deploymentId}/retry
owlette deploy cancel <deploymentId>readydeployPOST /api/sites/{siteId}/deployments/{deploymentId}/cancel
owlette deploy uninstall <deploymentId>readydeployPOST /api/sites/{siteId}/deployments/{deploymentId}/uninstall
owlette deploy delete <deploymentId>readydeployDELETE /api/sites/{siteId}/deployments/{deploymentId}

process

commandstatusreference pagepublic route or reason
owlette process listreadyprocessGET /api/sites/{siteId}/machines/{machineId}/processes
owlette process get <processId>readyprocessGET /api/sites/{siteId}/machines/{machineId}/processes/{processId}
owlette process createreadyprocessPOST /api/sites/{siteId}/machines/{machineId}/processes
owlette process update <processId>readyprocessPATCH /api/sites/{siteId}/machines/{machineId}/processes/{processId}
owlette process delete <processId>readyprocessDELETE /api/sites/{siteId}/machines/{machineId}/processes/{processId}
owlette process schedule <processId>readyprocessPOST /api/sites/{siteId}/machines/{machineId}/processes/{processId}/schedule
owlette process start <processId>readyprocessPOST /api/sites/{siteId}/machines/{machineId}/processes/{processId}/start
owlette process stop <processId>readyprocessPOST /api/sites/{siteId}/machines/{machineId}/processes/{processId}/stop
owlette process restart <processId>readyprocessPOST /api/sites/{siteId}/machines/{machineId}/processes/{processId}/restart
owlette process kill <processId>readyprocessPOST /api/sites/{siteId}/machines/{machineId}/processes/{processId}/kill

keys, users, and installer management

commandstatusreference pagepublic route or reason
owlette key createreadykeyPOST /api/keys
owlette key listreadykeyGET /api/keys
owlette key rotate <keyId>readykeyPOST /api/keys/{keyId}/rotate
owlette key revoke <keyId>readykeyDELETE /api/keys/{keyId}
owlette user listreadyuserGET /api/users
owlette user get <uid>readyuserGET /api/users/{uid}
owlette user promote <uid>readyuserPOST /api/users/{uid}/promote
owlette user demote <uid>readyuserPOST /api/users/{uid}/demote
owlette user assign-sites <uid>readyuserPOST /api/users/{uid}/assign-sites
owlette user remove-sites <uid>readyuserPOST /api/users/{uid}/remove-sites
owlette user delete <uid>readyuserDELETE /api/users/{uid}
owlette installer listreadyinstallerGET /api/installer
owlette installer latestreadyinstallerGET /api/installer/latest
owlette installer upload <file>readyinstallerPOST /api/installer/upload, signed PUT, then PUT /api/installer/upload
owlette installer set-latest <version>readyinstallerPOST /api/installer/{version}/set-latest
owlette installer delete <version>readyinstallerDELETE /api/installer/{version}

webhook noun

owlette webhook is not registered in cli/src/index.ts yet. The public route family is live for developer preview, but CLI CRUD remains a Wave 3 follow-up so the command surface can settle with SDK examples.

planned commandstatusreference pagepublic route or reason
owlette webhook createplannedwebhookPOST /api/webhooks?siteId=<siteId>
owlette webhook listplannedwebhookGET /api/webhooks?siteId=<siteId>
owlette webhook get <webhookId>plannedwebhookGET /api/webhooks/{webhookId}?siteId=<siteId>
owlette webhook update <webhookId>plannedwebhookPATCH /api/webhooks/{webhookId}?siteId=<siteId>
owlette webhook delete <webhookId>plannedwebhookDELETE /api/webhooks/{webhookId}?siteId=<siteId>
owlette webhook rotate-secret <webhookId>plannedwebhookPOST /api/webhooks/{webhookId}/rotate-secret?siteId=<siteId>
owlette webhook deliveries <webhookId>plannedwebhookGET /api/webhooks/{webhookId}/deliveries?siteId=<siteId>
owlette webhook delivery get <webhookId> <deliveryId>plannedwebhookGET /api/webhooks/{webhookId}/deliveries/{deliveryId}?siteId=<siteId>
owlette webhook retry <webhookId> <deliveryId>plannedwebhookPOST /api/webhooks/{webhookId}/deliveries/{deliveryId}/retry?siteId=<siteId>
owlette webhook probeplannedwebhook; trigger page pending (Task 4.10)top-level owlette trigger --via-api already uses POST /api/webhooks/probe?siteId=<siteId>

invariants

  • No registered CLI command calls /api/admin/*.
  • owlette chat uses canonical /api/cortex/conversations/* routes; /api/chat/* is compatibility-only.
  • machine live-view is the only registered stub; rg 'stubExit\(' cli/src/commands should only match cli/src/commands/machine.ts.
  • owlette listen and owlette trigger are registered commands, but their dedicated reference pages are still pending Tasks 4.9 and 4.10.
  • owlette webhook ... is documented as a planned noun, not a registered command.

on this page