Skip to content
docs
UseBuildChangelog
Open Lumin

Examples

career-fit

A coaching-facing report, never a hiring input. One person's chart in, a vocational-fit read, a quit-or-stay console, promotion-readiness prep and a study-track recommendation out, chosen by which mode the person picked.

Tool chain

run_pre_verdict_audit and get_boundary_warnings open the run as a chart-integrity gate, then analyze_natal_promise decides whether the chart promises a career at all. Nothing downstream may state a verdict before that returns. The domain layer is get_career_cusp_panel, get_career_signature, get_profession_description and get_occupation_matches; the mode question is get_job_vs_business_verdict; timing is get_promotion_verdict, get_job_change_timing and get_earned_income_panel; and get_career_blockage_diagnosis turns the houses the career cusp fails to reach into named consultation answers. get_d10_chart is Vedic Parashari, so it renders beside the KP verdict with its own chip and never inside it.

Two tools are deliberately absent

get_termination_risk is legitimate in a coached setting, but it is the one output in this family that can be used against someone, so a public example does not model it. run_career_complete_reading is the one-call composite alternative: it costs far fewer metered calls, and it cannot produce the separated five-rule panel that is the whole point of this app. The app README states both paths and their call counts.

Inputs

  • name, birth_date, birth_time, birth_time_known, location_name
  • mode: fit, quit-or-stay, promotion, or study-track, chosen by the user rather than inferred, so the tool chain is predictable
  • An optional free-text context field (current role, the decision in front of them), folded into the prompt but never sent as a hiring signal to any other system

Call it

typescript
const ALLOWED_TOOLS = [
  "run_pre_verdict_audit", "get_boundary_warnings",
  "analyze_natal_promise",
  "get_career_cusp_panel", "get_career_signature",
  "get_profession_description", "get_occupation_matches",
  "get_job_vs_business_verdict",
  "get_promotion_verdict", "get_job_change_timing", "get_earned_income_panel",
  "get_career_blockage_diagnosis",
  "get_d10_chart",   // Vedic Parashari, cross-system reference only
] as const;

const result = await runLumin({
  allowedTools: ALLOWED_TOOLS,
  system: buildSystemPrompt(),
  user: buildUserPrompt(input),
  maxTokens: 16000,
  effort: "xhigh",
  signal: req.signal,
});

const parsed = ensureShape(
  parseJsonBlock<CareerFitResponse>(result.text),
  validateShape,
);

The expanded path shown here runs roughly 14 to 18 calls, because analyze_natal_promise and get_occupation_matches are paged and the run walks their pages. run_career_complete_reading covers similar ground in far fewer calls, and the tradeoff is that the composite cannot report the five job-versus-business rules separately. That is a choice to make deliberately rather than by accident.

Response shape

json
{
  "resolved_profile": { "name": "Ishara", "latitude": 6.9271, "longitude": 79.8612, "utc_offset_minutes": 330 },
  "mode": "quit-or-stay",
  "vocational_fit": {
    "signature": "10th CSL star lord connected to 6th, service-oriented rather than independent business.",
    "top_matches": [
      { "occupation": "Software engineering", "note": "Mercury-Saturn signature, strong D10 backing." },
      { "occupation": "Technical writing", "note": "Mercury karaka, secondary fit." }
    ],
    "description": "..."
  },
  "should_i_quit": {
    "verdict": "hold, with a review window",
    "reasoning": [
      "get_job_vs_business_verdict: three of five sourced rules favour continued service, two are neutral.",
      "get_career_blockage_diagnosis: a temporary Saturn sub is the primary blocker, not a structural mismatch.",
      "get_earned_income_panel: pay movement is indicated before a change of employer."
    ],
    "timing_window": { "start": "2027-09-01", "end": "2028-02-15", "reason": "get_job_change_timing: next favourable sub-period." }
  },
  "promotion_readiness": null,
  "interview_window": null,
  "education_track": null,
  "disclaimer": "A coaching aid. Never a hiring or screening input, and never a substitute for the person's own judgment."
}

Screens

  • A birth-details form plus a mode selector: fit, quit-or-stay, promotion, study-track
  • A vocational-fit card listing qualitative matches, never a numeric fit score with no source
  • A quit-or-stay console showing each sourced rule's verdict as its own line, not blended into one recommendation
  • A promotion-readiness card with an interview-window suggestion, shown only in that mode
  • A study-track card, shown only in that mode

Why there is no numeric fit score

Every invented score on this platform carries a scale and a provenance label, and vocational fit is not one of the sourced ones. Rather than mint a 0-100 "fit score" with no citation behind it, the card reports the signature (which cusp, which sub lord, which connection) and lets the coach make the call. This mirrors the platform-wide rule against unlabelled scores.

The interesting engineering detail

get_job_vs_business_verdict reports five sourced rules independently rather than blending them into one recommendation, so a coach can see which rule is actually carrying the call. The response above is a direct rendering of that shape: three lines, each naming its own tool and its own verdict, rather than a single "you should stay" sentence with the reasoning hidden inside a paragraph. A UI that flattens this into one verdict string is throwing away the part of the tool that makes it defensible as a coaching product rather than a fortune-telling one.

Where to next