Visibility & forensics
Replay any session, prove it wasn't altered.
Every agent session is recorded as an xterm.js stream with keyframes for instant scrubbing. Each keyframe carries a sha256 hash that you can re-check, so the stored replay can be compared against what was recorded.
7f3a9c12 · replay08:08 / 12:42
$ fix the broken csrf middleware in /api/auth and add a unit test
⚙ Read api/auth/csrf.go (98 lines)
⚙ Grep "X-Csrf-Token" → 4 files, 7 matches
⚙ Edit api/auth/csrf.go (+12 −4)
⚙ Bash $ go test ./api/auth/...
✓ Tests pass · 4 tests, 8 assertions
How it works
1
Session streamed over WebSocket
Every input, output, tool call streamed to the broker in real time.
2
Recorded with keyframes
Keyframes are built as you scrub, so seeking never replays from the start.
3
Scrub instantly
xterm.js re-renders from the nearest keyframe in milliseconds, via a Web Worker.
4
sha256 proves integrity
Each keyframe carries a sha256 hash. Re-check it with caldyr replay verify; a mismatch means the stored data changed.
Deep dives
Keyframe scrubbing
Click anywhere on the timeline: a Web Worker rebuilds from the prior keyframe in under 100 ms. No waiting while we re-stream from minute 0.
Permission events inline
Every time the agent asked for permission (Bash, network, file write) appears as a marker on the timeline, so you can see exactly what was approved and when.
Integrity verification
Every keyframe has a sha256 you can recompute with caldyr replay verify. The check runs on our server against the stored bytes, so it detects corruption or edits at rest.
Verify a recording
shell · verify a keyframe
$ caldyr replay verify 7f3a9c12-5e44-4b21-9c8a-1de2f6a09b3c:2048
recording : 7f3a9c12-5e44-4b21-9c8a-1de2f6a09b3c:2048
keyframe sha256: sha256:9f8ce4d27a91…3a4e
recomputed : sha256:9f8ce4d27a91…3a4e
MATCH ✓ — recording integrity verified
What you replay is exactly what happened.
Checkable. Each keyframe carries a sha256; the replay matches or it doesn't. It is a checksum compare, run by us on the server, not an independent proof.
Compare
| Caldyr | asciinema | Plain text log | |
|---|---|---|---|
| Terminal fidelity | xterm.js · 256 colour | yes | no ANSI |
| Instant scrub | keyframes | re-render from 0 | no playback |
| Permission events | inline markers | no | no |
| Tamper-evident | sha256 per keyframe | trivially editable | trivially editable |
| Shareable deep link | #t=08:08 | timestamp param | N/A |
FAQ
90 days on Team, configurable on Enterprise (90 / 365 / custom). Transcripts captured by the local daemon are encrypted at rest under the team key held by our custody service. Live-streamed sessions are processed server-side so we can render them for real-time watching and replay; they stay tenant-isolated and retention-bound.
Imperceptibly. Recording happens at the broker, not in the daemon's hot path. Adds under 1 ms per round trip.
Yes, with another authenticated team member. The link is scope-gated; outsiders see a 404. Add #t=08:08 to deep-link to a moment.
Stored recordings are encrypted at rest under your team key, held by our custody service. Live frames pass through the hub as plaintext so they can be watched in real time. Solo recordings are sealed in your browser before upload.
Ready to govern your AI infrastructure?
Request access in minutes, or talk to us about your air-gap deployment.