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), the permissions held on an all-scope grant (fleet_permissions), 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 calc-rule resource

Create a calc rule

omniglass calc-rule create [flags]

Authors a rule that derives its output key on each owner (each component its selector picks, or each system) from its aliased inputs, reduced by an expression over the aliases, each bound as the list of its current values (one per instance on a component, every member’s on a system, with members records beside it). Every input key must be registered (by name or uuid; the rule holds it by uuid) and health may not be one; each alias is an identifier of at most 64, not a keyword, a builtin or list function’s name, or a site binding (component, has, members, system, value), and unique; the reduce must compile and yield the output key’s type (a 422 placed at body.reduce.expr with its line and column, and the name when it is one no alias binds); the output must be a registered key that is not health and that no collection writes (a native probe’s key, or one a driver declares among its emits); an enabled rule may not close a cycle in the graph from every enabled rule’s input keys to its output key (a 422 naming the chain of keys), nor write a key another enabled rule writes (a 422 naming that rule). A list or get carries calc_error when a stored reduce no longer compiles. A name already taken is a 409. Returns the rule with its uuid. Audited. Gated by rule:create, with an all-scope grant.

FlagTypeDefaultDescription
--descriptionstring(none)What the rule derives and why
--enabledboolfalseDefaults to true
--inputsstring(none)The keys the rule reads, each by a unique alias its reduce uses; health may not be one
--labelstring(none)A human label
--namestring(none)The rule’s name (lowercase letters, digits, hyphens)
--output-keystring(none)The property or metric the rule writes: its type pins the reduce’s result. Not a reserved key (a native probe key, health), not a key a driver’s emits or a command type write, and not one another enabled rule writes
--owner-kindstring(none)What the rule derives a value on: each component its selector picks, or each system its selector picks (read from the system’s role-bound members). Fixed at create
--reducestring(none)An expression over the inputs by alias
--selectorstring(none)The owners the rule derives for: a component rule’s component_types and components, or a system rule’s system_types and systems; absent is every owner of its kind

Example:

Terminal window
omniglass calc-rule create --inputs <json> --name name --output-key output_key --owner-kind owner_kind --reduce <json>

Delete a calc rule

omniglass calc-rule delete <name>

Removes an operator rule; an official rule is read-only (409). Audited. Gated by rule:delete, with an all-scope grant.

Example:

Terminal window
omniglass calc-rule delete <name>

Get a calc rule

omniglass calc-rule get <name>

Returns one calc rule by name (or uuid). Gated by rule:read.

Example:

Terminal window
omniglass calc-rule get <name>

List calc rules

omniglass calc-rule list

Lists the calc rules, by name: the authored config that derives an output key on each owner from aliased inputs, each with its live state as counts (owners_computed, owners_pending, owners_unsupported, owners_failed) over the owners the caller may read. Rules read like a registry, so every rule is listed whatever the caller’s scope. Gated by rule:read.

Example:

Terminal window
omniglass calc-rule list

Preview a calc rule

omniglass calc-rule preview [flags]

Computes a candidate calc rule now, on each owner it selects that the caller may read, with the reduce the tick runs, and writes nothing (a read-only transaction). For each owner it answers the value the rule would write, the output’s current value and whether they differ, the inputs with no value, the members skipped and the instances left out as stale (named when the caller may read the component, else counted). An expression that reads one member’s value by position (members[1].value.t, or an element of an input’s list) over a system with a member the caller may not read is withheld on that system, its error counting the members out of scope; one that folds each input’s list whole (avg(t), max(t)) shows the aggregate. A component rule previews the selected components holding one of its inputs, as the tick would mark them. The owners holding a current value of the output are computed first, so the cap never hides one, and the answer lists the owners holding a value or that the rule would write one on first, each by name. At most owner_cap owners are computed, and a bound on total input reads stops a preview over large systems early, a whole owner at a time (owners_judged of owners_total, truncated past either). The candidate is checked as a save would check it: a reduce that does not compile, a cycle in the key graph, an output another enabled rule or a collection writes, or health are each a 422, so the author learns before saving; given a saved rule’s name it is judged as an edit of that rule. The selector’s names resolve in the caller’s read scope: a name that does not exist and one the caller may not read are the same 422, and a name shared in and out of scope means the one in scope. A preview takes no lock a save waits on. Gated by rule:read.

FlagTypeDefaultDescription
--inputsstring(none)The keys the rule reads, each by a unique alias its reduce uses
--namestring(none)A saved rule’s name, to preview an edit of it (its stored version is then not a second writer of its key); absent for a new rule
--output-keystring(none)The property or metric the rule would write
--owner-kindstring(none)What the rule derives a value on
--reducestring(none)An expression over the inputs by alias
--selectorstring(none)The owners the rule derives for; absent is every owner of its kind

