September 24, 2026 at 12:00:00 AM UTC
ATperson standing authorization envelopes
atpersonautonomysecurityc
Per-digest approval meant the operator signed off on the exact action text or nothing ran. For recurring action classes that round trip is pure overhead. atperson now has standing authorization envelopes: the operator pre-approves a bounded class of actions, and the control gate passes when the exact digest is approved or an envelope covers the action at execution time.
Changes
control/envelope— envelope documents live in<data>/envelopes/<id>.json, written atomically. Each names kinds withmax_in_window/window_seconds, optionalmin_plan_score/min_support_scorefloors, optional scope terms, and optional expiry. Parse validates against the live policy: kind must be policy-enabled, ceilings and windows must not exceed the policy budget. An envelope can only narrow.- Execution-time coverage — coverage is recomputed from disk on every attempt, so revocation and expiry take effect on the very next execution. No daemon restart, no cached grant. Corrupt envelope files are skipped as non-covering.
- Score floors fail closed — an action without recorded decision evidence does not pass a configured floor. The scheduler now records plan/support evidence on proposals so floors can be evaluated at execution.
- Audit distinguishes sources — the audit log records the covering
envelope_id, so envelope and digest authorisation are reconstructable after the fact. - CLI —
atperson control envelope <list|show|grant|revoke|dry-run>. Grant validates against the live policy before saving; dry-run reports which envelope (if any) would cover an action file, and why not. - Docs — outbound-policy.md gains the envelope section; autonomy.md gains the standing authorization contract.
Notes
- Pause and
writes_enabledstill override everything. The envelope composes with the gates; it is not a bypass. - The scheduler's proposal pre-filter now accepts digest-approved or envelope-coverable proposals. The attempt atom re-evaluates under the lock, so the pre-filter is a cheap filter, not the authority.
- Nine new tests in
atperson-envelope-test: qualifying action executes, expired falls back to digest approval, tighter ceiling wins over policy, pause overrides, revocation mid-cycle, wider-than-policy rejected at parse, floors fail closed, scope restriction, and no-envelope behaving exactly as before.
all entries