Today’s recommendations: Audit logs that survive queue hops, a queue/schedule dashboard, typed Eloquent objects, and Filament that an AI agent can drive

The Laravel package ecosystem keeps shipping, and this cluster spans an audit trail, a monitoring dashboard, an architecture pattern, and two takes on Filament.

Yammi Audit Log solves the audit problem most packages fumble: attribution once a change happens two queue hops from the request. A normal audit trail credits the queue worker; Yammi carries the original identity through the chain and stamps a correlation ID, so you can reconstruct a cascade that spans a controller, a queued job, and a scheduled command as one workflow. No traits or observers: it hooks Eloquent events globally, with opt-in mode, async writes, a tamper-evident hash chain, and GDPR tooling all sitting dormant until you switch them on. The one caveat: raw Query Builder writes aren’t captured. A thoughtful default for “who really did this.”

Watchtower puts scheduled tasks, queues, jobs, and exceptions on one production dashboard, and, the part I like, it’s actions, not just visibility: run a task on demand, bulk-retry failed jobs by exception type or time window, mark errors resolved. Any driver (database, Redis, SQS), deferred writes and sampling to stay off the request path, and Horizon/Telescope-style gate auth. Heads up: this is close in spirit to the Vigilance package I recommended last batch: both monitor queues/schedules/errors on any driver, so if you’ve already bookmarked Vigilance, treat this as the alternative to compare against rather than a second must-install.

Wendell Adriel’s Improving Laravel Architecture With Expressive is the architecture read of the batch. The problem it names is real: the Eloquent model becomes the object passed everywhere (controllers, actions, jobs, policies), dragging query building, persistence, and casting into business logic that only wanted the data. Expressive keeps Eloquent as the persistence layer but converts models into fully typed objects at the boundary, so your payment action depends on customerId and totalCents (typed, can’t accidentally call ->delete() or trigger lazy loads) instead of the whole database model. There’s a generator and a sync command to keep the typed classes aligned. His practical rule is the right one: don’t use it for simple CRUD, reach for it where a workflow deserves a clearer boundary. Pairs beautifully with the Sandi Metz piece over in the essays.

For Filament, two very different things. Filament UI Plus is a paid community component pack that adds the polish Filament doesn’t ship (skeleton loaders for tables and stat widgets, an animated collapsible sidebar, sticky table actions, a Livewire loading bar, inline label prefixes), and it’s built to be upgrade-safe, with 10 of 13 features needing zero view overrides. And Mattias Geniar’s filament-mcp (his second appearance this batch) is the clever one: an MCP server that reads your existing resource forms and generates typed create_post/update_product tools, so an AI agent operates your panel through a typed contract instead of squinting at screenshots via browser automation. Everything is opt-in, deletes require explicit opt-in, and every call runs through the same tokens, gates, policies, and tenant scoping a human hits, plus an audit log that doubles as the clearest window I’ve seen into what an agent actually does over the wire.