Team

Offline mode

What zn-gate does without network, with an expired or rejected policy, and after an install is revoked. It never runs without a policy.

View .md

zn-gate applies the organization policy locally, so coding keeps working on a plane or behind a broken proxy. The rule is simple: a machine never runs without a policy, and when in doubt it gets stricter, not looser.

Situation What zn-gate does
No network, cached policy still valid (up to 7 days) Applies the cached policy. The audit trail stays in ~/.zn/audit.jsonl and is uploaded when the network is back
No network and the cached policy has expired Strict mode: the deny rules of the last policy still apply, permissions the organization had opened are withdrawn (the stricter local settings come back), and zn team status and the agent hook say so
Invalid signature, unknown key or a lower version Rejects it, keeps the last valid policy and logs policy:rejected
Install revoked Stops uploading. Applies the cached policy until it expires, then strict mode. The notice says "removed from org"
Clock skew Up to ±5 minutes of tolerance on the policy's issue and expiry times
Gap or replay in the upload zn resumes from the last record it confirmed. A tampered record is rejected and shows in the dashboard

Checking a machine

zn team status

shows the policy version, when it was last checked, whether strict mode is on and how many audit records are waiting to be uploaded. zn team sync retries now.

In the dashboard, Members → Installs lists each machine with the last time it was seen, so owners and admins can spot installs that are out of date or silent.

The audit trail is tamper-evident

Each machine chains its audit records with an HMAC (seq, prev, mac). zn uploads them in order and checks the chain, so a missing, reordered or edited record is visible, in the dashboard and in every export.