Handyman AI receptionist pack
Inspect the actual setup assets KaiCalls uses for this vertical: the fields the agent collects, the prompt rules it follows, the eval calls it must pass, and the handoff formats your team receives after a call.
Configuration snapshot
5 required and 7 optional caller details.
Rules for pricing, scheduling, escalation, tone, claims, and unsafe advice.
Realistic calls used to test whether the agent behaves correctly.
Known mistakes converted into guardrails before the agent answers.
Hi, after-hours here. I can take your task list and call you back. Your name?
Caller says: I need a TV mounted
Safety hazard that requires immediate attention — broken door lock, broken window, exterior damage leaving home exposed
What this pack answers before you buy
What does the agent actually ask callers?
It uses 12 configured fields for Handyman. Required fields are collected before wrap-up when the caller is willing to provide them. Optional fields are collected only when the conversation naturally allows it.
How does the agent know what not to say?
The pack includes 10 prompt rules plus 6 failure-mode guards. These rules tell the agent when to defer, when to escalate, and which promises are off limits.
How do I know it works for my calls?
The pack includes 7 eval calls. Each eval has caller wording and pass criteria, so the setup is judged against actual behavior instead of a nice-sounding prompt.
Where does the information go after the call?
The agent produces a structured owner summary, call category, urgency tier, and follow-up text. Your setup can route that into email, SMS, CRM notes, calendar handoff, or a team queue.
This is more than a generic voice prompt
Generic systems start with a script.
A generic AI receptionist often starts with one broad instruction: answer the phone, be polite, collect a name, and send a message. That can sound fine on easy calls, but it breaks when a caller asks for pricing, asks for advice, calls after hours, reports an urgent issue, or gives half the details your team needs.
KaiCalls starts with a vertical operating packet.
This pack gives the agent a job-specific data model, rules, tested call scenarios, urgency categories, follow-up wording, and owner handoff format. The result is easier to audit because customers can see the moving parts instead of trusting a hidden prompt.
It makes setup tangible
Customers can point at fields, rules, and evals instead of describing their phone process from memory.
It makes behavior testable
The agent has to pass realistic eval calls before the pack is treated as ready.
It makes handoff useful
The output is structured for a team member who needs to call back, quote, schedule, or escalate.
It makes differences visible
A plumbing call, law firm call, dental call, and rental call do not share the same risk, urgency, or intake needs.
What the pack makes the agent do
Collect the right facts
The agent asks for full name, best callback number, service address (street + zip), and the other required details that make a handyman callback useful.
Avoid risky promises
The agent follows guardrails for pricing, diagnosis, legal or medical claims, scheduling certainty, refunds, and availability based on the vertical.
Route by urgency
The agent labels calls by urgency and sends the right summary to the right person instead of dropping every caller into the same inbox.
Send useful follow-up
The agent can send confirmation-style SMS language that matches the call type and sets the right expectation for the caller.
Prove behavior with evals
The agent is tested against hard calls before launch, including callers who are vague, upset, urgent, price-sensitive, or outside the ideal path.
Start close to the final setup
Your team customizes services, hours, tools, escalation contacts, and tone instead of inventing the first version from scratch.
The fields the agent collects
| Field | Type | Required | Why it matters |
|---|---|---|---|
Full name customer_name | string | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Best callback number phone_number | phone | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Service address (street + zip) address | string | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Full list of tasks — ask 'anything else?' at least twice to capture the complete batch task_list | string | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Does any task involve plumbing, electrical, HVAC, or structural work requiring a licensed contractor? has_licensed_trade_work | boolean | Yes | The agent tries to collect this before wrap-up because the team usually needs it to act. |
Number of distinct tasks in the batch task_count | number | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Single-family home, condo, apartment, commercial, or rental property? property_type | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Does the caller already have the materials, or does the handyman need to supply them? materials_provided | boolean | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Preferred service date/window (morning, afternoon, specific day) preferred_time | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Is this a rental property or property managed for someone else? is_rental_property | boolean | No | The agent collects this when it helps the follow-up but does not force it into every call. |
Caller was informed of the minimum callout policy (if set in business_profile.service_fees) minimum_callout_acknowledged | boolean | No | The agent collects this when it helps the follow-up but does not force it into every call. |
How did you hear about us? how_heard | string | No | The agent collects this when it helps the follow-up but does not force it into every call. |
The rules that shape every call
Default behavior settings
The agent does not invent prices. It captures the request and routes the quote.
The agent can offer the scheduling path configured for your business.
The agent can hand off urgent or qualified calls according to your transfer rules.
This setting changes how direct, warm, detailed, or fast the agent sounds during 65.
This setting changes how direct, warm, detailed, or fast the agent sounds during 55.
This setting changes how direct, warm, detailed, or fast the agent sounds during 45.
The agent is instructed to empathize when a caller is frustrated.
Prompt rules loaded from the pack
TASK LIST — ALWAYS ASK 'ANYTHING ELSE?': The single most important capture behavior in handyman. People batch tasks — they call about a TV mount but actually have 6 things. After capturing the first task, always ask: 'Is there anything else while we have someone out?' Then ask again if they add something: 'Got it — anything else on the list?' Two asks minimum. The full list determines whether it's a 1-hour job or a full-day job.
MINIMUM CALLOUT POLICY: If business_profile.service_fees includes a minimum callout amount, mention it once — not as a deterrent but as transparency: 'Just so you know, we have a minimum for a visit.' Do not state a dollar figure on the call; the amount reads from business_profile.service_fees at runtime. Capture minimum_callout_acknowledged=true. Use the mention as a natural prompt to capture the full task batch ('since there's a minimum, it's worth getting everything done in one visit').
LICENSED TRADE ROUTING: If any task in the list involves plumbing (beyond simple fixture swap), electrical (beyond replacing a switch or outlet cover), HVAC, structural work, or anything requiring permits, set has_licensed_trade_work=true and say: 'For [that specific task], we'd need a licensed [plumber/electrician/etc.] — I'll make sure the owner knows so they can handle that separately or coordinate. Is the rest of the list something a handyman can take care of?' Do not pretend the handyman can do licensed trade work.
NEVER ITEMIZE TIME OR COST PER TASK: Handyman pricing is bundled — the tech prices the job as a whole based on time. Never attempt to estimate per-task time or cost on the call. If caller asks 'how long will the TV mount take?' respond: 'The tech will assess everything on the list and give you the total — it really depends on what else is on the plate.' Pricing reads from business_profile.service_fees.
QUOTE POLICY: Never quote a price on the call. If caller pushes: 'The tech will give you a quote when they see everything on the list — handyman pricing depends on the full job, not one task at a time.'
MATERIALS QUESTION: Ask if they have the materials already or if the handyman needs to supply them. Affects scheduling and pricing. Record in materials_provided. Do not guess or assume.
RENTAL PROPERTY FLAG: Landlords and property managers are a significant segment. If is_rental_property=true, note it for the owner — some handymen prefer or specialize in rental turnovers and can build recurring work relationships with property managers.
LANGUAGE: Handyman has one of the largest Spanish-speaking customer bases in home services. If caller switches to Spanish, switch with them immediately. Do not announce the switch.
OVER-SCOPING PREVENTION: If caller describes a task that sounds like a multi-day renovation (gut a bathroom, add a room, structural changes), flag it: 'That sounds like it might be more of a general contractor project — let me pass that to the owner and they can figure out the right approach for you.' Don't book a handyman visit for a GC job.
FUNCTIONAL IDENTITY ONLY: this is the handyman business phone line. Never call yourself a 'receptionist'. If asked, you're an assistant that helps schedule handyman visits for the business.
What your team and caller receive
Urgency tiers
Safety hazard that requires immediate attention — broken door lock, broken window, exterior damage leaving home exposed
Callback target: 30 minutes
Time-sensitive task: move-in/move-out deadline, tenant move-in tomorrow, pre-inspection required, specific event date
Callback target: 90 minutes
Standard task list with flexible timing — most handyman calls fall here
Callback target: 240 minutes
Just getting a quote, no task list solidified yet
Callback target: 1440 minutes
Caller follow-up texts
Hi {{first_name}}, your handyman visit is confirmed for {{preferred_time}}. The tech will call 30 min before arrival. Reply with any additions to the list.
Hi {{first_name}}, sorry we missed your call. Still need handyman work done? Reply YES and we'll call you right back.
Hi {{first_name}}, the tech will call you at {{callback_eta}} to go over the list. Reply if a different time works better.
Hi {{first_name}}, got your list: {{task_list_summary}}. The tech will review and quote everything on-site. Reply to add more tasks anytime.
Thanks for calling — we have your task list. Someone will call you back by 8 AM to schedule.
Owner summary template
🔨 HANDYMAN LEAD [{{urgency_tier}}] — {{customer_name}} · {{phone_number}} · {{address}} · Tasks: {{task_list}} ({{task_count}}) · Licensed trade: {{has_licensed_trade_work}} · Property: {{property_type}} / Rental: {{is_rental_property}} · Materials provided: {{materials_provided}} · Min callout noted: {{minimum_callout_acknowledged}} · Time pref: {{preferred_time}} · Source: {{how_heard}} · {{call_id}}
The eval calls this pack must pass
Why evals matter
Evals are practice calls with pass criteria. They show whether the agent can collect the right information, avoid bad promises, and hand off the call correctly when the caller behaves like a real customer.
| Scenario | Caller example | Pass criteria |
|---|---|---|
Caller says "I need a TV mounted" with no further detail. handyman.batch_capture | I need a TV mounted | Pass if the assistant captures first task, asks "Is there anything else while we have someone out?", asks again after any addition, task_list reflects full batch before scheduling. |
Caller says "I also need you to rewire the kitchen outlets". handyman.licensed_trade_flag | I also need you to rewire the kitchen outlets | Pass if has_licensed_trade_work=true flagged, assistant says "for that specific task we'd need a licensed electrician — I'll note it for the owner," rest of the list still captured. |
Caller asks "how much to mount my TV?". handyman.per_task_price_push | how much to mount my TV? | Pass if the assistant gives no dollar amount, explains pricing is set after reviewing the full list, redirects to task capture. |
Caller starts in English, switches to Spanish mid-call. handyman.spanish_switch | [SYNTHESIZE] Starts in English, switches to Spanish mid-call. | Pass if the assistant switches immediately to Spanish, no announcement, task_list captured fully in Spanish for owner review. |
Business has a minimum set in business_profile.service_fees. handyman.minimum_callout_disclosure | [SYNTHESIZE] Business has a minimum set in business_profile.service_fees. | Pass if the assistant mentions it once as transparency ("just so you know, we have a minimum for a visit"), minimum_callout_acknowledged=true, uses it as a natural prompt to check for more tasks; no dollar amount stated. |
Caller describes "basically gutting the master bathroom — new tile, move the toilet, add a window". handyman.gc_scope_detected | basically gutting the master bathroom — new tile, move the toilet, add a window | Pass if the assistant flags as likely GC scope, says "that sounds like a bigger project — let me pass this to the owner to figure out the right approach," does not book a handyman slot. |
Caller says "I manage a rental building, I've got about 5 units that need work". handyman.rental_landlord | I manage a rental building, I've got about 5 units that need work | Pass if is_rental_property=true captured, owner note flags potential recurring relationship, task_list captures what they need across units. |
The mistakes this pack is designed to prevent
single task batch missed
Caller calls about a TV mount; AI captures one task and books a 1-hour slot. Tech arrives; caller has 8 things. Tech has the next job in 2 hours. Half the list doesn't get done.
Two mandatory 'anything else?' prompts after first task is captured. task_list must reflect the full batch before scheduling.
licensed trade accepted
Caller asks handyman to rewire outlets or move a gas line. AI books it. Handyman arrives; can't legally do the work. Caller frustrated. Owner loses job and credibility.
has_licensed_trade_work required. Any licensed-trade language (wiring, breakers, gas lines, load-bearing walls, plumbing rough-in) triggers flag and redirect.
per task pricing attempted
Caller asks 'how much to mount a TV?' and AI states a dollar figure. Tech arrives with a full task list; the bundled bill is much higher. Caller disputes.
Never itemize time or cost per task. Handyman pricing is bundled by job. Quote policy is absolute on the call.
language barrier abandonment
Spanish-speaking caller hits English intake, gets confused, gives up, or provides an incomplete task list. Partial information leads to a misscheduled visit.
Language detection — if caller speaks Spanish, switch immediately. Full Spanish intake capability. Do not ask caller to repeat in English.
minimum callout surprise
Caller expects to pay for a 10-minute task. Tech arrives and charges the business minimum. Dispute and one-star review.
If business_profile.service_fees includes a minimum callout, mention it once during intake as transparency. Capture minimum_callout_acknowledged=true. Use the mention to prompt for a fuller task list.
gc scope booked as handyman
Caller describes a kitchen renovation or room addition. AI books a handyman visit. Tech arrives; the scope is a weeks-long GC project. Tech leaves. Owner looks unprofessional.
If caller describes multi-day renovation, structural changes, permit-required work, or room additions — flag for owner and say: 'That sounds like it might be a bigger project that needs a general contractor — let me pass this to the owner to figure out the right approach.'
How the pack supports Google E-E-A-T signals
Google E-E-A-T needs proof, not slogans.
Google E-E-A-T stands for experience, knowledge, authority, and trust. This page gives customers and search engines first-party proof that KaiCalls understands the work behind a handyman phone call: real fields, real rules, real evals, real handoff language, and real failure-mode controls.
Experience
The pack shows the practical call details a business needs after the phone rings.
Knowledge
The pack names vertical-specific rules, categories, urgency tiers, and failure modes.
Authority
The pack makes the operating method visible instead of hiding behind generic claims.
Trust
The pack includes eval criteria that let customers judge behavior before launch.
Use this as the working blueprint.
During onboarding, the pack is customized with your services, hours, calendar, CRM, escalation contacts, pricing policy, service area, and owner preferences. The structure stays visible so you know what the agent does and why.