{
  "schema": "leumas.docs.page/1",
  "id": "adapter:domain/objection-handler",
  "slug": "adapters/domain/objection-handler",
  "kind": "capabilities",
  "bucket": "package",
  "title": "objection-handler",
  "name": "Objection Handler",
  "eyebrow": null,
  "chip": null,
  "summary": "Sales-objection handling and rebuttal pack for reps, SDRs, and founders closing deals: categorize a prospect objection into price, timing, trust, authority, or need; respond with 2-3 professionally...",
  "keywords": [
    "objection-handler",
    "sales-objection",
    "rebuttal",
    "sdrs",
    "feel-felt-found",
    "tactic",
    "reframe",
    "opportunity-focused"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# objection-handler\n\nSales-objection handling & rebuttal adapter pack for reps, SDRs, and founders. Classifies a prospect\nobjection, returns framed rebuttals from proven sales frameworks, serves a per-category tactic\nplaybook, reframes negatives into positives, and generates feel-felt-found empathy responses.\n\nIntelligent microservice: every tool has a deterministic playbook/template core that runs fully\n**offline**. `respond` and `reframe` additionally try an optional LLM to personalize the wording and\n**silently fall back** to the templates when no model is reachable (`mode: 'heuristic' | 'llm'`).\n\n## The five objection categories\n\n`price` · `timing` · `trust` · `authority` · `need` — each with curated psychology, tactics,\nframeworks, and anti-patterns in `data/playbook.json`.\n\n## Tools\n\n| Tool | In → Out |\n|---|---|\n| `categorize` | `{ objection }` → `{ category, confidence, matchedSignals, ranking, psychology }` |\n| `respond` | `{ objection, category?, context? }` → 2-3 framed rebuttals (auto-detects category) (+ optional LLM rewrite) |\n| `playbook` | `{ category }` → psychology + tactics + frameworks + what to avoid (omit `category` for the index) |\n| `reframe` | `{ statement }` → positive, opportunity-focused angle (+ optional LLM reframe) |\n| `feelFeltFound` | `{ objection, context? }` → classic feel / felt / found empathy response |\n\n## Usage\n\n```js\nimport pack from './index.js';\n\npack.adapters.categorize({ objection: \"It's way too expensive for us right now\" });\n// → { category: 'price', confidence: 0.7, matchedSignals: ['expensive', 'too much'? ...], ... }\n\nawait pack.adapters.respond({\n  objection: 'We need to think about it',\n  context: { product: 'Acme CRM', valueProps: ['faster follow-up', 'higher win rate'] },\n});\n// → { mode: 'heuristic', category: 'timing', responses: [ { framework, text }, ... ], tips: [...] }\n\npack.adapters.playbook({ category: 'trust' });\n// → { psychology, tactics: [...], frameworks: [...], avoid: [...] }\n\npack.adapters.feelFeltFound({ objection: 'I already have a solution' });\n// → { feel, felt, found, combined }\n```\n\n## Classification\n\nDeterministic keyword/phrase scoring over a curated sales-objection lexicon (multi-word phrases\nweighted higher; ties broken by category priority). An unclassifiable objection defaults to `need`\n(a fit/diagnostic probe) with `confidence: 0`.\n\n## DRY boundaries\n\n- Sales-conversation intelligence only (objection taxonomy + rebuttal frameworks + playbook data).\n  Generic tokenizing / sentiment belongs to `nlp` — the classifier here is a small curated matcher.\n- Complements `proposal-builder` (pre-sale documents) and any CRM deal flow.\n- No cross-pack imports except `../_shared/llm.js`. Pure ESM, Node built-ins, zero npm deps.\n",
  "source": {
    "path": "shared/engines/adapters/domain/objection-handler/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 2996,
    "hash": "64e900e243866e521db0f692aa212d5aac61d2f7"
  },
  "urls": {
    "html": "/p/adapters/domain/objection-handler",
    "json": "/docs/adapters/domain/objection-handler.json",
    "md": "/docs/adapters/domain/objection-handler.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
