Skip to content

Releases: RedberryProducts/synapse

v0.1.4

Choose a tag to compare

@MaestroError MaestroError released this 18 Sep 09:08
d81ec80

What's Changed

Full Changelog: v0.1.3...v0.1.4

v0.1.3

Choose a tag to compare

@MaestroError MaestroError released this 18 Sep 08:11
4daab0b

What's Changed

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@MaestroError MaestroError released this 03 Aug 14:25

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@MaestroError MaestroError released this 03 Aug 13:53

Full Changelog: v0.1.0...v0.1.1

v0.1.0 - DevTool for AI Agents with Laravel AI SDK

Choose a tag to compare

@MaestroError MaestroError released this 03 Aug 12:19

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:install

Then 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 a viewSynapse gate 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:prune command 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.