Seal the audit log to the team, and show the vault on Account - #116
Merged
Merged
Conversation
What people typed into a session reached the service in plain text, and the whole audit log sat there readable. It is now sealed in the browser to one audit key per organization: every member holds its private half, the service holds the public half and ciphertext, and it can read neither what was typed nor the key. - The key's private half reaches each member sealed to their vault by a teammate, using that teammate's own vault key rather than a throwaway one, so a browser can tell a copy came from a person and not from the service. Each browser re-seals its copy to itself, remembers the team's key, and refuses a different one, or a claim that the team has none. - Entries are bound to their organization, session, author, kind and time, so the service cannot move one person's command onto another session or person. - Search, CSV export and the charts run in the browser, over entries opened there. The service no longer searches what it cannot read. - History from before this is sealed in place by an owner's or admin's browser. That browser is handed the author and time by the service, so the entry records who sealed it and the log says "sealed later by", and marks entries still in the clear. - Session lifecycle entries the service writes itself stay as they were: they hold session names and addresses it already stores. Account gains a vault section: what the vault is, that only its owner can see it, the key's fingerprint, what it holds, each session password shown on request and hidden again, and a way to lock the vault in this browser. The sign-up page said typed input was not recorded, which was untrue. It, the screen that links a terminal, the terms, llms.txt and the security policy now describe what is recorded, who can read it, and what the service still sees.
Alexgodoroja
force-pushed
the
vault-account-audit
branch
from
September 11, 2026 22:43
65319f6 to
3339537
Compare
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.
Why
Typed input (commands, agent prompts) was recorded for the team in plain text: the accounts service could read the whole audit log, and so could anyone with a copy of the database. Recording it is a deliberate choice and stays; who can read it changes.
The team audit key
What changed around it
POST /api/auditrefuses unencrypted input;GET /api/auditno longer searches text it cannot read.009_team_keys.sqland010_audit_sealed_by.sql, both additive.Vault on the Account page
What the vault is, that only its owner can see it (the service returns only that person's own sealed copies and cannot open them), the key fingerprint, when it was made, whether this browser keeps it unlocked, what it holds — session passwords, revealed on request and hidden after 30 seconds, and the team audit key — and Lock in this browser.
Copy that was wrong
The sign-up page said terminal input was not copied to the service. It was. That page, the terms,
llms.txtandSECURITY.mdnow say what is recorded, who can read it, and what the service still sees (who typed in which session, and when). Theshell loginconsent copy is not touched here: #113 owns it, and I will add the encryption wording on top once it merges.Security review
Two findings from review of this branch, both fixed here:
Verification
Merge order
Based on
mainbefore #113 and #115. #115 adds008_deleted_accounts.sql, so on deploy apply 008 → 009 → 010, then the Worker. I will rebase once those merge.