site
a site is the top-level scope every operator command nests under (roosts, machines, audit log, quota, deploys, processes — all site-scoped). this noun is read-only in v1: site create / update / delete stay in the dashboard. tier: [ready] for both verbs.
verbs:
site list
lists every site the active token has access to, server-resolved from the caller's identity. emits a plain ascii table by default and a { "sites": [...] } envelope under --json (legacy unwrapped shape — kept stable for scripts that pipe into jq).
owlette site list [--json]no verb-specific flags. inherits --json, --profile, and --api-url from the global set.
examples
# human-readable table — id, name, plan, timezone, createdAt
owlette site list# pull just the ids for use in another command
owlette --json site list | jq -r '.sites[].id'# count how many sites you can see
owlette --json site list | jq '.sites | length'backing: GET /api/sites.
site get
prints the full detail record for one site (id, name, plan, timezone, owner, createdAt). under --json the cli emits the raw detail object directly — there is no { "site": {...} } wrapper.
owlette site get <siteId> [--json]no verb-specific flags. the positional <siteId> is required. inherits --json, --profile, and --api-url from the global set.
examples
# human-readable detail block
owlette site get site-1# pull a single field
owlette --json site get site-1 | jq -r '.timezone'# scripted: only proceed if the site is on the pro plan
plan=$(owlette --json site get site-1 | jq -r '.plan')
[ "$plan" = "pro" ] || { echo "skipping — not on pro plan"; exit 0; }backing: GET /api/sites/{siteId}.
exit codes
0— success (table printed or detail emitted)1— network failure or non-2xx api response (e.g.404if<siteId>doesn't exist or you lack access)2— no token configured for the active profile (runowlette auth loginfirst)
notes
- scope: user — lists sites the caller's token has access to; no
--siteflag because the noun is the site - tier:
[ready]for reads only.create,update, anddeleteare intentionally absent in v1 — manage sites from the dashboard - json envelope:
listemits{ "sites": [...] }(legacy unwrapped shape);getemits the raw detail object. new commands wrap in{ ok, data }— these two predate that convention and stay stable for compatibility - related: overview (auth + config precedence), roost, quota, and every other operator noun (all consume
--site <siteId>against the ids returned here)
roost
a roost is a content-addressed bundle of files (a touchdesigner project, a media payload, a build artifact — anything) that the cli pushes once and the agent then pulls atomically onto target machines. every roost is site-scoped: every verb on this page requires --site . tier: [ready] for all six verbs.
trigger
trigger fires a synthetic webhook event for local receiver testing. it is a shipped top-level helper, not part of the planned webhook noun group.