Luminus — Onboarding Extraction Eval

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

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.

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**. Use their actual words where possible.
Do not rephrase into generic language or analysis.

### `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")

**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 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
- Anything the user was still approaching cautiously. If the intake showed
  Q5 answered as "I'm not ready to name it yet" or Q6 as "Honestly, but slowly"
  and the thing surfaced in conversation was still unnamed or uncertain, do not
  extract it as a struggle. Respect the pace the user set.
- Interpretive conclusions drawn from emotional tone — only extract what
  was explicitly named

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": "I need a thinking partner for the hard questions because the framework I've built everything on feels shaky and I'm not sure I believe what I'm preaching anymore.",
  "struggles": [
    "decision to leave pastoral ministry",
    "faith framework feeling shaky",
    "grace and justification not felt personally",
    "ashamed of leading while hollow",
    "congregation trust feeling undeserved"
  ],
  "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
  • lens is correctly identified as 'paul' — user engages through theological concepts (grace, justification, Reformed tradition, framework)
  • tradition is correctly set to 'Reformed' — user explicitly stated 'I was Reformed from the beginning, still am in tradition'
  • struggles array is present and formatted correctly
  • struggles includes the core decision: 'decision to leave pastoral ministry'
  • struggles captures the hollow/performing dimension: 'ashamed of leading while hollow' and 'congregation trust feeling undeserved'
  • struggles are mostly specific short phrases tied to named situations
  • purpose references the user's actual language: 'thinking partner for the hard questions' and 'framework I've built everything on feels shaky'
  • purpose could be more directly in user's voice — it combines intake language with transcript language but doesn't fully capture the user's own phrasing about the hollow feeling or performance
  • struggles includes 'grace and justification not felt personally' which is somewhat generic/abstract rather than a specific short phrase tied to a concrete situation
  • struggles includes 'faith framework feeling shaky' which overlaps significantly with purpose and is somewhat abstract as a struggle entry
  • the struggles list could be tightened — some entries are close to paraphrasing rather than using user's direct language or specific situations
