Revoking a paired agent now revokes everything it holds
- GET /agents lists pending unexchanged setup keys marked pending
- DELETE /token responses carry tokens_deleted and the daemon logs the count
- The CLI always sends an explicit scopes list and both CLI and server reference one exported DEFAULT_PAIR_SCOPES constant
- Scope-denied 403 hint now recommends re-pairing without --restrict or with --control
- Revoking a paired agent now revokes everything it holds
- RevokeToken deletes ALL tokens for a client id including the session and spent and pending setup keys
- DELETE /token with a pending setup key now deletes all 3 tokens instead of the session surviving
- Revoked agent reconnecting via leftover key now returns 401
- tunnel revoke now works and verifies against /agents
- Second DELETE for the same agent now returns 404 instead of 200
- Bare --restrict now errors with hard error exit 1 instead of silent FULL access
From gstack
Revoking a paired agent now revokes everything it holds, and the documented kill switch is real: tunnel revoke deletes, then proves it. RevokeToken deletes ALL tokens for a client id: the session plus spent and pending setup keys. DELETE /token with a pending setup key now deletes all 3 tokens instead of the session surviving. Revoked agent re-connects via leftover key now returns 401. $B tunnel revoke now works and verifies against /agents. Second DELETE for the same agent now returns 404 instead of 200 again. Bare --restrict now errors with hard error exit 1 instead of silent FULL access. GET /agents lists pending unexchanged setup keys marked pending. DELETE /token responses carry tokens_deleted and the daemon logs the count. The CLI always sends an explicit scopes list; both CLI and server reference one exported DEFAULT_PAIR_SCOPES constant. Scope-denied 403 hint recommends re-pairing without --restrict or with --control. Pair-agent/SKILL.md, REMOTE_BROWSER_ACCESS.md, and ARCHITECTURE.md document the real default, --restrict, and the tunnel allowlist nuance.