Prompt file format
Each prompt is stored as a YAML file in theprompts/ directory. Here is a complete example:
| Field | Description |
|---|---|
id | Unique identifier for the prompt, used in CLI commands |
version | Integer version number, incremented on each change |
status | Current lifecycle stage: draft, staging, or production |
body | The prompt text sent to the model |
author | Who created or last modified the prompt |
created_at | ISO 8601 timestamp |
tags | Optional labels for organizing and filtering prompts |
The promotion lifecycle
Prompts move through three statuses on the way to production:draft
The default status for every new prompt. A draft prompt is a work in progress — it can be edited freely and has not been validated yet.
staging
Promote to staging once you want to run evals against the prompt before it goes live. This signals that the prompt is a candidate for production.
CLI workflow
- Create
- List
- Diff
- Promote
Create a new prompt YAML file in The file is created with
prompts/:status: draft, version: 1, and a placeholder body for you to fill in.Why it matters
Prompt changes are often the most impactful changes in an LLM application, but they rarely go through the same review process as code. The prompt registry makes every change:- Visible in git — prompt edits appear in pull request diffs like any other file change
- Diffable —
evalflow prompt diffshows exactly what changed between versions - Gated — running
evalflow evalbefore promoting connects prompt changes to quality scores - Auditable — the
author,created_at, andversionfields give you a history of who changed what and when