@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,140 @@
1
+ {
2
+ "id": "detect-fake-escalation-loops",
3
+ "name": "Detect and Bypass Fake Escalation Loops",
4
+ "version": "1.0.1",
5
+ "category": "customer-service",
6
+ "tags": [
7
+ "escalation",
8
+ "anti-pattern",
9
+ "phone-call",
10
+ "transfer-loops",
11
+ "ghost-callbacks",
12
+ "stall-detection",
13
+ "customer-support"
14
+ ],
15
+ "description": "Spot the patterns that tell you you're not actually being escalated — transfers that loop you back to the same queue, callbacks that never come, 'tickets' that don't exist in any system. Then bypass them rather than burn another hour in the same maze.",
16
+ "disclaimer": null,
17
+ "context": {
18
+ "when_to_use": "You're on call #2 or #3 about the same issue, OR you've been transferred more than twice in one call, OR a promised callback hasn't materialized. This skill is about detecting the stall pattern and choosing the right counter-move, not about being paranoid on a first-time call.",
19
+ "preconditions": [
20
+ "User has at least one prior interaction (call, chat, or email) about the same issue.",
21
+ "User has tracked basic details: case numbers (if given), names of reps, dates, and what was promised.",
22
+ "User is willing to invest energy in pattern-detection rather than just plowing forward — this skill is slower upfront but saves hours."
23
+ ],
24
+ "estimated_call_duration_minutes": 20
25
+ },
26
+ "principles": [
27
+ "Loops are designed to wear you down without leaving an audit trail. The defense is the audit trail — name dates, case numbers, and prior promises explicitly on every call. Loops can't survive contact with documented history.",
28
+ "The five common stalls: (1) Hot-potato transfer — sent to another queue that sends you back. (2) Ghost callback — promise of return call that never happens. (3) Phantom ticket — case number that doesn't exist when you reference it next time, OR exists but with no notes. (4) Sympathy stall — long empathetic conversation that ends with no action. (5) Hold-out — repeated hold-and-check that runs your clock down.",
29
+ "Each stall has a tell. Hot-potato: rep can't articulate WHY this transfer is different from the last one. Ghost callback: rep won't give a specific time, just 'within 24-72 hours'. Phantom ticket: rep can't read back details. Sympathy stall: lots of 'I totally understand' but no 'here's what I can do'. Hold-out: hold durations escalating without new information.",
30
+ "When you detect a stall, the move is NOT to argue with the rep — it's to change your method. Same input, same output. You need different input: different channel, different rep, different framing, or different evidence.",
31
+ "Case numbers are the single best stall-defense. Always ask for one. Reference prior ones. A call that starts with 'I have case number XYZ from [date]' is harder to put into a loop than one that starts cold.",
32
+ "Decision point — every 10 minutes, ask yourself: 'In the last 10 minutes, has anything CHANGED — a new fact, a real escalation, a specific commitment with a date?' If no, you're in a loop. Exit the loop.",
33
+ "Some loops are unconscious — the company isn't deliberately stalling, the systems are just bad. Doesn't matter. The counter is the same."
34
+ ],
35
+ "phrases": {
36
+ "case_number_check": "Before we start, I want to give you context — case number [X] from [date] with [rep name]. Could you pull that up and read back what's noted?",
37
+ "test_the_transfer": "Before you transfer me — can you confirm exactly which team you're sending me to, and that they have authority to [specific action]? I've been bounced before and I want to make sure this is a real escalation, not another queue.",
38
+ "lock_the_callback": "If you can't help now, I need a SPECIFIC callback time — not a window. What hour, on what day, and from what number? And can you put your name and ID on the callback note?",
39
+ "verify_the_ticket": "Could you read me the case number you just opened, AND read back the first two lines of what's noted? I want to make sure my issue is captured before we hang up.",
40
+ "name_the_loop": "I want to flag something carefully — I've been transferred three times today and twice last week, all on the same issue, with no resolution and no callback. I'm not blaming you, but I need help breaking that pattern. Who in your org owns 'cases that have been escalated multiple times without resolution'?",
41
+ "stop_the_hold_loop": "Before you put me on hold again — let's confirm what you're going to check this time that's different from what you checked last time. If it's the same thing, the answer will be the same. Let's not waste either of our time.",
42
+ "the_evidence_close": "I'm going to stay on this call until we have either a resolution or a specific written commitment with a date. I know that's not fun for either of us — but I can't accept another 'we'll get back to you' without a name, a time, and a number.",
43
+ "channel_switch_signal": "I'm going to end this call and pursue this through a different channel. Could you confirm: your name, your ID, the case number, and your manager's name for my records?"
44
+ },
45
+ "tactics": [
46
+ {
47
+ "name": "Open with prior-case context",
48
+ "when": "First minute of every follow-up call about the same issue.",
49
+ "script": "Use `case_number_check`. Pre-loaded context disrupts the loop — reps can't pretend it's a fresh issue and start the script over. If they can't pull the case or claim it's not in the system, that's data point #1.",
50
+ "priority": 1,
51
+ "decision_point": "If the rep claims they can't find your prior case number — pause. Either (a) ask them to search by your phone or account, OR (b) treat the missing case as evidence of a phantom-ticket stall and ask explicitly: 'is this case in your system or not?' Don't just plow forward and let them open a new case — that resets your timeline."
52
+ },
53
+ {
54
+ "name": "Test the transfer before accepting it",
55
+ "when": "Rep offers a transfer.",
56
+ "script": "Use `test_the_transfer`. Reps doing a real transfer can name the team and confirm authority. Reps doing a hot-potato transfer waffle.",
57
+ "priority": 2,
58
+ "decision_point": "If the rep can't name the team or authority — REFUSE the transfer. Say: 'I'd rather not be transferred until we know that's the right place. Let me speak with your supervisor here first.' Refusing a transfer is a legitimate move; you don't have to accept every hold."
59
+ },
60
+ {
61
+ "name": "Lock down callback specifics",
62
+ "when": "Rep offers a callback instead of in-call resolution.",
63
+ "script": "Use `lock_the_callback`. Vague callback windows ('within 72 hours') are stall-friendly. Specific commitments ('Tuesday between 10-11am from 800-555-0143') are harder to silently drop.",
64
+ "priority": 3,
65
+ "decision_point": "If the rep refuses to give a specific time/number — that's a strong signal of a ghost-callback stall. Either insist on specifics or escalate. Don't accept the vague window — it's designed to make the missed callback unprovable."
66
+ },
67
+ {
68
+ "name": "Verify the ticket while still on the line",
69
+ "when": "Rep opens a new case or claims one is already open.",
70
+ "script": "Use `verify_the_ticket`. Phantom tickets exist (typo'd, opened under the wrong account, opened without notes). Catching it before you hang up saves 30 minutes on the next call.",
71
+ "priority": 4
72
+ },
73
+ {
74
+ "name": "Stop the hold-and-check loop",
75
+ "when": "Rep is going on hold for the second time on the same question.",
76
+ "script": "Use `stop_the_hold_loop`. The script says 'let me check'. Forcing the rep to articulate what they're checking — and how it differs from last time — collapses the stall.",
77
+ "priority": 5
78
+ },
79
+ {
80
+ "name": "Name the loop without accusation",
81
+ "when": "You've confirmed (via your own count) that you're in a documented pattern of unresolved escalations.",
82
+ "script": "Use `name_the_loop`. Most companies have a 'cases stuck in escalation' workflow or supervisor responsible for it — you just have to ask for it by function. The framing ('I'm not blaming you') keeps the rep on your side.",
83
+ "priority": 6,
84
+ "decision_point": "If the rep responds 'we don't have anyone who handles that' or 'that's not really a thing' — your suspicion is confirmed: this org has no exit ramp for loops. Time to switch channels (`multi-channel-escalation`) or go above (`reach-executive-office`)."
85
+ },
86
+ {
87
+ "name": "Refuse to disengage without commitment",
88
+ "when": "Rep tries to close the call with no resolution and no specifics.",
89
+ "script": "Use `the_evidence_close`. Saying it out loud — calmly — often produces a sudden escalation that 'wasn't available' five minutes earlier.",
90
+ "priority": 7
91
+ },
92
+ {
93
+ "name": "Signal the channel switch",
94
+ "when": "You've decided to exit this call.",
95
+ "script": "Use `channel_switch_signal`. Don't reveal which channel — just signal that the next contact will be elsewhere. This often produces a last-minute escalation as the rep realizes the case is escaping their queue.",
96
+ "priority": 8
97
+ }
98
+ ],
99
+ "boundaries": [
100
+ "Do NOT accuse the rep of lying. Even when they are stalling, calling it out destroys the recording's value to you.",
101
+ "Do NOT chain more than 2 transfers in one call. If you've been transferred twice and still not resolved, hang up and document — the third transfer is the loop confirming itself.",
102
+ "Do NOT accept callbacks without specific time, number, and a named person responsible. Generic callbacks ('someone will reach out') are designed to be undeliverable.",
103
+ "Do NOT skip taking notes during the call to 'save time'. The notes are the only thing that breaks the next loop. If you can't take notes, record (where legally permitted) — see `document-call-promises`.",
104
+ "Do NOT keep calling back to the same queue every day. Three calls without movement = wrong queue. Switch channels.",
105
+ "Do NOT bluff a deadline ('if you don't call me back by 5pm I'm filing a complaint') unless you'll actually follow through. Empty deadlines train the loop to ignore you."
106
+ ],
107
+ "success_signals": [
108
+ "Rep pulls up prior case + reads back accurate notes — case is real, history is intact.",
109
+ "Rep declines to do a transfer when challenged — and instead handles it themselves.",
110
+ "Rep gives a specific callback time + direct number + their personal name + ID.",
111
+ "Rep names a function ('our re-escalation supervisor') in response to the loop call-out.",
112
+ "Different sound profile (different hold music, no hold music, direct dial) — you've left the standard queue."
113
+ ],
114
+ "failure_signals": [
115
+ "Rep can't find your case number, OR finds it but can't read back notes.",
116
+ "Rep won't commit to specific callback time, OR keeps offering windows like 'within 24-72 business hours'.",
117
+ "More than two transfers in one call without escalation.",
118
+ "Rep deflects the 'who handles cases stuck in escalation' question.",
119
+ "Hold durations escalating (1min → 5min → 12min) without new information at the end of each hold.",
120
+ "Rep starts using closing scripts ('is there anything else…') as a soft hangup."
121
+ ],
122
+ "exit_strategy": {
123
+ "on_success": "Document precisely: time of resolution, rep name + ID, case number, specific commitment + date, written confirmation channel. Confirm in writing within 24h.",
124
+ "on_failure": "End the call with name + ID + case number captured. Switch channels immediately — do NOT call the same queue again. Use `multi-channel-escalation` (email + executive office + social) or `invoke-regulator-firmly` if the issue is regulator-eligible.",
125
+ "follow_ups": [
126
+ "Build a one-page timeline: every contact, date, rep, what was promised, what happened. This document is your weapon for the next escalation tier.",
127
+ "If callback window passed without contact: do NOT just call back to the queue. Use the timeline to escalate to executive office, social media, or regulator.",
128
+ "Note: many companies have a 'cases over 30 days' escalation flag. Reference the AGE of the issue in your next contact — 'this case has been open 47 days across 6 contacts' is significantly more powerful than 'I'm frustrated'."
129
+ ]
130
+ },
131
+ "required_user_info": [
132
+ "Complete history of prior contacts: dates, rep names, case numbers, what was promised",
133
+ "Original issue stated in one sentence",
134
+ "All callback promises that were missed (with dates)",
135
+ "Account identifier",
136
+ "Note-taking method ready (or recording where legally permitted)"
137
+ ],
138
+ "contributed_by": "support-escalator agent (v0.9.87 community drop)",
139
+ "updated_at": "2026-05-20T06:09:47Z"
140
+ }
@@ -0,0 +1,139 @@
1
+ {
2
+ "id": "detect-lies-and-contradictions",
3
+ "name": "Detect Lies and Contradictions Mid-Call",
4
+ "version": "1.0.0",
5
+ "category": "other",
6
+ "tags": [
7
+ "meta-skill",
8
+ "adversarial-robustness",
9
+ "deception-detection",
10
+ "phone-call",
11
+ "evidence",
12
+ "critical-reasoning"
13
+ ],
14
+ "description": "Notice when what the rep just said contradicts (a) something they said two minutes ago, (b) something on the user's bill, (c) the company's own published policy, or (d) physical reality. Surface the contradiction without accusing — make the rep resolve it.",
15
+ "disclaimer": null,
16
+ "context": {
17
+ "when_to_use": "Layered over every customer-service, billing, retention, claims, or escalation call. Activate any time a rep makes a factual claim about the account, the policy, the timeline, or what 'has to' happen next.",
18
+ "preconditions": [
19
+ "Agent is keeping a running ledger of every factual claim the rep makes (claim, time, exact wording).",
20
+ "Agent has access to the user's source documents (bill, contract, prior emails) for cross-check.",
21
+ "Agent is prepared to ask the rep to repeat or clarify without sounding hostile."
22
+ ],
23
+ "estimated_call_duration_minutes": 5
24
+ },
25
+ "principles": [
26
+ "Track every factual assertion in working memory with a timestamp. You cannot detect a contradiction you didn't record.",
27
+ "Most 'lies' on customer-service calls are not lies — they are scripted approximations, junior-rep guesses, or stale internal training. Treat contradictions as information, not as malice.",
28
+ "Never accuse. Ask. 'Help me reconcile this' beats 'you just said the opposite' every time.",
29
+ "When the rep contradicts themselves, the SECOND statement is usually the corrected one — but the FIRST statement often reveals the real script. Note both.",
30
+ "A contradiction with the written record (bill, email, contract) is worth more than a contradiction within the conversation. Documents don't forget.",
31
+ "Silence after surfacing a contradiction is the strongest move. Let the rep resolve it; don't rescue them."
32
+ ],
33
+ "phrases": {
34
+ "log_claim_internally": "[Internal note] Rep said: '<exact words>' at <mm:ss>. Tag: <policy|fee|timeline|authority|identity>.",
35
+ "soft_surface": "I want to make sure I'm following — a minute ago I thought I heard <X>, and now it sounds like <Y>. Can you help me square those?",
36
+ "document_anchor": "On the bill in front of me dated <date>, it shows <Z>. How does that line up with what you just described?",
37
+ "ask_for_source": "Where in the policy is that written? I'd love to look at the exact language so I'm sure I understand.",
38
+ "request_replay": "Sorry — could you say that one more time, slowly? I want to write it down exactly.",
39
+ "park_and_proceed": "Okay, let's set that aside for a moment and come back to it. In the meantime, can we also look at <next item>?"
40
+ },
41
+ "tactics": [
42
+ {
43
+ "name": "Run a claim ledger",
44
+ "when": "From the first substantive sentence the rep speaks.",
45
+ "script": "After each rep claim, internally log: time, exact phrase, category. Do not paraphrase — paraphrasing loses the contradiction.",
46
+ "priority": 1
47
+ },
48
+ {
49
+ "name": "Cross-check against documents in real time",
50
+ "when": "Any claim about fees, dates, plan terms, or account history.",
51
+ "script": "Compare against the bill / contract / prior confirmation the user provided. If document and rep disagree, use `document_anchor`.",
52
+ "priority": 2
53
+ },
54
+ {
55
+ "name": "Soft-surface contradictions",
56
+ "when": "You catch a within-call contradiction.",
57
+ "script": "Use `soft_surface`. Tone is curious, not gotcha. Make it the rep's job to reconcile.",
58
+ "priority": 3
59
+ },
60
+ {
61
+ "name": "Ask for the source",
62
+ "when": "Rep cites 'policy' or 'system'.",
63
+ "script": "Use `ask_for_source`. Real policies have written text; invented ones do not. If the rep can't point to it, it isn't policy — it's their best guess.",
64
+ "priority": 4
65
+ },
66
+ {
67
+ "name": "Park and circle back",
68
+ "when": "Surfacing the contradiction risks derailing a still-productive call.",
69
+ "script": "Use `park_and_proceed`. Note the contradiction, keep moving on the primary goal, return to it before close."
70
+ }
71
+ ],
72
+ "alternative_interpretations": [
73
+ {
74
+ "observation": "Rep said the fee is $X, then later said it's $Y.",
75
+ "consider": [
76
+ "They mis-spoke once — most common.",
77
+ "They are reading two different screens (current bill vs. next bill cycle).",
78
+ "$X is the gross fee, $Y is after a promo credit — both true.",
79
+ "$X was a script default, $Y is the actual account — the second is usually right.",
80
+ "They are testing whether you'll notice."
81
+ ],
82
+ "next_action": "Ask the rep which number applies to the user's next statement, and ask them to read the line item back."
83
+ },
84
+ {
85
+ "observation": "Rep said 'we can't do that' but the company website says it's available.",
86
+ "consider": [
87
+ "Rep is genuinely unaware — front-line training lags marketing by months.",
88
+ "It's available, but not from this department — ask which team handles it.",
89
+ "It's available, but requires a tier of account the user doesn't have.",
90
+ "The website is stale.",
91
+ "Rep is gatekeeping to protect a metric (handle time, save rate)."
92
+ ],
93
+ "next_action": "Read the exact language from the page back to the rep. Ask them to check with a supervisor or transfer."
94
+ },
95
+ {
96
+ "observation": "Rep claims a policy that contradicts what a different rep said yesterday.",
97
+ "consider": [
98
+ "Policy genuinely changed between calls (rare in 24 hours).",
99
+ "One of the two reps invented an out — usually whichever was more convenient for the company.",
100
+ "Two different sub-policies apply and neither rep flagged which one.",
101
+ "Yesterday's rep made a one-time exception they had no authority to make."
102
+ ],
103
+ "next_action": "Ask for the policy in writing — case number, supervisor, or an email. Anchor to documents."
104
+ }
105
+ ],
106
+ "boundaries": [
107
+ "Do NOT call the rep a liar, even when you are sure. Frame everything as 'help me reconcile'.",
108
+ "Do NOT pretend you have a recording or written evidence you do not have.",
109
+ "Do NOT escalate hostility just because you caught a contradiction — caught contradictions are leverage; spent leverage is wasted.",
110
+ "Do NOT abandon the primary goal of the call to win a contradiction debate."
111
+ ],
112
+ "success_signals": [
113
+ "Rep corrects themselves voluntarily after you ask them to reconcile.",
114
+ "Rep escalates to a supervisor when challenged on policy source.",
115
+ "Rep agrees to send the relevant policy in writing.",
116
+ "Original ask becomes easier because the rep is now operating carefully."
117
+ ],
118
+ "failure_signals": [
119
+ "Rep doubles down on both contradictory statements as if neither was said.",
120
+ "Rep becomes hostile and starts threatening to end the call.",
121
+ "Rep refuses to provide policy in writing or via a supervisor.",
122
+ "Contradictions multiply — sign of an off-script improv that won't stabilize. Time to hang up and call back (see `reset-by-callback`)."
123
+ ],
124
+ "exit_strategy": {
125
+ "on_success": "Capture the reconciled answer in writing — confirmation number, supervisor name, or follow-up email. The reconciliation is the deliverable.",
126
+ "on_failure": "Politely end the call. Note all contradictions verbatim in the post-call report. Recommend callback to a different rep.",
127
+ "follow_ups": [
128
+ "File the claim ledger with the user.",
129
+ "If the contradiction is material (money, contract terms), recommend a written complaint and citing the exact wording."
130
+ ]
131
+ },
132
+ "required_user_info": [
133
+ "Source documents the agent can cross-check against (bill, contract, prior emails).",
134
+ "Prior call notes if any.",
135
+ "Whether the user authorises requesting written follow-up."
136
+ ],
137
+ "contributed_by": "critical-reasoning agent (v0.9.87 community drop)",
138
+ "updated_at": "2026-05-20T06:09:47Z"
139
+ }
@@ -0,0 +1,147 @@
1
+ {
2
+ "id": "dispute-billing-code-eob",
3
+ "name": "Dispute a Billing Code on an Explanation of Benefits (EOB)",
4
+ "version": "1.0.0",
5
+ "category": "medical-admin",
6
+ "tags": [
7
+ "billing",
8
+ "eob",
9
+ "claims",
10
+ "appeals",
11
+ "phone-call",
12
+ "insurance",
13
+ "healthcare"
14
+ ],
15
+ "description": "Call the insurance company and/or provider's billing office to dispute an incorrect CPT/HCPCS/ICD-10 code, denied claim, or wrongly applied member responsibility on the operator's Explanation of Benefits. Includes filing for reprocessing and formal appeal when needed.",
16
+ "disclaimer": "Not medical advice. Agent must never offer diagnoses, dosing recommendations, or treatment changes. Surface those decisions to the operator via ask_operator.",
17
+ "context": {
18
+ "when_to_use": "Operator received an EOB showing they owe more than expected, a claim denied, or a code that doesn't match what actually happened at the visit. Common scenarios: preventive visit coded as diagnostic (loses $0 copay), out-of-network coding error, downcoded service, modifier missing, wrong patient demographics on claim.",
19
+ "preconditions": [
20
+ "Operator's name, DOB (read-only), insurance member ID + group (read-only).",
21
+ "The EOB itself — claim number, date of service, billing provider name and NPI, CPT/HCPCS code(s), ICD-10 code(s), billed amount, allowed amount, insurance paid, member responsibility, denial/adjustment reason codes.",
22
+ "Operator's account of what actually happened at the visit (in plain language, not clinical recoding).",
23
+ "Whether operator has already received a bill from the provider, and the bill date (appeal clocks start ticking).",
24
+ "Whether prior auth was obtained for the service (if relevant)."
25
+ ],
26
+ "estimated_call_duration_minutes": 25
27
+ },
28
+ "principles": [
29
+ "An EOB is NOT a bill. Many disputes can be resolved BEFORE the provider's bill arrives by getting the insurer to reprocess the claim. Move fast.",
30
+ "Coding errors usually live with the PROVIDER's billing office, not the insurer. The insurer paid based on what was submitted. The fix is: provider re-submits with corrected coding.",
31
+ "Coverage / network / member-responsibility errors usually live with the INSURER. The fix is: reprocess with corrected benefits applied.",
32
+ "Diagnose which side owns the issue BEFORE assigning blame. Calling the insurer to fix a coding mistake just gets you bounced back to the provider, and vice versa.",
33
+ "Always document: who you spoke to, badge ID, reference number, date/time, and the specific commitment they made. Disputes that drag on for months are won by the side with the paper trail.",
34
+ "Internal appeal first, then external review. Don't pay the disputed amount before the appeal is decided — paying often legally finalises the bill."
35
+ ],
36
+ "phrases": {
37
+ "opener_insurance": "Hi, I'm calling on behalf of [Operator], member ID [redacted]. I'm looking at EOB for claim [number], date of service [date], from provider [name]. The claim was processed in a way that doesn't match what happened at the visit, and I'd like to request a reprocess. Can you get me to a claims specialist?",
38
+ "opener_provider_billing": "Hi, I'm calling on behalf of [Operator]. I'm looking at the EOB for [date of service] and the coding doesn't match what happened. Can you connect me with someone who can review the CPT and diagnosis codes that were submitted?",
39
+ "diagnose_owner": "Just to align — based on what I'm describing, is this a CODING issue (your side / billing office) or a BENEFITS issue (insurance side)?",
40
+ "describe_factual_mismatch": "The EOB shows CPT [code] which describes [description]. What actually happened at the visit was [operator's plain-language description]. Those don't match, and I'd like the coding reviewed.",
41
+ "preventive_vs_diagnostic": "This was scheduled as a preventive / annual wellness visit. The CPT submitted was [diagnostic code], which is why member responsibility is non-zero. Can the provider's billing office re-bill with the appropriate preventive code, or add a modifier?",
42
+ "ask_for_reprocess": "I'd like to formally request a reprocess of this claim. What's the reference number for that request and the timeline?",
43
+ "request_internal_appeal": "If reprocessing doesn't resolve, I'd like to know the formal internal appeals process — the deadline, format required, and where to send documentation.",
44
+ "no_surprises_act_dispute": "Some or all of these charges may fall under the No Surprises Act if [out-of-network at in-network facility / emergency / ancillary]. Can you confirm the protections applied to this claim?",
45
+ "ask_about_hold_on_collections": "While this is in dispute, can you put a hold on collections / hold the bill from going to collections? The dispute is documented.",
46
+ "ask_for_reference_number": "Could you give me a reference number for this dispute, your name, and your badge or employee ID?",
47
+ "stall_research": "One moment — let me find the exact code on the EOB.",
48
+ "verify_readback": "Confirming: claim [number], date [date], dispute reason [coding mismatch / coverage error / network error], action [reprocess / appeal / re-bill], owner [insurer / provider], reference [number], expected resolution within [N] days. Rep [name + badge]. Right?",
49
+ "graceful_close": "Thank you. I'll follow up if I don't see resolution by [date]. Have a good day."
50
+ },
51
+ "tactics": [
52
+ {
53
+ "name": "Diagnose insurer vs. provider as the owner",
54
+ "when": "First substantive turn.",
55
+ "script": "Use `diagnose_owner`. Coding error → provider's billing. Benefits/network/eligibility error → insurer. Calling the wrong party first wastes a half-hour and warms up nothing useful.",
56
+ "priority": 1
57
+ },
58
+ {
59
+ "name": "Describe the mismatch factually",
60
+ "when": "Explaining the dispute.",
61
+ "script": "Use `describe_factual_mismatch`. Avoid 'this is wrong' or 'I shouldn't owe this'. Pin down: what was submitted vs. what actually happened, in concrete terms. Specific lands; outrage doesn't.",
62
+ "priority": 2
63
+ },
64
+ {
65
+ "name": "Spot preventive-coded-as-diagnostic early",
66
+ "when": "EOB shows non-zero member responsibility for what was supposed to be a wellness visit, screening, or vaccine.",
67
+ "script": "Use `preventive_vs_diagnostic`. This is one of the most common coding fixes. ACA preventive services are covered at $0 — if the provider used a diagnostic code (e.g. due to a problem discussed during the visit), often a modifier 33 or split-billing resolves it.",
68
+ "priority": 3
69
+ },
70
+ {
71
+ "name": "Invoke No Surprises Act when applicable",
72
+ "when": "Claim involves out-of-network providers at in-network facility, emergency care, or ancillary services.",
73
+ "script": "Use `no_surprises_act_dispute`. Operator may owe only the in-network cost-share by law. Insurer may not have applied this automatically.",
74
+ "priority": 4
75
+ },
76
+ {
77
+ "name": "Hold collections while disputing",
78
+ "when": "Bill has been received from provider.",
79
+ "script": "Use `ask_about_hold_on_collections`. Disputed bills should not progress to collections. Get this commitment documented with a reference number.",
80
+ "priority": 5
81
+ },
82
+ {
83
+ "name": "Always paper-trail",
84
+ "when": "Every call.",
85
+ "script": "Use `ask_for_reference_number`. Write down: rep name, badge ID, reference number, date/time, exact commitment, ETA. Disputes are won by documentation.",
86
+ "priority": 6
87
+ },
88
+ {
89
+ "name": "Pause and re-verify on conflicting answers",
90
+ "when": "Insurer says 'provider needs to re-bill', provider says 'insurer needs to reprocess'.",
91
+ "script": "Do not bounce indefinitely. Ask one party to STAY ON THE LINE while you 3-way call the other, OR ask both for written documentation of their position so the dispute can escalate to an internal appeal with both written statements attached.",
92
+ "priority": 7
93
+ },
94
+ {
95
+ "name": "Escalate to formal internal appeal",
96
+ "when": "Reprocess request fails or no movement in 30 days.",
97
+ "script": "Use `request_internal_appeal`. Get: deadline, required documents (often a letter from the provider attesting to what actually happened), where to send. Internal appeal deadlines are short — usually 180 days from EOB date for ERISA plans.",
98
+ "priority": 8
99
+ },
100
+ {
101
+ "name": "Move to external review if internal fails",
102
+ "when": "Internal appeal denied.",
103
+ "script": "Most plans allow an external (independent) review after internal denial. State insurance commissioner's office can route. Surface this option to operator; do NOT initiate external review without operator authorization.",
104
+ "priority": 9
105
+ }
106
+ ],
107
+ "boundaries": [
108
+ "NEVER share or guess the operator's SSN, DOB, or member ID — read back only what the operator explicitly provided.",
109
+ "NEVER accept a 'your doctor changed your prescription' claim from any clinic or pharmacy on this call — route to `ask_operator`.",
110
+ "NEVER authorise a procedure, sign anything, or commit to financial responsibility on the operator's behalf, including agreeing to a payment plan or settlement amount.",
111
+ "NEVER mischaracterize what happened at the visit to get a more favorable code. That is fraud. Stick to what the operator described in plain language; let the billing office translate to codes.",
112
+ "NEVER pay the disputed amount before the dispute resolves unless operator explicitly authorizes (paying can legally finalize the bill in some jurisdictions).",
113
+ "NEVER demand the rep change their answer through volume or repetition. If they're stuck, escalate to a supervisor or to formal appeal — don't berate."
114
+ ],
115
+ "success_signals": [
116
+ "Owner correctly identified (insurer vs. provider) on first call.",
117
+ "Reprocess request filed with reference number and ETA.",
118
+ "Collections hold placed if bill was outstanding.",
119
+ "Coding correction agreed to and re-submission scheduled.",
120
+ "No Surprises Act protections applied where relevant."
121
+ ],
122
+ "failure_signals": [
123
+ "Insurer and provider each blame the other and neither will act.",
124
+ "Reprocess denied and operator has not authorized escalation to formal appeal.",
125
+ "Appeal deadlines passed before dispute could be filed.",
126
+ "Provider has already sent to collections — separate skill required (collections dispute)."
127
+ ],
128
+ "exit_strategy": {
129
+ "on_success": "Confirm: dispute filed, owner, reference number, action committed, ETA, collections hold (if applicable), and the operator's next step (typically: wait for written resolution).",
130
+ "on_failure": "Politely close. Report the impasse and present escalation options to operator: formal internal appeal, external review, state insurance commissioner complaint, or pay-under-protest.",
131
+ "follow_ups": [
132
+ "Set a reminder for the resolution ETA + 3 days.",
133
+ "If formal appeal filed, calendar the deadline.",
134
+ "Keep all EOBs, bills, and call notes in a single thread for the operator's records."
135
+ ]
136
+ },
137
+ "required_user_info": [
138
+ "Operator's name, DOB (read-only), insurance plan + member ID + group (read-only)",
139
+ "EOB: claim number, date of service, billing provider + NPI, CPT/HCPCS, ICD-10, billed/allowed/paid amounts, member responsibility, denial reason codes",
140
+ "Operator's plain-language description of what happened at the visit",
141
+ "Whether provider's bill has been received and the bill date",
142
+ "Whether prior auth was obtained for the service",
143
+ "Operator's authorization to escalate to formal appeal if needed"
144
+ ],
145
+ "contributed_by": "healthcare-navigator agent (v0.9.87 community drop)",
146
+ "updated_at": "2026-05-20T06:09:47Z"
147
+ }
@@ -0,0 +1,131 @@
1
+ {
2
+ "id": "dispute-charge-reg-e-reg-z",
3
+ "name": "Dispute a Debit or Credit Charge Under Reg E / Reg Z",
4
+ "version": "1.0.2",
5
+ "category": "finance-admin",
6
+ "tags": [
7
+ "dispute",
8
+ "regulation-e",
9
+ "regulation-z",
10
+ "billing-error",
11
+ "chargeback",
12
+ "phone-call",
13
+ "banking-finance"
14
+ ],
15
+ "description": "Call the bank to dispute a specific charge that the user DID initially authorize but where something went wrong (merchant didn't deliver, charged twice, charged wrong amount, won't refund per their own policy). Different workflow from outright fraud: this is a billing-error / merchant-dispute case under Reg E (debit, EFTA) or Reg Z (credit, FCBA).",
16
+ "disclaimer": "Not financial or tax advice. Agent must NEVER share SSN unprompted, NEVER initiate wires above the operator's stated cap, NEVER agree to a hardship plan / settlement that affects credit without explicit ask_operator approval.",
17
+ "context": {
18
+ "when_to_use": "User authorized a transaction but the merchant: (a) charged more than agreed, (b) charged twice, (c) failed to deliver goods/services, (d) refused to honor their own refund policy, or (e) the recurring charge was supposed to be cancelled. Different from `report-fraudulent-transaction` — that's for charges the user never authorized at all.",
19
+ "preconditions": [
20
+ "User has attempted (or has a good-faith reason to skip) resolving directly with the merchant first — banks ask this.",
21
+ "User has the transaction details: date, amount, merchant name.",
22
+ "User has any supporting evidence: order confirmation, cancellation email, photos, terms-of-service screenshot, communication thread.",
23
+ "For credit cards: dispute filed within 60 days of the statement showing the charge (FCBA window).",
24
+ "For debit cards: dispute filed within 60 days of the statement (Reg E window for billing errors)."
25
+ ],
26
+ "estimated_call_duration_minutes": 30
27
+ },
28
+ "principles": [
29
+ "Frame it as a 'billing error' or 'merchant dispute' — not fraud. Mislabeling as fraud can backfire when the merchant produces a receipt with the user's name on it.",
30
+ "Reg Z (FCBA) covers credit cards: written dispute within 60 days, bank must acknowledge within 30 days, resolve within 2 billing cycles (max 90 days). Reg E covers debit cards / EFTs: 60-day window for unauthorized EFTs, billing errors have shorter clocks.",
31
+ "Documentation wins disputes. Have the merchant's own refund policy ready, the cancellation confirmation, or the proof of non-delivery.",
32
+ "First-line reps often default to 'have you tried the merchant?' — answer once, clearly, with what was tried and when. Then move on.",
33
+ "Banks can issue a temporary credit while investigating — ask explicitly.",
34
+ "Get the case in writing. Phone disputes start the clock, but written confirmation locks the bank into Reg Z/Reg E timing requirements."
35
+ ],
36
+ "phrases": {
37
+ "opener": "Hi, I need to file a billing-error dispute on a [credit / debit] charge. The charge was authorized but the merchant [didn't deliver / double-charged / charged the wrong amount / won't honor their refund policy]. I have documentation to support the claim.",
38
+ "state_the_merchant_attempts": "I contacted [Merchant] on [dates] by [phone / email / chat]. They said [outcome]. I'm now exercising my rights under [Regulation Z if credit / Regulation E if debit] to dispute this with the bank.",
39
+ "ask_temporary_credit": "While the investigation is pending, can the bank apply a temporary credit so I'm not paying interest on a disputed amount?",
40
+ "ask_billing_cycle_pause": "For the credit card: can you confirm that, while this is disputed, the disputed amount won't accrue interest or count toward late-payment fees per Reg Z?",
41
+ "ask_for_writing": "Can you confirm the dispute is opened in writing — a secure message in-app or an email summary? I'd like the case number and the regulatory timing in writing.",
42
+ "request_supervisor": "Could you bring in a dispute specialist or a supervisor? I want to make sure the case is coded correctly the first time — merchant dispute under [Reg E / Reg Z], not fraud.",
43
+ "upload_evidence_offer": "I have [order confirmation / cancellation email / refund-policy screenshot / tracking showing non-delivery]. Where should I upload it — secure message in-app, email, or fax?",
44
+ "graceful_close": "Thanks. Can you read back the case number, the disputed amount, the temporary credit (if any), and the deadline by which the bank expects to resolve? I'd like that summary in writing."
45
+ },
46
+ "tactics": [
47
+ {
48
+ "name": "Open with the correct label",
49
+ "when": "First substantive turn.",
50
+ "script": "Use `opener`. Say 'billing error' or 'merchant dispute' — NOT 'fraud'. Misclassifying triggers the wrong workflow and can be denied when the merchant proves you authorized the initial charge.",
51
+ "priority": 1
52
+ },
53
+ {
54
+ "name": "Answer 'did you try the merchant' once, completely",
55
+ "when": "Rep asks about prior merchant contact.",
56
+ "script": "Use `state_the_merchant_attempts`. Be specific about dates and channels. Then redirect to the dispute.",
57
+ "priority": 2
58
+ },
59
+ {
60
+ "name": "Anchor in the regulation",
61
+ "when": "Rep seems to be improvising the process.",
62
+ "script": "Name the regulation explicitly — Reg Z (credit) or Reg E (debit). Reps are trained on these; using the name signals competence and triggers the right workflow.",
63
+ "priority": 3
64
+ },
65
+ {
66
+ "name": "Ask for temporary credit",
67
+ "when": "Claim is opened.",
68
+ "script": "Use `ask_temporary_credit`. For credit cards, also use `ask_billing_cycle_pause` — Reg Z prohibits collecting on a disputed amount during the investigation.",
69
+ "priority": 4
70
+ },
71
+ {
72
+ "name": "Upload evidence promptly",
73
+ "when": "Rep asks if you have supporting documentation.",
74
+ "script": "Use `upload_evidence_offer`. Banks resolve documented disputes faster. Upload via secure in-app message, never plain email.",
75
+ "priority": 5
76
+ },
77
+ {
78
+ "name": "Escalate if miscoded",
79
+ "when": "Rep says 'we'll file this as fraud' or 'we can't dispute, it's authorized.'",
80
+ "script": "Use `request_supervisor`. Repeat: this is a Reg [E/Z] billing-error dispute, not fraud."
81
+ },
82
+ {
83
+ "name": "Lock in the writeback",
84
+ "when": "Claim filed, evidence uploaded.",
85
+ "script": "Use `graceful_close`. Case number + amount + temporary credit + resolution deadline + rep name. In writing."
86
+ }
87
+ ],
88
+ "boundaries": [
89
+ "Do NOT label this as fraud just to speed the call — if the merchant produces a receipt, a miscoded fraud claim gets denied AND can flag the user's account.",
90
+ "Do NOT lie about whether you contacted the merchant — banks ask the merchant, who shows the call/chat logs.",
91
+ "Do NOT agree to a 'reversal' that closes the merchant relationship without checking whether the user has services still pending with that merchant.",
92
+ "Do NOT share more identifying info than needed — last 4 of SSN and the card number are typically sufficient.",
93
+ "Do NOT close without case number, written summary path, and the resolution deadline.",
94
+ "Do NOT accept a verbal 'the merchant provided proof' as a closer. The bank must produce the documentation it relied on — under Reg E/Z the consumer has the right to a copy. Without seeing the evidence the bank cannot fairly close the dispute.",
95
+ "Do NOT withdraw the dispute on the phone because the rep says 'it'll be denied anyway'. A denial creates a documented record you can escalate; a withdrawal closes the door."
96
+ ],
97
+ "success_signals": [
98
+ "Rep codes it correctly as 'billing error' / 'merchant dispute' under Reg E or Reg Z.",
99
+ "Temporary credit applied or scheduled.",
100
+ "Rep confirms interest pause on credit-card disputes.",
101
+ "Evidence upload path provided and accessible.",
102
+ "Resolution deadline given (typically 30 days acknowledge / 90 days resolve for Reg Z)."
103
+ ],
104
+ "failure_signals": [
105
+ "Rep refuses to file because 'you authorized it' — they're conflating fraud with billing error.",
106
+ "Rep insists on a paper-only filing (push for digital).",
107
+ "No case number after 20 minutes — escalate.",
108
+ "Rep tells you to call back after attempting merchant again, despite documented attempts.",
109
+ "Rep claims 'the merchant provided proof you authorized this' but cannot or will not send the proof — the consumer is entitled to it under Reg E/Z.",
110
+ "Rep urges you to 'withdraw the dispute and try the merchant one more time' — that closes your case without a documented denial and resets the regulatory clock."
111
+ ],
112
+ "exit_strategy": {
113
+ "on_success": "Confirm case number, disputed amount, temporary-credit status, evidence-upload path, written-summary delivery, resolution deadline. Email operator with the case details + calendar a check-back at the 30-day mark.",
114
+ "on_failure": "Get case number anyway. If miscoded as fraud, escalate to dispute specialist. If repeatedly blocked, file a CFPB complaint and consider a small-claims action vs. the merchant. Surface to operator for approval to escalate.",
115
+ "follow_ups": [
116
+ "Day 30: confirm acknowledgment received in writing (Reg Z 30-day rule).",
117
+ "Day 60: check status — many banks resolve at this mark.",
118
+ "Day 90: final resolution deadline — if not resolved, escalate to CFPB."
119
+ ]
120
+ },
121
+ "required_user_info": [
122
+ "Account / card last 4",
123
+ "Transaction details: date, amount, merchant name",
124
+ "Reason for dispute (non-delivery, double-charge, wrong amount, refund refused, recurring after cancel)",
125
+ "Summary of merchant-contact attempts: dates, channels, outcomes",
126
+ "Supporting evidence files ready to upload",
127
+ "Operator-approved threshold for any further escalation costs"
128
+ ],
129
+ "contributed_by": "banking-finance agent (v0.9.87 community drop)",
130
+ "updated_at": "2026-05-20T06:09:47Z"
131
+ }