Receipts: the cockpit trust surface — live ledger of every governed decision#72
Merged
Conversation
…erned decision) The 5th cockpit surface, and the differentiator Gartner says agentic browsers lack: a live, verifiable ledger of every decision the enforcing bridge made across ALL surfaces. agent-control-bridge.py attests each decision to one evidence stream (reasoning-events.ndjson); this service reads it and unifies browser.* + iot.* + agent.* by event-type prefix. - scripts/bearbrowser-receipts.py: loopback read-only service — GET /receipts (filters: surface/decision/violations/since/limit), /receipts/summary (counts by surface/decision/class + violations), /receipts/stream (SSE live tail), /health. Loopback bind = the security boundary. - scripts/tests/test_receipts.py: real browser+iot decisions + synthetic agent.* → 7 receipts, 3 surfaces unified, 3 violations flagged, 4 permit / 3 deny. Live HTTP smoke verified. - docs/cockpit-receipts.md: design + API + how the client-vue Receipts panel consumes it. Reads only the local stream, serves loopback — no off-device egress. agent.* rows appear automatically once Lane 4 (PR #71) lands (surface derived from the prefix). Built in an isolated worktree off main; no collision with the parallel cockpit branch.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The 5th cockpit surface (docs/cockpit-spec.md §2) and the trust differentiator: a live, verifiable ledger of every governed decision the enforcing bridge made, across all three surfaces. This is the "inspect agent intent + enforce policy" control Gartner says agentic browsers lack — made visible.
One stream, three surfaces
agent-control-bridge.pyattests every decision to one evidence stream (reasoning-events.ndjson). This service reads it and unifiesbrowser.*+iot.*+agent.*by event-type prefix.scripts/bearbrowser-receipts.py— loopback read-only service:GET /receipts(filters: surface / decision / violations / since / limit),/receipts/summary,/receipts/stream(SSE live tail),/health. Loopback bind is the security boundary; no off-device egress.scripts/tests/test_receipts.py— 7 receipts, 3 surfaces unified, 3 violations flagged, 4 permit / 3 deny. Live HTTP smoke verified.docs/cockpit-receipts.md— design + API + how the client-vue Receipts panel consumes it.Notes
agent.*rows appear automatically once Lane 4 (Lane 4: govern the cockpit's local agent-machine via agent-control-bridge #71) lands (surface derived from the prefix) — Receipts is standalone and needs nothing merged first.mainin an isolated worktree; no collision with the parallel cockpit branch (feat/cockpit-embed-lane2).🤖 Generated with Claude Code