@agenticmail/core 0.9.31 → 0.9.33

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 (165) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.d.cts +3 -3
  3. package/dist/index.d.ts +3 -3
  4. package/dist/index.js +1 -1
  5. package/dist/skills/built-in/accommodation-intake.json +132 -0
  6. package/dist/skills/built-in/add-driver-vehicle-household.json +133 -0
  7. package/dist/skills/built-in/admissions-waitlist-followup.json +129 -0
  8. package/dist/skills/built-in/anchor-and-counter-anchor.json +161 -0
  9. package/dist/skills/built-in/anti-social-engineering.json +153 -0
  10. package/dist/skills/built-in/anything-else-sweep.json +120 -0
  11. package/dist/skills/built-in/apologise-correctly.json +126 -0
  12. package/dist/skills/built-in/ask-for-in-person-meeting.json +114 -0
  13. package/dist/skills/built-in/attorney-new-client-intake.json +133 -0
  14. package/dist/skills/built-in/bant-discovery-call.json +125 -0
  15. package/dist/skills/built-in/book-new-patient-appointment.json +131 -0
  16. package/dist/skills/built-in/bookmark-close.json +113 -0
  17. package/dist/skills/built-in/bypass-i-am-the-supervisor.json +130 -0
  18. package/dist/skills/built-in/bypass-scripted-rep.json +142 -0
  19. package/dist/skills/built-in/calibrated-questions.json +155 -0
  20. package/dist/skills/built-in/call-911-fire.json +118 -0
  21. package/dist/skills/built-in/call-911-medical-emergency.json +126 -0
  22. package/dist/skills/built-in/call-911-violent-crime-in-progress.json +133 -0
  23. package/dist/skills/built-in/call-988-crisis-line.json +106 -0
  24. package/dist/skills/built-in/call-poison-control.json +115 -0
  25. package/dist/skills/built-in/call-police-non-emergency.json +114 -0
  26. package/dist/skills/built-in/call-with-person-in-distress.json +133 -0
  27. package/dist/skills/built-in/cancel-cable-fiber-no-retention-loop.json +156 -0
  28. package/dist/skills/built-in/cancel-policy-clean.json +130 -0
  29. package/dist/skills/built-in/capture-rep-identity.json +113 -0
  30. package/dist/skills/built-in/childcare-provider-intake.json +157 -0
  31. package/dist/skills/built-in/close-account-no-residual-fees.json +127 -0
  32. package/dist/skills/built-in/close-on-concrete-next-step.json +116 -0
  33. package/dist/skills/built-in/confirm-agreement-readback.json +134 -0
  34. package/dist/skills/built-in/confirm-next-step-ownership.json +113 -0
  35. package/dist/skills/built-in/contractor-estimate-request.json +142 -0
  36. package/dist/skills/built-in/court-clerk-administrative-inquiry.json +119 -0
  37. package/dist/skills/built-in/cpa-intake-call.json +134 -0
  38. package/dist/skills/built-in/day-of-flight-cancellation.json +127 -0
  39. package/dist/skills/built-in/de-escalate-angry-rep.json +114 -0
  40. package/dist/skills/built-in/decline-unsolicited-pitch.json +110 -0
  41. package/dist/skills/built-in/deliver-difficult-news.json +122 -0
  42. package/dist/skills/built-in/detect-fake-escalation-loops.json +140 -0
  43. package/dist/skills/built-in/detect-lies-and-contradictions.json +139 -0
  44. package/dist/skills/built-in/dispute-billing-code-eob.json +147 -0
  45. package/dist/skills/built-in/dispute-charge-reg-e-reg-z.json +131 -0
  46. package/dist/skills/built-in/dispute-credit-report-via-bank.json +128 -0
  47. package/dist/skills/built-in/dispute-denied-claim.json +143 -0
  48. package/dist/skills/built-in/dispute-security-deposit.json +130 -0
  49. package/dist/skills/built-in/dispute-usage-spike-meter-reread.json +120 -0
  50. package/dist/skills/built-in/dmv-vehicle-registration-renewal.json +120 -0
  51. package/dist/skills/built-in/document-call-promises.json +145 -0
  52. package/dist/skills/built-in/early-lease-termination.json +126 -0
  53. package/dist/skills/built-in/elite-line-escalation.json +107 -0
  54. package/dist/skills/built-in/equipment-swap-cable-router-modem.json +126 -0
  55. package/dist/skills/built-in/eu261-uk261-dot-compensation.json +113 -0
  56. package/dist/skills/built-in/file-fnol-auto-claim.json +130 -0
  57. package/dist/skills/built-in/file-habitability-complaint.json +115 -0
  58. package/dist/skills/built-in/financial-aid-appeal.json +128 -0
  59. package/dist/skills/built-in/follow-up-stalled-claim.json +118 -0
  60. package/dist/skills/built-in/get-past-gatekeeper.json +115 -0
  61. package/dist/skills/built-in/get-past-tier-1-script.json +130 -0
  62. package/dist/skills/built-in/handle-callback-stall.json +120 -0
  63. package/dist/skills/built-in/handle-outsourced-no-escalation.json +138 -0
  64. package/dist/skills/built-in/handle-send-me-an-email-deflection.json +112 -0
  65. package/dist/skills/built-in/handle-time-pressure.json +159 -0
  66. package/dist/skills/built-in/health-prior-auth-appeal.json +131 -0
  67. package/dist/skills/built-in/hoa-dispute.json +123 -0
  68. package/dist/skills/built-in/hold-time-strategy.json +137 -0
  69. package/dist/skills/built-in/hold-warmth-cold-rep.json +114 -0
  70. package/dist/skills/built-in/hotel-walk-over-recovery.json +114 -0
  71. package/dist/skills/built-in/humour-when-it-lands.json +127 -0
  72. package/dist/skills/built-in/i20-visa-dso.json +134 -0
  73. package/dist/skills/built-in/invoke-regulator-firmly.json +137 -0
  74. package/dist/skills/built-in/irrops-waiver-awareness.json +103 -0
  75. package/dist/skills/built-in/irs-payment-plan-setup.json +134 -0
  76. package/dist/skills/built-in/k12-iep-504-enrollment.json +134 -0
  77. package/dist/skills/built-in/late-add-petition.json +128 -0
  78. package/dist/skills/built-in/leave-of-absence-deferral.json +130 -0
  79. package/dist/skills/built-in/lock-in-terms-verbally.json +127 -0
  80. package/dist/skills/built-in/match-energy-keep-goal.json +120 -0
  81. package/dist/skills/built-in/medical-records-transfer.json +138 -0
  82. package/dist/skills/built-in/medical-withdrawal.json +131 -0
  83. package/dist/skills/built-in/mid-call-evidence-collection.json +159 -0
  84. package/dist/skills/built-in/mirror-technique.json +145 -0
  85. package/dist/skills/built-in/missed-connection-distressed-passenger.json +111 -0
  86. package/dist/skills/built-in/mortgage-loan-hardship.json +130 -0
  87. package/dist/skills/built-in/move-out-walkthrough.json +114 -0
  88. package/dist/skills/built-in/multi-channel-escalation.json +141 -0
  89. package/dist/skills/built-in/multi-issue-tradeoffs.json +155 -0
  90. package/dist/skills/built-in/negotiate-rent-renewal.json +123 -0
  91. package/dist/skills/built-in/no-as-opening.json +154 -0
  92. package/dist/skills/built-in/not-sound-like-spam-dialer.json +118 -0
  93. package/dist/skills/built-in/outage-credit-applied.json +127 -0
  94. package/dist/skills/built-in/passport-expedite-or-appointment.json +123 -0
  95. package/dist/skills/built-in/pediatric-school-forms.json +141 -0
  96. package/dist/skills/built-in/personal-trainer-discovery.json +138 -0
  97. package/dist/skills/built-in/pharmacy-callback.json +134 -0
  98. package/dist/skills/built-in/pivot-mid-call.json +141 -0
  99. package/dist/skills/built-in/port-mobile-number-survive-retention.json +127 -0
  100. package/dist/skills/built-in/prescription-refill-followup.json +132 -0
  101. package/dist/skills/built-in/push-past-invented-policy.json +159 -0
  102. package/dist/skills/built-in/rapport-opening-30-seconds.json +130 -0
  103. package/dist/skills/built-in/reach-executive-office.json +137 -0
  104. package/dist/skills/built-in/read-vocal-cues.json +139 -0
  105. package/dist/skills/built-in/read-vocal-tone.json +159 -0
  106. package/dist/skills/built-in/realestate-agent-vetting.json +144 -0
  107. package/dist/skills/built-in/receive-difficult-news.json +115 -0
  108. package/dist/skills/built-in/recording-claim-conversation-legally.json +121 -0
  109. package/dist/skills/built-in/recover-summary-refusal.json +121 -0
  110. package/dist/skills/built-in/reengage-ghosted-lead.json +115 -0
  111. package/dist/skills/built-in/referral-followup-without-burning.json +116 -0
  112. package/dist/skills/built-in/referral-prior-authorization.json +130 -0
  113. package/dist/skills/built-in/refuse-the-split.json +142 -0
  114. package/dist/skills/built-in/refuse-upsell-at-close.json +114 -0
  115. package/dist/skills/built-in/rental-car-counter-defense.json +116 -0
  116. package/dist/skills/built-in/rental-scam-report.json +125 -0
  117. package/dist/skills/built-in/replace-lost-stolen-card-expedited.json +139 -0
  118. package/dist/skills/built-in/report-downed-line-gas-smell-911-triage.json +130 -0
  119. package/dist/skills/built-in/report-elder-or-child-abuse.json +117 -0
  120. package/dist/skills/built-in/report-fbi-tip.json +109 -0
  121. package/dist/skills/built-in/report-fraud-ic3-or-ftc.json +117 -0
  122. package/dist/skills/built-in/report-fraudulent-transaction.json +126 -0
  123. package/dist/skills/built-in/report-power-outage-get-etr.json +116 -0
  124. package/dist/skills/built-in/report-urgent-maintenance.json +123 -0
  125. package/dist/skills/built-in/request-credit-limit-increase.json +126 -0
  126. package/dist/skills/built-in/request-supervisor-gracefully.json +129 -0
  127. package/dist/skills/built-in/request-welfare-check.json +127 -0
  128. package/dist/skills/built-in/request-written-confirmation.json +113 -0
  129. package/dist/skills/built-in/reschedule-appointment.json +121 -0
  130. package/dist/skills/built-in/reset-by-callback.json +143 -0
  131. package/dist/skills/built-in/resist-urgency-manipulation.json +152 -0
  132. package/dist/skills/built-in/revisit-totaling-decision.json +125 -0
  133. package/dist/skills/built-in/roadside-assistance-dispatch.json +132 -0
  134. package/dist/skills/built-in/roommate-replacement.json +121 -0
  135. package/dist/skills/built-in/same-day-urgent-appointment.json +130 -0
  136. package/dist/skills/built-in/schedule-rental-viewing.json +111 -0
  137. package/dist/skills/built-in/service-move-shutoff-start-no-overlap.json +129 -0
  138. package/dist/skills/built-in/social-security-replacement-card.json +122 -0
  139. package/dist/skills/built-in/specialist-doctor-booking.json +136 -0
  140. package/dist/skills/built-in/spot-bait-and-switch.json +155 -0
  141. package/dist/skills/built-in/stop-recurring-ach.json +127 -0
  142. package/dist/skills/built-in/switch-postpaid-to-prepaid-mid-cycle.json +130 -0
  143. package/dist/skills/built-in/tactical-empathy-labeling.json +147 -0
  144. package/dist/skills/built-in/therapist-intake-call.json +133 -0
  145. package/dist/skills/built-in/train-cancellation-refund-rebook.json +104 -0
  146. package/dist/skills/built-in/transcript-request.json +128 -0
  147. package/dist/skills/built-in/travel-insurance-claim-on-the-road.json +114 -0
  148. package/dist/skills/built-in/travel-notice-unlock-card.json +119 -0
  149. package/dist/skills/built-in/unemployment-claim-status-and-appeal.json +123 -0
  150. package/dist/skills/built-in/uscis-case-status-and-biometrics.json +125 -0
  151. package/dist/skills/built-in/utility-deposit-waiver.json +122 -0
  152. package/dist/skills/built-in/utility-payment-plan-avoid-disconnect.json +122 -0
  153. package/dist/skills/built-in/verify-insurance-coverage-pre-procedure.json +140 -0
  154. package/dist/skills/built-in/verify-out-of-network-coverage.json +129 -0
  155. package/dist/skills/built-in/veteran-benefits-community-college.json +134 -0
  156. package/dist/skills/built-in/veterinary-new-patient-intake.json +135 -0
  157. package/dist/skills/built-in/visa-boarding-denial-recovery.json +115 -0
  158. package/dist/skills/built-in/vital-records-certificate-copy.json +120 -0
  159. package/dist/skills/built-in/voicemail-that-gets-called-back.json +114 -0
  160. package/dist/skills/built-in/voter-registration-and-ballot.json +124 -0
  161. package/dist/skills/built-in/walkaway-threats.json +159 -0
  162. package/dist/skills/built-in/wedding-vendor-intake.json +149 -0
  163. package/dist/skills/built-in/when-to-stop-being-polite.json +161 -0
  164. package/dist/skills/built-in/wire-funds-safely.json +129 -0
  165. package/package.json +1 -1
