@agenticmail/core 0.9.32 → 0.9.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/dist/index.d.cts +1 -1
  2. package/dist/index.d.ts +1 -1
  3. package/dist/skills/built-in/accommodation-intake.json +132 -0
  4. package/dist/skills/built-in/add-driver-vehicle-household.json +133 -0
  5. package/dist/skills/built-in/admissions-waitlist-followup.json +129 -0
  6. package/dist/skills/built-in/anchor-and-counter-anchor.json +161 -0
  7. package/dist/skills/built-in/anti-social-engineering.json +153 -0
  8. package/dist/skills/built-in/anything-else-sweep.json +120 -0
  9. package/dist/skills/built-in/apologise-correctly.json +126 -0
  10. package/dist/skills/built-in/ask-for-in-person-meeting.json +114 -0
  11. package/dist/skills/built-in/attorney-new-client-intake.json +133 -0
  12. package/dist/skills/built-in/bant-discovery-call.json +125 -0
  13. package/dist/skills/built-in/book-new-patient-appointment.json +131 -0
  14. package/dist/skills/built-in/bookmark-close.json +113 -0
  15. package/dist/skills/built-in/bypass-i-am-the-supervisor.json +130 -0
  16. package/dist/skills/built-in/bypass-scripted-rep.json +142 -0
  17. package/dist/skills/built-in/calibrated-questions.json +155 -0
  18. package/dist/skills/built-in/call-911-fire.json +118 -0
  19. package/dist/skills/built-in/call-911-medical-emergency.json +126 -0
  20. package/dist/skills/built-in/call-911-violent-crime-in-progress.json +133 -0
  21. package/dist/skills/built-in/call-988-crisis-line.json +128 -0
  22. package/dist/skills/built-in/call-poison-control.json +115 -0
  23. package/dist/skills/built-in/call-police-non-emergency.json +114 -0
  24. package/dist/skills/built-in/call-with-person-in-distress.json +133 -0
  25. package/dist/skills/built-in/cancel-cable-fiber-no-retention-loop.json +156 -0
  26. package/dist/skills/built-in/cancel-policy-clean.json +130 -0
  27. package/dist/skills/built-in/capture-rep-identity.json +113 -0
  28. package/dist/skills/built-in/childcare-provider-intake.json +157 -0
  29. package/dist/skills/built-in/close-account-no-residual-fees.json +127 -0
  30. package/dist/skills/built-in/close-on-concrete-next-step.json +116 -0
  31. package/dist/skills/built-in/confirm-agreement-readback.json +134 -0
  32. package/dist/skills/built-in/confirm-next-step-ownership.json +113 -0
  33. package/dist/skills/built-in/contractor-estimate-request.json +142 -0
  34. package/dist/skills/built-in/court-clerk-administrative-inquiry.json +119 -0
  35. package/dist/skills/built-in/cpa-intake-call.json +134 -0
  36. package/dist/skills/built-in/day-of-flight-cancellation.json +127 -0
  37. package/dist/skills/built-in/de-escalate-angry-rep.json +114 -0
  38. package/dist/skills/built-in/decline-unsolicited-pitch.json +110 -0
  39. package/dist/skills/built-in/deliver-difficult-news.json +122 -0
  40. package/dist/skills/built-in/detect-fake-escalation-loops.json +140 -0
  41. package/dist/skills/built-in/detect-lies-and-contradictions.json +139 -0
  42. package/dist/skills/built-in/dispute-billing-code-eob.json +147 -0
  43. package/dist/skills/built-in/dispute-charge-reg-e-reg-z.json +131 -0
  44. package/dist/skills/built-in/dispute-credit-report-via-bank.json +128 -0
  45. package/dist/skills/built-in/dispute-denied-claim.json +143 -0
  46. package/dist/skills/built-in/dispute-security-deposit.json +130 -0
  47. package/dist/skills/built-in/dispute-usage-spike-meter-reread.json +120 -0
  48. package/dist/skills/built-in/dmv-vehicle-registration-renewal.json +120 -0
  49. package/dist/skills/built-in/document-call-promises.json +145 -0
  50. package/dist/skills/built-in/early-lease-termination.json +126 -0
  51. package/dist/skills/built-in/elite-line-escalation.json +107 -0
  52. package/dist/skills/built-in/equipment-swap-cable-router-modem.json +126 -0
  53. package/dist/skills/built-in/eu261-uk261-dot-compensation.json +113 -0
  54. package/dist/skills/built-in/file-fnol-auto-claim.json +130 -0
  55. package/dist/skills/built-in/file-habitability-complaint.json +115 -0
  56. package/dist/skills/built-in/financial-aid-appeal.json +128 -0
  57. package/dist/skills/built-in/follow-up-stalled-claim.json +118 -0
  58. package/dist/skills/built-in/get-past-gatekeeper.json +115 -0
  59. package/dist/skills/built-in/get-past-tier-1-script.json +130 -0
  60. package/dist/skills/built-in/handle-callback-stall.json +120 -0
  61. package/dist/skills/built-in/handle-outsourced-no-escalation.json +138 -0
  62. package/dist/skills/built-in/handle-send-me-an-email-deflection.json +112 -0
  63. package/dist/skills/built-in/handle-time-pressure.json +159 -0
  64. package/dist/skills/built-in/health-prior-auth-appeal.json +131 -0
  65. package/dist/skills/built-in/hoa-dispute.json +123 -0
  66. package/dist/skills/built-in/hold-time-strategy.json +137 -0
  67. package/dist/skills/built-in/hold-warmth-cold-rep.json +114 -0
  68. package/dist/skills/built-in/hotel-walk-over-recovery.json +114 -0
  69. package/dist/skills/built-in/humour-when-it-lands.json +127 -0
  70. package/dist/skills/built-in/i20-visa-dso.json +134 -0
  71. package/dist/skills/built-in/invoke-regulator-firmly.json +137 -0
  72. package/dist/skills/built-in/irrops-waiver-awareness.json +103 -0
  73. package/dist/skills/built-in/irs-payment-plan-setup.json +134 -0
  74. package/dist/skills/built-in/k12-iep-504-enrollment.json +134 -0
  75. package/dist/skills/built-in/late-add-petition.json +128 -0
  76. package/dist/skills/built-in/leave-of-absence-deferral.json +130 -0
  77. package/dist/skills/built-in/lock-in-terms-verbally.json +127 -0
  78. package/dist/skills/built-in/match-energy-keep-goal.json +120 -0
  79. package/dist/skills/built-in/medical-records-transfer.json +138 -0
  80. package/dist/skills/built-in/medical-withdrawal.json +131 -0
  81. package/dist/skills/built-in/mid-call-evidence-collection.json +159 -0
  82. package/dist/skills/built-in/mirror-technique.json +145 -0
  83. package/dist/skills/built-in/missed-connection-distressed-passenger.json +111 -0
  84. package/dist/skills/built-in/mortgage-loan-hardship.json +130 -0
  85. package/dist/skills/built-in/move-out-walkthrough.json +114 -0
  86. package/dist/skills/built-in/multi-channel-escalation.json +141 -0
  87. package/dist/skills/built-in/multi-issue-tradeoffs.json +155 -0
  88. package/dist/skills/built-in/negotiate-rent-renewal.json +123 -0
  89. package/dist/skills/built-in/no-as-opening.json +154 -0
  90. package/dist/skills/built-in/not-sound-like-spam-dialer.json +118 -0
  91. package/dist/skills/built-in/outage-credit-applied.json +127 -0
  92. package/dist/skills/built-in/passport-expedite-or-appointment.json +123 -0
  93. package/dist/skills/built-in/pediatric-school-forms.json +141 -0
  94. package/dist/skills/built-in/personal-trainer-discovery.json +138 -0
  95. package/dist/skills/built-in/pharmacy-callback.json +134 -0
  96. package/dist/skills/built-in/pivot-mid-call.json +141 -0
  97. package/dist/skills/built-in/port-mobile-number-survive-retention.json +127 -0
  98. package/dist/skills/built-in/prescription-refill-followup.json +132 -0
  99. package/dist/skills/built-in/push-past-invented-policy.json +159 -0
  100. package/dist/skills/built-in/rapport-opening-30-seconds.json +130 -0
  101. package/dist/skills/built-in/reach-executive-office.json +137 -0
  102. package/dist/skills/built-in/read-vocal-cues.json +139 -0
  103. package/dist/skills/built-in/read-vocal-tone.json +159 -0
  104. package/dist/skills/built-in/realestate-agent-vetting.json +144 -0
  105. package/dist/skills/built-in/receive-difficult-news.json +115 -0
  106. package/dist/skills/built-in/recording-claim-conversation-legally.json +121 -0
  107. package/dist/skills/built-in/recover-summary-refusal.json +121 -0
  108. package/dist/skills/built-in/reengage-ghosted-lead.json +115 -0
  109. package/dist/skills/built-in/referral-followup-without-burning.json +116 -0
  110. package/dist/skills/built-in/referral-prior-authorization.json +130 -0
  111. package/dist/skills/built-in/refuse-the-split.json +142 -0
  112. package/dist/skills/built-in/refuse-upsell-at-close.json +114 -0
  113. package/dist/skills/built-in/rental-car-counter-defense.json +116 -0
  114. package/dist/skills/built-in/rental-scam-report.json +125 -0
  115. package/dist/skills/built-in/replace-lost-stolen-card-expedited.json +139 -0
  116. package/dist/skills/built-in/report-downed-line-gas-smell-911-triage.json +130 -0
  117. package/dist/skills/built-in/report-elder-or-child-abuse.json +125 -0
  118. package/dist/skills/built-in/report-fbi-tip.json +116 -0
  119. package/dist/skills/built-in/report-fraud-ic3-or-ftc.json +117 -0
  120. package/dist/skills/built-in/report-fraudulent-transaction.json +126 -0
  121. package/dist/skills/built-in/report-power-outage-get-etr.json +116 -0
  122. package/dist/skills/built-in/report-urgent-maintenance.json +123 -0
  123. package/dist/skills/built-in/request-credit-limit-increase.json +126 -0
  124. package/dist/skills/built-in/request-supervisor-gracefully.json +129 -0
  125. package/dist/skills/built-in/request-welfare-check.json +127 -0
  126. package/dist/skills/built-in/request-written-confirmation.json +113 -0
  127. package/dist/skills/built-in/reschedule-appointment.json +121 -0
  128. package/dist/skills/built-in/reset-by-callback.json +143 -0
  129. package/dist/skills/built-in/resist-urgency-manipulation.json +152 -0
  130. package/dist/skills/built-in/revisit-totaling-decision.json +125 -0
  131. package/dist/skills/built-in/roadside-assistance-dispatch.json +132 -0
  132. package/dist/skills/built-in/roommate-replacement.json +121 -0
  133. package/dist/skills/built-in/same-day-urgent-appointment.json +130 -0
  134. package/dist/skills/built-in/schedule-rental-viewing.json +111 -0
  135. package/dist/skills/built-in/service-move-shutoff-start-no-overlap.json +129 -0
  136. package/dist/skills/built-in/social-security-replacement-card.json +122 -0
  137. package/dist/skills/built-in/specialist-doctor-booking.json +136 -0
  138. package/dist/skills/built-in/spot-bait-and-switch.json +155 -0
  139. package/dist/skills/built-in/stop-recurring-ach.json +127 -0
  140. package/dist/skills/built-in/switch-postpaid-to-prepaid-mid-cycle.json +130 -0
  141. package/dist/skills/built-in/tactical-empathy-labeling.json +147 -0
  142. package/dist/skills/built-in/therapist-intake-call.json +133 -0
  143. package/dist/skills/built-in/train-cancellation-refund-rebook.json +104 -0
  144. package/dist/skills/built-in/transcript-request.json +128 -0
  145. package/dist/skills/built-in/travel-insurance-claim-on-the-road.json +114 -0
  146. package/dist/skills/built-in/travel-notice-unlock-card.json +119 -0
  147. package/dist/skills/built-in/unemployment-claim-status-and-appeal.json +123 -0
  148. package/dist/skills/built-in/uscis-case-status-and-biometrics.json +125 -0
  149. package/dist/skills/built-in/utility-deposit-waiver.json +122 -0
  150. package/dist/skills/built-in/utility-payment-plan-avoid-disconnect.json +122 -0
  151. package/dist/skills/built-in/verify-insurance-coverage-pre-procedure.json +140 -0
  152. package/dist/skills/built-in/verify-out-of-network-coverage.json +129 -0
  153. package/dist/skills/built-in/veteran-benefits-community-college.json +134 -0
  154. package/dist/skills/built-in/veterinary-new-patient-intake.json +135 -0
  155. package/dist/skills/built-in/visa-boarding-denial-recovery.json +115 -0
  156. package/dist/skills/built-in/vital-records-certificate-copy.json +120 -0
  157. package/dist/skills/built-in/voicemail-that-gets-called-back.json +114 -0
  158. package/dist/skills/built-in/voter-registration-and-ballot.json +124 -0
  159. package/dist/skills/built-in/walkaway-threats.json +159 -0
  160. package/dist/skills/built-in/wedding-vendor-intake.json +149 -0
  161. package/dist/skills/built-in/when-to-stop-being-polite.json +161 -0
  162. package/dist/skills/built-in/wire-funds-safely.json +129 -0
  163. package/package.json +1 -1