8 The output passes all mandatory requirements: valid JSON with correct keys, lens is exactly 'paul', struggles is a non-empty array with no fabricated items, tradition is 'Reformed' (explicitly stated), and purpose uses user's actual words from both intake and transcript. The lens is correct because the user engages through theological doctrine and grace. The tradition is correct and not guessed. However, the purpose could more directly reflect the user's own voice about the hollow feeling and performance aspect. The struggles are legitimate and tied to the transcript, but a few entries ('grace and justification not felt personally', 'faith framework feeling shaky') are somewhat abstract or overlapping with purpose rather than being concrete struggle phrases. The extraction is substantially correct but has minor refinement opportunities in voice and specificity.
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, and I think holding it in is making everything worse.",
  "struggles": [
    "sister died eight months ago at 34",
    "stopped praying after her death",
    "anger at God",
    "guilt for being angry",
    "going through the motions of faith"
  ],
  "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
  • tradition is correctly null — user never mentioned a denomination or faith tradition
  • struggles array includes the sister's death and anger at God as required
  • guilt is NOT extracted as a separate struggle item, respecting the user's explicit statement that anger is heavier
  • valid JSON with all four required keys present
  • struggles items are specific and tied to named situations (sister's death, stopped praying, anger at God)
  • struggles array includes 'guilt for being angry' as a separate item, which contradicts the criteria that guilt should NOT be extracted as a separate struggle since the user explicitly said anger is heavier and guilt is manageable
  • struggles phrasing 'going through the motions of faith' is somewhat generic; could be more specific like 'attending church without genuine prayer'
5 The extraction correctly identifies the lens as 'david' and captures the core purpose in the user's own voice. The tradition is appropriately null. However, there is one clear violation of the mandatory criteria: the extraction includes 'guilt for being angry' as a separate struggle item. The criteria explicitly states 'guilt is NOT extracted as a separate struggle — user explicitly said anger is heavier and guilt is manageable.' The user said 'The anger. The guilt I can manage.' This means guilt should not appear as its own struggle entry. The presence of this item violates the mandatory requirement that struggles must not fabricate or misrepresent what the user emphasized. The other struggles are appropriate and specific. This violation prevents a score above 6.
James lens — action-oriented user, consistency struggles, tradition mentioned
```json
{
  "lens": "james",
  "purpose": "I need someone who holds me to what I say, because I know all the right answers — I just don't live them.",
  "struggles": [
    "morning phone habit instead of prayer",
    "avoiding conflict with business partner",
    "cutting corners on a contract"
  ],
  "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' — the user is focused on the gap between knowing and doing, habits, daily decisions, and living out convictions
  • purpose captures the user's own words and the core reason they came: accountability and the knowing-doing gap
  • struggles array includes both named situations: the phone/morning routine habit and the business partner integrity compromise
  • tradition is correctly set to 'evangelical' — explicitly stated by the user
  • valid JSON with all four required keys present
  • struggles are specific and tied to named situations, not abstract patterns
  • struggles array includes 'cutting corners on a contract' as a separate item when it is already captured by 'avoiding conflict with business partner' — this is minor redundancy but the contract detail is implicit in the business partner situation
  • the struggles phrasing could be slightly more concise (e.g., 'cutting corners on a contract' is 4 words but somewhat specific; 'avoiding conflict with business partner' is 4 words and clearer)
9 The extraction correctly identifies the lens as 'james' because the user's core issue is the gap between knowledge and action, daily habits, and living out stated values. The purpose is directly quoted from the user's own words about needing accountability. The struggles array correctly includes the two named situations (phone habit and business partner conflict) without fabricating abstract patterns like 'choosing comfort over conviction' or 'living a double life' — these are the user's own summary language, not separate struggles. The tradition is correctly identified as 'evangelical' from explicit user statement. All mandatory requirements are met: valid JSON, correct lens value, struggles as array with no fabrication, tradition not guessed, purpose in user's voice, and struggles are specific phrases tied to named situations. The output is accurate and complete.
Esther lens — vocation and identity, no tradition, purpose in user's voice
```json
{
  "lens": "esther",
  "purpose": "I felt called to leave law and start something, but eighteen months in it's hard and I'm wondering if I heard wrong — and now my faith doesn't make sense of my actual life anymore.",
  "struggles": [
    "leaving law to start a business",
    "fear of having invented the calling",
    "everyone in his life opposing the decision",
    "church feeling disconnected from real 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 an ordinary decision
  • tradition is correctly null — user never mentioned a denomination or faith tradition
  • struggles array is valid and includes the career decision and faith/life disconnect
  • JSON structure is valid with all required keys present
  • purpose is not sufficiently in the user's own voice — it paraphrases rather than using their actual words; the user said 'I felt called to do it — genuinely' and 'My faith is supposed to be the thing that makes sense of this but it doesn't anymore' but the output generalizes these
  • struggles includes 'fear of having invented the calling' as a separate item, but the criteria explicitly states this is the unnamed thing they are still approaching slowly and should NOT be a separate struggle entry
  • struggles includes 'everyone in his life opposing the decision' which uses 'his' (wrong pronoun — user is 'you') and is a minor detail compared to the core struggles
  • struggles phrasing is inconsistent — some items are specific situations ('leaving law to start a business') while others are more abstract ('fear of having invented the calling')
5 The output correctly identifies the lens and tradition, and the JSON is valid. However, it violates a mandatory requirement by including 'fear of having invented the calling' as a separate struggle when the criteria explicitly states this is the unnamed thing being approached slowly and must NOT appear as a separate struggle entry. Additionally, the purpose field should use more of the user's actual language rather than paraphrasing. The pronoun error ('his' instead of 'you') is a minor issue but indicates careless extraction.
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 — I want to think harder about things I was told not to question.",
  "struggles": [
    "faith container feeling too small",
    "questions he couldn't ask five years ago"
  ],
  "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 the user's focus on questions, theology, and intellectual faith exploration
  • tradition correctly set to null — user never mentioned a specific denomination or tradition
  • purpose uses direct user language: 'The faith I grew up with isn't wrong exactly, but it's not big enough anymore' and 'I want to think harder about things I was told not to question' are verbatim from transcript
  • struggles array contains only items explicitly mentioned in the transcript
  • struggles array is not empty despite criteria stating 'struggles is an empty array — user named no specific situations, people, or concrete struggles'. The user explicitly said 'I can't point at a thing' and 'Honestly just a feeling' when asked about the unnamed thing. The two items listed ('faith container feeling too small' and 'questions he couldn't ask five years ago') are abstract patterns and observations, not specific named struggles tied to situations, people, or decisions
  • The struggles items violate the mandatory requirement: 'struggles items must be specific short phrases (3–8 words) tied to named situations, people, or decisions. Abstract patterns...must NOT appear as separate struggle entries.' Both items are abstract patterns the user described, not concrete struggles
4 The output correctly identifies lens and tradition, and the purpose statement authentically captures the user's own words. However, the struggles array violates both the specific criteria for this test case and the mandatory requirements. The criteria explicitly state that struggles should be an empty array because the user named no specific situations, people, or concrete struggles — only abstract observations about their spiritual state. The two items in the struggles array are precisely the kind of abstract patterns that the mandatory requirements forbid as separate entries. The user's actual struggle is unnamed and directional ('a direction I'm being pulled'), not the conceptual observations about faith containers or past questions.