@@ -0,0 +1,126 @@
1
+ {
2
+ "id": "report-fraudulent-transaction",
3
+ "name": "Report a Fraudulent Transaction and Get Provisional Credit",
4
+ "version": "1.0.1",
5
+ "category": "finance-admin",
6
+ "tags": [
7
+ "fraud",
8
+ "provisional-credit",
9
+ "regulation-e",
10
+ "debit-card",
11
+ "phone-call",
12
+ "zero-liability",
13
+ "banking-finance"
14
+ ],
15
+ "description": "Call a bank's fraud line to report one or more unauthorized transactions on a debit or credit account, lock or reissue the compromised card, and secure a provisional credit while the investigation runs.",
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 sees one or more charges they did not authorize on a checking, savings, or credit card statement. Call promptly — Regulation E gives the strongest protection when reported within 2 business days for debit cards, and Reg Z caps unauthorized credit-card liability at $50 regardless. Use the fraud number printed on the back of the card or the bank's official site, NOT a number from an email or text.",
19
+ "preconditions": [
20
+ "User has the account number or card number (last 4 is fine to start).",
21
+ "User can list each fraudulent transaction: date, amount, merchant string.",
22
+ "User has confirmed the card is in their possession (or knows it is missing).",
23
+ "User has NOT clicked any links in 'fraud alert' texts/emails — those are often the scam itself.",
24
+ "Operator-stated cap on any actions that move money or change product terms."
25
+ ],
26
+ "estimated_call_duration_minutes": 25
27
+ },
28
+ "principles": [
29
+ "Speed matters legally. Reg E protection drops sharply after 2 business days for debit and after 60 days for credit. Open the report on this call, even if details are incomplete.",
30
+ "Use ONLY the number on the back of the card or the bank's official website. If the user got a 'fraud alert' text, do not call the number in it — call the card-back number and ask 'did you flag activity on my account?'",
31
+ "Separate 'card compromised' from 'identity compromised'. One bad debit charge usually means card data was skimmed; a new account opened in the user's name means identity theft and a different workflow (credit freeze, IdentityTheft.gov report).",
32
+ "Provisional credit is your goal on this call. Reg E requires it within 10 business days for most debit disputes (extended cases up to 45 days) — ask for it explicitly.",
33
+ "Document everything: case number, rep name, exact time of report, what was promised in writing.",
34
+ "Do not narrate guesses about who did it. 'I don't recognize this charge' is sufficient; speculation can be used to deny the claim ('you authorized your roommate'?)."
35
+ ],
36
+ "phrases": {
37
+ "opener": "Hi, I'm calling to report unauthorized transactions on my account. I'd like to file a fraud claim, lock the card, and request provisional credit. Can you open a case?",
38
+ "verify_the_rep": "Before I share details, can I confirm I'm speaking with the bank's fraud department and not a transferred line? Could you give me a case or reference number I can verify against the number on the back of my card?",
39
+ "list_the_charges": "Here are the charges I'm disputing: [date, amount, merchant], [date, amount, merchant]. I did not authorize any of these and the card has [been with me / is missing].",
40
+ "ask_for_provisional_credit": "Under Regulation E, can you process a provisional credit while the investigation proceeds? I'd like to confirm the timing in writing.",
41
+ "ask_for_reg_e_form": "Could you send me the written Regulation E claim form or affidavit so I can complete the formal dispute today?",
42
+ "escalate_to_fraud_supervisor": "Got it. Could you connect me to a fraud-team supervisor or claim specialist? I want to make sure the claim is opened correctly the first time.",
43
+ "ask_about_card_reissue": "Please cancel the current card number and issue a new one. What's the standard delivery time, and is expedited shipping available at no charge given the fraud?",
44
+ "graceful_close": "Thank you. Can you read back the case number, the provisional-credit amount and date, the new card delivery date, and your name? I'd like a written summary emailed or messaged in-app."
45
+ },
46
+ "tactics": [
47
+ {
48
+ "name": "Verify the line before disclosing",
49
+ "when": "Call connects, before reading any account info.",
50
+ "script": "Use the `verify_the_rep` phrase. If the user reached this number via a 'fraud alert' message rather than the card back, hang up and redial the card-back number.",
51
+ "priority": 1
52
+ },
53
+ {
54
+ "name": "Open the claim cleanly",
55
+ "when": "First substantive turn.",
56
+ "script": "Use the `opener`. State three asks together: file the claim, lock/reissue the card, request provisional credit. Bundling sets the call's agenda.",
57
+ "priority": 2
58
+ },
59
+ {
60
+ "name": "List charges in a single pass",
61
+ "when": "Rep asks what's disputed.",
62
+ "script": "Read each line item with date, amount, exact merchant string. If there are more than 5, ask the rep whether they want them by email upload or by phone.",
63
+ "priority": 3
64
+ },
65
+ {
66
+ "name": "Pin provisional-credit timing",
67
+ "when": "Rep confirms the claim is opened.",
68
+ "script": "Use `ask_for_provisional_credit`. For debit cards: cite Reg E 10-business-day rule. Get the rep to commit to either same-day, within 10 days, or to flag the case as 'extended investigation' (up to 45 days).",
69
+ "priority": 4
70
+ },
71
+ {
72
+ "name": "Escalate if first rep stalls",
73
+ "when": "Front-line rep says 'we can only open the case, supervisor decides credit.'",
74
+ "script": "Politely use `escalate_to_fraud_supervisor`. Fraud-team supervisors and claim specialists have authority front-line reps do not.",
75
+ "priority": 5
76
+ },
77
+ {
78
+ "name": "Cap the disclosure",
79
+ "when": "Rep asks for SSN, full DOB, or 'security questions' that feel excessive.",
80
+ "script": "Offer last 4 of SSN, last 4 of card, and answer the bank's own pre-set questions. If asked for full SSN with no clear reason, ask 'is full SSN required for this dispute, or will the last 4 work?' — usually last 4 is enough."
81
+ },
82
+ {
83
+ "name": "Get the writeback",
84
+ "when": "Claim opens and credit timing is set.",
85
+ "script": "Use `graceful_close`. Ask for the summary in-app or by secure message — never plain email with full account info."
86
+ }
87
+ ],
88
+ "boundaries": [
89
+ "Do NOT call any 'fraud line' number from a text, email, or pop-up — only the card-back / official-site number.",
90
+ "Do NOT share full SSN unless the bank explicitly says it is required and the user has approved (use `ask_operator`).",
91
+ "Do NOT speculate about who made the charges — say 'I did not authorize this.'",
92
+ "Do NOT agree to 'verify your identity' by reading back a one-time code the bank texted you — legitimate bank reps will never ask for that code.",
93
+ "Do NOT close the call without a case number, rep name, and timing on provisional credit and card reissue."
94
+ ],
95
+ "success_signals": [
96
+ "Rep opens a formal fraud case and reads back a case number.",
97
+ "Rep confirms provisional credit timing (same-day, 10 business days, or 45-day extended).",
98
+ "Rep confirms the compromised card is locked and a replacement is in the mail.",
99
+ "Rep offers expedited shipping at no charge.",
100
+ "Rep agrees to send a written summary via secure message."
101
+ ],
102
+ "failure_signals": [
103
+ "Rep refuses to open the case until a paper form is mailed in (red flag — push for supervisor).",
104
+ "Rep insists on provisional credit being denied without citing a specific reason.",
105
+ "Caller-ID does not match the card-back number you intended to dial (you may be on a spoofed line — hang up, redial).",
106
+ "Rep asks for a code they just texted (this is not the bank — terminate the call)."
107
+ ],
108
+ "exit_strategy": {
109
+ "on_success": "Confirm case number, provisional-credit amount + date, new card delivery date and tracking, rep name. Ask for a written summary via secure in-app message. Tell the operator to monitor the account daily for the next 7 days.",
110
+ "on_failure": "Get a case number anyway, note rep name, and ask to be transferred to a fraud claim specialist. If still blocked, file a CFPB complaint and escalate via the bank's executive-relations team. Inform the operator and request approval to escalate.",
111
+ "follow_ups": [
112
+ "Calendar: re-check provisional credit in 10 business days.",
113
+ "Calendar: re-check final investigation outcome in 45 days.",
114
+ "If identity theft is suspected, advise operator to consider a credit freeze at Equifax, Experian, TransUnion."
115
+ ]
116
+ },
117
+ "required_user_info": [
118
+ "Account or card last 4",
119
+ "List of disputed charges (date, amount, merchant string)",
120
+ "Whether the physical card is in possession or missing",
121
+ "Approved mailing address for the replacement card",
122
+ "Operator approval threshold for any action that moves money"
123
+ ],
124
+ "contributed_by": "banking-finance agent (v0.9.87 community drop)",
125
+ "updated_at": "2026-05-20T06:09:47Z"
126
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "id": "report-power-outage-get-etr",
3
+ "name": "Report a Power Outage and Get an ETR",
4
+ "version": "1.0.0",
5
+ "category": "customer-service",
6
+ "tags": [
7
+ "electric",
8
+ "outage",
9
+ "etr",
10
+ "phone-call",
11
+ "utility",
12
+ "utility-telecom"
13
+ ],
14
+ "description": "Call an electric utility to report an outage, confirm the trouble ticket is open against the user's specific address, and extract a real Estimated Time of Restoration (ETR) rather than the canned 'we're assessing' line.",
15
+ "disclaimer": "If anyone in the home depends on powered medical equipment (oxygen concentrator, dialysis, refrigerated meds), say so immediately — utilities maintain a Medical Baseline / Life-Support priority list and dispatch differently. If you see sparks, arcing, a downed wire, or smell burning, hang up and use the `report-downed-line-gas-smell-911-triage` skill instead.",
16
+ "context": {
17
+ "when_to_use": "The user has lost power (or seen flickers + brownouts) and either the utility IVR did not register their outage, or it did but no ETR has been posted, or the posted ETR has already expired without an update. NOT for momentary blinks where power is already back.",
18
+ "preconditions": [
19
+ "User's service address as it appears on the bill (street + unit + ZIP).",
20
+ "Account number OR phone number on file (either works for most utilities).",
21
+ "Whether neighbors are also out (single-premise vs. block-level changes the routing).",
22
+ "Time the outage started, even approximate."
23
+ ],
24
+ "estimated_call_duration_minutes": 12
25
+ },
26
+ "principles": [
27
+ "The IVR is the front door — do NOT skip it. Reporting through the automated system creates the ticket that humans look at. Press 0 only after the report is logged.",
28
+ "ETRs are a real field, not a vibe. If the rep says 'crews are working on it', that's a non-answer; politely insist on the value in the dispatch system.",
29
+ "Match the outage scope language reps use: 'single premise', 'transformer', 'feeder', 'substation'. The bigger the scope, the more honest the ETR.",
30
+ "If you're routed to the wrong queue (billing, new service), recognise it within 60 seconds — see the queue-check phrase — and request a warm transfer without losing your place.",
31
+ "Stay polite. Storm-night dispatchers are triaging hundreds of calls; the friendly caller gets remembered when a crew is freed up."
32
+ ],
33
+ "phrases": {
34
+ "opener": "Hi, I'm reporting an outage at [address]. My power went out at about [time]. I already reported it through the IVR — I'd like to confirm the ticket is open and get an ETR.",
35
+ "queue_check": "Quick question before we go further — is this the outage / dispatch line? I want to make sure I'm not taking time from a billing rep when I need outage.",
36
+ "transfer_request": "I think I'm in the wrong queue — could you do a warm transfer to outage dispatch and stay on the line until they pick up? I don't want to lose my place in your hold queue if they can't take me.",
37
+ "ask_for_etr": "What's the current ETR showing in your dispatch system? Not 'crews are working' — the actual estimated restoration timestamp.",
38
+ "ask_scope": "Is this a single-premise issue, a transformer, or a larger feeder / substation outage? I want to know whether to plan for hours or for the day.",
39
+ "medical_flag": "Before we go further — there's someone in the household on [oxygen / dialysis / refrigerated meds]. Can you flag this account as life-support priority and tell me what that changes about dispatch?",
40
+ "ask_callback": "If the ETR slips, can you put a callback on the ticket so I'm notified rather than guessing? My best number is [number].",
41
+ "graceful_close": "Thanks — so I have ticket [number], ETR [time], scope [single/transformer/feeder]. I'll call back if it slips past [time + 30 min]."
42
+ },
43
+ "tactics": [
44
+ {
45
+ "name": "Confirm the ticket exists",
46
+ "when": "First substantive turn after the opener.",
47
+ "script": "Ask the rep to read back the ticket number and the address on file. Verify the address matches exactly — duplicate-address bugs are common in multi-unit buildings.",
48
+ "priority": 1
49
+ },
50
+ {
51
+ "name": "Recognise wrong-queue within 60 seconds",
52
+ "when": "Rep starts asking about billing details, autopay, or 'how can I help you today' in a way that suggests general CS.",
53
+ "script": "Use the `queue_check` phrase. If confirmed wrong queue, use `transfer_request` and ask them to stay on the line until the outage queue picks up — this preserves your hold-time precedence.",
54
+ "priority": 2
55
+ },
56
+ {
57
+ "name": "Extract a real ETR",
58
+ "when": "Rep gives a vague 'crews are working' answer.",
59
+ "script": "Use the `ask_for_etr` phrase. If they still won't commit, ask for the dispatch timestamp or the field-supervisor's last update time. Even 'last updated 14 minutes ago, still showing 9pm' is real information.",
60
+ "priority": 3
61
+ },
62
+ {
63
+ "name": "Pin down scope",
64
+ "when": "After getting the ETR.",
65
+ "script": "Use `ask_scope`. Scope drives plan-B decisions for the user (hotel? generator fuel? food on dry ice?).",
66
+ "priority": 4
67
+ },
68
+ {
69
+ "name": "Flag medical needs",
70
+ "when": "Anyone in the household is on powered medical equipment.",
71
+ "script": "Use the `medical_flag` phrase early. This is not leverage, it's literally how dispatch prioritises — but only if the account is flagged. Ask what documentation the utility needs to keep the flag on file for future outages.",
72
+ "priority": 5
73
+ },
74
+ {
75
+ "name": "Request proactive callback",
76
+ "when": "Before closing.",
77
+ "script": "Use `ask_callback`. Callback on slip is a real feature in most modern utility CIS systems; the rep just has to tick a box."
78
+ }
79
+ ],
80
+ "boundaries": [
81
+ "Do NOT exaggerate or fabricate medical-baseline needs — utilities verify and fraudulent flags get the account removed from the list when it matters.",
82
+ "Do NOT demand a crew be diverted to the user's address ahead of larger outages. Restoration order is feeder → branch → premise for a reason.",
83
+ "Do NOT report damage you cannot see (downed lines, fire) just to get faster dispatch. Use the dedicated emergency triage skill if there's a real safety issue.",
84
+ "Do NOT give the rep a Social Security Number. Account number, phone, or address is sufficient for outage reporting."
85
+ ],
86
+ "success_signals": [
87
+ "Rep confirms ticket number AND a specific ETR timestamp.",
88
+ "Rep identifies scope (transformer, feeder, substation) without hedging.",
89
+ "Rep adds a callback-on-slip note to the ticket.",
90
+ "Medical-baseline flag is confirmed on the account."
91
+ ],
92
+ "failure_signals": [
93
+ "Rep refuses to give any ETR after two asks and a supervisor request.",
94
+ "Ticket cannot be found and rep insists on re-reporting via IVR — accept this once, but if it loops, ask for the outage-management-system supervisor.",
95
+ "Hold time exceeds 30 minutes during a non-storm event with no progress.",
96
+ "Rep gives an ETR that is clearly a placeholder (e.g., 11:59 PM same-day) and won't elaborate."
97
+ ],
98
+ "exit_strategy": {
99
+ "on_success": "Confirm ticket number, ETR, scope, and callback flag. Note the rep's name and the dispatch-update timestamp.",
100
+ "on_failure": "End politely, log the failed attempt with timestamp, and either re-report through the IVR (creates a fresh ticket) or escalate via the utility's outage map / Twitter handle. Many utilities post real-time ETR updates publicly that beat what the phone rep is reading.",
101
+ "follow_ups": [
102
+ "If ETR slips past the stated time by more than 30 minutes with no callback, call back and reference the original ticket number.",
103
+ "After restoration, if outage exceeded 24 hours OR caused appliance damage, file for a credit using `outage-credit-applied`."
104
+ ]
105
+ },
106
+ "required_user_info": [
107
+ "Service address (exact, with unit number)",
108
+ "Account number or phone on file",
109
+ "Time the outage started",
110
+ "Whether neighbors are out",
111
+ "Any medical-equipment needs in the household",
112
+ "Best callback number"
113
+ ],
114
+ "contributed_by": "utility-telecom agent (v0.9.87 community drop)",
115
+ "updated_at": "2026-05-20T06:09:47Z"
116
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "id": "report-urgent-maintenance",
3
+ "name": "Report and Escalate an Urgent Maintenance Issue",
4
+ "version": "1.0.1",
5
+ "category": "real-estate",
6
+ "tags": [
7
+ "maintenance",
8
+ "habitability",
9
+ "no-heat",
10
+ "leak",
11
+ "pest",
12
+ "emergency",
13
+ "phone-call",
14
+ "housing-tenancy"
15
+ ],
16
+ "description": "Call the landlord, property manager, or after-hours maintenance line to report an urgent habitability issue (no heat, active leak, gas smell, sewage, severe pest, broken lock) — while creating a written paper trail that preserves the tenant's legal posture if the issue is ignored.",
17
+ "disclaimer": "Not legal advice. Habitability + early-termination skills are scripted to PRESERVE legal posture (request things in writing, refuse verbal-only assurances) — but the operator must consult a tenant attorney for actual rights determination.",
18
+ "context": {
19
+ "when_to_use": "An urgent condition exists that affects habitability or safety: no heat in cold weather, no hot water, no running water, gas smell, active water leak, sewage backup, broken exterior lock, severe pest infestation, electrical hazard, broken AC in extreme heat (in many jurisdictions). Use AFTER any immediate safety call (911 for gas, fire dept for active leak threatening structure) is already in motion if needed.",
20
+ "preconditions": [
21
+ "User is safe — no active gas leak, fire, or flooding requiring 911.",
22
+ "User has the landlord's name, the property-management number, and the after-hours emergency line (if any).",
23
+ "User can describe what's broken, when it started, and what they've already tried.",
24
+ "User has (or is willing to take) photos / video / a thermostat reading documenting the issue."
25
+ ],
26
+ "estimated_call_duration_minutes": 12
27
+ },
28
+ "principles": [
29
+ "Document first, then call. Photos, videos, and a thermostat reading with a timestamp are leverage; memory is not.",
30
+ "State the words 'habitability' or 'uninhabitable' deliberately when it applies. It signals you know the legal frame — landlords respond faster.",
31
+ "Get a specific ETA, not 'soon' or 'this week.' 'A technician by 6pm tomorrow' is actionable; 'we'll get to it' is not.",
32
+ "Always follow the call with an email or text restating what was promised, by whom, by when. That email is the paper trail courts actually look at.",
33
+ "Refuse verbal-only assurances about anything that affects your rent, your lease, or your right to repair-and-deduct. Ask for it in writing.",
34
+ "Do NOT withhold rent or threaten to withhold rent on the call. That's a legal step with strict procedural requirements that vary by state — escalate to operator instead."
35
+ ],
36
+ "phrases": {
37
+ "opener_business_hours": "Hi, this is [name] at [unit/address]. I have an urgent maintenance issue I need to report — [one-sentence description]. I'm calling to get a technician scheduled today and to put this on record.",
38
+ "opener_after_hours": "Hi, I'm calling the emergency line for [unit/address]. I have [issue] — this is affecting habitability and I need someone out tonight.",
39
+ "name_the_legal_frame": "Just so we're aligned — without [heat / running water / a working lock / etc.] the unit isn't habitable, so I need this treated as urgent, not standard maintenance.",
40
+ "ask_for_eta": "What time can a technician be here? I need a specific window today, not a callback later.",
41
+ "ask_who_is_dispatched": "Can you tell me the name of the technician or vendor who's coming, and the number I can reach them at if they're running late?",
42
+ "confirm_in_writing": "Can you send me an email or text in the next 15 minutes confirming the technician's name, the ETA, and what's being repaired? I want to make sure we both have the same record.",
43
+ "escalate_to_manager": "Okay — can you connect me with the property manager or your supervisor? This isn't a standard ticket and it needs that level of attention.",
44
+ "graceful_close_promised": "Thank you. Just to confirm: [technician name] is arriving by [time] to fix [issue], and you're sending me written confirmation now. I'll be here.",
45
+ "graceful_close_unresolved": "Thanks for your help. Since we don't have an ETA yet, I'm going to follow up by email right after this call documenting what we discussed, and I may need to escalate if I don't hear back by [time]."
46
+ },
47
+ "tactics": [
48
+ {
49
+ "name": "Open with the legal frame already implied",
50
+ "when": "First substantive turn.",
51
+ "script": "Use opener and `name_the_legal_frame`. The word 'habitability' shifts the call from 'ticket' to 'priority' without being adversarial.",
52
+ "priority": 1
53
+ },
54
+ {
55
+ "name": "Pin a specific ETA",
56
+ "when": "After the issue is acknowledged.",
57
+ "script": "Use `ask_for_eta`. Refuse 'we'll let you know' — ask for a window. If they can't give one, that itself is the answer and goes in the paper trail.",
58
+ "priority": 2
59
+ },
60
+ {
61
+ "name": "Identify the technician",
62
+ "when": "Once an ETA exists.",
63
+ "script": "Use `ask_who_is_dispatched`. Knowing the vendor's name lets the user verify they actually showed up, and tightens accountability.",
64
+ "priority": 3
65
+ },
66
+ {
67
+ "name": "Force the paper trail",
68
+ "when": "Before ending any call where a promise was made.",
69
+ "script": "Use `confirm_in_writing`. If they won't email a confirmation, that's a red flag — note it and operator should send the recap email immediately.",
70
+ "priority": 4
71
+ },
72
+ {
73
+ "name": "Escalate to manager if blown off",
74
+ "when": "Front-line dispatcher won't commit to a same-day or same-shift ETA on a true habitability issue.",
75
+ "script": "Use `escalate_to_manager`. Habitability issues legally require prompt response in most jurisdictions; the manager will know that even if dispatch doesn't.",
76
+ "priority": 5
77
+ },
78
+ {
79
+ "name": "Set the next escalation step BEFORE ending the call",
80
+ "when": "Call ends without a firm ETA.",
81
+ "script": "Use `graceful_close_unresolved` and state a specific deadline (e.g. 'if I don't hear back by 6pm'). Then follow through — the recap email + the missed deadline together are what unlock formal complaints later."
82
+ }
83
+ ],
84
+ "boundaries": [
85
+ "Do NOT threaten to withhold rent. Rent-withholding has strict legal procedure that varies by jurisdiction — ask_operator.",
86
+ "Do NOT agree to fix the issue yourself in exchange for a reimbursement promise unless the user has explicitly authorised it AND has the cost cap in writing.",
87
+ "Do NOT sign any waiver, release, or 'as-is' acknowledgment about the condition — even verbally.",
88
+ "Do NOT accept 'we'll send someone when we can' as a final answer on a true emergency. Escalate.",
89
+ "Do NOT exaggerate the issue. 'It's a little chilly' is not no-heat; misframing destroys credibility for the next real call."
90
+ ],
91
+ "success_signals": [
92
+ "Specific technician name + ETA window within a habitable timeframe.",
93
+ "Written confirmation arrives by email or text within an hour.",
94
+ "Landlord acknowledges habitability framing without resistance.",
95
+ "Manager or supervisor takes the call and re-runs the ticket."
96
+ ],
97
+ "failure_signals": [
98
+ "Landlord says 'we'll get to it' with no ETA.",
99
+ "Landlord refuses to send written confirmation.",
100
+ "Landlord pressures the user to fix it themselves with no reimbursement commitment in writing.",
101
+ "Landlord retaliates with talk of non-renewal, eviction, or rent increase when the tenant reports the issue.",
102
+ "Same issue has been reported 2+ times and no repair has been completed."
103
+ ],
104
+ "exit_strategy": {
105
+ "on_success": "Confirm technician name, ETA, scope of repair, and that written confirmation was sent. Tell operator to keep the unit accessible for the window and to document the repair after it's done.",
106
+ "on_failure": "End politely, send the recap email immediately, and recommend escalation: city housing department complaint, repair-and-deduct in jurisdictions that allow it, or tenant-attorney consult. See `file-habitability-complaint` skill.",
107
+ "follow_ups": [
108
+ "Operator sends the recap email within 15 minutes: who was called, when, what was promised, by whom.",
109
+ "Take a photo / video of the condition AFTER the call so the timestamped record is complete.",
110
+ "Calendar reminder at the ETA — if technician hasn't arrived, call back and document the no-show.",
111
+ "If unresolved within the promised window, escalate to `file-habitability-complaint`."
112
+ ]
113
+ },
114
+ "required_user_info": [
115
+ "Full unit address and unit number",
116
+ "Landlord name, property management number, after-hours emergency number",
117
+ "One-sentence description of the issue and when it started",
118
+ "Photos / videos / thermostat readings already captured",
119
+ "Whether the unit is currently safe to stay in tonight"
120
+ ],
121
+ "contributed_by": "housing-tenancy agent (v0.9.87 community drop)",
122
+ "updated_at": "2026-05-20T06:09:47Z"
123
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "id": "request-credit-limit-increase",
3
+ "name": "Request a Credit-Limit Increase",
4
+ "version": "1.0.1",
5
+ "category": "finance-admin",
6
+ "tags": [
7
+ "credit-limit",
8
+ "credit-card",
9
+ "utilization",
10
+ "credit-score",
11
+ "phone-call",
12
+ "soft-pull",
13
+ "hard-pull",
14
+ "banking-finance"
15
+ ],
16
+ "description": "Call a credit-card issuer to request a credit-limit increase (CLI) — framed and timed to maximize approval odds and minimize hard inquiries on the user's credit report.",
17
+ "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.",
18
+ "context": {
19
+ "when_to_use": "User wants more credit headroom on an existing card — typically to lower their utilization ratio (improves credit score), absorb a large planned purchase, or unlock travel-redemption thresholds. Don't request a CLI on the same call as a hardship inquiry — those flag opposite risk signals.",
20
+ "preconditions": [
21
+ "Card account is at least 6 months old (most issuers require seasoning).",
22
+ "Last 6 statements have been paid on time, ideally in full.",
23
+ "User has not requested a CLI on this card in the last 6 months (cooldown).",
24
+ "User knows whether the issuer does soft-pull vs hard-pull CLIs (Cap One, Discover, AmEx = soft; Chase, Citi = often hard).",
25
+ "User has updated income on file (recent raise / new job) — issuers cap CLI by reported income."
26
+ ],
27
+ "estimated_call_duration_minutes": 15
28
+ },
29
+ "principles": [
30
+ "Ask BEFORE you call: 'Is this a soft inquiry or a hard inquiry?' If hard, weigh the score hit against the limit gain — and against the operator's CLI policy.",
31
+ "Frame the ask around UTILITY, not need. 'I'd like more room for upcoming travel / a planned purchase' beats 'I'm running out of room' — the latter signals stress and gets declined.",
32
+ "Update income FIRST. The CLI algorithm caps your new limit at a multiple of household income on file; if income is stale, update it before requesting the increase.",
33
+ "Pick a specific target. 'I'd like to go from $X to $Y' gives the rep a number to evaluate. Vague asks ('as much as possible') often default to the smallest tier.",
34
+ "If asked WHY: rotate among 'lower utilization for credit-health', 'upcoming planned purchase', 'travel / large reservation', 'consolidating to fewer cards'. NEVER say 'because I'm carrying a balance and need room'.",
35
+ "If declined, ask the reason in writing (Adverse Action Notice required under Reg B / ECOA) so the user can fix the actual gating factor."
36
+ ],
37
+ "phrases": {
38
+ "opener": "Hi, I'd like to request a credit-limit increase on my [card name] account. Before we start, can you confirm whether your CLI process uses a soft inquiry or a hard inquiry on my credit report?",
39
+ "update_income_first": "Before we run the CLI, I'd like to update my income on file. My current annual income is [amount]. Can you update that and then evaluate the increase against the new figure?",
40
+ "specific_ask": "I'm currently at $[current limit] and I'd like to go to $[target]. Can you submit that request?",
41
+ "frame_reason": "I'm planning [upcoming travel / a large reservation / a planned purchase] and I'd like the headroom. I also like to keep my utilization low for credit-health reasons.",
42
+ "ask_about_pull_type": "Just to confirm — this CLI request will be processed as a soft inquiry only, with no hard inquiry on my credit report?",
43
+ "ask_for_adverse_action": "Okay — under the Equal Credit Opportunity Act, can you send me the Adverse Action Notice with the specific reason for the decline? I'd like to address whatever the gating factor is before reapplying.",
44
+ "counter_offer_accept": "Thanks — I'll take the $[counter] increase. Can you confirm the new limit, the effective date, and whether this will appear in my next statement cycle?",
45
+ "graceful_close": "Thank you. Can you confirm the new limit in writing, the effective date, and that no hard inquiry was placed? I'd also like the rep name and a reference number."
46
+ },
47
+ "tactics": [
48
+ {
49
+ "name": "Confirm pull type before agreeing",
50
+ "when": "First substantive turn.",
51
+ "script": "Use `opener` + `ask_about_pull_type`. If the answer is 'hard pull', pause: confirm with the operator whether the score hit is acceptable before authorizing. Many users would skip the request rather than absorb a hard inquiry.",
52
+ "priority": 1
53
+ },
54
+ {
55
+ "name": "Update income first",
56
+ "when": "After confirming pull type, before submitting the CLI.",
57
+ "script": "Use `update_income_first`. CLI algorithms cap the increase against reported income — updating stale income unlocks a higher ceiling.",
58
+ "priority": 2
59
+ },
60
+ {
61
+ "name": "Anchor with a specific number",
62
+ "when": "Rep asks 'how much would you like?'",
63
+ "script": "Use `specific_ask`. Aim 50-100% above current limit for healthy accounts; 25-50% for accounts under 1 year old. Don't anchor too low.",
64
+ "priority": 3
65
+ },
66
+ {
67
+ "name": "Frame around utility, not stress",
68
+ "when": "Rep asks 'why are you requesting this?'",
69
+ "script": "Use `frame_reason`. Stay away from any wording that implies financial strain — that flips the algorithm against you.",
70
+ "priority": 4
71
+ },
72
+ {
73
+ "name": "Take partial wins",
74
+ "when": "Rep offers a smaller increase than asked.",
75
+ "script": "Use `counter_offer_accept`. A partial CLI still lowers utilization. Note the date — most issuers require 6 months before the next request."
76
+ },
77
+ {
78
+ "name": "Demand the reason on decline",
79
+ "when": "CLI is declined.",
80
+ "script": "Use `ask_for_adverse_action`. The Adverse Action Notice (Reg B / ECOA) tells the user the specific gating factor (utilization, recent inquiries, derogatory marks, low income on file) so it's fixable next time."
81
+ },
82
+ {
83
+ "name": "Lock in the writeback",
84
+ "when": "Approved.",
85
+ "script": "Use `graceful_close`. New limit + effective date + 'no hard inquiry' confirmed + rep name + reference number."
86
+ }
87
+ ],
88
+ "boundaries": [
89
+ "Do NOT authorize a hard inquiry without explicit operator approval — it can shave 5-10 points off the score for ~12 months.",
90
+ "Do NOT misrepresent income — federal crime, and issuers can verify via tax-transcript pulls.",
91
+ "Do NOT bundle this call with a hardship / payment-plan call — opposite risk signals to the issuer.",
92
+ "Do NOT request CLIs on multiple cards on the same day — looks like credit-seeking behavior.",
93
+ "Do NOT share full SSN — last 4 plus card info is sufficient for almost all issuers."
94
+ ],
95
+ "success_signals": [
96
+ "Rep confirms soft inquiry only.",
97
+ "Income update accepted without further documentation.",
98
+ "CLI approved at requested or partial amount.",
99
+ "New limit effective immediately or next cycle.",
100
+ "Reference number issued."
101
+ ],
102
+ "failure_signals": [
103
+ "Rep insists on a hard inquiry as the only path (decline politely, end call).",
104
+ "Account flagged for 'recent CLI request' (you're inside the cooldown — reschedule).",
105
+ "Income request triggers documentation demand (W-2, paystub) — escalate or defer.",
106
+ "Decline without an Adverse Action reason on request."
107
+ ],
108
+ "exit_strategy": {
109
+ "on_success": "Confirm new limit, effective date, pull type, reference number, rep name. Tell the operator the new utilization ratio (statement balance / new limit) so they can track score impact.",
110
+ "on_failure": "Get the Adverse Action Notice in writing. Wait the issuer's cooldown (usually 6 months), address the gating factor (utilization, on-time payments, income), then retry.",
111
+ "follow_ups": [
112
+ "Calendar: re-evaluate in 6 months once cooldown clears.",
113
+ "Watch the next 1-2 statements to confirm the new limit appears correctly on the credit report.",
114
+ "If a hard inquiry was placed against the user's intent, dispute it with the bureau."
115
+ ]
116
+ },
117
+ "required_user_info": [
118
+ "Card account last 4",
119
+ "Current limit and target limit",
120
+ "Updated annual income (gross household)",
121
+ "Whether operator approves a hard inquiry if required",
122
+ "Date of last CLI request on this card"
123
+ ],
124
+ "contributed_by": "banking-finance agent (v0.9.87 community drop)",
125
+ "updated_at": "2026-05-20T06:09:47Z"
126
+ }