Files
safetynet/docs/individual-agent-grants.md
T

35 lines
3.4 KiB
Markdown
Raw Normal View History

# Individual local agent grants
Configure **Security rules & agents → Individual agent identities** in the management console. This editor stores public authorization policy only. Tokens and private identity keys remain in the device's protected local pairing store.
Existing installations default to `legacy` shared pairing for compatibility. Select `individual` to require separate local identities. A matching enabled and unexpired grant is mandatory; an empty grant capability list permits no actions. Each action remains limited by the browser baseline, user profile, device group, destination rules and DLP. Grant permissions cannot unlock hidden settings or grant management privileges.
1. Add a grant. It begins disabled, expires in one day and has no capabilities.
2. Choose its stable identifier, name, UTC expiry, allowed capabilities and optional additional destination allowlist.
3. Enable the grant only after reviewing its scope.
4. Review and publish through the normal signed policy approval workflow.
5. Pair the matching identity locally once the published policy has reached the device.
Published identifiers are read-only in the editor. To revoke one identity, disable its grant and publish. To invalidate its existing credentials while retaining its identifier, advance **Credential generation** and publish; local pairing must then be performed again. Neither action is immediate on an offline device: application is gated by signed policy receipt and expiry.
The schema accepts at most 32 grants, requires unique identifiers and rejects private-key/token properties. Global agent disable and restrictive user profiles/device groups still disable all grants. Legacy mode and individual mode are explicit central choices; the editor does not issue credentials or bypass independent approval.
Development proof: `artifacts/agent-grants-ui-proof.json` records an actual Electron admin workflow, unchanged server policy, read-only published identifiers, draft revocation/generation changes, auditor-denied controls and a real exported correlated backend request span. The screenshot is local and ignored. Production enrollment and per-identity transport behavior require their separate integration tests.
The integrated native browser now proves selection/pairing of two distinct
identities, targeted revoke with an unaffected peer, host/redirect blocking before
transmission, and persisted generation rollback protection across restart.
Unowned background-worker requests remain blocked in individual mode pending
reliable ownership support. Actual exported agent request traces carry named child
phases and link to attributable durable events. The package verifier runs the
shipped individual client. A separate backend integration test exercises distinct
reviewer publication and history restore; grant-specific native publication UI
coverage is now verified by `scripts/agent-grants-history-admin-smoke.mjs`.
It exercises the actual author and independent-reviewer UI, denied self-approval,
read-only auditor, rotation and draft-only history restoration while preserving
an unrelated unpublished draft. Exported requests have verified parent trace
correlation; screenshots were visually inspected. The history summary warns
that restoring a lower generation cannot revive invalidated credentials: publish
a generation greater than every previously issued value and pair again.
![Agent history review with credential-generation warning](media/screenshots/admin-agent-history.png)