Skip to content

CLI reference

Every omniglass command, generated from the binary’s own command tree. The data commands are generated from the API (make gen), so this reference is a faithful mirror of what the server exposes. For the narrative, connecting, authenticating, and the generated-versus- hand-written split, see the CLI guide.

Every command accepts these, each with an environment-variable default:

FlagTypeDefaultDescription
--serverstringhttp://localhost:8080Omniglass server base URL (env OMNIGLASS_SERVER)
--tokenstring(none)bearer token (env OMNIGLASS_TOKEN)

Commands for the audit-log resource

List audit-trail events

omniglass audit-log list [flags]

Recent audit-trail events, newest first, each with the actor and, for an impersonated action, the real actor behind it. Read-only; gated by audit:read:admin (admin/owner only, since the audit trail is admin-sensitive).

FlagTypeDefaultDescription
--beforestring(none)Only events strictly older than this RFC3339 timestamp (paging backward)
--limitint0Max rows to return, newest first (default 100, capped at 500)
--resourcestring(none)Filter to one resource kind (e.g. auth, principal_grant)
--verbstring(none)Filter to one verb (e.g. login, create)

Example:

Terminal window
omniglass audit-log list

Commands for the auth resource

Get your own profile picture

omniglass auth avatar

Returns the caller’s profile picture as a base64-encoded JPEG. Requires authentication; self-scoped. No picture is a 404.

Example:

Terminal window
omniglass auth avatar

Change your own password

omniglass auth change-password [flags]

Verifies the current password and sets a new one. Requires authentication; self-scoped.

FlagTypeDefaultDescription
--current-passwordstring(none)Your current password
--new-passwordstring(none)The new password (at least 12 characters, not a common password, not containing the username)

Example:

Terminal window
omniglass auth change-password --current-password current_password --new-password new_password

Create one of your own API tokens

omniglass auth create-token [flags]

Mints a CLI/API token for the caller and returns it once (store it now; it cannot be retrieved again). A description is required (what the token is for); an optional ttl_days bounds its lifetime (default 90, maximum 365). Requires authentication; self-scoped (always issued for you). The token is stamped with the device and address that created it.

FlagTypeDefaultDescription
--descriptionstring(none)What the token is for (required)
--ttl-daysint0Days until the token expires (default 90, maximum 365)

Example:

Terminal window
omniglass auth create-token --description description

Log in with a username and password

omniglass auth login [flags]

Verifies a human’s password and sets an httpOnly session cookie. Public; a bad credential is a flat 401, and a correct password against a disabled account is a distinct 403 so the screen can explain it.

FlagTypeDefaultDescription
--passwordstring(none)The account password; exchanged for a session cookie, never stored
--usernamestring(none)The sign-in username

Example:

Terminal window
omniglass auth login --password password --username username

Log out the current session

omniglass auth logout

Revokes the session token and clears the cookie. Public.

Example:

Terminal window
omniglass auth logout

The authenticated principal, its permissions, and grants

omniglass auth me

Returns the caller’s principal, flattened permissions (a UI hint and the fast-reject set), and grants. Requires authentication.

Example:

Terminal window
omniglass auth me

Remove your own profile picture

omniglass auth remove-avatar

Clears the caller’s profile picture. Requires authentication; self-scoped.

Example:

Terminal window
omniglass auth remove-avatar

Set your own profile picture

omniglass auth set-avatar [flags]

Sets the caller’s profile picture (JPEG, PNG, or WebP, base64-encoded), normalized server-side to a 256x256 JPEG. Requires authentication; self-scoped. A bad or oversize image is a 422.

FlagTypeDefaultDescription
--image-base64string(none)The image (JPEG, PNG, or WebP), base64-encoded; normalized server-side to a 256x256 JPEG

Example:

Terminal window
omniglass auth set-avatar --image-base64 image_base64

Commands for the status resource

Whether the system has an owner yet

omniglass auth status list

Public: reports whether any owner has been bootstrapped, so the login screen can hide the bootstrap hint.

Example:

Terminal window
omniglass auth status list

Stop the current impersonation session

omniglass auth stop-impersonation

Revokes the impersonation session presented by the request token, ending the view-as / act-as. Requires authentication with an impersonation token; self-scoped (ends only the session the token names).

Example:

Terminal window
omniglass auth stop-impersonation

Update your own profile

omniglass auth update-profile [flags]

Updates the caller’s own label (email is administrator-set). Requires authentication; self-scoped (edits only your own principal).

FlagTypeDefaultDescription
--labelstring(none)Your label; empty clears it

Example:

Terminal window
omniglass auth update-profile

Create the first owner (idempotent per username) and mint its bearer token

omniglass bootstrap <username> [flags]
FlagTypeDefaultDescription
--emailstring(none)owner email (optional)
--labelstring(none)owner label (optional)
--passwordstring(none)owner password, so the owner can sign in to the console (optional)
--ttlduration2160h0m0show long the bootstrap token is valid before it expires (max 365 days)

Commands for the command-type resource

Create a command type

omniglass command-type create [flags]

Registers a custom command type (official=false). The name must be a single kebab token; a target, when set, must be a registered property or metric type. Gated by command_type:create.

FlagTypeDefaultDescription
--descriptionstring(none)What the command does
--labelstring(none)A human label
--namestring(none)The command type name (lowercase kebab)
--params-schemastring(none)A JSON Schema fragment for the params
--settle-window-secondsint0The actuation window in seconds: how long the device is given to actuate before a mismatch is a failed command. 0 means settle immediately (a fire-and-forget command, or a settleable one judged at the moment of issue). A duration has no negative, so the schema floors it at 0 rather than accepting a value that behaves as 0 with no refusal to say so.
--target-metric-typestring(none)The metric this command sets, for settlement (at most one target arm)
--target-property-typestring(none)The property this command sets, for settlement (at most one target arm)

Example:

Terminal window
omniglass command-type create --name name

Delete a command type

omniglass command-type delete <name>

Removes a custom command type by name. Official types are read-only. Gated by command_type:delete.

Example:

Terminal window
omniglass command-type delete <name>

Get a command type

omniglass command-type get <name>

Returns one command type by name. Gated by command_type:read.

Example:

Terminal window
omniglass command-type get <name>

List command types

omniglass command-type list

Lists every registered command type (official and custom). Fleet-wide reference data. Gated by command_type:read.

Example:

Terminal window
omniglass command-type list

Update a command type

omniglass command-type update <name> [flags]

Patches a custom command type’s label, description, params schema, settle window, or target on either arm (a nil field is unchanged; an empty target clears it; a non-empty arm clears the other). The name is fixed at creation. Official types are read-only. Gated by command_type:update.

FlagTypeDefaultDescription
--descriptionstring(none)What the command does
--labelstring(none)A human label
--params-schemastring(none)A JSON Schema fragment (replaces wholesale)
--settle-window-secondsint0The actuation window in seconds, floored at 0 (a duration has no negative; 0 means settle immediately)
--target-metric-typestring(none)The metric this command sets (empty clears it; a non-empty arm clears the other)
--target-property-typestring(none)The property this command sets (empty clears it; a non-empty arm clears the other)

Example:

Terminal window
omniglass command-type update <name>

Commands for the component resource

Commands for the alarm resource

Acknowledge an alarm

omniglass component alarm acknowledge <name> <id>

Records that a human has seen this alarm, and changes nothing else. The alarm stays exactly as raised as it was: acknowledging is not fixing, so health is NOT recomputed and cleared_at is untouched. Acknowledging is orthogonal to clearing in both directions, so a cleared alarm can still be acknowledged by whoever reviews the history, and clearing never acknowledges on an operator’s behalf. Acknowledging twice is idempotent: the first person and the first time stay, and the no-op writes no second audit row. Gated by alarm:acknowledge, whose scope is resolved on the component tier from that permission (not from component:update); a component outside the caller’s component:read is a non-disclosing 404, and one it can read but not acknowledge on is a 403.

Example:

Terminal window
omniglass component alarm acknowledge <name> <id>

Raise an alarm on a component

omniglass component alarm create <name> [flags]

Records a condition on this component, then recomputes health in the same transaction: the component’s own verdict moves, and if it is now outage (a critical alarm), any role it occupies loses it as an occupant while the alarm is active, which can move its system and location verdicts with it; a lesser (info or warning) alarm degrades the component but leaves it occupying its roles. Gated by component:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--dedup-keystring(none)The condition identity; defaults to the message. Raising an already-open (component, dedup_key) returns the existing open alarm instead of a duplicate
--messagestring(none)What is wrong, for the operator reading it later
--severitystring(none)How bad it is; critical puts the component itself in outage

Example:

Terminal window
omniglass component alarm create <name> --severity severity

Clear an alarm

omniglass component alarm delete <name> <id>

Marks the alarm cleared and recomputes health in the same transaction, so the recovery is recorded as a transition at the moment it happened. The row is kept: what was wrong and when outlives the fix. Clearing an alarm that is already cleared or does not exist is a 404. Gated by component:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass component alarm delete <name> <id>

List a component’s alarms

omniglass component alarm list <name> [flags]

What is currently wrong with this component, newest first. Pass include_cleared for the history rather than the active set. Gated by component:read; an out-of-scope component is a non-disclosing 404.

FlagTypeDefaultDescription
--include-clearedboolfalseInclude cleared alarms, so the list is the history rather than what is wrong now
--unacknowledgedboolfalseOnly the alarms nobody has looked at. On its own this is the queue an operator works (raised and unacknowledged); with include_cleared it also returns the incidents that came and went unattended

Example:

Terminal window
omniglass component alarm list <name>

Check a component name

omniglass component checkName [flags]

Reports whether a proposed name is a valid slug and currently free within the given placement (parent wins over location; neither means the unplaced/root bucket). Advisory (Save is still gated by the unique constraint). Gated by component:update.

FlagTypeDefaultDescription
--locationstring(none)The location (by name or uuid) the entity would be placed at, if any and if unparented; ignored by the locations check
--namestring(none)The proposed name to check
--parentstring(none)The parent (by name or uuid) the entity would be created under, if any; omit for a root/unplaced check

Example:

Terminal window
omniglass component checkName --name name

Commands for the command resource

Issue a command to a component

omniglass component command issue <name> [flags]

Records a command invocation, writes a caused event, and (for a settleable command) opens an intended value the observed value settles against. Returns the computed settlement verdict. Gated by command:issue, whose scope is resolved on the component tier from that permission (not from component:read); a component outside the caller’s component:read is a non-disclosing 404, and one it can read but not command is a 403.

FlagTypeDefaultDescription
--command-typestring(none)The command_type to invoke
--instancestring(none)The series discriminator (e.g. an interface), when the target is instanced
--paramsstring(none)The invocation params, stored on the command and the caused event
--valuestring(none)The intended value for the target property (a settleable command)

Example:

Terminal window
omniglass component command issue <name> --command-type command_type

Create a component

omniglass component create [flags]

Creates a component, optionally under a parent (a root needs an all-scoped grant), bound to a system and a location, and classified by a product (required; naming a generic is fine until a real product is modeled). Gated by component:create. The location reference resolves within the caller’s location:read scope, because the label this stores is rendered from it, and one outside that scope is refused (422) exactly as :renderLabel refuses to preview it. Naming a system additionally requires system:update, and resolves within that scope, because the component’s primary membership is inserted from it: it is the same row the membership route writes, so the two paths cost the same permission. A system outside that scope is refused with a 403 naming it when the caller may read the system (denying its existence to someone who can GET it would be a lie) and with the non-disclosing 422 when the caller may not.

FlagTypeDefaultDescription
--expected-namestring(none)The name a create form previewed (POST /components:renderLabel returns it). The create is refused with a 409 naming what it would produce instead, rather than silently landing a different name, if the number was taken or the type’s stem moved while the form was open. It does not name the row (the platform still does, and the row is still name_generated): it only asserts what that name will be. Applies only when the platform names the row: sending it beside a name is a 422.
--labelstring(none)What an operator reads; the name is the address
--locationstring(none)Location name this component is placed at
--namestring(none)Name, unique within its placement (the address; lowercase letters, digits, hyphens). Omit to have the platform generate one from the product’s type.
--parentstring(none)Parent component name; omit for a root component
--productstring(none)Product (catalog SKU) this component is an instance of, by name or uuid. Required: use a generic (generic-device, generic-app, generic-service) until a real product is modeled.
--systemstring(none)Primary system name this component belongs to. Naming one writes that system’s membership, so it costs the system:update permission and resolves in that scope; omitted, the create costs component:create alone.

Example:

Terminal window
omniglass component create

Delete a component

omniglass component delete <name>

Deletes a component, refused (409) while it still has child components or is still referenced elsewhere, such as by a system role it staffs. Gated by component:delete; read and delete scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass component delete <name>

Commands for the effective-secret resource

Effective secrets for a component

omniglass component effective-secret list <name>

Resolves the secrets that cascade onto a component (platform -> location -> component), with the winner and the shadowed candidates it overrode. There is NO system band: a secret is device-facing, and the room a component happens to serve is the wrong owner for a credential the device itself answers with. Fields are masked, as in the directory; plaintext is only ever the audited reveal. Gated by secret:read, which the viewer floor does not carry, and admin-sensitive secrets appear only to the admin tier.

Example:

Terminal window
omniglass component effective-secret list <name>

Commands for the effective-tag resource

Effective tags for a component

omniglass component effective-tag list <name> [flags]

Resolves the tags that cascade onto a component (platform -> location -> system -> component): keys union, values override most-specific-wins, with the winner and shadowed candidates. A non-propagating key resolves only from a binding on the component itself. The system band comes from MEMBERSHIP: pass ?system= (a name or a uuid, ADR-0062) to resolve against one the component belongs to (a shared device answers differently for each), or omit it to resolve against its primary membership. Gated by component:read; the component must be in the caller’s component read scope.

FlagTypeDefaultDescription
--systemstring(none)Resolve against this system, name or uuid (ADR-0062), which the component must be a member of. Omit to resolve against its primary membership, the default for a caller with no system in hand.

Example:

Terminal window
omniglass component effective-tag list <name>

Commands for the effective-variable resource

omniglass component effective-variable list

Section titled “omniglass component effective-variable list”

Effective variables for a component

omniglass component effective-variable list <name>

