Luminus — Onboarding Extraction Eval

Prompt: onboarding_extract_v0.8  ·  Model: claude-sonnet-4-6  ·  Generated: 2026-04-17 11:39
Test cases
5
Average score
7.4 / 10
Pass rate (≥ 7)
80%
Show prompt — onboarding_extract_v0.8
# Onboarding Extraction Prompt — v0.8

Given an onboarding conversation transcript, extract the following fields as JSON.

## Output schema

```json
{
  "lens": "paul",
  "purpose": "one sentence describing why they came",
  "struggles": ["specific struggle 1", "specific struggle 2"],
  "tradition": "protestant"
}
```

## Field rules

### `lens`
One of `"paul"`, `"david"`, `"james"`, `"esther"`. Never null. Infer from what
the person gravitates toward — not just their topic but their relationship to it.

Distinguishing Paul vs Esther (the most common confusion):
- **Paul** — the struggle is *conceptual*. The person is wrestling with belief,
  doctrine, grace, or the inner life of faith. Their faith feels shaky at the
  level of ideas. They question what they believe.
- **Esther** — the struggle is *situated*. The person is navigating a concrete
  life decision, calling, or vocation where faith and real life don't connect.
  They know what they believe but can't feel it in their actual circumstances.
  Key signal: they mention a real-world decision (career, relationships, purpose)
  as the place where faith breaks down.

**Tiebreaker — Paul can involve a real-world decision too.** Ask: what came first?
- If the *faith framework* is what's falling apart and the real-world decision
  follows from that crisis → **Paul**.
  ("I'm not sure I believe what I'm preaching anymore... whether to leave ministry")
- If the *real-world situation* is what's falling apart and faith doesn't make
  sense of it → **Esther**.
  ("I left law because I felt called... but faith doesn't connect to my actual life now")

Distinguishing David vs others:
- **David** — raw emotion is the primary mode. Anger, grief, lament, unfiltered
  honesty before God. The person is not primarily questioning doctrine or seeking
  accountability — they are carrying something emotionally heavy and need permission
  to feel it before God.

Distinguishing James vs others:
- **James** — the gap between knowing and doing is the primary tension. They know
  what faith requires but consistently fail to live it. Habits, decisions, integrity,
  consistency. They want to be held accountable to action.

### `purpose`
One sentence in the **user's voice**.

Before writing this field: find the single best sentence the user said that
captures why they came. Copy it — or the core of it — directly. Do not paraphrase,
do not translate into your own language.

If no single sentence works, combine the fewest words possible from what they
actually said. The test: would the user recognize this as something they said?

**Bad (paraphrase):** "The user is wrestling with whether their faith is authentic."
**Good (near-quote):** "The framework I've built everything on feels shaky and I'm going through the motions."

### `struggles`
Array of specific struggles, situations, or people the user named.
Each item is a short phrase (3–8 words).

**What qualifies:**
- A named person ("conflict with business partner")
- A concrete situation ("leaving pastoral ministry") — include this even if it
  also appears in the purpose field. Decisions and situations are always their
  own struggle entries.
- A named decision ("leaving law to start a business")
- A named internal state they explicitly claimed ("anger at God", "ashamed of leading while hollow")

**Consolidation rule:** If two items describe the same situation from different
angles, keep only the most specific one. Do not list both cause and symptom.
Example: "avoiding conversation with partner" and "cutting corners on contract"
are the same situation — keep whichever is more specific to what the user named.

**What does NOT qualify — leave these out:**
- Abstract patterns the user used to summarize their own situation
  ("choosing comfort over conviction", "living a double life") — these are the
  user's own meta-language, not named struggles
