Naming Conventions
Why this exists
Consistent naming makes it immediately clear what a prompt does, who calls it, and where it belongs — without opening the file. It also makes bulk operations (search, refactor, agent edits) predictable and safe.
Rules
Prompt files follow the pattern:
{prefix}_{domain}_{action}.yaml
All parts are lowercase, separated by underscores. No camelCase, no dashes.
Prefixes
| Prefix | Meaning |
|---|---|
flow_ | Sequential step in a Dify workflow pipeline (LLM node) |
tool_ | Callable utility invoked on demand inside a workflow (e.g., image generation, web search) |
agent_ | Prompt defining agent behavior or planning logic |
fraya_ | Prompt specific to Fraya's core identity and behavior |
Injections do not use prefixes — their type is signaled by location (/prompts/injections/).
Note:
flow_vsagent_—flow_is the current default for workflow steps.agent_may replace it in the future for steps that involve reasoning or planning. Discuss before switching.
Domains
Domains reflect the subject area of the prompt within Fraya's system.
| Domain | Scope |
|---|---|
audience | Learner profiling and audience analysis |
depository | Knowledge Depository — building and trimming the knowledge foundation |
course_structure | Outline, module structure, and course-level planning |
asset | Per-course assets generated once after the outline: characters, localization, publishing blocks |
section_content | Content generation for course sections |
artifact | Interactive mini-game generation pipeline |
avatar | Trainer personas |
video | Synthesia templates and scripts |
image_translation | Image localization workflows |
Actions
The action describes what the prompt does, as a verb or verb phrase.
Examples: generate, check_quality, plan, analyze, render, select, define_profile
Examples
flow_audience_define_profile.yaml ✓
flow_audience_analyze.yaml ✓
flow_depository_plan.yaml ✓
flow_depository_fill.yaml ✓
tool_image_translation_generate.yaml ✓
agent_plan_work.yaml ✓
fraya_core_behavior.yaml ✓
imageTranslation.yaml ✗ no prefix, camelCase
generate_prompt.yaml ✗ no prefix, no domain
prompt_1.yaml ✗ meaningless name
Edge cases
Prompt serves two domains Pick the primary domain — the one that best describes the prompt's main responsibility. If truly ambiguous, discuss before naming.
No clear action
If the prompt is a configuration or a definition rather than an action, use a noun:
flow_artifact_framework.yaml, flow_course_structure_constraints.yaml
Injection naming
Injections are named after what they enforce, not what they do:
avoid_ai_language.yaml, html_instructions.yaml, language_rules.yaml
Course content naming
Rules for naming modules, topics, and sections inside a generated course. This is separate
from prompt file naming and enforced at the outline design stage via the naming_instructions
injection.
General rules
- Use clear, simple language. No jargon, buzzwords, or overly long titles.
- Consistent tone: professional, educational, encouraging.
- Sentence case throughout: capitalize only the first word, proper nouns, and abbreviations.
- Titles must connect to the course title and reflect its main idea.
- Never use the word "journey".
- Do not use titles in the form "[name]'s aha moment" — rephrase to something equivalent.
By level
| Level | Length | Form | Notes |
|---|---|---|---|
| Module | 2–4 words | Noun phrase | Express the main theme or skill area (e.g., Recognizing strengths, Smart AI workflows) |
| Topic | max 6–8 words | Action-oriented where possible | Natural step in the learning path; avoid "Module X summary" — reflect the theme instead |
| Section | — | — | Must differ from the section type name; no numbers, no underscores; avoid "Module X challenge" |