Repository navigation
Releases: RedberryProducts/synapse
Release list
v0.1.4
What's Changed
- Prepare v0.1.4: support Laravel AI SDK 0.11 by @MaestroError in #16
Full Changelog: v0.1.3...v0.1.4
v0.1.3
What's Changed
- Update README with Redberry package details by @MaestroError in #5
- Trigger Maestro task when a PR merges to main by @MaestroError in #6
- Prevent published migrations failing after --no-dev installs by @MaestroError in #11
- Fix truncation for long agent names in discovery by @MaestroError in #13
- Prevent dev-only provider registration breaking production by @MaestroError in #12
- Show a loading indicator before the first stream event by @MaestroError in #14
- Prepare v0.1.3 release by @MaestroError in #15
Full Changelog: v0.1.2...v0.1.3
v0.1.2
v0.1.1
v0.1.0 - DevTool for AI Agents with Laravel AI SDK
Synapse v0.1.0
We're releasing the first version of Synapse, a development dashboard for AI agents built with the Laravel AI SDK. Install it, open a URL, and start working with the agents already in your app.
composer require redberry/synapse --dev
php artisan synapse:installThen open /synapse.
Why we built it
Building an agent is a tight loop: change the prompt, run it, check which tools fired and what they returned, change it again. Most of us have been running that loop through tinker, a throwaway route, or a pile of dd() calls — and every one of those tells you what the agent said, not what it did.
That gap is where the time goes. When an answer is wrong, the question is always the same: was it the prompt, the tool, the model, or the provider? Without visibility you change one thing at a time and re-run, which turns a five-minute fix into an afternoon.
Laravel developers already expect first-party devtools — Telescope for requests, Horizon for queues, Pulse for performance. Synapse is that for agents.
What you get
Your agents, without registering anything. Synapse scans your app and lists every class implementing the SDK's Agent contract, with its provider, model and tools. Write a class, refresh, it's there — no annotations, no config, no cache to clear. It reads your existing config/ai.php, so if an agent runs in your app, it runs here.
A real conversation, not a simulation. Send a message and watch the reply stream in token by token. Attach images, documents or audio. Switch to another model for one message without touching your agent's code — and the model that actually ran is recorded per message, so a conversation you reopen next week still tells you the truth.
The part that saves the afternoon: every tool call, inline. Each call appears as a card the moment the model requests it, showing its arguments, its result, how long it took, and whether it failed. Provider-native tools like web search are marked differently from your own, because "the provider's search returned nothing" and "my tool threw" are different problems with different fixes. A tool that's still running says so, rather than leaving you staring at a blank thread wondering if it hung.
What the SDK will actually use. The info panel shows each agent's resolved configuration — system prompt, tool schemas, generation options, middleware — as the SDK would resolve it at invocation time, not as you hope your attributes were read. It answers "did that #[Temperature] take effect?" in one click.
Cost, visible while you iterate. Prompt and completion tokens on every message, plus a running total for the conversation. Reasoning tokens counted separately for models that think before answering. You see what an approach costs while you're choosing it, not on next month's invoice.
Nothing is lost. Every conversation is kept and fully replayable — messages, tool cards, attachments, reasoning, errors — searchable by content, filterable by agent, status or tool, and shareable as a link. When a colleague says "the support agent gave a weird answer yesterday," you can go and look at it.
Failures explain themselves. Anything that throws — a rate limit, a bad API key, a bug in your own tool code — becomes an inline card with the exception class, the message, the provider's own response body, and a collapsible stack trace. Never a dead stream, never a raw 500, and the playground stays usable so you can fix it and immediately try again.
Safe to have in the repository
Synapse invokes your real agents, which means real API spend and real tool side effects. We treated that as the security boundary it is:
- It installs as a dev dependency and does not register its routes in production unless you explicitly opt in.
- Outside
local, every route — dashboard and API — passes aviewSynapsegate that denies everyone until you name who's allowed. The gate lives in your app, not in the package. - It writes only to its own
synapse_*tables and never touches the SDK's conversation data. Nothing you do in the playground shows up in your production conversations. - Retention is configurable, with a
synapse:prunecommand and an optional daily schedule.
Getting it running
| PHP | 8.3+ |
| Laravel | 12 or 13 |
laravel/ai |
0.9.x |
You never run npm. Compiled assets ship inside the package and are inlined into the page, so there's no publish step and a composer update can't leave you on stale assets — the usual way a dashboard package breaks after an upgrade.
Streaming is verified on php artisan serve, nginx + PHP-FPM (Herd, Valet, Forge) and FrankenPHP. Laravel Octane is not supported in this release — its workers run under PHP's CLI interface, where output can't be pushed mid-request, so replies arrive complete instead of streaming. Nothing breaks, and Synapse tells you in the playground rather than leaving you looking at a blank thread.