the work

rewind

live

Reproducing an agent bug should not cost money.

TypeScriptSQLiteSDK internals

the problem

Your agent crashes on step 47 of 50. To see it again you re-run 46 steps, pay for every token, and hope the model takes the same path. It won't. Temperature moves, models get updated underneath you, tools resolve in a different order.

So the bug you reproduce is never quite the bug you were chasing. Observability tools show you what happened. None of them let you run it again.

the build

role
Solo. Design, implementation, docs.
when
2026
stack
TypeScript, SQLite, Anthropic SDK

how it works

rewind injects one custom fetch into the Anthropic SDK client. That is the entire integration. Every request and response is journaled into a single SQLite file, with bodies content-addressed by SHA-256, so the system prompt repeated across all 50 steps is stored once instead of fifty times. Replay matches a request by canonical fingerprint: JSON with recursively sorted keys, volatile headers stripped before hashing. Same request in, recorded response out. No network, no key, no cost.

  1. recordone fetch, injected
  2. journalSQLite, SHA-256 blobs
  3. replayoffline, byte-exact
  4. forkedit a step, recompute

the call

Which headers count as part of a request's identity?

chose

Strip a known-volatile blocklist before fingerprinting: auth, request ids, dates, idempotency keys, SDK telemetry. Treat every header that survives as semantic.

rejected

Allowlisting the headers I already knew mattered. An unknown header that genuinely changes API behavior would then be ignored, and two different requests would collide on one fingerprint.

consequence

A blocklist miss causes a replay miss, which is loud and debuggable. An allowlist miss causes a wrong hit, which is silent corruption. Fingerprints fail loud rather than lie.

where it stands

Live and open source. Record, replay, step, fork, and diff all ship in the CLI. The demo agent carries a real bug that only surfaces on the last step, so you can watch a fix get verified offline for nothing.