@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.
- 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 +106 -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 +117 -0
- package/dist/skills/built-in/report-fbi-tip.json +109 -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,142 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "refuse-the-split",
|
|
3
|
+
"name": "Refuse the Split: Why 'Meet in the Middle' Is Often the Worst Outcome",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "negotiation",
|
|
6
|
+
"tags": ["splitting", "fairness-frame", "creative-trades", "phone-call", "real-time"],
|
|
7
|
+
"description": "'Let's just split the difference' sounds fair and ends the call quickly — and that is precisely why it usually leaves money on the table. This skill teaches when to refuse the split, when to redirect to non-price concessions, and when accepting the split is actually correct.",
|
|
8
|
+
"disclaimer": "Refusing the split has social cost — it signals you're not 'reasonable' in a folk sense. The cost is real but usually small relative to the dollars. Only refuse when the dollars justify the friction.",
|
|
9
|
+
"context": {
|
|
10
|
+
"when_to_use": "Mid-to-late in a price negotiation when the counterparty proposes meeting halfway between two anchors. Especially relevant when the midpoint represents real dollars and the relationship is transactional or recurring.",
|
|
11
|
+
"preconditions": [
|
|
12
|
+
"Two anchors are on the table (yours and theirs).",
|
|
13
|
+
"You have at least one non-price dimension you could trade on (term, scope, payment timing, references, exclusivity).",
|
|
14
|
+
"You're not in a hurry to close — refusing the split adds 5-15 minutes to the call."
|
|
15
|
+
],
|
|
16
|
+
"estimated_call_duration_minutes": 30
|
|
17
|
+
},
|
|
18
|
+
"principles": [
|
|
19
|
+
"'Meet in the middle' rewards the more aggressive anchor. If they anchored extreme and you anchored reasonable, splitting the difference gives them 70% of the spread they wanted.",
|
|
20
|
+
"The split is a heuristic for fairness, not a measurement of value. Both sides agreeing 'this is fair' does not mean it's optimal — it means the call ends fast.",
|
|
21
|
+
"Splitting is highest-cost when it terminates exploration of OTHER dimensions. Once you've split on price, you've also closed the door on negotiating term, support, payment, and scope — those would have moved if you'd refused the split.",
|
|
22
|
+
"Refusing the split is NOT being unreasonable. It's saying 'the price is one of many things; let's solve more of them'.",
|
|
23
|
+
"Sometimes the split IS the right move: tiny gap, relationship matters, time-cost of further negotiation exceeds the gap. Recognize these and accept cleanly.",
|
|
24
|
+
"Never propose the split yourself. Make THEM propose it; that gives you the option to refuse, redirect, or accept."
|
|
25
|
+
],
|
|
26
|
+
"phrases": {
|
|
27
|
+
"polite_refuse": "Thanks for the offer to meet in the middle — but I'm not quite there yet on the dollars. What if we held the price closer to my number and you covered [shipping / setup / training / month-one] instead?",
|
|
28
|
+
"redirect_to_term": "Splitting on price is one option — but what if I committed to [longer term / multi-year / autopay] in exchange for getting closer to my number?",
|
|
29
|
+
"redirect_to_scope": "Rather than splitting on price, what if we trimmed [feature/scope item] and held the price where I need it?",
|
|
30
|
+
"redirect_to_timing": "What if I paid net-15 / annual upfront / in 30 days, and we held the price?",
|
|
31
|
+
"hold_my_number": "I get it, and I want to make this work — but my number is my number for [reason]. What else might we put on the table to bridge it?",
|
|
32
|
+
"accept_the_split_cleanly": "You know what, given how close we are — let's do it. Read me back the final terms.",
|
|
33
|
+
"name_the_pattern": "I notice we keep landing back at the midpoint — but the midpoint is where both of us walk away slightly unhappy. Can we try one more pass with something other than price moving?"
|
|
34
|
+
},
|
|
35
|
+
"tactics": [
|
|
36
|
+
{
|
|
37
|
+
"name": "Refuse politely, redirect to a cheap-to-them dimension",
|
|
38
|
+
"when": "Rep proposes meeting in the middle on price.",
|
|
39
|
+
"script": "Use `polite_refuse` or one of the redirect phrases. Pick the dimension cheapest to the rep — many reps can give 'free shipping' or 'waived setup fee' more easily than a price cut, because those don't hit their pricing-discount KPI.",
|
|
40
|
+
"priority": 1
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "Hold your number until they've traded across dimensions twice",
|
|
44
|
+
"when": "Rep offers a small price move plus a verbal 'meet me in the middle'.",
|
|
45
|
+
"script": "Use `hold_my_number`. The rule: never split on price until you've traded across non-price dimensions at least twice. If you've done so and they're still stuck, then split — but knowing you've extracted the cross-dimension value first.",
|
|
46
|
+
"priority": 2
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "Name the pattern when the rep keeps proposing splits",
|
|
50
|
+
"when": "Third or fourth time the rep proposes splitting.",
|
|
51
|
+
"script": "Use `name_the_pattern`. Naming the pattern interrupts it. The rep will either reveal real authority limits ('I literally can't do anything but splits') or pivot to creative concessions.",
|
|
52
|
+
"priority": 3
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "Accept the split when it's actually right",
|
|
56
|
+
"when": "Gap is small (under 5% of total deal), relationship is long-term, time-cost of further negotiation exceeds the gap.",
|
|
57
|
+
"script": "Use `accept_the_split_cleanly`. Take the split warmly — banked goodwill pays out on next renewal. Don't grudgingly accept; that wastes the relationship dividend.",
|
|
58
|
+
"priority": 4
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "Trade SMALL price moves for LARGE non-price gains",
|
|
62
|
+
"when": "Rep offers half-the-difference; you want to give some but not split.",
|
|
63
|
+
"script": "Counter: 'I can move a quarter of the way on price IF you can move on [term / scope / payment]. Otherwise I stay at my number.' Asymmetric trade — small price concession for large structural win."
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"decision_tree": {
|
|
67
|
+
"description": "When 'meet in the middle' is proposed, run this tree BEFORE accepting. The rep is signaling end-of-call energy; you have one window to redirect.",
|
|
68
|
+
"branches": [
|
|
69
|
+
{
|
|
70
|
+
"if_you_hear": "'Let's just meet in the middle.' / 'Let's split the difference.'",
|
|
71
|
+
"interpretation": "Standard offer. Rep wants to close. Now decide: is the gap big enough to fight for?",
|
|
72
|
+
"say": "Compute: gap × your discount factor. If >5% of total deal AND you have non-price dimensions to trade, use `polite_refuse` + redirect. If <5% AND relationship matters, `accept_the_split_cleanly`.",
|
|
73
|
+
"do_not": "Do not auto-accept. Do not auto-refuse. The 5% heuristic decides."
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"if_you_hear": "'I can come up X if you come down Y' (asymmetric move).",
|
|
77
|
+
"interpretation": "Better than a midpoint split. They've moved more than you. Decide whether to mirror their move or trade non-price.",
|
|
78
|
+
"say": "Mirror the larger number ('Y?') — buys time, may pull them further. Then propose `redirect_to_term` to capture remaining gap on non-price.",
|
|
79
|
+
"do_not": "Do not reflex-counter their proportional move. Treat their move as new information, not a binding template."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"if_you_hear": "'This is the best I can do — let's just meet in the middle.'",
|
|
83
|
+
"interpretation": "Closing pressure + appeal to fairness. Likely 1-2 more moves available.",
|
|
84
|
+
"say": "Use `hold_my_number`: 'I hear you, but my number is my number for [reason]. What else could move?'",
|
|
85
|
+
"do_not": "Do not buy 'best I can do' on first delivery. It usually isn't."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"if_you_hear": "'I have to get a sign-off if I move further' / 'I'm at the limit'.",
|
|
89
|
+
"interpretation": "Real authority constraint, possibly. Escalation is the right call now.",
|
|
90
|
+
"say": "Trade the split for an escalation: 'I get that — what if you bring in your manager and we explore non-price options together?'",
|
|
91
|
+
"do_not": "Do not accept the split as a way to spare them the escalation. The escalation produces more value than the split."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"if_you_hear": "Tone shifts to 'frustrated but trying' after your refusal of the split.",
|
|
95
|
+
"interpretation": "Rep is invested in closing. Good. They will work harder.",
|
|
96
|
+
"say": "Label it: 'It sounds like you really want to make this work — I do too. Let's solve it together.' Then redirect to a non-price dimension.",
|
|
97
|
+
"do_not": "Do not feel guilty and accept. Their frustration is leverage, not a moral signal."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"if_you_hear": "Gap is small (<3% of total) AND rep proposes split.",
|
|
101
|
+
"interpretation": "Take it. Time is more valuable than the remaining gap.",
|
|
102
|
+
"say": "`accept_the_split_cleanly` — warmly. Bank the goodwill.",
|
|
103
|
+
"do_not": "Do not refuse on principle. Refusing a small split costs the relationship more than it earns."
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"if_you_hear": "Rep proposes split number 3 in a row, same offer each time.",
|
|
107
|
+
"interpretation": "Rep has hit their authority ceiling and is repeating themselves.",
|
|
108
|
+
"say": "Pivot entirely. `name_the_pattern` + redirect to non-price OR escalate to supervisor.",
|
|
109
|
+
"do_not": "Do not keep refusing identically — same input from you produces same output from them."
|
|
110
|
+
}
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"boundaries": [
|
|
114
|
+
"Do NOT refuse a split when the gap is trivial and the relationship is long-term. Bad math.",
|
|
115
|
+
"Do NOT lecture the rep on why splitting is suboptimal — just redirect.",
|
|
116
|
+
"Do NOT use 'meet in the middle' phrasing yourself. Force them to propose it; you keep the option to refuse.",
|
|
117
|
+
"Do NOT refuse split #1 and then accept split #2 at the same number — you've trained them you fold under repetition."
|
|
118
|
+
],
|
|
119
|
+
"success_signals": [
|
|
120
|
+
"Rep proposes a non-price concession unprompted ('what about waiving the setup fee?').",
|
|
121
|
+
"Rep offers an asymmetric move ('I can come down X, can you come up Y?').",
|
|
122
|
+
"Rep loops in a supervisor or escalates to higher authority.",
|
|
123
|
+
"Rep accepts your number with a face-saving condition you can grant cheaply (longer term, autopay).",
|
|
124
|
+
"Final outcome captures both: closer to your price target AND a non-price win you didn't have before."
|
|
125
|
+
],
|
|
126
|
+
"failure_signals": [
|
|
127
|
+
"Rep firmly refuses any non-price discussion ('it's price or nothing').",
|
|
128
|
+
"Call duration > 60 min and you've refused 3 splits with no movement.",
|
|
129
|
+
"You're now 5% further from your target than before refusing — you've burned credibility; consider taking the split before it disappears.",
|
|
130
|
+
"Rep ends the call entirely after your refusal."
|
|
131
|
+
],
|
|
132
|
+
"exit_strategy": {
|
|
133
|
+
"on_success": "Once the rep moves on non-price OR splits asymmetrically toward you, lock the deal. Confirm all terms with `commitment_check`.",
|
|
134
|
+
"on_failure": "If refusing the split has stalled the call hard, reset: 'OK, I've been pushing — let me hear what you'd consider truly final, and I'll make a call.' Sometimes the right move is taking the split late and gracefully."
|
|
135
|
+
},
|
|
136
|
+
"required_user_info": [
|
|
137
|
+
"User's target AND walk-away number.",
|
|
138
|
+
"What non-price dimensions the user is empowered to trade (term length, payment terms, scope, exclusivity, references).",
|
|
139
|
+
"User's tolerance for additional call time — refusing the split costs time."
|
|
140
|
+
],
|
|
141
|
+
"contributed_by": "negotiation-master agent (v0.9.87 community drop)"
|
|
142
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "refuse-upsell-at-close",
|
|
3
|
+
"name": "Politely but Firmly Refuse the End-of-Call Upsell",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "other",
|
|
6
|
+
"tags": [
|
|
7
|
+
"closing",
|
|
8
|
+
"upsell",
|
|
9
|
+
"refusal",
|
|
10
|
+
"boundary",
|
|
11
|
+
"phone-call",
|
|
12
|
+
"closing-commitment"
|
|
13
|
+
],
|
|
14
|
+
"description": "Most service calls end with a scripted upsell — a protection plan, a premium tier, an add-on, a credit card. The upsell is timed AFTER the agreement is locked, when the customer's defences are down and ending the call feels closer than fighting. This skill teaches the agent to recognise the upsell window, decline cleanly, and close the call WITHOUT giving up the ground already won.",
|
|
15
|
+
"disclaimer": null,
|
|
16
|
+
"context": {
|
|
17
|
+
"when_to_use": "Whenever a rep, after the agreement is closed, pivots to 'before I let you go, I'd like to tell you about…' or 'as a thank you for being a customer, can I offer…' This is virtually always an upsell. Use any time the user has NOT pre-authorised the agent to accept upsells.",
|
|
18
|
+
"preconditions": [
|
|
19
|
+
"The primary agreement of the call is locked and verified.",
|
|
20
|
+
"The agent has NOT been authorised by the user to accept additional offers / add-ons / products on this call.",
|
|
21
|
+
"You can extend the call by 1-2 minutes for the polite decline ritual."
|
|
22
|
+
],
|
|
23
|
+
"estimated_call_duration_minutes": 2
|
|
24
|
+
},
|
|
25
|
+
"principles": [
|
|
26
|
+
"Refuse warmly. The rep is following a script — being rude to them makes the rep slower to advocate for you on the next call. Same person; long memory.",
|
|
27
|
+
"Refuse FAST. Don't engage with the pitch. The longer you listen, the more committed both sides feel to the conversation.",
|
|
28
|
+
"Don't lie about why. 'I'm not in a position to decide today' is true and clean. 'I already have one' might be a lie that costs you trust.",
|
|
29
|
+
"Don't accept 'just listen' or 'just hear me out'. Listening to the full pitch IS engagement; the script is calibrated to convert engaged listeners.",
|
|
30
|
+
"Hold the close. If the rep tries to renegotiate or revisit the agreement after the refusal, do not re-open it. The primary outcome was already locked."
|
|
31
|
+
],
|
|
32
|
+
"phrases": {
|
|
33
|
+
"soft_redirect": "Thanks, but I'm only set up to handle [the original issue] today — I'd want to look at any add-ons separately when I have time to compare.",
|
|
34
|
+
"policy_decline": "I have a rule of not adding services on inbound calls — happy to look at it on my own time. Could you point me to where I can read about it later?",
|
|
35
|
+
"operator_authority": "I'm not authorised to add anything new on this call — that decision lives with [user / household / other party]. So I'll have to pass for today.",
|
|
36
|
+
"no_pitch_engage": "I'd rather not get into the details right now — I know if I start hearing the pitch I'll spend more time than I have. Could we leave that for another time?",
|
|
37
|
+
"second_attempt_decline": "I do want to be clear — I'm not interested in any add-ons today. I want to lock in what we just agreed to and not muddy it.",
|
|
38
|
+
"third_attempt_firm": "Thanks, but no — not today. Let's wrap up the original change so we're both clear it's locked in.",
|
|
39
|
+
"guard_the_close": "Just to be sure: declining the [upsell] doesn't change anything about the [primary agreement] we just locked in, correct?",
|
|
40
|
+
"graceful_close_success": "Thanks again for your help today on [primary issue]. Appreciated the offer on the [upsell] — I'll think about it on my own time.",
|
|
41
|
+
"graceful_close_failure": "I've declined twice — could we end the call here? I want to leave on a good note but I'm not going to change my mind on the add-on."
|
|
42
|
+
},
|
|
43
|
+
"tactics": [
|
|
44
|
+
{
|
|
45
|
+
"name": "Recognise the upsell window",
|
|
46
|
+
"when": "Rep says 'before I let you go' / 'as a thank you' / 'one more thing' / 'we have a special offer'.",
|
|
47
|
+
"script": "Mentally tag: the upsell phase has started. Switch from agreement mode to refusal mode. Do NOT continue with relaxed closing posture.",
|
|
48
|
+
"priority": 1
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "Refuse on the first ask, warmly",
|
|
52
|
+
"when": "Rep starts the pitch.",
|
|
53
|
+
"script": "Use the `soft_redirect` or `operator_authority` phrase. Decline before the rep gets into pricing / benefits — engaging with the substance makes refusal harder.",
|
|
54
|
+
"priority": 2
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"name": "Pre-empt the second attempt",
|
|
58
|
+
"when": "Rep persists after first decline.",
|
|
59
|
+
"script": "Use the `second_attempt_decline` phrase. Many call centre scripts require reps to make 2-3 attempts; expect this and decline cleanly without escalation.",
|
|
60
|
+
"priority": 3
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"name": "Refuse the third attempt firmly",
|
|
64
|
+
"when": "Rep tries a third pitch angle.",
|
|
65
|
+
"script": "Use the `third_attempt_firm` phrase. After three declines, additional pressure is a script violation — be polite but unmistakeable.",
|
|
66
|
+
"priority": 4
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "Guard the close",
|
|
70
|
+
"when": "Upsell declined, before goodbye.",
|
|
71
|
+
"script": "Use the `guard_the_close` phrase. Some scripts subtly tie the agreement to the upsell — confirm explicitly that the primary outcome stands regardless of the upsell refusal.",
|
|
72
|
+
"priority": 5
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "Avoid lies and exaggerations",
|
|
76
|
+
"when": "Throughout.",
|
|
77
|
+
"script": "Do NOT invent reasons ('I already have that with another provider'). Use truthful declines: time, authority, policy. Truthful declines hold up if the rep verifies.",
|
|
78
|
+
"priority": 6
|
|
79
|
+
}
|
|
80
|
+
],
|
|
81
|
+
"boundaries": [
|
|
82
|
+
"Do NOT accept the upsell to end the call faster. The rep will likely call back if you accept; the time cost compounds.",
|
|
83
|
+
"Do NOT renegotiate the primary agreement to compensate for the refusal. The upsell decline is independent.",
|
|
84
|
+
"Do NOT be rude or sarcastic. The decline should be repeatable on the next call without burnt bridges.",
|
|
85
|
+
"Do NOT decline an upsell that IS genuinely in the user's interest just because it appeared at the close — if the agent has been pre-authorised to consider relevant offers, evaluate on merits."
|
|
86
|
+
],
|
|
87
|
+
"success_signals": [
|
|
88
|
+
"Rep accepts the first or second decline and moves to the close.",
|
|
89
|
+
"Rep confirms the primary agreement is unaffected by the upsell refusal.",
|
|
90
|
+
"Rep offers an alternative ('I'll add a note that you're not interested in marketing calls') and closes cleanly.",
|
|
91
|
+
"Call ends within 2 minutes of the first decline."
|
|
92
|
+
],
|
|
93
|
+
"failure_signals": [
|
|
94
|
+
"Rep escalates the pitch after multiple declines.",
|
|
95
|
+
"Rep ties the upsell to the agreement (e.g. 'this discount requires you to also enrol in…').",
|
|
96
|
+
"Rep guilt-trips or shames the customer ('most people in your situation say yes').",
|
|
97
|
+
"Rep refuses to end the call until the upsell is heard fully."
|
|
98
|
+
],
|
|
99
|
+
"exit_strategy": {
|
|
100
|
+
"on_success": "Confirm primary agreement intact (via `guard_the_close`). Close politely. Log: rep attempted upsell, declined, agreement holds.",
|
|
101
|
+
"on_failure": "If the rep ties the upsell to the primary agreement, treat as a re-opening of negotiations. Pause, re-run readback + lock-in to verify the primary terms haven't been silently changed, and escalate if the tie is real.",
|
|
102
|
+
"follow_ups": [
|
|
103
|
+
"Add a 'do not solicit' note on the account if available — reduces upsell volume on future calls.",
|
|
104
|
+
"If the rep was unusually persistent, consider providing feedback through the company's post-call survey."
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
"required_user_info": [
|
|
108
|
+
"Explicit user policy on whether agent may accept upsells (default: no)",
|
|
109
|
+
"If yes: dollar threshold, categories of interest, decision deadline",
|
|
110
|
+
"Whether the user wants a 'do not solicit' flag set on the account"
|
|
111
|
+
],
|
|
112
|
+
"contributed_by": "closing-commitment agent (v0.9.87 community drop)",
|
|
113
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
114
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "rental-car-counter-defense",
|
|
3
|
+
"name": "Rental Car Counter — Overbookings, Insurance Decline, Fuel Reversal",
|
|
4
|
+
"version": "1.0.1",
|
|
5
|
+
"category": "travel",
|
|
6
|
+
"tags": ["rental-car", "hertz", "avis", "enterprise", "cdw", "insurance", "fuel-purchase"],
|
|
7
|
+
"description": "Navigate the rental-car counter without being upsold: refuse unnecessary insurance, reverse the pre-purchase fuel trap, and handle overbookings without spending an extra $40/day on a 'free upgrade'.",
|
|
8
|
+
"disclaimer": "Always confirm your credit-card rental coverage details with the issuer for your specific country and rental type. Some countries (Italy, Ireland, Israel, Jamaica) require local CDW that bypasses credit-card coverage.",
|
|
9
|
+
"context": {
|
|
10
|
+
"when_to_use": "User is picking up (or returning) a rental car from Hertz, Avis, Enterprise/National/Alamo, Budget, Sixt, Europcar, Dollar, Thrifty, or a local operator. Specifically helpful at airport counters where upsell pressure is highest.",
|
|
11
|
+
"preconditions": [
|
|
12
|
+
"User has the reservation confirmation number.",
|
|
13
|
+
"User has their primary credit card (the one that pays — also the one carrying CDW coverage).",
|
|
14
|
+
"User knows whether their credit-card rental coverage is PRIMARY or SECONDARY (Chase Sapphire Reserve = primary in the US for most rentals; Amex Platinum = secondary unless you pre-enroll in Premium Car Rental Protection).",
|
|
15
|
+
"User has a domestic driver's license + IDP if renting abroad in a country that requires it."
|
|
16
|
+
],
|
|
17
|
+
"estimated_call_duration_minutes": 15
|
|
18
|
+
},
|
|
19
|
+
"principles": [
|
|
20
|
+
"Insurance: the most-upsold, least-needed product at the counter. Most US-issued credit cards include CDW. If your card is PRIMARY (Sapphire Reserve, United Club Infinite, USAA), you almost never need the counter's CDW.",
|
|
21
|
+
"Local CDW where required: in Italy, Ireland, Israel, Jamaica, the rental agreement requires CDW that overrides card coverage. Pay it. Elsewhere — decline.",
|
|
22
|
+
"Pre-purchase fuel ('FPO') is a trap unless you're returning empty. The math: you pay for a full tank at a slightly cheaper rate, then return as empty as you dare. If you return with even 1/4 tank, you've paid for fuel you didn't use.",
|
|
23
|
+
"Overbooking is rare but happens. You're entitled to an equivalent or better car at the original rate. 'Free upgrade' usually means same daily rate; an SUV at SUV rate isn't an upgrade.",
|
|
24
|
+
"Status programs skip the counter entirely. Hertz Gold Plus Rewards, Avis Preferred, National Emerald Club Executive — get the keys directly from the lot. Five seconds to enroll for free.",
|
|
25
|
+
"Inspect the car before driving off. Photograph every panel and the dashboard fuel level. Tiny dents become $500 charges if you don't have a timestamp."
|
|
26
|
+
],
|
|
27
|
+
"phrases": {
|
|
28
|
+
"opener": "Hi — picking up reservation [confirmation]. I'm declining all optional coverage. I have primary CDW through my credit card. Could we keep the original rate?",
|
|
29
|
+
"decline_cdw": "I'm declining LDW/CDW. My credit card covers it as primary. I'll initial the decline box.",
|
|
30
|
+
"decline_sli": "I'm declining the supplemental liability insurance. My personal auto policy covers liability when I rent.",
|
|
31
|
+
"decline_pec": "I'm declining personal effects coverage. My homeowners/renters policy covers items in the car.",
|
|
32
|
+
"decline_fpo": "I don't need fuel pre-purchase. I'll refuel before return. If your system added it, please remove it now.",
|
|
33
|
+
"handle_overbook": "If the car class I reserved isn't available, can you put me in an equivalent or better class at the same daily rate?",
|
|
34
|
+
"handle_pressure": "Thanks, but I'm set. Can we finalize the keys?",
|
|
35
|
+
"fuel_reversal_at_return": "I returned the car with a full tank. The pre-purchase fuel option was added at check-out. Can you reverse it on this receipt?",
|
|
36
|
+
"graceful_close_success": "Thanks. Can you print or email the final agreement so I can confirm the daily rate and no add-ons before I drive off?",
|
|
37
|
+
"graceful_close_failure": "If you can't waive the [add-on], please print the agreement as-is — I'll dispute the charge with my credit card on return."
|
|
38
|
+
},
|
|
39
|
+
"tactics": [
|
|
40
|
+
{
|
|
41
|
+
"name": "Pre-enroll in loyalty before you arrive",
|
|
42
|
+
"when": "Before booking, ideally.",
|
|
43
|
+
"script": "Hertz Gold Plus Rewards, Avis Preferred, National Emerald Club, Enterprise Plus, Budget Fastbreak, Sixt Loyalty — all free, all skip the counter. National Executive (free with no spend) lets you pick ANY car in the Executive aisle.",
|
|
44
|
+
"priority": 1
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "Know your card's CDW terms",
|
|
48
|
+
"when": "Before the counter conversation.",
|
|
49
|
+
"script": "PRIMARY US CDW cards: Chase Sapphire Reserve, Chase United Club Infinite, USAA, Amex Platinum (only when you pre-enroll in 'Premium Car Rental Protection' — $12.25/rental). Most other cards are SECONDARY = pay your personal auto first, card picks up remainder. Excluded categories on most cards: exotic, vintage (10+ yrs), trucks/cargo vans, rentals longer than 31 days. Always read the benefits guide.",
|
|
50
|
+
"priority": 2
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "Decline every add-on by name",
|
|
54
|
+
"when": "Agent walks through coverages.",
|
|
55
|
+
"script": "LDW/CDW, SLI (supplemental liability), PAI (personal accident), PEC (personal effects), roadside assistance plus, fuel pre-purchase. Decline each. Initial the boxes. Calm and friendly, not adversarial.",
|
|
56
|
+
"priority": 3
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "Refuse a 'free upgrade' that isn't free",
|
|
60
|
+
"when": "Agent offers an SUV / premium because your class is unavailable.",
|
|
61
|
+
"script": "Ask: 'At what daily rate? Same as my reservation?' If no — that's not an upgrade, that's an upsell. Per industry norms, you're owed an equivalent or better car at the ORIGINAL rate when your class is unavailable.",
|
|
62
|
+
"priority": 4
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "Photograph every panel, plus dash + odometer",
|
|
66
|
+
"when": "Before driving off the lot.",
|
|
67
|
+
"script": "Walk around the car. Photograph each side, both bumpers, roof, hood, all four wheels, the dashboard showing fuel level and odometer, and any existing damage marked or unmarked. Time-stamped photos beat any dispute later."
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"name": "Reverse FPO at return if accidentally added",
|
|
71
|
+
"when": "Returning with full tank but the system shows FPO on receipt.",
|
|
72
|
+
"script": "Show the agent the fuel receipt and the receipt's FPO line. They can remove it on the spot 90% of the time. If not, dispute with credit card."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"name": "Foreign rental: prepay local CDW",
|
|
76
|
+
"when": "Italy, Ireland, Jamaica, Israel, parts of Eastern Europe.",
|
|
77
|
+
"script": "Use Auto Europe, AutoSlash, or the rental brand's site with local CDW INCLUDED in the booking. The counter will still try to upsell 'Super CDW'; usually you can decline that if you have card coverage."
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"boundaries": [
|
|
81
|
+
"Do NOT decline local CDW where it's legally required (Italy is the most common trap).",
|
|
82
|
+
"Do NOT drive an exotic/luxury class assuming card coverage applies — check the card's exclusions.",
|
|
83
|
+
"Do NOT skip the pre-rental walkaround. Photos prevent disputes.",
|
|
84
|
+
"Do NOT lie about who's driving — adding a driver costs $0-$15/day and matters for insurance.",
|
|
85
|
+
"Do NOT use the rental for prohibited activities (off-road, ride-sharing, towing) — voids both rental and card coverage."
|
|
86
|
+
],
|
|
87
|
+
"success_signals": [
|
|
88
|
+
"Agent prints the agreement with no add-ons and the original daily rate.",
|
|
89
|
+
"Walkaround done and photographed without rush.",
|
|
90
|
+
"Equivalent or better car offered at the original rate when overbooked.",
|
|
91
|
+
"Final receipt at return matches the agreement with no surprise charges."
|
|
92
|
+
],
|
|
93
|
+
"failure_signals": [
|
|
94
|
+
"Agent insists you 'must' take CDW (false in the US absent specific exclusions).",
|
|
95
|
+
"FPO is added despite your decline.",
|
|
96
|
+
"Daily rate at counter is higher than the reservation rate without explanation.",
|
|
97
|
+
"Car has unmarked damage and agent refuses to mark it."
|
|
98
|
+
],
|
|
99
|
+
"exit_strategy": {
|
|
100
|
+
"on_success": "Drive off with the agreement saved and photos timestamped. Refuel within 10 minutes of return and keep the receipt.",
|
|
101
|
+
"on_failure": "Pay under protest, finalize the agreement, and dispute the unauthorized add-ons with the credit-card issuer using your initialed decline boxes as evidence.",
|
|
102
|
+
"follow_ups": [
|
|
103
|
+
"On return, photograph the car again with the fuel needle and odometer.",
|
|
104
|
+
"If charged for damage you didn't cause, file a card dispute within 60 days with your photos.",
|
|
105
|
+
"If the rental was for a corporate trip, submit the receipt promptly — many corp T&E systems reject if uploaded >30 days late."
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"required_user_info": [
|
|
109
|
+
"Reservation confirmation number",
|
|
110
|
+
"Pickup location and date",
|
|
111
|
+
"Credit card used to book + whether its CDW is PRIMARY or SECONDARY",
|
|
112
|
+
"Whether the rental is in a country requiring local CDW",
|
|
113
|
+
"Loyalty number"
|
|
114
|
+
],
|
|
115
|
+
"contributed_by": "travel-rebooking agent (v0.9.87 community drop)"
|
|
116
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "rental-scam-report",
|
|
3
|
+
"name": "Report and Protect Against a Rental or Tenant-Screening Scam",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"category": "real-estate",
|
|
6
|
+
"tags": [
|
|
7
|
+
"scam",
|
|
8
|
+
"fraud",
|
|
9
|
+
"tenant-screening",
|
|
10
|
+
"rental-fraud",
|
|
11
|
+
"ftc",
|
|
12
|
+
"phone-call",
|
|
13
|
+
"housing-tenancy"
|
|
14
|
+
],
|
|
15
|
+
"description": "Call the right institutions — listing platform, bank / payment provider, local police non-emergency, FTC and state attorney general consumer-fraud line — after a suspected rental or tenant-screening scam, to limit the financial damage, freeze fraudulent payments, and preserve evidence for recovery and prosecution.",
|
|
16
|
+
"disclaimer": "Not legal advice. Habitability + early-termination skills are scripted to PRESERVE legal posture (request things in writing, refuse verbal-only assurances) — but the operator must consult a tenant attorney for actual rights determination. Scam recovery is time-sensitive — payment reversals often have 24–72 hour windows.",
|
|
17
|
+
"context": {
|
|
18
|
+
"when_to_use": "User has either: (a) sent money / ID / sensitive documents to a 'landlord' or 'property manager' who now seems suspicious, (b) discovered a listing they applied to is a re-posted scam, (c) been pressured to pay before viewing and paid, (d) been charged repeated 'screening fees' on different listings that all turn out fake, or (e) suspects identity theft from a fake rental application. Time is critical — payment reversals depend on speed.",
|
|
19
|
+
"preconditions": [
|
|
20
|
+
"User can describe what was paid, when, by what method, and to whom.",
|
|
21
|
+
"User has saved copies of the listing, the messages with the scammer, and any documents sent.",
|
|
22
|
+
"User has access to their bank / card account / wire-transfer service.",
|
|
23
|
+
"User has NOT continued sending money or signing further documents."
|
|
24
|
+
],
|
|
25
|
+
"estimated_call_duration_minutes": 30
|
|
26
|
+
},
|
|
27
|
+
"principles": [
|
|
28
|
+
"Stop the bleed first. Before any reporting, lock the payment method (freeze card, halt wire, dispute transaction). Reporting waits — payment reversal does not.",
|
|
29
|
+
"Order matters: bank/card FIRST (fastest reversal window), platform SECOND (takedown + paper trail), police THIRD (case number for everything else), regulators FOURTH (FTC, state AG, IC3).",
|
|
30
|
+
"Wire transfers and gift-card payments are the hardest to reverse and are scammer favorites. Zelle / Cash App / Venmo to a stranger has very limited recovery. Credit cards have the strongest chargeback rights.",
|
|
31
|
+
"If ID, SSN, or full bank account info was shared, the user has an identity-theft exposure — that is its own track (credit freezes at all three bureaus, IRS PIN, IdentityTheft.gov report).",
|
|
32
|
+
"Do not contact the scammer to 'try to get it back.' That gives them another chance to extract money or threaten the user. Cut comms, route through institutions.",
|
|
33
|
+
"Save everything before any account is closed. Screenshot the listing, the messages, the email headers — once you report, platforms often delete the listing within hours."
|
|
34
|
+
],
|
|
35
|
+
"phrases": {
|
|
36
|
+
"opener_bank": "Hi, I need to report a fraudulent transaction and request a chargeback / payment reversal. On [date], I sent [amount] via [method] to [recipient]. I now believe this was a rental scam. Can you freeze the recipient and start a dispute?",
|
|
37
|
+
"opener_platform": "Hi, I'm calling to report a fraudulent listing on your platform — listing [URL or ID]. I applied / paid based on the listing and the 'landlord' shows the hallmarks of a scam. Can you take the listing down and flag the account?",
|
|
38
|
+
"opener_police": "Hi, I'm calling the non-emergency line to file a report on a rental scam. I'd like a case number — I need it for my bank dispute and for the FTC.",
|
|
39
|
+
"opener_ftc": "Hi, I'd like to file a consumer-fraud report at reportfraud.ftc.gov / by phone. I have a rental scam — [one-sentence summary]. Police case number is [#].",
|
|
40
|
+
"ask_for_chargeback_window": "What's the deadline for filing this dispute, and what evidence do you need from me?",
|
|
41
|
+
"ask_for_freeze_recipient": "Can you flag the recipient account so other victims' funds aren't routed there?",
|
|
42
|
+
"ask_about_identity_exposure": "I also shared [ID document / SSN / bank info] with the scammer. What identity-theft protection should I activate immediately?",
|
|
43
|
+
"request_case_number": "Can I get a case / claim / report number for my records? I'll need it for cross-reporting to other agencies.",
|
|
44
|
+
"decline_scammer_contact": "I'm not going to contact the scammer directly — I'll let your team handle outreach. Re-engaging could compromise the investigation.",
|
|
45
|
+
"graceful_close": "Thank you. To confirm: case / dispute number [#], next step [action], expected resolution timeline [days]. I'll watch for your follow-up."
|
|
46
|
+
},
|
|
47
|
+
"tactics": [
|
|
48
|
+
{
|
|
49
|
+
"name": "Freeze the payment first",
|
|
50
|
+
"when": "Always step 1.",
|
|
51
|
+
"script": "Use `opener_bank`. Call the bank, card issuer, or wire service IMMEDIATELY. For wires especially, the recall window is often hours, not days. Don't make any other call until this one is in motion.",
|
|
52
|
+
"priority": 1
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "Take down the listing",
|
|
56
|
+
"when": "After payment is frozen.",
|
|
57
|
+
"script": "Use `opener_platform`. Get the listing removed and the scammer's account suspended so others aren't victimised. Save the listing URL / screenshots BEFORE it's taken down.",
|
|
58
|
+
"priority": 2
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"name": "File a police report for the case number",
|
|
62
|
+
"when": "Same day if possible.",
|
|
63
|
+
"script": "Use `opener_police`. A case number unlocks bank disputes, FTC follow-up, and identity-theft remediation. Even if police won't actively investigate small-dollar scams, the case number itself is the unlock.",
|
|
64
|
+
"priority": 3
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "Activate identity-theft protections IF ID/SSN/bank info was shared",
|
|
68
|
+
"when": "Any sensitive personal data was sent to the scammer.",
|
|
69
|
+
"script": "Use `ask_about_identity_exposure`. Steps: credit freeze at all three bureaus, IdentityTheft.gov report, IRS Identity Protection PIN if SSN exposed, bank account number change if account routing was sent.",
|
|
70
|
+
"priority": 4
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"name": "Cross-report to regulators",
|
|
74
|
+
"when": "After case number obtained.",
|
|
75
|
+
"script": "Use `opener_ftc`. Report to FTC (reportfraud.ftc.gov), state attorney general's consumer-fraud unit, and IC3 (ic3.gov) if any internet-based payment was involved. These don't get money back directly but feed the broader investigation.",
|
|
76
|
+
"priority": 5
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "Cut off the scammer",
|
|
80
|
+
"when": "Always.",
|
|
81
|
+
"script": "Use `decline_scammer_contact`. Block their phone, email, and platform accounts. Do not respond to threats or 'we'll work it out' messages — those are continuation-of-fraud attempts."
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"boundaries": [
|
|
85
|
+
"Do NOT contact the scammer to 'work it out' — every interaction risks more money or more personal information.",
|
|
86
|
+
"Do NOT pay any 'release fee,' 'tax,' or 'transfer fee' someone calls to demand on the recovery side — that's a recovery scam layered on the rental scam.",
|
|
87
|
+
"Do NOT share new account or card info on inbound calls claiming to be your bank fraud department — call back on the number from the back of the card.",
|
|
88
|
+
"Do NOT delete the original messages with the scammer — those are evidence. Screenshot first, archive, then block.",
|
|
89
|
+
"Do NOT post the scammer's contact info publicly — it can compromise active investigations and create defamation exposure if you have the wrong party."
|
|
90
|
+
],
|
|
91
|
+
"success_signals": [
|
|
92
|
+
"Bank initiates chargeback or wire recall within the dispute window.",
|
|
93
|
+
"Listing taken down by the platform.",
|
|
94
|
+
"Police case number issued same day.",
|
|
95
|
+
"Credit freezes active at all three bureaus if ID was exposed.",
|
|
96
|
+
"FTC / state AG / IC3 reports filed and confirmation numbers captured."
|
|
97
|
+
],
|
|
98
|
+
"failure_signals": [
|
|
99
|
+
"Payment method has no reversal option (gift cards, crypto, some peer-to-peer apps after holding period).",
|
|
100
|
+
"Platform claims they have no responsibility for off-platform payment (still report — the listing takedown matters).",
|
|
101
|
+
"Police refuse to issue a case number for a 'civil matter' — ask for a supervisor or file online if available.",
|
|
102
|
+
"Bank dispute denied due to authorised-payment carve-out — escalate to the bank's fraud-investigation team, file an FTC complaint, and consult a consumer-protection attorney."
|
|
103
|
+
],
|
|
104
|
+
"exit_strategy": {
|
|
105
|
+
"on_success": "All four channels in motion: bank dispute filed, listing taken down, police case number, FTC / state AG / IC3 reports submitted. Identity-theft protections activated if applicable. Operator emails a recap with all case numbers.",
|
|
106
|
+
"on_failure": "Even when recovery fails, document everything for tax-loss purposes and to build the FTC case file that may eventually feed enforcement. Consider a consumer-protection attorney consult for amounts above $1,000.",
|
|
107
|
+
"follow_ups": [
|
|
108
|
+
"Save all messages, listing screenshots, payment receipts, ID copies sent, email headers — in a single folder, unedited.",
|
|
109
|
+
"Calendar a 7-day check-in on the bank dispute.",
|
|
110
|
+
"If ID was exposed: pull credit reports from all three bureaus at the 30-day mark and again at 90 days.",
|
|
111
|
+
"Tell trusted contacts the scammer may impersonate you (especially if email or social was compromised).",
|
|
112
|
+
"If applying to a new rental after the scam, use known-reputable platforms and never pay before viewing."
|
|
113
|
+
]
|
|
114
|
+
},
|
|
115
|
+
"required_user_info": [
|
|
116
|
+
"What was paid: amount, date, method, recipient (account name / number / handle)",
|
|
117
|
+
"What was shared: ID documents, SSN, bank account, employer info",
|
|
118
|
+
"Listing platform, URL, and any saved screenshots",
|
|
119
|
+
"Communication record with the scammer (emails, texts, app messages)",
|
|
120
|
+
"Bank / card issuer name and account access ready",
|
|
121
|
+
"Whether the user has already contacted the scammer post-suspicion (and what was said)"
|
|
122
|
+
],
|
|
123
|
+
"contributed_by": "housing-tenancy agent (v0.9.87 community drop)",
|
|
124
|
+
"updated_at": "2026-05-20T06:09:47Z"
|
|
125
|
+
}
|