Silicon IAMDocs

Telemetry

IAM records operational diagnostics and browser analytics in the dedicated Space Station table tos.siliconiam. Telemetry defaults to enabled when its private recording key is configured. Missing or invalid configuration leaves IAM usable without sending telemetry. This table is separate from IAM's authoritative PostgreSQL database and security audit history.

What is recorded

Every record includes schema_version, service, source, step, event, version, environment, an instance identifier, progress, and structured context. Sources distinguish iam-api, iam-scoped-api, iam-worker, iam-operator, rust-client, iam-cli, iam-daemon, and iam-web.

Native events cover process lifecycle, request outcomes and durations, CLI command names and exit status, update attempts, and worker stage progress. Worker success heartbeats are limited to once per minute per stage. Backend tracing records use a static callsite and level, with request IDs and span context for correlation. The configured log filter also controls diagnostics. Browser analytics cover page views/exits, click counts, scrolling, timings and network outcomes; explicit events cover IAM requests, expired sessions and render failures. Analytics and explicit events share the table and have distinct step values. Browser records are marked client_reported and are not audit proof.

IAM strips request/response bodies, argument values, input text, credentials, cookies, authorization headers, email addresses, query strings, referrers and free-form error messages. API paths are matched to contract templates so resource IDs are omitted. Unknown paths become <unmatched>. Native Space Station metadata additionally describes the runtime system and resource usage. Events can correlate a request/invocation or a browser session without storing account identities.

Opt out

iam config set telemetry off
iam config show --json
# Restore the default preference:
iam config set telemetry on

This preference covers CLI, SDK requests made by the CLI, and its maintenance worker. The supervised worker reloads preferences within a minute and restarts itself when disabled to stop the embedded sender. If supervising iam daemon run yourself, restart it on exit. Events already sent cannot be recalled; previously queued records remain private on disk and can be replayed if enabled again.

In the console or login page, expand Telemetry settings and clear Share usage and diagnostic events. The preference persists for that browser on that IAM site, including across tabs. Disabling clears the browser queue. CLI and web requests propagate opt-out through X-IAM-Telemetry: off so backend request spans are excluded too. Operational process events and required local security audit records are independent of a particular user's request preference.

Set IAM_TELEMETRY=off before starting any IAM process for a deployment-wide kill switch. Rust integrators can use Client::builder(url)?.telemetry(false); explicit opt-out always wins over defaults. Server configuration changes require a restart. CI disables collection.

Recording key and deployment

The new table's one-time write key is kept in a private telemetry.key file in the operator's IAM home. It is never committed or sent to browser code. Provision that key into each deployment's secret store, then configure either:

IAM_TELEMETRY_KEY_FILE=/run/secrets/iam-telemetry.key
IAM_TELEMETRY_HOME=/var/lib/silicon-iam/telemetry-spool
IAM_TELEMETRY=on

Alternatively set the server-only secret IAM_TELEMETRY_KEY. The key must belong to siliconiam; another table's key is rejected. A key file must be a small, regular file, mode 0600 on Unix, readable by the runtime user.

Without an explicit key-file or spool setting, IAM uses SILICON_IAM_HOME, then the saved iam config home selection, then $SILICON_HOME/.silicon-iam, then $HOME/.silicon-iam. Default paths are telemetry.key and telemetry-spool inside that directory. IAM_TELEMETRY_URL optionally overrides the default https://backend.spacestation.teamofsilicons.com with an HTTPS origin; HTTP is permitted only on loopback for tests.

The frontend gateway accepts the same key and kill-switch settings. Never use a VITE_ prefix for a telemetry key. /api/config exposes only an enabled flag. Browser batches go to the same-origin /api/web/telemetry collector, which checks the origin, limits payload size and rate, sanitizes again, injects the key server-side and verifies Space Station's acknowledgement. No login is required to measure the authentication page.

Native recording uses space-station on macOS and Linux, with a bounded memory queue and a private durable spool. IAM's supervised daemon keeps the sender alive between short commands. Long-running backend processes run their own sender; short commands without a running daemon may leave records for the next process. A successful flush() means handoff, not necessarily remote acceptance. Telemetry failure never changes an IAM operation's result.

Give each container its own writable spool volume owned by its runtime user. Do not share Unix sockets across containers. The Compose configuration accepts the secret through its environment and uses a private /tmp spool by default; that queue is ephemeral across container recreation. For durable deployment, mount a persistent volume and set IAM_TELEMETRY_HOME to it. This implementation does not provision secrets into or restart existing production services.

Verify delivery

Use Space Station's SQL console for organization tos:

SELECT record.source::String AS source,
       record.event::String AS event,
       count() AS n
FROM siliconiam
GROUP BY source, event
ORDER BY source, event

For an explicit native smoke event, configure the key, keep iam daemon run running, and run cargo run --example telemetry_verify. Query its printed request UUID under record.context.request_id to confirm ingestion. Never use real credentials or personal data as diagnostic canaries.

The official integration documentation is at Space Station.

Install the CLI

curl -fsSL https://docs.iam.teamofsilicons.com/install.sh | sh