Resolves the variables that cascade onto a component (platform -> location -> system -> component): names union, values override most-specific-wins, with the winner and the shadowed candidates it overrode. The system band comes from the component’s PRIMARY membership; resolving against a named system is not offered here yet, unlike effective-tags. Gated by variable:read; the component must be in the caller’s component read scope.

Example:

Terminal window
omniglass component effective-variable list <name>

Commands for the event resource

List a component’s recent events

omniglass component event list <name>

Returns the component’s recent log occurrences (the log-kind sink), newest first, bounded to the last 24 hours. Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component event list <name>

Get a component

omniglass component get <name>

Fetches a component by name within the caller’s read scope. Out of scope is a non-disclosing 404. Gated by component:read.

Example:

Terminal window
omniglass component get <name>

List components in scope

omniglass component list

Lists the components the caller may read, each filtered to its scope subtree. Gated by component:read.

Example:

Terminal window
omniglass component list

List tags on a component

omniglass component listTags <name>

Lists the tags bound directly on a component (not the resolved cascade). Gated by component:read.

Example:

Terminal window
omniglass component listTags <name>

Commands for the log resource

List a component’s recent log lines

omniglass component log list <name>

Returns the component’s recent raw log lines (the ingest lane of ADR-0066, distinct from typed events), newest first, bounded to the last 24 hours. Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component log list <name>

Commands for the membership resource

List the systems a component is in

omniglass component membership list <name>

The systems this component is bound into, ordered by name. A component may belong to several: a rack DSP serving three rooms is a member of all three, and each of them depends on it. Exactly one membership may be marked primary, the default for a question asked without a system in hand. Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component membership list <name>

Commands for the metric resource

List a component’s effective metrics

omniglass component metric list <name>

Every metric the component’s product declares, resolved to the series’ latest observed or calculated sample or the contract default until one arrives (is_sampled marks a live series), plus any metric sampled directly on the component (from_contract false). Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component metric list <name>

Commands for the sample resource

Read one metric series’ raw samples

omniglass component metric sample list <name> <metric> [flags]

The samples behind the effective read’s latest value for one series, newest first, windowed (hours) and capped (limit, newest kept). Gated by component:read; an out-of-scope owner is a non-disclosing 404.

FlagTypeDefaultDescription
--hoursint0The window in hours, counted back from now; 24 when unset
--limitint0The row cap, newest kept; 500 when unset

Example:

Terminal window
omniglass component metric sample list <name> <metric>

Move a component

omniglass component move <name> [flags]

Relocates and/or re-parents a component: at least one of location or parent is required (422 otherwise). Both follow the three-state convention (an omitted field is unchanged, an explicit empty string clears, a name sets). A reparent is cycle-guarded and scope-injected; clearing parent to root requires an all-scoped move grant, the same authorization a root create already requires. A separate act from update, and a separately grantable one (component:move), because a placement change is an authorization act, not a label edit: it moves a row out from under one grant’s subtree and under another’s. Recorded under its own audit verb, move, distinct from update. Does not recompute health: a component’s own verdict is purely its active alarms, unaffected by where it sits. A taken name at the destination is a 409. Gated by component:move; read and move scopes drive the 404 versus 403 split, and the destination location resolves within the caller’s location:read scope, because the move restamps the label from it: a destination outside that scope is refused (422).

FlagTypeDefaultDescription
--locationstring(none)Relocates the component to this location name. An empty string clears its placement.
--parentstring(none)Re-parents the component within the component tree to this component name; cycle-guarded and scope-injected. An empty string makes it a root component (requires an all-scoped move grant).

Example:

Terminal window
omniglass component move <name>

Preview a component label recompute

omniglass component previewLabels

Lists exactly the rows a recompute would change, and leaves the fleet as it found it. Use it before :recomputeLabels to see the blast radius of a rule edit. Every generated label in the caller’s read and update scope is re-rendered from its current rules and compared with what is stored; a label an operator typed by hand is never a candidate. Bounded by the same two scopes the apply is, so it never lists a row the apply would then refuse to touch. A location preview also lists the components and systems placed at every location whose label would move, because those go stale the moment it does. Gated by component:update, the same permission the apply needs: a preview is half of an edit rather than a report, and an operator who cannot apply has no use for it.

Example:

Terminal window
omniglass component previewLabels

Commands for the property resource

Clear a property on a component

omniglass component property delete <name> <property>

Removes the component’s declared value, so the property falls back to the product contract’s default (or leaves the effective read entirely when it was off-contract). Clearing a property the component never set is a 404. Gated by component:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass component property delete <name> <property>

List a component’s effective properties

omniglass component property list <name>

Every property the component’s product declares, resolved to the component’s own value or the contract default (is_set marks the override), plus any property set directly on the component (from_contract false). Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component property list <name>

Commands for the sample resource

Read one property series’ change history

omniglass component property sample list <name> <property> [flags]

The change history behind the effective value for one property series, newest first, windowed (hours) and capped (limit, newest kept). Gated by component:read; an out-of-scope owner is a non-disclosing 404.

FlagTypeDefaultDescription
--hoursint0The window in hours, counted back from now; 24 when unset
--limitint0The row cap, newest kept; 500 when unset

Example:

Terminal window
omniglass component property sample list <name> <property>

Set a property on a component

omniglass component property update <name> <property> [flags]

Declares a value for the property on this component, overriding the product contract’s default. Idempotent: the first set stores the value, a later set replaces it. The property need not be on the contract, but it must exist in the catalog (422 otherwise). Gated by component:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--valuestring(none)The value to declare, shape given by the property’s data_type

Example:

Terminal window
omniglass component property update <name> <property> --value <json>

Commands for the reachability resource

Read a component’s per-interface reachability

omniglass component reachability list <name>

Composes, per interface, the latest reachability verdict, the probe-layer signals that compose it, and the recent verdict transitions for the availability strip. Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component reachability list <name>

Recompute component labels

omniglass component recomputeLabels

Applies what :previewLabels describes, over the rows in the caller’s read and update scope, and returns exactly what it changed. Idempotent: a second call changes nothing. A label an operator typed by hand is left alone, and clearing that label by hand is how it is handed back to the platform. Recorded as ONE audit row for the operation, naming the rule tier and the affected count, rather than one row per changed entity. Gated by component:update.

Example:

Terminal window
omniglass component recomputeLabels

Commands for the reconciliation resource

Read a component’s property reconciliation (want/told/is)

omniglass component reconciliation list <name>

Pivots, per declared property, the declared value (want, resolved live from the cascade), the intended value (told), and the observed value (is), with config-drift computed on read. Gated by component:read; an out-of-scope component is a non-disclosing 404.

Example:

Terminal window
omniglass component reconciliation list <name>

Remove a tag value from a component

omniglass component removeTag <name> [flags]

Removes a key’s value from a component. Gated by component:update.

FlagTypeDefaultDescription
--keystring(none)The tag key to remove

Example:

Terminal window
omniglass component removeTag <name> --key key

Rename a component

omniglass component rename <name> [flags]

Moves the component’s name, the address an operator types and every external reference stores. A separate act from an update, and a separately grantable one, because it breaks bookmarks, runbooks, and integration config outside this system; inside it nothing breaks, since every reference holds the uuid. A taken name is a 409, an illegal or uuid-shaped one a 422. Gated by component:rename; read and rename scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--namestring(none)The new name, unique within its placement (lowercase letters, digits, hyphens)

Example:

Terminal window
omniglass component rename <name> --name name

Draft the name and label a component create would store

omniglass component renderLabel [flags]

Drafts the name and the label a component create would stamp, for the classification and placement a create form already holds, without creating anything. It allocates no ordinal, opens no write transaction and takes no advisory lock, which is what separates it from a preview that mints: the ordinal is READ (the lowest free number among the live siblings in the placement bucket) rather than allocated. That answer is provisional, so a form posts the NAME back as expected_name on the create and is refused (409) rather than silently renamed if another create takes the number or the type’s stem moves first. Omitting name drafts the name the platform would mint, and refuses (422) exactly where a nameless create would. Gated by component:create, the permission the create it precedes needs; the parent resolves within the caller’s component:create scope and the location ref within location:read, because the rendered string can carry that label. Naming a system additionally requires system:update and resolves within that scope, the same as the create, because the create binds that system’s membership: a preview is never served for a bind the create would refuse. Omitting parent is the parentless bucket, which a create refuses without an all-scoped grant, so the draft refuses it too (403): a form must not preview a bucket its create declines, and the previewed ordinal reports which names that bucket already holds.

FlagTypeDefaultDescription
--locationstring(none)The location this component will sit at, by name or uuid. Resolved within the caller’s location:read scope: a location out of scope is refused, never rendered.
--namestring(none)The name the row will carry. Omit it to draft the name and label the platform would produce; supply it to draft the label an operator-named row would carry, which has no ordinal at all.
--parentstring(none)The parent component, by name or uuid. Part of the placement bucket a generated name’s ordinal is read from, so a draft that omits it previews the wrong bucket. Resolved within the caller’s component:create scope, the same set the create resolves it in.
--productstring(none)The product this component is an instance of, by name or uuid; the classification both a label rule and a generated name are resolved from
--systemstring(none)The system this component will belong to, by name or uuid. Naming it requires system:update, exactly as the create does, because the create inserts that system’s membership; it resolves within that scope, and system:read decides only whether the refusal may name the system.

Example:

Terminal window
omniglass component renderLabel --product product

Regenerate a component’s name

omniglass component resetName <name>

Hands the pen back to the platform: regenerates the name from the component’s current type and placement (the same ”-” rule a nameless create applies) and marks it name_generated, whether or not it already was. Gated by component:rename, the same token :rename uses: it changes the name, exactly that permission’s blast radius.

Example:

Terminal window
omniglass component resetName <name>

Set a tag value on a component

omniglass component setTag <name> [flags]

Binds a value for a key on a component. The key must exist and apply to this entity kind. Setting a value is the ordinary entity write, gated by component:update.

FlagTypeDefaultDescription
--keystring(none)The tag key (must exist and apply to this kind)
--valuestring(none)The bound value

Example:

Terminal window
omniglass component setTag <name> --key key --value value

Update a component

omniglass component update <name> [flags]

Patches a component’s label or product. The name is not patchable: renaming is the :rename custom method. Placement is not patchable either: relocating or re-parenting is the :move custom method, gated separately, because a placement change is an authorization act. Product is required, so it is unchanged when omitted and reclassified when named, but an explicit empty string is refused (422), not a clear. Gated by component:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--labelstring(none)A new operator-facing label
--productstring(none)Re-classifies the component to this product (catalog SKU), by name or uuid. Required once set: an empty string is refused (422), not a clear. Explicitly-set property values persist; the new product’s contract defaults follow.

Example:

Terminal window
omniglass component update <name>

Commands for the component-type resource

Create a component type

omniglass component-type create [flags]

Creates a custom (non-official) component_type, optionally under a parent. Gated by component_type:create.

FlagTypeDefaultDescription
--abbrevstring(none)A compact form of label; omit to inherit the parent’s
--default-tagsstring(none)Tags every instance of this type starts with
--iconstring(none)A glyph key; omit to inherit the parent’s
--labelstring(none)What an operator reads in pickers and lists
--label-rulestring(none)A Go text/template rendering the label of every instance of this type, over a closed map of that component’s facts (Name, Ordinal, TypeName, TypeAbbrev, Stem, ProductName, VendorName, LocationLabel, SystemTypeLabel) and the functions title, upper, lower, slug and words (words turns a kebab or snake name into the words in it, so {{title (words .Name)}} reads north-wing as North Wing). Omit to inherit the parent’s, then the global component rule. A template that does not parse is refused here, 422.
--namestring(none)The globally unique name
--parent-idstring(none)The parent component_type, by name or uuid; omit for a root type
--stemstring(none)The auto-generated component name’s prefix; omit to inherit the parent’s. Lowercase letters, digits, and hyphens.

Example:

Terminal window
omniglass component-type create --label label --name name

Delete a component type

omniglass component-type delete <id>

Deletes a custom component_type, refused if official (422, forked or not: a fork is an overlay, not ownership) or still a parent of another component_type (409). :restore is the only removal a shipped row admits, and it removes your fork, not the row. Gated by component_type:delete.

Example:

Terminal window
omniglass component-type delete <id>

List component types

omniglass component-type list

Lists the component_type registry (the taxonomy a product is classified under: mic, camera, wireless-mic under mic), ordered alphabetically by label. Each row carries its parent link, so the console reconstructs the tree client-side. Gated by component_type:read.

Example:

Terminal window
omniglass component-type list

Restore a component type’s shipped values

omniglass component-type restore <id>

Discards your fork of a shipped component_type, so reads return the values this release ships and later releases can improve them again. 409 when the row carries no fork of yours. Gated by component_type:update, the same permission that took the fork: restoring is undoing your own edit, not deleting a row.

Example:

Terminal window
omniglass component-type restore <id>

Update a component type

omniglass component-type update <id> [flags]

Patches a component_type’s label, stem, icon, abbrev, label_rule, or default_tags. A shipped (official) row is never written: the patch FORKS it, storing your version over the shipped one, and the response comes back with forked=true under the same id. :restore discards the fork. Gated by component_type:update.

FlagTypeDefaultDescription
--abbrevstring(none)A new compact form; an empty string clears it, so this type inherits the nearest ancestor’s again
--default-tagsstring(none)Replaces the default-tag set; omit to leave unchanged
--iconstring(none)A new glyph key; an empty string clears it, so this type inherits the nearest ancestor’s again
--labelstring(none)A new operator-facing label
--label-rulestring(none)A new label template; an empty string clears it, so instances fall back to the nearest ancestor’s rule and then the global component rule. Refused with 422 if it does not parse.
--stemstring(none)A new name prefix (lowercase letters, digits, and hyphens); an empty string CLEARS it, so this type inherits the nearest ancestor’s again. A root type has no ancestor to inherit from and is refused (422).

Example:

Terminal window
omniglass component-type update <id>

Commands for the driver resource

Create a driver

omniglass driver create [flags]

Creates a custom (non-official) driver. Gated by driver:create.

FlagTypeDefaultDescription
--labelstring(none)What an operator reads in pickers and lists
--namestring(none)The globally unique name; renameable
--versionstring(none)A free-form version string, e.g. 1.0.0

Example:

Terminal window
omniglass driver create --label label --name name

Delete a driver

omniglass driver delete <id>

Deletes a custom driver, refused if official (422). Gated by driver:delete.

