Debugger-first observability · PHP

Unravel what broke.

The layer between your production and your AI agent. Every request, query, job, socket and exception in your Laravel app, captured as one causal trace, then handed to your agent to fix. Everything below is a real production app.

app.unravel.run/…/traces/019eb2c7…
A production trace in Unravel: POST /webhooks/paid with N+1 insights above a 94-event span timeline, Copy as Markdown in the toolbar

A debugger, not a monitoring dashboard.

Trace volume never metered. You're billed on how long history is kept.

Free forever. The full debugger, on a 3-day window.

AI agents · MCP

Point your AI agent at production.

Connect Claude Code, or any MCP client, and it pulls the real context itself: the whole causal chain behind a failure, down to the query and the job that threw. An alert fires, you ask why checkout is failing, and it fixes it on the first try.

app.unravel.run/…/traces/019eb29d…
A production trace in Unravel: N+1 insights above the span timeline

Async first

Async is where PHP apps break.

Websockets, queued jobs and scheduled work are traced like requests. A webhook fires four jobs, broadcasts over a socket, one throws, and it all stays in one causal story you can read top to bottom.

app.unravel.run/…/traces/019eb2c7…
Async jobs section of a production trace: queued runs with dispatched and processed phases, nested SQL and outbound HTTP

Causality

Causality, not log soup.

The backend interprets the raw stream for you. Queries are normalized into fingerprints, N+1s collapsed, every failed trace carries its immediate cause, and each request links back to what the same user did before it.

app.unravel.run/…/users/019da699…
Unravel user journey: a chronological ribbon of one user's requests, jobs and socket activity, grouped by day

Alerting

Know before your users do.

Get notified when something breaks. Every alert carries the throw site, route, affected user and a deep link to the exact window, delivered to Slack, email or webhook.

New exception

Fires the first time production throws something it hasn't seen before.

Error rate

Fires when a route's failures cross a threshold you set.

Share a trace

One link, the whole story.

Any trace can be shared as a public read-only link, like a gist. Drop it in a pull request, an issue or a Slack thread, and whoever opens it reads the full timeline without a login, instead of squinting at a screenshot of your dashboard.

Public read-only linkFrom the live demo
app.unravel.run/share/07f543fb…

Scrubbed at share time

User data (bindings, bodies, payloads) is redacted by default. You pick what stays, per share.

Outlives retention

The link is a frozen snapshot of the trace, so it keeps working long after the trace itself has aged out.

Revocable

Shared the wrong thing? Revoke the link and it's gone for everyone, instantly.

Versus

Good tools, different job.

Telescope, Sentry and Nightwatch each earn their place. None of them is built to take one production incident apart. That's the job.

Laravel TelescopeLocal debugging

Requests, queries and jobs as flat lists on one machine. Invaluable in development, but it isn't built to run in production, and nothing connects one entry to the next.

Unravel keeps that depth, runs against production, and ties the same signals into one causal trace you can search back through.

Full comparison
SentryError tracking

Built around the exception: stack traces and alerting it does superbly. The N+1 above the error, the job that dispatched it, what the user did before: none of that is the product.

Unravel treats the exception as one event inside the trace that caused it: queries, jobs and the user's journey attached.

Full comparison
Laravel NightwatchMonitoring

Charts and aggregates across the whole app, priced per event captured. Great at “is it healthy?”, less so at “what exactly happened here?”.

Unravel is debugger-first: built to take one incident apart. Trace volume is never metered.

Full comparison

Live demo

Don't take our word for it, walk through a live app.

A shared read-only project fed by a real Laravel storefront under constant traffic. Poke at its traces, exceptions and websockets exactly as you would your own.

A real app

Unravel Coffee, a Laravel shop with queues, schedules and Reverb websockets.

Real traffic

A robot browses, checks out and breaks things around the clock.

Real bugs, on purpose

N+1s, a flaky queued job, scheduled failures, the occasional 500. Things worth debugging.

Explore the live demo

One email to log in · no card · read-only

Safe in production

Built to stay out of your app's way.

It runs where it has to, in production, without getting between your users and the response they're waiting on.

Off the critical path

Captured events buffer in memory and ship after your response is sent, so your users wait on your app, never on ours. The send is time-boxed; if our cloud is slow or unreachable, events drop, your request doesn't.

Secrets never leave your server

Known secrets are scrubbed and oversized payloads truncated before anything is sent. Client-key payload encryption is coming for the truly sensitive. How it's handled →

Every trace, no sampling

Within your retention window Unravel keeps every trace, minus known noise like health checks and scanners. The dashboard and your agent see all of it, with no sampling in between.

Why it exists

The layer between production and your agent.

We run realtime, async-heavy Laravel apps ourselves: queues, scheduled jobs, websockets broadcasting all day. No tool could trace one webhook, the jobs it fired and the broadcast as a single causal story, let alone hand that story to an AI agent. So we built the thing we needed, and dogfooded it in production before it was a product.

Install

Two lines. Zero config.

Unravel hooks the framework's own events, so you don't register a service provider, touch your code, or instrument anything by hand. Laravel today, Symfony next. Secrets are scrubbed and payloads truncated before anything leaves your server.

01Require the package
$composer require unravel/laravel
02Add your key to .env+UNRAVEL_API_KEY=unrv_…
03Deploy#traces start flowing

The key comes from your dashboard: create a project at app.unravel.run, open Connect, and copy it.

Pricing

Pay for history, never volume.

Tiers scale projects and seats; paid tiers keep 30 days of history (Enterprise by contract). Trace volume is never metered: instrument as deeply as you want. Core debugging is on every plan, including free.

Hobby
Free

Try it on your real app.

  • 1 project
  • 3-day retention
  • 1 user
Solo
$19/mo

For solo founders shipping one app.

  • 1 project
  • 30-day retention
  • 1 user
  • +Alerting
  • +AI agent access (MCP)
Team
$49/mo

A small team on a couple of services.

  • Up to 3 projects
  • 30-day retention
  • Up to 5 users
  • +Alerting
  • +AI agent access (MCP)
Scale
$99/mo

Many apps, deeper history.

  • Up to 10 projects
  • 30-day retention
  • Unlimited users
  • +Alerting
  • +AI agent access (MCP)
  • +Client-key payload encryptionsoon
Enterprise
Custom

Beyond the published tiers.

  • Projects by contract
  • Retention by contract
  • Seats by contract
  • +Alerting
  • +AI agent access (MCP)
  • +Client-key payload encryptionsoon
  • +Bring-your-own databasesoon

Environments (prod, staging, local) are always free under a project. You're never charged per environment.

Stop reconstructing incidents from logs.

Connect your real app in two minutes. Free forever on a 3-day window, the full debugger included.

Start free