Skip to content

config.yaml Reference

The config.yaml file is an optional configuration placed alongside your template. It controls the interview experience without modifying the template itself. The Analyzer merges it into the manifest; the Orchestrator reads only the manifest.

meta:
display_name: "Meeting Notes"
description: "Structured meeting notes with action items and optional sections"
variables:
meeting_title:
label: "Meeting Title"
question: "What is the title of this meeting?"
required: true
meeting_type:
type: choice
choices: [standup, workshop, review]
default: "standup"
include_next_meeting:
type: boolean
question: "Is a follow-up meeting scheduled?"
default: false
groups:
- name: "Meeting Details"
variables: [meeting_title, meeting_date, meeting_type]
- name: "Next Meeting"
condition: include_next_meeting
variables: [next_meeting_date, next_meeting_topic]
- name: "Action Items"
loop: action_items
variables: [description, assignee, due_date]
validation:
- rule: "next_meeting_date > meeting_date"
message: "The next meeting date must be after this meeting's date"

Optional. Metadata about the template.

FieldTypeRequiredDescription
display_namestringNoHuman-readable name shown to the user when Claude confirms the matched template. Defaults to the directory name.
descriptionstringNoShort description of the template’s purpose. Used internally and may appear in future template directory features.
meta:
display_name: "Meeting Notes"
description: "Structured meeting notes with action items and optional sections"

Optional. A map of variable names to override settings. Only variables that need customization need to be listed here — unlisted variables use defaults inferred from the template.

Each key is a variable name that appears in the template. The value is an object with any combination of the fields below.

FieldTypeRequiredDescription
labelstringNoShort label for the variable, shown as a heading for the question.
questionstringNoThe full question text Claude asks the user. Overrides the auto-generated question.
defaultanyNoDefault value pre-filled during the interview. Use "today" for date types to resolve to the current date.
requiredbooleanNoWhether the variable must be provided. Default: true.
format_hintstringNoAdditional formatting guidance shown alongside the question.
typestringNoExplicit variable type. See Variable types below. If omitted, the type is inferred from the variable name suffix.
choiceslistConditionalList of valid values. Required when type is choice. Ignored otherwise.

The type field accepts the following values:

TypeDescription
textFree text input. The default for most variables.
dateA calendar date. The special default "today" resolves to the current date.
numberA numeric value — currency, quantity, percentage.
emailAn email address. Validated for email format.
phoneA phone number. Accepts international formats.
booleanA yes/no question. Used as the gate for {% if %} conditional sections.
choiceOne of a fixed set of options. Requires the choices field.

If type is omitted, it is inferred from the variable name suffix (e.g., *_date becomes date, *_email becomes email). See Variable Type Reference for the full inference table.

variables:
meeting_title:
label: "Meeting Title"
question: "What is the title of this meeting?"
required: true
meeting_date:
question: "When was the meeting held?"
default: "today"
format_hint: "DD/MM/YYYY"
meeting_type:
type: choice
choices: [standup, workshop, review]
default: standup
include_next_meeting:
type: boolean
default: false
question: "Is a follow-up meeting scheduled?"

Optional. Controls interview grouping and ordering. A list of group objects that batch related variables under a heading and present them together.

Without groups, Claude presents variables one at a time in template order. With groups, related variables are collected together.

FieldTypeRequiredDescription
namestringYesDisplay name for the group, shown as a heading during the interview.
variableslistYesList of variable names to collect in this group.
conditionstringNoName of a boolean variable. The group is only shown when that variable is true. The gate variable must be collected before this group.
loopstringNoName of a loop collection. The group collects items for that {% for %} loop. Must match the collection name in the template (e.g., action_items for {% for item in action_items %}).
groups:
- name: "Meeting Details"
variables: [meeting_title, meeting_date, meeting_type, facilitator_name, meeting_location]
- name: "Attendees & Agenda"
variables: [attendees, agenda]

A group gated on a boolean variable. Claude asks the gate question first; if the answer is no, the entire group is skipped.

groups:
- name: "Next Meeting"
condition: include_next_meeting
variables: [next_meeting_date, next_meeting_topic]

A group that maps to a {% for %} loop in the template. Claude collects items one at a time, prompting for the sub-fields on each pass.

groups:
- name: "Action Items"
loop: action_items
variables: [description, assignee, due_date]

Optional. A list of cross-field validation rules evaluated after all values are collected but before rendering. If a rule fails, Claude reports the error message and prompts the user to re-enter the offending values.

FieldTypeRequiredDescription
rulestringYesA Python-style boolean expression using variable names. Evaluated against all collected values.
messagestringYesError message shown to the user when the rule evaluates to false.
validation:
- rule: "next_meeting_date > meeting_date"
message: "The next meeting date must be after this meeting's date."

Rules have access to all collected variable values and use Python expression syntax.