Parent: #17
Depends on: #19
Goal
Record a coherent, privacy-safe timeline of what the agent did and what the computer returned, producing both machine-readable evidence and a replayable human HTML filmstrip.
Storage contract
Do not let multiple CLI/MCP/bridge processes race on manifest.json.
Each computer-use run has:
- manifest fields
evidenceVersion: 1 and actionLog: "actions.jsonl"
- append-only
actions.jsonl as the authoritative timeline
- an atomically-created session-scoped active-run pointer
- static
report.html filmstrip plus the existing text summary
Existing manifests without evidence fields remain valid. Rendering sorts by timestamp plus action ID and assigns display step numbers.
Each sanitized action contains:
actionId, source, tool, sessionId
startedAt, durationMs, status
- optional allowlisted target metadata
- artifact paths
- redacted error summary
Privacy contract
- Typed/fill values persist only as length and input type.
- Network failures persist only method, origin/path without query, status, resource type, timing, and sanitized error text.
- Persist no request/response headers or bodies.
- Strip Cookie, Set-Cookie, Authorization, session/JWT/CSRF/OTP values, bare JWTs, query tokens, and CDP websocket capabilities.
- Do not auto-capture screenshots for typing/fill/password/OTP/payment actions.
- Screenshot pixels cannot be redacted; document this and allow evidence capture to be disabled.
Bounds
- Maximum auto-generated evidence: 100 MiB per run.
- After the cap, continue metadata and mark evidence truncated.
- Retain the latest 20 finalized computer-use runs per project.
- Never prune active/running runs.
Checklist
Validation
bun run typecheck
- focused core/run/MCP/relay tests
bun run test
bun run test:coverage
bun run build
- concurrent writers lose zero actions
- old manifests still list and render
- planted cookies, headers, query tokens, JWTs, OTPs, typed passwords, and CDP GUIDs are absent from the entire run directory
- sensitive actions create no automatic screenshots
- cap and pruning are deterministic
- a failed browser flow produces a useful sanitized
report.html
Current status: Completed
Next: complete — delivered across PRs #33, #35, #37, #38, #40, and #42.
Parent: #17
Depends on: #19
Goal
Record a coherent, privacy-safe timeline of what the agent did and what the computer returned, producing both machine-readable evidence and a replayable human HTML filmstrip.
Storage contract
Do not let multiple CLI/MCP/bridge processes race on
manifest.json.Each computer-use run has:
evidenceVersion: 1andactionLog: "actions.jsonl"actions.jsonlas the authoritative timelinereport.htmlfilmstrip plus the existing text summaryExisting manifests without evidence fields remain valid. Rendering sorts by timestamp plus action ID and assigns display step numbers.
Each sanitized action contains:
actionId,source,tool,sessionIdstartedAt,durationMs,statusPrivacy contract
Bounds
Checklist
docs/releases/UNRELEASED.mdValidation
bun run typecheckbun run testbun run test:coveragebun run buildreport.htmlCurrent status: Completed
Next: complete — delivered across PRs #33, #35, #37, #38, #40, and #42.