@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,138 @@
1
+ {
2
+ "id": "personal-trainer-discovery",
3
+ "name": "Personal-Trainer / Coach Discovery Call: Certifications, Methodology, Fit",
4
+ "version": "1.0.1",
5
+ "category": "other",
6
+ "tags": [
7
+ "fitness",
8
+ "personal-trainer",
9
+ "coach",
10
+ "certification",
11
+ "intake",
12
+ "discovery-call",
13
+ "phone-call",
14
+ "professional-services"
15
+ ],
16
+ "description": "Place a discovery call with a personal trainer, strength coach, or remote fitness coach to verify certifications, probe methodology, surface package structure / commitment lengths / cancellation, and assess fit BEFORE the operator pays for a package or signs a multi-month commitment.",
17
+ "disclaimer": "Personal training is an unregulated field in most jurisdictions. 'Certified' alone is meaningless — the issuing body matters. This skill does not give medical clearance; if the operator has cardiac, orthopaedic, neurological, or pregnancy-related concerns, they should clear with a physician first.",
18
+ "context": {
19
+ "when_to_use": "Operator is choosing between trainers (in-person, hybrid, or online-only) and wants to vet a candidate before paying for a package. Useful for new-to-training operators, return-from-injury, sport-specific goals, weight-loss / body-composition goals, and post-rehab strength work.",
20
+ "preconditions": [
21
+ "Operator has clear goals stated in 2-3 sentences (e.g. 'add 10 lb of muscle in 6 months', 'run sub-25 5k', 'return to lifting after L4-L5 disc protrusion cleared by PT').",
22
+ "Operator has training history summary (years training, current routine, recent injuries).",
23
+ "Operator has a realistic time-per-week and budget-per-month range.",
24
+ "Operator has medical clearance for vigorous exercise, OR a flagged contraindication for the trainer to acknowledge."
25
+ ],
26
+ "estimated_call_duration_minutes": 20
27
+ },
28
+ "principles": [
29
+ "Certification body matters: NSCA-CSCS, NASM-CPT, ACSM-CPT, ACE, PN, RKC, USA-W are reputable; weekend-warrior certificates are not. Coaches without exam-based certs need a strong track record to compensate.",
30
+ "Methodology fit is more predictive than certifications. A great hypertrophy coach is wrong for an ultrarunner. Ask what kind of clients the coach gets results with.",
31
+ "Programming, not personality, is what the operator is paying for. Ask to see a sample programme or block structure for someone with similar goals.",
32
+ "Communication channels and response times define the experience. Slack, app, text, weekly check-ins — pin them down.",
33
+ "Multi-month packages without a kill-switch are a major risk in a deregulated market. Cancellation, refunds, and credit-for-unused sessions belong in writing.",
34
+ "Scope of practice. A trainer is not a physiotherapist, dietitian, or psychologist. Coaches who 'diagnose your bloodwork' or write meal plans without a dietitian credential are out of scope."
35
+ ],
36
+ "phrases": {
37
+ "opener": "Hi — calling for someone who's looking for a coach for [goal in one sentence]. Got a few minutes? I'd like to ask a bit about your background and how you usually work with people.",
38
+ "credentials_probe": "Could you tell me which certifications you hold and from which bodies, plus any specialty creds — corrective exercise, pre/post-natal, athletic performance, nutrition? And how long you've been coaching full-time?",
39
+ "methodology_probe": "What's your programming philosophy in 2-3 sentences? Who's the operator-profile you get the strongest results with, and what does that programme typically look like?",
40
+ "similar_client_probe": "Could you describe a recent client similar to the operator — their starting point, the programme you ran, and the outcome at 12 weeks? Anonymous is fine.",
41
+ "scope_probe": "What's in scope and out of scope for your coaching — programming, technique coaching via video, nutrition guidance, recovery, sleep? And where do you refer out?",
42
+ "package_probe": "How do packages work — month-to-month, 3-month minimum, 6-month commitment? What's billed, when, and through what platform?",
43
+ "cancellation_probe": "What's the cancellation policy mid-package? Can the operator pause for travel or injury? Are unused sessions refundable or credited?",
44
+ "communication_probe": "What channels do we use between sessions, and what's your realistic response time? How often are programme reviews and adjustments?",
45
+ "medical_clearance_probe": "The operator has [specific consideration: 'recent disc injury cleared by PT', 'mild hypertension', 'past ankle reconstruction']. How do you typically work with someone in that situation, and do you require physician clearance?",
46
+ "sample_request": "Could you send a sample first-week programme for an operator with these goals, plus a one-page bio with your certifications and a couple of references?",
47
+ "stall_to_check": "Let me share the package details with the operator before we commit — they'll want to see the cancellation terms in writing.",
48
+ "graceful_close": "Thank you — please email a sample programme, the package terms in writing, and the cancellation policy. The operator will review and follow up within [timeframe]."
49
+ },
50
+ "tactics": [
51
+ {
52
+ "name": "Verify certifications and tenure",
53
+ "when": "Opening 3 minutes.",
54
+ "script": "Use `credentials_probe`. Note any reputable body (NSCA, NASM, ACSM, ACE, PN, RKC). Be politely sceptical of weekend-only certs as the sole credential.",
55
+ "priority": 1
56
+ },
57
+ {
58
+ "name": "Probe methodology with a real comparable",
59
+ "when": "After credentials.",
60
+ "script": "Use `methodology_probe` and `similar_client_probe`. The pattern is: who do you serve best, what programme do you actually run, what did the last similar client's 12 weeks look like? Vague answers are a signal.",
61
+ "priority": 2
62
+ },
63
+ {
64
+ "name": "Stay in scope",
65
+ "when": "Mid-call.",
66
+ "script": "Use `scope_probe`. Coaches who write meal plans (without RD credential), interpret bloodwork, or treat injuries are out of bounds. A good coach knows where to refer.",
67
+ "priority": 3
68
+ },
69
+ {
70
+ "name": "Surface medical considerations early",
71
+ "when": "Before discussing programming detail.",
72
+ "script": "Use `medical_clearance_probe` for any flagged concern. A coach who responds 'sure I can train through that' without clearance or modification protocol is a red flag.",
73
+ "priority": 4
74
+ },
75
+ {
76
+ "name": "Package and cancellation in writing",
77
+ "when": "Money comes up.",
78
+ "script": "Use `package_probe` and `cancellation_probe`. Get the cancellation policy in writing before any payment. Refundable / credit-for-unused / pause-for-travel are the three knobs to confirm.",
79
+ "priority": 5
80
+ },
81
+ {
82
+ "name": "Request a sample programme",
83
+ "when": "Late in the call.",
84
+ "script": "Use `sample_request`. A coach who has nothing to show is either new or coasting. A one-week sample isn't proprietary — it's a sales tool."
85
+ },
86
+ {
87
+ "name": "Defer commitment",
88
+ "when": "Coach pitches a discount for signing today.",
89
+ "script": "Use `stall_to_check`. 'Sign now and save' is a sales tactic. Real coaches honour their pricing for at least 48 hours."
90
+ }
91
+ ],
92
+ "boundaries": [
93
+ "Do NOT sign a multi-month commitment or pay for a package mid-call. Use ask_operator.",
94
+ "Do NOT provide credit card or bank details to 'hold the spot'. Reputable coaches do not require deposits to schedule a first paid session.",
95
+ "Do NOT share the operator's full medical history with a coach who lacks the credentials to act on it. Share what's relevant to programming.",
96
+ "Do NOT accept nutrition prescription or bloodwork interpretation from a coach without dietitian / clinical credentials.",
97
+ "Do NOT bypass medical clearance the operator's physician has indicated is needed.",
98
+ "Do NOT engage a coach whose methodology centres on supplements they sell, MLM products, or proprietary food / device purchases."
99
+ ],
100
+ "success_signals": [
101
+ "Verifiable certifications from reputable bodies, named on the call.",
102
+ "Clear ideal-client profile that maps to the operator's goal.",
103
+ "Specific recent client comparable, with starting point, programme, and outcome.",
104
+ "Scope clearly bounded — refers out for nutrition / rehab / mental health.",
105
+ "Written package terms with cancellation, refund / credit, and pause clauses.",
106
+ "Sample programme will be sent before commitment.",
107
+ "Acknowledges medical considerations with a sensible plan (modify, clear with physician, refer)."
108
+ ],
109
+ "failure_signals": [
110
+ "Vague or unverifiable credentials.",
111
+ "Cannot describe a typical programme structure or block.",
112
+ "Multi-month commitment with no cancellation or pause language.",
113
+ "Out-of-scope offers (nutrition prescription, bloodwork reading, supplement sales).",
114
+ "Discount-pressure to sign on the call.",
115
+ "Dismissive of operator's flagged injury, condition, or physician guidance.",
116
+ "Refusal to share a sample programme or references."
117
+ ],
118
+ "exit_strategy": {
119
+ "on_success": "Confirm coach will email: sample first-week programme, bio with certifications, written package terms, cancellation policy, references, and the platform/app stack. Operator reviews and decides within [timeframe]. Note rate, billing cadence, communication channels, and named scope.",
120
+ "on_failure": "Politely close. If the failure was scope-related, ask if the coach can refer to a colleague who handles the operator's goal. Report back with specifics on why this candidate isn't a fit.",
121
+ "follow_ups": [
122
+ "Email the operator: coach name, certifications, methodology fit assessment, package terms, cancellation policy, sample programme attached, red/green flags, recommended next step.",
123
+ "If proceeding: schedule the first paid session AFTER package terms are reviewed; never before.",
124
+ "Calendar a 4-week and 12-week check-in to assess fit independently of the coach's self-assessment."
125
+ ]
126
+ },
127
+ "required_user_info": [
128
+ "Goal in 2-3 sentences: outcome + deadline + constraint",
129
+ "Training history: years training, current routine, performance markers",
130
+ "Recent or ongoing injuries / medical considerations and any physician clearance status",
131
+ "Time available per week and preferred days/times",
132
+ "Budget per month and willingness for a multi-month commitment",
133
+ "In-person, hybrid, or fully remote preference",
134
+ "Operator's preferred communication channels and response-time expectations"
135
+ ],
136
+ "contributed_by": "professional-intake agent (v0.9.87 community drop)",
137
+ "updated_at": "2026-05-20T06:09:47Z"
138
+ }
@@ -0,0 +1,134 @@
1
+ {
2
+ "id": "pharmacy-callback",
3
+ "name": "Pharmacy Callback: Prior Auth, Generic Substitution, Drug Interactions",
4
+ "version": "1.0.0",
5
+ "category": "medical-admin",
6
+ "tags": [
7
+ "pharmacy",
8
+ "prior-authorization",
9
+ "substitution",
10
+ "interactions",
11
+ "phone-call",
12
+ "healthcare"
13
+ ],
14
+ "description": "Handle a callback FROM (or TO) the operator's pharmacy when they flag a prior-auth requirement, propose a generic / brand / therapeutic substitution, or raise a drug-interaction concern. Get the pharmacy unblocked without making clinical decisions on the operator's behalf.",
15
+ "disclaimer": "Not medical advice. Agent must never offer diagnoses, dosing recommendations, or treatment changes. Surface those decisions to the operator via ask_operator. Substitution decisions and interaction resolutions are ALWAYS clinical and require the prescribing provider.",
16
+ "context": {
17
+ "when_to_use": "Pharmacy has left a voicemail, texted, or sent a portal message about a prescription that needs additional action: PA required, suggested substitution (generic / therapeutic equivalent / different formulation), or flagged interaction with another medication on file. Operator forwards to agent for triage and admin work.",
18
+ "preconditions": [
19
+ "Operator's name, DOB (read-only), pharmacy + branch.",
20
+ "The specific medication in question — name, strength, dose form, exactly as the operator described or as it appears on the prescription.",
21
+ "Prescriber name + clinic.",
22
+ "Operator's full current medication list (for interaction context — DO NOT use to make clinical calls; pass to pharmacist if asked).",
23
+ "Insurance plan + member ID (read-only) — needed for PA routing.",
24
+ "Operator's preference: brand-only, generic-fine, or unknown.",
25
+ "Voicemail or text content if the pharmacy reached out first."
26
+ ],
27
+ "estimated_call_duration_minutes": 10
28
+ },
29
+ "principles": [
30
+ "There are three categories of pharmacy callback, and the right response differs sharply: (1) PA paperwork — admin task, agent can drive; (2) substitution proposal — CLINICAL, agent surfaces to operator + prescriber; (3) interaction flag — CLINICAL, agent gets details + routes to prescriber/pharmacist.",
31
+ "Pharmacy is allowed to dispense the GENERIC of what the prescriber wrote unless the prescription says 'Dispense As Written' or the operator/prescriber has expressed brand preference. That's process. But ANY OTHER substitution (different drug, different strength, different formulation) requires prescriber authorization.",
32
+ "When the pharmacy says 'the doctor changed your prescription', they may mean (a) the prescriber actually sent an updated e-script, or (b) the pharmacy suggested a change and is treating tentative as final. ALWAYS verify with the prescriber's office.",
33
+ "Pharmacists are clinical professionals — they're not making things up when they flag an interaction. Take it seriously, get the details, route to the prescriber. But the AGENT does not adjudicate.",
34
+ "Pharmacy callbacks that get ignored result in: PAs that time out, prescriptions auto-reversed off the queue, and operators discovering empty bottles on a Friday night. Close the loop within 24 hours."
35
+ ],
36
+ "phrases": {
37
+ "opener": "Hi, I'm calling back on behalf of [Operator] in response to the message about [medication]. Can you walk me through what's needed?",
38
+ "diagnose_callback_type": "Just to align — is this about (a) a prior authorization, (b) a substitution suggestion, or (c) a drug-interaction concern? I want to make sure I route this correctly on our end.",
39
+ "pa_admin_track": "For the prior auth — what's the form / portal the prescriber needs to use, and is there anything we can do from the patient side to help? I'll loop in the prescriber's office as soon as we hang up.",
40
+ "substitution_clarify": "What exactly is being proposed — substitution from [original drug] to [proposed]? Is this a generic-for-brand swap, or a different molecule / therapeutic class? And who is proposing it — the prescriber, or the pharmacy?",
41
+ "substitution_decline_holding": "Until we can verify with the prescriber, please hold the original prescription as written. Don't dispense a substitution today. The operator will follow up after speaking with their doctor.",
42
+ "interaction_detail_request": "Can I speak with the pharmacist? I want to make sure I capture exactly which medications interact, the severity, and what the pharmacist recommends — so I can pass that to the prescriber accurately.",
43
+ "request_prescriber_loop_in": "Could you send the prescriber a note about this through your system as well? That way both of us are pinging them, and they have the question in their EMR.",
44
+ "ask_about_bridge_supply": "While we sort this out, can the operator get a few days of supply to bridge? They have [X doses] left.",
45
+ "stall_research": "One moment — let me check the medication list the operator gave me.",
46
+ "verify_readback": "So: callback was about [PA / substitution / interaction] for [medication]. Action on our side: contact prescriber to [authorize PA / approve or decline substitution / address interaction]. Pharmacy will [hold script / dispense as-written / await prescriber response]. Reference [number]. Right?",
47
+ "graceful_close": "Thanks for the call. I'll get back to you within [timeline] after I've reached the prescriber. Please don't dispense any change without their authorization."
48
+ },
49
+ "tactics": [
50
+ {
51
+ "name": "Identify which of the three callback types this is",
52
+ "when": "First substantive turn.",
53
+ "script": "Use `diagnose_callback_type`. Each type has a different downstream workflow. Mixing them up wastes time and risks acting on a clinical question administratively.",
54
+ "priority": 1
55
+ },
56
+ {
57
+ "name": "PA: take the admin baton",
58
+ "when": "Callback is a prior-auth requirement.",
59
+ "script": "Use `pa_admin_track`. Get: which form, which portal, fax number for prescriber to send to. Then call the prescriber's office (chain to `referral-prior-authorization` skill). Agent can drive this — it's paperwork.",
60
+ "priority": 2
61
+ },
62
+ {
63
+ "name": "Substitution: HOLD the script, route to prescriber",
64
+ "when": "Callback proposes any substitution beyond simple generic-for-brand of the same molecule.",
65
+ "script": "Use `substitution_clarify` to capture exactly what's being proposed and by whom. Then use `substitution_decline_holding` — explicitly instruct the pharmacy NOT to dispense the substitution. Surface to operator AND to prescriber's office. The prescriber decides.",
66
+ "priority": 3
67
+ },
68
+ {
69
+ "name": "Interaction: escalate to pharmacist, then prescriber",
70
+ "when": "Callback flags a drug interaction.",
71
+ "script": "Use `interaction_detail_request`. Capture: interacting medication(s), severity (mild / moderate / major / contraindicated), pharmacist's recommendation. Surface to operator immediately AND route to prescriber. Do NOT make any 'just skip a dose' or 'switch to X' decision on this call.",
72
+ "priority": 4
73
+ },
74
+ {
75
+ "name": "Pause and re-verify on 'doctor changed it'",
76
+ "when": "Pharmacy claims the prescriber has already authorized a change.",
77
+ "script": "Hard boundary. Do NOT accept this on the pharmacy's word, no matter how confident the rep sounds. Hang up, call the prescriber, verify the change exists in their EMR with date and prescriber name. Substitution-by-claim is a known error category.",
78
+ "priority": 5
79
+ },
80
+ {
81
+ "name": "Ask for a bridge supply if the resolution will take days",
82
+ "when": "Operator is running out of medication while waiting.",
83
+ "script": "Use `ask_about_bridge_supply`. Many pharmacies can provide 3-7 day emergency supplies of non-controlled chronic medications. Worth asking; costs nothing.",
84
+ "priority": 6
85
+ },
86
+ {
87
+ "name": "Document the pharmacist's name and findings",
88
+ "when": "Interaction or substitution discussion.",
89
+ "script": "Get the pharmacist's name on record. When the prescriber gets the question, knowing 'Pharmacist Jane Doe at [pharmacy] flagged [interaction]' is more actionable than 'the pharmacy called'.",
90
+ "priority": 7
91
+ }
92
+ ],
93
+ "boundaries": [
94
+ "NEVER share or guess the operator's SSN, DOB, or member ID — read back only what the operator explicitly provided.",
95
+ "NEVER accept a 'your doctor changed your prescription' claim from the pharmacy — always verify with the prescriber's office directly. This is the single most consequential boundary on this skill.",
96
+ "NEVER authorise a substitution (brand→generic except where legally automatic; therapeutic substitution; strength change; formulation change) on the operator's behalf. ALL substitutions beyond direct generic equivalents require prescriber.",
97
+ "NEVER make a clinical judgment about drug interactions — even if you 'know' the operator takes the interacting medication and 'know' the standard advice. Route every interaction question to the prescriber/pharmacist.",
98
+ "NEVER agree to dispense a different medication, different strength, or different schedule, even on the operator's verbal agreement, without prescriber authorization.",
99
+ "NEVER tell the pharmacy what the operator's diagnosis is unless the operator has explicitly authorized that disclosure and it's directly relevant (e.g. for PA paperwork the prescriber will sign)."
100
+ ],
101
+ "success_signals": [
102
+ "Callback type correctly identified.",
103
+ "PA: prescriber looped in with the right form/portal info, reference logged.",
104
+ "Substitution: pharmacy on HOLD, prescriber asked to decide, operator informed.",
105
+ "Interaction: pharmacist's name + interaction details captured, prescriber notified.",
106
+ "Bridge supply secured if operator was running low."
107
+ ],
108
+ "failure_signals": [
109
+ "Pharmacy refuses to hold script and is about to dispense a substitution the prescriber hasn't authorized — escalate to pharmacy manager and to prescriber on-call simultaneously.",
110
+ "Interaction is potentially severe and prescriber unreachable — surface to operator immediately as clinical urgency.",
111
+ "PA paperwork in indefinite loop — escalate via `referral-prior-authorization` skill.",
112
+ "Pharmacy and prescriber give contradictory accounts and operator can't get medication."
113
+ ],
114
+ "exit_strategy": {
115
+ "on_success": "Confirm: callback type, action taken, owner of next step, ETA, and what the pharmacy will do in the interim (hold / fill as-written / bridge fill). Operator knows what's pending and what to expect.",
116
+ "on_failure": "Politely close. Report to operator: who said what, what's blocking, recommended escalation (prescriber on-call / pharmacy manager / clinical urgency). Do not pretend resolution if there is none.",
117
+ "follow_ups": [
118
+ "Call prescriber's office within 1 business day for substitution/interaction questions.",
119
+ "Track PA through to approval (use `referral-prior-authorization` skill).",
120
+ "Follow up with pharmacy once prescriber has responded — confirm script is unstuck."
121
+ ]
122
+ },
123
+ "required_user_info": [
124
+ "Operator's name, DOB (read-only), pharmacy + branch",
125
+ "Medication name, strength, dose form (operator's words)",
126
+ "Prescriber name + clinic",
127
+ "Operator's full current medication list (for context only)",
128
+ "Insurance plan + member ID (read-only)",
129
+ "Brand vs generic preference if known",
130
+ "Original pharmacy message content (voicemail/text/portal)"
131
+ ],
132
+ "contributed_by": "healthcare-navigator agent (v0.9.87 community drop)",
133
+ "updated_at": "2026-05-20T06:09:47Z"
134
+ }
@@ -0,0 +1,141 @@
1
+ {
2
+ "id": "pivot-mid-call",
3
+ "name": "Pivot Mid-Call When the Original Goal Is Unreachable",
4
+ "version": "1.0.0",
5
+ "category": "other",
6
+ "tags": [
7
+ "meta-skill",
8
+ "adaptive-strategy",
9
+ "phone-call",
10
+ "negotiation",
11
+ "goal-reframing",
12
+ "critical-reasoning"
13
+ ],
14
+ "description": "Recognise when the primary ask has hit a real (not invented) wall, and pivot to a different ask that is achievable, defensible, and worth the call's remaining minutes. Do not pretend the original goal is still alive; do not waste the call on dead negotiation.",
15
+ "disclaimer": null,
16
+ "context": {
17
+ "when_to_use": "Any call where the rep, after legitimate escalation and probing, cannot grant the primary ask. Especially common in: refund requests after a clear cutoff, plan changes blocked by contract, claims denied by a real exclusion, services unavailable in user's area.",
18
+ "preconditions": [
19
+ "Agent has already attempted escalation per `push-past-invented-policy`.",
20
+ "Agent has a clear understanding of the user's underlying need (not just the literal ask).",
21
+ "Agent has been authorised to negotiate within a range, not just to deliver a single request."
22
+ ],
23
+ "estimated_call_duration_minutes": 5
24
+ },
25
+ "principles": [
26
+ "The literal ask is the surface; the underlying need is the substance. Pivoting means finding a DIFFERENT surface that satisfies the same substance.",
27
+ "Pivot opportunities: credit instead of refund, future discount instead of past credit, service upgrade instead of price cut, fee waiver instead of monthly reduction, account note for future leverage instead of immediate concession.",
28
+ "Pivot only when the wall is REAL. Pivoting prematurely concedes leverage you still have.",
29
+ "When pivoting, name the pivot out loud. 'Okay — if the refund isn't possible, what IS on the table?' This invites the rep into co-design rather than continued refusal.",
30
+ "Document the pivot. A consolation outcome you can't verify is worth less than a primary outcome you can.",
31
+ "Some pivots are bad pivots — accepting a worse contract for a one-time credit, taking a free month that triggers an upsell. Run any pivot through `spot-bait-and-switch` before saying yes."
32
+ ],
33
+ "phrases": {
34
+ "name_the_wall": "It sounds like [primary ask] genuinely isn't available here. I want to make sure I heard that right.",
35
+ "invite_alternatives": "If that's off the table, what IS available? I'd rather leave this call with something useful than nothing.",
36
+ "propose_specific_pivot": "Would [alternative ask] be something you could do instead? It's not what I came for, but it gets us partway there.",
37
+ "soft_ladder": "I understand. Could we explore: (a) a one-time credit, (b) a future-bill credit, (c) waiving the [fee], or (d) a note on my account I can reference later?",
38
+ "document_pivot": "Great — could you read that back so I have it exactly, and give me a confirmation number?"
39
+ },
40
+ "tactics": [
41
+ {
42
+ "name": "Confirm the wall is real",
43
+ "when": "After at least one escalation has reaffirmed the refusal.",
44
+ "script": "Use `name_the_wall`. Forces the rep to confirm the no on the record — important if you ever escalate later. Also gives them one last chance to soften.",
45
+ "priority": 1
46
+ },
47
+ {
48
+ "name": "Open the pivot space",
49
+ "when": "Wall confirmed.",
50
+ "script": "Use `invite_alternatives`. Often the rep already has a pivot offer queued and was waiting for an opening.",
51
+ "priority": 2
52
+ },
53
+ {
54
+ "name": "Offer a ladder of pivots",
55
+ "when": "Rep doesn't volunteer alternatives.",
56
+ "script": "Use `soft_ladder`. Listing 3-4 specific options is easier for a rep to act on than 'anything else'. They'll often pick the one they can do.",
57
+ "priority": 3
58
+ },
59
+ {
60
+ "name": "Run the pivot through bait-and-switch checks",
61
+ "when": "Rep proposes a pivot.",
62
+ "script": "Before accepting, ask: what's the duration, what's the reversion, what's the contract impact, what's the bundle dependency. See `spot-bait-and-switch`.",
63
+ "priority": 4
64
+ },
65
+ {
66
+ "name": "Document the pivot in writing",
67
+ "when": "About to close.",
68
+ "script": "Use `document_pivot`. Verbal pivots evaporate. Confirmation numbers, dated emails, and account notes survive."
69
+ },
70
+ {
71
+ "name": "Bank a small win even if you wanted a big one",
72
+ "when": "Pivot is small but real.",
73
+ "script": "Accept it cleanly without grumbling. A $20 credit + a note on the account beats a 30-minute argument that ends in zero."
74
+ }
75
+ ],
76
+ "alternative_interpretations": [
77
+ {
78
+ "observation": "Rep firmly refuses the refund but mentions a 'one-time courtesy credit'.",
79
+ "consider": [
80
+ "Genuine pivot — they cannot do refund, can do credit, treat as success.",
81
+ "Pivot with strings: credit applied to next bill, but autopay enrollment required.",
82
+ "Smaller-than-asked: $10 credit vs. $80 refund — accept only if no better is available.",
83
+ "Setup for a larger upsell — 'I can also offer you...' incoming."
84
+ ],
85
+ "next_action": "Ask: amount, applied when, any conditions. Then decide."
86
+ },
87
+ {
88
+ "observation": "Rep offers a free service upgrade instead of a price cut.",
89
+ "consider": [
90
+ "Genuine value if the user actually wants the upgrade.",
91
+ "Trojan upsell — free for 3 months, then $15/mo unless cancelled.",
92
+ "Counts as 'engaged customer' for retention metrics — gets the rep off the hook without saving the user money.",
93
+ "Real but worthless — user has no use for the upgraded feature."
94
+ ],
95
+ "next_action": "Ask whether it's truly free for the life of the account, and whether it can be removed any time without penalty."
96
+ },
97
+ {
98
+ "observation": "Rep won't pivot at all — refuses primary ask AND won't suggest alternatives.",
99
+ "consider": [
100
+ "Wall is genuinely total; this rep cannot give anything.",
101
+ "Wrong department — pivots may be available from retention/loyalty/billing.",
102
+ "Bad rep day — try `reset-by-callback`.",
103
+ "User's account is in a state (collections, fraud review) that blocks all discretion."
104
+ ],
105
+ "next_action": "Ask explicitly: 'Is there a different team or department where a pivot would be possible?'"
106
+ }
107
+ ],
108
+ "boundaries": [
109
+ "Do NOT accept a pivot worse than no-deal (e.g., contract extension for a $5 credit).",
110
+ "Do NOT pivot without flagging to the operator if the user pre-authorised only the original ask.",
111
+ "Do NOT keep pivoting forever — two pivot rounds is usually the limit. Three is desperation.",
112
+ "Do NOT pretend the pivot is the original ask in the post-call report."
113
+ ],
114
+ "success_signals": [
115
+ "Rep proposes a pivot voluntarily.",
116
+ "Pivot has clear terms (amount, date, no strings).",
117
+ "Rep agrees to put pivot in writing.",
118
+ "User would have authorised the pivot if asked in advance."
119
+ ],
120
+ "failure_signals": [
121
+ "Rep refuses both primary and all alternatives.",
122
+ "Pivots offered all carry worse total terms than walking away.",
123
+ "Pivot 'credits' come with autopay/contract/bundle hooks the user hasn't authorised.",
124
+ "Pivot requires a separate call to a department that's closed."
125
+ ],
126
+ "exit_strategy": {
127
+ "on_success": "Accept the pivot, confirm in writing, flag clearly in the post-call report what was achieved vs. originally asked.",
128
+ "on_failure": "Walk away clean — no false-pivot acceptance. Report to operator with clarity about why the wall was real.",
129
+ "follow_ups": [
130
+ "If pivot was a future-dated credit, calendar a check that it actually appears.",
131
+ "If pivot was a 'note on the account', leverage it on the next interaction by reference."
132
+ ]
133
+ },
134
+ "required_user_info": [
135
+ "The underlying need, not just the literal ask.",
136
+ "Range of acceptable alternative outcomes (or authority to pivot at agent's discretion).",
137
+ "Whether the user wants to be re-consulted before accepting a pivot."
138
+ ],
139
+ "contributed_by": "critical-reasoning agent (v0.9.87 community drop)",
140
+ "updated_at": "2026-05-20T06:09:47Z"
141
+ }
@@ -0,0 +1,127 @@
1
+ {
2
+ "id": "port-mobile-number-survive-retention",
3
+ "name": "Port a Mobile Number Out — Surviving the Retention Reflex",
4
+ "version": "1.0.1",
5
+ "category": "subscription",
6
+ "tags": [
7
+ "telecom",
8
+ "mobile",
9
+ "port-out",
10
+ "number-portability",
11
+ "retention",
12
+ "phone-call",
13
+ "utility-telecom"
14
+ ],
15
+ "description": "Call the LOSING mobile carrier (or use their port-out PIN flow) to release a number to a new carrier, getting the account number + port-out PIN + zip code needed for the port — without getting stuck in a 45-minute retention save-the-line script.",
16
+ "disclaimer": "The actual port is initiated by the GAINING carrier, not the losing one. The losing carrier's only legal role is to provide the account number, port-out PIN, billing zip, and not block the port. If a rep claims they can 'process the port for you', that is incorrect — they cannot, and the framing is a stall.",
17
+ "context": {
18
+ "when_to_use": "User has chosen a new carrier and wants to bring their existing mobile number. Call the losing carrier ONLY to obtain port-out credentials; the actual port happens at the new carrier. Many carriers now provide the PIN in-app — try that first before calling.",
19
+ "preconditions": [
20
+ "User has chosen a new carrier and has an account / SIM (or eSIM QR) ready.",
21
+ "User knows the account number on the losing carrier and the account-holder's name exactly as it appears on the bill.",
22
+ "Billing zip code on file with the losing carrier.",
23
+ "User has paid off any device installment plan OR accepts that porting may accelerate the remaining balance.",
24
+ "User understands the number must be ACTIVE on the losing carrier at the moment of port (do not cancel before porting)."
25
+ ],
26
+ "estimated_call_duration_minutes": 20
27
+ },
28
+ "principles": [
29
+ "Try the app / web port-out PIN flow FIRST. AT&T, Verizon, T-Mobile, and most MVNOs let you generate a port-out PIN in the account portal without a phone call at all.",
30
+ "If you must call: state the goal ONCE, clearly, then hold the line on it. 'I need my account number, port-out PIN, and billing zip. I am not switching back today.'",
31
+ "Retention scripts are designed to extend the call. Every 'let me check one thing' adds 4-7 minutes. Politely refuse offers without engaging them on merit.",
32
+ "Do NOT cancel before porting. Cancelling first releases the number to a recycling pool and the port becomes impossible. The port itself cancels the line cleanly at completion.",
33
+ "Recognise wrong-queue early: 'customer care' often routes to retention by default. The team you actually need is sometimes called 'port-out' or 'account services'."
34
+ ],
35
+ "phrases": {
36
+ "opener": "Hi, I need a port-out PIN, my account number, and my billing zip on file. I'm porting my number to a new carrier. I'm not looking to switch back today — please don't run a retention offer. Just the three pieces of information.",
37
+ "queue_check": "Quick check — are you the port-out / account-services team, or retention? I'd like to be with whoever can issue the PIN.",
38
+ "transfer_request": "Could you do a warm transfer to port-out / account services and stay on the line until they pick up? I'd rather not lose my hold position.",
39
+ "decline_retention_polite": "Thanks, I've already made the call on this — really just need the port-out PIN, account number, and zip so we can wrap up.",
40
+ "decline_retention_firm": "I'm sure the offers are real, but I'm not considering them today. If you can't issue the PIN, please transfer me to someone who can — no point burning your shift on it.",
41
+ "device_balance_check": "Quick check on my device — what's the remaining installment balance, and when does porting trigger it to bill? I want to make sure I'm not surprised.",
42
+ "esim_check": "I have an eSIM. Will porting deactivate the eSIM profile automatically, or do I need to remove it from my device after the port completes?",
43
+ "ask_pin_expiration": "How long is the port-out PIN valid? I want to start the port at the new carrier within that window.",
44
+ "graceful_close": "Thanks. I have account number [number], port-out PIN [PIN], billing zip [zip], PIN valid until [time]. Device balance is $[X]. I'm initiating the port with the new carrier now."
45
+ },
46
+ "tactics": [
47
+ {
48
+ "name": "Try self-serve first",
49
+ "when": "Before any call.",
50
+ "script": "Check the losing carrier's app or website for 'Number transfer PIN' / 'Port-out PIN'. Major US carriers (AT&T, Verizon, T-Mobile, Cricket, Mint, Google Fi) all expose this without a call. Calling is the fallback.",
51
+ "priority": 1
52
+ },
53
+ {
54
+ "name": "State the ask once, clearly",
55
+ "when": "First substantive turn on the call.",
56
+ "script": "Use the `opener`. Naming the three pieces (account number, PIN, zip) AND naming the goal (port) AND preemptively declining retention compresses a 45-minute call into a 12-minute one.",
57
+ "priority": 2
58
+ },
59
+ {
60
+ "name": "Recognise wrong-queue within 60 seconds",
61
+ "when": "Rep starts asking 'what would it take to keep you' or 'can I run a quick offer'.",
62
+ "script": "Use `queue_check` and `transfer_request`. If the rep can't transfer, use the `decline_retention_polite` phrase. If it persists, use `decline_retention_firm`.",
63
+ "priority": 3
64
+ },
65
+ {
66
+ "name": "Decline offers without engaging",
67
+ "when": "Rep makes any save offer.",
68
+ "script": "Use `decline_retention_polite`. Do NOT counter-offer or explain WHY you're leaving — every word fuels the next script branch. A single polite no is faster than a debate.",
69
+ "priority": 4
70
+ },
71
+ {
72
+ "name": "Verify device installment status",
73
+ "when": "Before ending the call.",
74
+ "script": "Use `device_balance_check`. If a device is on installments, porting typically accelerates the remaining balance to a single charge on the final bill. Knowing the number prevents a billing surprise.",
75
+ "priority": 5
76
+ },
77
+ {
78
+ "name": "Confirm PIN expiration window",
79
+ "when": "After receiving the PIN.",
80
+ "script": "Use `ask_pin_expiration`. Port-out PINs are short-lived (typically 7 days, sometimes 24 hours). Start the port at the new carrier within the window."
81
+ },
82
+ {
83
+ "name": "Do NOT cancel the line",
84
+ "when": "Rep asks 'do you want me to schedule cancellation for today as well?'.",
85
+ "script": "Politely refuse. The port itself cancels the line. Cancelling first releases the number and breaks the port."
86
+ }
87
+ ],
88
+ "boundaries": [
89
+ "Do NOT cancel the line before the port completes — the number will be recycled and the port fails.",
90
+ "Do NOT share the port-out PIN with anyone except the gaining carrier. PIN + account number is enough for a port-out attack — guard them like a password.",
91
+ "Do NOT agree to a 'new plan to keep you' that adds another term commitment. The rep is recording acceptance and you've just bought another 24 months.",
92
+ "Do NOT get drawn into debating why you're leaving. 'I've made my decision' is a complete sentence.",
93
+ "Do NOT port a number that is not in the user's name without the account holder's authorisation — port-out fraud is a federal issue."
94
+ ],
95
+ "success_signals": [
96
+ "Account number, port-out PIN, and billing zip provided.",
97
+ "Device installment balance disclosed.",
98
+ "PIN expiration time confirmed.",
99
+ "Rep does not insist on retention before releasing the PIN."
100
+ ],
101
+ "failure_signals": [
102
+ "Rep refuses to issue a PIN without 'discussing options'.",
103
+ "Rep claims the PIN is sent only via mail (a stall — federal rules require near-real-time PIN delivery).",
104
+ "Hold time exceeds 30 minutes solely on PIN issuance.",
105
+ "Rep tries to cancel the line 'to make the port easier' — refuse and escalate."
106
+ ],
107
+ "exit_strategy": {
108
+ "on_success": "Confirm the three credentials, log the PIN expiration time, and immediately initiate the port at the gaining carrier. Do nothing else with the losing-carrier account until the port completes.",
109
+ "on_failure": "If a carrier refuses to issue a port-out PIN, file a complaint with the FCC (consumercomplaints.fcc.gov) citing 47 CFR 52.36 — carriers are legally required to facilitate port-out. Most refusals reverse within 24 hours of an FCC notice.",
110
+ "follow_ups": [
111
+ "Initiate the port at the new carrier within the PIN expiration window.",
112
+ "Keep the old SIM in the device or accessible until the port completes — if it fails, you'll need to retry.",
113
+ "After port confirmation: verify the final bill from the losing carrier (including device payoff if any).",
114
+ "Watch for any unexpected reactivation charges in the next 30 days."
115
+ ]
116
+ },
117
+ "required_user_info": [
118
+ "Account number on losing carrier",
119
+ "Account holder's name as it appears on the bill",
120
+ "Billing zip on file",
121
+ "Phone number to be ported",
122
+ "Whether any devices are on installment plans",
123
+ "Gaining carrier name and readiness to port"
124
+ ],
125
+ "contributed_by": "utility-telecom agent (v0.9.87 community drop)",
126
+ "updated_at": "2026-05-20T06:09:47Z"
127
+ }