The template package format
Reference for reviewers and hands-on creators. If you're creating
through the structured report, you never
touch these files — the AI interview builds them for you. Machine-readable
schemas live in
schemas/.
Package layout
Each simulation is one folder under templates/:
templates/
your-template-slug/
template.yaml # identity: id, title, objective, audience, roles, team size
steps.yaml # the ordered steps, human/AI modes, and grading rules
metadata.yaml # domain, difficulty, duration, tags, license, learning goals
creator.yaml # who you are + royalty preference
sample_inputs.json # example inputs for a test run
expected_outputs.json # what a good run produces
README.md # human-readable description of the simulation
LICENSE.md # license text
The reference package to copy from:
consumer-complaint-escalation.
template.yaml
| Field | Required | Meaning |
|---|---|---|
id | yes | Unique snake_case identifier, e.g. consumer_complaint_escalation |
title | yes | Display name |
objective | yes | The skill or judgment the simulation trains |
audience | no | Who it's for, e.g. "MBA / enterprise training" |
roles | no | List of participant roles, e.g. support_agent, manager |
version | no | Semver, defaults to 1.0.0 |
team_size | no | Default team size (integer, default 5) |
ai_chat_enabled | no | Whether participants get an AI chat assistant (default true) |
group_communication_allowed | no | Whether team members may talk to each other (default true) |
steps.yaml — one entry per step
| Field | Required | Meaning |
|---|---|---|
id | yes | Unique snake_case step id |
title | yes | Short step name |
actor_mode | yes | Who acts — see table below |
task_type | yes | Shape of the answer — see table below |
task_description | yes | What the participant is asked to do |
role | no | Which role performs this step |
depends_on | no | List of step ids that must complete first (defines the workflow DAG) |
ai_assist | no | What the AI may do: suggests · critiques · grades · decides |
grading | no | Grading rule block — see below |
Actor modes — the human decision boundary
| Mode | Who decides |
|---|---|
human | A person, working alone — no AI involvement |
human_with_ai | A person decides; AI assists per ai_assist |
team_with_ai | The team decides together; AI assists |
ai | The AI acts autonomously; humans see the output downstream |
Task types
| Type | The participant produces… |
|---|---|
multiple_choice | One choice from fixed options |
numeric_input | A number (checked against value/range/tolerance) |
structured_response | A structured answer, e.g. decision + justification fields |
open_response | Free-form writing |
document_review | A judgment on a provided document |
Grading rules
type | Requires | Use when |
|---|---|---|
answer_key | correct_answer, usually options and distractors, points | One objectively correct answer |
numeric | expected_value or expected_range, optional tolerance / formula | Calculations |
rubric | criteria list (each measurable) | Judgment quality scored by named criteria |
llm_judge | criteria and anchor_examples (good/bad answer examples) | Open responses graded by an LLM against anchors |
none | — | Ungraded steps (context-setting, handoffs) |
metadata.yaml & creator.yaml
metadata.yaml carries discovery info: domain,
industry, difficulty,
duration_minutes, team_size (min/max),
scoring_type, license, tags, and
learning_goals.
creator.yaml identifies you and states your royalty
preference: fixed_fee · revenue_share ·
per_run · open_source ·
enterprise_only.
Validation
Every pull request runs
scripts/validate_package.py
over all packages: schema conformance, step-id uniqueness,
depends_on references, and grading-rule completeness per
the decision tree above. Run it locally before opening a PR:
python scripts/validate_package.py templates/<your-slug>