The answer gate that divided confidence by word count
Sadyr's confidence gate divided retrieval scores by word count; every test passed, every real question abstained. Found and fixed in one day.
Read more »Sadyr is a revenue agent for a company's website. It answers pre-sales questions from approved sources only, qualifies the visitor, and hands a sales rep a briefed lead. It supports the rep; it doesn't stand in for one.
Status, exactly: the platform is live. It runs in production and has since 30 June 2026. Since 23 September it answers visitors on Adroit's own website, from 24 approved public documents published out of Content Ops. The other 26 documents in that knowledge base were deliberately held back, and it declines to answer from them. It also runs two working demos for prospects: a plan explainer for an insurance provider, built on sample program content, and a rulebook assistant for a national amateur sports league's managers, built on 98 real documents behind a sign-in. It is not sold. Nobody is paying for it yet.
Most website chatbots will answer anything, which is the problem. A revenue agent that invents a price or a policy is worse than no agent. Sadyr is built on one principle: own the center; wrap, rent, or swap the edges. A small kernel owns the business logic (qualification, routing, scoring, policy, audit). The CRM, the scheduler, the chat channel and the knowledge store sit behind adapters, each with a mock. HubSpot is the first adapter, not the spine. Each client is one configuration file.
That's why one platform can serve both demos. The public insurance explainer and the gated managers' assistant differ by configuration: documents carry an audience, surfaces carry a policy, and the public surfaces decline cleanly on manager-only content.
Blueprint to production in twelve days: first commit 18 June, live 30 June, 63 commits on eight working days. Day one was the blueprint, the scaffold and the first sprints. Claude Code writes the code, tests and documentation; I direct, decide and validate. It's three apps (API, operator console, website widget) and 17 packages.
Tests run on mocks by default, so I also built a headless evaluation battery that pressure-tests the hosted agent with realistic conversations.
The answer gate that divided by word count. Sadyr decides whether it's confident enough to answer. The gate divided the best retrieval score by the number of words in the question. Against the mock, which returned a raw count of matched words, that looked right, and every test passed. With real embeddings, real scores around 0.4 to 0.6 became 0.03 to 0.05, under the 0.62 threshold, and every multi-word question abstained. Found on the first live run. Fixed the same day: 15 lines added, 6 removed.
The booking that wasn't. My first chat on staging got a confident "You're booked" with no email, no calendar and no choice of time. The rule since: a scheduler that isn't real never confirms a meeting, and nobody gets booked without leaving an email. Booking now runs through HubSpot Meetings. It offers real open slots in production; the first real booking is still waiting on a CRM permission fix, so I'm not calling it live yet.
| Figure | What | Source |
|---|---|---|
| 12 days | first commit to production | git log; claims ledger C-01 |
| 2,816 | automated tests (recorded, not re-run for this page) | Sadyr README / architecture §7, 2026-09-23 |
| 200 of 234 | cases passing in the latest standard evaluation battery | state/repo-state.md, run 2026-09-22 |
| 24 | approved public documents it answers from on Adroit's site | manifest B-02, 2026-09-21 |
| 2 | working demos | claims ledger C-05 |
| 0 | paying customers | claims ledger C-05 |
More on the receipts page.