Skip to content

Espejo

A user hits a bug. They click one button. You get the network, the console, the clicks and the video — not a blurry description.

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.

  • Quickstart — drop the script into a page and send your first recording.
  • Core concepts — the bundle format, projects and keys, storage, and redaction, explained once so the rest of the docs are short.
  • Console API — the HTTP API behind the console: projects, keys, sessions.
  • MCP server — point an agent at your recordings.