Changelog.

What we’re shipping. Updated as releases go out.

Shipped

Pipeline tools — bulk actions, CSV import, search, manual add, Apollo enrichment

Big push to make the pipeline a real product surface.

  • **Manual "Add candidate"** in the dashboard — paste a LinkedIn URL + name, Sonny fills the rest. No extension required.
  • **CSV import** — bring 500 rows from Bullhorn / Vincere / a Google Sheet in one click. Header aliases for linkedin, name, email etc. so most CSVs paste in clean.
  • **Bulk actions** — multi-select rows for stage move or delete. Floating action bar with confirm-on-delete.
  • **Free-text search** across name, company, title, email, role. Combines with stage filters.
  • **Apollo enrichment** — every + Pipeline insert kicks off an automatic Apollo lookup for email + phone. pending → enriched status badges on rows. Manual re-enrich button on failed / no_match rows. Hourly self-healing retry cron for stale rows.
  • **Pipeline → Outreach** — once a row has an email, click "Outreach" to jump to the Outreach tab pre-filled.
  • **Webhooks** — three new event types: sonny.pipeline.candidate_added / candidate_enriched / candidate_stage_changed. Wire to Zapier or Make to mirror the pipeline into your CRM.
  • **Pipeline CSV export** — back up or share your pipeline. Respects the active stage filter.
Shipped

Sonny on every LinkedIn profile — Chrome extension v0.4.0

The Chrome extension is feature-complete.

  • **Score** — click "Sonny" on a profile for an instant fit score.
  • **Headhunt** — Pro+ tier sends a PECR/GDPR-compliant consent SMS, then auto-calls on Y reply.
  • **+ Pipeline** — one-click drop into your agency's pipeline. Idempotent, never duplicates.
  • **Find similar** — Apollo-powered similar candidates from the toolbar popup.
  • **Privacy + permissions** documented at /sonny/extension/privacy. User-initiated only, read-only DOM, minimal payload.
  • New "Extension" tab in the dashboard with install instructions + API key prefix.

Brain ships an "Ask Sonny" mode in the test widget — runs your retrieval through Claude Sonnet 4.6 so you can see exactly what Sonny would say with your uploaded docs.

Shipped

Sonny v2 launch — phases 1 through 9

Sonny v2 ships across nine phases: dashboard tab, the Brain (RAG), email outreach, credits + Stripe, Chrome extension, SMS-consent + Vapi headhunt, autopilot, affiliate program, marketing site overhaul. Read the docs at /sonny/docs and the pricing at /sonny/pricing.

Improvement

Brain test widget polish

New empty state when zero matches above the threshold. Latency badge. Copy button on the system-prompt addendum. Threshold legend (≥0.80 strong / 0.70-0.80 / 0.60-0.70).

Improvement

Autopilot run grouping

Autopilot history now groups actions by run_id so you can see which actions belonged to the same scheduled run.

Shipped

Email outreach observability

/api/internal/sonny/outreach/sends lists recent outbound emails. Outreach tab shows the last 20 sends with delivery status. Failures emit sonny.outreach.email_failed.

Shipped

Per-tier burst rate limits

Free / Pro / Enterprise capped at 30 / 120 / 600 RPM. 429 responses include Retry-After and a clear error message. Credits remain the primary throttle.

Shipped

Self-hosted analytics across the Sonny surface

Every meaningful event — pageviews, signups, API calls, replays, credit grants, headhunt state changes, email sends — now lands in sonny_analytics_events. Funnels are queryable end-to-end. Admins can review aggregates at /admin/sonny/insights.

Shipped

Insights dashboard, idempotency keys, key-info endpoint

Big day for observability and SDK-friendliness.

  • Public API: send Idempotency-Key to make retries safe — replays return the original response without charging credits.
  • Public API: GET /api/v1/sonny/key-info — introspect tier, balance, monthly grant, features. 0 credits.
  • Public API: every response now carries x-request-id for support correlation. Inbound IDs are honoured.
  • Dashboard: new Activity sub-tab merges API calls, emails, headhunt, autopilot into one feed.
  • Dashboard: standalone /sonny/pricing page with credit pack table.
  • API errors now include request_id in the JSON body.