michal78/laravel-pandora
An agentic framework for Laravel: build agents, tools, approvals, automations and memory under explicit, auditable policy, with a Livewire control center for operating them.
What the package is (baseline, no prior assessment): a Laravel package providing an agent-runtime control center — agents, tools, tool delegation with ability intersection/deny lists, workspaces with local-storage containment, sessions with actor isolation, provider health monitoring, and budget/deadline enforcement — with a Livewire UI under src/UI/Livewire/ and queue-worker-based execution. v0.1.4 is a security- and correctness-hardening release, not a feature release.
Architecture fit: Strongly Laravel-native and opinionated. It assumes Eloquent, a relational DB with unique indexes, queue workers, Livewire, and a real local filesystem. It fits an existing Laravel app that already operates Horizon/queue workers and can host Livewire in its admin surface. It is a poor fit for polyglot estates, headless/API-first agent platforms, or teams that cannot run multiple workers.
Integration feasibility: Moderate. The release itself is additive (tests, internal fixes), but it raises the operational bar: the concurrency work in this release only makes sense if you run more than one worker, and the storage containment layer assumes you let the package own workspace paths. Integration effort is dominated by validating runtime assumptions, not by wiring code.
Technical risk:
RunLock's database lease could be deleted with 22 serial tests green; five processes could acquire the same run. A ProviderHealthMonitor::rowFor() race could fail a run outright. Both are fixed here.ActorContext::system() labeling map to our identity model — can automation labels collide with user primary keys in our data?Stack fit: Requires Laravel with Livewire and a queue backend; assumes an Eloquent-capable RDBMS with unique-index enforcement. Confirm the package's auth/authorization expectations align with your app's policies — the release makes clear that authorization is asserted inside each Livewire component, not via route middleware, so your gate definitions must cover package abilities like tools.io.view.
Migration path: 0.1.3 → 0.1.4 is a patch-level upgrade with no documented breaking API change; changes are internal fixes plus new tests. If you are on 0.1.2 or earlier, treat this as a security-driven upgrade and prioritize it — v0.1.3 shipped two live security fixes. Verify the provider-health write change (the firstOrNew() + save() pattern replaced with something race-safe) against your DB's upsert semantics, and check for accompanying migrations or index changes.
Compatibility checks before rollout:
provider_key index and the new concurrent write path (MySQL vs Postgres vs SQLite differ on upsert/conflict handling).RunLock lease semantics under 2+ workers on a single run — the prior behavior silently permitted five simultaneous owners.RunState::TimedOut attribution messages; if you alert on message text, that's an observable contract change.Sequencing:
Maintenance: Small, fast-moving, pre-1.0 project with an unusually rigorous test culture. Expect frequent 0.1.x releases with dense, technically deep notes; budget recurring engineering time to read them rather than assuming patch-level safety. Vendor risk is real — plan for the possibility of maintaining a fork if the project stalls.
Support: No stated SLA. You are on community support. Contractual or regulated deployments should not assume upstream responsiveness; identify a named internal owner for this package.
Scaling: Multi-worker operation is now tested but recently tested — treat concurrency as validated-once rather than battle-proven. Watch: contention on run-lease rows, write amplification on provider-health rows under many concurrent provider calls, and workspace quota accounting (each write calls size(), which resolves the path with mustExist: true). The concurrency harness is deliberately not pest --parallel, so your own test suite cannot cheaply reproduce the package's concurrency coverage — you will need your own load test.
Failure modes to monitor:
TimedOut for any budget breach — the state name does not distinguish wall-clock from token budgets; alert on the message, not the state.succeeded where policy says denied — the delegation deny-path class of bug is exactly the "child runs with a tool the parent was denied" escalation.id but differ in type, or two conversations share an agent/actor but differ in origin.Ramp-up: The package's own suite (1,800+ tests, ablation-driven) is a genuine ramp-up asset for engineers, but it presumes a reader comfortable with threat modeling and removal testing. Estimate one to two weeks for a senior Laravel engineer to reach productivity, plus separate security review time focused on the delegation and session-isolation models before any multi-tenant or multi-user exposure.
How can I help you explore Laravel packages today?