Installation:
composer require promptphp/deck
php artisan vendor:publish --provider="PromptPHP\Deck\Providers\DeckServiceProvider"
php artisan migrate
Create your first prompt:
php artisan make:prompt order-summary
This generates a versioned structure in resources/prompts/order-summary/.
Edit the prompt:
Modify resources/prompts/order-summary/v1/system.md with your AI instructions, using {{ $variable }} syntax for dynamic values.
Use the prompt in code:
use PromptPHP\Deck\Facades\Deck;
$prompt = Deck::get('order-summary');
$rendered = $prompt->system(['tone' => 'friendly', 'order' => $orderDetails]);
AI Agent Integration:
For a Laravel AI SDK agent, add the HasPromptTemplate trait to auto-load prompts:
use PromptPHP\Deck\Concerns\HasPromptTemplate;
class OrderAgent extends Agent {
use HasPromptTemplate;
}
make:prompt to scaffold versioned prompts.system.md, user.md, etc.) in versioned directories.prompt:test before activation.prompt:activate or programmatically.make:prompt) for experimental changes.prompt:diff to analyze differences between versions.prompt:activate) if needed.$prompt->system(['tone' => 'professional', 'product' => $product]);
$messages = $prompt->toMessages(['tone' => 'friendly']);
config/deck.php:
'track_performance' => true,
prompt_versions table.HasPromptTemplate to eliminate manual instructions() definitions.make:agent to auto-scaffold matching prompts.php artisan vendor:publish --tag=deck-stubs
config/deck.php to define environment-specific prompt paths:
'paths' => [
'prompts' => resource_path('prompts'),
'stubs' => __DIR__.'/../stubs',
],
prompt:test to CI to catch rendering errors early.prompt:activate in deployment scripts for zero-downtime updates.{{ $var }} in Markdown may conflict with Laravel Blade syntax.$:
{{ $${variable} }}
toMessages() fails if a role file is missing in a version.--role=assistant).config/deck.php if unused:
'track_performance' => env('DECK_TRACK_PERFORMANCE', false),
v1 → v3).prompt:list to verify versions before activation.resources/prompts lacks write permissions.chmod -R 755 resources/prompts
prompt:test to isolate variable interpolation errors:
php artisan prompt:test order-summary --variables='{"tone":"friendly"}'
prompt_versions table for inconsistencies:
SELECT * FROM prompt_versions WHERE prompt_name = 'order-summary';
--type=system or --type=user to narrow down diffs to specific roles.prompt_name in your agent matches the prompt directory:
class OrderAgent extends Agent {
use HasPromptTemplate;
protected $promptName = 'order-summary'; // Must match directory name
}
PromptPHP\Deck\Contracts\VariableParser to support custom syntax (e.g., {{{variable}}}).php artisan vendor:publish --tag=deck-stubs
prompt_versions table to track custom metrics (e.g., response_time_ms).Deck facade to list/activate prompts via a Laravel controller.# Example: Increment version on commit to prompt files
git diff --name-only HEAD~1 HEAD | grep 'resources/prompts/' && php artisan prompt:bump
How can I help you explore Laravel packages today?