- Feelings the user explicitly minimized or called manageable. If they said
  something was lighter than the main thing ("The guilt I can manage — the
  anger is heavier"), do not extract the minimized feeling as a struggle.
- Background context the user mentioned in passing — things that set the scene
  but were not framed as something they are wrestling with.
  Example: "Everyone in my life thinks it was a bad call" is context, not a struggle.
- Feelings or directions the user said they cannot name
  ("unnamed pull", "something I'm not ready to name") — if the user said they
  can't point at it, don't point at it for them
- Interpretive conclusions drawn from emotional tone — only extract what
  was explicitly named

**Pace rule — do not extract things the user was still approaching slowly:**

If Q5 was answered as "I'm not ready to name it yet" OR Q6 was answered as
"Honestly, but slowly," treat the conversation as one where the user set
a cautious pace.

In that context, if something surfaced with hedged language — "Maybe", "I think",
"I'm not sure", "I'm starting to wonder" — it is still being approached, not named.
Do NOT extract it as a struggle even though the user put words around it.

Example: User said Q6="Honestly, but slowly." Later said "Maybe. I think I'm afraid
that calling is something I invented to justify a decision I wanted to make anyway."
→ Do NOT extract the fear. The hedge + slow pace = still circling, not a named struggle.

If no concrete struggles were mentioned, return an empty array `[]`.

### `tradition`
Free text (e.g., "protestant", "catholic", "non-denominational", "Reformed").
**`null` if the user never explicitly mentioned a denomination or faith tradition.**
Do not infer or guess tradition from context. If they didn't say it, it's null.

## Rules

Return ONLY valid JSON. No markdown, no explanation, no prose.

## Transcript

{transcript}
Scenario Extraction output Criteria Strengths / Weaknesses Score Reasoning
Paul lens — theology-oriented user, explicit tradition, multiple struggles
```json
{
  "lens": "paul",
  "purpose": "The framework I've built everything on feels shaky and I'm going through the motions.",
  "struggles": [
    "leaving pastoral ministry",
    "not believing what he's preaching",
    "ashamed of leading while feeling hollow",
    "grace and justification not felt personally"
  ],
  "tradition": "Reformed"
}
```
JSON ✓
  • lens is 'paul' — user engages through theology, doctrine, grace, justification
  • purpose captures why they came in their own words — something about the hollow feeling, the performance, or the shaky framework
  • struggles includes the decision about leaving ministry
  • struggles includes the hollow feeling or performing faith
  • tradition is 'Reformed' or similar — user stated it explicitly
  • struggles are specific short phrases, not generic labels
  • Valid JSON with all four required keys present
  • lens is correctly identified as 'paul' — user engages through theological concepts (grace, justification, Reformed tradition)
  • tradition is correctly set to 'Reformed' — user explicitly stated this
  • struggles array contains the core decision mentioned: 'leaving pastoral ministry'
  • struggles includes specific, concrete items tied to named situations: 'ashamed of leading while feeling hollow', 'grace and justification not felt personally'
  • purpose captures the user's own language about the shaky framework and going through the motions
  • purpose phrasing is slightly paraphrased rather than maximally in user's voice — user said 'the framework I've built everything on feels shaky' and 'I'm going through the motions' but the output combines these without preserving the exact phrasing
  • struggles item 'not believing what he's preaching' is somewhat generic and overlaps with the more specific 'grace and justification not felt personally' — the user's actual concern was more nuanced (not lost faith, but can't feel it)
  • struggles item 'leaving pastoral ministry' is the decision being avoided, but the user's actual struggle is the doubt about whether to leave, not the act itself — minor semantic distinction but worth noting
8 The extraction meets all mandatory requirements: valid JSON, lens is one of the four allowed values, struggles is an array with no fabricated items, tradition is explicitly stated and not guessed, and purpose uses user language. The lens identification is sound because the user engages through theological frameworks (grace, justification, Reformed doctrine). The struggles are specific and tied to situations. However, the purpose could be more directly quoted, and one struggles item ('not believing what he's preaching') is slightly less specific than it could be. The output avoids the trap of fabricating abstract patterns as separate struggles. Overall, this is a strong extraction with minor refinement opportunities in voice fidelity.
David lens — raw emotional user, anger at God, no tradition mentioned
```json
{
  "lens": "david",
  "purpose": "I haven't let myself actually be angry at God because I was taught that was wrong, and I think holding it in is making everything worse.",
  "struggles": [
    "sister's death eight months ago",
    "stopped praying about it",
    "anger at God"
  ],
  "tradition": null
}
```
JSON ✓
  • lens is 'david' — user is in lament, raw emotion, real anger before God, Psalms-like honesty
  • purpose captures why they came — something about the anger, the grief, or finding a faith that can hold those things
  • struggles includes the death of their sister or grief
  • struggles includes the anger at God or stopped praying
  • tradition is null — user never mentioned a tradition
  • guilt is NOT extracted as a separate struggle — user explicitly said anger is heavier and guilt is manageable
  • lens is correctly identified as 'david' — user is in raw lament and anger before God
  • purpose uses the user's actual words from the transcript, capturing the core insight about holding anger in
  • struggles array includes the sister's death and anger at God, both explicitly named
  • tradition is correctly null — user never mentioned a denomination or faith tradition
  • guilt is not extracted as a separate struggle, respecting the user's own statement that anger is heavier
  • valid JSON structure with all required keys present
  • struggles phrasing could be more consistent — 'sister's death eight months ago' is longer and more specific than the other two items, which are more abstract
  • 'stopped praying about it' is somewhat vague; could be 'stopped praying after sister's death' to be more specific and tied to the named situation
  • struggles array could include 'guilt layered with anger' or similar, though the criteria explicitly says guilt should not be a separate entry, so this is actually correct as-is
9 The extraction correctly identifies the lens as 'david' based on the user's raw, honest anger at God and refusal to suppress grief — this is lament language. The purpose is pulled directly from the user's own words in the final statement, which is the strongest possible approach. The struggles array captures the two core issues: the sister's death (the precipitating loss) and the anger at God (the emotional core). The tradition is correctly null. The extraction respects the criteria's instruction not to extract guilt as a separate struggle. The only minor weakness is slight inconsistency in struggle phrasing specificity, but all items are grounded in the transcript and none are fabricated. The output meets all mandatory requirements.
James lens — action-oriented user, consistency struggles, tradition mentioned
```json
{
  "lens": "james",
  "purpose": "I've been choosing comfort over conviction for about two years and I don't know how to stop.",
  "struggles": [
    "avoiding conversation with business partner",
    "cutting corners on a contract",
    "phone replacing morning prayer"
  ],
  "tradition": "evangelical"
}
```
JSON ✓
  • lens is 'james' — user is focused on habits, action, daily decisions, living faith not just knowing it
  • purpose captures why they came — something about accountability, the gap between what they know and how they live
  • struggles includes the phone habit or morning routine
  • struggles includes the business partner situation or integrity compromise
  • tradition is 'evangelical' or similar — user stated it explicitly
  • choosing comfort over conviction is NOT a separate struggle — it is the user's own summary of the pattern, not a named situation
  • lens is correctly identified as 'james' — user is focused on the gap between knowing and doing, daily habits, living faith
  • purpose uses the user's own words directly from the transcript: 'I've been choosing comfort over conviction for about two years and I don't know how to stop'
  • tradition is correctly set to 'evangelical' — user stated this explicitly
  • struggles array is properly formatted as an array with three items
  • all struggle items are specific and tied to named situations (phone/morning routine, business partner/contract, integrity compromise)
  • struggles do not include abstract pattern language like 'living a double life' or 'choosing comfort over conviction' as separate entries
  • the purpose field, while accurate, could be strengthened by also capturing the accountability/accountability partner element that motivated them to seek help ('Someone who holds me to what I say')
  • struggle phrasing could be slightly more concise — 'cutting corners on a contract' and 'avoiding conversation with business partner' are somewhat redundant as they describe the same situation from different angles
9 The extraction meets all mandatory requirements: valid JSON with required keys, lens is one of the four allowed values, struggles is an array with no fabricated items, tradition is explicitly stated in the transcript, purpose uses the user's direct language, and struggle items are specific without including the user's own summary patterns. The lens correctly identifies James (action/living faith gap). The purpose captures the core reason for seeking help in the user's own voice. The struggles are all grounded in the transcript and avoid abstract pattern language. The tradition is accurate. Minor weaknesses exist in purpose completeness and struggle item redundancy, but these do not violate mandatory requirements.
Esther lens — vocation and identity, no tradition, purpose in user's voice
```json
{
  "lens": "esther",
  "purpose": "My faith is supposed to be the thing that makes sense of this but it doesn't anymore.",
  "struggles": [
    "left law to start own business",
    "church feels disconnected from actual life"
  ],
  "tradition": null
}
```
JSON ✓
  • lens is 'esther' — user is navigating calling, vocation, faith in ordinary decisions, identity
  • purpose captures their reason in their own words — something about the calling, the career decision, or faith that doesn't connect to real life
  • struggles includes leaving law or the startup or the career decision
  • struggles includes the disconnect between faith and real life
  • tradition is null — user never mentioned a denomination or tradition
  • the fear about inventing calling is NOT a separate struggle — it is the unnamed thing they are still approaching slowly
  • lens is correctly identified as 'esther' — user is navigating calling, vocation, and faith in the context of a major life decision
  • tradition is correctly null — user never mentioned a specific denomination or faith tradition
  • struggles array includes both required elements: the career decision (left law to start own business) and the faith-life disconnect (church feels disconnected from actual life)
  • valid JSON structure with all four required keys present
  • purpose uses the user's actual words from the transcript
  • purpose is a partial quote but lacks the full context of their struggle — it captures what faith is 'supposed' to do but misses the core tension that faith doesn't actually make sense of their situation anymore
  • struggles phrasing could be more precise: 'left law to start own business' is somewhat generic; 'eighteen months in and it's hard' or 'eighteen months into startup, questioning the calling' would be more specific to the actual situation
  • the purpose statement ends mid-thought and doesn't capture the deeper question emerging: whether calling itself is meaningful or invented
8 The extraction correctly identifies the lens and tradition, and includes the two required struggle elements. However, the purpose field, while using the user's words, is incomplete. The user's actual purpose/question is more complex: they came seeking depth and understanding about whether their calling was real or self-invented, and whether faith can guide actual decisions. The quoted purpose captures only one dimension. The struggles are correct in content but could be more specifically tied to the actual situation described (the 18-month timeline, the specific doubt about calling). The extraction avoids the critical error of listing the fear about inventing calling as a separate struggle — correctly treating it as the unnamed thing still being approached. Overall, this is a solid extraction with minor refinement needed in purpose framing and struggle specificity.
No struggles named, no tradition — must not fabricate either
```json
{
  "lens": "paul",
  "purpose": "The faith I grew up with isn't wrong exactly, but it's not big enough anymore.",
  "struggles": [
    "questions he couldn't ask five years ago now open",
    "outgrowing the container faith came in"
  ],
  "tradition": null
}
```
JSON ✓
  • struggles is an empty array — user named no specific situations, people, or concrete struggles
  • tradition is null — user never mentioned a denomination or tradition
  • lens is inferable — user gravitates toward questions, theology, the inner life of faith, likely 'paul'
  • purpose captures why they came in their own words — something about outgrowing the container, wanting to think harder, or the unnamed pull
  • Valid JSON with all four required keys present
  • lens value 'paul' is valid and well-inferred from user's focus on questions, theology, and inner spiritual life
  • tradition correctly set to null — user never mentioned a specific denomination or faith tradition
  • struggles is an array as required
  • purpose uses direct user language: 'The faith I grew up with isn't wrong exactly, but it's not big enough anymore' is a direct quote
  • struggles array contains two items that are abstract patterns rather than specific named situations or decisions: 'questions he couldn't have asked five years ago are open now' and 'outgrowing the container faith came in' are the user's own summary language, not concrete struggles
  • struggles should be empty array per criteria — user explicitly stated 'I can't point at a thing' and 'Honestly just a feeling' when asked about the unnamed thing, indicating no specific struggles were named
  • The two struggle entries violate the mandatory requirement that struggles items must be tied to 'named situations, people, or decisions' and that 'abstract patterns...are the user's own summary language and must NOT appear as separate struggle entries'
3 The output correctly identifies lens as 'paul' based on the user's gravitational pull toward theological questions and the inner life of faith. The tradition is correctly null. The purpose captures the user's own words effectively. However, the struggles array violates a mandatory requirement. The criteria explicitly states that when 'user named no specific situations, people, or concrete struggles,' struggles should be an empty array. The user said 'I can't point at a thing' and 'it's more like a direction I'm being pulled' — indicating no concrete struggles. The two items in the struggles array are abstract patterns from the user's own summary language ('outgrowing the container'), which the mandatory requirements explicitly forbid as separate struggle entries. This is a mandatory violation.