One subfolder per pattern (not per task). Prompt + examples + eval grouped together. README at the top defines conventions.
prompts/ at the root of your team's repo (or a dedicated your-team-prompts repo). One subfolder per pattern (reviewer / synthesizer / translator …). Strict file names so tooling and humans agree.
Synthesized from Promptfoo's examples/ directory + apxml's version-control guidance. The senior-team adaptation: subfolder per pattern, prompt+examples+eval grouped together.
-
Subfolder per pattern, not per task
reviewer/is reusable across PRDs, specs, briefs.member-consent-prd-review/is a one-shot. Patterns compound; tasks don't. -
Prompt + examples + eval grouped
When you change
prompt.md, the diff sits next to its eval cases. PR reviewers can see "did the regression coverage update?" in one glance. - README at the top is the index First file a new teammate opens. Lists every pattern, last-updated date, owner. Without it, the repo becomes a graveyard within 6 months.
-
_conventions.md captures the rules once
Schema for
prompt.mdfrontmatter, semver rules, PR review template. Underscore prefix sorts it near the top alongside README.
-
Lowercase, hyphenated folders
reviewer/notReviewer/.synthesizer/notSynthesizer_v2/. Cross-platform safe, grep-friendly. -
Domain-named, not project-named
reviewer/is the pattern.member-consent-prd/is the use case. Patterns are reusable; use cases are not. Name folders after patterns. -
Strict file names — don't bikeshed
prompt.md,eval.yaml,CHANGELOG.md,examples/. So Promptfoo can findeval.yamlautomatically. So a script can grep everyprompt.mdacross the repo. Naming is infrastructure. -
Underscore-prefix for meta files
_conventions.md,_glossary.md. Sorts above pattern folders. Signals "read me before patterns."
Per kriasoft/Folder-Structure-Conventions: naming is a contract with tooling. Break it once and grep stops working.