What a worked example gives you
Each example below is a complete agent shape: identity, guardrails, welcome line, tasks, and post-call fields. The point is not the wording. The point is why the pieces fit together for that job, and what breaks if you change one without changing the others.
Most of these exist as templates. Sidebar → Create New Finn → Browse Templates → Use this template. Cloning is done in the dashboard, not through the API. After cloning, edit identity, knowledge base, and post-call fields before you test.
Inbound receptionist
The job is answering every call, booking into a calendar, and escalating the calls that need a human.
| Piece | Value |
|---|---|
| Voice | Maya (warm, mid-pitch, conversational pacing) |
| Identity | Receptionist at a named business, books and reschedules, answers hours and insurance questions, transfers urgent calls |
| Guardrails | Short sentences, mirror caller pace, no medical or legal or financial advice, no price quotes, transfer on emergency |
| Welcome | Defined, not dynamic: Hi, this is Maya at [Business Name]. How can I help you today? |
| Tasks | Book Calendar, Transfer Call |
| Post-call fields | intent, appointment_booked, appointment_type, transferred, caller_sentiment, follow_up_needed, follow_up_reason |
Why it is shaped this way: an inbound caller has already decided to call, so the agent spends no turns on permission or framing. The guardrails are all subtraction. Everything the practice does not want said out loud (prices, advice) is named explicitly, because a model that has a services document in its knowledge base will otherwise answer a pricing question from it.
The transfer conditions matter more than the transfer target. Set them to: caller asks for a human, caller mentions an emergency, or the agent has failed across two to three exchanges. Without that third condition the agent loops on questions it cannot answer and the caller hangs up angry.
What goes wrong: the knowledge base is too big. A 50-page office manual retrieves worse than a one-page services list. Keep each file focused. See /docs/agents-knowledge-base and /docs/tools-transfer.
Outbound sales qualifier
The job is confirming a form-fill lead is a fit, gathering qualifying details, and booking a meeting with a human rep.
| Piece | Value |
|---|---|
| Voice | Jordan (energetic, professional, clear) |
| Identity | Calling on behalf of a company, about a form the person filled out, to confirm fit and book |
| Guardrails | Under 3 minutes, no overselling, no high-pressure tactics, never quote pricing |
| Welcome | Names the company and the reason for the call in the first sentence |
| Tasks | Book calendar slot for a human rep, CRM update |
| Post-call fields | qualified, budget_range, timeline, decision_maker, meeting_booked |
Why it is shaped this way: the callee did not choose this moment. The welcome line therefore has to establish who is calling and why they are owed the call, before asking anything. The "no pricing" guardrail exists because a wrong number quoted by an agent is a number your rep now has to walk back.
The post-call fields are the actual product here. A qualifier that books meetings but does not write budget_range and timeline back leaves the rep starting from zero. Field design is covered in /docs/post-call-analysis.
Appointment reminder
The job is confirming or rescheduling, and nothing else.
| Piece | Value |
|---|---|
| Voice | Riley (calm, polite, slightly slower pace) |
| Identity | Calling from a clinic about a specific appointment with a named provider at a named time |
| Guardrails | Under 90 seconds unless rescheduling, nothing clinical, no detail beyond date and time, route anything else to the office |
| Tasks | Calendar reschedule, confirmation SMS |
| Post-call fields | confirmed, rescheduled, new_appointment_time |
Why it is shaped this way: this is the narrowest agent on the list, deliberately. Every detail it holds (patient name, provider, date, time) arrives as a variable, not as prompt text, so one agent serves every appointment. See /docs/agents-variables.
The scope guardrail carries the compliance weight. A reminder agent that will happily discuss symptoms or billing has become a support agent that nobody tested.
Payment reminder
| Piece | Value |
|---|---|
| Voice | Sage (warm but neutral, non-judgmental) |
| Guardrails | Never threatening, never imply legal action, transfer immediately on dispute without arguing, always offer a pay-later path |
| Tasks | Payment link, payment plan, transfer to billing |
| Post-call fields | outcome (paid / plan / dispute / refused / no-answer), amount_paid, disputed |
Why it is shaped this way: the failure mode is legal, not conversational. "Transfer on dispute, do not argue" is the single most important line in the prompt. An agent that debates a disputed charge is generating a transcript someone will read back to you.
Reading these as a recipe
Every example above decomposes the same way: identity, style, guardrails, welcome message, knowledge, tasks, post-call fields. Start from the closest example, replace the bracketed values, then run 6 to 10 test calls before deploying. Receptionist-style agents typically need that many rounds. Test both the happy path and the hostile caller.
See /docs/agents-prompting for the identity and style fields, /docs/agents-guardrails for what belongs in guardrails rather than identity, and /docs/agents-testing for the test loop.