Time-travel debugging
Pause any request and scrub backward in time. Every function frame, every captured variable, every SQL query, every log line — preserved and replayable, frame by frame.
Xdebug-tier debugging plus Telescope-tier observability, in one live UI — with an AI co-pilot.
# one-line install (macOS + Linux)
bash <(curl -fsSL https://raw.githubusercontent.com/thamibn/php-periscope/main/scripts/install.sh)
# add to any Laravel app
composer require periscopephp/laravel
# start the daemon, open the UI
periscope-daemon &
open http://127.0.0.1:9999
# wire AI agents
claude mcp add periscope -- php artisan mcp:start periscopeThe first request you trigger after install shows up in the timeline. Click any frame, see every variable bound at that line. Click any SQL row, see the call site. Drag the timeline scrubber backward, watch the queries / logs / cache hits disappear in reverse.
If something's wrong, the Insights panel tells you:
ListingController:show:43."SELECT * on agencies is over-fetching. Slowest column read at 87ms — try select(['id','name'])."Foo.php:128. AI advisor: try/catch around the empty-collection branch on line 124 silently swallows the cause. Re-throw or log."| Xdebug | Telescope | DebugBar | periscope | |
|---|---|---|---|---|
| Breakpoints + variables | ✓ | — | — | ✓ |
| SQL / logs / cache / jobs observability | — | ✓ | partial | ✓ |
| Time-travel scrubbing | — | — | — | ✓ |
| AI-native (MCP) | — | — | — | ✓ |
| Engine-level via Observer API | — | — | — | ✓ |
| Per-request UI | — | post-mortem | live footer | live, full-screen |
| Frame-level overhead | 15–40× | — | — | < 5× |
Telescope is read-only after the fact. Xdebug needs a re-run with breakpoints. DebugBar is a footer chip. periscope is the debugger you would have written if Xdebug, Telescope, and DebugBar were the same project.
v0.1.0-alpha. Built for PHP 8.3 on macOS + Linux. Laravel-only on the framework side; the C extension is framework-agnostic and Symfony / WordPress adapters are post-v1.
See docs/ROADMAP.md for what's next.