Espejo is a session recorder that installs with one <script> tag. By default
it records nothing to a server: it keeps a capped, in-memory ring buffer of
network requests (with bodies), console output, clicks and navigation, and
only uploads that buffer when someone calls espejo.report(...) — the
“report a problem” button. Add data-capture="dom" and it also keeps an
rrweb DOM replay; call startVideo() from a click and it records the screen
too.
Ships nothing by default
mode: 'ring' (the default) never uploads a byte until someone reports a
problem. That is the difference between something you can leave running in
production and something that burns your bucket and your users’ privacy
in a week.
Multi-tenant from the ground up
Every recording belongs to a project, every project to a tenant. The
console API, the storage keys and the MCP server all scope through that
relationship — never through a list of ids resolved ahead of time.
Redacted before it's written
Authorization headers, cookies, anything that looks like a secret, and
every value typed into an input are stripped before the bundle ever
reaches the bucket — not after.
Readable by an agent
A built-in MCP server (OAuth 2.1 + PKCE, per-account consent) gives Claude
Code or claude.ai five read-only tools to list and inspect recordings —
scoped to exactly the projects a person authorized.