Challenge Styles Reference
A comprehensive reference for every challenge style, format, and difficulty level in the Eko challenge system.
Abbreviations
Style Abbreviations
| Abbreviation | Style Slug | Full Name |
|---|---|---|
| MC | multiple_choice | Multiple Choice |
| FTG | fill_the_gap | Fill the Gap |
| DQ | direct_question | Direct Question |
| RL | reverse_lookup | Reverse Lookup |
| FT | free_text | Free Text |
| PIR | progressive_image_reveal | Progressive Image Reveal |
| CV | conversational | Conversational |
Format Abbreviations
| Abbreviation | Format Slug | Full Name |
|---|---|---|
| BFO | big_fan_of | Big Fan Of |
| KAL | know_a_lot_about | Know A Lot About |
| RAM | repeat_after_me | Repeat After Me |
| GWD | good_with_dates | Good With Dates |
| DOS | degrees_of_separation | Degrees of Separation |
| UTW | used_to_work_there | Used to Work There |
| PP | partial_pictures | Partial Pictures |
| OG | originators | Originators |
Overview
Eko's challenge architecture has two layers:
| Layer | Purpose | Count | Examples |
|---|---|---|---|
| Styles | Presentation mechanics (how the challenge is rendered and answered) | 7 | multiple_choice, free_text, conversational |
| Formats | Experience wrappers (the themed personality around a challenge) | 8 | big_fan_of, originators, good_with_dates |
A format selects from a subset of eligible styles and layers on its own voice, knowledge type, and tone. A single fact can be challenged in many style + format combinations across 5 difficulty levels.
Generation modes:
- Pre-generated (5 styles): Content is created ahead of time by AI, stored in
fact_challenge_content, and served instantly. - Runtime (2 styles): Content is generated live during the user session via multi-turn AI dialogue.
Challenge Styles (7)
multiple_choice
| Property | Value |
|---|---|
| Generation | Pre-generated |
| Voice register | Option curator |
| Personality | Presents 4 curated options where each feels plausible while one clearly fits when you know the answer. Frames the selection as a commitment. |
How it works: The user sees a setup narrative, a conversational question, and 4 options. Exactly 1 option is correct. Distractors are plausible and in the same category as the correct answer.
style_data schema:
{
"options": [
{ "text": "Option A", "is_correct": false },
{ "text": "Option B", "is_correct": true },
{ "text": "Option C", "is_correct": false },
{ "text": "Option D", "is_correct": false }
]
}
- Exactly 4 options, exactly 1 with
is_correct: true - No "N/A", "None of the above", "All of the above", or "Unknown"
- Correct answer position varies
Example phrasings:
- "Take a look at these options -- which one do you think it is?"
- "One of these is the real answer. Can you spot it?"
- "Here's the lineup -- do you know which one fits?"
- "Four possibilities, one truth. What do you think?"
Reveal tone:
- Correct: Validates reasoning, acknowledges why other options were tempting
- Wrong: Shows why the correct option fits better, connects the distinction to a memorable detail
Emphasis: Lean into the fun of weighing options and committing to a choice. Pull back from clinical "which of the following" quiz-show phrasing.
Used by formats: Big Fan Of (default), Know A Lot About, Repeat After Me, Good With Dates, Used to Work There (default), Partial Pictures, Originators
fill_the_gap
| Property | Value |
|---|---|
| Generation | Pre-generated |
| Voice register | Puzzle architect |
| Personality | Presents an incomplete statement and invites the reader to supply the missing piece. Positions the blank at the most meaningful word. |
Note: This style absorbed the former
statement_blankstyle (migration 0160). SB was mechanically identical ("fill a blank" pattern) and its best voice prefixes were merged into FTG's pool for variety.
How it works: The user sees a statement with a ___ gap. They type the missing word or phrase. The gap should feel like a puzzle piece that clicks satisfyingly into place.
style_data schema:
{
"complete_text": "The Eiffel Tower was built in 1889",
"answer": "1889",
"acceptable_answers": ["1889", "eighteen eighty-nine"]
}
complete_text(required): Full sentence with the answer filled inanswer(required): The blanked word/phraseacceptable_answers(optional): Alternative phrasings accepted as correct
Example phrasings:
- "There's a piece missing here. Can you fill it in?"
- "This story has a gap -- do you know what completes it?"
- "One detail is missing. Can you finish what's started?"
- "The sentence needs you -- can you complete it?"
Reveal tone:
- Correct: Celebrates the perfect fit, shows how the missing piece completes the whole picture
- Wrong: Shows how the piece fits with narrative context
Emphasis: Lean into the satisfaction of completing something. Pull back from sterile "fill in the blank" worksheet energy.
Used by formats: Repeat After Me (default)
direct_question
| Property | Value |
|---|---|
| Generation | Pre-generated |
| Voice register | Focused questioner |
| Personality | Poses a single, focused question and creates space for the reader to recall or reason their way to the answer. No safety net -- no options to choose from. |
How it works: The user reads the setup, then answers a single direct question with no options or hints. The setup must do heavy lifting since there are no cues.
style_data schema:
{
"expected_answer": "The Mariana Trench",
"acceptable_answers": ["Mariana Trench", "Challenger Deep"],
"answer_type": "name"
}
expected_answer(required): Concise answer stringacceptable_answers(optional): Alternative phrasingsanswer_type(optional): Expected format ("number","name","date","phrase")
Example phrasings:
- "But here is the question -- do you know the answer?"
- "So here is what I want to know -- can you tell me?"
- "Okay, this is the real test -- do you know?"
- "Here is what stumps most people -- what's your answer?"
Reveal tone:
- Correct: Rewards recall with a detail that goes beyond the answer
- Wrong: Delivers the answer as a discovery with a memorable detail
Emphasis: Lean into the satisfaction of knowing something from memory. Pull back from flat "what is X?" textbook interrogation.
Used by formats: Good With Dates (default)
reverse_lookup
| Property | Value |
|---|---|
| Generation | Pre-generated |
| Voice register | Clue arranger |
| Personality | Lays out a trail of clues and asks the reader to deduce the identity of something. The setup IS the challenge -- each sentence is a progressively narrower clue. |
How it works: The setup provides a series of clues that get increasingly specific. The user must deduce the identity of the described thing (a person, place, event, or concept) from those clues alone.
style_data schema:
{
"answer": "The Eiffel Tower",
"key_identifiers": ["iron structure", "Paris", "1889", "temporary"],
"category": "place"
}
answer(required): The thing being describedkey_identifiers(optional): Most distinctive clues from the descriptioncategory(optional): Type of thing ("person","place","event","concept")
Note: This style always needs a dedicated image (never inherits the fact's entity image) to avoid spoiling the answer.
Example phrasings:
- "From the clues above, can you figure out what is being described?"
- "All the clues point to one answer. Do you know what it is?"
- "The mystery has been laid out -- can you solve it?"
- "Based on these details, what do you think this is?"
Reveal tone:
- Correct: Celebrates the deduction, traces back through the clues
- Wrong: Unmasks the answer dramatically, highlights the key identifier
Emphasis: Lean into the thrill of deduction and the "aha" moment. Pull back from flat "what is being described?" without mystery energy.
Used by formats: Used to Work There, Originators (default)
free_text
| Property | Value |
|---|---|
| Generation | Pre-generated |
| Voice register | Reflective questioner |
| Personality | Poses open-ended questions that push beyond recall into reasoning, analysis, or opinion. No single correct answer -- invites multiple valid perspectives. |
How it works: The user reads the setup and responds in their own words. Scoring evaluates key concepts covered, reasoning quality, and depth. The correct_answer is an expanded 4-8 sentence narrative.
style_data schema:
{
"key_concepts": ["cultural significance", "engineering innovation", "tourism impact"],
"sample_answer": "The Eiffel Tower represents...",
"scoring_guidance": "Full credit for mentioning engineering + cultural impact. Partial for surface-level observations."
}
key_concepts(required): Non-empty array of concepts a strong answer should touch onsample_answer(required): Well-written example responsescoring_guidance(optional): Notes on what merits partial vs full credit
Example phrasings:
- "In your own words -- how would you explain this?"
- "What do you think is the most important takeaway here?"
- "How would you describe this to someone who has never heard of it?"
- "Here's a question for you -- why do you think this matters?"
Reveal tone:
- Correct: Acknowledges their insight, highlights what made their perspective strong, adds a complementary angle
- Wrong: Gently redirects by sharing the key insight as a discovery
Emphasis: Lean into the value of personal perspective and original expression. Pull back from recall-style "name the X" questions disguised as open-ended.
Used by formats: Big Fan Of, Know A Lot About (default), Good With Dates, Degrees of Separation, Used to Work There, Originators
progressive_image_reveal
| Property | Value |
|---|---|
| Generation | Runtime |
| Voice register | Visual puzzle-master (via partial_pictures format) |
| Personality | Reveals images progressively, from heavily obscured to fully visible, challenging users to identify the subject as early as possible. |
How it works: An image is progressively unblurred or revealed in stages. The user guesses the subject at each stage. Earlier correct guesses earn more points. This style is generated at runtime (CC-003) and does not have pre-generated content in fact_challenge_content.
style_data schema: N/A (runtime-generated)
Used by formats: Partial Pictures (default)
conversational
| Property | Value |
|---|---|
| Generation | Runtime |
| Voice register | Varies by format |
| Personality | Multi-turn AI dialogue where the challenge unfolds through back-and-forth conversation. Each turn scores the user's response and presents the next question. |
How it works: The user enters a multi-turn conversation with an AI host. Each turn is scored 0.0-1.0. The AI adapts questions based on previous answers, progressively increasing difficulty. Sessions have a defined number of turns (typically 3-5). Generated at runtime (CC-003) via processConversationalTurn().
style_data schema: N/A (runtime-generated)
Supported format-specific prompts exist for: big_fan_of, know_a_lot_about, degrees_of_separation. All other formats fall back to a generic quiz-host prompt.
Used by formats: Big Fan Of, Know A Lot About, Degrees of Separation (default)
Challenge Formats (8)
big_fan_of -- Big Fan Of
| Property | Value |
|---|---|
| Display name | Big Fan Of |
| Tagline | Show your fandom |
| Knowledge type | fandom |
| Tone | Light |
| Conversational | Yes |
| Long-form | No |
| Icon | heart |
| Color | #ef4444 (red) |
| Pairs with | know_a_lot_about |
Description: Prove how well you know the things you love -- sports teams, bands, shows, and more.
Supported styles: multiple_choice (default), free_text, conversational
Voice personality: Enthusiastic superfan. Energy of two fans meeting at a convention. Celebratory and insider-coded -- assumes the person loves the topic as much as you do.
Energy: High-warmth, celebratory.
Topic categories: sports, entertainment, people, places, food-beverage, cooking, animals, travel, tv, fashion, games, music, movies
know_a_lot_about -- Know A Lot About
| Property | Value |
|---|---|
| Display name | Know A Lot About |
| Tagline | Deep knowledge flex |
| Knowledge type | skill |
| Tone | Standard |
| Conversational | Yes |
| Long-form | No |
| Icon | brain |
| Color | #8b5cf6 (purple) |
| Pairs with | big_fan_of |
Description: Test your expertise on topics you claim to know inside and out -- science, history, tech, and beyond.
Supported styles: free_text (default), multiple_choice, conversational
Voice personality: Meticulous expert. Confident, authoritative -- energy of a specialist testing a colleague. Respects the person as someone who takes the domain seriously.
Energy: Confident, authoritative.
Topic categories: science, history, geography, technology, how-things-work, math, spelling-grammar, geology, architecture, business, finance
repeat_after_me -- Repeat After Me
| Property | Value |
|---|---|
| Display name | Repeat After Me |
| Tagline | Complete the phrase |
| Knowledge type | memory |
| Tone | Light |
| Conversational | No |
| Long-form | No |
| Icon | quote |
| Color | #f59e0b (amber) |
Description: Fill in famous quotes, song lyrics, and well-known phrases from memory.
Supported styles: fill_the_gap (default), multiple_choice
Voice personality: Nostalgic completionist. Playful, warm -- the energy of finishing someone else's sentence because you both know it.
Energy: Playful, warm.
Topic categories: quotes, music, movies, history, culture, spelling-grammar, publishing
good_with_dates -- Good With Dates
| Property | Value |
|---|---|
| Display name | Good With Dates |
| Tagline | When did it happen? |
| Knowledge type | temporal |
| Tone | Standard |
| Conversational | No |
| Long-form | No |
| Icon | calendar |
| Color | #3b82f6 (blue) |
Description: Pin events, discoveries, and milestones to the right date or era.
Supported styles: direct_question (default), multiple_choice, free_text
Voice personality: Timeline detective. Precise yet wonder-filled -- dates are not just numbers, they are anchors in a larger story.
Energy: Precise, investigative.
Topic categories: history, current-events, sports, science, culture, events
degrees_of_separation -- Degrees of Separation
| Property | Value |
|---|---|
| Display name | Degrees of Separation |
| Tagline | Connect the dots |
| Knowledge type | association |
| Tone | Standard |
| Conversational | Yes |
| Long-form | Yes |
| Icon | git-branch |
| Color | #10b981 (emerald) |
Description: Trace surprising links between people, places, and events through conversational back-and-forth.
Supported styles: conversational (default), free_text
Voice personality: Connection-chaser. Curious, conspiratorial -- the energy of "wait until you hear how these are connected." Sees hidden links between seemingly unrelated things.
Energy: Curious, conspiratorial.
Topic categories: people, entertainment, culture, history, music, movies, sports
used_to_work_there -- Used to Work There
| Property | Value |
|---|---|
| Display name | Used to Work There |
| Tagline | Match the career |
| Knowledge type | career |
| Tone | Standard |
| Conversational | No |
| Long-form | No |
| Icon | briefcase |
| Color | #6366f1 (indigo) |
Description: Link notable people to the companies, teams, or institutions where they made their mark.
Supported styles: multiple_choice (default), reverse_lookup, free_text
Voice personality: Insider narrator. Revelatory, knowing -- the energy of sharing a "not many people know this" career detail.
Energy: Revelatory, knowing.
Topic categories: business, people, entertainment, technology, sports
partial_pictures -- Partial Pictures
| Property | Value |
|---|---|
| Display name | Partial Pictures |
| Tagline | What are you looking at? |
| Knowledge type | visual |
| Tone | Light |
| Conversational | No |
| Long-form | No |
| Icon | image |
| Color | #ec4899 (pink) |
Description: Identify places, animals, and landmarks from progressively revealed images.
Supported styles: progressive_image_reveal (default), multiple_choice
Voice personality: Visual puzzle-master. Teasing, deductive -- the energy of a slow reveal where each clue narrows the field.
Energy: Teasing, deductive.
Topic categories: geography, animals, art, architecture, places, nature, countries, space
originators -- Originators
| Property | Value |
|---|---|
| Display name | Originators |
| Tagline | Who made it first? |
| Knowledge type | creator |
| Tone | Rigorous |
| Conversational | No |
| Long-form | No |
| Icon | lightbulb |
| Color | #f97316 (orange) |
Description: Match inventions, artworks, theories, and cultural milestones to their original creators.
Supported styles: reverse_lookup (default), multiple_choice, free_text
Voice personality: Origin historian. Reverential, precise -- the energy of "let me tell you who did it first, and why it mattered."
Energy: Reverential, precise.
Topic categories: science, art, technology, culture, music, history, publishing, design
Difficulty Levels (5)
| Level | Label | Description | Guidance |
|---|---|---|---|
| 1 | Easy | Direct recall of the most prominent fact | Target the most well-known aspect. Generous context in setup. Correct answer clearly distinguishable. |
| 2 | Medium | Recall with some contextual reasoning | Target a secondary detail requiring careful reading. Plausible but distinguishable distractors. |
| 3 | Hard | Requires connecting multiple pieces of information | Synthesize two or more pieces of information. All distractors highly plausible. |
| 4 | Expert | Deep knowledge or cross-domain reasoning required | Target obscure details. Shorter setup assumes strong background. Specialized knowledge needed. |
| 5 | Master | Expert synthesis across multiple facts or domains | Challenges even subject matter experts. Near-miss distractors. Requires evaluation or prediction. |
Style-to-Format Matrix
Which styles are available in which formats. Bold = default style for that format.
| Format | multiple_choice | fill_the_gap | direct_question | reverse_lookup | free_text | progressive_image_reveal | conversational |
|---|---|---|---|---|---|---|---|
| Big Fan Of | default | yes | yes | ||||
| Know A Lot About | yes | default | yes | ||||
| Repeat After Me | yes | default | |||||
| Good With Dates | yes | default | yes | ||||
| Degrees of Separation | yes | default | |||||
| Used to Work There | default | yes | yes | ||||
| Partial Pictures | yes | default | |||||
| Originators | yes | default | yes |
Source Files
| File | What it defines |
|---|---|
packages/shared/src/schemas.ts | ChallengeStyleSchema (7 styles), ChallengeFormatSlugSchema (8 formats), KnowledgeTypeSchema |
packages/ai/src/challenge-content-rules.ts | ChallengeStyle type (5 pre-gen), ChallengeFormatSlug type, validation rules |
packages/ai/src/config/challenge-style-rules.ts | Per-style setup/challenge/reveal/correct_answer guidance + style_data schemas |
packages/ai/src/config/challenge-style-voices.ts | Per-style voice personality, register, example phrasings |
packages/ai/src/config/challenge-format-voices.ts | Per-format voice personality, register, energy |
packages/ai/src/config/challenge-format-rules.ts | Per-format refinements for all text fields |
packages/ai/src/config/challenge-difficulty.ts | 5 difficulty level definitions |
packages/ai/src/conversational-challenge.ts | Runtime conversational style logic and format-specific prompts |
supabase/migrations/0105_challenge_formats.sql | DB enums for challenge_style and challenge_format_slug |
supabase/migrations/0108_seed_challenge_formats.sql | Format seed data (display names, taglines, style mappings, topic mappings) |