the roster

Four voices. Four personas. Sixteen agents.

These are the same agents we put in front of paying customers. The hosted Teams product gave you a pretty form to pick a voice + persona. The open-source package gives you the same picks as a TypeScript object — and the actual TwiML, the actual prompt, the actual outcome classifier we shipped.

The voices

Each voice is mapped to a Polly Neural or Google Wavenet voice in the underlying TwiML. You can substitute any Twilio-supported voice via voice_override in the agent config.

Sarah
female · warm · friendly

"Hey — I know cold calls are the worst, so I'll be quick…"

Best for: relationship-building, intro calls, trust-first verticals (financial services, healthcare, education).
Soft pacing. Lots of acknowledgment ("totally", "makes sense"). Lands the meeting at the end without it sounding like a close. Highest answer-rate of the four in our internal data.
Polly · Joanna-Neural  |  "voice": "female-warm"
James
male · professional · executive

"James from Crixin. Two minutes — looking at your Q3 spend on…"

Best for: B2B outreach to VPs, ops leaders, IT directors. Longer cycles, larger deals.
Tight, executive register. Wastes no airtime on small talk. Comfortable with silence on the line. The one to use when you need to sound like the person they'd be working with on the inside.
Polly · Matthew-Neural  |  "voice": "male-professional"
Mike
male · friendly · casual

"Hey, this is Mike — y'all open right now? Just had a quick…"

Best for: local SMB — restaurants, retail, trades, real estate, automotive.
Casual and disarming. Drops "y'all" and "real quick" without sounding fake. Great for calls that need to feel local, not corporate. Pairs well with the warm_intro persona.
Polly · Stephen-Neural  |  "voice": "male-friendly"
Emily
female · professional · structured

"This is Emily Chen — I'd like to schedule fifteen minutes regarding…"

Best for: enterprise — procurement, finance, compliance, government.
Composed, formal, structured. The voice for buyers who need procedure, not personality. High in-call retention with senior decision-makers.
Polly · Ruth-Neural  |  "voice": "female-professional"

The personas

A persona is a system prompt + a TwiML opening template + an outcome-prompt tuned to the persona's goal. The four below ship in the box. Define your own by exporting an AgentPersona from your config.

Standard

"persona": "standard"

Balanced. Professional and friendly. Asks discovery questions before any pitch. Use this when you don't have a strong opinion about which way the call should lean.

opens with: name + reason · closes on: discovery question

Closer

"persona": "closer"

Direct and persuasive. Drives toward commitment. Won't take "send me an email" as a final answer — pushes for a 15-minute slot on calendar. Use on warm leads or replays of inbound interest.

opens with: specific value claim · closes on: calendar slot

Warm Intro

"persona": "warm_intro"

Soft opener, builds rapport first. Apologizes for the cold call, lowers stakes, invites them to hang up. Counter-intuitively gets the highest "yes, send me info" rate of the four.

opens with: permission ask · closes on: email opt-in

Follow-Up Specialist

"persona": "follow_up"

Re-engages cold leads. Knows the prior context (last call outcome, last touch date). Opens with "we spoke about X — checking in." Use on leads in callback or stale not_interested states.

opens with: prior-context anchor · closes on: schedule next touch

Hire one in code.

Same shape as the hosted dashboard's "hire agent" form. Each agent gets a Twilio number provisioned in the area code you specify; subsequent calls and SMS go from that number sticky.

// agents/sarah.ts
import { hireAgent } from "crixin/voice";

const sarah = await hireAgent({
  name: "Sarah",
  voice: "female-warm",        // Polly.Joanna-Neural
  persona: "warm_intro",
  areaCode: "415",             // provisions a SF Twilio number
});

await sarah.placeCall({
  to: "+15555550100",
  prompt: "Calling about Q3 catering for tech offices in SoMa.",
  campaignId: "q3-tech-catering",
});

Or skip the wrapper entirely and call the underlying tools — see the API reference.