Skip to main content

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:
'extension' => 'md',
Markdown (.md) is the default and recommended for readability. You can change it to any extension:
ValueResult
mdsystem.md, user.md
txtsystem.txt, user.txt
blade.phpsystem.blade.php, user.blade.php
promptsystem.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:
StoreDescription
fileFile-based cache (default). Simple, no extra dependencies.
redisRedis cache. Fast, shared across workers.
memcachedMemcached. Similar to Redis.
arrayIn-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.
You must publish and run the migrations before enabling tracking. See Installation — Publishing migrations.

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

KeyTypeDefaultDescription
pathstringresource_path('prompts')Base directory where prompt files are stored.
extensionstringmdFile extension for prompt template files.
versioningstringdirectoryVersioning strategy (directory).
cache.enabledbooltrue (prod) / false (debug)Enable prompt caching.
cache.storestringfileCache store name.
cache.ttlint3600Cache TTL in seconds.
cache.prefixstringprompt-deck:Cache key prefix.
tracking.enabledbooltrue (prod) / false (debug)Enable database tracking.
tracking.connectionstring|nullnullDatabase connection name.
scaffold_on_make_agentbooltrueAuto-scaffold prompts on make:agent.

Environment variables reference

VariableDefaultDescription
PROMPTDECK_CACHE_ENABLEDDynamicEnable/disable caching.
PROMPTDECK_CACHE_STOREfileCache store to use.
PROMPTDECK_CACHE_TTL3600Cache TTL in seconds.
PROMPTDECK_CACHE_PREFIXprompt-deck:Cache key prefix.
PROMPTDECK_TRACKING_ENABLEDDynamicEnable/disable database tracking.
PROMPTDECK_DB_CONNECTIONnullDatabase connection for tracking.
PROMPTDECK_SCAFFOLD_ON_MAKE_AGENTtrueAuto-scaffold on make:agent.