Example:

Terminal window
omniglass calc-rule preview --inputs <json> --output-key output_key --owner-kind owner_kind --reduce <json>

Rename a calc rule

omniglass calc-rule rename <name> [flags]

Moves an operator rule’s name, the address an operator types. A separate act from an update, because it breaks bookmarks and integration config outside this system; inside it nothing breaks, since the audit rows hold the rule’s uuid and the key graph is of keys, not rule names. Not a material change: no version bump. An official rule keeps its name (409), a taken name is a 409, an illegal or uuid-shaped one a 422. Returns the rule with its uuid. Audited. Gated by rule:update, with an all-scope grant.

FlagTypeDefaultDescription
--namestring(none)The rule’s new name, unique among calc rules (lowercase letters, digits, hyphens)

Example:

Terminal window
omniglass calc-rule rename <name> --name name

Commands for the state resource

Get a calc rule’s live state

omniglass calc-rule state list <name> [flags]

What a calc rule last did on each owner the caller may read (components by the component read scope, systems by the system read scope), each owner named now: the value it computed, when and at which version, the inputs it found no value of, a system’s members that held none and the instances it left out as stale (named when the caller may read the component, else counted), an error, since when a system has had no members, and whether the owner is pending (with when a deferred mark is due). Ordered on the server, failing owners first, then pending, then those it wrote nothing for, then those holding a value, each by name, and at most limit of them; total and the pending depth count every owner the caller may read, listed or not. Gated by rule:read.

FlagTypeDefaultDescription
--limitint0The most owners to list, in state order: failing, pending, missing an input (or with no members), valued, each by name

Example:

Terminal window
omniglass calc-rule state list <name>

Update a calc rule

omniglass calc-rule update <name> [flags]

Patches a rule (an absent field is unchanged), bumping its version; a patch that changes nothing writes nothing. What changed is checked as on create: changed inputs, reduce or output recompile, a changed output must be one no collection writes, and an enabled rule may not close a cycle or share its output with another enabled rule. Enabling a disabled rule recompiles it and checks both, so a rule carrying calc_error cannot be enabled (422). The owner kind is fixed at create. Official rules are read-only (409). Audited. Gated by rule:update, with an all-scope grant.

FlagTypeDefaultDescription
--descriptionstring(none)What the rule derives and why
--enabledboolfalseWhether the rule runs; an enabled rule is part of the key graph
--inputsstring(none)Replace the keys the rule reads
--labelstring(none)A human label
--output-keystring(none)The property or metric the rule writes
--reducestring(none)Replace the reduce’s expression
--selectorstring(none)Replace the owners the rule derives for; an empty selector is every owner of its kind

Example:

Terminal window
omniglass calc-rule update <name>

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 (an alarm at or above the high level), 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 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. A key (or, without one, a message) beginning rule: is refused (422): that namespace names a rule’s condition
--messagestring(none)What is wrong, for the operator reading it later
--severitystring(none)How bad it is: a severity level by name (see /severity-levels); a level at or above high 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, with the component’s own verdict those alarms make. 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>

Read an alarm’s timeline

omniglass component alarm timeline <name> <id>

The alarm’s history in one list, oldest first: the events that carry it (an event rule’s fire event, which opened it, and its clear event, which resolved it) merged by time with its audit rows (the raise, each acknowledgement, the clear, and a rule edit that opened or resolved it, naming the editor). At one instant an event comes before the audit row it caused. Gated by alarm:read; a component outside the caller’s component read scope, and an alarm not on the component, are a non-disclosing 404.

Example:

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

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 endpoint), 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>

Commands for the impairment resource

Get what is broken on a simulated device

omniglass component impairment get <name>

The impairment an operator set on a simulated component (unplugged, or a degraded link), applied by the simulator beside its node when that simulator runs with impairments and NET_ADMIN. A healthy device reads all zero. Gated by simulation:read; the component resolves within the caller’s component read scope.

Example:

Terminal window
omniglass component impairment get <name>

Break or repair a simulated device

omniglass component impairment set <name> [flags]

Sets what is broken on a simulated component: unplugged, or a link with added latency, jitter, loss or a rate limit. It replaces the whole impairment, so a field left out reads as zero (setting a latency on an unplugged device plugs it back in); an empty body repairs it. Returns the impairment as stored, loss rounded to hundredths. Audited. The simulator beside the component’s node applies it on its next pull. Gated by simulation:update, whose scope is resolved on the component tier; a component outside the caller’s component:read is a non-disclosing 404, and one it can read but not impair is a 403. Jitter above latency, or a value outside its range, is a 422.

