Open Source / laravel-swarm-filament

See what your swarms did.

A read-only Filament panel for Swarm. Every run becomes a topology-aware flow graph you can click through — inputs, outputs, tokens, timing, retries, and memory, step by step. It reads your persisted run data; it never touches it.

Install

composer require builtbyberry/laravel-swarm-filament

At a glance

Companion · MIT

Requires — Filament v5 · PHP 8.5+

Pairs with — laravel-swarm ^0.19

Surface — Read-only observability

Access — Deny-by-default gate

Namespace — BuiltByBerry\LaravelSwarmFilament

Why it exists

Swarm records everything. This gives it a face.

Swarm persists every step, tool call, and retry so agentic work is auditable by default. That data is only as useful as it is legible.

This panel turns the audit trail into something an operator can actually read — inside the Filament admin your team already runs, with no separate dashboard to stand up.

01

Run-centric

Navigation is Runs and Health — nothing else. Durable execution, memory, streaming, audit, and artifacts are facets of a run, not scattered tables.

02

Read-only by design

It observes; it never mutates. Pause, resume, and cancel are deliberately out of scope, so nothing here can change a running workflow.

03

Native to your panel

A Filament v5 plugin — same auth, same panel, same conventions. Register it and the surfaces appear.

What you see

The whole run, from the strip down to the step.

The laravel-swarm-filament panel: a topology-aware flow graph of a Swarm run above a stats strip, with per-step detail.
The runs view — stats strip, topology-aware flow graph, and per-step detail, inside your Filament panel.

Flow graph

The topology, drawn from the data

A server-computed SVG that follows the run's real shape — route plan, durable branches and child runs, then run history, richest view first. Sequential, parallel, or hierarchical, it renders what actually happened.

Per-node detail

Click any step, see everything

Input to output, tokens, duration, attempts, the tools it called, and the memory it wrote or could see — as chips on the node. The detail is one click from the graph.

Stats strip

Insight before the table

The runs index leads with the numbers that matter — total runs, what needs attention, p50 latency, tokens — so the state of your agents reads at a glance.

Health

Is the system behaving

A second surface for the shape of things across runs — so "are the agents healthy" is a page, not a query you write against the database.

The trust surface

A window, not a lever.

Observability that reads production data has to earn its access. This one is built to. It reads through Swarm's public display contracts — never a mutating call, never the internal cipher.

Reads through contracts

Sources persisted run data through core's public read interfaces only. It cannot write, and it cannot reach the sealed internals.

Deny-by-default access

Every surface sits behind a viewSwarmObservability gate. Nobody sees a run until you say who can.

Sealed values stay masked

Encrypted payloads route through a single display chokepoint that masks ciphertext at any nesting depth — no accidental leak into a view.

Octane-safe

No process-global mutable state. Safe under Octane and concurrent in-process runs, like the core it reads from.

Get started

Three steps to a runs view.

You need a Filament v5 panel and laravel-swarm ^0.19 with database persistence enabled. The plugin reads what Swarm already stores — no tables and no migrations of its own.

Step 01

Install

Pull the package in with Composer.

composer require builtbyberry/laravel-swarm-filament

Step 02

Register the plugin

Add it to your Filament panel provider. The Runs and Health pages appear in the panel.

use BuiltByBerry\LaravelSwarmFilament\SwarmFilamentPlugin;

public function panel(Panel $panel): Panel
{
    return $panel->plugin(SwarmFilamentPlugin::make());
}

Step 03

Authorize access

Access is deny-by-default. Grant it with the viewSwarmObservability gate — nobody sees a run until you say who can.

use Illuminate\Support\Facades\Gate;

Gate::define('viewSwarmObservability', fn ($user) => $user->is_admin);

To change the ability or turn the gate off, publish the config with php artisan vendor:publish --tag=swarm-filament-config and edit config/swarm-filament.php. Full setup lives in the README.

Part of Swarm

The first companion to the framework.

laravel-swarm-filament reads what laravel-swarm persists. Start with the framework, add the panel when you want to see it work — and watch this space for the companions that follow.