Introduction
Prompt Deck ships with sensible defaults that work out of the box. Like most Laravel packages, all configuration lives in config/prompt-deck.php and every option can be overridden via environment variables for deployment flexibility.
Publishing the configuration
Publish the configuration file using the Artisan command:
php artisan vendor:publish --tag=prompt-deck-config
This copies the package’s default configuration to config/prompt-deck.php in your application. Once published, you can modify it freely.
Prompts path
The path option determines where your versioned prompt files are stored on disk:
'path' => resource_path('prompts'),
By default, prompts live in resources/prompts/. You can change this to any directory:
'path' => base_path('ai/prompts'),
The directory is created automatically when you first run php artisan make:prompt.
File extension
The extension option controls the file extension used for prompt template files:
Markdown (.md) is the default and recommended for readability. You can change it to any extension:
| Value | Result |
|---|
md | system.md, user.md |
txt | system.txt, user.txt |
blade.php | system.blade.php, user.blade.php |
prompt | system.prompt, user.prompt |
Changing the extension only affects newly generated files. Existing prompt files are not renamed automatically.
Versioning strategy
The versioning option controls how prompt versions are organised:
'versioning' => 'directory',
Currently, only the directory strategy is supported. Each version is stored in its own sub-directory (v1/, v2/, etc.) within the prompt’s folder:
resources/prompts/order-summary/
├── v1/
│ └── system.md
├── v2/
│ ├── system.md
│ └── user.md
└── metadata.json
Cache
The cache section controls prompt caching behaviour. Caching avoids repeated filesystem reads by storing loaded prompts in your configured cache store.
'cache' => [
'enabled' => env('PROMPTDECK_CACHE_ENABLED', env('APP_DEBUG', false) ? false : true),
'store' => env('PROMPTDECK_CACHE_STORE', 'file'),
'ttl' => env('PROMPTDECK_CACHE_TTL', 3600),
'prefix' => env('CACHE_PREFIX', env('PROMPTDECK_CACHE_PREFIX', 'prompt-deck:')),
],
Enabling / disabling
'enabled' => env('PROMPTDECK_CACHE_ENABLED', env('APP_DEBUG', false) ? false : true),
By default, caching is disabled when APP_DEBUG=true (local development) and enabled in production. This ensures that file changes are picked up immediately during development.
Override via your .env:
PROMPTDECK_CACHE_ENABLED=false # Always disable caching
PROMPTDECK_CACHE_ENABLED=true # Always enable caching
Cache store
'store' => env('PROMPTDECK_CACHE_STORE', 'file'),
The cache store to use. Must match a store name defined in your config/cache.php. Common values:
| Store | Description |
|---|
file | File-based cache (default). Simple, no extra dependencies. |
redis | Redis cache. Fast, shared across workers. |
memcached | Memcached. Similar to Redis. |
array | In-memory only. Cleared on each request (useful for testing). |
TTL
'ttl' => env('PROMPTDECK_CACHE_TTL', 3600),
Cache time-to-live in seconds. After this duration, the prompt is re-read from disk on the next access. Default is 3600 seconds (1 hour).
Cache key prefix
'prefix' => env('CACHE_PREFIX', env('PROMPTDECK_CACHE_PREFIX', 'prompt-deck:')),
The prefix prepended to all cache keys. The final cache key follows the pattern: {prefix}{prompt-name}.v{version}.
For example, with the default prefix:
prompt-deck:order-summary.v2
Database tracking
The tracking section controls whether prompt versions and executions are logged to the database.
'tracking' => [
'enabled' => env('PROMPTDECK_TRACKING_ENABLED', env('APP_DEBUG', false) ? false : true),
'connection' => env('PROMPTDECK_DB_CONNECTION'),
],
Enabling / disabling
'enabled' => env('PROMPTDECK_TRACKING_ENABLED', env('APP_DEBUG', false) ? false : true),
Like caching, tracking is disabled in debug mode and enabled in production by default. When enabled:
- Version activation is stored in the
prompt_versions database table (instead of metadata.json).
- Execution tracking via
PromptDeck::track() inserts records into the prompt_executions table.
Database connection
'connection' => env('PROMPTDECK_DB_CONNECTION'),
The database connection to use for tracking tables. Set to null (the default) to use your application’s default connection. Set to a named connection from config/database.php if you want tracking data stored on a separate database:
PROMPTDECK_DB_CONNECTION=analytics
AI SDK integration
'scaffold_on_make_agent' => env('PROMPTDECK_SCAFFOLD_ON_MAKE_AGENT', true),
When the Laravel AI SDK is installed and this option is true, Prompt Deck automatically creates a matching prompt directory whenever you run php artisan make:agent. See the AI SDK Integration documentation for details.
Set to false to disable automatic scaffolding:
PROMPTDECK_SCAFFOLD_ON_MAKE_AGENT=false
Full configuration reference
| Key | Type | Default | Description |
|---|
path | string | resource_path('prompts') | Base directory where prompt files are stored. |
extension | string | md | File extension for prompt template files. |
versioning | string | directory | Versioning strategy (directory). |
cache.enabled | bool | true (prod) / false (debug) | Enable prompt caching. |
cache.store | string | file | Cache store name. |
cache.ttl | int | 3600 | Cache TTL in seconds. |
cache.prefix | string | prompt-deck: | Cache key prefix. |
tracking.enabled | bool | true (prod) / false (debug) | Enable database tracking. |
tracking.connection | string|null | null | Database connection name. |
scaffold_on_make_agent | bool | true | Auto-scaffold prompts on make:agent. |
Environment variables reference
| Variable | Default | Description |
|---|
PROMPTDECK_CACHE_ENABLED | Dynamic | Enable/disable caching. |
PROMPTDECK_CACHE_STORE | file | Cache store to use. |
PROMPTDECK_CACHE_TTL | 3600 | Cache TTL in seconds. |
PROMPTDECK_CACHE_PREFIX | prompt-deck: | Cache key prefix. |
PROMPTDECK_TRACKING_ENABLED | Dynamic | Enable/disable database tracking. |
PROMPTDECK_DB_CONNECTION | null | Database connection for tracking. |
PROMPTDECK_SCAFFOLD_ON_MAKE_AGENT | true | Auto-scaffold on make:agent. |