Example:

Terminal window
omniglass driver delete <id>

Get a driver

omniglass driver get <id>

Fetches a driver by id. Gated by driver:read.

Example:

Terminal window
omniglass driver get <id>

List drivers

omniglass driver list

Lists the driver registry, ordered alphabetically by label. Populates the driver picker on the product form. Gated by driver:read.

Example:

Terminal window
omniglass driver list

Update a driver

omniglass driver update <id> [flags]

Patches a custom driver’s label or version. Official drivers are read-only (422). Gated by driver:update.

FlagTypeDefaultDescription
--labelstring(none)A new operator-facing label
--versionstring(none)A new version string, e.g. 1.0.1

Example:

Terminal window
omniglass driver update <id>

Commands for the event-type resource

Create an event type

omniglass event-type create [flags]

Registers a custom event type (official=false). The name must be a single kebab token, e.g. call-started. Gated by event_type:create.

FlagTypeDefaultDescription
--descriptionstring(none)What the occurrence means
--labelstring(none)A human label
--namestring(none)The event type name (lowercase kebab)
--payload-schemastring(none)A JSON Schema fragment for the payload

Example:

Terminal window
omniglass event-type create --name name

Delete an event type

omniglass event-type delete <name>

Removes a custom event type by name. Official event types are read-only. Gated by event_type:delete.

Example:

Terminal window
omniglass event-type delete <name>

Get an event type

omniglass event-type get <name>

Returns one event type by name. Gated by event_type:read.

Example:

Terminal window
omniglass event-type get <name>

List event types

omniglass event-type list

Lists every registered event type (official and custom). The catalog is fleet-wide reference data. Gated by event_type:read.

Example:

Terminal window
omniglass event-type list

Update an event type

omniglass event-type update <name> [flags]

Patches a custom event type’s label, description, or payload schema (a nil field is unchanged). The name is fixed at creation. Official event types are read-only. Gated by event_type:update.

FlagTypeDefaultDescription
--descriptionstring(none)What the occurrence means
--labelstring(none)A human label
--payload-schemastring(none)A JSON Schema fragment (replaces wholesale)

Example:

Terminal window
omniglass event-type update <name>

Commands for the file resource

Create a file from an upload

omniglass file create [flags]

Stores the uploaded bytes as a content-addressed blob (identical bytes dedup to one blob) and writes the file handle pointing at it. Gated by file:create; a sensitive file additionally needs the admin tier (file:create:admin).

FlagTypeDefaultDescription
--contentstring(none)The file bytes, base64-encoded
--content-typestring(none)The MIME type used to serve the file
--namestring(none)The file’s filename, which is already the label an operator reads (no path separators)
--sensitiveboolfalseAdmin-only visibility; defaults false. Setting true requires the admin tier

Example:

Terminal window
omniglass file create --content content --content-type content_type --name name

Delete a file

omniglass file delete <id>

Removes a file handle. The underlying blob is left in place (garbage collection is a later slice). A sensitive file is a non-disclosing 404 without the admin tier. Gated by file:delete.

Example:

Terminal window
omniglass file delete <id>

Download a file’s bytes

omniglass file download <id>

Returns a file’s bytes (base64-encoded) read from the blob it points at, the hash verified on read. A sensitive file is a non-disclosing 404 without the admin tier. Gated by file:read.

Example:

Terminal window
omniglass file download <id>

Get a file’s metadata

omniglass file get <id>

Returns one file handle’s searchable metadata (no bytes). A sensitive file is a non-disclosing 404 without the admin tier. Gated by file:read.

Example:

Terminal window
omniglass file get <id>

List files

omniglass file list

Lists the file handles the caller may see (searchable metadata, no bytes). Sensitive files appear only to the admin tier. Gated by file:read.

Example:

Terminal window
omniglass file list

Liveness and database-reachability probe

omniglass healthz

Reports process health and the database leg, pinged through the Storage Gateway. Public: the liveness probe carries no operator data.

Example:

Terminal window
omniglass healthz

Commands for the interface resource

Create an interface

omniglass interface create [flags]

Creates an interface owned by a component (or a server-hosted one, which needs an all-scoped grant), named by its protocol; the optional label is the only identity string an operator types, and is where what the connection is FOR goes. The create scope cascades through the owning component. Gated by interface:create.

FlagTypeDefaultDescription
--componentstring(none)Owning component, by name or id; omit for a server-hosted interface (needs an all-scoped grant)
--interface-typestring(none)An interface_type name (the protocol); the interface is named by it, unique within the component
--labelstring(none)What an operator reads in lists (Control processor). Settable here because the name is derived from the type, so it says how the device is reached and never what the connection is for
--nodestring(none)Node placement, by name or id
--paramsstring(none)Endpoint/target settings (jsonb)

Example:

Terminal window
omniglass interface create --interface-type interface_type

Delete an interface

omniglass interface delete <id>

Deletes an interface, refused while a task still references it. Gated by interface:delete; read and delete scopes (through the component) drive the 404 versus 403 split.

Example:

Terminal window
omniglass interface delete <id>

Get an interface

omniglass interface get <id>

Fetches an interface by id. An interface whose component is out of the caller’s read scope is a non-disclosing 404. Gated by interface:read.

Example:

Terminal window
omniglass interface get <id>

List interfaces in scope

omniglass interface list

Lists the interfaces whose owning component the caller may read (the component cascade). Gated by interface:read.

Example:

Terminal window
omniglass interface list

Update an interface

omniglass interface update <id> [flags]

Patches an interface’s node placement, params or label; an empty label clears it and the surface falls back to the derived name. Gated by interface:update; read and update scopes (through the component) drive the 404 versus 403 split.

FlagTypeDefaultDescription
--labelstring(none)A new label; an empty string clears it, and the surface falls back to the derived name. Omit to leave it alone
--nodestring(none)Reassign the node placement, by name or id
--paramsstring(none)Replace the endpoint/target settings (jsonb)

Example:

Terminal window
omniglass interface update <id>

Commands for the location resource

Check a location name

omniglass location checkName [flags]

Reports whether a proposed name is a valid slug and currently free within the given placement (under the given parent, or among roots when no parent is given). Advisory (Save is still gated by the unique constraint). Gated by location:update.

FlagTypeDefaultDescription
--locationstring(none)The location (by name or uuid) the entity would be placed at, if any and if unparented; ignored by the locations check
--namestring(none)The proposed name to check
--parentstring(none)The parent (by name or uuid) the entity would be created under, if any; omit for a root/unplaced check

Example:

Terminal window
omniglass location checkName --name name

Create a location

omniglass location create [flags]

Creates a location, optionally under a parent (a root needs an all-scoped grant). Omit name and the platform generates one from the location_type’s name rule, taking the lowest free ordinal among the siblings in that placement; a type carrying no name rule refuses (422), since a building’s real name is not something the platform can know. Gated by location:create.

FlagTypeDefaultDescription
--expected-namestring(none)The name a create form previewed (POST /locations:renderLabel returns it). The create is refused with a 409 naming what it would produce instead, rather than silently landing a different name, if the number was taken or the location_type’s name rule moved while the form was open. It does not name the row (the platform still does, and the row is still name_generated): it only asserts what that name will be. Applies only when the platform names the row: sending it beside a name is a 422.
--labelstring(none)What an operator reads; the name is the address
--location-typestring(none)The location_type, by name or uuid (campus, building, …)
--namestring(none)Name, unique within its placement (the address; lowercase letters, digits, hyphens). Omit to have the platform generate one from the location_type’s name rule.
--parentstring(none)Parent location name; omit for a root location

Example:

Terminal window
omniglass location create --location-type location_type

Delete a location

omniglass location delete <name>

Deletes a location, refused (409) while it still has child locations or is still referenced elsewhere. Gated by location:delete; read and delete scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass location delete <name>

Get a location

omniglass location get <name>

Fetches a location by name within the caller’s read scope. Out of scope is a non-disclosing 404. Gated by location:read.

Example:

Terminal window
omniglass location get <name>

Commands for the health resource

Read a location’s health

omniglass location health list <name>

The location’s current verdict, worst-wins over every system placed anywhere beneath it, with those systems and their verdicts as the drill-down (the system health read names the role, which occupant is down, and the alarm). Transitions are the recorded edges over the last 30 days. Gated by location:read; an out-of-scope location is a non-disclosing 404.

Example:

Terminal window
omniglass location health list <name>

List locations in scope

omniglass location list

Lists the locations the caller may read, each filtered to its scope subtree. Gated by location:read.

Example:

Terminal window
omniglass location list

List tags on a location

omniglass location listTags <name>

Lists the tags bound directly on a location (not the resolved cascade). Gated by location:read.

Example:

Terminal window
omniglass location listTags <name>

Commands for the metric resource

List a location’s effective metrics

omniglass location metric list <name>

Every metric the location’s type declares, resolved to the series’ latest observed or calculated sample or the contract default until one arrives (is_sampled marks a live series), plus any metric sampled directly on the location (from_contract false). Gated by location:read; an out-of-scope location is a non-disclosing 404.

Example:

Terminal window
omniglass location metric list <name>

Move a location

omniglass location move <name> [flags]

Re-parents a location (a tree move): parent is required (422 if omitted), cycle-guarded, and placement-validated against the resolved location_type. Moving to root is not supported (422): MoveLocation gains no clear-to-root capability locations have never had. A separate act from update, and a separately grantable one (location:move), because a placement change is an authorization act, not a label edit. Recorded under its own audit verb, move, distinct from update. Does not recompute health. A taken name at the destination is a 409. A move can RENAME the location: a platform-generated name is scoped to its parent bucket, so a move that changes the parent re-mints the name and the ordinal under the new parent, from the same location_type name rule. A move that re-states the current parent leaves the name alone, and an operator-typed name is never touched. Gated by location:move; the read and move scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--parentstring(none)Re-parents the location (a tree move) to this location name; cycle-guarded and placement-validated. Moving to root is not supported.

Example:

Terminal window
omniglass location move <name>

Preview a location label recompute

omniglass location previewLabels

Lists exactly the rows a recompute would change, and leaves the fleet as it found it. Use it before :recomputeLabels to see the blast radius of a rule edit. Every generated label in the caller’s read and update scope is re-rendered from its current rules and compared with what is stored; a label an operator typed by hand is never a candidate. Bounded by the same two scopes the apply is, so it never lists a row the apply would then refuse to touch. A location preview also lists the components and systems placed at every location whose label would move, because those go stale the moment it does. Gated by location:update, the same permission the apply needs: a preview is half of an edit rather than a report, and an operator who cannot apply has no use for it.

Example:

Terminal window
omniglass location previewLabels

Commands for the property resource

Clear a property on a location

omniglass location property delete <name> <property>

Removes the location’s declared value, so the property falls back to the location type contract’s default (or leaves the effective read entirely when it was off-contract). Clearing a property the location never set is a 404. Gated by location:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass location property delete <name> <property>

List a location’s effective properties

omniglass location property list <name>

Every property the location’s type declares, resolved to the location’s own value or the contract default (is_set marks the override), plus any property set directly on the location (from_contract false). Gated by location:read; an out-of-scope location is a non-disclosing 404.

Example:

Terminal window
omniglass location property list <name>

Set a property on a location

omniglass location property update <name> <property> [flags]

Declares a value for the property on this location, overriding the location type contract’s default. Idempotent: the first set stores the value, a later set replaces it. The property need not be on the contract, but it must exist in the catalog (422 otherwise). Gated by location:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--valuestring(none)The value to declare, shape given by the property’s data_type

Example:

Terminal window
omniglass location property update <name> <property> --value <json>

Recompute location labels

omniglass location recomputeLabels

Applies what :previewLabels describes, over the rows in the caller’s read and update scope, and returns exactly what it changed. Idempotent: a second call changes nothing. A label an operator typed by hand is left alone, and clearing that label by hand is how it is handed back to the platform. Recorded as ONE audit row for the operation, naming the rule tier and the affected count, rather than one row per changed entity. Gated by location:update.

Example:

Terminal window
omniglass location recomputeLabels

Remove a tag value from a location

omniglass location removeTag <name> [flags]

Removes a key’s value from a location. Gated by location:update.

FlagTypeDefaultDescription
--keystring(none)The tag key to remove

Example:

Terminal window
omniglass location removeTag <name> --key key

Rename a location

omniglass location rename <name> [flags]

Moves the location’s name, the address an operator types and every external reference stores. A separate act from an update, and a separately grantable one, because it breaks bookmarks, runbooks, and integration config outside this system; inside it nothing breaks, since every reference holds the uuid. A taken name is a 409, an illegal or uuid-shaped one a 422. Gated by location:rename; the read and rename scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--namestring(none)The new name, unique within its placement (lowercase letters, digits, hyphens)

Example:

Terminal window
omniglass location rename <name> --name name

Draft the name and label a location create would store

omniglass location renderLabel [flags]

The location tier of :renderLabel on components. Drafts the name and the label a location create would stamp, allocating nothing. A shipped fleet answers from the global location rule, which reads the location’s own name as words and titles it, so a location named north-wing drafts as North Wing; an empty label means no rule resolves at any tier, and the surface falls back to the name. Omitting name refuses (422) a location_type with no name rule, the same refusal a nameless create gives. Gated by location:create; the parent resolves within the caller’s location:create scope, because a location’s two placement buckets are under a parent or at the root and that is where the ordinal is read from. Omitting parent is the ROOT bucket, which a create refuses without an all-scoped grant, so the draft refuses it too (403) rather than reporting which names the fleet root already holds.

FlagTypeDefaultDescription
--location-typestring(none)The location_type this location is classified by, by name or uuid
--namestring(none)The name the row will carry. Omit it to draft the name and label the platform would produce, which a location_type with no name rule refuses; supply it to draft the label an operator-named location would carry.
--parentstring(none)The parent location, by name or uuid. A location has two placement buckets, under a parent or at the root, and this is which one a generated name’s ordinal is read from. Resolved within the caller’s location:create scope.

Example:

Terminal window
omniglass location renderLabel --location-type location_type

Regenerate a location’s name

omniglass location resetName <name>

Hands the pen back to the platform, the same verb components and systems carry: the name is re-minted from the location_type’s name rule and the lowest free ordinal in this placement, and name_generated goes back to true. A location_type carrying no name rule refuses (422), which is every type a shipped fleet has: only a positional kind of place, one whose number is an arbitrary disambiguator rather than a designation read off the signage (a parking deck, a rack row), has a name the platform can generate, and an operator declares such a type themselves. Gated by location:rename, the same token :rename uses.

