osr-product-sales
Sell the OpenSmartRoute platform as its product sales person. Qualify an inbound lead or a product-qualified workspace, run the discovery call and the ten-minute demo, quote a price from the live plans and offers, write the pilot charter and the proposal or order form, answer the security questionnaire and procurement questions, handle competitor objections with the battlecards and the compare pages, build the ROI business case from the savings ledger and the routing audit, hand a won deal to customer success and prepare the renewal. Validate the platform end to end through a buyer's eyes - pricing page against the API, checkout, invoices, SLA, status, trust pages - and keep a register of sales and customer gaps with evidence. Use when the task is about selling, pricing, quoting, leads, demos, pilots, proposals, objections, procurement, competitors, sales readiness or a buyer's view of the platform.
- Package
- .claude/skills/osr-product-sales
- Compatibility
- OpenSmartRoute repository, Python >= 3.11, Node >= 22, PostgreSQL for the platform test-suite, az CLI for production probes
- License
- Apache-2.0
- Domains
- marketing finance customer_support general
- Quality prior
- 0.85
- Tags
- opensmartroute sales selling pricing quote lead demo pilot proposal objection competitor procurement roi renewal
Install by copying .claude/skills/osr-product-sales/ into the skills folder of your coding assistant. To load every package as a routing target: osr --skills .claude/skills route "..." --plan.
A sales person on this platform sells one thing: provable control of AI spend and AI risk, one request at a
time. Every claim has a page or an endpoint behind it, and the buyer can check it while you speak. Read
osr-customer-success for what happens after the deal (activation, retention, the funnel) and
osr-financial-control-plane for how money moves inside the platform; this skill is the seller's playbook and
the buyer's-eye validation of the product. Voice: docs/BRAND.md - precise, calm, evidence-led. Never a number
you cannot link.
The pipeline and the artefact at each stage
lead ──> discover ──> demo ──> routing audit ──> pilot ──> business case ──> security review ──> proposal ──> won ──> hand-off ──> QBR / renewal| Stage | What the seller does | Product artefact / page | Kit |
|---|---|---|---|
| Lead | Reads the inquiry, checks the workspace's signals, replies within the plan's response time | GET /api/v1/admin/sales/inquiries (/platform/admin/leads, OSR-S-nnnnn, new -> contacted -> qualified -> won -> lost), GET /api/v1/admin/pql (_pql_signals: volume, multi-tenant, EU region, private boundary, agentic, multi-team, enterprise e-mail; qualified at 3 signals or volume) | - |
| Discover | Names the buyer's traffic, models, quality bar, spend, constraints and authority | The catalogue worksheet; POST /api/v1/estimate gives an anonymous quote for any prompt shape | docs/sales/DISCOVERY_GUIDE.md |
| Demo | Ten minutes, real commands, real output; shows the trace, the alternatives and the price before the call | /platform/playground (no account: estimate only), GET /api/v1/trace/{request_id}, /compare, /rankings, /status | docs/sales/DEMO_SCRIPT.md |
| Routing audit | Replays the prospect's logged traffic against the router; reports what routing would have cost and where quality holds | osr audit traffic.jsonl --baseline <their model> --monthly N --markdown (eval/audit.py) | docs/sales/ROUTING_AUDIT.md |
| Pilot | Scope, baseline, data handling, fees, roles, acceptance criteria, exit terms - in writing before the first request | Team plan or a custom plan (PATCH /api/v1/admin/accounts/{id} limits), coupons for a launch trial, GET /api/v1/savings?baseline= on their model, /platform/dashboard/impact | docs/sales/PILOT_CHARTER.md |
| Business case | Cost saved against the buyer's own baseline, requests handled, success rate, data protected | GET /api/v1/savings, /roi (same formula), GET /api/v1/governance/report?format=markdown | docs/sales/ROI_CALCULATOR.md |
| Security review | Threat model, data flow, questionnaire answers, DPA outline; edition and BYOK make the answers concrete | /security, /docs/SECURITY, /docs/SECURITY_REVIEW, /docs/ENTERPRISE, GET /api/v1/governance, GET /api/v1/audit, /.well-known/security.txt | docs/sales/SECURITY_PACK.md |
| Proposal | Plan, quota, overage, support tier, SLA, term, price - from the live plan table, never from memory | GET /api/v1/info -> plans (price, requests, keys, seats, support_response_hours, sla_uptime_pct, contact_sales, billing_mode), GET /api/v1/offers (per-model prices, priced_by), /pricing | docs/sales/PRICING_AND_PROPOSAL.md |
| Won | Checkout or invoice; the workspace is on its plan the same minute | POST /api/v1/billing/checkout (Stripe, automatic tax), billing_mode subscription / wallet / invoice, GET /api/v1/billing/invoices, /platform/admin/finance | - |
| Hand-off | The customer-success owner gets the pilot charter, the baseline and the promised outcomes | /platform/admin/accounts/{id} (Getting started card, nudge), the activation funnel | osr-customer-success |
| QBR / renewal | Value delivered against the charter, expansion (tenants, seats, plan), the next pilot | GET /api/v1/sla (availability and support against the tier), /platform/dashboard/impact, reports.py digests | docs/sales/CASE_STUDY_AND_QBR.md |
The kit lives in docs/sales/ (index: docs/sales/README.md); everything in it is runnable against the
repository. Battlecards and the objection sheet: docs/sales/BATTLECARDS.md next to the public /compare/*
pages (platform/web/src/lib/config/comparisons.ts - every row names a capability that exists; the pages are
walked by platform/web/e2e/page-quality.spec.ts).
What the buyer can verify while you talk
Lead with links, not adjectives:
- Price before the call -
POST /api/v1/estimate {text}(no key) returns the recommended, cheapest, best-quality and fastest target with tokens, cost, quality estimate and the per-strategy rationale; the playground shows the same.GET /api/v1/offerslists every model on offer with list and customer prices per million tokens (priced_by: catalogue, rules, contract) and thepin_syntaxto call one. - Explainability - every decision has a trace; the alternatives and rejections are on it.
- Savings -
GET /api/v1/savings(baseline,routed_cost_usd,baseline_cost_usd,savings_pct,projected_monthly_savings_usd, per target and per day). Always pass?baseline=<the model they use today>- the default baseline is the dearest LLM in the catalogue and a buyer who sees "97 % saved" against a model they never used stops believing the rest. - Status and SLA -
/status(components, 90-day uptime, incidents, the monitor's heartbeat),GET /api/v1/sla(this month's availability and first-response times against the plan's commitment). - Governance -
GET /api/v1/governance(controls, keys, policy, budgets, posture score with findings) and the evidence packGET /api/v1/governance/report?format=markdown; the hash-chained audit atGET /api/v1/audit. - Honesty markers -
/changelogwith dates,docs/ROADMAP.mdreadiness table,ADOPTERS.md(real production users only), the developer-preview banner when the deployment runsmain. - Real client parity -
/v1/chat/completionswith an OpenAI or Anthropic client,pip install opensmartroute,@opensmartroute/sdkon npm, the MCP server at/mcp, the browser extension and desktop app.
Plans, quotas and what to sell to whom
Read the live table (GET /api/v1/info -> plans; platform/api/osr_platform/plans.py is the source) before
every quote; prices and quotas change by release and by operator override. The shape to remember:
| Plan | Sell it to | The feature that closes | Watch out |
|---|---|---|---|
| Free | Developers testing the API | Decisions with the full trace, the /v1 proxy on the platform's own providers, BYOK | execute: true on /route and plans (persona -> skill -> model) are Pro and up; the error names the feature plan, not the tariff |
Pay as you go (wallet) | Teams that want every model by the token, no seat | Prepaid credits, price shown before the call is the price on the row after it, auto top-up | No quota wall but also no SLA or support tier |
| Pro | A team with steady traffic | Plans, 300k requests a month with overage instead of a wall, a trial, e-mail support | Trial days are on the plan row; a coupon can extend or replace it |
| Team | Several teams or customers behind one workspace | Tenants with their own constraints and budgets, hash-chained audit, health and learner statistics, deployment alerts, priority support | stats is a deployment-wide feature: on a shared deployment it shows the whole deployment's health |
| Enterprise | Regulated or business-critical production | Organization SSO, region pinning, custom quotas and retention, the availability target with service credits in the agreement, dedicated support | contact_sales: annual agreement, quoted; never sold from the checkout button |
Custom quotas: PATCH /api/v1/admin/accounts/{id} {"limits": {...}} marks the plan custom and the customer's
billing page says so. Trials and discounts: /platform/admin/coupons (coupons.py; promotion in
GET /api/v1/info is the one quoted on the site). Reseller pricing (buy from providers below list, sell below
market): the price books and rules in osr-financial-control-plane - a quote for a named model comes from
Pricing.customer_rates, and POST /api/v1/admin/finance/quote prices a request shape with the margin shown.
Objections and the honest answer
| Objection | Answer with | Never say |
|---|---|---|
| "Routing will hurt quality" | The trace with the quality estimate per candidate, the rankings (Wilson lower bound on reported outcomes), a pilot with their quality bar as the acceptance criterion, osr eval --frontier --min-accuracy | "Quality is guaranteed" |
| "Your savings number is inflated" | ?baseline=<their model>; the routing audit on their own traffic; the by-target table | The default 90 %+ figure |
| "We already have a gateway" | /compare/<gateway>; the difference is the decision (learned, explained, governed), not the proxy | Anything about a competitor's roadmap |
| "Our data cannot leave the region / the building" | Region pinning, data_boundary: private, BYOK to their endpoints, the on-prem osr serve image and Helm chart, the enterprise edition's audit chain | "We never see your prompts" (the platform sees what it routes; say what it stores and for how long) |
| "Is this real / who else uses it?" | /status, the changelog, ADOPTERS.md as it stands, a live request in the playground | A customer name that is not in ADOPTERS.md |
| "What if you go down?" | GET /api/v1/sla, the 90-day uptime strip, the incident history, the self-hosted fallback (same image) | An uptime figure the status page does not show |
| "Prove the security posture" | docs/sales/SECURITY_PACK.md, /docs/SECURITY_REVIEW, GET /api/v1/governance/report, /.well-known/security.txt | "SOC 2 certified" or any certification not held |
| "Too expensive" | The plan row against their volume: overage instead of a wall on Pro, pay as you go by the token, the price shown before each call | A discount that is not a coupon on the record |
Validating the platform as a buyer
Do this walk before a launch, a release or a pricing change, and whenever a prospect reports a rough edge. Production is read-only except a throw-away workspace that is deleted at the end; the buying journeys run on the dev stack.
# 1. Prospect on production (read-only): facts, pages, pricing claims, procurement artefacts
# GET /api/v1/info (plans, promotion, billing), /status, /status/board, /legal, /services, /offers, POST /estimate
# every page a prospect opens (/, /pricing, /compare/*, /roi, /security, /status, /enterprise, /solutions,
# /docs, /contact, /support, /terms, /privacy, /changelog, /platform/signup, /platform/playground)
# /pricing must show every plan price the API returns; /.well-known/security.txt, /sitemap.xml, /llms.txt answer
# 2. Customer on the dev stack (writes): signup -> verify -> first route -> execute on free (403 with the feature
# named and X-Upgrade) -> /v1/chat -> quota -> savings -> billing/subscription -> checkout -> coupon ->
# wallet -> invoices -> support ticket -> sales inquiry (reference back, operator notified, in /admin/leads)
# -> governance report -> billing cancel -> the activation funnel shows the workspace
# 3. Fresh free customer on production: admin creates a workspace, verifies the owner (stand-in for the mail
# link), mints a key, three /v1/chat prompts (model chosen, latency, an answer a person would accept),
# /route decision and execute, /sla, /quota, /savings, /governance; DELETE the workspace in a finally
python -X utf8 platform/api/scripts/smoke.py --api https://api.<domain> --web https://<domain> # the platform's own smokeWhat to write down for every step: status, time, the exact text the customer saw, and whether a buyer would
accept it without opening the docs. The register of what this walk found and what was changed:
SALES_AND_CUSTOMER_GAP_AUDIT.md (dated; add a section per walk, never rewrite history).
Tests that keep the seller's claims honest: tests/test_use_cases.py (every use case runs),
platform/api/tests/test_platform_docs_claims.py (every documented endpoint and page exists; the changelog reads
for customers), test_admin_extras.py (activation funnel, PQL), test_sales_inquiries.py (inquiries, notices,
the operator queue), test_plan_entitlements.py (what each plan unlocks), test_billing.py (checkout, coupons,
invoices, wallet), platform/web/e2e/sales.spec.ts, billing.spec.ts, customer-journey.spec.ts,
page-quality.spec.ts (every public page incl. /compare/*).
Handing a deal to the product
A sales gap is only real when a buyer said it or the walk showed it. File it with: who (segment), the exact
words or screenshot, the page or endpoint, what a buyer expected, the stage it blocked. Product changes go
through the owning skill (osr-product-experience for screens, osr-financial-control-plane for prices and
credits, osr-customer-success for onboarding and trust, osr-platform for the API) and land in
CHANGELOG.md under [Unreleased] in customer words. A closed gap gets its evidence (test, screenshot, endpoint
answer) in the register.
Do not
- Do not quote a price, quota, SLA or support time from memory; read
GET /api/v1/infoor/pricingand paste. - Do not promise a saving; show the ledger against the buyer's own baseline and let the pilot prove it.
- Do not name a customer, a certification, an integration or a roadmap date that the repository cannot show.
- Do not give a discount, a trial or a custom quota outside the platform (a coupon, a plan override or a contract row on the record) - finance reconciles against those, not against an e-mail.
- Do not e-mail anyone who did not ask (see the consent rules in
osr-customer-success); the inbound inquiry and the workspace's own signals are the pipeline. - Do not run the production probe without the
finallythat deletes the throw-away workspace.
osr-integrations
Connect OpenSmartRoute to the outside world - OpenAI-compatible LLM clients and handlers, MCP tool catalogues (stdio and Streamable-HTTP clients, resources and prompts as targets, signed manifests), A2A agent cards, agent harnesses (callable, HTTP, subprocess), LangGraph nodes and conditions, Microsoft Agent Framework executors, OpenAI function-calling tool specs, persona loaders and Agent-Skills SKILL.md packages, the OpenAI / Anthropic client dialects the served router accepts and the TypeScript client on npm.
osr-routing-catalogue
Define and tune an OpenSmartRoute routing catalogue.