observa install
Verify a signed installation manifest and compose exactly the approved component artifacts it names.
Syntax
observa install [--manifest <signed.json>] [--artifacts <dir>] [--expect-installation <id>]
Example
observa install
- Changes locally
- Creates the release tree, artifact cache, manifest store,
state.json and the current symlink under ~/.observa/installation (override with OBSERVA_HOME). Touches nothing else.
- Contacts Hosted
- Yes when
--manifest is omitted — it retrieves the manifest Hosted issued for this paired installation. No with --manifest.
- Safety
- Both paths use one verifier: strict parse, closed schema, Ed25519 signature against the public key shipped in the package, tenant and installation binding, then every artifact by manifest-pinned SHA-256. Transport is not trust. The only accepted mode is
SHADOW_ONLY; a manifest asking for anything else fails closed at schema validation.
observa update
Install a strictly newer signed manifest, retaining the current release for rollback.
Syntax
observa update [--manifest <signed.json>] [--artifacts <dir>]
Example
observa update --manifest ./observa-manifest.signed.json
- Changes locally
- Stages the new release beside the old one and moves
current. The previous manifest id is retained.
- Contacts Hosted
- Yes when
--manifest is omitted.
- Safety
- Refuses
NOT_INSTALLED without an existing installation and MANIFEST_NOT_NEWER_THAN_CURRENT for anything not strictly newer. A failed update leaves the existing installation intact.
observa rollback
Return to the retained previous signed manifest.
Syntax
observa rollback
Example
observa rollback
- Changes locally
- Moves
current back to the previous release, rewrites state.json, and clears the previous-manifest pointer. If the retained tree fails integrity it is rebuilt offline from the verified artifact cache.
- Contacts Hosted
- No — fully offline.
- Safety
- Refuses
ROLLBACK_TARGET_ABSENT when there is nothing to roll back to. Rollback is single-depth: after rolling back there is no further previous release.
observa start
Start Observa’s own local observer service.
Syntax
observa start [--port <port>]
Example
observa start
- Changes locally
- Writes a pidfile under the installation’s service directory and spawns the verified adapter from the active release.
- Contacts Hosted
- Yes when paired — this is what delivers SHADOW_ONLY evidence to your workspace.
- Safety
- Starts only Observa’s own process, from the active verified release.
observa stop
Stop Observa’s own local observer service.
Syntax
observa stop
Example
observa stop
- Changes locally
- Signals the pid from Observa’s own pidfile and removes it.
- Contacts Hosted
- No
- Safety
- Structurally cannot stop anything else. The only process it will signal is one whose pid came from Observa’s pidfile and whose command line still names the Observa release path. There is no search-by-name, no
pkill, and no port scan. It never stops your n8n.
observa uninstall
Remove Observa-managed state from this machine.
Syntax
observa uninstall --yes [--purge-config]
Example
observa uninstall --yes
- Changes locally
- Stops the service, then removes the releases, artifact cache, manifest store, service directory,
current symlink and state.json. Your local config survives by default; --purge-config removes it too.
- Contacts Hosted
- No — it does not revoke a Hosted credential. Run
unpair first if you want delivery revoked.
- Safety
- Refuses without
--yes. Removing state locally does not revoke anything server-side.
observa config set
Set one local configuration value. These are yours and stay on this machine.
Syntax
observa config set <key> <value>
Example
observa config set n8n_loopback_credential '<choose any local secret, 24+ characters>'
- Changes locally
- Writes the owner-only config file at
~/.observa/installation/config/local.json.
- Contacts Hosted
- No
- Safety
- The value is never echoed back, never logged, never diagnosed and never placed in a manifest or artifact. Keys the pairing flow owns are refused here with
HOSTED_CONFIG_PAIRING_OWNED — use observa pair.
observa n8n-setup
Write the owner-only environment file for n8n’s supported global backend hook.
Syntax
observa n8n-setup
Example
observa n8n-setup
- Changes locally
- Copies the packaged hook into the installation and writes an owner-only
.env-style file, then prints its path.
- Contacts Hosted
- No
- Safety
- It does not start, restart or reconfigure n8n, and it edits no workflow. Loading that environment file into your n8n service is your step. Requires an installation and a configured
n8n_loopback_credential of at least 24 characters.