illuma-law / laravel-prompt-registry
Dynamic AI agent prompt registration and retrieval for Laravel.
Package info
github.com/eloquage/laravel-prompt-registry
pkg:composer/illuma-law/laravel-prompt-registry
Requires
- php: ^8.3
- illuminate/contracts: ^11.0||^12.0||^13.0
- illuminate/database: ^11.0||^12.0||^13.0
- illuminate/support: ^11.0||^12.0||^13.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.14
- mrpunyapal/peststan: ^0.2.12
- nunomaduro/collision: ^8.8
- orchestra/testbench: ^10.1
- pestphp/pest: ^4.0
- pestphp/pest-plugin-arch: ^4.0
- pestphp/pest-plugin-laravel: ^4.0
- phpstan/extension-installer: ^1.4
- phpstan/phpstan-deprecation-rules: ^2.0
- phpstan/phpstan-phpunit: ^2.0
- spatie/laravel-ray: ^1.35
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-10-23 14:09:38 UTC
README
Laravel Prompt Registry
A Laravel package for registering AI agent metadata, resolving prompt content, and selecting a default standard or extended model tier.
Requirements
- PHP 8.3+
- Laravel 11, 12, or 13
Install
composer require illuma-law/laravel-prompt-registry php artisan vendor:publish --tag=prompt-registry-config
Laravel discovers the service provider automatically. The publish command is optional if you only register definitions in a service provider.
Register prompts
Add definitions to config/prompt-registry.php:
return [ 'prompts' => [ 'agents.summary' => [ 'agent' => App\Ai\Agents\SummaryAgent::class, 'name' => 'Summary agent', 'description' => 'Summarizes a document.', 'fallback_view' => 'prompts.agents.summary', 'default_primary_tier' => 'standard', // Optional: standard or extended. ], ], ];
Create the fallback prompt view at resources/views/prompts/agents/summary.blade.php. You can also register definitions at runtime:
use IllumaLaw\PromptRegistry\Facades\PromptRegistry; PromptRegistry::register('agents.summary', [ 'agent' => App\Ai\Agents\SummaryAgent::class, 'name' => 'Summary agent', 'description' => 'Summarizes a document.', 'fallback_view' => 'prompts.agents.summary', ]);
Look up and resolve prompts
use IllumaLaw\PromptRegistry\Facades\PromptRegistry; use IllumaLaw\PromptRegistry\PromptBodyResolver; $definition = PromptRegistry::forKey('agents.summary'); $byAgent = PromptRegistry::forAgent(App\Ai\Agents\SummaryAgent::class); $tier = PromptRegistry::defaultPrimaryTierForAgent(App\Ai\Agents\SummaryAgent::class); // Stored content wins; otherwise the registered fallback Blade view is rendered. $body = app(PromptBodyResolver::class)->resolveForAgent(App\Ai\Agents\SummaryAgent::class);
The manager also provides all() and definitionsByKey(). Unknown keys or agents raise InvalidArgumentException.
Optional prompt persistence
To store editable prompt overrides, set persistence.model in the published config to an Eloquent model with key and content columns. The package does not create a migration for this application-owned table.
use IllumaLaw\PromptRegistry\PromptPersistenceManager; $prompts = app(PromptPersistenceManager::class); $prompts->persistByKey('agents.summary', 'Summarize the supplied text in three bullets.'); $body = app(PromptBodyResolver::class)->resolveForAgent(App\Ai\Agents\SummaryAgent::class); $prompts->revertToFallbackByKey('agents.summary');
Development checks
composer test
composer analyse
composer format -- --test
The current test suite reports 57.4% line coverage; it does not provide complete coverage of every branch or production database configuration.
License
MIT. See LICENSE.
