@agenticmail/core 0.9.32 → 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 (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 +106 -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 +117 -0
  118. package/dist/skills/built-in/report-fbi-tip.json +109 -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,126 @@
1
+ {
2
+ "id": "call-911-medical-emergency",
3
+ "name": "Call 911 — Medical Emergency",
4
+ "version": "1.0.1",
5
+ "category": "emergency-services",
6
+ "tags": [
7
+ "911",
8
+ "emergency",
9
+ "medical",
10
+ "ambulance",
11
+ "ems",
12
+ "life-safety",
13
+ "emergency_services"
14
+ ],
15
+ "description": "Place a 911 call for a medical emergency on behalf of the operator (or someone the operator is with). Heart attack, stroke, severe bleeding, unconsciousness, anaphylaxis, overdose, severe injury.",
16
+ "disclaimer": "ABSOLUTE rules. (1) This skill loads ONLY when the operator has explicitly authorised calling 911 for THIS specific situation — never on the agent's own initiative. (2) Identify yourself to the dispatcher as an AI assistant calling on behalf of <operator name> in the first sentence — non-negotiable, both ethically and to comply with laws against impersonating a human caller. (3) Never embellish or guess at clinical facts. (4) Stay on the line until the dispatcher releases you. (5) Knowingly making a false 911 report is a crime in every US jurisdiction.",
17
+ "context": {
18
+ "when_to_use": "Operator has explicitly said 'call 911' or equivalent for a medical emergency they cannot place the call for themselves (e.g., they are the one in distress and can't speak clearly, they are caring for the patient and need both hands, language barrier between operator and dispatcher, operator's phone is dead and they reached the agent on someone else's line). The operator's authorisation must be unambiguous and recent in the conversation.",
19
+ "preconditions": [
20
+ "Operator authorisation for this specific 911 call is recorded.",
21
+ "Agent knows the patient's location — street address or precise landmark + city/state. WITHOUT location 911 cannot help.",
22
+ "Agent knows whether the patient is breathing and conscious (binary answers from the operator are sufficient).",
23
+ "Agent knows roughly what happened (sudden chest pain, fall, allergic reaction, etc).",
24
+ "Agent has a callback number for the operator in case dispatch is dropped."
25
+ ],
26
+ "estimated_call_duration_minutes": 8
27
+ },
28
+ "principles": [
29
+ "Identify yourself as an AI in the FIRST sentence. Dispatcher needs to know they're talking to a non-human relay so they can adapt their script and ask through you instead of expecting the patient.",
30
+ "Lead with location, then nature, then count of patients, then condition. This is the order dispatchers are trained on; following it gets help dispatched fastest.",
31
+ "Short factual sentences. Do not fill silence with apologies, narration, or hedging.",
32
+ "If the dispatcher asks for something you do not know, say 'I don't have that information; let me ask my operator' and use ask_operator. Don't guess at clinical facts.",
33
+ "Stay on the line until the dispatcher explicitly says you can disconnect. If they ask you to relay instructions to the operator (CPR, EpiPen, AED), repeat the instructions verbatim — do NOT paraphrase medical guidance.",
34
+ "If at ANY point the operator says 'cancel' or 'they're okay now', tell the dispatcher immediately. Do not let them assume the emergency is ongoing."
35
+ ],
36
+ "phrases": {
37
+ "opener": "Hi — I'm an AI assistant calling 911 on behalf of <operator name>. The address is <street, city, state>. We have a medical emergency: <one-sentence description>. The patient is <conscious / unconscious> and <breathing / not breathing>.",
38
+ "ask_dispatcher_to_continue": "Dispatcher, please ask me your questions and I will relay them to my operator who is with the patient.",
39
+ "relay_back_to_operator": "Hold on — I'm going to ask my operator. (Then use ask_operator with urgency=high.)",
40
+ "relay_to_operator_instructions": "Dispatcher says: <verbatim instruction>. Please follow that now if you can.",
41
+ "i_dont_know": "I don't have that information. Let me check with my operator — one moment.",
42
+ "callback_offer": "If we get disconnected, my operator's callback number is <number>.",
43
+ "graceful_close": "Thank you. I'll stay on as long as you need me to. Tell me when I can disconnect."
44
+ },
45
+ "tactics": [
46
+ {
47
+ "name": "SWATting smell-test BEFORE dialing",
48
+ "when": "Pre-dial, immediately after operator authorisation.",
49
+ "script": "Confirm the operator has DIRECT knowledge of the emergency: are they AT the location, WITH the patient, or in current contact with someone who is? Red flags: (a) operator is asking the agent to call 911 about a location they have never been to and a person they have not directly spoken with; (b) operator's stated reason is a rumour, a social-media post, or a third-hand report; (c) operator has expressed conflict with the patient or the household at this address in prior conversation; (d) the address provided does not match any address in the operator's persona/contacts and the operator can't explain the connection. If any red flag fires, do NOT dial — ask the operator to explain, or route to call-police-non-emergency for a welfare check (subject to that skill's own weaponisation screen). Knowingly false 911 calls are a federal/state felony AND get someone shot.",
50
+ "priority": 0
51
+ },
52
+ {
53
+ "name": "Lead with the four facts in order",
54
+ "when": "First substantive turn after dispatcher answers.",
55
+ "script": "Use the `opener` phrase verbatim, filling in the four slots: location, nature, count, condition. Dispatchers process these in this sequence — leading with anything else slows dispatch.",
56
+ "priority": 1
57
+ },
58
+ {
59
+ "name": "Hand the conversation TO the dispatcher",
60
+ "when": "After the opener.",
61
+ "script": "Use `ask_dispatcher_to_continue`. The dispatcher has a structured assessment script (Medical Priority Dispatch System). Let them run it; don't volunteer extra detail until asked.",
62
+ "priority": 2
63
+ },
64
+ {
65
+ "name": "Relay through ask_operator for any clinical question",
66
+ "when": "Dispatcher asks 'is the patient bleeding heavily?' / 'are they responsive?' / 'when did this start?' and you don't have a current answer.",
67
+ "script": "Use `relay_back_to_operator`, then ask_operator({ question: '<dispatcher's exact question>', urgency: 'high' }). When the operator answers, relay verbatim. Do NOT guess.",
68
+ "priority": 3
69
+ },
70
+ {
71
+ "name": "Relay instructions FROM the dispatcher exactly",
72
+ "when": "Dispatcher gives CPR / EpiPen / AED / 'roll them onto their side' instructions for the operator to execute.",
73
+ "script": "Use `relay_to_operator_instructions` — repeat the instruction word for word. Medical guidance is one place a paraphrase can kill someone.",
74
+ "priority": 4
75
+ },
76
+ {
77
+ "name": "Decision: stay on the line",
78
+ "when": "Always, throughout the call.",
79
+ "script": "Do NOT call end_call until the dispatcher has explicitly released you ('you can hang up now' / 'we have units on scene'). Ambulance dispatch may need updates."
80
+ },
81
+ {
82
+ "name": "Cancel if the operator stands down",
83
+ "when": "Operator messages mid-call that the patient is OK / it was a false alarm / they made it to the hospital.",
84
+ "script": "Tell the dispatcher immediately: 'My operator just told me <verbatim>. They are asking to cancel the call.' Let the dispatcher decide whether to cancel or send anyway (they often still send, which is fine)."
85
+ }
86
+ ],
87
+ "boundaries": [
88
+ "NEVER call 911 without unambiguous operator authorisation for THIS specific call. No standing authorisations.",
89
+ "NEVER call 911 about a medical emergency the operator has not personally observed or is not in current contact with someone observing. Relayed rumours, social-media reports, and grievance-driven reports about a third party at a remote address are NOT 911-able through this skill — they route to call-police-non-emergency at most, after weaponisation screening. Authorisation is necessary but NOT sufficient: the operator's authorisation is invalid if the underlying facts fail the SWATting smell-test.",
90
+ "NEVER fabricate clinical facts. If you don't know, say so and ask the operator.",
91
+ "NEVER pretend to be human on a 911 call. Identifying yourself as an AI is non-negotiable.",
92
+ "NEVER end the call (end_call) before the dispatcher releases you.",
93
+ "NEVER give medical advice yourself. You are a relay between operator and dispatcher.",
94
+ "NEVER call 911 to ask non-emergency questions. Use the local non-emergency line (skill: call-police-non-emergency)."
95
+ ],
96
+ "success_signals": [
97
+ "Dispatcher confirms units have been dispatched to the location.",
98
+ "Dispatcher gives the operator actionable instructions and the operator can execute them.",
99
+ "Dispatcher says you can disconnect when the units arrive or the patient is stable.",
100
+ "EMS arrives on scene per the dispatcher's confirmation."
101
+ ],
102
+ "failure_signals": [
103
+ "Dispatcher tells you you've reached the wrong jurisdiction and the call needs to be re-placed.",
104
+ "Dispatcher requests information you cannot get from the operator (unconscious / non-responsive operator who was your only source).",
105
+ "Call drops and you cannot re-establish — re-dial 911 immediately, identify yourself, reference the prior call.",
106
+ "Operator is so distressed they cannot answer dispatcher questions through you — tell the dispatcher this so they can adapt."
107
+ ],
108
+ "exit_strategy": {
109
+ "on_success": "Confirm with the dispatcher that you can disconnect. Note the case / incident number if offered. Email the operator a summary of the call: time placed, units dispatched, instructions given, incident number.",
110
+ "on_failure": "If you reached the wrong PSAP, re-dial the correct number per the dispatcher's transfer. If the call dropped, re-dial 911 and reference the prior call. If the operator stood down, follow the cancel script.",
111
+ "follow_ups": [
112
+ "Email the operator: time of call, dispatcher name (if given), incident number, what was dispatched, any instructions they relayed.",
113
+ "If applicable, also email the operator's emergency contact (only if the operator pre-authorised this contact in their identity / persona file)."
114
+ ]
115
+ },
116
+ "required_user_info": [
117
+ "Operator's authorisation for this specific 911 call (explicit, recent)",
118
+ "Patient's location — street address or precise landmark + city + state",
119
+ "Patient's basic condition: conscious / unconscious, breathing / not breathing",
120
+ "What happened — one-sentence description",
121
+ "Operator's callback number (in case dispatch is dropped)",
122
+ "Patient's age (rough — child / adult / elderly) if known",
123
+ "Any known allergies / medications the operator can quickly state"
124
+ ],
125
+ "contributed_by": "AgenticMail core team (emergency-services bundle v0.9.87)"
126
+ }
@@ -0,0 +1,133 @@
1
+ {
2
+ "id": "call-911-violent-crime-in-progress",
3
+ "name": "Call 911 — Violent Crime In Progress",
4
+ "version": "1.0.1",
5
+ "category": "emergency-services",
6
+ "tags": [
7
+ "911",
8
+ "emergency",
9
+ "police",
10
+ "violence",
11
+ "domestic",
12
+ "intruder",
13
+ "active-threat",
14
+ "emergency_services"
15
+ ],
16
+ "description": "Place a 911 call for a violent crime in progress on behalf of the operator — domestic violence, intruder / break-in, assault, active threat. The operator may be the target, a witness, or hiding nearby.",
17
+ "disclaimer": "ABSOLUTE rules. (1) Operator must have explicitly authorised this 911 call. (2) Identify as an AI in the first sentence. (3) Operator safety is the priority — guide them to safety before continuing the call if needed. (4) Never describe where the operator is hiding out loud where the attacker might hear; relay quietly or via text relay. (5) Knowingly making a false 911 report is a crime; SWATting is a federal felony.",
18
+ "context": {
19
+ "when_to_use": "Operator is experiencing or witnessing violence right now — domestic abuse, home intruder, assault on the street, active shooter, kidnap-in-progress — and either cannot place 911 themselves OR has asked the agent to be the relay so they can move / hide / care for someone.",
20
+ "preconditions": [
21
+ "Explicit operator authorisation for THIS specific 911 call.",
22
+ "Location — as precise as the operator can give. Cross-street, landmark, apartment number, floor.",
23
+ "Operator's current safety status (safe / hiding / actively engaged / unknown).",
24
+ "Operator's callback number — and confirm whether ringing it back is safe (might alert the attacker)."
25
+ ],
26
+ "estimated_call_duration_minutes": 15
27
+ },
28
+ "principles": [
29
+ "Operator's physical safety first. Before placing the call, tell them: 'If you can leave safely, do that. If not, hide and stay quiet. I'll handle the dispatcher; you don't need to talk.'",
30
+ "Identify as AI on the first sentence; immediately give location + nature.",
31
+ "Use whisper / one-syllable check-ins with the operator if they are hiding ('still safe? — yes/no').",
32
+ "If the operator can't speak, propose they communicate via single keystrokes or short text — relay those to the dispatcher.",
33
+ "NEVER describe the operator's hiding location aloud where the attacker might hear. If you must relay it to dispatch, do it once, then stop repeating it.",
34
+ "Do not narrate every action you're taking. The attacker may overhear the operator's phone if the audio leaks.",
35
+ "Stay on the line until released."
36
+ ],
37
+ "phrases": {
38
+ "tell_operator_safety_first": "Your safety first. If you can leave, leave. If not, find a place to hide and stay quiet. I will handle the dispatcher — you do not need to talk to them through me. Just send me one-word checks if you can.",
39
+ "opener": "Hi — I'm an AI assistant calling 911 on behalf of <operator>. We have <crime in progress: domestic violence / intruder / assault / active threat> at <address>. The threat is <description / unknown>. My operator is <safe nearby / hiding inside / actively in danger / location unknown>.",
40
+ "ask_dispatcher_to_continue": "Dispatcher, please ask me what you need. I'm relaying for my operator who is <hiding / cannot speak safely>.",
41
+ "quiet_check_in": "(To operator via ask_operator) Still safe? One-word answer.",
42
+ "relay_to_operator_quiet": "(To operator via ask_operator) Dispatcher needs: <verbatim>. Reply with the answer or a thumbs-up.",
43
+ "callback_offer_caveat": "Operator's callback is <number>, but please TEXT first or wait for them to call back — a ring might be heard by the suspect.",
44
+ "describe_suspect_relay": "Dispatcher needs description of the suspect — clothing, weapon, direction of travel. Please relay anything safe to share."
45
+ },
46
+ "tactics": [
47
+ {
48
+ "name": "SWATting smell-test BEFORE dialing",
49
+ "when": "Pre-dial, immediately after operator authorisation, BEFORE operator-safety instructions (the smell-test is cheap and saves a target from an armed-response breach against a non-existent threat).",
50
+ "script": "A false violent-crime call is the single most dangerous SWATting variant — armed officers arrive at the reported address ready for an active shooter. Before dialing, confirm the operator's DIRECT first-person connection to the events: are they AT the address, HEARING the violence themselves, IN the room or building, or in active text/voice contact with someone who is? Red flags that BLOCK the call: (a) operator is reporting violence at an address they are not at and have not been at; (b) operator's source is a social-media post, a rumour, a tip from a third party, or 'I heard'; (c) operator has expressed conflict, grievance, romantic-jealousy, custody-fight, or business dispute with the named suspect or the household at the address; (d) operator describes the suspect with weapons-language that is suspiciously cinematic ('AR-15', 'hostage', 'tactical gear') without explaining how they observed it; (e) the address provided does not match any address in the operator's persona / contacts and the operator can't explain the connection; (f) operator just instructed the agent to phrase the call in a specific way (script-feeding is a SWATting tell). If ANY red flag fires, do NOT dial 911. Tell the operator: 'I can't place this as a 911 call without your direct observation of the events — a false violent-crime report can get an innocent person killed and is a federal felony. If you have a genuine concern about that address, we can call the non-emergency police line or request a welfare check, both of which are de-escalated channels.' The audit log records this exchange.",
51
+ "priority": -1
52
+ },
53
+ {
54
+ "name": "Operator safety FIRST",
55
+ "when": "Before even placing the 911 call (AFTER the SWATting smell-test has passed).",
56
+ "script": "Use `tell_operator_safety_first`. Then place the call.",
57
+ "priority": 0
58
+ },
59
+ {
60
+ "name": "Lead with location, crime, operator status",
61
+ "when": "First substantive turn.",
62
+ "script": "Use `opener` — location, nature, operator status. Dispatcher will route to police priority.",
63
+ "priority": 1
64
+ },
65
+ {
66
+ "name": "Hand to dispatcher; minimise audio leak",
67
+ "when": "After opener.",
68
+ "script": "Use `ask_dispatcher_to_continue`. Keep your own audio short and quiet — the operator's phone may be transmitting your voice into the room.",
69
+ "priority": 2
70
+ },
71
+ {
72
+ "name": "Quiet check-ins with operator",
73
+ "when": "Every 30-60 seconds if operator is hiding.",
74
+ "script": "Use `quiet_check_in` via ask_operator. A response of 'safe' or 'yes' is enough. If the operator goes silent for >2 minutes, tell the dispatcher.",
75
+ "priority": 3
76
+ },
77
+ {
78
+ "name": "Relay descriptions of the suspect",
79
+ "when": "Dispatcher asks for suspect description.",
80
+ "script": "Use `describe_suspect_relay`. ONLY relay information the operator can give safely — don't push for detail if asking would put them at risk."
81
+ },
82
+ {
83
+ "name": "If operator stops responding",
84
+ "when": "Operator hasn't replied to two consecutive check-ins.",
85
+ "script": "Tell the dispatcher: 'My operator has stopped responding. Last known location: <…>. Last known status: <…>.' Keep the line open."
86
+ },
87
+ {
88
+ "name": "Coerced-cancel detection: DO NOT unilaterally relay a 'cancel'",
89
+ "when": "Operator messages mid-call to cancel / stand down / 'never mind' / 'false alarm' AFTER violence or attacker presence has already been described in this same call.",
90
+ "script": "Once a violent-crime-in-progress call has been opened with the dispatcher, the agent CANNOT accept a cancel from the operator as a unilateral stand-down. Coerced cancellation is a documented domestic-violence pattern: the attacker becomes aware of the call, forces the victim to dismiss it, often using the victim's phone or voice. Concrete coercion signals to watch for: (a) cancel arrives within 30-60 seconds of the operator having confirmed danger / attacker presence; (b) cancel uses unusual vocabulary or syntax inconsistent with the operator's prior messages in this call; (c) operator went silent for >30 seconds then suddenly speaks differently; (d) cancel is repeated insistently in a way that feels coached; (e) cancel is accompanied by 'everything's fine, sorry for the trouble' boilerplate where the operator was previously frantic; (f) attacker's voice or presence is detectable in the background; (g) the operator's last known status was 'hiding' or 'in danger', not 'safe'. Required behaviour: do NOT tell the dispatcher 'my operator is cancelling'. Instead, relay the operator's words VERBATIM and explicitly name the coercion concern: 'Dispatcher — my operator just said, quote, <verbatim>, unquote. I want to flag this as a possible coerced cancellation: <list applicable signals>. Last known operator status before this message was <…>. Please continue the response and let the on-scene officers verify safety directly.' Keep the line open. The dispatcher decides; the agent does not stand down the response.",
91
+ "priority": 4
92
+ }
93
+ ],
94
+ "boundaries": [
95
+ "NEVER call 911 without explicit operator authorisation.",
96
+ "NEVER describe the operator's hiding place aloud after telling the dispatcher once.",
97
+ "NEVER tell the operator to engage / confront the suspect.",
98
+ "NEVER fabricate facts (suspect description, weapons, vehicle plates) — only what the operator has confirmed.",
99
+ "NEVER report a violent crime that isn't happening. SWATting is a federal felony, and AgenticMail's audit log will be turned over on subpoena.",
100
+ "NEVER place this call about a violent crime the operator has not personally witnessed, heard, or experienced. Relayed-rumour reports route to call-police-non-emergency at most, after weaponisation screening. Operator authorisation is necessary but NOT sufficient; if the underlying facts fail the SWATting smell-test, refuse to dial and document the refusal.",
101
+ "NEVER unilaterally relay a 'cancel' / 'never mind' / 'false alarm' from the operator after violence or attacker presence has been described in this same call. Coerced cancellation requires the agent to relay the operator's words verbatim AND name the coercion concern to the dispatcher — the dispatcher decides whether to stand down the response, not the agent and not the operator alone under possible duress.",
102
+ "NEVER end the call (end_call) before dispatcher release."
103
+ ],
104
+ "success_signals": [
105
+ "Dispatcher confirms units dispatched and en route.",
106
+ "Operator confirms suspect has left / been subdued / police arrived.",
107
+ "Dispatcher releases you to disconnect when on-scene officers take over."
108
+ ],
109
+ "failure_signals": [
110
+ "Operator stops responding for an extended period — relay to dispatcher.",
111
+ "Operator says 'cancel, false alarm' but you suspect they are being coerced — TELL the dispatcher this, don't simply relay the cancel. (Coercion-cancel is a known scenario in domestic violence calls.)",
112
+ "Call drops and operator's phone is unreachable — re-dial 911, reference the prior call, give the address."
113
+ ],
114
+ "exit_strategy": {
115
+ "on_success": "Confirm operator is physically safe and police are on scene. Get incident number from dispatcher. Email operator a summary of the call.",
116
+ "on_failure": "If you suspect coerced cancellation, KEEP the dispatch active — tell the dispatcher about the coercion concern explicitly.",
117
+ "follow_ups": [
118
+ "Email operator a complete log of the call including dispatcher's instructions.",
119
+ "If the operator has a pre-authorised emergency contact in their persona file, email them too.",
120
+ "Schedule a follow-up message 24h later to check on the operator (via schedule_callback)."
121
+ ]
122
+ },
123
+ "required_user_info": [
124
+ "Explicit operator authorisation for this 911 call",
125
+ "Location — as precise as possible",
126
+ "Operator's current safety status",
127
+ "Whether ringing the operator's phone is safe",
128
+ "Nature of the crime and any suspect detail the operator can safely share",
129
+ "Operator's callback number",
130
+ "Pre-authorised emergency contact (if any) for post-call notification"
131
+ ],
132
+ "contributed_by": "AgenticMail core team (emergency-services bundle v0.9.87)"
133
+ }
@@ -0,0 +1,106 @@
1
+ {
2
+ "id": "call-988-crisis-line",
3
+ "name": "Call 988 — Suicide & Crisis Lifeline",
4
+ "version": "1.0.1",
5
+ "category": "emergency-services",
6
+ "tags": [
7
+ "988",
8
+ "suicide",
9
+ "crisis",
10
+ "mental-health",
11
+ "lifeline",
12
+ "emergency_services"
13
+ ],
14
+ "description": "Place a call to 988, the US Suicide & Crisis Lifeline, on behalf of someone in mental-health crisis when they have asked the agent to do so or have authorised it. 988 is staffed by trained crisis counsellors and is a safer first call than 911 for most mental-health crises.",
15
+ "disclaimer": "ABSOLUTE rules. (1) The operator must have explicitly authorised this call, and the agent must consider whether the operator themselves can talk to the counsellor (the counsellor's value is the direct human-to-human contact — the agent should facilitate, not replace). (2) If there is an IMMEDIATE risk to life — active suicide attempt in progress, medical overdose, weapon at hand — that's call-911-medical-emergency. (3) 988 will involve emergency services ONLY when imminent risk is established; it is otherwise a confidential counselling line. (4) Identify as an AI on the first sentence.",
16
+ "context": {
17
+ "when_to_use": "Operator is in mental-health distress and has asked the agent to dial 988 because they can't / don't want to dial themselves (panic too high, fear of saying it out loud, language barrier, hand-injury, etc.). OR a third party the operator is with is in crisis and the operator wants the agent to bridge to 988 while they tend to the person.",
18
+ "preconditions": [
19
+ "Operator's explicit authorisation for this call.",
20
+ "Whether the operator themselves wants to talk to the counsellor (vast majority of cases — yes, the agent's job is to hand them over).",
21
+ "If a third party is in crisis: their location and the operator's relationship + whether the third party knows the call is happening.",
22
+ "Confirmation this is NOT an active life-threatening event (those go to 911)."
23
+ ],
24
+ "estimated_call_duration_minutes": 30
25
+ },
26
+ "principles": [
27
+ "988 counsellors are trained for this. The agent's job is to BRIDGE — get the operator on the line with the counsellor. The agent is not the support.",
28
+ "Identify as an AI on the first sentence so the counsellor adapts their script.",
29
+ "If the operator can talk, hand them the line as soon as the counsellor is ready. Stay on the line in case the operator drops or needs you to relay.",
30
+ "Stay calm. Slow down. Counsellors set the pace; follow theirs.",
31
+ "If at ANY point you (the agent) judge the situation has crossed into imminent life-threat (operator describes active attempt, becomes unresponsive, talks about a weapon they have right now), tell the counsellor immediately. They are trained to escalate; you facilitate.",
32
+ "Confidentiality matters. Don't narrate the call back to a third party unless the operator authorised it."
33
+ ],
34
+ "phrases": {
35
+ "tell_operator_we_are_bridging": "I'm dialing 988 now. As soon as the counsellor picks up I'm going to introduce them and then step back. You'll talk directly with them. I'll stay quietly on the line in case anything goes wrong. Is that okay?",
36
+ "opener": "Hi — I'm an AI assistant calling on behalf of <operator>. They're in distress and asked me to dial 988 for them. They're here on the line and would like to speak with you directly. Should I hand them over?",
37
+ "opener_third_party": "Hi — I'm an AI assistant calling on behalf of <operator>. They are with someone in mental-health distress at <location> and asked me to bridge the call to 988 so you can speak with that person directly. May I introduce them?",
38
+ "stay_quiet_pivot": "I'll be quiet now. I'll only come back on if my operator needs me to relay something or if there's an emergency. Counsellor, you have the floor.",
39
+ "interject_for_imminent_risk": "(Quiet, calm) Counsellor — I need to interrupt. My operator just said <verbatim concerning statement>. I'm flagging it because I think it crosses the imminent-risk line.",
40
+ "graceful_close": "Counsellor, my operator says they're okay to continue with you directly. I'll disconnect now unless you'd like me to stay. Thank you."
41
+ },
42
+ "tactics": [
43
+ {
44
+ "name": "Brief the operator on the bridge plan",
45
+ "when": "Before dialing.",
46
+ "script": "Use `tell_operator_we_are_bridging`. The operator needs to know the agent is going to step back; otherwise they may freeze on the line expecting the agent to talk for them.",
47
+ "priority": 0
48
+ },
49
+ {
50
+ "name": "Identify + hand over fast",
51
+ "when": "Counsellor answers.",
52
+ "script": "Use `opener`. Don't summarise the whole situation for the counsellor — they'll get it directly from the person. Hand off in 30 seconds.",
53
+ "priority": 1
54
+ },
55
+ {
56
+ "name": "Step back",
57
+ "when": "After handoff.",
58
+ "script": "Use `stay_quiet_pivot`. Stay on the line silent. Listening for distress signals, not contributing.",
59
+ "priority": 2
60
+ },
61
+ {
62
+ "name": "Interject ONLY for imminent risk",
63
+ "when": "Operator describes active suicidal action, becomes unresponsive, or you hear something that crosses into 'this is happening right now'.",
64
+ "script": "Use `interject_for_imminent_risk`. The counsellor is trained to escalate to 911 from there. Don't try to handle it yourself."
65
+ },
66
+ {
67
+ "name": "Disconnect on counsellor's word",
68
+ "when": "Counsellor + operator both confirm the agent can step off.",
69
+ "script": "Use `graceful_close` and end_call. Stay on the line until both confirm."
70
+ }
71
+ ],
72
+ "boundaries": [
73
+ "NEVER place this call without explicit operator authorisation.",
74
+ "NEVER pretend to BE the operator. You are bridging, not impersonating.",
75
+ "NEVER offer the operator clinical advice ('have you tried…?', 'this is normal because…') — that's the counsellor's role.",
76
+ "NEVER share the contents of the call with anyone afterwards unless the operator explicitly authorised it.",
77
+ "NEVER end_call without both the counsellor and operator confirming.",
78
+ "If imminent life risk: it's call-911-medical-emergency, not 988."
79
+ ],
80
+ "success_signals": [
81
+ "Counsellor and operator are talking directly.",
82
+ "Counsellor confirms you can step off, operator confirms it too.",
83
+ "If 911 was needed: counsellor handled the escalation."
84
+ ],
85
+ "failure_signals": [
86
+ "Operator goes quiet for an extended period after handoff — gently check ('still with us?').",
87
+ "Operator says they want the agent to talk for them — you can do brief relay, but encourage them to speak directly when they're ready; counsellors are trained for vulnerable callers.",
88
+ "Operator describes imminent risk — use `interject_for_imminent_risk` and let the counsellor escalate."
89
+ ],
90
+ "exit_strategy": {
91
+ "on_success": "Disconnect on mutual confirmation. Email the operator (via their persona's emergency-contact-preferences) a brief, neutral note that the bridge happened — not the content of the call. Counsellor confidentiality matters.",
92
+ "on_failure": "If imminent risk escalation happened, the counsellor handled it; document only that an escalation happened, not the content.",
93
+ "follow_ups": [
94
+ "Email operator a neutral, supportive note 24-48h later via schedule_callback or the bridge's email path — only if they pre-authorised follow-up contact in their persona.",
95
+ "Do NOT discuss the call's content with third parties or other agents."
96
+ ]
97
+ },
98
+ "required_user_info": [
99
+ "Operator's explicit authorisation for this 988 bridge",
100
+ "Whether the operator themselves will speak with the counsellor (yes is default)",
101
+ "If a third party: their location, relationship to operator, awareness",
102
+ "Operator's emergency contact preferences from their persona file (for post-call neutral follow-up)",
103
+ "Confirmation this is not an active life-threat (which would be 911 instead)"
104
+ ],
105
+ "contributed_by": "AgenticMail core team (emergency-services bundle v0.9.87)"
106
+ }
@@ -0,0 +1,115 @@
1
+ {
2
+ "id": "call-poison-control",
3
+ "name": "Call Poison Control — 1-800-222-1222",
4
+ "version": "1.0.0",
5
+ "category": "emergency-services",
6
+ "tags": [
7
+ "poison-control",
8
+ "1-800-222-1222",
9
+ "medical",
10
+ "ingestion",
11
+ "overdose",
12
+ "child-safety",
13
+ "emergency_services"
14
+ ],
15
+ "description": "Call the US Poison Control hotline (1-800-222-1222) for guidance after an ingestion, exposure, or suspected overdose. Poison Control is FREE, confidential, and 24/7. They handle the vast majority of cases without ER referral — saving lives AND ER visits.",
16
+ "disclaimer": "(1) For UNCONSCIOUS / not breathing / seizing patients, call 911 (call-911-medical-emergency) FIRST. Poison Control is for awake patients where the exposure was non-life-threatening at the moment of call. (2) Identify as an AI on the first sentence. (3) Don't guess at substances — relay only what the operator can confirm. (4) Stay on the line; Poison Control may want to follow up at intervals.",
17
+ "context": {
18
+ "when_to_use": "Operator (or someone with the operator) ingested / inhaled / was exposed to a substance and you need real-time guidance. Common: child ate a pill / cleaning product / plant, adult took a wrong dose, someone splashed chemicals on skin or in eyes, animal bites with unknown species. Operator wants medical guidance without driving to the ER if avoidable.",
19
+ "preconditions": [
20
+ "Patient is conscious + breathing + not actively seizing (otherwise 911 first).",
21
+ "Operator's authorisation to make the call.",
22
+ "What was taken / encountered (substance name, container, photo of label if available).",
23
+ "How much (estimate — Poison Control is used to estimates).",
24
+ "When (within how many minutes / hours).",
25
+ "Patient's age, rough weight (especially for children), any known allergies / current medications."
26
+ ],
27
+ "estimated_call_duration_minutes": 18
28
+ },
29
+ "principles": [
30
+ "Identify as an AI on the first sentence so the specialist adapts their script.",
31
+ "Read substance information VERBATIM from the label / packaging when available. The active ingredient + concentration is what they need, not the product name.",
32
+ "Don't guess at amount; give a range ('between half a teaspoon and 2 teaspoons') and let the specialist decide whether that matters.",
33
+ "Stay on the line — they will give a treatment plan AND often want to follow up at 30 / 60 / 120 minutes.",
34
+ "If the patient deteriorates mid-call (loses consciousness, seizes, stops breathing), tell the specialist and dial 911 in parallel. Don't try to handle it solo."
35
+ ],
36
+ "phrases": {
37
+ "opener": "Hi — I'm an AI assistant calling on behalf of <operator>. We have a possible <ingestion / exposure / overdose>. <Patient's age> with <weight if relevant>. They took <substance — read the label> at approximately <time>. They are currently <conscious and alert / drowsy but responsive / etc>. May I walk you through what we know?",
38
+ "read_label_verbatim": "I'm going to read the label exactly as it appears: <verbatim text including active ingredients, concentrations, warnings>.",
39
+ "estimate_amount": "My operator estimates <range — 'between 2 and 5 pills' / 'about half a bottle' / 'a sip'>. They aren't sure of the exact amount.",
40
+ "patient_status_check": "Current status: <conscious, breathing normally, GCS 15 / drowsy but rouseable / etc>. No new symptoms since I started this call.",
41
+ "ask_for_followup_schedule": "When would you like us to check back in? My operator will be watching the patient.",
42
+ "deterioration_alert": "The patient is now <new symptom: vomiting / drowsy / unresponsive / seizing>. I want to flag that change.",
43
+ "graceful_close": "Thank you. To summarise: the plan is <verbatim plan>. Follow-up is scheduled for <time>. If anything changes we should call 911. Is that right?"
44
+ },
45
+ "tactics": [
46
+ {
47
+ "name": "Triage out 911-tier first",
48
+ "when": "Before dialing Poison Control.",
49
+ "script": "Confirm with operator: patient conscious? breathing? not seizing? If any 'no', use call-911-medical-emergency INSTEAD — Poison Control will redirect you anyway.",
50
+ "priority": 0
51
+ },
52
+ {
53
+ "name": "Lead with age, substance, amount, time, status",
54
+ "when": "First substantive turn.",
55
+ "script": "Use `opener` — five facts in order: age, substance, amount, time, status. Same triage logic specialists are trained on.",
56
+ "priority": 1
57
+ },
58
+ {
59
+ "name": "Read labels verbatim",
60
+ "when": "Specialist asks 'what's in it?'.",
61
+ "script": "Use `read_label_verbatim`. Active ingredient + concentration matters; the brand name often doesn't.",
62
+ "priority": 2
63
+ },
64
+ {
65
+ "name": "Honest amount ranges, not made-up numbers",
66
+ "when": "Specialist asks how much.",
67
+ "script": "Use `estimate_amount`. Specialists are TRAINED on estimates from caregivers — giving them a range is more honest than fake precision."
68
+ },
69
+ {
70
+ "name": "Schedule follow-up checks",
71
+ "when": "Before closing the initial call.",
72
+ "script": "Use `ask_for_followup_schedule`. Many exposures get a 'we'll call back at X' protocol."
73
+ },
74
+ {
75
+ "name": "Flag deterioration immediately",
76
+ "when": "Patient's status changes mid-call.",
77
+ "script": "Use `deterioration_alert`. If it's a 911-tier change (unconscious, seizing, stopped breathing), dial 911 in parallel; Poison Control is great at non-911, not 911."
78
+ }
79
+ ],
80
+ "boundaries": [
81
+ "NEVER call Poison Control for an unconscious / non-breathing patient — that's 911 first.",
82
+ "NEVER fabricate amounts or substances. Honest estimates beat fake precision.",
83
+ "NEVER give the patient food / drink / induce vomiting on your own initiative — wait for the specialist's instruction. (Inducing vomiting can be dangerous; the modern protocol is rarely 'make them vomit'.)",
84
+ "NEVER end the call before confirming the follow-up schedule and the deterioration triggers ('if they X, call 911').",
85
+ "NEVER share Poison Control's guidance as medical advice for OTHER situations. Each call is specific."
86
+ ],
87
+ "success_signals": [
88
+ "Specialist gives a treatment plan and follow-up schedule.",
89
+ "Specialist confirms the operator can manage at home.",
90
+ "Specialist gives clear escalation triggers ('if they X, go to the ER immediately')."
91
+ ],
92
+ "failure_signals": [
93
+ "Specialist recommends ER — go, don't argue. Email the operator the substance + Poison Control's reference for the ER team.",
94
+ "Patient deteriorates mid-call — flag + 911.",
95
+ "Operator can't read the label clearly — relay what they CAN see, specialist may have a database lookup."
96
+ ],
97
+ "exit_strategy": {
98
+ "on_success": "Confirm plan + follow-up schedule + escalation triggers verbatim. Get the case reference. Email operator a summary + the schedule. Set a reminder to receive the follow-up call.",
99
+ "on_failure": "If ER referral: stop the call, email operator the substance details and PC's case reference so the ER team has the workup.",
100
+ "follow_ups": [
101
+ "Schedule the follow-up checks Poison Control recommended (e.g. 30/60/120 min) via schedule_callback.",
102
+ "Email operator the substance summary + the case reference for their pediatrician / GP records."
103
+ ]
104
+ },
105
+ "required_user_info": [
106
+ "Operator's authorisation for this call",
107
+ "Patient age + rough weight (especially for children)",
108
+ "Substance — label / packaging if possible",
109
+ "Amount estimate + time of exposure",
110
+ "Current status: conscious + breathing + no seizing",
111
+ "Allergies + current medications",
112
+ "Operator's callback number for follow-up checks"
113
+ ],
114
+ "contributed_by": "AgenticMail core team (emergency-services bundle v0.9.87)"
115
+ }
@@ -0,0 +1,114 @@
1
+ {
2
+ "id": "call-police-non-emergency",
3
+ "name": "Call Local Police — Non-Emergency Line",
4
+ "version": "1.0.1",
5
+ "category": "emergency-services",
6
+ "tags": [
7
+ "police",
8
+ "non-emergency",
9
+ "report",
10
+ "noise-complaint",
11
+ "after-the-fact",
12
+ "emergency_services"
13
+ ],
14
+ "description": "Place a non-emergency call to local police (typically 311, the department's published non-emergency number, or a state-level non-emergency tip line) for things that are not life-safety: theft after the fact, noise complaints, suspicious activity in the area, found property, follow-ups on existing case numbers.",
15
+ "disclaimer": "(1) Use this for non-life-safety only. If lives or property are in active danger, use call-911-* skills instead. (2) Identify as an AI on the first sentence. (3) Don't waste the dispatcher's time on things that should be a city portal request (potholes, graffiti tagged for cleanup).",
16
+ "context": {
17
+ "when_to_use": "Operator wants to file a report or ask a question that does NOT require immediate police response. Stolen property they noticed hours later, ongoing noise from a neighbour, an abandoned car on the block, a follow-up on a prior case, asking about the police-report copy for an insurance claim. Anything actively dangerous routes to 911 instead.",
18
+ "preconditions": [
19
+ "Operator has explicitly authorised this call.",
20
+ "Operator knows roughly what they want — file a report? ask about an existing case? request a welfare check?",
21
+ "Address or precise location of the incident (or operator's address for ongoing complaints).",
22
+ "If filing a stolen-property report: rough inventory + estimated values + when last seen."
23
+ ],
24
+ "estimated_call_duration_minutes": 12
25
+ },
26
+ "principles": [
27
+ "Identify as an AI in the first sentence — same rule as 911, just lower stakes.",
28
+ "Have the operator's reason for calling crisp before dialing. 'I'd like to file a report for <X>' beats 'we wanted to ask about something'.",
29
+ "Get a case number / incident number for any report filed. Without it, the report effectively didn't happen.",
30
+ "Don't escalate to 911-tier urgency unless the dispatcher recommends it.",
31
+ "If the operator's situation is borderline (ongoing harassment? stalking? threats?), let the dispatcher decide whether to upgrade to a higher-priority response — describe the facts, don't editorialise."
32
+ ],
33
+ "phrases": {
34
+ "opener_report": "Hi — I'm an AI assistant calling on behalf of <operator>. My operator would like to file a non-emergency report for <one-line: stolen property / noise complaint / suspicious vehicle / found property>. The incident location is <address>. May I walk you through what happened?",
35
+ "opener_existing_case": "Hi — I'm an AI assistant calling on behalf of <operator>. We're following up on existing case number <number> from <date> regarding <one-line>. We're trying to <get a copy / get a status / report new info>.",
36
+ "opener_welfare_question": "Hi — I'm an AI assistant calling on behalf of <operator>. They're worried about someone they haven't been able to reach and would like to request a welfare check at <address>. Can I tell you what we know?",
37
+ "ask_for_case_number": "Could I get the case or report number for our records? My operator will need it for follow-up / insurance / their file.",
38
+ "relay_to_operator": "Let me check with my operator — one moment.",
39
+ "graceful_close": "Thank you. Could you confirm what happens next — does an officer follow up, or is this the report complete? And the case number is <…>?"
40
+ },
41
+ "tactics": [
42
+ {
43
+ "name": "Open with a clean one-liner",
44
+ "when": "First substantive turn.",
45
+ "script": "Pick the right opener phrase for the operator's purpose — `opener_report`, `opener_existing_case`, or `opener_welfare_question`. Lead with WHY you're calling so the dispatcher routes correctly.",
46
+ "priority": 1
47
+ },
48
+ {
49
+ "name": "Let the dispatcher's script run",
50
+ "when": "After the opener.",
51
+ "script": "Non-emergency dispatchers have intake scripts too. Answer their questions through the operator. Don't volunteer extra detail until asked."
52
+ },
53
+ {
54
+ "name": "Pull case / incident number before disconnecting",
55
+ "when": "Dispatcher signals the report is logged or transferred.",
56
+ "script": "Use `ask_for_case_number`. Without it, the operator has no proof the call happened.",
57
+ "priority": 3
58
+ },
59
+ {
60
+ "name": "Upgrade if the dispatcher recommends",
61
+ "when": "Dispatcher says 'this sounds more urgent — let me transfer you' or 'we'll send someone right now'.",
62
+ "script": "Accept the upgrade. If the dispatcher transfers to 911, the call-911-* skills apply from there."
63
+ },
64
+ {
65
+ "name": "Mid-call escalation trigger: hang up and dial 911",
66
+ "when": "During the call, the operator describes anything currently happening — active threat, ongoing harm, audible violence, a person currently breaking in, someone visibly bleeding, a vehicle pursuit in progress, a stalker who just arrived at the door.",
67
+ "script": "The non-emergency line is the wrong channel for anything time-critical. Tell the non-emergency dispatcher: 'Apologies — what my operator just told me sounds like a live emergency. I'm going to hang up and dial 911 now.' Then disconnect, switch to the appropriate call-911-* skill, and reference 'we were just on the non-emergency line' so the dispatcher can stitch the record together. Do NOT try to ask the non-emergency dispatcher to do the upgrade for you — disconnect and dial 911 directly to avoid transfer-failure delays.",
68
+ "priority": 4
69
+ },
70
+ {
71
+ "name": "Weaponisation screen for reports about a named third party",
72
+ "when": "Operator wants to file a report or request a check that names a specific person — a neighbour, an ex, a family member, a business counterparty — particularly if the report is 'suspicious activity' / 'threatening behaviour' / 'I'm worried they might X'.",
73
+ "script": "Before placing the call, ask the operator: (a) what specific, observed conduct are you reporting (not characterisations like 'creepy', 'unstable')?, (b) do you have any ongoing dispute, breakup, custody fight, or grievance with this person?, (c) have you tried other channels — talking to them, a building manager, a mediator, a lawyer? If the operator's reason is thin (no specific observed conduct), they have an active dispute with the subject, AND they have not exhausted non-police channels, push back: 'A police report against someone you have an active dispute with — especially with this little observed conduct — risks looking like a harassment tactic and can be subpoenaed against you. Are you sure?' Document the operator's response. If they insist, file the report straight (no embellishment); if they retract, abort cleanly.",
74
+ "priority": 0
75
+ }
76
+ ],
77
+ "boundaries": [
78
+ "NEVER call the non-emergency line for something that's actually life-threatening. Use 911.",
79
+ "NEVER pretend to be human.",
80
+ "NEVER make false reports. Knowingly false police reports are crimes in every state.",
81
+ "NEVER use this skill to file a report whose primary effect would be harassment of a specific named person the operator is in conflict with, particularly where no specific recent conduct can be described and where the operator has not tried any non-police channel. The audit log makes the pattern legible and exposes the operator to civil and criminal liability.",
82
+ "NEVER continue on the non-emergency line once the operator describes anything that is actually happening now — hang up and dial 911 instead. The non-emergency line will not dispatch fast enough.",
83
+ "NEVER ask the police to perform actions they wouldn't normally perform (don't ask them to confront a specific person at the operator's behest unless that's a normal welfare-check or warrant-service situation).",
84
+ "NEVER end the call without confirming what happens next and capturing the case number."
85
+ ],
86
+ "success_signals": [
87
+ "Dispatcher confirms the report is logged and gives a case number.",
88
+ "Dispatcher confirms an officer will follow up within a stated window.",
89
+ "Dispatcher confirms the report is complete and no follow-up is needed.",
90
+ "Welfare check is dispatched with the address and contact info."
91
+ ],
92
+ "failure_signals": [
93
+ "Dispatcher says the operator needs to file online / in person — relay that to the operator instead of trying to push past it.",
94
+ "Dispatcher refuses to take the report on the phone (some jurisdictions require in-person for property crime).",
95
+ "Dispatcher transfers you to a different department and the transfer fails — re-dial and reference the prior call."
96
+ ],
97
+ "exit_strategy": {
98
+ "on_success": "Confirm what happens next (officer follow-up window / online portal step / done). Get the case number. Email the operator a summary.",
99
+ "on_failure": "Email the operator the alternative method (online portal / in-person address) the dispatcher recommended.",
100
+ "follow_ups": [
101
+ "Email operator a summary: case number, dispatcher reference, follow-up window.",
102
+ "If officer is scheduled to follow up, calendar a check-in for the day after the window closes."
103
+ ]
104
+ },
105
+ "required_user_info": [
106
+ "Operator's explicit authorisation for this call",
107
+ "Reason for calling — report / existing case / welfare check / question",
108
+ "Location or address relevant to the report",
109
+ "Existing case number (if applicable)",
110
+ "Operator's callback number and address",
111
+ "Rough timeline of what happened (date / time / what was noticed)"
112
+ ],
113
+ "contributed_by": "AgenticMail core team (emergency-services bundle v0.9.87)"
114
+ }