Example:

Terminal window
omniglass location resetName <name>

Set a tag value on a location

omniglass location setTag <name> [flags]

Binds a value for a key on a location. The key must exist and apply to this entity kind. Setting a value is the ordinary entity write, gated by location:update.

FlagTypeDefaultDescription
--keystring(none)The tag key (must exist and apply to this kind)
--valuestring(none)The bound value

Example:

Terminal window
omniglass location setTag <name> --key key --value value

Update a location

omniglass location update <name> [flags]

Patches a location’s label or location_type. The name is not patchable: renaming is the :rename custom method. Placement is not patchable either: re-parenting is the :move custom method, gated separately, because a placement change is an authorization act. Changing the location_type of a location the PLATFORM named re-mints the name from the new type’s name rule, and is refused (422) when the new type carries none, which is every shipped type: :rename the location first to claim its name, then reclassify it. A location an operator named is never renamed by a reclassify. Gated by location:update; the read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--labelstring(none)A new operator-facing label
--location-typestring(none)Re-types the location: a location_type, by name or uuid

Example:

Terminal window
omniglass location update <name>

Commands for the location-type resource

Create a location type

omniglass location-type create [flags]

Creates a custom (non-official) location_type, optionally with the label_rule locations of that type get. An unparseable rule is a 422. Gated by location_type:create.

FlagTypeDefaultDescription
--allowed-parent-typesstring(none)location_type names and/or the reserved root sentinel this type may be placed under; empty means unconstrained
--iconstring(none)A glyph key; the console falls back to map-pin when empty
--labelstring(none)What an operator reads in pickers and lists
--label-rulestring(none)The label template locations of this type get, a Go text/template over the location data map; omit to fall back to the global rule. Refused (422) if it does not compile
--namestring(none)The globally unique name (e.g. wing); “root” is reserved
--name-rulestring(none)How the platform NAMES locations of this type; omit to have an operator name every one of them. Refused (422) if it cannot mint a legal name

Example:

Terminal window
omniglass location-type create --label label --name name

Delete a location type

omniglass location-type delete <id>

Deletes a custom location_type, refused if official (422) or still referenced by a location (409). Gated by location_type:delete.

Example:

Terminal window
omniglass location-type delete <id>

List location types

omniglass location-type list

Lists the location_type registry (the shape-definers a location is classified by), ordered alphabetically by label. Populates the type picker on the location form. Gated by location_type:read.

Example:

Terminal window
omniglass location-type list

Commands for the metric resource

Withdraw a metric from a location type

omniglass location-type metric delete <id> <metric>

Removes one line from a location type’s contract, a shipped (official) type’s included, since nothing seeds a contract line; locations of the type keep any samples the series already holds, now off-contract. A metric the type does not declare is a 404, and so is an unknown type. Gated by location_type:delete.

Example:

Terminal window
omniglass location-type metric delete <id> <metric>

List a location type’s declared metrics

omniglass location-type metric list <id>

Lists the location type’s declared-metric contract (which metrics every location of the type carries), ordered by metric name, each with its optional default and required flag. Gated by location_type:read.

Example:

Terminal window
omniglass location-type metric list <id>

Declare a metric on a location type

omniglass location-type metric update <id> <metric> [flags]

Declares a catalog metric on a location type, or revises the declaration in place (the line is addressed by name, so the write is idempotent). A shipped (official) type’s contract is writable too: a contract line is a row in its own table and nothing seeds one, so every line is an operator’s. An unknown type is a 404 and a metric the catalog does not know is a 422. Gated by location_type:update.

FlagTypeDefaultDescription
--default-valuestring(none)The contract default, validated against the metric’s data_type; omit for no default
--requiredboolfalseWhether every location of this type must carry the metric; defaults to false

Example:

Terminal window
omniglass location-type metric update <id> <metric>

Commands for the property resource

Withdraw a property from a location type

omniglass location-type property delete <id> <property>

Removes one line from a location type’s contract, a shipped (official) type’s included, since nothing seeds a contract line; locations of the type keep any value they set for it, now off-contract. A property the type does not declare is a 404, and so is an unknown type. Gated by location_type:delete.

Example:

Terminal window
omniglass location-type property delete <id> <property>

List a location type’s declared properties

omniglass location-type property list <id>

Lists the location type’s declared-property contract (what every location of the type exposes), ordered by property name, each with its optional default and required flag. Gated by location_type:read.

Example:

Terminal window
omniglass location-type property list <id>

Declare a property on a location type

omniglass location-type property update <id> <property> [flags]

Declares a catalog property on a location type, or revises the declaration in place (the line is addressed by name, so the write is idempotent). A shipped (official) type’s contract is writable too: a contract line is a row in its own table and nothing seeds one, so every line is an operator’s. An unknown type is a 404 and a property the catalog does not know is a 422. Gated by location_type:update.

FlagTypeDefaultDescription
--default-valuestring(none)The contract default, validated against the property’s data_type; omit for no default
--requiredboolfalseWhether every location of this type must set the property; defaults to false

Example:

Terminal window
omniglass location-type property update <id> <property>

Restore a location type’s shipped values

omniglass location-type restore <id>

Discards your fork of a shipped location_type, so reads return the values this release ships, including a rule a later release WITHDREW. 409 when the row carries no fork of yours. Gated by location_type:update, the same permission that took the fork: restoring is undoing your own edit, not deleting a row.

Example:

Terminal window
omniglass location-type restore <id>

Update a location type

omniglass location-type update <id> [flags]

Patches a location_type’s label, icon, allowed parents, label_rule or name_rule. An unparseable label_rule (or a name_rule that cannot mint a legal name) is a 422 at rule-edit time, never a broken row at create time, and setting a label rule restamps nothing on its own: apply it with /locations:recomputeLabels after seeing the blast radius with :previewLabels. A shipped (official) row is never written: the patch FORKS it, storing your version over the shipped one, and the response comes back with forked=true under the same id. :restore discards the fork. Gated by location_type:update.

FlagTypeDefaultDescription
--allowed-parent-typesstring(none)Replaces the allowed-parent set; omit to leave unchanged, [] to clear back to unconstrained
--iconstring(none)A new glyph key; the console falls back to map-pin when empty
--labelstring(none)A new operator-facing label
--label-rulestring(none)A new label template for locations of this type; omit to leave unchanged, "" to clear back to the global rule. Refused (422) if it does not compile. Editing it does not restamp anything: apply it with /locations:recomputeLabels, having seen the blast radius with :previewLabels
--name-rulestring(none)A new name rule for locations of this type; omit to leave unchanged, or name name_rule in update_mask with no rule here to CLEAR it back to operator-named. Refused (422) if it cannot mint a legal name. Setting it renames nothing that already exists: it decides how the NEXT nameless create, :resetName, move or reclassify names a row
--update-maskstring(none)Which fields this write changes (AIP-134). Omit it and the fields present in the body change and nothing else; name a field here and it is written even when the body leaves it empty, which is how a field is CLEARED (name_rule back to operator-named); send [”*”] for full replacement. A field this resource does not patch is a 422 naming it

Example:

Terminal window
omniglass location-type update <id>

Commands for the metric-type resource

Create a metric type

omniglass metric-type create [flags]

Registers a custom metric type (official=false). The name must be a valid metric key. Gated by metric_type:create.

FlagTypeDefaultDescription
--data-typestring(none)The value type; a metric is always a number
--descriptionstring(none)What the series measures
--labelstring(none)A human label
--namestring(none)The metric type name (lowercase kebab)
--precisionint0Decimal places a rendered value keeps
--unitstring(none)The display unit of the series (ms, dB, percent)

Example:

Terminal window
omniglass metric-type create --data-type data_type --name name

Delete a metric type

omniglass metric-type delete <name>

Removes a custom metric type by name. Official metric types are read-only. Gated by metric_type:delete.

Example:

Terminal window
omniglass metric-type delete <name>

Get a metric type

omniglass metric-type get <name>

Returns one metric type by name. Gated by metric_type:read.

Example:

Terminal window
omniglass metric-type get <name>

List metric types

omniglass metric-type list

Lists every registered metric type (official and custom). The catalog is fleet-wide reference data. Gated by metric_type:read.

Example:

Terminal window
omniglass metric-type list

Update a metric type

omniglass metric-type update <name> [flags]

Patches a custom metric type’s label, description, unit, or precision (a nil field is unchanged). Data type is fixed at creation. Official metric types are read-only. Gated by metric_type:update.

FlagTypeDefaultDescription
--descriptionstring(none)What the series measures
--labelstring(none)A human label
--precisionint0Decimal places a rendered value keeps
--unitstring(none)The display unit of the series

Example:

Terminal window
omniglass metric-type update <name>

Apply embedded database migrations (dbmate)

omniglass migrate

Commands for the node resource

Claim a node identity in exchange for its NATS credential

omniglass node claim [flags]

The node-facing exchange: a node presents its enrollment token and receives its NATS credential (url, username, password). Public (the token is the authentication); an invalid token is a 401.

FlagTypeDefaultDescription
--namestring(none)The node name the enrollment was minted for
--tokenstring(none)The one-time enrollment token from node create, exchanged here for the node’s NATS credential

Example:

Terminal window
omniglass node claim --name name --token token

Create a node

omniglass node create [flags]

Registers an edge node server-side (day-one enrollment: create, then :enroll to mint its token). Gated by node:create.

FlagTypeDefaultDescription
--descriptionstring(none)Free-form operator notes about the node
--labelstring(none)Operator label; falls back to the name when empty
--locationstring(none)Optional location the node sits in, by name or id (descriptive placement, not scope)
--namestring(none)Globally unique node name (lowercase letters, digits, and hyphens); it is also the node’s NATS subject token, which is why the rule forbids a dot

Example:

Terminal window
omniglass node create --name name

Delete a node

omniglass node delete <name>

Decommissions a node: a hard delete that cascades its interfaces, their derived tasks, its node-owned tags and self-telemetry, and its enrollment credential. Component telemetry it collected is unaffected. Requires an all-scope action. Gated by node:delete.

Example:

Terminal window
omniglass node delete <name>

Mint a node’s enrollment token

omniglass node enroll <name>

Mints (or re-mints) the node’s enrollment token and returns it once. The token is stored only as a hash; it is never logged. Gated by node:enroll.

Example:

Terminal window
omniglass node enroll <name>

Get a node

omniglass node get <name>

Fetches a node by name. Requires an all-scope read. Gated by node:read.

Example:

Terminal window
omniglass node get <name>

List nodes

omniglass node list

Lists the edge nodes. A node is fleet-wide, so listing requires an all-scope read. Gated by node:read.

Example:

Terminal window
omniglass node list

List tags on a node

omniglass node listTags <name>

Lists the tags bound directly on a node (not the resolved cascade). Gated by node:read.

Example:

Terminal window
omniglass node listTags <name>

Commands for the log resource

List a node’s recent self-logs

omniglass node log list <name>

Returns the node’s own recent operational log lines (the raw ingest lane of ADR-0066, owner-bound to the node), newest first, bounded to the last 24 hours. Gated by node:read; an out-of-scope node is a non-disclosing 404.

Example:

Terminal window
omniglass node log list <name>

Remove a tag value from a node

omniglass node removeTag <name> [flags]

Removes a key’s value from a node. Gated by node:update.

FlagTypeDefaultDescription
--keystring(none)The tag key to remove

Example:

Terminal window
omniglass node removeTag <name> --key key

Run the edge node: claim, pull the worklist, and heartbeat over NATS

omniglass node run [flags]
FlagTypeDefaultDescription
--heartbeatduration30sheartbeat interval
--namestring(none)this node’s registered name (env OMNIGLASS_NODE_NAME)
--onceboolfalserun a single claim + pull + heartbeat cycle and exit
--serverstring(none)Omniglass server base URL (env OMNIGLASS_SERVER)
--tokenstring(none)enrollment token from POST /nodes/{name}:enroll (env OMNIGLASS_NODE_TOKEN)

Set a tag value on a node

omniglass node setTag <name> [flags]

Binds a value for a key on a node. The key must exist and apply to this entity kind. Setting a value is the ordinary entity write, gated by node:update.

FlagTypeDefaultDescription
--keystring(none)The tag key (must exist and apply to this kind)
--valuestring(none)The bound value

Example:

Terminal window
omniglass node setTag <name> --key key --value value

Update a node

omniglass node update <name> [flags]

Patches a node’s label, description, and location (a nil field is unchanged; a location of "" clears it). The name is immutable. Requires an all-scope action. Gated by node:update.

FlagTypeDefaultDescription
--descriptionstring(none)New free-form operator notes
--labelstring(none)A new operator-facing label
--locationstring(none)Set the node’s location by name or id, or "" to clear it

Example:

Terminal window
omniglass node update <name>

Commands for the principal resource

Archive a principal

omniglass principal archive <id>

Soft-deletes a principal: it is hidden from the directory, can no longer authenticate, and its rows stay intact, reversibly (restore) until purged. Gated by principal:archive (all-scope). The last active owner cannot be archived.

Example:

Terminal window
omniglass principal archive <id>

Commands for the avatar resource

Get a principal’s profile picture

omniglass principal avatar list <id>

Returns the principal’s profile picture as a base64-encoded JPEG. Gated by principal:read:admin. A principal without a picture is a 404.

Example:

Terminal window
omniglass principal avatar list <id>

Create a human principal

omniglass principal create [flags]

Creates a human principal with an optional initial password. Gated by principal:create (all-scope). The new principal holds no grants; assign roles separately.

FlagTypeDefaultDescription
--emailstring(none)Contact email for the account
--labelstring(none)What an operator reads in lists; falls back to the username
--passwordstring(none)Optional initial password (at least 12 characters, not a common password, not containing the username); the user changes it after signing in
--usernamestring(none)Unique sign-in name (lowercase letters, digits, and . _ -)

Example:

Terminal window
omniglass principal create --username username

Disable a principal

omniglass principal disable <id>

Soft-disables a principal so it can no longer authenticate; its audit trail is kept. Gated by principal:update (all-scope). The last active owner cannot be disabled.

Example:

Terminal window
omniglass principal disable <id>

Enable a principal

omniglass principal enable <id>