@@ -0,0 +1,114 @@
1
+ {
2
+ "id": "call-police-non-emergency",
3
+ "name": "Call Local Police — Non-Emergency Line",
4
+ "version": "1.0.1",
5
+ "category": "emergency-services",
6
+ "tags": [
7
+ "police",
8
+ "non-emergency",
9
+ "report",
10
+ "noise-complaint",
11
+ "after-the-fact",
12
+ "emergency_services"
13
+ ],
14
+ "description": "Place a non-emergency call to local police (typically 311, the department's published non-emergency number, or a state-level non-emergency tip line) for things that are not life-safety: theft after the fact, noise complaints, suspicious activity in the area, found property, follow-ups on existing case numbers.",
15
+ "disclaimer": "(1) Use this for non-life-safety only. If lives or property are in active danger, use call-911-* skills instead. (2) Identify as an AI on the first sentence. (3) Don't waste the dispatcher's time on things that should be a city portal request (potholes, graffiti tagged for cleanup).",
16
+ "context": {
17
+ "when_to_use": "Operator wants to file a report or ask a question that does NOT require immediate police response. Stolen property they noticed hours later, ongoing noise from a neighbour, an abandoned car on the block, a follow-up on a prior case, asking about the police-report copy for an insurance claim. Anything actively dangerous routes to 911 instead.",
18
+ "preconditions": [
19
+ "Operator has explicitly authorised this call.",
20
+ "Operator knows roughly what they want — file a report? ask about an existing case? request a welfare check?",
21
+ "Address or precise location of the incident (or operator's address for ongoing complaints).",
22
+ "If filing a stolen-property report: rough inventory + estimated values + when last seen."
23
+ ],
24
+ "estimated_call_duration_minutes": 12
25
+ },
26
+ "principles": [
27
+ "Identify as an AI in the first sentence — same rule as 911, just lower stakes.",
28
+ "Have the operator's reason for calling crisp before dialing. 'I'd like to file a report for <X>' beats 'we wanted to ask about something'.",
29
+ "Get a case number / incident number for any report filed. Without it, the report effectively didn't happen.",
30
+ "Don't escalate to 911-tier urgency unless the dispatcher recommends it.",
31
+ "If the operator's situation is borderline (ongoing harassment? stalking? threats?), let the dispatcher decide whether to upgrade to a higher-priority response — describe the facts, don't editorialise."
32
+ ],
33
+ "phrases": {
34
+ "opener_report": "Hi — I'm an AI assistant calling on behalf of <operator>. My operator would like to file a non-emergency report for <one-line: stolen property / noise complaint / suspicious vehicle / found property>. The incident location is <address>. May I walk you through what happened?",
35
+ "opener_existing_case": "Hi — I'm an AI assistant calling on behalf of <operator>. We're following up on existing case number <number> from <date> regarding <one-line>. We're trying to <get a copy / get a status / report new info>.",
36
+ "opener_welfare_question": "Hi — I'm an AI assistant calling on behalf of <operator>. They're worried about someone they haven't been able to reach and would like to request a welfare check at <address>. Can I tell you what we know?",
37
+ "ask_for_case_number": "Could I get the case or report number for our records? My operator will need it for follow-up / insurance / their file.",
38
+ "relay_to_operator": "Let me check with my operator — one moment.",
39
+ "graceful_close": "Thank you. Could you confirm what happens next — does an officer follow up, or is this the report complete? And the case number is <…>?"
40
+ },
41
+ "tactics": [
42
+ {
43
+ "name": "Open with a clean one-liner",
44
+ "when": "First substantive turn.",
45
+ "script": "Pick the right opener phrase for the operator's purpose — `opener_report`, `opener_existing_case`, or `opener_welfare_question`. Lead with WHY you're calling so the dispatcher routes correctly.",
46
+ "priority": 1
47
+ },
48
+ {
49
+ "name": "Let the dispatcher's script run",
50
+ "when": "After the opener.",
51
+ "script": "Non-emergency dispatchers have intake scripts too. Answer their questions through the operator. Don't volunteer extra detail until asked."
52
+ },
53
+ {
54
+ "name": "Pull case / incident number before disconnecting",
55
+ "when": "Dispatcher signals the report is logged or transferred.",
56
+ "script": "Use `ask_for_case_number`. Without it, the operator has no proof the call happened.",
57
+ "priority": 3
58
+ },
59
+ {
60
+ "name": "Upgrade if the dispatcher recommends",
61
+ "when": "Dispatcher says 'this sounds more urgent — let me transfer you' or 'we'll send someone right now'.",
62
+ "script": "Accept the upgrade. If the dispatcher transfers to 911, the call-911-* skills apply from there."
63
+ },
64
+ {
65
+ "name": "Mid-call escalation trigger: hang up and dial 911",
66
+ "when": "During the call, the operator describes anything currently happening — active threat, ongoing harm, audible violence, a person currently breaking in, someone visibly bleeding, a vehicle pursuit in progress, a stalker who just arrived at the door.",
67
+ "script": "The non-emergency line is the wrong channel for anything time-critical. Tell the non-emergency dispatcher: 'Apologies — what my operator just told me sounds like a live emergency. I'm going to hang up and dial 911 now.' Then disconnect, switch to the appropriate call-911-* skill, and reference 'we were just on the non-emergency line' so the dispatcher can stitch the record together. Do NOT try to ask the non-emergency dispatcher to do the upgrade for you — disconnect and dial 911 directly to avoid transfer-failure delays.",
68
+ "priority": 4
69
+ },
70
+ {
71
+ "name": "Weaponisation screen for reports about a named third party",
72
+ "when": "Operator wants to file a report or request a check that names a specific person — a neighbour, an ex, a family member, a business counterparty — particularly if the report is 'suspicious activity' / 'threatening behaviour' / 'I'm worried they might X'.",
73
+ "script": "Before placing the call, ask the operator: (a) what specific, observed conduct are you reporting (not characterisations like 'creepy', 'unstable')?, (b) do you have any ongoing dispute, breakup, custody fight, or grievance with this person?, (c) have you tried other channels — talking to them, a building manager, a mediator, a lawyer? If the operator's reason is thin (no specific observed conduct), they have an active dispute with the subject, AND they have not exhausted non-police channels, push back: 'A police report against someone you have an active dispute with — especially with this little observed conduct — risks looking like a harassment tactic and can be subpoenaed against you. Are you sure?' Document the operator's response. If they insist, file the report straight (no embellishment); if they retract, abort cleanly.",
74
+ "priority": 0
75
+ }
76
+ ],
77
+ "boundaries": [
78
+ "NEVER call the non-emergency line for something that's actually life-threatening. Use 911.",
79
+ "NEVER pretend to be human.",
80
+ "NEVER make false reports. Knowingly false police reports are crimes in every state.",
81
+ "NEVER use this skill to file a report whose primary effect would be harassment of a specific named person the operator is in conflict with, particularly where no specific recent conduct can be described and where the operator has not tried any non-police channel. The audit log makes the pattern legible and exposes the operator to civil and criminal liability.",
82
+ "NEVER continue on the non-emergency line once the operator describes anything that is actually happening now — hang up and dial 911 instead. The non-emergency line will not dispatch fast enough.",
83
+ "NEVER ask the police to perform actions they wouldn't normally perform (don't ask them to confront a specific person at the operator's behest unless that's a normal welfare-check or warrant-service situation).",
84
+ "NEVER end the call without confirming what happens next and capturing the case number."
85
+ ],
86
+ "success_signals": [
87
+ "Dispatcher confirms the report is logged and gives a case number.",
88
+ "Dispatcher confirms an officer will follow up within a stated window.",
89
+ "Dispatcher confirms the report is complete and no follow-up is needed.",
90
+ "Welfare check is dispatched with the address and contact info."
91
+ ],
92
+ "failure_signals": [
93
+ "Dispatcher says the operator needs to file online / in person — relay that to the operator instead of trying to push past it.",
94
+ "Dispatcher refuses to take the report on the phone (some jurisdictions require in-person for property crime).",
95
+ "Dispatcher transfers you to a different department and the transfer fails — re-dial and reference the prior call."
96
+ ],
97
+ "exit_strategy": {
98
+ "on_success": "Confirm what happens next (officer follow-up window / online portal step / done). Get the case number. Email the operator a summary.",
99
+ "on_failure": "Email the operator the alternative method (online portal / in-person address) the dispatcher recommended.",
100
+ "follow_ups": [
101
+ "Email operator a summary: case number, dispatcher reference, follow-up window.",
102
+ "If officer is scheduled to follow up, calendar a check-in for the day after the window closes."
103
+ ]
104
+ },
105
+ "required_user_info": [
106
+ "Operator's explicit authorisation for this call",
107
+ "Reason for calling — report / existing case / welfare check / question",
108
+ "Location or address relevant to the report",
109
+ "Existing case number (if applicable)",
110
+ "Operator's callback number and address",
111
+ "Rough timeline of what happened (date / time / what was noticed)"
112
+ ],
113
+ "contributed_by": "AgenticMail core team (emergency-services bundle v0.9.87)"
114
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "id": "call-with-person-in-distress",
3
+ "name": "Calls With Someone in Distress (Medical, Legal, Grief)",
4
+ "version": "1.0.0",
5
+ "category": "other",
6
+ "tags": [
7
+ "distress",
8
+ "grief",
9
+ "crisis",
10
+ "presence",
11
+ "phone-call",
12
+ "compassion",
13
+ "boundaries",
14
+ "emotional-intelligence"
15
+ ],
16
+ "description": "Be on a call with someone who is in real distress — newly bereaved, facing a medical scare, in a legal crisis, post-incident — and be useful: present, calm, slow, and willing to do the practical thing while they cannot.",
17
+ "disclaimer": "If the person in distress shows signs of immediate danger to themselves or others (statements of intent to harm, severe disorientation, medical emergency in progress), DROP the practical task. Stay on the line, get them a human emergency service (911/999/112 or local equivalent), and do not hang up until help has reached them.",
18
+ "context": {
19
+ "when_to_use": "Calling with — or on behalf of — someone in acute distress. Examples: helping a recently bereaved person settle an estate call, accompanying someone through a denial-of-coverage conversation post-diagnosis, supporting someone giving a police statement, walking someone through a paperwork call after a divorce or job loss.",
20
+ "preconditions": [
21
+ "You have a clear scope — what is the operator asking you to handle vs. what stays with them.",
22
+ "You have a safety check: if they become unsafe to be alone, you know who to call.",
23
+ "You have the patience budget. Distress calls are 3-4x longer than equivalent normal calls. Do not start one with a hard stop in 20 minutes."
24
+ ],
25
+ "estimated_call_duration_minutes": 35
26
+ },
27
+ "principles": [
28
+ "Presence is the service. Practicality is the bonus. Most people in distress do not need advice — they need someone in the room who is not panicking.",
29
+ "Slow your own breathing audibly. They will entrain to it without knowing why.",
30
+ "Short sentences. Long sentences land like noise when someone is overwhelmed.",
31
+ "Do not say 'I understand' — you don't, and they know you don't. Say 'I'm here' or 'I'm listening.'",
32
+ "Take over the practical task the moment they tap out. Do not narrate the rescue ('I'll handle it, don't worry') — just smoothly speak up to the rep yourself.",
33
+ "Avoid 'at least' framings. 'At least it wasn't worse' / 'at least you have…' minimises real loss and ends conversations.",
34
+ "Closure is not your goal in one call. Stabilisation is."
35
+ ],
36
+ "phrases": {
37
+ "open_presence": "I'm here. Take your time — there is no rush on my side.",
38
+ "invite_to_continue": "What would help most right now?",
39
+ "permission_to_pause": "We can pause this call at any second. Just say the word.",
40
+ "take_over": "I've got this part. You can put me on speaker and just listen, or step away — I'll catch you up after.",
41
+ "validate_without_fixing": "That sounds incredibly heavy. You don't have to be okay right now.",
42
+ "redirect_to_safety": "Before we keep going — are you safe right now? Is someone with you?",
43
+ "soft_check_in_mid_call": "How are you doing — really? Want to take five?",
44
+ "warm_close": "I'll handle [next concrete step] and check back in [timeframe]. You don't need to do anything between now and then."
45
+ },
46
+ "tactics": [
47
+ {
48
+ "name": "Open with presence, not agenda",
49
+ "when": "First 30 seconds.",
50
+ "script": "Use `open_presence`. Do NOT lead with the task. Let them be a person before they are a case.",
51
+ "priority": 1
52
+ },
53
+ {
54
+ "name": "Safety check first when distress is acute",
55
+ "when": "If you hear shaking, hyperventilating, or disorientation in the first minute.",
56
+ "script": "Use `redirect_to_safety`. If they are not safe / alone in a bad way, the safety question outranks the task. Do not move forward until you have an answer.",
57
+ "priority": 2
58
+ },
59
+ {
60
+ "name": "Match tempo down, not up",
61
+ "when": "Throughout the call.",
62
+ "script": "Speak slower than feels natural. Lengthen pauses. If they speed up into a spiral, do not match — your slowness becomes the anchor.",
63
+ "priority": 3
64
+ },
65
+ {
66
+ "name": "Take the practical task off their plate",
67
+ "when": "Their voice shakes during the rep's question, or they ask you a question they should already know the answer to.",
68
+ "script": "Use `take_over`. Move smoothly to address the rep yourself. Do not announce 'I'll take over now' to the operator first; just speak. The seamlessness IS the kindness.",
69
+ "priority": 4
70
+ },
71
+ {
72
+ "name": "Tone-shift detector — WAVE INCOMING",
73
+ "when": "Voice tightens, sentences fragment, silence drops in mid-sentence.",
74
+ "script": "Stop. Use `validate_without_fixing`. Do not move to next task until the wave passes — pushing through a grief wave loses the next 30 minutes, not just the next 30 seconds.",
75
+ "priority": 5
76
+ },
77
+ {
78
+ "name": "Tone-shift detector — FUNCTIONAL WINDOW OPENS",
79
+ "when": "They take a deeper breath, ask a logistics question, make a small joke.",
80
+ "script": "This is your work window. Move efficiently — they have given you 5-15 minutes of bandwidth. Do not waste it on more emotional check-in; do the practical task while it's possible.",
81
+ "priority": 6
82
+ },
83
+ {
84
+ "name": "Tone-shift detector — DISSOCIATION",
85
+ "when": "Flat voice, monosyllables, seems to have left the call mentally.",
86
+ "script": "Pause the task. Use `soft_check_in_mid_call`. Suggest pausing the call if needed. Pushing forward when they've dissociated is wasted work and is unkind.",
87
+ "priority": 7
88
+ },
89
+ {
90
+ "name": "Close with concrete next step + permission to rest",
91
+ "when": "Last 2 minutes.",
92
+ "script": "Use `warm_close`. State ONE next step you'll handle. Explicitly free them from doing anything else. Schedule the next check-in so they know you'll be back."
93
+ }
94
+ ],
95
+ "boundaries": [
96
+ "Do NOT play therapist. You are presence + practical, not diagnostic.",
97
+ "Do NOT push for closure, gratitude, or 'silver linings.'",
98
+ "Do NOT share your own similar story uninvited. The call is not about you.",
99
+ "Do NOT promise outcomes you can't deliver ('it'll be okay', 'we'll fix it').",
100
+ "Do NOT take on so much of the practical task that you remove their agency entirely — ask before deciding ('do you want me to handle this, or would you rather try?').",
101
+ "Do NOT keep the call running past the point of usefulness. End warmly when there's a clear next step."
102
+ ],
103
+ "success_signals": [
104
+ "Their breathing slows audibly during the call.",
105
+ "They volunteer one piece of practical information without prompting.",
106
+ "They thank you, even briefly.",
107
+ "They agree to a concrete next step and a check-in time."
108
+ ],
109
+ "failure_signals": [
110
+ "They go silent and you can't bring them back.",
111
+ "They escalate toward statements of self-harm or severe disorientation — switch to safety protocol.",
112
+ "You feel yourself rushing because you're uncomfortable — your discomfort is showing up as pressure on them.",
113
+ "Two hours in and no practical step has been completed AND no emotional stabilisation has occurred."
114
+ ],
115
+ "exit_strategy": {
116
+ "on_success": "Close with `warm_close`. State the ONE next step you'll handle. Confirm the check-in time. Send a short written summary so they don't have to remember.",
117
+ "on_failure": "If they are unsafe, do not exit — get them human help and stay on the line. If they have dissociated, suggest pausing and a re-call later; do not keep going.",
118
+ "follow_ups": [
119
+ "Send a written recap of practical steps and timeline.",
120
+ "Follow up on the schedule you committed to — predictability is part of stabilisation.",
121
+ "Brief the operator (if you are an intermediary) on state and risk level.",
122
+ "If you suspect ongoing risk, surface a referral to professional support gently — not as a deflection."
123
+ ]
124
+ },
125
+ "required_user_info": [
126
+ "Whether the operator wants you to handle the WHOLE call or hand off at certain points.",
127
+ "Standing safety contact if the operator becomes acutely distressed.",
128
+ "Cultural / religious context relevant to grief or crisis language.",
129
+ "How much detail to share with third parties (reps, family) and how much stays private."
130
+ ],
131
+ "contributed_by": "emotional-intel agent (v0.9.87 community drop)",
132
+ "updated_at": "2026-05-20T06:09:47Z"
133
+ }
@@ -0,0 +1,156 @@
1
+ {
2
+ "id": "cancel-cable-fiber-no-retention-loop",
3
+ "name": "Cancel Cable / Fiber Cleanly Without the Retention Loop Runaround",
4
+ "version": "1.0.2",
5
+ "category": "subscription",
6
+ "tags": [
7
+ "telecom",
8
+ "cable",
9
+ "fiber",
10
+ "isp",
11
+ "cancellation",
12
+ "retention",
13
+ "phone-call",
14
+ "utility-telecom"
15
+ ],
16
+ "description": "Call a cable / fiber / ISP to fully cancel service — escaping retention's 'transfer to my supervisor' loops, locking in a final date, getting an equipment-return method, and walking away with a written confirmation number.",
17
+ "disclaimer": "If the user is on a contract with an early-termination fee (ETF), that fee is typically chargeable on cancellation. If the user is moving to an area where the provider doesn't offer service, ETF may be waivable — bring documentation. Bring the same documentation if cancelling for a death-in-family or deployment.",
18
+ "context": {
19
+ "when_to_use": "User has firmly decided to cancel (not negotiate). For users still open to a discount, use `negotiate-bill-reduction` first. NOT for moves — use `service-move-shutoff-start-no-overlap` for those.",
20
+ "preconditions": [
21
+ "User has firmly decided — wavering becomes a save in retention's hands.",
22
+ "Account number, account holder's name, billing zip.",
23
+ "Whether under contract; if so, ETF amount.",
24
+ "List of equipment to return (modem, router, cable boxes, remotes, power adapters).",
25
+ "Desired effective cancel date (often end of current billing cycle to avoid prorating issues)."
26
+ ],
27
+ "estimated_call_duration_minutes": 35
28
+ },
29
+ "principles": [
30
+ "State 'cancel' in the first sentence. Reps escalate to retention only when they hear the word — vague phrasing routes you to general care and adds 10 minutes.",
31
+ "Pick a specific cancel date. Most providers do NOT prorate refunds on cancellation; cancelling on day 2 of a billing cycle costs the same as day 30. Time the cancel for the LAST day of the current cycle.",
32
+ "Retention loops have a pattern: 'let me check with my supervisor', then 5 minutes of hold, then a new offer, then another supervisor. Recognise the pattern by the second loop and break it: 'I appreciate the effort. Please proceed with cancellation. I will not change my mind today.'",
33
+ "Equipment must be returned to stop billing on it. Get the return method (UPS pre-paid label, store drop-off at named store, mail-in kit) IN WRITING with a tracking expectation.",
34
+ "Recognise wrong-queue early: 'customer care' often won't process cancellations — only the 'account services' or 'cancellation' team can. Ask to transfer rather than re-stating the goal a third time.",
35
+ "'Cancelled' is a status, not a sentence. A rep saying 'okay, you're all set' is not cancellation — a confirmation number you can quote back to a billing dispute is. Until you have the number, the account is open.",
36
+ "Reframed-save patterns to refuse on sight: 'courtesy pause', 'temporary disconnect', 'free month then cancel', 'we'll cancel after one more cycle to use up your credits', 'I'll downgrade you to the cheapest plan and then we'll cancel later'. All of these are saves dressed as cancellations and they ALL leave the account billable."
37
+ ],
38
+ "phrases": {
39
+ "opener": "Hi, I'm calling to cancel my service. Account [number], account holder [name]. I've made my decision — please connect me to whoever processes cancellations.",
40
+ "queue_check": "Are you the cancellation / account-services team, or general care? I'd like to be with whoever can actually close the account.",
41
+ "transfer_request": "Could you do a warm transfer to cancellations and stay on the line until they pick up? I don't want to lose my hold position.",
42
+ "decline_retention_polite": "Thank you, but I've already made the decision. Please proceed with cancellation — I really don't want to take your time on an offer I can't accept.",
43
+ "decline_retention_firm": "I'm sure there are more offers, but I'm not considering them today. If you can't cancel from where you are, please transfer me to someone who can — I'd like to wrap this up.",
44
+ "set_cancel_date": "I'd like the effective cancel date to be [last day of current billing cycle]. I understand the bill is not prorated, so I want to use the full cycle I've already paid for.",
45
+ "etf_question": "Am I under contract? If yes, what's the ETF, and is there any condition under which it's waived — moving outside the service footprint, deployment, death-in-family?",
46
+ "ask_equipment_return": "How do I return the equipment — UPS pre-paid label, in-store, or mail-in kit? I'd like the method and a tracking expectation in writing.",
47
+ "confirm_no_recurring": "After cancellation, confirm that NO recurring charges will continue. Specifically: no equipment lease, no protection plan, no monitored security, no add-ons I might have forgotten.",
48
+ "ask_final_bill": "What will the final bill look like — amount, date issued, due date? Are there any prorated credits I should expect, or just a closing statement?",
49
+ "lock_in_writing": "Please email me confirmation now with: cancellation confirmation number, effective cancel date, equipment return method and deadline, final bill amount, any ETF. I want all of it in writing before we hang up.",
50
+ "graceful_close": "Thanks — cancellation confirmation [number], effective [date], equipment to be returned via [method] by [deadline], final bill $[amount] due [date]. I'll watch for the email."
51
+ },
52
+ "tactics": [
53
+ {
54
+ "name": "State 'cancel' immediately",
55
+ "when": "First sentence after greeting.",
56
+ "script": "Use the `opener`. The word 'cancel' is the routing keyword for retention queue placement. Vague phrasing wastes the first 5 minutes.",
57
+ "priority": 1
58
+ },
59
+ {
60
+ "name": "Recognise wrong-queue within 60 seconds",
61
+ "when": "Rep starts running offers without first acknowledging cancellation intent.",
62
+ "script": "Use `queue_check` and `transfer_request`. Cancellations / account services has authority to close; general care often does not.",
63
+ "priority": 2
64
+ },
65
+ {
66
+ "name": "Decline without engaging",
67
+ "when": "Retention offers begin.",
68
+ "script": "Use `decline_retention_polite` once. If a second offer follows, use `decline_retention_firm`. Don't counter-offer, don't explain why — every justification is a hook for the next branch.",
69
+ "priority": 3
70
+ },
71
+ {
72
+ "name": "Break the supervisor loop",
73
+ "when": "Rep starts a second 'let me check with my supervisor' cycle.",
74
+ "script": "'Thanks, I know you're trying — I'm not changing my mind today. Please go ahead and cancel; if you can't do that yourself, please transfer me to someone who can.' Stay polite, stay firm, stay on script.",
75
+ "priority": 4
76
+ },
77
+ {
78
+ "name": "Time the cancel date to the cycle",
79
+ "when": "Effective date is being entered.",
80
+ "script": "Use `set_cancel_date`. The user already paid for the current cycle — use every day of it. Mid-cycle cancellation usually means losing service AND no refund.",
81
+ "priority": 5
82
+ },
83
+ {
84
+ "name": "Confirm equipment return logistics",
85
+ "when": "Before ending the call.",
86
+ "script": "Use `ask_equipment_return`. Unreturned equipment turns into a $100-$500 charge on the final bill — every device, every remote, every power adapter."
87
+ },
88
+ {
89
+ "name": "Hunt for hidden recurring charges",
90
+ "when": "Before the close.",
91
+ "script": "Use `confirm_no_recurring`. Many cancellations leave protection plans, equipment leases, or security monitoring still billing. Ask explicitly for each."
92
+ },
93
+ {
94
+ "name": "Lock everything in writing",
95
+ "when": "Before hanging up.",
96
+ "script": "Use `lock_in_writing`. Cancellation disputes 30 days later are almost always lost by callers who don't have the written confirmation number."
97
+ },
98
+ {
99
+ "name": "Refuse fake-cancellation framings",
100
+ "when": "Rep proposes pause / hold / downgrade / 'we'll cancel later' / 'I've noted you want to cancel' / 'I've started the cancellation process and you can hang up' — ANY language that does not include a CONFIRMATION NUMBER and an EFFECTIVE-CANCEL DATE.",
101
+ "script": "'I'd like to be clear: I need a cancellation confirmation number and an effective date today. A pause, a hold, a noted intent, or a future-dated cancellation isn't what I'm asking for. If we don't have a confirmation number yet, the account is still open and I'm still on the line.' Stay until both exist.",
102
+ "priority": 6,
103
+ "decision_point": "If the rep says 'the system will generate the confirmation number after we hang up' — that is almost always a save. Refuse to hang up: 'I'd rather wait. Can you refresh the screen now, or transfer me to someone who has the number on their side?' Real cancellations produce a confirmation number immediately."
104
+ },
105
+ {
106
+ "name": "Verify any 'supervisor approval' or 'system override' invoked verbally",
107
+ "when": "Rep says any version of 'my supervisor approved a special exception', 'I got a one-time override', 'I escalated and they cleared it' — without that person being on the call.",
108
+ "script": "'Could I get the supervisor's name and ID, and confirm the override is keyed into the account with a reference number I can quote? If it's not in the system, it's not real on my end either.' If the rep won't produce both — treat the 'approval' as not having happened and re-baseline to the prior position.",
109
+ "priority": 7
110
+ }
111
+ ],
112
+ "boundaries": [
113
+ "Do NOT agree to a 'pause' or 'seasonal hold' if the user wanted to cancel. Pause keeps an account open and often resumes auto-billing later.",
114
+ "Do NOT accept a 'we'll cancel at the end of the term' if user wanted to cancel now. That defers the decision and re-opens the negotiation surface.",
115
+ "Do NOT throw away equipment to skip the return. Unreturned device fees can exceed $400.",
116
+ "Do NOT mention competitor pricing during a cancellation call — that re-opens the negotiation. Save it for `negotiate-bill-reduction`.",
117
+ "Do NOT cancel autopay before the final bill clears. Autopay-cancel + unpaid final bill = collections."
118
+ ],
119
+ "success_signals": [
120
+ "Cancellation confirmation number issued.",
121
+ "Effective cancel date is end-of-cycle, not mid-cycle.",
122
+ "Equipment return method + deadline confirmed in writing.",
123
+ "Final bill amount disclosed and ETF status confirmed.",
124
+ "Written confirmation arrives during or right after the call."
125
+ ],
126
+ "failure_signals": [
127
+ "Rep insists they cannot cancel — only escalate offers.",
128
+ "More than two retention loops without progress.",
129
+ "Cancel date offered is several billing cycles in the future.",
130
+ "Rep won't disclose ETF in dollars.",
131
+ "No written confirmation after the call.",
132
+ "Rep says 'you're all set' / 'I've started the process' / 'system will finalize after we hang up' but cannot produce a confirmation number on the call.",
133
+ "Rep claims a supervisor or system override granted special terms but cannot name the supervisor and reference number.",
134
+ "Rep frames the outcome as a 'pause', 'hold', 'downgrade', or 'future cancel' instead of an immediate close — that's a save coded as a cancel."
135
+ ],
136
+ "exit_strategy": {
137
+ "on_success": "Confirm all numbers, log the confirmation number, calendar the equipment-return deadline, and keep tracking on returned equipment until receipt is confirmed by the provider.",
138
+ "on_failure": "File a complaint with the FCC (broadband) or state PUC (cable/voice) — failure-to-cancel complaints are taken seriously. Simultaneously, send a written cancellation by certified mail to the provider's stated cancellation address (most TOS list one), which starts a legal record.",
139
+ "follow_ups": [
140
+ "Return equipment within the deadline. Photograph each item before drop-off and keep the receipt/tracking forever.",
141
+ "Watch first post-cancellation billing cycle for phantom charges.",
142
+ "If charges continue, dispute via the bank under 'service not received' AND escalate via the provider's executive customer-relations email.",
143
+ "After 60 days post-cancellation with no further charges: shred records (but keep the confirmation number)."
144
+ ]
145
+ },
146
+ "required_user_info": [
147
+ "Account number and account holder name",
148
+ "Billing zip code",
149
+ "Whether under contract; ETF amount if known",
150
+ "Complete list of installed equipment",
151
+ "Desired effective cancel date (end of current cycle)",
152
+ "Best email for written confirmation"
153
+ ],
154
+ "contributed_by": "utility-telecom agent (v0.9.87 community drop)",
155
+ "updated_at": "2026-05-20T06:09:47Z"
156
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "id": "cancel-policy-clean",
3
+ "name": "Cancel a Policy Without Surprise Pro-Rating or Short-Rate Fees",
4
+ "version": "1.0.1",
5
+ "category": "finance-admin",
6
+ "tags": [
7
+ "cancellation",
8
+ "pro-rate",
9
+ "short-rate",
10
+ "refund",
11
+ "phone-call",
12
+ "insurance"
13
+ ],
14
+ "description": "Cancel an insurance policy mid-term with full visibility into the refund (or unpaid balance), avoiding short-rate cancellation penalties, ensuring continuous coverage if switching carriers, and getting the cancellation confirmation in writing on the same call.",
15
+ "disclaimer": "Agent must NEVER admit fault, NEVER agree to a settlement on the operator's behalf, NEVER speculate about prior conditions, NEVER sign a release. All of those route through ask_operator.",
16
+ "context": {
17
+ "when_to_use": "User wants to cancel a policy mid-term — switching carriers, selling the insured property, life-event change, or no longer needing coverage. Use AFTER the user has either (a) bound the replacement policy or (b) confirmed they no longer need coverage.",
18
+ "preconditions": [
19
+ "Policy number and named-insured info ready.",
20
+ "Cancellation effective date decided (usually same day OR the date the replacement policy starts).",
21
+ "Replacement policy info ready if switching (carrier, policy number, effective date) — critical for auto and home where coverage gaps cause registration suspension or lender force-placement.",
22
+ "User has reviewed whether the policy has a short-rate cancellation clause vs pure pro-rate."
23
+ ],
24
+ "estimated_call_duration_minutes": 15
25
+ },
26
+ "principles": [
27
+ "Pro-rate refund = fair; short-rate refund = penalty. Know which your policy uses before calling. Personal auto in most states is pure pro-rate; commercial and some specialty lines are short-rate.",
28
+ "Coverage MUST be continuous for auto (state law) and home (lender requirement). Cancel-effective-date should be ≥ replacement-effective-date, NEVER less.",
29
+ "Cancellation by phone is fine in most states, but the carrier must give a WRITTEN cancellation confirmation. Demand it on the call.",
30
+ "Retention departments have unlock authority. If the user is cancelling because of price, the carrier may surprise-discount to retain. Decide upfront whether the user is open to staying.",
31
+ "Auto-renew billing continues until cancellation is processed — get an effective date in writing or the next charge will hit."
32
+ ],
33
+ "phrases": {
34
+ "opener": "Hi, I'd like to cancel policy [number], effective [date]. Could you walk me through the refund calculation and whether this is pro-rate or short-rate before we process?",
35
+ "ask_calc_method": "Is this cancellation pro-rated or short-rated? If short-rate, what's the penalty percentage, and is there a way to convert to pro-rate?",
36
+ "ask_continuous_coverage": "I have a replacement policy starting [date] with [carrier]. I want to make sure there's no gap — please set cancellation effective on [date] so coverage is continuous.",
37
+ "decline_retention_offer": "Thanks, but I've already bound the replacement — let's go ahead with the cancellation as scheduled.",
38
+ "consider_retention_offer": "That's a meaningful change. Could you put that offer in writing so I can compare it to my new policy before deciding? I'm still going to need to cancel today if we don't proceed.",
39
+ "request_confirmation_number": "Could I have the cancellation confirmation number and the date the written confirmation will arrive?",
40
+ "ask_refund_method_and_timing": "How will the refund be issued — check, ACH, credit to card — and when should I expect it?",
41
+ "ask_auto_renew_disable": "Please also turn off auto-renew and any auto-draft from my account, effective immediately.",
42
+ "graceful_close": "Thank you. To confirm: policy cancelled effective [date], confirmation number [N], refund of [amount] via [method] by [date], written confirmation by [date], auto-renew disabled. Thanks for your help."
43
+ },
44
+ "tactics": [
45
+ {
46
+ "name": "Open with the effective date AND the calc-method question",
47
+ "when": "First substantive turn.",
48
+ "script": "Use the `opener` phrase + `ask_calc_method`. Setting the date right and clarifying the math upfront avoids 80% of cancellation disputes.",
49
+ "priority": 1
50
+ },
51
+ {
52
+ "name": "Lock continuous coverage",
53
+ "when": "Switching carriers.",
54
+ "script": "Use the `ask_continuous_coverage` phrase. Cancel-effective-date = replacement-effective-date (not earlier). For auto, even a one-day lapse can suspend registration in some states.",
55
+ "priority": 2
56
+ },
57
+ {
58
+ "name": "Handle the retention pitch",
59
+ "when": "Rep offers a discount or 'one-time loyalty rate' to keep the policy.",
60
+ "script": "Either `decline_retention_offer` (if the replacement is already bound) or `consider_retention_offer` (if the replacement isn't yet bound and the offer might be better). Don't get talked out of cancellation if the replacement is already in force — that creates double-coverage and disputes.",
61
+ "priority": 3
62
+ },
63
+ {
64
+ "name": "Confirm refund mechanics",
65
+ "when": "Mid-call.",
66
+ "script": "Use the `ask_refund_method_and_timing` phrase. Refunds via check can take 4-6 weeks; via ACH 5-10 business days. Knowing which sets expectations.",
67
+ "priority": 4
68
+ },
69
+ {
70
+ "name": "Kill auto-renew and auto-draft",
71
+ "when": "Before ending the call.",
72
+ "script": "Use the `ask_auto_renew_disable` phrase. The #1 surprise charge post-cancellation is the next auto-draft hitting before cancellation processed.",
73
+ "priority": 5
74
+ },
75
+ {
76
+ "name": "Get the confirmation number",
77
+ "when": "Before ending the call.",
78
+ "script": "Use the `request_confirmation_number` phrase. No confirmation number = no proof you cancelled. The next billing cycle becomes the user's problem.",
79
+ "priority": 6
80
+ },
81
+ {
82
+ "name": "Demand written confirmation",
83
+ "when": "Before ending the call.",
84
+ "script": "Verbal cancellation + confirmation number is good; verbal + written confirmation letter/email is better. Most carriers can send within 24 hours.",
85
+ "priority": 7
86
+ }
87
+ ],
88
+ "boundaries": [
89
+ "Do NOT cancel with an effective date earlier than the replacement-policy effective date. A coverage gap is worse than paying a few extra days of premium.",
90
+ "Do NOT cancel auto coverage without a replacement bound, unless the vehicle is genuinely off the road and the registration is being suspended/sold/donated.",
91
+ "Do NOT cancel home coverage without coordinating with the mortgage lender — force-placed insurance is brutally expensive.",
92
+ "Do NOT accept a retention discount on this call without checking it against the replacement quote — `ask_operator` if the offer is significant.",
93
+ "Do NOT sign or verbally agree to any 'release of claims' that the carrier slips into the cancellation process. Cancellation does not require a release.",
94
+ "Do NOT cancel if there's an open claim being processed unless the operator has explicitly approved it — cancellation can complicate the claim."
95
+ ],
96
+ "success_signals": [
97
+ "Confirmation number issued on the call.",
98
+ "Effective date matches the user's preference and provides continuous coverage.",
99
+ "Refund amount, method, and timing disclosed.",
100
+ "Auto-renew and auto-draft disabled.",
101
+ "Written confirmation committed.",
102
+ "No short-rate penalty (or penalty is documented if unavoidable)."
103
+ ],
104
+ "failure_signals": [
105
+ "Rep won't issue a confirmation number on the call.",
106
+ "Rep insists on a future effective date that doesn't align with the user's need.",
107
+ "Rep applies a short-rate penalty when the policy/state requires pro-rate.",
108
+ "Rep refuses to disable auto-renew."
109
+ ],
110
+ "exit_strategy": {
111
+ "on_success": "Read back: effective date, confirmation number, refund amount/method/timing, written-confirmation ETA, auto-renew status. Email a recap to the user. Calendar refund-arrival date.",
112
+ "on_failure": "Document. If short-rate is applied incorrectly: route to `ask_operator` with the state's cancellation regulation. If the rep refuses to disable auto-renew: cancel the auto-draft at the bank as a backup. If written confirmation never arrives: send a certified-mail cancellation letter as the legal record.",
113
+ "follow_ups": [
114
+ "Email a recap with confirmation number within 1 hour.",
115
+ "Calendar refund arrival date.",
116
+ "Save the written confirmation when it arrives.",
117
+ "If switching carriers, send proof of cancellation to the new carrier and any lienholders.",
118
+ "Verify the next billing cycle doesn't auto-draft. Dispute with the bank if it does."
119
+ ]
120
+ },
121
+ "required_user_info": [
122
+ "Policy number and named-insured info",
123
+ "Desired effective cancellation date",
124
+ "Replacement policy info if switching (carrier, policy #, effective date)",
125
+ "Confirmation that no open claims are pending (or operator approval to cancel anyway)",
126
+ "Preference on engaging retention offers (open / not open)"
127
+ ],
128
+ "contributed_by": "insurance-claims agent (v0.9.87 community drop)",
129
+ "updated_at": "2026-05-20T06:09:47Z"
130
+ }