@agenticmail/core 0.9.32 → 0.9.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/skills/built-in/accommodation-intake.json +132 -0
- package/dist/skills/built-in/add-driver-vehicle-household.json +133 -0
- package/dist/skills/built-in/admissions-waitlist-followup.json +129 -0
- package/dist/skills/built-in/anchor-and-counter-anchor.json +161 -0
- package/dist/skills/built-in/anti-social-engineering.json +153 -0
- package/dist/skills/built-in/anything-else-sweep.json +120 -0
- package/dist/skills/built-in/apologise-correctly.json +126 -0
- package/dist/skills/built-in/ask-for-in-person-meeting.json +114 -0
- package/dist/skills/built-in/attorney-new-client-intake.json +133 -0
- package/dist/skills/built-in/bant-discovery-call.json +125 -0
- package/dist/skills/built-in/book-new-patient-appointment.json +131 -0
- package/dist/skills/built-in/bookmark-close.json +113 -0
- package/dist/skills/built-in/bypass-i-am-the-supervisor.json +130 -0
- package/dist/skills/built-in/bypass-scripted-rep.json +142 -0
- package/dist/skills/built-in/calibrated-questions.json +155 -0
- package/dist/skills/built-in/call-911-fire.json +118 -0
- package/dist/skills/built-in/call-911-medical-emergency.json +126 -0
- package/dist/skills/built-in/call-911-violent-crime-in-progress.json +133 -0
- package/dist/skills/built-in/call-988-crisis-line.json +128 -0
- package/dist/skills/built-in/call-poison-control.json +115 -0
- package/dist/skills/built-in/call-police-non-emergency.json +114 -0
- package/dist/skills/built-in/call-with-person-in-distress.json +133 -0
- package/dist/skills/built-in/cancel-cable-fiber-no-retention-loop.json +156 -0
- package/dist/skills/built-in/cancel-policy-clean.json +130 -0
- package/dist/skills/built-in/capture-rep-identity.json +113 -0
- package/dist/skills/built-in/childcare-provider-intake.json +157 -0
- package/dist/skills/built-in/close-account-no-residual-fees.json +127 -0
- package/dist/skills/built-in/close-on-concrete-next-step.json +116 -0
- package/dist/skills/built-in/confirm-agreement-readback.json +134 -0
- package/dist/skills/built-in/confirm-next-step-ownership.json +113 -0
- package/dist/skills/built-in/contractor-estimate-request.json +142 -0
- package/dist/skills/built-in/court-clerk-administrative-inquiry.json +119 -0
- package/dist/skills/built-in/cpa-intake-call.json +134 -0
- package/dist/skills/built-in/day-of-flight-cancellation.json +127 -0
- package/dist/skills/built-in/de-escalate-angry-rep.json +114 -0
- package/dist/skills/built-in/decline-unsolicited-pitch.json +110 -0
- package/dist/skills/built-in/deliver-difficult-news.json +122 -0
- package/dist/skills/built-in/detect-fake-escalation-loops.json +140 -0
- package/dist/skills/built-in/detect-lies-and-contradictions.json +139 -0
- package/dist/skills/built-in/dispute-billing-code-eob.json +147 -0
- package/dist/skills/built-in/dispute-charge-reg-e-reg-z.json +131 -0
- package/dist/skills/built-in/dispute-credit-report-via-bank.json +128 -0
- package/dist/skills/built-in/dispute-denied-claim.json +143 -0
- package/dist/skills/built-in/dispute-security-deposit.json +130 -0
- package/dist/skills/built-in/dispute-usage-spike-meter-reread.json +120 -0
- package/dist/skills/built-in/dmv-vehicle-registration-renewal.json +120 -0
- package/dist/skills/built-in/document-call-promises.json +145 -0
- package/dist/skills/built-in/early-lease-termination.json +126 -0
- package/dist/skills/built-in/elite-line-escalation.json +107 -0
- package/dist/skills/built-in/equipment-swap-cable-router-modem.json +126 -0
- package/dist/skills/built-in/eu261-uk261-dot-compensation.json +113 -0
- package/dist/skills/built-in/file-fnol-auto-claim.json +130 -0
- package/dist/skills/built-in/file-habitability-complaint.json +115 -0
- package/dist/skills/built-in/financial-aid-appeal.json +128 -0
- package/dist/skills/built-in/follow-up-stalled-claim.json +118 -0
- package/dist/skills/built-in/get-past-gatekeeper.json +115 -0
- package/dist/skills/built-in/get-past-tier-1-script.json +130 -0
- package/dist/skills/built-in/handle-callback-stall.json +120 -0
- package/dist/skills/built-in/handle-outsourced-no-escalation.json +138 -0
- package/dist/skills/built-in/handle-send-me-an-email-deflection.json +112 -0
- package/dist/skills/built-in/handle-time-pressure.json +159 -0
- package/dist/skills/built-in/health-prior-auth-appeal.json +131 -0
- package/dist/skills/built-in/hoa-dispute.json +123 -0
- package/dist/skills/built-in/hold-time-strategy.json +137 -0
- package/dist/skills/built-in/hold-warmth-cold-rep.json +114 -0
- package/dist/skills/built-in/hotel-walk-over-recovery.json +114 -0
- package/dist/skills/built-in/humour-when-it-lands.json +127 -0
- package/dist/skills/built-in/i20-visa-dso.json +134 -0
- package/dist/skills/built-in/invoke-regulator-firmly.json +137 -0
- package/dist/skills/built-in/irrops-waiver-awareness.json +103 -0
- package/dist/skills/built-in/irs-payment-plan-setup.json +134 -0
- package/dist/skills/built-in/k12-iep-504-enrollment.json +134 -0
- package/dist/skills/built-in/late-add-petition.json +128 -0
- package/dist/skills/built-in/leave-of-absence-deferral.json +130 -0
- package/dist/skills/built-in/lock-in-terms-verbally.json +127 -0
- package/dist/skills/built-in/match-energy-keep-goal.json +120 -0
- package/dist/skills/built-in/medical-records-transfer.json +138 -0
- package/dist/skills/built-in/medical-withdrawal.json +131 -0
- package/dist/skills/built-in/mid-call-evidence-collection.json +159 -0
- package/dist/skills/built-in/mirror-technique.json +145 -0
- package/dist/skills/built-in/missed-connection-distressed-passenger.json +111 -0
- package/dist/skills/built-in/mortgage-loan-hardship.json +130 -0
- package/dist/skills/built-in/move-out-walkthrough.json +114 -0
- package/dist/skills/built-in/multi-channel-escalation.json +141 -0
- package/dist/skills/built-in/multi-issue-tradeoffs.json +155 -0
- package/dist/skills/built-in/negotiate-rent-renewal.json +123 -0
- package/dist/skills/built-in/no-as-opening.json +154 -0
- package/dist/skills/built-in/not-sound-like-spam-dialer.json +118 -0
- package/dist/skills/built-in/outage-credit-applied.json +127 -0
- package/dist/skills/built-in/passport-expedite-or-appointment.json +123 -0
- package/dist/skills/built-in/pediatric-school-forms.json +141 -0
- package/dist/skills/built-in/personal-trainer-discovery.json +138 -0
- package/dist/skills/built-in/pharmacy-callback.json +134 -0
- package/dist/skills/built-in/pivot-mid-call.json +141 -0
- package/dist/skills/built-in/port-mobile-number-survive-retention.json +127 -0
- package/dist/skills/built-in/prescription-refill-followup.json +132 -0
- package/dist/skills/built-in/push-past-invented-policy.json +159 -0
- package/dist/skills/built-in/rapport-opening-30-seconds.json +130 -0
- package/dist/skills/built-in/reach-executive-office.json +137 -0
- package/dist/skills/built-in/read-vocal-cues.json +139 -0
- package/dist/skills/built-in/read-vocal-tone.json +159 -0
- package/dist/skills/built-in/realestate-agent-vetting.json +144 -0
- package/dist/skills/built-in/receive-difficult-news.json +115 -0
- package/dist/skills/built-in/recording-claim-conversation-legally.json +121 -0
- package/dist/skills/built-in/recover-summary-refusal.json +121 -0
- package/dist/skills/built-in/reengage-ghosted-lead.json +115 -0
- package/dist/skills/built-in/referral-followup-without-burning.json +116 -0
- package/dist/skills/built-in/referral-prior-authorization.json +130 -0
- package/dist/skills/built-in/refuse-the-split.json +142 -0
- package/dist/skills/built-in/refuse-upsell-at-close.json +114 -0
- package/dist/skills/built-in/rental-car-counter-defense.json +116 -0
- package/dist/skills/built-in/rental-scam-report.json +125 -0
- package/dist/skills/built-in/replace-lost-stolen-card-expedited.json +139 -0
- package/dist/skills/built-in/report-downed-line-gas-smell-911-triage.json +130 -0
- package/dist/skills/built-in/report-elder-or-child-abuse.json +125 -0
- package/dist/skills/built-in/report-fbi-tip.json +116 -0
- package/dist/skills/built-in/report-fraud-ic3-or-ftc.json +117 -0
- package/dist/skills/built-in/report-fraudulent-transaction.json +126 -0
- package/dist/skills/built-in/report-power-outage-get-etr.json +116 -0
- package/dist/skills/built-in/report-urgent-maintenance.json +123 -0
- package/dist/skills/built-in/request-credit-limit-increase.json +126 -0
- package/dist/skills/built-in/request-supervisor-gracefully.json +129 -0
- package/dist/skills/built-in/request-welfare-check.json +127 -0
- package/dist/skills/built-in/request-written-confirmation.json +113 -0
- package/dist/skills/built-in/reschedule-appointment.json +121 -0
- package/dist/skills/built-in/reset-by-callback.json +143 -0
- package/dist/skills/built-in/resist-urgency-manipulation.json +152 -0
- package/dist/skills/built-in/revisit-totaling-decision.json +125 -0
- package/dist/skills/built-in/roadside-assistance-dispatch.json +132 -0
- package/dist/skills/built-in/roommate-replacement.json +121 -0
- package/dist/skills/built-in/same-day-urgent-appointment.json +130 -0
- package/dist/skills/built-in/schedule-rental-viewing.json +111 -0
- package/dist/skills/built-in/service-move-shutoff-start-no-overlap.json +129 -0
- package/dist/skills/built-in/social-security-replacement-card.json +122 -0
- package/dist/skills/built-in/specialist-doctor-booking.json +136 -0
- package/dist/skills/built-in/spot-bait-and-switch.json +155 -0
- package/dist/skills/built-in/stop-recurring-ach.json +127 -0
- package/dist/skills/built-in/switch-postpaid-to-prepaid-mid-cycle.json +130 -0
- package/dist/skills/built-in/tactical-empathy-labeling.json +147 -0
- package/dist/skills/built-in/therapist-intake-call.json +133 -0
- package/dist/skills/built-in/train-cancellation-refund-rebook.json +104 -0
- package/dist/skills/built-in/transcript-request.json +128 -0
- package/dist/skills/built-in/travel-insurance-claim-on-the-road.json +114 -0
- package/dist/skills/built-in/travel-notice-unlock-card.json +119 -0
- package/dist/skills/built-in/unemployment-claim-status-and-appeal.json +123 -0
- package/dist/skills/built-in/uscis-case-status-and-biometrics.json +125 -0
- package/dist/skills/built-in/utility-deposit-waiver.json +122 -0
- package/dist/skills/built-in/utility-payment-plan-avoid-disconnect.json +122 -0
- package/dist/skills/built-in/verify-insurance-coverage-pre-procedure.json +140 -0
- package/dist/skills/built-in/verify-out-of-network-coverage.json +129 -0
- package/dist/skills/built-in/veteran-benefits-community-college.json +134 -0
- package/dist/skills/built-in/veterinary-new-patient-intake.json +135 -0
- package/dist/skills/built-in/visa-boarding-denial-recovery.json +115 -0
- package/dist/skills/built-in/vital-records-certificate-copy.json +120 -0
- package/dist/skills/built-in/voicemail-that-gets-called-back.json +114 -0
- package/dist/skills/built-in/voter-registration-and-ballot.json +124 -0
- package/dist/skills/built-in/walkaway-threats.json +159 -0
- package/dist/skills/built-in/wedding-vendor-intake.json +149 -0
- package/dist/skills/built-in/when-to-stop-being-polite.json +161 -0
- package/dist/skills/built-in/wire-funds-safely.json +129 -0
- package/package.json +1 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "cpa-intake-call",
|
|
3
|
+
"name": "CPA / Accountant Intake: Pricing, Scope, and Tax-Season Availability",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "finance-admin",
|
|
6
|
+
"tags": [
|
|
7
|
+
"accounting",
|
|
8
|
+
"cpa",
|
|
9
|
+
"tax",
|
|
10
|
+
"bookkeeping",
|
|
11
|
+
"intake",
|
|
12
|
+
"phone-call",
|
|
13
|
+
"engagement-letter",
|
|
14
|
+
"professional-services"
|
|
15
|
+
],
|
|
16
|
+
"description": "Call a CPA or accounting firm to scope the engagement (returns, bookkeeping, advisory), confirm pricing structure, surface tax-season vs off-season capacity, and verify the firm signs returns under PTIN — without committing to retain the firm.",
|
|
17
|
+
"disclaimer": "This call evaluates the firm. It does not establish privilege (accountant-client privilege is narrower than attorney-client and varies by jurisdiction). Do not share unfiled-return details or anomalies the firm hasn't yet been engaged to handle.",
|
|
18
|
+
"context": {
|
|
19
|
+
"when_to_use": "Operator needs a CPA for an individual return (1040 with schedules), small-business return (1120/1120-S/1065/Sch C), bookkeeping monthly close, payroll, sales tax, IRS/state notices, or advisory (entity choice, retirement, R&D credits). Use BEFORE engagement letter is signed.",
|
|
20
|
+
"preconditions": [
|
|
21
|
+
"Operator has summarised the return types and entity structure (sole prop / LLC / S-corp / C-corp / partnership / trust).",
|
|
22
|
+
"Operator has prior-year complexity summary: number of W-2s, 1099s, K-1s, Sch C revenue, rentals, state filings.",
|
|
23
|
+
"Operator has approximate revenue and expense magnitudes so the firm can size the engagement.",
|
|
24
|
+
"Operator has surfaced any known IRS/state notices, prior amendments, or open audits — the firm needs to know what they're stepping into."
|
|
25
|
+
],
|
|
26
|
+
"estimated_call_duration_minutes": 25
|
|
27
|
+
},
|
|
28
|
+
"principles": [
|
|
29
|
+
"CPA capacity is seasonal. A firm with great reviews in October may be impossible to reach March 15. Probe capacity FOR THE WORK YOU NEED, on the timeline you need it.",
|
|
30
|
+
"Pricing in accounting is more variable than people expect: hourly, fixed-fee per return, monthly retainer, or value-based. Get apples-to-apples quotes by specifying the same scope to every firm.",
|
|
31
|
+
"A real CPA signs returns under a Preparer Tax Identification Number (PTIN) AND, for federal practice rights, holds CPA or EA. 'Tax preparers' without these credentials cannot represent the operator before the IRS.",
|
|
32
|
+
"The engagement letter defines scope. 'We do your taxes' is meaningless; '2025 federal 1040 + state X + Sch C + 2 rentals + 4 K-1s + IRS Notice CP2000 response, fixed fee $X, paid in two installments' is meaningful.",
|
|
33
|
+
"Off-season is the cheaper and saner time for advisory work. Surface this when the operator's question is strategic, not deadline-driven.",
|
|
34
|
+
"Bookkeeping and tax preparation are separate engagements with different price logic. Don't conflate them or you'll be quoted the wrong number."
|
|
35
|
+
],
|
|
36
|
+
"phrases": {
|
|
37
|
+
"opener": "Hi — calling for a client who's looking for an accountant for [scope: '2025 personal + S-corp returns' / 'monthly bookkeeping + quarterly review' / 'IRS notice response']. Got a few minutes to talk through fit, pricing, and whether you'd have capacity?",
|
|
38
|
+
"credentials_probe": "Could you confirm who would actually be doing the work — CPA, EA, or staff preparer — and what their PTIN status is? And is the signing preparer the same person we'd be talking to on questions?",
|
|
39
|
+
"scope_probe": "Here's the scope as we understand it: [list returns, schedules, states, special items]. Can you confirm what's included in your quote and what would be billed separately?",
|
|
40
|
+
"pricing_probe": "How does the firm charge — hourly, fixed-fee per return, or monthly retainer? For this scope, what's a realistic low-end and high-end estimate?",
|
|
41
|
+
"tax_season_probe": "For 2025 returns, what's your current new-client capacity? If we engage by [date], do you commit to filing by [deadline] or extending? And what's the cost of an extension if needed?",
|
|
42
|
+
"notice_probe": "If we receive an IRS or state notice during the engagement year, is response work included or billed separately? At what rate?",
|
|
43
|
+
"software_probe": "What tax / bookkeeping software does the firm use, and what's the document portal for sharing sensitive PII?",
|
|
44
|
+
"audit_representation_probe": "If the operator is audited on a return you prepared, do you provide representation? At what rate, and is there pre-paid audit protection?",
|
|
45
|
+
"stall_to_check": "Let me share the quote and timeline with the operator — I won't sign the engagement letter on the call. We'll review and confirm by [timeframe].",
|
|
46
|
+
"graceful_close": "Thank you — could you send a written engagement letter with the scope and pricing exactly as discussed, plus the secure portal link? The operator will review and decide."
|
|
47
|
+
},
|
|
48
|
+
"tactics": [
|
|
49
|
+
{
|
|
50
|
+
"name": "Anchor the scope precisely",
|
|
51
|
+
"when": "Opening minute of the call.",
|
|
52
|
+
"script": "State the scope in enumerated form before asking for a quote. Vague intake yields vague quotes. Use `scope_probe`.",
|
|
53
|
+
"priority": 1
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "Pin down WHO signs the return",
|
|
57
|
+
"when": "After scope.",
|
|
58
|
+
"script": "Use `credentials_probe`. A CPA firm where a non-CPA staffer prepares and a CPA signs is normal; what matters is that the signer holds active credentials and the operator can reach them. PTIN is mandatory for paid preparers.",
|
|
59
|
+
"priority": 2
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "Force apples-to-apples pricing",
|
|
63
|
+
"when": "Firm gives a range.",
|
|
64
|
+
"script": "Use `pricing_probe`. If they say 'depends', restate the scope as bullets and ask for low/high. Note any 'beyond scope' items they flag — those become the surprise bills.",
|
|
65
|
+
"priority": 3
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "Tax-season capacity is the real question",
|
|
69
|
+
"when": "Before agreeing to anything timeline-sensitive.",
|
|
70
|
+
"script": "Use `tax_season_probe`. Firms that say 'we always make the deadline' without qualifying are either lying or about to extend you. An honest answer often includes 'we'd extend and finalise in May/June.' Extensions are fine — surprise extensions are not.",
|
|
71
|
+
"priority": 4
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "Probe notice and audit handling",
|
|
75
|
+
"when": "Mid-call once basics are clear.",
|
|
76
|
+
"script": "Use `notice_probe` and `audit_representation_probe`. Many surprise bills come from CP2000 / state-tax notice responses. Confirm the hourly rate and whether the firm caps fees on notice responses.",
|
|
77
|
+
"priority": 5
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"name": "Secure document handling",
|
|
81
|
+
"when": "Before sharing any PII.",
|
|
82
|
+
"script": "Use `software_probe`. Refuse to email SSNs or full prior-year returns — every reputable firm has a secure portal (SmartVault, Canopy, ShareFile, etc.). If they ask for unencrypted email, that's a major red flag."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"name": "Defer engagement-letter signature",
|
|
86
|
+
"when": "Firm sends DocuSign mid-call.",
|
|
87
|
+
"script": "Use `stall_to_check`. Engagement letters bind the operator to fees, scope, and arbitration clauses. Operator reviews offline."
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"boundaries": [
|
|
91
|
+
"Do NOT sign the engagement letter mid-call. Use ask_operator.",
|
|
92
|
+
"Do NOT email unencrypted SSN, full prior-year return, or bank-account routing numbers. Use the firm's secure portal only after engagement.",
|
|
93
|
+
"Do NOT share unfiled-return anomalies, undeclared income, or potential criminal exposure on this call. Those facts go to an ATTORNEY first, then through Kovel arrangement to the CPA.",
|
|
94
|
+
"Do NOT authorise the firm to file extensions or sign returns under power of attorney (Form 2848) mid-call.",
|
|
95
|
+
"Do NOT accept a fee quote that excludes 'normal' items typical for the operator's situation. Flag and re-quote.",
|
|
96
|
+
"Do NOT engage a 'tax preparer' without PTIN or with no CPA/EA credentials for anything more complex than a simple W-2 1040."
|
|
97
|
+
],
|
|
98
|
+
"success_signals": [
|
|
99
|
+
"Firm names the signing CPA/EA and confirms PTIN.",
|
|
100
|
+
"Pricing is given as a specific low-high range with named in-scope and out-of-scope items.",
|
|
101
|
+
"Tax-season capacity is honestly described, including the realistic extension scenario.",
|
|
102
|
+
"Notice-response and audit-representation policies are explicit.",
|
|
103
|
+
"Firm uses a secure portal and never asks for SSN via email.",
|
|
104
|
+
"Engagement letter will be sent in writing for offline review."
|
|
105
|
+
],
|
|
106
|
+
"failure_signals": [
|
|
107
|
+
"'We'll figure out the price after we see your stuff' with no range provided.",
|
|
108
|
+
"Preparer cannot confirm PTIN or credentials.",
|
|
109
|
+
"Firm asks for SSNs or full returns via unencrypted email.",
|
|
110
|
+
"Pressure to sign the engagement letter on the call to 'lock in this year's rate'.",
|
|
111
|
+
"Refusal to discuss capacity at the dates the operator needs.",
|
|
112
|
+
"Notice / audit response policy is vague or open-ended hourly."
|
|
113
|
+
],
|
|
114
|
+
"exit_strategy": {
|
|
115
|
+
"on_success": "Confirm firm will email: engagement letter, scope and fees in writing, secure-portal invite, and document checklist. Note signer's CPA/EA license and PTIN, capacity commitment for the specific deadline, and the not-to-exceed for the engagement.",
|
|
116
|
+
"on_failure": "Politely close. Ask for one or two referrals to firms specialising in the operator's entity type. Report back to operator with specifics of why the firm wasn't a fit.",
|
|
117
|
+
"follow_ups": [
|
|
118
|
+
"Email the operator: firm name, signer credentials, exact scope, low/high fees, tax-season commitment, notice/audit terms, red/green flags, recommended decision.",
|
|
119
|
+
"If proceeding: schedule a 48-hour offline review window for the engagement letter.",
|
|
120
|
+
"Calendar reminder for renewal conversation in October before the next tax season."
|
|
121
|
+
]
|
|
122
|
+
},
|
|
123
|
+
"required_user_info": [
|
|
124
|
+
"Entity structure (sole prop / LLC / S-corp / C-corp / partnership / trust) and number of entities",
|
|
125
|
+
"Return types and schedules needed (1040, Sch C, Sch E, 1120-S, 1065, K-1s, state returns)",
|
|
126
|
+
"Approximate revenue, expense, and complexity (employees, contractors, multi-state, foreign accounts)",
|
|
127
|
+
"Any open IRS/state notices, prior audits, or amendments",
|
|
128
|
+
"Bookkeeping status (DIY in QuickBooks / Xero / spreadsheets / nothing)",
|
|
129
|
+
"Deadline target (file by Apr 15, extend to Oct 15, monthly close cadence)",
|
|
130
|
+
"Operator's preferred email and willingness to use the firm's secure portal"
|
|
131
|
+
],
|
|
132
|
+
"contributed_by": "professional-intake agent (v0.9.87 community drop)",
|
|
133
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
134
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "day-of-flight-cancellation",
|
|
3
|
+
"name": "Day-of Flight Cancellation — Get Onto the Next Workable Itinerary",
|
|
4
|
+
"version": "1.0.2",
|
|
5
|
+
"category": "travel",
|
|
6
|
+
"tags": ["airline", "irrops", "rebooking", "interline", "phone-call", "elite-line"],
|
|
7
|
+
"description": "Your flight just cancelled. Call the airline (or work the app + counter in parallel) to secure the next workable itinerary — including partner-airline and interline rebooks the front-line agent won't volunteer.",
|
|
8
|
+
"disclaimer": null,
|
|
9
|
+
"context": {
|
|
10
|
+
"when_to_use": "The user's flight has been cancelled or is delayed beyond a usable window (typically >3-4 hours), they are at the airport or near it, and they need to be at their destination on a specific date. Works for any commercial airline. If the cancellation is due to a published travel waiver, also load `irrops-waiver-awareness`.",
|
|
11
|
+
"preconditions": [
|
|
12
|
+
"User has the cancelled flight's record locator (PNR / confirmation code) and ticket number (13-digit, starts with airline's 3-digit code e.g. 016 for UA, 001 for AA, 006 for DL).",
|
|
13
|
+
"User has the airline's elite/status phone number if they have status, or the general line.",
|
|
14
|
+
"User knows their hard constraints: must arrive by [date/time], acceptable connection points, willingness to fly into a nearby alt airport (e.g. EWR vs JFK vs LGA).",
|
|
15
|
+
"Phone in hand AND a spot in the gate-agent line — work both queues in parallel."
|
|
16
|
+
],
|
|
17
|
+
"estimated_call_duration_minutes": 25
|
|
18
|
+
},
|
|
19
|
+
"principles": [
|
|
20
|
+
"Two queues at once: stand in the gate-agent line while you call. Whoever gets you first wins. Hang up the call if the counter solves it; release the spot in line if the call solves it.",
|
|
21
|
+
"Involuntary rebooking ('INVOL') unlocks options that voluntary changes do not — including other-airline (OAL) rebooks. Use the word 'involuntary' on the call.",
|
|
22
|
+
"Specific itineraries beat open questions. 'Can you put me on UA 718 SFO–EWR tonight, or AA 84 if that's full?' lands faster than 'what are my options?'.",
|
|
23
|
+
"Pre-shop the inventory yourself before calling. Use Google Flights, ExpertFlyer, or the airline's own search — know which flights have seats. Agents move faster when you hand them the answer.",
|
|
24
|
+
"HUACA — Hang Up And Call Again. If the first agent is unhelpful or insists nothing is available, politely end the call and redial. Different agent, different tools used, different result.",
|
|
25
|
+
"Foreign sales offices are open when US lines are jammed. UA Manila, DL India, AA Sydney, BA Newcastle all take US-itinerary calls and the queue is often 5 minutes vs. 90."
|
|
26
|
+
],
|
|
27
|
+
"phrases": {
|
|
28
|
+
"opener": "Hi — my flight [flight number] on [date] was just cancelled. Record locator [PNR]. I need to be in [destination] by [time]. I've already looked at the schedule and I see [specific flight] has open seats — can you involuntarily rebook me onto that one?",
|
|
29
|
+
"invoke_invol": "This is an involuntary rebook because the airline cancelled the flight. I'd like to use all involuntary options, including partner and interline carriers.",
|
|
30
|
+
"ask_oal": "Since this is an INVOL, can you check OAL availability? On this route [carrier A] and [carrier B] both operate it and we have an interline agreement.",
|
|
31
|
+
"stall_research": "Give me ten seconds to read out the flight numbers I'm comparing — I want to make sure we're looking at the same options.",
|
|
32
|
+
"elite_pivot": "I'm a [status tier]. Can you transfer me to the [1K Voice / ConciergeKey / Diamond / 360] desk? They sometimes see inventory the main line doesn't.",
|
|
33
|
+
"huaca_close": "Thanks for checking. Let me look at my schedule and call back. Have a good one.",
|
|
34
|
+
"graceful_close_success": "Perfect. Can you read back the new flight numbers, seat assignments if any, the new record locator, and email the updated itinerary? Confirmation number for the rebook?",
|
|
35
|
+
"graceful_close_failure": "Okay. Can you note on my PNR that I called and requested INVOL rebooking to [target flight], and that we couldn't reach it? I may pursue this further."
|
|
36
|
+
},
|
|
37
|
+
"tactics": [
|
|
38
|
+
{
|
|
39
|
+
"name": "Pre-shop inventory before opening the call",
|
|
40
|
+
"when": "Before dialling.",
|
|
41
|
+
"script": "Search Google Flights or the airline app for the same route over the next 24-48 hours. Note flight numbers, times, and which alliance/partner operates them. Have 3 acceptable options ranked.",
|
|
42
|
+
"priority": 1
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"name": "Use the word 'involuntary'",
|
|
46
|
+
"when": "First turn after pleasantries.",
|
|
47
|
+
"script": "Drop 'involuntary rebook' or 'INVOL' explicitly — it signals to the agent that change-fee waivers and OAL rebooking are on the table.",
|
|
48
|
+
"priority": 2
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Ask for OAL / partner / interline by name",
|
|
52
|
+
"when": "Same-airline options don't work.",
|
|
53
|
+
"script": "Name the alliance partner: 'United–Lufthansa' (Star), 'AA–BA' or 'AA–AS' (oneworld since 2024), 'DL–AF/KL/VS' (SkyTeam), 'AS–AA' (interline). Front-line agents often forget OAL rebooks exist until prompted.",
|
|
54
|
+
"priority": 3
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "Work two queues",
|
|
58
|
+
"when": "At the airport when cancellation hits.",
|
|
59
|
+
"script": "Get in the gate-agent line AND call simultaneously. The first one who solves it wins. Apologise and step out of whichever queue lost.",
|
|
60
|
+
"priority": 4
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "Escalate to elite / status desk",
|
|
64
|
+
"when": "User has status and the main line stalls.",
|
|
65
|
+
"script": "Ask for the dedicated tier line (1K Voice, ConciergeKey, Diamond Medallion, 360, AS 100K). They have wider discretion and shorter holds.",
|
|
66
|
+
"priority": 5
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "HUACA",
|
|
70
|
+
"when": "Current agent says nothing's available and you have a known seat.",
|
|
71
|
+
"script": "End the call politely. Wait 60 seconds. Redial. Different agent, often a different answer. Two HUACAs is fine; three is the limit before you switch tactics.",
|
|
72
|
+
"priority": 6
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "Foreign sales office",
|
|
76
|
+
"when": "US hold times are >30 minutes.",
|
|
77
|
+
"script": "Call the airline's office in Manila / Sydney / Mumbai / Newcastle — they handle the same PNRs. Hold time is often single-digit minutes. Numbers are public on each carrier's site.",
|
|
78
|
+
"priority": 7
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "Accept a creative routing",
|
|
82
|
+
"when": "Direct option exhausted.",
|
|
83
|
+
"script": "Ask about: nearby airports (EWR ↔ JFK ↔ LGA, SFO ↔ OAK ↔ SJC, IAD ↔ DCA ↔ BWI), positioning flights (different connection hub), or split tickets the airline issues together."
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"boundaries": [
|
|
87
|
+
"Do NOT accept a 'voluntary' change ticket where you pay fare difference — this is an INVOL rebook.",
|
|
88
|
+
"Do NOT cancel your existing ticket for a refund before securing a confirmed seat on the alternative. The original ticket is leverage.",
|
|
89
|
+
"Do NOT lie about status. Status is checked in real-time.",
|
|
90
|
+
"Do NOT book a separate ticket on a different carrier yourself without getting the airline to do an interline ticket — separate tickets break baggage protection and standby.",
|
|
91
|
+
"Do NOT accept an agent's 'this is the only option, you have to decide now' framing when your own inventory search shows seats elsewhere — say 'I'm looking at [specific flight] right now, can you check that one?' Agent inventory views differ from public search; the seat you see often is bookable.",
|
|
92
|
+
"Do NOT accept 'you'll forfeit your protections if you don't take this' as pressure. EU261 / UK261 / DOT 3-hour rule / contract-of-carriage rights attach to the cancellation event, not to your acceptance of a re-route. The protections survive a 'no thanks' to a bad re-route."
|
|
93
|
+
],
|
|
94
|
+
"success_signals": [
|
|
95
|
+
"Agent issues a new e-ticket and record locator on the spot.",
|
|
96
|
+
"Agent volunteers to check OAL inventory without being asked.",
|
|
97
|
+
"Agent offers seat assignment proactively.",
|
|
98
|
+
"Agent mentions 'distressed passenger' or 'distressed pax fares' — that's the INVOL toolset opening up.",
|
|
99
|
+
"You're transferred to the elite desk."
|
|
100
|
+
],
|
|
101
|
+
"failure_signals": [
|
|
102
|
+
"Agent insists the only option is 'tomorrow's flight, same time' when other carriers clearly have seats.",
|
|
103
|
+
"Agent quotes a change fee or fare difference for an airline-caused cancellation.",
|
|
104
|
+
"Hold times exceed 60 minutes with no callback option.",
|
|
105
|
+
"Agent refuses to consider OAL despite a published interline agreement.",
|
|
106
|
+
"Agent pressures with 'this is the only option, decide now' while you can independently see other seats — manufactured-scarcity tell, HUACA or counter with the specific flight you found.",
|
|
107
|
+
"Agent claims accepting the bad re-route is required to preserve EU261/UK261/DOT compensation — false; compensation attaches to the cancellation, not to your re-route acceptance."
|
|
108
|
+
],
|
|
109
|
+
"exit_strategy": {
|
|
110
|
+
"on_success": "Confirm new flight numbers, new PNR, seat assignments, baggage tag re-routing, and an emailed itinerary. If you've checked bags, confirm baggage rebooking out loud.",
|
|
111
|
+
"on_failure": "Note the PNR with the requested options. Pursue compensation separately (load `eu261-uk261-dot-compensation` skill). Consider buying a one-way on a third carrier and disputing later.",
|
|
112
|
+
"follow_ups": [
|
|
113
|
+
"If the cancellation was carrier-controllable, file for hotel/meal vouchers (see `missed-connection-distressed-passenger`).",
|
|
114
|
+
"If EU/UK/Three-Hour Rule applies, file the cash compensation claim within 7 days while details are fresh.",
|
|
115
|
+
"Save boarding passes — required for both insurance and EU261 claims."
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"required_user_info": [
|
|
119
|
+
"Cancelled flight number, date, and record locator (PNR)",
|
|
120
|
+
"Ticket number (13-digit)",
|
|
121
|
+
"Frequent flyer number and status tier (if any)",
|
|
122
|
+
"Hard arrival deadline at destination",
|
|
123
|
+
"Acceptable alternate airports and connection points",
|
|
124
|
+
"Whether checked baggage is involved"
|
|
125
|
+
],
|
|
126
|
+
"contributed_by": "travel-rebooking agent (v0.9.87 community drop)"
|
|
127
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "de-escalate-angry-rep",
|
|
3
|
+
"name": "De-escalate an Angry Rep (Without Absorbing the Anger)",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"de-escalation",
|
|
8
|
+
"anger",
|
|
9
|
+
"tone",
|
|
10
|
+
"phone-call",
|
|
11
|
+
"boundaries",
|
|
12
|
+
"regulation",
|
|
13
|
+
"emotional-intelligence"
|
|
14
|
+
],
|
|
15
|
+
"description": "Bring a hot, hostile, or frustrated rep back to a working baseline without becoming a mirror for their emotion. The goal is not to win the moment — it is to make the next 10 minutes useful.",
|
|
16
|
+
"disclaimer": null,
|
|
17
|
+
"context": {
|
|
18
|
+
"when_to_use": "The rep is sharp, sarcastic, raising their voice, talking over you, sighing audibly, slamming keys, or punishing you with curt one-word answers. Use BEFORE the call becomes unworkable. If the rep is already abusive (slurs, threats, personal attacks), escalate to a supervisor instead — this skill is for hot, not toxic.",
|
|
19
|
+
"preconditions": [
|
|
20
|
+
"You have heard at least one full sentence from the rep — do not pre-empt anger that isn't there.",
|
|
21
|
+
"You know the operator's actual goal so you can hold it through the noise.",
|
|
22
|
+
"You have ~5 extra minutes of patience budget — de-escalation takes time."
|
|
23
|
+
],
|
|
24
|
+
"estimated_call_duration_minutes": 4
|
|
25
|
+
},
|
|
26
|
+
"principles": [
|
|
27
|
+
"Anger is almost always about the LAST thing the rep handled, not you. Assume a queue of 30 difficult callers before you.",
|
|
28
|
+
"Lower your pitch and slow your tempo by ~15%. Two regulated voices cannot stay escalated for long; one will follow the other, and you go first.",
|
|
29
|
+
"Validate the feeling, not the framing. 'That sounds frustrating' is true; 'You're right, this company is awful' makes you a fellow complainer and forfeits your leverage.",
|
|
30
|
+
"Do not match volume. Matching volume teaches the rep that volume is how they get heard by you — the call gets louder, not clearer.",
|
|
31
|
+
"Name one concrete thing you appreciate about what they've already done. Specific gratitude resets the social contract.",
|
|
32
|
+
"If you absorb the anger, you become useless to the operator. Stay porous to information, opaque to affect."
|
|
33
|
+
],
|
|
34
|
+
"phrases": {
|
|
35
|
+
"first_acknowledgement": "I can hear this has already been a long one for you — I'm not here to make it harder. Can we take it from the top together?",
|
|
36
|
+
"validate_without_agreeing": "That sounds genuinely frustrating. I'd be annoyed too if I were on your side of the desk right now.",
|
|
37
|
+
"name_the_dynamic": "I think we got off on a tense foot — that's on me as much as anyone. Mind if we reset for 30 seconds?",
|
|
38
|
+
"redirect_to_task": "I want to make this short for you. If we can solve [specific thing], I'll be out of your hair in five minutes.",
|
|
39
|
+
"stall_to_regulate": "Give me one second — I want to make sure I'm asking you the right question.",
|
|
40
|
+
"boundary_if_personal": "I get that you're frustrated. I'd just ask we keep it about the account — I'll do the same."
|
|
41
|
+
},
|
|
42
|
+
"tactics": [
|
|
43
|
+
{
|
|
44
|
+
"name": "Drop your voice first",
|
|
45
|
+
"when": "Within the first three seconds of detecting heat.",
|
|
46
|
+
"script": "Consciously drop pitch ~10-15%, slow tempo, lengthen pauses to ~1s. Do not comment on their tone. Behavior modelling beats correction.",
|
|
47
|
+
"priority": 1
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"name": "Validate the feeling once, fully, then move",
|
|
51
|
+
"when": "Immediately after they vent.",
|
|
52
|
+
"script": "Use the `validate_without_agreeing` phrase. Validate ONCE — repeated validation reads as patronising. Then redirect to the task.",
|
|
53
|
+
"priority": 2
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"name": "Concrete appreciation",
|
|
57
|
+
"when": "After the first piece of useful information they give you, even small.",
|
|
58
|
+
"script": "'Thank you — that's exactly what I needed' or 'That helps a lot, I appreciate it.' Specific, not generic. This rebuilds the contract.",
|
|
59
|
+
"priority": 3
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "Tone-shift detector — RECALIBRATE",
|
|
63
|
+
"when": "Rep softens (slower speech, longer answers, an 'okay so…' opener, you hear them type instead of sigh).",
|
|
64
|
+
"script": "DO NOT celebrate or comment on the shift. Match their new baseline immediately — slightly warmer but still calm. Commenting on the de-escalation re-escalates it.",
|
|
65
|
+
"priority": 4
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "Tone-shift detector — RE-HEATING",
|
|
69
|
+
"when": "Voice rises again, interrupts return, or sarcasm reappears mid-call.",
|
|
70
|
+
"script": "Pause for a full beat. Lower your voice again. Use `stall_to_regulate`. Do not chase the conversation up the heat ladder.",
|
|
71
|
+
"priority": 5
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "Soft boundary if it gets personal",
|
|
75
|
+
"when": "Rep makes it about you (your accent, your competence, your gender).",
|
|
76
|
+
"script": "Use `boundary_if_personal` once, calmly, no apology. If it continues, ask for a different rep or supervisor — note the time and the language."
|
|
77
|
+
}
|
|
78
|
+
],
|
|
79
|
+
"boundaries": [
|
|
80
|
+
"Do NOT apologise for asking a legitimate question. Apologising under heat trains the rep to use heat.",
|
|
81
|
+
"Do NOT agree the company is bad just to bond. You'll need that company's cooperation in three minutes.",
|
|
82
|
+
"Do NOT explain de-escalation tactics to the rep ('I can tell you're upset, let's both take a breath'). It reads as condescending and re-ignites.",
|
|
83
|
+
"Do NOT mirror sarcasm. Once.",
|
|
84
|
+
"Do NOT carry the residue into the next call segment — when the rep softens, you soften with them, fully."
|
|
85
|
+
],
|
|
86
|
+
"success_signals": [
|
|
87
|
+
"Rep takes a deeper breath you can hear.",
|
|
88
|
+
"Sentences get longer and more declarative ('okay so what I can do is…').",
|
|
89
|
+
"Rep uses your name or 'sir/ma'am' (re-personalising).",
|
|
90
|
+
"Typing sounds replace sighing.",
|
|
91
|
+
"Rep volunteers information you didn't ask for."
|
|
92
|
+
],
|
|
93
|
+
"failure_signals": [
|
|
94
|
+
"Three validation attempts and no softening.",
|
|
95
|
+
"Rep becomes personal, profane, or threatening.",
|
|
96
|
+
"Rep hangs up or transfers you without warning.",
|
|
97
|
+
"You notice YOUR voice tightening — you've started absorbing it."
|
|
98
|
+
],
|
|
99
|
+
"exit_strategy": {
|
|
100
|
+
"on_success": "Once the call is workable, do NOT linger on the reset — get to the task crisply so the rep is rewarded for the shift with progress. Close warmly: 'Genuinely, thank you for sticking with me on this.'",
|
|
101
|
+
"on_failure": "Politely end and call back: 'I can tell we're both having a tough one — I'm going to call back in a bit, no hard feelings.' A new rep is often the entire fix.",
|
|
102
|
+
"follow_ups": [
|
|
103
|
+
"If the rep was abusive, note time, employee ID if given, and language used — report to operator.",
|
|
104
|
+
"Self-debrief: was there a phrase YOU used that triggered the heat? Log it for next call."
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
"required_user_info": [
|
|
108
|
+
"The actual task — you need the goal to hold through the storm.",
|
|
109
|
+
"Operator's tolerance for callback (some can't wait, in which case push through).",
|
|
110
|
+
"Whether this is a regulated industry (medical, legal) where rep behavior should be reported."
|
|
111
|
+
],
|
|
112
|
+
"contributed_by": "emotional-intel agent (v0.9.87 community drop)",
|
|
113
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
114
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "decline-unsolicited-pitch",
|
|
3
|
+
"name": "Politely Decline an Unsolicited Sales Pitch",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"inbound",
|
|
8
|
+
"self-defense",
|
|
9
|
+
"boundary",
|
|
10
|
+
"phone-call",
|
|
11
|
+
"respect",
|
|
12
|
+
"outreach-sales"
|
|
13
|
+
],
|
|
14
|
+
"description": "When the agent — on its own dedicated line — receives an unsolicited inbound sales / cold call, decline cleanly, professionally, and in a way that protects future relationships without wasting either party's time.",
|
|
15
|
+
"disclaimer": "Skills assume the call is solicited by the operator. NEVER use these to power a mass-cold-call campaign without the operator's explicit per-prospect authorisation.",
|
|
16
|
+
"context": {
|
|
17
|
+
"when_to_use": "The agent's own outbound line, voice number, or contact details have been used by an external party to pitch to the agent or operator. The pitch is unsolicited and not connected to a known operator-initiated thread.",
|
|
18
|
+
"preconditions": [
|
|
19
|
+
"Caller has identified themselves and stated a sales / partnership / introduction intent.",
|
|
20
|
+
"Agent has confirmed there is no prior authorised relationship with this caller in operator records.",
|
|
21
|
+
"Operator has not pre-flagged this caller / company as a wanted inbound."
|
|
22
|
+
],
|
|
23
|
+
"estimated_call_duration_minutes": 2
|
|
24
|
+
},
|
|
25
|
+
"principles": [
|
|
26
|
+
"The salesperson is doing their job. Be respectful — you may end up working with them or someone they know.",
|
|
27
|
+
"A clean 'no thank you' beats a soft 'maybe later'. Maybes generate follow-up calls; clean nos do not.",
|
|
28
|
+
"Brevity is kindness. Letting them keep pitching when you know it's a no wastes their time and yours.",
|
|
29
|
+
"Never lie about why you're declining ('we already have one', 'we're in a contract') unless it is true. Lies invite 'when does the contract end?' follow-ups.",
|
|
30
|
+
"If you're not the decision-maker, say so plainly — and do NOT volunteer the decision-maker's direct contact.",
|
|
31
|
+
"Treat the call the way you'd want your own outreach calls treated."
|
|
32
|
+
],
|
|
33
|
+
"phrases": {
|
|
34
|
+
"early_intercept": "Thanks for the call — before you go further, I'm going to stop you because we don't take unsolicited sales pitches on this line. Could I ask you to send any information by email instead?",
|
|
35
|
+
"polite_no": "Thanks for the call, but it's a no from me on this — and that's a real no, not a 'try again next quarter'. Please take us off your call list.",
|
|
36
|
+
"not_the_dm": "I'm not the decision-maker for that, and I don't pass along contact details for unsolicited outreach. You're welcome to email [generic inbox] and the right person will pick it up if it's relevant.",
|
|
37
|
+
"remove_request": "Could you please remove this number from your dialer? I'd appreciate it.",
|
|
38
|
+
"respectful_close": "Thanks again for your time — best of luck with your outreach. Goodbye."
|
|
39
|
+
},
|
|
40
|
+
"tactics": [
|
|
41
|
+
{
|
|
42
|
+
"name": "Intercept early — within 15 seconds",
|
|
43
|
+
"when": "Caller has identified themselves and their employer and is about to launch into the pitch.",
|
|
44
|
+
"script": "Use `early_intercept`. Letting the pitch run for two minutes before declining is a courtesy that costs both sides time and makes the no feel harsher.",
|
|
45
|
+
"priority": 1
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"name": "Give one reason, not five",
|
|
49
|
+
"when": "Caller asks 'can I ask why?'.",
|
|
50
|
+
"script": "Pick the one truest reason — 'no budget for this category', 'we have a vendor we're happy with', 'not a priority this year' — and stop. Multiple reasons invite multiple counters.",
|
|
51
|
+
"priority": 2
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "Convert to written channel only if genuinely useful",
|
|
55
|
+
"when": "Caller asks for an email address or to send materials.",
|
|
56
|
+
"script": "Offer a generic inbox if the operator has one and you suspect occasional inbound is wanted. Do NOT give a personal email or direct dial just to end the call — that creates worse follow-up.",
|
|
57
|
+
"priority": 3
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"name": "Protect the decision-maker",
|
|
61
|
+
"when": "Caller asks 'who is the right person?'.",
|
|
62
|
+
"script": "Use `not_the_dm`. Do not give names, direct lines, or routing tips that bypass the operator's own gatekeeping.",
|
|
63
|
+
"priority": 4
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"name": "Ask to be removed from the list",
|
|
67
|
+
"when": "This is the second or third call from the same company.",
|
|
68
|
+
"script": "Use `remove_request`. In many jurisdictions this triggers a legal do-not-call obligation. Document the date and the caller's name for the operator's records.",
|
|
69
|
+
"priority": 5
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"name": "Exit warmly",
|
|
73
|
+
"when": "After saying no.",
|
|
74
|
+
"script": "Use `respectful_close`. A warm exit is cheap and pays off if this person ends up at a company you actually want to talk to later."
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"boundaries": [
|
|
78
|
+
"Do NOT give out the operator's direct phone, personal email, or calendar link to unsolicited callers.",
|
|
79
|
+
"Do NOT name a specific competitor as the reason ('we use X'). That gives the caller their next call script.",
|
|
80
|
+
"Do NOT promise follow-up you don't intend to deliver ('email me, I'll bring it up internally') unless you really will.",
|
|
81
|
+
"Do NOT escalate or get sarcastic, even if the caller is pushy. A clean cold no is more powerful than annoyance.",
|
|
82
|
+
"Do NOT hang up mid-sentence on the caller unless they have crossed into hostility — give the polite close."
|
|
83
|
+
],
|
|
84
|
+
"success_signals": [
|
|
85
|
+
"Caller acknowledges the no, removes the number on request, and ends the call.",
|
|
86
|
+
"Caller redirects to email — agent provides only the public inbox.",
|
|
87
|
+
"Caller thanks you for the directness."
|
|
88
|
+
],
|
|
89
|
+
"failure_signals": [
|
|
90
|
+
"Caller continues to pitch after a clear no.",
|
|
91
|
+
"Caller becomes argumentative or attempts manipulation ('just five minutes', 'your boss would want to hear this').",
|
|
92
|
+
"Same company calls again within 30 days despite a removal request."
|
|
93
|
+
],
|
|
94
|
+
"exit_strategy": {
|
|
95
|
+
"on_success": "Log the call in the operator's inbound-pitch log: company, caller name, what they pitched, removal requested y/n. This becomes useful market intel.",
|
|
96
|
+
"on_failure": "If the caller refuses to disengage, repeat the no once, then end the call. Add the company to a blocked-caller list if the operator maintains one.",
|
|
97
|
+
"follow_ups": [
|
|
98
|
+
"Add a one-line entry to the operator's inbound log so repeat callers are recognised.",
|
|
99
|
+
"If a removal was requested, mark the date — a return call inside the do-not-call window is the operator's choice whether to escalate."
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"required_user_info": [
|
|
103
|
+
"Whether the operator has a generic inbox for unsolicited inbound",
|
|
104
|
+
"Whether the operator maintains a blocked-caller list",
|
|
105
|
+
"Operator's standing policy on inbound (e.g. 'always decline politely', or 'flag X categories for review')",
|
|
106
|
+
"Whether to log inbound pitches for later review"
|
|
107
|
+
],
|
|
108
|
+
"contributed_by": "sales-outbound agent (v0.9.87 community drop)",
|
|
109
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
110
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "deliver-difficult-news",
|
|
3
|
+
"name": "Deliver Difficult News (a No, a Cancellation, a Regret)",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"bad-news",
|
|
8
|
+
"no",
|
|
9
|
+
"cancellation",
|
|
10
|
+
"delivery",
|
|
11
|
+
"phone-call",
|
|
12
|
+
"kindness",
|
|
13
|
+
"clarity",
|
|
14
|
+
"emotional-intelligence"
|
|
15
|
+
],
|
|
16
|
+
"description": "Tell someone something they will not want to hear — a cancellation, a refusal, a withdrawal, a decision against them — in a way that is clear, kind, and short. Vague kindness is cruelty; clarity without kindness is brutality. The skill is both.",
|
|
17
|
+
"disclaimer": null,
|
|
18
|
+
"context": {
|
|
19
|
+
"when_to_use": "You are calling on the operator's behalf to deliver a NO: cancelling a service, declining an invitation, withdrawing from a commitment, denying a request, ending an arrangement. Use also when softening news the operator has already decided on — you are not here to re-litigate the decision, just to deliver it well.",
|
|
20
|
+
"preconditions": [
|
|
21
|
+
"Operator has finalised the decision — you are NOT here to negotiate it on their behalf.",
|
|
22
|
+
"You have the reason in operator-approved language (some reasons are shareable, some aren't).",
|
|
23
|
+
"You know what (if anything) is on the table — partial offer, alternative, future date."
|
|
24
|
+
],
|
|
25
|
+
"estimated_call_duration_minutes": 6
|
|
26
|
+
},
|
|
27
|
+
"principles": [
|
|
28
|
+
"Lead with the headline within the first 15 seconds. Burying the news to soften the blow makes it worse — the recipient hears the dread coming and has to live it twice.",
|
|
29
|
+
"Use the word 'no' or the actual verb. 'We're going in a different direction' is cowardice; 'we've decided not to move forward' is kindness with a spine.",
|
|
30
|
+
"Give the reason in one sentence — not three, not a paragraph. Long reasons sound like you're convincing yourself.",
|
|
31
|
+
"Do not over-apologise. One genuine 'I'm sorry' is more powerful than five.",
|
|
32
|
+
"Make space for their reaction. After the news, stop talking. Let them have the silence or the question.",
|
|
33
|
+
"Do not offer to 'stay in touch' or 'maybe later' unless it is genuinely on the table. False futures are crueller than a clean ending."
|
|
34
|
+
],
|
|
35
|
+
"phrases": {
|
|
36
|
+
"headline_first": "I'm calling with news I'd rather not have to share — [operator's decision in one clear sentence]. I wanted to tell you directly.",
|
|
37
|
+
"single_reason": "The reason is [one sentence]. I know that may not be the answer you were hoping for.",
|
|
38
|
+
"make_space": "Take a moment if you need one — I'm here.",
|
|
39
|
+
"acknowledge_their_feeling": "I hear you. That's a fair reaction.",
|
|
40
|
+
"boundary_if_pressed": "I want to be respectful and straight with you — the decision is final. I'm not the right person to re-open it.",
|
|
41
|
+
"clean_close_warm": "Thank you for hearing me out. I genuinely wish you well."
|
|
42
|
+
},
|
|
43
|
+
"tactics": [
|
|
44
|
+
{
|
|
45
|
+
"name": "Headline in the first 15 seconds",
|
|
46
|
+
"when": "Immediately after the initial 'hi, is now okay?' pleasantry.",
|
|
47
|
+
"script": "Use `headline_first`. Resist the urge to lay groundwork. The kindest thing is the cleanest landing.",
|
|
48
|
+
"priority": 1
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Reason in one sentence",
|
|
52
|
+
"when": "Right after the headline.",
|
|
53
|
+
"script": "Use `single_reason`. Do not expand unless asked. If they ask for more, give one more sentence, not five.",
|
|
54
|
+
"priority": 2
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "Stop talking",
|
|
58
|
+
"when": "After the reason.",
|
|
59
|
+
"script": "Pause 5-10 seconds. Let them feel it. Filling the silence is for your comfort, not theirs.",
|
|
60
|
+
"priority": 3
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "Tone-shift detector — RECIPIENT GOES QUIET",
|
|
64
|
+
"when": "Long pause, breathing changes, voice tightens.",
|
|
65
|
+
"script": "Do not rush to fill it. Use `make_space` once, softly. Do not move to logistics until they re-enter the conversation.",
|
|
66
|
+
"priority": 4
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "Tone-shift detector — RECIPIENT GETS ANGRY",
|
|
70
|
+
"when": "Voice rises, accusations begin, 'after everything I did' framings.",
|
|
71
|
+
"script": "Do not defend. Use `acknowledge_their_feeling`. Do not justify the operator's decision a second time — repeating reasons reads as fighting back. Hold the line with `boundary_if_pressed` if they push to re-open.",
|
|
72
|
+
"priority": 5
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "Tone-shift detector — RECIPIENT GETS GRACIOUS",
|
|
76
|
+
"when": "They thank you for the call, say they understand.",
|
|
77
|
+
"script": "Receive it. Do not over-thank them in return — that can feel like you're rewarding compliance. A simple 'thank you for taking it well, I know it's hard' is enough.",
|
|
78
|
+
"priority": 6
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": "Close clean, leave nothing dangling",
|
|
82
|
+
"when": "Last 30 seconds.",
|
|
83
|
+
"script": "Use `clean_close_warm`. Do not offer future possibilities you don't mean. If there IS a real next step (refund, paperwork, alternative date), state it crisply and end."
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"boundaries": [
|
|
87
|
+
"Do NOT soften with euphemism. 'We're pausing' when you mean 'we're ending' is dishonest and the person can tell.",
|
|
88
|
+
"Do NOT re-open the decision under emotional pressure. Your job is delivery, not re-litigation.",
|
|
89
|
+
"Do NOT promise things the operator hasn't approved (refunds, references, future opportunities).",
|
|
90
|
+
"Do NOT make it about the operator's difficulty ('this was so hard for them to decide'). The recipient does not owe the operator sympathy.",
|
|
91
|
+
"Do NOT cry, performatively or otherwise. If you are too emotionally involved to deliver cleanly, the operator should make the call themselves."
|
|
92
|
+
],
|
|
93
|
+
"success_signals": [
|
|
94
|
+
"Recipient hears the news clearly within the first minute.",
|
|
95
|
+
"Recipient asks one or two follow-up questions and you answer them in single sentences.",
|
|
96
|
+
"Call lasts under 10 minutes.",
|
|
97
|
+
"You leave the call without having promised anything you can't deliver."
|
|
98
|
+
],
|
|
99
|
+
"failure_signals": [
|
|
100
|
+
"You're 5 minutes in and haven't said the actual news yet.",
|
|
101
|
+
"You hear yourself justifying the decision repeatedly.",
|
|
102
|
+
"You offered a 'maybe later' you don't mean.",
|
|
103
|
+
"The call ends with the recipient still believing they can change the outcome."
|
|
104
|
+
],
|
|
105
|
+
"exit_strategy": {
|
|
106
|
+
"on_success": "Close with `clean_close_warm`. Send the operator a one-line confirmation: 'Delivered. They [reaction]. No further action needed / [one next step].'",
|
|
107
|
+
"on_failure": "If the recipient is genuinely escalating beyond what you can hold, end politely and tell them the operator will be in touch in writing. Do not try to win the call.",
|
|
108
|
+
"follow_ups": [
|
|
109
|
+
"Send written confirmation (email/letter) if appropriate — anchors the verbal call.",
|
|
110
|
+
"Flag the operator if the recipient threatened action (legal, public, etc.).",
|
|
111
|
+
"Log how the call went so the operator has a record for any future interaction."
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"required_user_info": [
|
|
115
|
+
"The exact news in one sentence — operator-approved wording.",
|
|
116
|
+
"The reason in operator-approved wording — and what is NOT to be shared.",
|
|
117
|
+
"What, if anything, is genuinely on offer (partial refund, alternative, future contact).",
|
|
118
|
+
"How to escalate if the call goes badly (operator's contact for follow-up)."
|
|
119
|
+
],
|
|
120
|
+
"contributed_by": "emotional-intel agent (v0.9.87 community drop)",
|
|
121
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
122
|
+
}
|