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

PrefixMeaning
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_ vs agent_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.

DomainScope
audienceLearner profiling and audience analysis
depositoryKnowledge Depository — building and trimming the knowledge foundation
course_structureOutline, module structure, and course-level planning
assetPer-course assets generated once after the outline: characters, localization, publishing blocks
section_contentContent generation for course sections
artifactInteractive mini-game generation pipeline
avatarTrainer personas
videoSynthesia templates and scripts
image_translationImage 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

LevelLengthFormNotes
Module2–4 wordsNoun phraseExpress the main theme or skill area (e.g., Recognizing strengths, Smart AI workflows)
Topicmax 6–8 wordsAction-oriented where possibleNatural step in the learning path; avoid "Module X summary" — reflect the theme instead
SectionMust differ from the section type name; no numbers, no underscores; avoid "Module X challenge"