Re-enables a disabled principal, restoring its ability to authenticate. Gated by principal:update (all-scope).

Example:

Terminal window
omniglass principal enable <id>

Get a principal

omniglass principal get <id>

Fetches one principal by id with its profile and grants. Gated by principal:read:admin.

Example:

Terminal window
omniglass principal get <id>

Commands for the grant resource

Grant a role to a principal

omniglass principal grant create <id> [flags]

Assigns a role at a scope to a principal. Gated by principal_grant:create (all-scope). Refused (403) when the granted role’s capabilities exceed the granter’s own (no promoting anyone, including yourself, to a higher tier such as owner). A duplicate is 409, an unknown role or bad scope 422.

FlagTypeDefaultDescription
--rolestring(none)A role id (viewer, operator, admin, owner, or a custom role)
--scope-idstring(none)The scope root id; omit for the all scope
--scope-kindstring(none)The scope kind; ‘all’ confers the whole fleet (group-as-scope is unbuilt and not offered)
--scope-opstring(none)How the scope root matches the tree: subtree (root + descendants, the default), subtree_excl_root (descendants only for update/delete, root kept for read/create), or self (the root row only). Moot for the all scope.

Example:

Terminal window
omniglass principal grant create <id> --role role --scope-kind scope_kind

Revoke a grant

omniglass principal grant delete <id> <grantId>

Removes one grant from a principal. Gated by principal_grant:delete (all-scope). The last owner grant cannot be revoked.

Example:

Terminal window
omniglass principal grant delete <id> <grantId>

Impersonate a principal (view-as or act-as)

omniglass principal impersonate <id> [flags]

Mints a bounded, revocable token to view as (read-only) or act as (full) the target. Gated by principal:impersonate (all-scope). Refused on self, on an owner target (owners are un-impersonatable by anyone), when it would grant a capability the caller lacks (the escalation guard), or from within an existing impersonation.

FlagTypeDefaultDescription
--duration-minutesint0Session lifetime in minutes (default 30, max 1440)
--modestring(none)view_as is read-only; act_as is full, with mutations attributed to both the real actor and the impersonated principal

Example:

Terminal window
omniglass principal impersonate <id> --mode mode

List principals

omniglass principal list [flags]

Lists all principals (humans and service accounts) with their grants. Gated by principal:read:admin.

FlagTypeDefaultDescription
--include-archivedboolfalseInclude archived (soft-deleted) principals, hidden by default
--kindstring(none)Optionally filter by principal kind

Example:

Terminal window
omniglass principal list

Purge a principal

omniglass principal purge <id>

Hard-deletes an archived principal and its owned rows (profile, credentials, grants, memberships); the audit trail is preserved. Irreversible. Gated by principal:purge:admin (admin-sensitive, all-scope), and the principal must be archived first.

Example:

Terminal window
omniglass principal purge <id>

Remove a principal’s profile picture

omniglass principal removeAvatar <id>

Clears another human principal’s profile picture. Gated by principal:set-avatar (all-scope). Removing an absent picture is a no-op. Audited with the administrator as the actor.

Example:

Terminal window
omniglass principal removeAvatar <id>

Reset a principal’s password

omniglass principal resetPassword <id> [flags]

Sets a new password for another human principal (an administrator action; the target’s current password is not required). Gated by principal:reset-password (all-scope). The new password must meet the password policy; a violation is a 422. Refused on yourself (change your own password from your profile, which verifies your current one), on an owner (owners cannot be reset by anyone), or when it would exceed the caller’s own capabilities (the takeover guard, shared with impersonation). The action is audited with the administrator as the actor.

FlagTypeDefaultDescription
--passwordstring(none)The new password (at least 12 characters, not a common password, not containing the username)

Example:

Terminal window
omniglass principal resetPassword <id> --password password

Restore a principal

omniglass principal restore <id>

Reverses an archive: the account is restored to active and can authenticate again. Gated by principal:archive (all-scope).

Example:

Terminal window
omniglass principal restore <id>

Commands for the session resource

List a principal’s sessions

omniglass principal session list <id>

Lists another principal’s active bearer credentials (login sessions and API tokens) with their non-secret metadata, newest first, so an administrator can see where an account is signed in and revoke a session that should not be. Gated by principal:revoke-session (all-scope). The token secret is never returned, and current is always false (there is no “this request’s own session” when viewing another principal).

Example:

Terminal window
omniglass principal session list <id>

Revoke a principal’s session

omniglass principal session revoke <id> <sid>

Revokes one of another principal’s sessions or tokens by id (an administrator action; the target is immediately signed out of that credential). Gated by principal:revoke-session (all-scope). Bounded to the target, so a credential id that is not theirs is a non-disclosing 404, never a cross-principal revoke. Refused (403) on an owner (an owner’s sessions cannot be revoked by anyone, the takeover guard shared with impersonation and password reset) or when it would exceed the caller’s own capabilities. Audited with the administrator as the actor.

Example:

Terminal window
omniglass principal session revoke <id> <sid>

Revoke all of a principal’s sessions or tokens

omniglass principal session revokeAll <id> [flags]

Revokes every one of another principal’s web-login sessions, or every one of its CLI/API tokens (chosen by purpose), in a single administrator action, returning how many were ended. Gated by principal:revoke-session (all-scope). Bounded to the target and never crosses purpose (revoking sessions leaves tokens, and vice versa). Refused (403) on an owner (the takeover guard shared with impersonation and the password reset) or when it would exceed the caller’s own capabilities. Audited with the administrator as the actor.

FlagTypeDefaultDescription
--purposestring(none)Which credentials to revoke: all of the principal’s web-login sessions, or all its CLI/API tokens

Example:

Terminal window
omniglass principal session revokeAll <id> --purpose purpose

Set a principal’s profile picture

omniglass principal setAvatar <id> [flags]

Sets another human principal’s profile picture (an administrator action). Gated by principal:set-avatar (all-scope). The image (JPEG, PNG, or WebP, base64-encoded) is normalized server-side to a 256x256 JPEG; a bad or oversize image is a 422. Audited with the administrator as the actor.

FlagTypeDefaultDescription
--image-base64string(none)The image (JPEG, PNG, or WebP), base64-encoded; normalized server-side to a 256x256 JPEG

Example:

Terminal window
omniglass principal setAvatar <id> --image-base64 image_base64

Update a principal

omniglass principal update <id> [flags]

Updates a human principal’s label, email, and username. Gated by principal:update (all-scope). A username is not an entity name and is patchable here rather than through a :rename method: it is the sign-in identifier, on its own rule, and nothing keys on it.

FlagTypeDefaultDescription
--emailstring(none)Email; empty clears it
--labelstring(none)Label; empty clears it
--usernamestring(none)Sign-in name (lowercase letters, digits, and . _ -); renaming is safe

Example:

Terminal window
omniglass principal update <id>

Commands for the principal-group resource

Create a principal group

omniglass principal-group create [flags]

Creates a principal group. Gated by principal_group:create (all-scope). A duplicate name is 409.

FlagTypeDefaultDescription
--descriptionstring(none)Free-form notes on what the group is for
--labelstring(none)What an operator reads in lists
--namestring(none)Unique group name (lowercase letters, digits, and hyphens)

Example:

Terminal window
omniglass principal-group create --name name

Delete a principal group

omniglass principal-group delete <id>

Removes a group and, by cascade, its memberships and grants. Gated by principal_group:delete (all-scope).

Example:

Terminal window
omniglass principal-group delete <id>

Get a principal group

omniglass principal-group get <id>

One principal group by id. Gated by principal_group:read:admin.

Example:

Terminal window
omniglass principal-group get <id>

Commands for the grant resource

Grant a role to a group

omniglass principal-group grant create <id> [flags]

Assigns a role at a scope to a group; its members inherit it. Gated by principal_grant:create (all-scope). Refused (403) when the granted role’s capabilities exceed the granter’s own, exactly as for a direct grant. A duplicate is 409.

FlagTypeDefaultDescription
--rolestring(none)A role id (viewer, operator, admin, owner, or a custom role)
--scope-idstring(none)The scope root id; omit for the all scope
--scope-kindstring(none)The scope kind; ‘all’ confers the whole fleet (group-as-scope is unbuilt and not offered)
--scope-opstring(none)How the scope root matches the tree; moot for the all scope

Example:

Terminal window
omniglass principal-group grant create <id> --role role --scope-kind scope_kind

Revoke a group grant

omniglass principal-group grant delete <id> <grantId>

Removes one grant from a group. Gated by principal_grant:delete (all-scope).

Example:

Terminal window
omniglass principal-group grant delete <id> <grantId>

List a group’s grants

omniglass principal-group grant list <id>

The role x scope grants a group confers on its members. Gated by principal_group:read:admin.

Example:

Terminal window
omniglass principal-group grant list <id>

List principal groups

omniglass principal-group list

Every principal group. Gated by principal_group:read:admin.

Example:

Terminal window
omniglass principal-group list

Commands for the member resource

Add a member to a group

omniglass principal-group member create <id> [flags]

Adds a principal to a group; its members inherit the group’s grants. Gated by principal_group:update (all-scope). Idempotent.

FlagTypeDefaultDescription
--principal-idstring(none)The principal to add to the group

Example:

Terminal window
omniglass principal-group member create <id> --principal-id principal_id

Remove a member from a group

omniglass principal-group member delete <id> <principalId>

Removes a principal from a group; it stops inheriting the group’s grants. Gated by principal_group:update (all-scope).

Example:

Terminal window
omniglass principal-group member delete <id> <principalId>

List a group’s members

omniglass principal-group member list <id>

The principals in a group. Gated by principal_group:read:admin.

Example:

Terminal window
omniglass principal-group member list <id>

Rename a principal group

omniglass principal-group rename <id> [flags]

Moves the group’s name. A separate act from an update, and a separately grantable one, because it breaks the references stored outside this system; inside it nothing breaks, since membership and grants both key on the group’s uuid. A taken name is a 409, an illegal or uuid-shaped one a 422. Gated by principal_group:rename (all-scope).

FlagTypeDefaultDescription
--namestring(none)The new unique group name (lowercase letters, digits, hyphens)

Example:

Terminal window
omniglass principal-group rename <id> --name name

Update a principal group

omniglass principal-group update <id> [flags]

Updates a group’s presentational fields. The name is not patchable: renaming is the :rename custom method. Gated by principal_group:update (all-scope).

FlagTypeDefaultDescription
--descriptionstring(none)Description; empty clears it
--labelstring(none)Label; empty clears it

Example:

Terminal window
omniglass principal-group update <id>

Commands for the product resource

Create a product

omniglass product create [flags]

Creates a custom (non-official) product, classified under a component_type. kind and component_type are both required; kind refuses vm (retired, folded into app). Gated by product:create.

FlagTypeDefaultDescription
--component-typestring(none)The component_type this product is classified under (mic, camera, …), by name or uuid; every product must belong to one of the tree’s nodes. The generics (generic-device, generic-app, generic-service) fit anything not yet modeled more specifically.
--driver-idstring(none)The driver that talks to it, by handle or uuid
--iconstring(none)A product-level icon override; unset inherits the component_type’s icon
--kindstring(none)What class of thing the product is. vm is retired (folded into app); required, no default, so every product states its class explicitly.
--labelstring(none)What an operator reads in pickers and lists
--label-rulestring(none)A Go text/template rendering the label of every component of this product, over a closed map of that component’s facts (Name, Ordinal, TypeName, TypeAbbrev, Stem, ProductName, VendorName, LocationLabel, SystemTypeLabel) and the functions title, upper, lower, slug and words (words turns a kebab or snake name into the words in it, so {{title (words .Name)}} reads north-wing as North Wing). Omit to inherit the component_type chain’s rule, then the global component rule. A template that does not parse is refused here, 422.
--namestring(none)The globally unique name; renameable
--parent-product-idstring(none)The parent product, by handle or uuid
--vendor-idstring(none)The vendor, by handle or uuid

Example:

Terminal window
omniglass product create --component-type component_type --kind kind --label label --name name

Delete a product

omniglass product delete <id>

Deletes a custom product, refused if official (422) or still referenced by a component (409). Gated by product:delete.

Example:

Terminal window
omniglass product delete <id>

Get a product

omniglass product get <id>

Fetches a product by its name or its uuid. Either form resolves, so omniglass product get acme-soundbar and the uuid are interchangeable. Gated by product:read.

Example:

Terminal window
omniglass product get <id>

List products

omniglass product list

Lists the product registry, ordered alphabetically by label. Each product carries its vendor, driver, kind, and component_type. Gated by product:read.

Example:

Terminal window
omniglass product list

Commands for the metric resource

Withdraw a metric from a product

omniglass product metric delete <id> <metric>

Removes one line from a custom product’s contract; instances keep any samples the series already holds, now off-contract. A metric the product does not declare is a 404, and an official product is read-only (422). Gated by product:delete.

Example:

Terminal window
omniglass product metric delete <id> <metric>

List a product’s declared metrics

omniglass product metric list <id>

Lists the product’s declared-metric contract (which metrics every instance of the product carries), ordered by metric name, each with its optional default and required flag. Gated by product:read.

Example:

Terminal window
omniglass product metric list <id>

Declare a metric on a product

omniglass product metric update <id> <metric> [flags]

Declares a catalog metric on a custom product, or revises the declaration in place (the line is addressed by name, so the write is idempotent). Official products are read-only (422); an unknown product is a 404 and a metric the catalog does not know is a 422. Gated by product:update.

FlagTypeDefaultDescription
--default-valuestring(none)The contract default, validated against the metric’s data_type; omit for no default
--requiredboolfalseWhether every instance of this product must carry the metric; defaults to false

Example:

Terminal window
omniglass product metric update <id> <metric>

Commands for the property resource

Withdraw a property from a product

omniglass product property delete <id> <property>

Removes one line from a custom product’s contract; instances keep any value they set for it, now off-contract. A property the product does not declare is a 404, and an official product is read-only (422). Gated by product:delete.

Example:

Terminal window
omniglass product property delete <id> <property>

List a product’s declared properties

omniglass product property list <id>

Lists the product’s declared-property contract (what every instance of the product exposes), ordered by property name, each with its optional default and required flag. Gated by product:read.

Example:

Terminal window
omniglass product property list <id>

Declare a property on a product

omniglass product property update <id> <property> [flags]

