Features / Async first
Async is where PHP apps actually break.
A webhook fires four jobs, broadcasts over a websocket, one of them throws. Unravel keeps the whole async chain in one causal trace, from the request that started it to the frame that failed.
The dark corners
One trace, across every boundary.
Click through four real production surfaces. Each one is a place a request leaves the foreground, where most tools lose the thread.
Inside one trace
One webhook dispatched four jobs and a broadcast. They stay in the same trace: dispatch, run phases, their own queries and outbound calls.

POST /webhooks/paid: the foreground response ends, four queued runs and a broadcast carry on below it, each with phases, queries and outbound calls.
Reverb, watched live
Every websocket connection, channel and subscription. Who is connected right now, what they were sent, what went stale.

A live Reverb socket: subscriptions with their auth handshake, frames in and out, staleness per connection.
Jobs keep their trace
A queued job carries the trace of the request that dispatched it, so the checkout that queued the email reads as one story.

One job run: queued, processing, processed. The request that dispatched it is one click away, in the same trace.
Scheduled and console too
Cron tasks and artisan commands are traced like requests: their queries, their failures, their timing drift.

artisan expo:tickets:check under the scheduler: its queries, its slow outbound call, its share of the trace.

POST /webhooks/paid: the foreground response ends, four queued runs and a broadcast carry on below it, each with phases, queries and outbound calls.
Why it matters
A queued job keeps the trace that dispatched it.
The checkout and the email it queued are one story, because the job keeps the dispatching request's trace. A broadcast carries the id of the trace that emitted it, so a realtime message links straight back to the request behind it, and back again.
Cron tasks and artisan commands are traced like requests, with their own queries, failures and timing drift. Reverb connections, channels and subscriptions are watched live: who's connected, what they were sent, what went stale. See framework support →
Keep exploring
The rest of the toolkit.
Point your AI agent at production.
Connect Claude Code over MCP and it reads the whole causal chain itself, then ships the fix based on what production actually did.
ExploreCausalityCausality, not log soup.
Normalized query fingerprints, collapsed N+1s and user journeys; every failed trace carries its immediate cause.
ExploreAlertingKnow before your users do.
Rules on new exceptions and error spikes, delivered to Slack, email or webhook with the debugging context inline.
ExploreStop reconstructing incidents from logs.
Connect your real app in two minutes. Free forever on a 3-day window, the full debugger included.
Start free