FlagTypeDefaultDescription
--jitter-msint0Variation on the delay, in milliseconds; at most the latency
--latency-msint0Delay added to traffic toward the device, in milliseconds
--loss-pctfloat640Share of packets toward the device dropped, in percent, to hundredths
--rate-kbitint0Bandwidth limit on the device’s link, both ways, in kilobits per second; 0 is unlimited
--unpluggedboolfalseDark on every protocol: connects time out, datagrams and pings go unanswered

Example:

Terminal window
omniglass component impairment set <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-endpoint reachability

omniglass component reachability list <name>

Composes, per endpoint, 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

Commands for the simulation resource

Fire an operation at a simulated component

omniglass component simulation fire <name> [flags]

Asks the simulator beside the component’s node to run one operation against the simulated component, on one of its protocol surfaces: an HTTP call, a command line (SSH, Telnet, TCP) or an SNMP get, and returns its answer. The simulator answers from the component’s live state in process, as its listeners would, so a command’s change sticks and the collector sees it; an impairment does not stop it. Audited. Gated by simulation:update, resolved on the component tier. A component that is not simulated is a 409, a surface it does not serve a 422, and no simulator answering a 503.

FlagTypeDefaultDescription
--bodystring(none)HTTP: the request body
--commandstring(none)SSH, Telnet or TCP: the command line
--methodstring(none)HTTP: the method; GET when empty
--oidstring(none)SNMP: the OID to get
--pathstring(none)HTTP: the request path
--surfacestring(none)The surface to fire on, by its name in the component’s surface list

Example:

Terminal window
omniglass component simulation fire <name> --surface surface

Get a component’s simulation

omniglass component simulation get <name>

Whether a component is simulated (it has an endpoint on a node and a product a simulator profile simulates) and, when it is, its node, address, live hits and impairment, the products its profile simulates, and its full API surface: every protocol surface, with its HTTP routes, commands and SNMP OIDs. A component that is not simulated reads simulated false. Gated by simulation:read; the component resolves within the caller’s component read scope.

Example:

Terminal window
omniglass component simulation get <name>

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 display

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 display

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 display

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
--specstring(none)The declarative spec body; validated against the catalogs, and a spec that fails validation refuses the write (422)
--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 snmp-generic

Get a driver

omniglass driver get <id>

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

Example:

Terminal window
omniglass driver get snmp-generic

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
--specstring(none)A replacement spec body; validated like the create’s, refused with a 422 when it cannot be interpreted
--versionstring(none)A new version string, e.g. 1.0.1

Example:

Terminal window
omniglass driver update snmp-generic

Commands for the endpoint resource

Create an endpoint

omniglass endpoint create [flags]

Creates an endpoint owned by a component (or a server-hosted one, which needs an all-scoped grant), named by its transport; 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 endpoint:create.

FlagTypeDefaultDescription
--componentstring(none)Owning component, by name or id; omit for a server-hosted endpoint (needs an all-scoped grant)
--driverstring(none)Attach this driver (by name or id): the spec derives the transport and params, and the endpoint’s tasks derive from the spec’s functions
--inputsstring(none)The inputs the driver’s spec declares (host, port, credentials as secret reference names); required ones must be supplied, defaults fill the rest
--labelstring(none)What an operator reads in lists (Control processor). Settable here because the name is derived from the transport, 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)Address/target settings (jsonb); an attach derives them from the inputs instead
--transportstring(none)A transport name from the code registry (GET /transports); the endpoint is named by it, unique within the component. Exactly one of transport (a bare probe endpoint) or driver (an attach) is set

Example:

Terminal window
omniglass endpoint create

Delete an endpoint

omniglass endpoint delete <endpoint>

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

Example:

Terminal window
omniglass endpoint delete 'boi.17c.415a.$comp.display-1/https'

Get an endpoint

omniglass endpoint get <endpoint>

Fetches an endpoint by its address (/) or uuid. An endpoint whose component is out of the caller’s read scope is a non-disclosing 404, and a name no endpoint the caller can see answers to is a 404 naming what was looked up (listing each match when more than one does). Gated by endpoint:read.

Example:

Terminal window
omniglass endpoint get 'boi.17c.415a.$comp.display-1/https'

List endpoints in scope

omniglass endpoint list

Lists the endpoints whose owning component the caller may read (the component cascade). Gated by endpoint:read.

Example:

Terminal window
omniglass endpoint list

Retry an endpoint’s gated connections

omniglass endpoint retry <endpoint> [flags]