Declares a catalog property on a custom product, or revises the declaration in place (the line is addressed by name, so the write is idempotent). Official products are read-only (422); an unknown product is a 404 and a property the catalog does not know is a 422. Gated by product:update.

FlagTypeDefaultDescription
--default-valuestring(none)The contract default, validated against the property’s data_type; omit for no default
--requiredboolfalseWhether every instance of this product must set the property; defaults to false

Example:

Terminal window
omniglass product property update <id> <property>

Update a product

omniglass product update <id> [flags]

Patches a custom product’s label, vendor, driver, kind, component_type, icon, or parent. component_type is required, so an empty string on it is a 422 (a reclassify names a real type; it never clears). Official products are read-only (422). Gated by product:update.

FlagTypeDefaultDescription
--component-typestring(none)Reclassifies the product to this component_type, by name or uuid; component_type is required, so this only reclassifies, it never clears
--driver-idstring(none)A new driver, by handle or uuid
--iconstring(none)A new icon override
--kindstring(none)A new product class
--labelstring(none)A new operator-facing label
--label-rulestring(none)A new label template; an empty string clears it, so components fall back to the component_type chain and then the global component rule. Refused with 422 if it does not parse.
--parent-product-idstring(none)A new parent product, by handle or uuid
--vendor-idstring(none)A new vendor, by handle or uuid

Example:

Terminal window
omniglass product update <id>

Commands for the property-type resource

Create a property

omniglass property-type create [flags]

Registers a custom property (official=false). The name must be a valid property key. Gated by property_type:create.

FlagTypeDefaultDescription
--data-typestring(none)The value type; a numeric signal is a metric type
--descriptionstring(none)What the property means
--labelstring(none)A human label
--namestring(none)The property name (lowercase kebab)
--validationstring(none)A JSON Schema fragment constraining the value

Example:

Terminal window
omniglass property-type create --data-type data_type --name name

Delete a property

omniglass property-type delete <name>

Removes a custom property by name. Official properties are read-only. Gated by property_type:delete.

Example:

Terminal window
omniglass property-type delete <name>

Get a property

omniglass property-type get <name>

Returns one property by name. Gated by property_type:read.

Example:

Terminal window
omniglass property-type get <name>

List properties

omniglass property-type list

Lists every registered property (official and custom). The catalog is fleet-wide reference data. Gated by property_type:read.

Example:

Terminal window
omniglass property-type list

Update a property

omniglass property-type update <name> [flags]

Patches a custom property’s label, description, or validation (a nil field is unchanged). Data type is fixed at creation. Official properties are read-only. Gated by property_type:update.

FlagTypeDefaultDescription
--descriptionstring(none)What the property means
--labelstring(none)A human label
--validationstring(none)A JSON Schema fragment (replaces wholesale)

Example:

Terminal window
omniglass property-type update <name>

Commands for the role resource

List roles

omniglass role list

Lists the roles with their metadata and effective (flattened) permissions. Gated by the role:read:admin capability.

Example:

Terminal window
omniglass role list

Commands for the secret resource

Decrypt a secret for clipboard copy

omniglass secret copy <id>

Decrypts and returns a secret’s field values for a clipboard copy, audited under the copy verb (distinct from an on-screen reveal). Same exposure and the same secret:reveal gate as reveal.

Example:

Terminal window
omniglass secret copy <id>

Create a secret

omniglass secret create [flags]

Seals a secret at an owner scope. Fields are validated and encrypted against the type shape. Gated by secret:create, plus platform:create when owner_kind is platform (the install-wide tier).

FlagTypeDefaultDescription
--admin-sensitiveboolfalseAdmin-only visibility; omit to use the type default. Setting true requires the admin tier
--fieldsstring(none)The operator field map, validated against the type shape
--labelstring(none)What an operator reads in lists and pickers (Polling community); omit to fall back to the name
--namestring(none)The cascade name (lowercase letters, digits, and hyphens); unique per owner
--ownerstring(none)The owning entity’s name; omit for a platform secret
--owner-kindstring(none)Which tier owns this secret (the system band is retired, ADR-0052)
--secret-typestring(none)A secret_type id

Example:

Terminal window
omniglass secret create --fields <json> --name name --owner-kind owner_kind --secret-type secret_type

Delete a secret

omniglass secret delete <id>

Removes a secret by id. Gated by secret:delete, plus platform:delete when the secret sits at the platform tier; read and delete scopes on the owner drive the 404 versus 403 split.

Example:

Terminal window
omniglass secret delete <id>

List secrets

omniglass secret list

Lists the secrets the caller may see, with masked fields, filtered to the read scope; admin-sensitive secrets appear only to the admin tier. Gated by secret:read, which the viewer floor does not carry (secret is a sensitive resource).

Example:

Terminal window
omniglass secret list

Reveal a secret’s plaintext

omniglass secret reveal <id>

Decrypts and returns a secret’s field values, auditing the decrypt. Gated by secret:reveal at the caller’s scope; an admin-sensitive secret additionally needs the admin tier (secret:reveal:admin), so a scoped operator reveals device secrets but never a platform credential.

Example:

Terminal window
omniglass secret reveal <id>

Update a secret

omniglass secret update <id> [flags]

Replaces the given field values on a secret, re-sealing secret fields, and patches its label. Only those change; name, type, and owner are fixed at creation. An omitted field keeps its value, an omitted label leaves it alone, and an empty label clears it. Gated by secret:update, plus platform:update when the secret sits at the platform tier.

FlagTypeDefaultDescription
--fieldsstring(none)The field values to replace; an omitted field keeps its value
--labelstring(none)A new label; an empty string clears it, and the surface falls back to the name. Omit to leave it alone

Example:

Terminal window
omniglass secret update <id>

Commands for the secret-type resource

List secret types

omniglass secret-type list

Lists the secret_type shapes a secret can take, for the create form. Gated by secret:read.

Example:

Terminal window
omniglass secret-type list

Seed a dev database with example locations, users, and grants (idempotent; never for production)

omniglass seed-dev

Populate a fresh dev database with a small example fleet so make dev comes up with locations, sign-in-able users, and their grants instead of empty. The same trusted direct-DB lane as bootstrap, and idempotent, so it runs on every make dev. Not for production: these are operator rows, not ship-with reference data.

Run the control-plane server (HTTP API)

omniglass server

Commands for the session resource

List your own sessions and tokens

omniglass session list

Lists the caller’s own active bearer credentials (time-bounded web-login sessions and CLI/API tokens) with their non-secret metadata; the current one is flagged. Requires authentication; self-scoped (never another principal’s). The token secret is never returned.

Example:

Terminal window
omniglass session list

Revoke one of your own sessions

omniglass session revoke <id>

Revokes one of the caller’s own sessions or tokens by id (from the session list); revoking the current one signs it out. Requires authentication; self-scoped, so a credential id that is not yours is a 404.

Example:

Terminal window
omniglass session revoke <id>

Revoke all of your own sessions or tokens

omniglass session revoke-all [flags]

Revokes every one of the caller’s own web-login sessions, or every one of its CLI/API tokens (chosen by purpose), returning how many were ended. Requires authentication; self-scoped. Always keeps the credential that made this request, so you are never signed out of the one you are on; sessions and tokens never cross.

FlagTypeDefaultDescription
--purposestring(none)Which of your own credentials to revoke: all your web-login sessions, or all your CLI/API tokens

Example:

Terminal window
omniglass session revoke-all --purpose purpose

Set or rotate a user’s console password, revoking their sessions (direct DB)

omniglass set-password <username> <password> [flags]

Installs or replaces a human’s password credential (argon2id), addressed by username, and revokes the user’s live SESSIONS so a break-glass reset locks out any stolen login at once. API tokens are a separate bearer secret, not tied to the password, and are kept unless —revoke-tokens is given (a full lockout of a compromised account). The same trusted direct-DB lane as bootstrap and token: dev setup, break-glass, or a password reset before the admin UI lands.

FlagTypeDefaultDescription
--revoke-tokensboolfalsealso revoke the user’s API tokens (a full lockout of a compromised account)

Commands for the setting resource

Restore a settings namespace to defaults

omniglass setting delete <namespace>

Drops the namespace’s platform override, restoring the file layer and the declared defaults. Gated by settings:update and platform:update.

Example:

Terminal window
omniglass setting delete <namespace>

Get effective settings with provenance

omniglass setting list

The effective settings document plus per-key provenance (which level won) and lock state. Gated by settings:read (admin).

Example:

Terminal window
omniglass setting list

Commands for the me resource

Get the caller’s effective settings

omniglass setting me list

The current principal’s resolved settings, client-visible namespaces only, no provenance. Feeds the SPA at boot. Requires authentication.

Example:

Terminal window
omniglass setting me list

Restore all settings to defaults

omniglass setting restoreDefaults

Removes every platform override (a factory reset). Gated by settings:update and platform:update.

Example:

Terminal window
omniglass setting restoreDefaults

Update a settings namespace

omniglass setting update <namespace>

Applies an RFC 7386 JSON Merge Patch to the namespace’s platform override; null on a key restores it. Gated by settings:update and platform:update.

Example:

Terminal window
omniglass setting update <namespace>

Commands for the standard resource

Create a standard

omniglass standard create [flags]

Creates a custom (non-official) standard, optionally as a variant of another. Gated by standard:create.

FlagTypeDefaultDescription
--labelstring(none)What an operator reads in pickers and lists
--namestring(none)The globally unique name; renameable
--parent-standard-idstring(none)A standard this one is a variant of, by handle or uuid

Example:

Terminal window
omniglass standard create --label label --name name

Delete a standard

omniglass standard delete <id>

Deletes a custom standard, refused if official (422) or still referenced by a system (409). Gated by standard:delete.

Example:

Terminal window
omniglass standard delete <id>

Get a standard

omniglass standard get <id>

Fetches a standard by id. Gated by standard:read.

Example:

Terminal window
omniglass standard get <id>

List standards

omniglass standard list

Lists the standard catalog, ordered alphabetically by label. A standard is the blueprint a system conforms to. Gated by standard:read.

Example:

Terminal window
omniglass standard list

Commands for the metric resource

Withdraw a metric from a standard

omniglass standard metric delete <id> <metric>

Removes one line from a custom standard’s contract; conforming systems keep any samples the series already holds, now off-contract. A metric the standard does not declare is a 404, and an official standard is read-only (422). Gated by standard:delete.

Example:

Terminal window
omniglass standard metric delete <id> <metric>

List a standard’s declared metrics

omniglass standard metric list <id>

Lists the standard’s declared-metric contract (which metrics every system conforming to it carries), ordered by metric name, each with its optional default and required flag. Gated by standard:read.

Example:

Terminal window
omniglass standard metric list <id>

Declare a metric on a standard

omniglass standard metric update <id> <metric> [flags]

Declares a catalog metric on a custom standard, or revises the declaration in place (the line is addressed by name, so the write is idempotent). Official standards are read-only (422); an unknown standard is a 404 and a metric the catalog does not know is a 422. Gated by standard:update.

FlagTypeDefaultDescription
--default-valuestring(none)The contract default, validated against the metric’s data_type; omit for no default
--requiredboolfalseWhether every system conforming to this standard must carry the metric; defaults to false

Example:

Terminal window
omniglass standard metric update <id> <metric>

Commands for the property resource

Withdraw a property from a standard

omniglass standard property delete <id> <property>

Removes one line from a custom standard’s contract; conforming systems keep any value they set for it, now off-contract. A property the standard does not declare is a 404, and an official standard is read-only (422). Gated by standard:delete.

Example:

Terminal window
omniglass standard property delete <id> <property>

List a standard’s declared properties

omniglass standard property list <id>

Lists the standard’s declared-property contract (what every system conforming to it exposes), ordered by property name, each with its optional default and required flag. Gated by standard:read.

Example:

Terminal window
omniglass standard property list <id>

Declare a property on a standard

omniglass standard property update <id> <property> [flags]

Declares a catalog property on a custom standard, or revises the declaration in place (the line is addressed by name, so the write is idempotent). Official standards are read-only (422); an unknown standard is a 404 and a property the catalog does not know is a 422. Gated by standard:update.

FlagTypeDefaultDescription
--default-valuestring(none)The contract default, validated against the property’s data_type; omit for no default
--requiredboolfalseWhether every system conforming to this standard must set the property; defaults to false

Example:

Terminal window
omniglass standard property update <id> <property>

Commands for the role resource

Withdraw a role from a standard

omniglass standard role delete <id> <role>

Removes the role from the standard, and with it every assignment conforming systems made to it. A role the standard does not declare is a 404. Gated by standard:delete.

Example:

Terminal window
omniglass standard role delete <id> <role>

List a standard’s declared roles

omniglass standard role list <id>

Lists the roles this standard declares (every conforming system inherits them live), ordered by name, each with its quorum and the component_types (accepted_types) and, if pinned, the products a filling component must match. Gated by standard:read.

Example:

Terminal window
omniglass standard role list <id>

Declare a role on a standard

omniglass standard role update <id> <role> [flags]

Declares a role every conforming system needs filled, or revises it in place (the role is addressed by name, so the write is idempotent and declaring is this same route). Partial by default: the fields present in the body change and the rest of the declaration is left alone. update_mask overrides that, writing exactly the fields it names, which is how a field is cleared, and [”*”] replaces the whole declaration. An unknown standard, type, or product is a 422, as is a mask naming a field this resource does not patch. Gated by standard:update.

