Family · 9 packages, one product
PR

Prism

PHP · 9 packages

The Laravel LLM layer the kit builds on, and what makes it an agent platform: durable agent sessions, MCP tools, memory, a guarded browser, sandboxed workspaces, Human+ presence, tracing, and the rest of the Perplexity API.

Backend · renders no UIPHP
Everything in this family ships against one shared contract — install only the pieces your stack needs. Language mirrors behave identically, so you pick your backend and get the same product.

LLM layer

1 package · headless — install and call it · LLM providers for Laravel: text, structured output, streaming and tool calling

prismPHP Backend · renders no UI

Maintained fork of prism-php/prism -- the Laravel LLM integration layer the kit builds on. Unified text / structured / streaming across providers, with the telemetry that makes per-run AI spend attributable. fancy-flow-php's PrismLlmClient adapter targets it, and credentials resolve at call time rather than from env, so DB-backed provider rows and queue workers are first-class.

$composer require particle-academy/prism

Agent sessions

1 package · headless — install and call it · LLM agent harness: durable sessions, modes, tool permissions and subagents

prism-harnessPHP Backend · renders no UI

Durable agent sessions for Laravel -- threads, modes, tool permissions and subagents on top of Prism. Where a conversation with an agent stops being one request and becomes state you can resume, inspect and govern.

$composer require particle-academy/prism-harness

Tools

1 package · headless — install and call it · MCP client: remote MCP tools as Prism tools, across a visible trust boundary

prism-mcpPHP Backend · renders no UI

Model Context Protocol for Prism -- consume remote MCP tools as ordinary Prism tools, across a trust boundary you can see. The boundary is the point: a remote tool is not quietly indistinguishable from a local one.

$composer require particle-academy/prism-mcp

Memory

1 package · headless — install and call it · Agent memory: vector store, semantic recall and token-budget-aware retrieval

prism-memoryPHP Backend · renders no UI

Persistent context and semantic recall for Laravel -- vector storage, remember / recall, and token-budget-aware retrieval on top of Prism. The other half of a bounded context window: somewhere for what leaves it to go, so a compacted agent is not simply blind to its own earlier work.

$composer require particle-academy/prism-memory

Browser

1 package · headless — install and call it · Web browsing for agents: guarded, policy-first browser automation

prism-browserPHP Backend · renders no UI

Guarded browser automation for Prism agents -- bounded observations, policy-first navigation, and durable sessions. First-party, so driving a browser from an agent does not start with a third-party approval conversation.

$composer require particle-academy/prism-browser

Workspace

1 package · headless — install and call it · Agent sandbox: a session-scoped filesystem behind a path guard

prism-workspacePHP Backend · renders no UI

Sandboxed, session-scoped agent workspaces for Laravel -- a scoped Storage disk behind a path guard, shipped with the adversarial corpus that proves the boundary holds. Where an agent gets somewhere to write without getting everywhere to write.

$composer require particle-academy/prism-workspace

Human+

1 package · headless — install and call it · Human+ presence: agent sessions joining live Fancy surfaces over MCP relay

prism-human-plusPHP Backend · renders no UI

Human+ participant presence for Prism Harness -- an agent session joins live Fancy surfaces through trusted MCP relay attachments, so the human and the agent are on the same surface rather than trading turns through a transcript.

$composer require particle-academy/prism-human-plus

Tracing

1 package · headless — install and call it · LLM tracing: OpenTelemetry GenAI spans for agent runs

prism-opentelemetryPHP Backend · renders no UI

OpenTelemetry bridge for Prism -- turns Prism telemetry events into GenAI-convention spans for Arize Phoenix and any OTLP backend, so agent runs are readable in the tracing you already operate rather than a second place to look.

$composer require particle-academy/prism-opentelemetry

Perplexity

1 package · headless — install and call it · Perplexity search, embeddings and async deep research

prism-perplexityPHP Backend · renders no UI

The rest of the Perplexity API for Prism -- embeddings, direct search, and async deep research beyond the Agent API chat surface.

$composer require particle-academy/prism-perplexity
Why
Half the suite's server capabilities eventually want to call a model, and the Laravel ecosystem's answer is Prism. We depend on it heavily enough that waiting on upstream for a provider fix is not a position we want to be in, so we maintain a fork and keep it moving — it currently runs ahead of upstream. It is not a Fancy package and does not pretend to be one: it is someone else's excellent library that we carry, patch, and release, and it is listed here because a dependency nobody can see is a dependency nobody maintains. It sat unregistered for months, during which nothing tracked its releases and nothing tracked what it depended on — which is precisely how a vendor deprecation inside one of its providers went unnoticed until a consumer asked an unrelated question.
What
A Laravel integration layer for large language models, giving one API across providers for text generation, structured output against a schema, streaming, embeddings, and tool use. The part the kit leans on hardest is the telemetry: token usage and cost surface per request, which is what makes AI spend attributable per run, per node, and per organisation. A call that goes around Prism is spend a ledger does not have, and per-org billing that is quietly wrong is worse than billing that fails.
How
composer require particle-academy/prism. The kit reaches it through a seam rather than directly: FancyFlow\Capabilities\Adapters\PrismLlmClient implements fancy-flow-php's LlmClient contract, and prism-php/prism stays under composer suggest with every entry point isAvailable()-guarded — so fancy-flow's core keeps its no-runtime-dependencies rule and an app that already uses Prism gets a working llm_router with no glue. Credentials resolve at call time, not at boot. PrismLlmClient takes a callable mapping a host credential reference to provider config, applied through ->using($provider, $model, $config), so API keys living on a database row rather than in .env — and queue workers with no request-scoped config — are the supported case rather than the awkward one.
What next
Install a package and drive it from code or an agent.