Skip to content
Caldyr
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

CaldyrasciinemaPlain text log
Terminal fidelityxterm.js · 256 colouryesno ANSI
Instant scrubkeyframesre-render from 0no playback
Permission eventsinline markersnono
Tamper-evidentsha256 per keyframetrivially editabletrivially editable
Shareable deep link#t=08:08timestamp paramN/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.

Get started