FlagTypeDefaultDescription
--accepted-typesstring(none)The component_types a filling component’s product must be classified within (self or a descendant); replaces the accepted set wholesale when written, and an empty set accepts any type. Clearing it means naming accepted_types in update_mask
--alternatestring(none)The choice/alternate this role joins, addressed as “choice-name/alternate-name” (#626). An empty string detaches the role, making it unconditional; an unknown choice or alternate is a 422
--capacityint0The most components the role will accept; must be at least quorum, and unbounded on first declare. Name capacity in update_mask with no value here to clear it back to unbounded
--impactstring(none)What an impaired role means for its system; degraded on first declare. The same broken component matters differently depending on the slot it was filling: a dead confidence monitor is not a dead main display
--labelstring(none)The role’s human label; defaults to the role name on first declare
--pinned-productsstring(none)If set, a filling component’s product must be one of these; replaces the pinned set wholesale when written, and an empty set accepts any product of an accepted type. Clearing it means naming pinned_products in update_mask
--position-labelsstring(none)Human labels for each position within the role, by index; replaces the label set wholesale when written. An empty list is not a populated field, so clearing the labels means naming position_labels in update_mask
--quorumint0How many components must fill the role; one on first declare
--update-maskstring(none)Which fields this write changes (AIP-134). Omit it and the fields present in the body change and nothing else; name a field here and it is written even when the body leaves it empty, which is how a field is CLEARED; send [”*”] for full replacement, where every field the body omits goes back to its default. A field this resource does not patch is a 422 naming it

Example:

Terminal window
omniglass standard role update <id> <role>

Update a standard

omniglass standard update <id> [flags]

Patches a custom standard’s label or parent. Official standards are read-only (422). Gated by standard:update.

FlagTypeDefaultDescription
--labelstring(none)A new operator-facing label
--mapstring(none)The room-layout declaration to store; JSON null clears it; absent leaves it. Validated: positive aspect, coordinates in [0, 1], 1-based positions, no duplicate (role, position) pair
--parent-standard-idstring(none)A new variant parent, by handle or uuid

Example:

Terminal window
omniglass standard update <id>

Commands for the system resource

Check a system name

omniglass system checkName [flags]

Reports whether a proposed name is a valid slug and currently free within the given placement (parent wins over location; neither means the root/unplaced bucket). Advisory (Save is still gated by the unique constraint). Gated by system:update.

FlagTypeDefaultDescription
--locationstring(none)The location (by name or uuid) the entity would be placed at, if any and if unparented; ignored by the locations check
--namestring(none)The proposed name to check
--parentstring(none)The parent (by name or uuid) the entity would be created under, if any; omit for a root/unplaced check

Example:

Terminal window
omniglass system checkName --name name

Create a system

omniglass system create [flags]

Creates a system, optionally under a parent (a root needs an all-scoped grant), at a location, conforming to a standard, and classified as a system_type. Gated by system:create; the location reference resolves within the caller’s location:read scope, because the label this stores is rendered from it, and a location outside that scope is refused (422) exactly as :renderLabel refuses to preview it.

FlagTypeDefaultDescription
--expected-namestring(none)The name a create form previewed (POST /systems:renderLabel returns it). The create is refused with a 409 naming what it would produce instead, rather than silently landing a different name, if the number was taken or the system_type’s stem moved while the form was open. It does not name the row (the platform still does, and the row is still name_generated): it only asserts what that name will be. Applies only when the platform names the row: sending it beside a name is a 422.
--labelstring(none)What an operator reads; the name is the address
--locationstring(none)Location name this system is placed at
--namestring(none)Name, unique within its placement (the address; lowercase letters, digits, hyphens). Omit to have the platform generate one from the system_type’s stem.
--parentstring(none)Parent system name; omit for a root system
--standard-idstring(none)The standard it conforms to, by handle or uuid; omit for a one-off system
--system-type-idstring(none)The system_type it is classified as (what kind of space it is), by name or uuid; omit to leave it unclassified

Example:

Terminal window
omniglass system create

Delete a system

omniglass system delete <name>

Deletes a system, refused (409) while it still has child systems or is still referenced elsewhere. Gated by system:delete; read and delete scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system delete <name>

Commands for the event resource

List a system’s recent events, members included

omniglass system event list <name>

Returns the system’s own events and its members’, newest first, bounded to the last 24 hours, each row labeled by the owner that raised it. A component shared with another system appears in both systems’ lists. Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system event list <name>

Get a system

omniglass system get <name>

Fetches a system by name within the caller’s read scope. Out of scope is a non-disclosing 404. Gated by system:read.

Example:

Terminal window
omniglass system get <name>

Read every system’s health verdict

Read a system’s health

omniglass system health list <name>

The system’s current verdict and why: every role it needs filled, whether it is impaired, what an impaired role means for the system (impact), and for an impaired role which assigned components are down plus the alarms that took them down. A role that belongs to a choice (#626, an exclusive-or group such as an all-in-one alternate versus a component-built one) carries choice and alternate, and active is false when a different alternate answered the choice, meaning this role’s own impaired figure did not move the verdict. Transitions are the recorded edges over the last 30 days, one entry per change. Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system health list <name>

List systems in scope

omniglass system list

Lists the systems the caller may read, each filtered to its scope subtree. Gated by system:read.

Example:

Terminal window
omniglass system list

List tags on a system

omniglass system listTags <name>

Lists the tags bound directly on a system (not the resolved cascade). Gated by system:read.

Example:

Terminal window
omniglass system listTags <name>

Commands for the log resource

List a system’s members’ recent log lines

omniglass system log list <name>

Returns the members’ raw log lines merged newest first, bounded to the last 24 hours and capped, each naming the component that wrote it. Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system log list <name>

Commands for the member resource

Take a component out of a system

omniglass system member delete <name> <component>

Unbinds this component from the system. Refused with a 409 while it still fills a role here, since removing it would leave the system staffed by a non-member: unassign the role first. A component that was not a member is a 404. Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system member delete <name> <component>

List the components in a system

omniglass system member list <name>

The components bound into this system, ordered by name. Membership is what a role attaches to: every component staffing a role here is a member, and a member may also carry no role at all (a power conditioner is in the room without filling a declared slot). Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system member list <name>

Make this the component’s default system

omniglass system member setPrimary <name> <component>

Moves the component’s default to this membership. The default answers questions asked without a system in hand; it does not decide anything that names a system explicitly. A component that was not a member here is a 404. Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system member setPrimary <name> <component>

Put a component in a system

omniglass system member update <name> <component>

Binds this component into the system. Idempotent. A component’s first membership becomes its primary with nobody asking, so a component in exactly one system never has to think about the concept; a later membership does not take that default away. Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system member update <name> <component>

Commands for the metric resource

List a system’s effective metrics

omniglass system metric list <name>

Every metric the system’s standard declares, resolved to the series’ latest observed or calculated sample or the contract default until one arrives (is_sampled marks a live series), plus any metric sampled directly on the system (from_contract false). Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system metric list <name>

Commands for the sample resource

Read one metric series’ raw samples

omniglass system metric sample list <name> <metric> [flags]

The samples behind the effective read’s latest value for one series, newest first, windowed (hours) and capped (limit, newest kept). Gated by system:read; an out-of-scope owner is a non-disclosing 404.

FlagTypeDefaultDescription
--hoursint0The window in hours, counted back from now; 24 when unset
--limitint0The row cap, newest kept; 500 when unset

Example:

Terminal window
omniglass system metric sample list <name> <metric>

Move a system

omniglass system move <name> [flags]

Relocates and/or re-parents a system: at least one of location or parent is required (422 otherwise). Both follow the three-state convention (an omitted field is unchanged, an explicit empty string clears, a name sets). A reparent is cycle-guarded and scope-injected; clearing parent to root requires an all-scoped move grant, the same authorization a root create already requires. A separate act from update, and a separately grantable one (system:move), because a placement change is an authorization act, not a label edit: it moves a row out from under one grant’s subtree and under another’s. Recorded under its own audit verb, move, distinct from update. A relocate still recomputes health at both ends (the location it left and the one it arrived at); a reparent does not, since the health rollup runs system -> location, never through the system tree. A taken name at the destination is a 409. A move can RENAME the system: a platform-generated name is scoped to its placement bucket, so a move that changes the bucket re-mints the name and the ordinal in the destination. A move that changes no bucket, including a re-stated placement and a relocate of a parented system (a parent wins over a location), leaves the name alone, and an operator-typed name is never touched. Gated by system:move; read and move scopes drive the 404 versus 403 split, and the destination location resolves within the caller’s location:read scope, because the move restamps the label from it: a destination outside that scope is refused (422).

FlagTypeDefaultDescription
--locationstring(none)Relocates the system to this location name. An empty string clears its placement.
--parentstring(none)Re-parents the system within the system tree to this system name; cycle-guarded and scope-injected. An empty string makes it a root system (requires an all-scoped move grant).

Example:

Terminal window
omniglass system move <name>

Preview a system label recompute

omniglass system previewLabels

Lists exactly the rows a recompute would change, and leaves the fleet as it found it. Use it before :recomputeLabels to see the blast radius of a rule edit. Every generated label in the caller’s read and update scope is re-rendered from its current rules and compared with what is stored; a label an operator typed by hand is never a candidate. Bounded by the same two scopes the apply is, so it never lists a row the apply would then refuse to touch. A location preview also lists the components and systems placed at every location whose label would move, because those go stale the moment it does. Gated by system:update, the same permission the apply needs: a preview is half of an edit rather than a report, and an operator who cannot apply has no use for it.

Example:

Terminal window
omniglass system previewLabels

Commands for the property resource

Clear a property on a system

omniglass system property delete <name> <property>

Removes the system’s declared value, so the property falls back to the standard contract’s default (or leaves the effective read entirely when it was off-contract). Clearing a property the system never set is a 404. Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system property delete <name> <property>

List a system’s effective properties

omniglass system property list <name>

Every property the system’s standard declares, resolved to the system’s own value or the contract default (is_set marks the override), plus any property set directly on the system (from_contract false). Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system property list <name>

Commands for the sample resource

Read one property series’ change history

omniglass system property sample list <name> <property> [flags]

The change history behind the effective value for one property series, newest first, windowed (hours) and capped (limit, newest kept). Gated by system:read; an out-of-scope owner is a non-disclosing 404.

FlagTypeDefaultDescription
--hoursint0The window in hours, counted back from now; 24 when unset
--limitint0The row cap, newest kept; 500 when unset

Example:

Terminal window
omniglass system property sample list <name> <property>

Set a property on a system

omniglass system property update <name> <property> [flags]

Declares a value for the property on this system, overriding the standard contract’s default. Idempotent: the first set stores the value, a later set replaces it. The property need not be on the contract, but it must exist in the catalog (422 otherwise). Gated by system:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--valuestring(none)The value to declare, shape given by the property’s data_type

Example:

Terminal window
omniglass system property update <name> <property> --value <json>

Recompute system labels

omniglass system recomputeLabels

Applies what :previewLabels describes, over the rows in the caller’s read and update scope, and returns exactly what it changed. Idempotent: a second call changes nothing. A label an operator typed by hand is left alone, and clearing that label by hand is how it is handed back to the platform. Recorded as ONE audit row for the operation, naming the rule tier and the affected count, rather than one row per changed entity. Gated by system:update.

Example:

Terminal window
omniglass system recomputeLabels

Remove a tag value from a system

omniglass system removeTag <name> [flags]

Removes a key’s value from a system. Gated by system:update.

FlagTypeDefaultDescription
--keystring(none)The tag key to remove

Example:

Terminal window
omniglass system removeTag <name> --key key

Rename a system

omniglass system rename <name> [flags]

Moves the system’s name, the address an operator types and every external reference stores. A separate act from an update, and a separately grantable one, because it breaks bookmarks, runbooks, and integration config outside this system; inside it nothing breaks, since every reference holds the uuid. A taken name is a 409, an illegal or uuid-shaped one a 422. Gated by system:rename; read and rename scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--namestring(none)The new name, unique within its placement (lowercase letters, digits, hyphens)

Example:

Terminal window
omniglass system rename <name> --name name

Draft the name and label a system create would store

omniglass system renderLabel [flags]

The system tier of :renderLabel on components. Drafts the name and the label a system create would stamp, allocating nothing: the ordinal is read from the placement bucket and the drafted name is posted back as expected_name on the create. A system suppresses the first ordinal in a bucket, so the first boardroom in a room drafts as boardroom and the second as boardroom-2. Omitting name drafts the name the platform would mint and refuses (422) an unclassified system, the same refusal a nameless create gives, since the stem lives on the system_type. Gated by system:create; the parent resolves within the caller’s system:create scope and the location ref within location:read, because a system’s label can carry its location’s. Omitting parent is the parentless bucket, refused (403) without an all-scoped create grant, exactly as the create refuses it.

FlagTypeDefaultDescription
--locationstring(none)The location this system will sit at, by name or uuid. Resolved within the caller’s location:read scope.
--namestring(none)The name the row will carry. Omit it to draft the name and label the platform would produce; supply it to draft the label an operator-named row would carry, which has no ordinal at all.
--parentstring(none)The parent system, by name or uuid. Part of the placement bucket a generated name’s ordinal is read from. Resolved within the caller’s system:create scope.
--standard-idstring(none)The standard this system conforms to, by name or uuid; omit for a one-off system
--system-type-idstring(none)The system_type this system is classified by, by name or uuid. Required to render a generated name’s label: the stem lives on that registry row.

Example:

Terminal window
omniglass system renderLabel

Regenerate a system’s name

omniglass system resetName <name>

Hands the pen back to the platform: regenerates the name from the system’s current system_type and placement (the same rule a nameless create applies, the type’s stem plus the lowest free ordinal, bare for the first of that stem in the placement) and marks it name_generated, whether or not it already was. An unclassified system is a 422: the stem lives on the system_type. Gated by system:rename, the same token :rename uses: it changes the name, exactly that permission’s blast radius.

Example:

Terminal window
omniglass system resetName <name>

Commands for the role resource

Commands for the assignment resource

Unassign a component from a role

omniglass system role assignment delete <name> <role> <component>

Takes this component out of the role, leaving the role understaffed until another fills it. A component that was not filling the role is a 404. Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system role assignment delete <name> <role> <component>

Assign a component to a role

omniglass system role assignment update <name> <role> <component>

Puts this component in the role for this system. Refused with a 422 naming both parties when the component is not a typed match: its product’s component_type outside every type the role accepts, or (if the role pins products) its product not one of them. A role with no accepted types takes any type. Idempotent. Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system role assignment update <name> <role> <component>

Withdraw a role from a system

omniglass system role delete <name> <role>

Removes a role declared on this system, and with it every assignment to it. A role the system does not declare itself is a 404 (a role inherited from its standard is withdrawn on the standard, not here). Gated by system:update; read and update scopes drive the 404 versus 403 split.

Example:

Terminal window
omniglass system role delete <name> <role>

List a system’s effective roles

omniglass system role list <name>

Every role this system needs filled: those its standard declares (from_standard true) plus those declared directly on it, each with the types it accepts (and products it pins, if any), the components filling it, and how many more it wants before quorum (understaffed). A one-off system shows only its own. Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system role list <name>

Exchange two occupants’ positions within a role

omniglass system role swapPositions <name> <role> [flags]

Exchanges the positions of whichever components currently hold position and with within this role: an ordering change only, it does not affect who is assigned or the system’s health. Either position missing an occupant is a 404. Gated by system:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--positionint0One of the two positions to exchange
--withint0The other position to exchange with

Example:

Terminal window
omniglass system role swapPositions <name> <role> --position <int> --with <int>

Declare a role on a system

omniglass system role update <name> <role> [flags]

Declares a role directly on this system (how a one-off system gets roles at all, and how a conforming one adds what its standard does not cover), or revises it in place. Partial by default: the fields present in the body change and the rest of the declaration is left alone. update_mask overrides that, writing exactly the fields it names, which is how a field is cleared, and [”*”] replaces the whole declaration. Gated by system:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--accepted-typesstring(none)The component_types a filling component’s product must be classified within (self or a descendant); replaces the accepted set wholesale when written, and an empty set accepts any type. Clearing it means naming accepted_types in update_mask
--alternatestring(none)The choice/alternate this role joins, addressed as “choice-name/alternate-name” (#626). An empty string detaches the role, making it unconditional; an unknown choice or alternate is a 422
--capacityint0The most components the role will accept; must be at least quorum, and unbounded on first declare. Name capacity in update_mask with no value here to clear it back to unbounded
--impactstring(none)What an impaired role means for its system; degraded on first declare. The same broken component matters differently depending on the slot it was filling: a dead confidence monitor is not a dead main display
--labelstring(none)The role’s human label; defaults to the role name on first declare
--pinned-productsstring(none)If set, a filling component’s product must be one of these; replaces the pinned set wholesale when written, and an empty set accepts any product of an accepted type. Clearing it means naming pinned_products in update_mask
--position-labelsstring(none)Human labels for each position within the role, by index; replaces the label set wholesale when written. An empty list is not a populated field, so clearing the labels means naming position_labels in update_mask
--quorumint0How many components must fill the role; one on first declare
--update-maskstring(none)Which fields this write changes (AIP-134). Omit it and the fields present in the body change and nothing else; name a field here and it is written even when the body leaves it empty, which is how a field is CLEARED; send [”*”] for full replacement, where every field the body omits goes back to its default. A field this resource does not patch is a 422 naming it

Example:

Terminal window
omniglass system role update <name> <role>

Set a tag value on a system

omniglass system setTag <name> [flags]

Binds a value for a key on a system. The key must exist and apply to this entity kind. Setting a value is the ordinary entity write, gated by system:update.

FlagTypeDefaultDescription
--keystring(none)The tag key (must exist and apply to this kind)
--valuestring(none)The bound value

Example:

Terminal window
omniglass system setTag <name> --key key --value value

Update a system

omniglass system update <name> [flags]

Patches a system’s label, standard, or system_type. The name is not patchable: renaming is the :rename custom method. Placement is not patchable either: relocating or re-parenting is the :move custom method, gated separately, because a placement change is an authorization act. The standard and system_type fields both follow the three-state convention: an omitted field is unchanged, an explicit empty string clears (a one-off system, an unclassified system), a name sets. Gated by system:update; read and update scopes drive the 404 versus 403 split.

FlagTypeDefaultDescription
--labelstring(none)A new operator-facing label
--standard-idstring(none)A new standard, by handle or uuid; "" clears it (a one-off system)
--system-type-idstring(none)A new system_type, by name or uuid; "" clears it (an unclassified system)

Example:

Terminal window
omniglass system update <name>

Commands for the system-type resource

Create a system type

omniglass system-type create [flags]

Creates a custom (non-official) system_type, optionally under a parent and optionally with the label_rule systems of that type get. A root type must carry a stem, since it has no ancestor to inherit one from. An unparseable label_rule is a 422. Gated by system_type:create.

FlagTypeDefaultDescription
--abbrevstring(none)A compact form of label; omit to inherit the parent’s
--iconstring(none)A glyph key; omit to inherit the parent’s
--labelstring(none)What an operator reads in pickers and lists
--label-rulestring(none)The label template systems of this type get, a Go text/template over the system data map; omit to inherit the nearest ancestor’s. Refused (422) if it does not compile
--namestring(none)The globally unique name
--parent-idstring(none)The parent system_type, by name or uuid; omit for a root type
--stemstring(none)The prefix a generated system name is built from; omit to inherit the parent’s. Lowercase letters, digits, and hyphens. Required for a root type, which has no ancestor to inherit one from.

Example:

Terminal window
omniglass system-type create --label label --name name

Delete a system type

omniglass system-type delete <id>

Deletes a custom system_type, refused if official (422), still a parent of another system_type (409), or still classifying a system (409). Gated by system_type:delete.

Example:

Terminal window
omniglass system-type delete <id>

List system types

omniglass system-type list

Lists the system_type registry (the coarse taxonomy of what kind of space a system is: a boardroom, a classroom, a video wall), ordered alphabetically by label. Each row carries its parent link, so the console reconstructs the tree client-side. Distinct from standard, which is the blueprint a system conforms to. Gated by system_type:read.

Example:

Terminal window
omniglass system-type list

Update a system type

omniglass system-type update <id> [flags]

Patches a custom system_type’s label, stem, icon, abbrev, or label_rule. An unparseable label_rule is a 422 at rule-edit time, never a broken row at create time, and setting one restamps nothing on its own: apply it with /systems:recomputeLabels after seeing the blast radius with :previewLabels. Official types are read-only (422). Gated by system_type:update.

FlagTypeDefaultDescription
--abbrevstring(none)A new compact form; an empty string clears it, so this type inherits the nearest ancestor’s again
--iconstring(none)A new glyph key; an empty string clears it, so this type inherits the nearest ancestor’s again
--labelstring(none)A new operator-facing label
--label-rulestring(none)A new label template for systems of this type; omit to leave unchanged, "" to clear back to the inherited one. Refused (422) if it does not compile. Editing it restamps nothing on its own: apply it with /systems:recomputeLabels, having seen the blast radius with :previewLabels
--stemstring(none)A new name prefix (lowercase letters, digits, and hyphens); an empty string CLEARS it, so this type inherits the nearest ancestor’s again. A root type has no ancestor to inherit from and is refused (422).

Example:

Terminal window
omniglass system-type update <id>

Commands for the tag resource

Clear a platform tag value

omniglass tag clearPlatform <name>

Removes the platform-tier binding for a key. Gated by tag:update (all-scope) and platform:update.

Example:

Terminal window
omniglass tag clearPlatform <name>

Mint a tag key

omniglass tag create [flags]

Adds a key to the governed vocabulary. The name is normalized (a lowercase identifier); the optional label is what an operator reads instead. Gated by tag:create (all-scope, an admin action).

FlagTypeDefaultDescription
--allowed-valuesstring(none)The value enum a bound value must belong to; omit for free text
--applies-tostring(none)Entity kinds this key may bind to (component, system, location); omit for universal
--labelstring(none)What an operator reads in lists and pickers (Cost Center); omit to fall back to the name
--namestring(none)The normalized name (lowercase letters, digits, and hyphens), unique tenant-wide
--propagatesboolfalseWhether bindings cascade to descendants; defaults true

Example:

Terminal window
omniglass tag create --name name

Delete a tag key

omniglass tag delete <name>

Removes a key from the vocabulary, cascading its bindings. Gated by tag:delete (all-scope).

Example:

Terminal window
omniglass tag delete <name>

List tag keys

omniglass tag list

Lists the governed key vocabulary. Rides the tag:read floor.

Example:

Terminal window
omniglass tag list

Set a platform tag value

omniglass tag setPlatform <name> [flags]

Binds an install-wide default value for a key at the platform tier. Gated by tag:update (all-scope) and platform:update.

FlagTypeDefaultDescription
--valuestring(none)The bound value

Example:

Terminal window
omniglass tag setPlatform <name> --value value

Update a tag key

omniglass tag update <name> [flags]

Replaces a key’s governance fields (applies_to, propagates) and patches its label; the name is fixed. Gated by tag:update (all-scope).

FlagTypeDefaultDescription
--allowed-valuesstring(none)The value enum a bound value must belong to; omit for free text
--applies-tostring(none)Entity kinds this key may bind to; omit for universal
--labelstring(none)A new label; an empty string clears it, and the surface falls back to the name. Omit to leave it alone
--propagatesboolfalseWhether bindings cascade to descendants; defaults true

Example:

Terminal window
omniglass tag update <name>

List the distinct values bound for a key

omniglass tag values <name>

Returns the distinct values already bound for a key across the fleet, for value autocomplete on a free-text key (an enum key carries its allowed set on the key itself). Rides the tag:read floor.

Example:

Terminal window
omniglass tag values <name>

Commands for the task resource

Get a task

omniglass task get <id>

Fetches a task by id. A task whose component is out of the caller’s read scope is a non-disclosing 404. Gated by task:read.

Example:

Terminal window
omniglass task get <id>

List tasks in scope

omniglass task list

Lists the tasks whose interface’s owning component the caller may read (the component cascade). Tasks are derived from interfaces, not authored. Gated by task:read.

Example:

Terminal window
omniglass task list

Commands for the telemetry resource

Push telemetry for an owner

omniglass telemetry push [flags]

Accepts per-lane observations (metrics, properties, events) and raw log lines for one owner and publishes them onto the ingest lane. Each lane validates against its own catalog: an unregistered name is rejected and reported in the response rather than silently dropped, and a property or event payload violating its type’s schema refuses the batch with a 422. Gated by telemetry:push, and the caller’s scope must cover the declared owner; an out-of-scope owner is a non-disclosing 404.

FlagTypeDefaultDescription
--eventsstring(none)Natively caught occurrences, validated against event_type
--logsstring(none)Raw untyped log lines. No registry gate
--metricsstring(none)Numeric observations, validated against metric_type
--ownerstring(none)The entity every row in the batch lands under
--propertiesstring(none)Categorical observations, validated against property_type and each type’s validation schema
--sourcestring(none)Who observed this batch (recorded as the provenance source on every row)
--tsstring(none)Batch timestamp; a per-item timestamp overrides it

Example:

Terminal window
omniglass telemetry push --owner <json>

Mint an additional bearer token for an existing principal (direct DB)

omniglass token <username> [flags]

Issues a new bearer credential for an existing principal, addressed by username, and prints the token once. The same trusted direct-DB lane as bootstrap: token reissue, break-glass, or a fresh login token for make dev when the owner already exists. A —description (required) names what the token is for. The token expires after —ttl (default 90 days, hard maximum 365 days); every credential is time-bounded.

FlagTypeDefaultDescription
--descriptionstring(none)what the token is for (required)
--ttlduration2160h0m0show long the token is valid before it expires (max 365 days)

Commands for the variable resource

Create a variable

omniglass variable create [flags]

Sets a variable at an owner scope. The value is validated against value_type; the optional label is what an operator reads instead of the name. Gated by variable:create, plus platform:create when owner_kind is platform (the install-wide tier).

FlagTypeDefaultDescription
--labelstring(none)What an operator reads in lists and pickers (Poll Interval); omit to fall back to the name
--namestring(none)The cascade name (lowercase letters, digits, and hyphens); unique per owner
--ownerstring(none)The owning entity’s name; omit for a platform variable
--owner-kindstring(none)Which tier owns this variable
--valuestring(none)The value, validated against value_type
--value-typestring(none)The declared value type

Example:

Terminal window
omniglass variable create --name name --owner-kind owner_kind --value <json> --value-type value_type

Delete a variable

omniglass variable delete <id>

Removes a variable by id. Gated by variable:delete, plus platform:delete when the variable sits at the platform tier; read and delete scopes on the owner drive the 404 versus 403 split.

Example:

Terminal window
omniglass variable delete <id>

List variables (admin directory)

omniglass variable list

Lists every variable. Requires an all-scope read. Gated by variable:read.

Example:

Terminal window
omniglass variable list

Update a variable

omniglass variable update <id> [flags]

Replaces a variable’s value (validated against its fixed value_type) and patches its label; either may be omitted, and an empty label clears it. Name, type, and owner are fixed at creation. Gated by variable:update, plus platform:update when the variable sits at the platform tier.

FlagTypeDefaultDescription
--labelstring(none)A new label; an empty string clears it, and the surface falls back to the name. Omit to leave it alone
--valuestring(none)The new value, validated against the fixed value_type; omit to leave it

Example:

Terminal window
omniglass variable update <id>

Commands for the vendor resource

Create a vendor

omniglass vendor create [flags]

Creates a custom (non-official) vendor. Gated by vendor:create.

FlagTypeDefaultDescription
--iconstring(none)A glyph key, e.g. crestron-logo
--kindstring(none)The role the organization plays
--labelstring(none)What an operator reads in pickers and lists
--namestring(none)The globally unique name; renameable
--support-phonestring(none)The vendor’s support line
--websitestring(none)The vendor’s website (http or https)

Example:

Terminal window
omniglass vendor create --label label --name name

Delete a vendor

omniglass vendor delete <id>

Deletes a custom vendor, refused if official (422). Gated by vendor:delete.

Example:

Terminal window
omniglass vendor delete <id>

Get a vendor

omniglass vendor get <id>

Fetches a vendor by id. Gated by vendor:read.

Example:

Terminal window
omniglass vendor get <id>

List vendors

omniglass vendor list

Lists the vendor registry, ordered alphabetically by label. Populates the vendor picker on the product form. Gated by vendor:read.

Example:

Terminal window
omniglass vendor list

Update a vendor

omniglass vendor update <id> [flags]

Patches a custom vendor’s label, kind, icon, support_phone, or website. Official vendors are read-only (422). Gated by vendor:update.

FlagTypeDefaultDescription
--iconstring(none)A new glyph key
--kindstring(none)A new organization role
--labelstring(none)A new operator-facing label
--support-phonestring(none)A new support line
--websitestring(none)A new website (http or https)

Example:

Terminal window
omniglass vendor update <id>

Commands for the view resource

Commands for the fleet resource

Read the whole in-scope fleet in one call

omniglass view fleet list

Returns every in-scope location (flat, with parent and verdict), every in-scope system (with location and verdict), and one dot per component in each system. A dot carries the component id, its verdict, and the primary/shared flags, not a full component row. Each tier is scoped on its own read permission: a caller who can read locations but not components gets locations with empty systems, and a caller with no scope gets an empty result, not an error. Gated by location:read.

Example:

Terminal window
omniglass view fleet list