— SECURITY · 05 OF 07 · OBSERVABILITY

Every action, recorded.
Every record, verifiable.

When the Cyborg opens a PR, replies to a ticket, calls an API, accesses a document — every event lands in your audit log within seconds. Tamper-evident hashes. Customer-exportable. Streamable to your SIEM. Compliance auditors love this. So do post-mortems.

RETENTION7 years (compliance default)
FORMATJSONL + Parquet
EXPORTS3 / GCS / Azure / SIEM
INTEGRITYHMAC-chained

01What gets logged.

  • Cyborg actions: every PR opened, ticket replied, API called, file written, document read.
  • User actions: every login, every approval / denial, every config change in the dashboard.
  • Tool grants: every OAuth scope granted, modified, revoked — with the specific permissions and timestamps.
  • Inference calls: per-call metadata (model, timestamp, latency, success/failure). Prompt content is hashed, not stored, but the hash + length + classifier verdicts are.
  • Engineer access: every break-glass request, approval, command run, output observed.
  • System events: VM lifecycle (create, snapshot, restore, terminate), key rotation, deployment.

02Anatomy of an entry.

One JSONL line per event. Examples below are real shape; values are illustrative.

audit.log
{"ts":"2026-05-12T10:42:09.318Z","ver":"1","tenant":"cust-7f2a","actor":{"type":"cyborg","id":"cyborg-cse-001","role":"software_engineer"},"action":"github.pr.open","resource":"acme/billing#1247","scope":"repo-write:acme/billing","trust_level":"T2","result":"ok","latency_ms":342,"trace_id":"ac_t_5fe21a09","hash_chain_prev":"7c19f4a2","hash_self":"e2904b81"}
{"ts":"2026-05-12T10:42:11.821Z","ver":"1","tenant":"cust-7f2a","actor":{"type":"user","id":"meera-tl","role":"manager"},"action":"approval.granted","resource":"github.pr:acme/billing#1247","trust_level":"T3","result":"ok","ip":"192.0.2.14","trace_id":"ac_t_5fe21a09","hash_chain_prev":"e2904b81","hash_self":"a13c8f06"}

Field meanings: ts ISO-8601 UTC timestamp; tenant your customer ID; actor who did it; action dotted-namespace verb; scope permission used; trust_level the action’s trust tier; result ok / denied / error; trace_id distributed tracing ID; hash_* tamper-evidence chain.

03Tamper evidence.

Each entry includes the hash of the previous entry (per-tenant chain). Entries are signed with an HMAC keyed on a tenant-scoped audit key that the customer can rotate. Any modification of a past entry breaks the chain — the dashboard surfaces broken chains as red incidents.

The chain is anchored every 60 minutes by publishing the tip hash to a public Aliens-maintained log (transparency-log style). Auditors verify by replaying the chain locally and comparing tips.

04Export & streaming.

  • Dashboard view · live feed, filterable by actor, action, resource, time range.
  • JSONL export · up to 90 days at a time, signed Zip download.
  • Parquet snapshot · daily snapshot to your S3 / GCS / Azure Blob bucket (BYO-bucket; we write, you read).
  • SIEM stream · supported sinks: Splunk HEC, Datadog, Elastic, Sumo Logic, Cribl. Real-time, with filter rules at our edge to avoid spam.
  • Webhook · per-event POST to your endpoint (HMAC-signed). For lightweight alerting.

05Retention & privacy.

Default retention: 7 years (matches Indian / EU / UK compliance minimums). Customisable per tenant: shorter retention available on request, no longer-than-7-year retention without a documented reason.

Audit logs themselves are personal data of your end-users in some cases (e.g., they include your team-members’ identifiers). They are subject to the DPA and the rights in the privacy policy. Erasure of a person’s identifier is supported via a tombstone replacement that preserves the chain.

06What we don’t log.

  • Prompt + completion content is not stored in the audit log (only hash + length + classifier verdicts). Storing full content would 10x the log size and create a privacy liability.
  • Customer-side passwords / secrets — never. If a Cyborg sees a secret, the audit entry redacts it and flags the event for review.
  • Foundation-model internals — the audit captures the call’s metadata, not the model’s reasoning chain.