Synapse від Redberry вийшов у версіях 0.3.0 і 0.3.1 29 і 30 жовтня. Це відкритий (MIT) дашборд для розробки агентів на Laravel AI SDK, який автори описують як «Telescope і Horizon, але для агентів». Головне в новому релізі - виклики інструментів, що чекають схвалення, тепер можна підтвердити або відхилити прямо в браузері.
Відколи AI SDK вийшов у 1.0, агентів пишуть уже не лише для демо. А налагоджувати їх незручно: з tinker, тимчасового маршруту чи dd() видно, що агент відповів, але не те, які інструменти він викликав, із якими аргументами, скільки кроків зробила модель і де згоріли токени. Якщо відповідь неправильна, лишається гадати, чи винен промпт, інструмент, модель чи провайдер.
Що вміє Synapse
Пакет сканує застосунок і показує кожен клас, що реалізує контракт Agent з SDK, разом із провайдером, моделлю та інструментами. Нічого реєструвати не треба: написали клас у app/Ai/Agents чи app/Agents, оновили сторінку - агент у списку. Якщо агент лежить деінде, його не буде видно, доки не додасте шлях у discovery.paths. Провайдери й ключі Synapse бере з вашого config/ai.php.
Далі - плейграунд:
- чат зі стримінгом - вкладення, вибір іншої моделі для одного повідомлення без зміни коду агента, збережена історія з пошуком і фільтрами;
- картки викликів інструментів - аргументи, результат, тривалість і помилка, причому вбудовані інструменти провайдера (як-от вебпошук) відрізняються від ваших;
- використання токенів на кожне повідомлення і загалом на розмову, токени міркувань окремо;
- інформаційна панель - системний промпт, схеми інструментів, параметри генерації та
middleware такими, якими їх розв'яже SDK під час виклику;
- помилки - будь-який виняток стає карткою з класом, повідомленням, відповіддю провайдера і стек-трейсом, а не обірваним стримом.
Як поставити
Synapse призначений лише для середовища розробки:
composer require --dev 'redberry/synapse:^0.3'
php artisan synapse:install
Інсталятор публікує config/synapse.php, міграції та SynapseServiceProvider із гардом доступу, реєструє провайдер лише в local і запускає міграції. Дашборд відкривається на /synapse, npm не потрібен - зібрані ассети вже в пакеті.
Вимоги: PHP 8.3+, Laravel 12.62+ або 13.15+, laravel/ai ^1.3. Якщо в проєкті стоїть laravel/mcp, він має бути не нижчим за 1.1.0 - Synapse задає цю межу через security-раду GHSA-m25c-38v7-94p8. Що змінилося в MCP 1.1 і AI SDK 1.3, ми розбирали в огляді AI-інструментів Laravel.
Що нового в 0.3
Схвалення інструментів. Інструменти з контрактом Approvable і трейтом InteractsWithApprovals, а також інструменти SDK, на яких викликано requireApproval('...'), у 0.2 лише ставили хід на паузу. Тепер плейграунд показує аргументи та причину ще до виконання, кожен виклик можна схвалити або відхилити, і щойно рішення є для всіх викликів, агент продовжує той самий хід. Після відхилення модель отримує пояснення, що дію скасовано, і відповідає далі. Призупинені запити переживають перезавантаження сторінки. Працює для власних інструментів, обгорток MCP з SDK і схвалення перед делегуванням субагенту. Не підтримуються інструменти, які виконує сам провайдер, і запити на схвалення зсередини дочірнього агента. Як влаштоване схвалення в самому SDK, ми писали в окремій новині.
Джерела. URL-цитування, які повертає провайдер, показуються клікабельним списком під відповіддю. Звичайні посилання в тексті чи в результатах інструментів джерелами не стають, і, як чесно пишуть автори, цитування - це те, на що послався провайдер, а не гарантія правильності відповіді.
Пояснення зупинок. Якщо відповідь обірвалася через ліміт вихідних токенів, фільтр контенту чи явне скасування, плейграунд так і каже, а часткова відповідь лишається видимою. Це допомагає відрізнити «треба збільшити ліміт» від справжнього збою.
Інспектор кроків. Під збереженою відповіддю розгортається Steps (N) - окремі кроки моделі в межах ходу: провайдер і модель, текст, міркування, причина завершення, використання токенів і пов'язані виклики інструментів. Для нових кроків видно тривалість самого запиту до моделі окремо від виконання інструментів. Так легко знайти найдорожчий крок у довгій розмові.
0.3.1: Octane
У 0.3.0 під Laravel Octane виклики інструментів у воркерах могли не записатися: рекордер «губив» виклик. 0.3.1 це виправляє, і окремих налаштувань для Octane не треба. FrankenPHP і Swoole під Octane віддають відповідь поступово, а от RoadRunner зберігає розмови та рішення щодо схвалень, але відповідь віддає лише наприкінці ходу - плейграунд показує про це попередження. Після оновлення перезапустіть воркери:
composer require --dev 'redberry/synapse:^0.3.1'
php artisan octane:reload --server=frankenphp
Що врахувати
- З 0.2.0 історія зберігається, але треба опублікувати й запустити дві нові міграції:
php artisan vendor:publish --tag=synapse-migrations і php artisan migrate. Старі призупинені ходи продовжити не вийде. З 0.1.x міграція окрема і вимагає скидання історії - див. UPGRADE.md.
- Справжні провайдери в тестах - лише OpenAI. Під час валідації 0.2.0 смоук-тести на живому API проганяли на OpenAI
gpt-4.1-mini, решта тестів - на фейкових агентах. Іншими провайдерами автори пакет наживо не перевіряли.
- Structured output - за один прохід. Агенти зі структурованою відповіддю отримують лише поточне повідомлення без попередніх ходів, результат показується як JSON.
- Це справжні виклики. Плейграунд витрачає справжні кредити API і виконує ваші справжні інструменти з усіма побічними ефектами. Поза
local доступ закриває гард viewSynapse, а в продакшені маршрути не реєструються, поки ви явно не задасте SYNAPSE_ENABLED=true.
Чи варто ставити
Якщо ви пишете агентів на Laravel AI SDK 1.3 і досі налагоджуєте їх через логи, Synapse варто спробувати: він ставиться однією командою як dev-залежність і нічого не змінює в коді агентів. Найкорисніше в 0.3 - можливість прогнати сценарій зі схваленням людиною ще до того, як ви збудуєте для нього власний інтерфейс. Пакет поки в 0.x, і між мінорними версіями вже траплялися зміни, що вимагали скидання історії, тож перед оновленням читайте примітки до релізу. Під Octane ставте одразу 0.3.1.