Moves the endpoint’s retry counter, which is part of its connection fingerprint: a gate a refusal retrying cannot fix holds (a wrong credential, a changed host key or certificate, a reply its driver declares terminal) lifts, the node recycles the endpoint’s held session, and every connection to it is attempted again. Fixing the secret, the address, the transport, the tls mode or the driver’s login needs no retry: the change moves the fingerprint itself. An unrelated edit (a label) moves nothing. host_key names a key to trust, the one the endpoint’s transport pins (the offered key a key refusal names): an ssh host key, or a tls or https endpoint’s certificate public key, which such an endpoint also takes as certificate. It becomes the declared pin and recycles the session onto it whatever its state, an audited acceptance of the change. While the endpoint’s gate names an offered key, the key must be that key, so a trust confirmed against a refusal the record has since moved past is a 409 and changes nothing. Audited, a trusted key with the pin it replaced (old) and the pin it set (new). Gated by endpoint:retry; read and retry scopes (through the component) drive the 404 versus 403 split.

FlagTypeDefaultDescription
--certificatestring(none)A tls or https endpoint only: the same as host_key, named for the certificate (the offered_key a certificate refusal names). It becomes the endpoint’s declared tls-certificate pin, held to the same rule (the exact offered key while a key refusal holds), and the session redials onto it. Omit to retry with the pin unchanged
--host-keystring(none)The SHA256 fingerprint of a changed key the operator now trusts, the key the endpoint’s transport pins (the offered_key a key refusal names on the component’s reachability read): an ssh endpoint’s host key, which becomes its declared ssh-host-key, or a tls or https endpoint’s certificate public key, which becomes its declared tls-certificate. The session redials onto it. While a key refusal holds, it must be that exact offered key: any other is a 409 that changes nothing (the refusal on record is the node’s last word, so to trust a key the component presents since, retry without a key first). With no key refusal held it declares a pin ahead of time. Omit to retry with the pin unchanged

Example:

Terminal window
omniglass endpoint retry 'boi.17c.415a.$comp.display-1/https'

Update an endpoint

omniglass endpoint update <endpoint> [flags]

Patches an endpoint’s node placement, params, label, or (driver-attached) its connection inputs in place: the host, port and attached secret references, validated against the driver’s declared inputs, the endpoint’s tasks re-derived in the same transaction. A value the driver refuses is a 400 naming the field. An empty label clears it and the surface falls back to the derived name. Gated by endpoint:update; read and update scopes (through the component) drive the 404 versus 403 split.

