Athos Developer Docs
Reference

Drills

The roleplay scenarios, difficulty levels, and persona filters.

A drill is the scenario your rep practices. You pass its key as drillKey to AthosRoleplay.create({ drillKey }). An unknown key returns DRILL_NOT_FOUND.

Available drills

Keys are <line>-<practice>: ma Medicare Advantage, ms Medicare Supplement, fe Final Expense, u65 under-65 private health, hi Hospital Indemnity, ci Critical Illness.

Medicare Advantage

drillKeyScenario
ma-full-saleFull enrollment. A complete Medicare Advantage enrollment call, intro to close. Scored for skill and for CMS compliance — see complianceScorecard.
ma-t65Turning 65. Enroll a beneficiary going onto Medicare for the first time — they have never had a plan and will ask the rep to explain everything. Same enrollment ground and compliance scoring as ma-full-sale.
ma-objection-handlingObjection handling. Handle live Medicare Advantage objections from a prospect.
ma-needs-analysisNeeds analysis. Conduct a full needs analysis with a Medicare Advantage prospect.
ma-plan-presentationPlan presentation. Present a plan to a Medicare Advantage prospect.
ma-sep-huntingSEP hunting. Identify a valid Special Enrollment Period with a Medicare prospect.
ma-hhcHome Health Care — full sale. The whole call: take a vague inbound enquiry, uncover the need, and enroll the beneficiary in home health care.
ma-hhc-downsellHome Health Care — downsell. Pivot to home health care when there is no Medicare Advantage sale to be made. Starts mid-call.
ma-hhc-crosssellHome Health Care — cross-sell. The MA application is submitted and the client thinks the call is over; open a separate home-health policy without it sounding like part of the plan just enrolled. Starts mid-call.
ma-hhc-upsellHome Health Care — upsell. Create an opening on a routine check-in with a happy client who has no reason to buy anything. Starts mid-call.

Medicare Supplement

drillKeyScenario
ms-full-saleFull sale. Shop a beneficiary's current Medigap plan against other carriers.

Final Expense

drillKeyScenario
fe-full-saleFull sale. A complete final-expense pitch call, intro to close.
fe-objection-handlingObjection handling. Field Final-Expense-specific objections at the payment, underwriting and decision-maker stages.
fe-closingClosing. The closing half of a Final Expense sale — price bracketing, waiting-period explanation, SSN/bank collection, and verification recovery. Starts mid-call: the prospect has been through the intro and health questions and asks to hear the plans and prices.

Under-65 private health

drillKeyScenario
u65-full-saleFull sale. Sell private health insurance to an under-65 client.

Hospital Indemnity

drillKeyScenario
hi-downsellDownsell. Pivot to hospital indemnity when there is no Medicare Advantage sale to be made.
hi-upsellUpsell. Cross-sell hospital indemnity during a routine check-in or retention call.
hi-crosssellCross-sell. Introduce hospital indemnity while walking a client through their new Medicare Advantage plan.

Critical Illness

drillKeyScenario
ci-downsellDownsell. Pivot to a critical illness plan when there is no Medicare Advantage sale to be made.
ci-upsellUpsell. Cross-sell critical illness coverage during a routine check-in or retention call.
ci-crosssellCross-sell. Introduce critical illness coverage while walking a client through their new Medicare Advantage plan.

The catalog is append-only: keys are never renamed or removed, and a newly added key works without an SDK upgrade.

Four drills start mid-call. fe-closing, ma-hhc-downsell, ma-hhc-crosssell and ma-hhc-upsell open with the persona already at the moment the scenario is about — its first line is a reaction to what has just happened, not a greeting. Tell the rep the setup before they connect; the persona will not explain it.

Typed keys in the SDK (opt-in)

drillKey accepts any string, so newly added drills work without an SDK upgrade. For editor autocomplete and compile-time checking, the SDK exports the known catalog — use it where your keys are static, or render a scenario picker from the runtime list:

import { ATHOS_DRILL_KEYS, type AthosDrillKey } from '@useathos/sdk';

ATHOS_DRILL_KEYS.forEach((key) => addOption(key)); // ['ma-full-sale', 'ma-t65', …, 'ci-crosssell']
const drillKey: AthosDrillKey = 'fe-closing';      // opt-in compile-time check

Difficulty

Pass difficulty to set how challenging the persona is:

ValueBehavior
BeginnerMore cooperative persona, simpler objections.
AdvancedStandard difficulty. Default when difficulty is omitted.
EliteTougher persona, harder objections.
AthosRoleplay.create({ token, drillKey: 'ma-full-sale', difficulty: 'Elite' });

Persona filters

filters narrows which persona is chosen. It is best-effort: state is honored whenever a persona in that state is available for the drill, and when none is, Athos serves an unfiltered persona instead of failing the call.

FilterEffect
statePrefer a persona located in a given US state (e.g. "CA"). Dropped when the drill has no persona in that state.
categoryReserved for future use; accepted but not applied in v1.
AthosRoleplay.create({
  token,
  drillKey: 'ma-full-sale',
  filters: { state: 'CA' },
});

A filter never fails a call — at worst it is ignored. A drill whose persona pool is entirely unavailable is a different situation: the session returns SERVICE_UNAVAILABLE (503), which is temporary, not a filter error. It does consume the session token, so recover by minting a new token rather than replaying the same request. If you need hard guarantees about which personas are available, talk to your Athos contact.

On this page