PHPackages                             rawphp/laravel-capabilities-ai - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. rawphp/laravel-capabilities-ai

ActiveLibrary

rawphp/laravel-capabilities-ai
==============================

Conversation / turn / proposal runtime for the Laravel Capabilities bus — pluggable LlmClient, progress store, bus-only tools

00PHP

Since Aug 2Pushed todayCompare

[ Source](https://github.com/rawphp/laravel-capabilities-ai)[ Packagist](https://packagist.org/packages/rawphp/laravel-capabilities-ai)[ RSS](/packages/rawphp-laravel-capabilities-ai/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

rawphp/laravel-capabilities-ai
==============================

[](#rawphplaravel-capabilities-ai)

Conversation / turn / proposal runtime for the [Laravel Capabilities](https://github.com/rawphp/laravel-capabilities) bus.

**Monorepo path:** `packages/laravel-capabilities-ai/` in `laravel-capabilities-monrepo`.

Install (path package)
----------------------

[](#install-path-package)

```
# monorepo root already path-wires this package
composer update rawphp/laravel-capabilities-ai
composer test:ai
```

Host app: require `rawphp/laravel-capabilities-ai` and register `Rawphp\CapabilitiesAi\CapabilitiesAiServiceProvider` (auto-discovery via `extra.laravel.providers`).

Config
------

[](#config)

Publish:

```
php artisan vendor:publish --tag=capabilities-ai-config
php artisan vendor:publish --tag=capabilities-ai-migrations
```

Key defaults (`config/capabilities-ai.php`):

KeyDefault`table_prefix``capabilities_ai_``progress.driver``array` (or `redis`)`llm.driver``fake` in tests / `anthropic` in prod`claim_ttl``120``max_tool_rounds``8``routes.enabled``false`Progress events live in array/Redis — **not** MySQL product tables.

Host seams
----------

[](#host-seams)

Bind before running turns:

- `Rawphp\CapabilitiesAi\Contracts\ConversationContextProvider` — messages for the model
- `Rawphp\CapabilitiesAi\Contracts\ToolCatalog` — tools the model may call (names = capability names)
- `Rawphp\Capabilities\Contracts\CapabilityBus` — already provided by core

```
use Rawphp\CapabilitiesAi\Contracts\LlmClient;
use Rawphp\CapabilitiesAi\Support\FakeLlmClient;
use Rawphp\CapabilitiesAi\Support\AnthropicLlmClient;

// Testing default
$app->bind(LlmClient::class, fn () => new FakeLlmClient);

// Production
$app->bind(LlmClient::class, fn () => new AnthropicLlmClient(
    apiKey: config('capabilities-ai.llm.anthropic.api_key'),
    model: config('capabilities-ai.llm.anthropic.model'),
));
```

Env: `ANTHROPIC_API_KEY` (never required in CI — tests use `Http::fake` / `FakeLlmClient`).

Flow
----

[](#flow)

1. **Cheap create** — `ConversationService::createUserMessage` inserts message + queued turn, dispatches `RunTurnJob` (**no LLM**).
2. **Claim + run** — `TurnClaim` atomic update; `TurnRunner` loops LLM → tools via `CapabilityBus::invoke` only.
3. **Proposals** — `ProposalService::accept` / `reject` (accept is bus-only side effect).

ProgressStore
-------------

[](#progressstore)

```
use Rawphp\CapabilitiesAi\Support\ArrayProgressStore;
use Rawphp\CapabilitiesAi\Support\RedisProgressStore;

$store = new ArrayProgressStore;
$store->append($turnUlid, ['kind' => 'status', 'data' => ['status' => 'running']]);
$events = $store->since($turnUlid, $cursor);
```

Kinds: `status` | `token` | `tool` | `error` | `terminal`.

License
-------

[](#license)

MIT

Non-chat / MVS host jobs
------------------------

[](#non-chat--mvs-host-jobs)

Hosts may resolve `LlmClient` **without** a Conversation (e.g. Macro Validation Suite jobs):

```
/** @var \Rawphp\CapabilitiesAi\Contracts\LlmClient $llm */
$llm = app(\Rawphp\CapabilitiesAi\Contracts\LlmClient::class);
$result = $llm->complete([
    ['role' => 'user', 'content' => 'Summarize this payload…'],
]);
```

The `LlmClient` interface has **no conversation-only dependency**. Testing default is `FakeLlmClient` (no network).

###  Health Score

20

↑

LowBetter than 12% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/c66ee84d4063a7665c742b3965fc359e1908d02ecb93c54af32c7594d0b2f748?d=identicon)[rawphp](/maintainers/rawphp)

---

Top Contributors

[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (1 commits)")

### Embed Badge

![Health badge](/badges/rawphp-laravel-capabilities-ai/health.svg)

```
[![Health](https://phpackages.com/badges/rawphp-laravel-capabilities-ai/health.svg)](https://phpackages.com/packages/rawphp-laravel-capabilities-ai)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