FlagTypeDefaultDescription
--inputsstring(none)A driver-attached endpoint’s inputs, edited in place (#1061): the host, the port, an attached secret’s reference name, any input the driver declares. Merged over the stored inputs and validated against the driver; a value it refuses is a 400 naming the input. Changing where a credential is sent needs the caller to be able to use that credential
--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 address/target settings (jsonb). On a driver-attached endpoint only the timeout is set here: its address derives from its host and port inputs
--transportstring(none)The transport: a driver-attached endpoint takes only one its driver speaks

Example:

Terminal window
omniglass endpoint update 'boi.17c.415a.$comp.display-1/https'

Commands for the event-rule resource

Create an event rule

omniglass event-rule create [flags]

Authors a rule whose condition starts on each component it watches when its sample key meets the fire criteria for the fire sustain, and ends when the clear criteria (or the negation of fire) holds for the clear sustain. It names the event type it writes when the condition starts (required) and, optionally, when it ends; with a severity it also raises an alarm while the condition holds, and without one it is informational. Criteria are expressions over the sample (value, key, instance, component.name, component.type) yielding true or false; a body may give {expr} or the short form {op, value}, and the answer is always {expr}. The key must be a registered property or metric, the criteria must compile against its lane (an unknown name or a result that is not a bool is a 422 naming the criteria, line and column), the event types registered and the severity, when given, a level that exists (else 422); a name already taken is a 409. Audited. Gated by rule:create, with an all-scope grant.

FlagTypeDefaultDescription
--clear-criteriastring(none)The criteria that ends it: {expr} or {op, value}; absent clears on the negation of fire_criteria, !(fire)
--clear-event-typestring(none)The event type the rule writes when its condition ends, by name (condition-ended is the generic one); absent, it writes none
--clear-sustainstring(none)A Go duration; empty is 0s
--descriptionstring(none)What the rule watches for and why
--enabledboolfalseDefaults to true
--fire-criteriastring(none)The criteria that starts the condition: {expr}, or the short form {op, value}
--fire-event-typestring(none)The event type the rule writes when its condition starts, by name (condition-started is the generic one)
--fire-sustainstring(none)A Go duration; empty is 0s
--labelstring(none)A human label; also the alarm message when message is empty
--messagestring(none)The alarm message; empty uses the label or the name
--namestring(none)The rule’s name (lowercase kebab)
--sample-keystring(none)The property or metric the rule reads
--selectorstring(none)The components the rule watches (component types and components); absent is every component
--severitystring(none)The severity level the alarm is raised at, by name; absent or empty, the rule is informational and raises no alarm

Example:

Terminal window
omniglass event-rule create --fire-criteria <json> --fire-event-type fire_event_type --name name --sample-key sample_key

Delete an event rule

omniglass event-rule delete <name>

Removes an operator rule; an official rule is read-only (409). Audited. Gated by rule:delete, with an all-scope grant.

Example:

Terminal window
omniglass event-rule delete <name>

Get an event rule

omniglass event-rule get <name>

Returns one event rule by name, with its live state as counts over the components the caller may read. Gated by rule:read.

Example:

Terminal window
omniglass event-rule get <name>

List event rules

omniglass event-rule list

Lists the event rules, the authored config that raises alarms, each with its live state as counts (conditions_in_force, open_alarms, pending_streaks) read in the same query. Rules read like a registry: every rule is listed whatever the caller’s scope, while the counts cover only components the caller may read. Gated by rule:read.

Example:

Terminal window
omniglass event-rule list

Preview an event rule

omniglass event-rule preview [flags]

Judges a candidate rule (sample key, selector, criteria) without writing anything, as the ingest would have with no sustains (the answer says they are ignored): over each series it selects on components the caller may read, from the state its newest deciding sample in the 7 days before the window set (state_unknown when there is none), through every sample in the last 24 hours that the ingest would have judged (a late sample older than one before it decides nothing). Answers the edges it would have written and the series it would hold in force now. Its reads are index probes per series, capped at row_cap window samples taken a whole series at a time: series_judged of series_total, and truncated when the cap stopped it. A selector naming a component the caller cannot read is the same 422 as one that does not exist. Criteria take {expr} or {op, value}; one that does not compile is a 422 naming the criteria, line and column. Gated by rule:read.

FlagTypeDefaultDescription
--clear-criteriastring(none)The criteria it ends on; absent, the negation of fire_criteria
--clear-sustainstring(none)Accepted and ignored, like fire_sustain
--fire-criteriastring(none)The criteria its condition starts on: {expr}, or the short form {op, value}
--fire-sustainstring(none)Accepted so a rule body previews as it is, and ignored: a preview judges each sample alone
--sample-keystring(none)The property or metric the candidate rule reads
--selectorstring(none)The components it watches; absent or empty, every component

Example:

Terminal window
omniglass event-rule preview --fire-criteria <json> --sample-key sample_key

Rename an event rule

omniglass event-rule rename <name> [flags]

Moves an operator rule’s name, the address an operator types. A separate act from an update, because it breaks bookmarks and integration config outside this system; inside it nothing breaks, since every reference holds the rule’s uuid (an alarm’s raised_by_rule_id and dedup key, a condition, a streak, an event’s derived_by_rule_id). Not a material change: no version bump, streaks keep running and conditions stay in force. An event keeps the name it was written under (derived_by_rule); the rule’s next events carry the new one. An official rule keeps its name (409), a taken name is a 409, an illegal or uuid-shaped one a 422. Returns the rule with its uuid. Audited. Gated by rule:update, with an all-scope grant.

FlagTypeDefaultDescription
--namestring(none)The rule’s new name, unique among rules (lowercase letters, digits, hyphens)

Example:

Terminal window
omniglass event-rule rename <name> --name name

Commands for the state resource

Get an event rule’s live state

omniglass event-rule state list <name>

What a rule holds right now: the conditions it holds in force (one per component and instance, whether or not it raises an alarm), the alarms it raised that are still open, each on a component and instance, its streaks waiting out a sustain, and when it last judged an ingested sample. Only conditions, alarms and streaks on components the caller may read are listed. Gated by rule:read.

Example:

Terminal window
omniglass event-rule state list <name>

Update an event rule

omniglass event-rule update <name> [flags]

Patches a rule (an absent field is unchanged), bumping its version; disabling it stops new opens. Criteria take {expr} or the short form {op, value}, compiled as on create (a 422 names the criteria, line and column). An empty severity makes the rule informational and an empty clear_event_type drops its clear event; the fire event type cannot be emptied (422). Official rules are read-only (409). Audited. Gated by rule:update, with an all-scope grant.

FlagTypeDefaultDescription
--clear-criteriastring(none)The criteria that ends it: {expr} or {op, value}; absent clears on the negation of fire_criteria, !(fire)
--clear-event-typestring(none)The event type the rule writes when its condition ends, by name; empty writes none
--clear-negatesboolfalseDrop the clear criteria, so the rule clears on the negation of its fire criteria
--clear-sustainstring(none)How long the clear criteria must hold, a Go duration; empty is 0s
--descriptionstring(none)What the rule watches for and why
--enabledboolfalseWhether the rule evaluates; defaults to true on create
--fire-criteriastring(none)The criteria that starts the condition: {expr}, or the short form {op, value}
--fire-event-typestring(none)The event type the rule writes when its condition starts, by name; it cannot be emptied
--fire-sustainstring(none)How long the fire criteria must hold, a Go duration (e.g. 30s); empty is 0s
--labelstring(none)A human label; also the alarm message when message is empty
--messagestring(none)The alarm message; empty uses the label or the name
--sample-keystring(none)The property or metric the rule reads
--selectorstring(none)Replace the components the rule watches; absent leaves them unchanged, and an empty selector watches every component
--severitystring(none)The severity level the alarm is raised at, by name; empty makes the rule informational (no alarm)

Example:

Terminal window
omniglass event-rule update <name>

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 (409), and so is a type still in use: one that recorded events or an event rule’s fire or clear event type names is a 409 until nothing names it. 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 expression resource

Validate an expression

omniglass expression validate [flags]

Compiles an expression against a registered site’s environment and answers whether it compiles, with positioned diagnostics, and the site’s bindings, admitted builtins and run budget, all generated from the site’s declaration. For criteria a sample key is required, and types the value (a metric is a number; a property is text, or a bool for a bool property). For calc the key is the rule’s output key, typing the result, and the rule’s inputs (and owner_kind, component by default) give the bindings, each input’s alias bound to the list of its key’s type (a system also binds members, one record per member); an input that is unknown, or an alias that is not an identifier, is reserved or repeats, is a 422; a name the expression uses that no alias binds is a diagnostic carrying that name (unbound); the answer’s value_type so reveals a key’s lane and data type to a rule:read holder, as the rule list already does. Compiles without the engine’s program cache and stores and runs nothing. An unknown site, a missing or unknown key is a 422. Gated by rule:read.

FlagTypeDefaultDescription
--inputsstring(none)For calc (required there), the rule’s inputs: each bound by its alias, typed by its key (by name or uuid)
--keystring(none)The sample key that types the expression (required at both sites). For criteria, the key the rule reads: its lane and data type type the value (a metric is a number; a property is text, or a bool for a bool property). For calc, the rule’s output key: its type is the result the reduce must yield
--owner-kindstring(none)For calc, what the rule derives on: each input binds by its alias as the list of its current values (one per instance on a component, every member’s on a system); a system also binds members, one record per role-bound member with value. and has. per input; defaults to component
--sitestring(none)Where the expression is written: calc, a calc rule’s reduce; criteria, an event rule’s fire_criteria or clear_criteria
--sourcestring(none)The expression

Example:

Terminal window
omniglass expression validate --site site --source source

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 <file>

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 codec-firmware-2.1.4.txt

Download a file’s bytes

omniglass file download <file>

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 codec-firmware-2.1.4.txt

Get a file’s metadata

omniglass file get <file>

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 codec-firmware-2.1.4.txt

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 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 room

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 room <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 room

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 room <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 room <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 room

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 room <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 room

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 room

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. A metric type a calc rule writes is a 409 naming the rule. 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 endpoints, 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

Get a node’s simulator

omniglass node simulation <name>

The devices a simulator beside the node serves (each component with an endpoint placed on the node, within the caller’s component read scope), joined to the hits the server has seen and the simulator’s capabilities. Hits are live and per server process, not stored. Requires an all-scope node read. Gated by node:read.

Example:

Terminal window
omniglass node simulation <name>

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, the location, system or component the scope kind names, by name, dotted address or uuid (stored as its uuid); 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 <group>

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

Example:

Terminal window
omniglass principal-group delete night-shift

Get a principal group

omniglass principal-group get <group>

One principal group, by name or uuid. Gated by principal_group:read:admin.

Example:

Terminal window
omniglass principal-group get night-shift

Commands for the grant resource

Grant a role to a group

omniglass principal-group grant create <group> [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, the location, system or component the scope kind names, by name, dotted address or uuid (stored as its uuid); 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 night-shift --role role --scope-kind scope_kind

Revoke a group grant

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

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

Example:

Terminal window
omniglass principal-group grant delete night-shift <grantId>

List a group’s grants

omniglass principal-group grant list <group>

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 night-shift

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 <group> [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: a human’s username, a service account’s name, or its uuid

Example:

Terminal window
omniglass principal-group member create night-shift --principal-id principal_id

Remove a member from a group

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

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 night-shift alice

List a group’s members

omniglass principal-group member list <group>

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

Example:

Terminal window
omniglass principal-group member list night-shift

Rename a principal group

omniglass principal-group rename <group> [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 night-shift --name name

Update a principal group

omniglass principal-group update <group> [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 night-shift

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 boreal-edge-55

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 boreal-edge-55

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 boreal-edge-55 <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 boreal-edge-55

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 boreal-edge-55 <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 boreal-edge-55 <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 boreal-edge-55

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 boreal-edge-55 <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 boreal-edge-55

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. A property a calc rule writes is a 409 naming the rule. 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 <secret>

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 demo-panel-login

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 <secret>

Removes a secret, by name or uuid. 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 demo-panel-login

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 <secret>

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 demo-panel-login

Update a secret

omniglass secret update <secret> [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 demo-panel-login

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 [flags]

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.

—scenario picks the fleet: dev the example fleet make dev comes up with empty nothing beyond the boot seed: a fresh install’s first run degraded the example fleet with an open alarm on one in every 3 components large the example fleet plus its self-contained rooms copied 6 times under each of 5 replica sites (only the example fleet is simulated)

FlagTypeDefaultDescription
--scenariostringdevthe fleet to seed (see the list above)
--sim-fleetbooltruewire the simulated fleet: addresses and endpoints on the dev node for every example-fleet component the simulator serves, never a scenario’s copies or a hand-added device (make dev-sim collects from them)
--sim-port-offsetint10000the lift the simulator applies to ports below 1024, which the simulated fleet’s endpoints target: the default for make dev-sim’s unprivileged simulator, 0 for one that binds the real ports (in a container)

Run the control-plane server (HTTP API)

omniglass server

Runs the control plane: applies pending migrations and the boot seed, then serves the HTTP API on OMNIGLASS_ADDR and hosts the embedded NATS bus nodes connect to on OMNIGLASS_NATS_ADDR. Either address may name port 0, which binds whatever free port the kernel hands out; set OMNIGLASS_READY_FILE to a path and, once both listeners are bound, the server writes the addresses it got there as JSON (addr, nats_addr, and the nats_url it advertises to nodes). A file already at that path is cleared first thing at boot, and the server removes its own at a graceful shutdown (SIGINT or SIGTERM). A supervisor or a test reads the ports from that file rather than picking one and hoping it stays free. Configured by environment; see the deployment guides.

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 severity-level resource

Create a severity level

omniglass severity-level create [flags]

Adds an operator severity level at a rank of its own, between two others without renumbering. A name or rank already taken is a 409; a color outside the palette is a 422. Audited. Gated by severity_level:create, with an all-scope grant: a level’s rank moves health fleet-wide.

FlagTypeDefaultDescription
--colorstring(none)One of gray, blue, green, yellow, orange, red, darkred
--labelstring(none)A human label
--namestring(none)The level’s name (lowercase kebab)
--rankint0Its place among the levels: higher is more severe; unique

Example:

Terminal window
omniglass severity-level create --color color --name name --rank <int>

Delete a severity level

omniglass severity-level delete <name>

Removes an operator level no alarm or event rule names; an official level or one in use is a 409. Audited. Gated by severity_level:delete, with an all-scope grant.

Example:

Terminal window
omniglass severity-level delete <name>

Get a severity level

omniglass severity-level get <name>

Returns one severity level by name. Gated by severity_level:read.

Example:

Terminal window
omniglass severity-level get <name>

List severity levels

omniglass severity-level list

Lists the severity levels, least to most severe, each with whether an active alarm at it puts a component in outage. Gated by severity_level:read.

Example:

Terminal window
omniglass severity-level list

Update a severity level

omniglass severity-level update <name> [flags]

Patches an operator level’s name, label, color or rank (an absent field is unchanged); a rename carries every alarm at the level with it. Official levels are read-only (409). Audited. Gated by severity_level:update, with an all-scope grant.

FlagTypeDefaultDescription
--colorstring(none)One of gray, blue, green, yellow, orange, red, darkred
--labelstring(none)A human label
--namestring(none)A new name; every alarm at this level follows
--rankint0Its place among the levels; unique

Example:

Terminal window
omniglass severity-level update <name>

Simulate the devices placed on a node

Serve the node’s simulated devices and follow changes until interrupted

omniglass sim run [flags]

Serves each component placed on the node whose product has a simulator profile and whose endpoints target a loopback address, on that address, and reports every request it answers to the server. Re-pulls the device list on an interval, so devices added or removed on the server start or stop without a restart.

FlagTypeDefaultDescription
--impairmentsboolfalseapply impairments (unplug, latency, loss) and truthful ping by rewriting the firewall and traffic shaping of this network namespace; needs NET_ADMIN, and is meant for a namespace of the simulator’s own (a pod or container)
--namestring(none)the node this simulator runs beside (env OMNIGLASS_NODE_NAME)
--pollduration10show often to re-pull the device list
--port-offsetint0lift the simulated ports below 1024 by this much, to serve without the privilege to bind them
--serverstring(none)Omniglass server base URL (env OMNIGLASS_SERVER)
--tokenstring(none)that node’s enrollment token (env OMNIGLASS_NODE_TOKEN)

Commands for the simulation resource

Add a simulated component

omniglass simulation add-component <name> [flags]

Creates a component of a simulated product, at the lowest free address in the simulated block (127.60.0.0/16), with the endpoint the collector reaches it through placed on the node: a driver attach where the driver’s inputs are known (an SNMP attach needs the sim-community secret, else it falls back), otherwise a reachability probe on a port the profile serves, lifted as the node’s simulator lifts its ports. The simulator serves it from its next pull, with no restart. Gated by simulation:update, and also needs component:create and endpoint:create, each in the caller’s own scope. A node with no simulator connected is a 409, and a product no profile simulates a 422.

FlagTypeDefaultDescription
--locationstring(none)Where the component sits, by name or dotted path
--namestring(none)The new component’s name
--productstring(none)A product a simulator profile simulates

Example:

Terminal window
omniglass simulation add-component <name> --name name --product product

Add a simulated system

omniglass simulation add-system <name> [flags]

Creates a system built to a standard, with a simulated component for each staffed role in the standard’s plan (see plan-simulation-system), each at its own free address in the simulated block with its endpoint placed on the node, and assigned its role, all in one transaction: it lands whole or not at all. Component names are minted as an unnamed create mints them; roles nothing simulated fits are left short and listed. The simulator serves the components from its next pull. Gated by simulation:update, and also needs system:create, system:update, system:read, component:create, endpoint:create and node:read (and location:read when it names a place), each in the caller’s own scope; the components are created without a parent, so component:create must be all-scope. A refused piece is mapped as its own route maps it (a component refused is a 403). A node with no simulator connected is a 409, and a standard nothing simulated can staff a 422.

FlagTypeDefaultDescription
--locationstring(none)Where the system and its components sit, by name or dotted path
--namestring(none)The system’s name; minted from its type when empty
--standardstring(none)The standard the system is built to; its roles decide the components
--system-typestring(none)The system’s type, which also mints its name when none is given

Example:

Terminal window
omniglass simulation add-system <name> --standard standard --system-type system_type

Get the simulated fleet

omniglass simulation get

Every node a simulator has pulled for since the server started, each with its capabilities, its account of impairments, and the components it simulates within the caller’s component read scope, joined to their live hits. A caller sees a node’s simulator when its component read scope holds at least one component the node simulates (an all-scope reader sees all of them); no node read is needed. Connected is true when any listed simulator pulled recently. Hits are per server process, not stored. Gated by simulation:read.

Example:

Terminal window
omniglass simulation get

Plan a simulated system to a standard

omniglass simulation plan-system <standard>

Previews a simulated system built to a standard: each of the standard’s roles (one alternate taken per choice) staffed with the first simulated product that fits its accepted types and pins, as many as its quorum and at least one, or left short with the reason when nothing simulated fits. Creates nothing. Gated by simulation:read.

Example:

Terminal window
omniglass simulation plan-system <standard>

List the simulator’s profiles

omniglass simulation profiles

The simulator’s profile catalog, embedded in the binary: each profile with the products it simulates and the protocols it speaks. Adding a simulated component names one of these products. Gated by simulation:read.

Example:

Terminal window
omniglass simulation profiles

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 meeting-room

Get a standard

omniglass standard get <id>

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

Example:

Terminal window
omniglass standard get meeting-room

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 meeting-room <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 meeting-room

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 meeting-room <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 meeting-room <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 meeting-room

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 meeting-room <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 meeting-room <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 meeting-room

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 meeting-room <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 meeting-room

Commands for the system resource

Commands for the alarm resource

List a system’s members’ alarms

omniglass system alarm list <name>

Every member’s alarms in one read, newest first, each naming its component: the active ones whatever their age, and those cleared in the last 30 days, capped at 500. It is what a system’s Activity reads to explain its incidents, one request however many members the system has. Gated by system:read; an out-of-scope system is a non-disclosing 404.

Example:

Terminal window
omniglass system alarm list <name>

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). Each member carries its own verdict, so a system’s view can poll its members’ health here rather than reading the whole fleet. 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 av

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 av

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 endpoint’s owning component the caller may read (the component cascade). Tasks are derived from endpoints, 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. Every key has one writer class, and a push writes only a collected key: a key a native probe writes (a reachability verdict or rung, a probe metric or timing, a held session’s state, collection-failed) is a node’s own observation and a platform key (health) is the platform’s, each rejected by name on every lane; a key a calc rule outputs is rejected naming the rule. 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 transport resource

List the transports the platform speaks

omniglass transport list

Lists the transport registry: the wires an endpoint can speak over, a build-time fact of the binary (ADR-0073). Gated by endpoint:read, the surface that consumes it.

Example:

Terminal window
omniglass transport list

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 <variable>

Removes a variable, by name or uuid. 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 poll-interval

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 <variable> [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 poll-interval

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 boreal

Get a vendor

omniglass vendor get <id>

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

Example:

Terminal window
omniglass vendor get boreal

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 boreal

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