Customer Support Answer
Answers customer questions instantly from your own help docs.
Connect your own AI key and ask in plain language.
- Latency (measured)
- 7.49 µs
- Throughput (measured)
- 133k/sec
- Price
- $600
Measured on win32-x64 (ZachsNitro · 13th Gen Intel(R) Core(TM) i5-13420H · 12 threads) · 2026-10-18 · 50,000 iterations · bot bench - task scheduler, 12 workers · per-task p50 2 µs, p95 4 µs, p99 4 µs
About this bot
Customer Support Agent - C++ Engine (Offline + Online) Not a Python wrapper. Native C++ binary that runs as bin/bot.exe on Windows / Linux / macOS with no install, no API keys, no data leaving your machine. What it does: Takes your Knowledge Base - help articles, FAQs, past resolved tickets - and scores every incoming ticket against the entire KB in one pass. Returns best matching article, confidence score, and a ready-to-send suggested reply. If confidence is below your threshold, it escalates to human instead of hallucinating. Why it's different: - Speed: Millions of words/sec, not API seconds. One worker per core, 5 retries, durable journal. - Deterministic: It doesn't make up answers. It finds your real article and quotes it. Auditable, consistent. - Private: 100% offline by default. Your KB stays yours. No per-ticket OpenAI bill. - Flexible: Keep it offline as exe, or put it online. I wire it as webhook/API for Zendesk, Intercom, or any helpdesk - file drop, webhook, or full connector. What you get: - bin/bot.exe --score --reply --bench --self-test - config/kb.json, intents.json, sla.json - data/kb.csv + sample_tickets.csv - wasm/ offline browser workspace to test tickets - metrics.json - tickets/sec, words read, mean latency ms Works for SaaS support, e-commerce, helpdesk triage, internal KB. Choose your integration: offline exe for privacy, or online webhook/API - whatever you need, built to fit your stack. Built on the same C++ architecture as all 8 BotStudio9 engines.
Code preview
first 100 lines of modules/support/module.cpp - c++201// Customer Support Answer — customer support module2//3// The pipeline:4//5// support.intake normalise the ticket, score it, decide who answers6// support.answer reply from the knowledge base, or from the LLM7// support.escalate hand to a human, with the reason recorded8//9// Each stage is a task, so each retries independently and survives a restart.10//11// The decision in intake is the product:12//13// score >= confidence_threshold answer from the knowledge base14// score < threshold, LLM on ask the LLM, with the best KB entries as15// context; on ANY failure fall back to the16// knowledge base, and escalate if even that17// is below the floor18// score < threshold, LLM off escalate19//20// Nothing here returns a low-scoring canned answer as though it were a21// confident one, and nothing here invents an answer when the model is down.22 23#include <algorithm>24#include <atomic>25#include <cstdint>26#include <filesystem>27#include <fstream>28#include <mutex>29#include <string>30#include <vector>31 32#include "bs9/agent.hpp"33#include "bs9/http.hpp"34#include "bs9/json.hpp"35#include "bs9/llm.hpp"36#include "bs9/log.hpp"37#include "bs9/metrics.hpp"38#include "bs9/scheduler.hpp"39 40#include "support.hpp"41 42namespace fs = std::filesystem;43 44namespace {45 46constexpr const char* kIntake = "support.intake";47constexpr const char* kAnswer = "support.answer";48constexpr const char* kEscalate = "support.escalate";49constexpr const char* kScope = "support";50 51struct Runtime {52 support::Settings settings;53 support::KnowledgeBase kb;54 bs9::LlmConfig llm;55 std::string kb_error;56 std::string llm_error;57 std::string transcript_path;58 std::mutex transcript_mutex;59};60 61Runtime& runtime() {62 static Runtime instance;63 return instance;64}65 66std::uint64_t minutes_to_us(int minutes) {67 return static_cast<std::uint64_t>(minutes) * 60ull * 1'000'000ull;68}69 70std::string next_id(const char* prefix) {71 static std::atomic<std::uint64_t> counter{0};72 return std::string(prefix) + "-" + std::to_string(bs9::now_micros()) + "-" +73 std::to_string(counter.fetch_add(1));74}75 76/// One JSONL line per resolved or escalated ticket.77///78/// The ticket body is omitted unless the buyer opts in79/// (`transcript_include_body`). A transcript gets copied into spreadsheets and80/// support reviews far more readily than a ticket store does, and the body is81/// the field most likely to carry personal data.82void append_transcript(const bs9::Json& record) {83 Runtime& rt = runtime();84 if (rt.transcript_path.empty()) return;85 const std::lock_guard<std::mutex> lock(rt.transcript_mutex);86 std::ofstream out(rt.transcript_path, std::ios::app);87 if (!out.good()) {88 bs9::log_warn(kScope, "could not append to transcript " + rt.transcript_path);89 return;90 }91 out << record.serialise(0) << "\n";92}93 94bs9::Json ticket_summary(const support::Ticket& ticket) {95 bs9::Json out{bs9::JsonObject{}};96 out.set("ticket_id", ticket.id);97 out.set("customer", ticket.customer);98 out.set("channel", ticket.channel);99 out.set("subject", ticket.subject);100 // Length, not content, unless explicitly enabled.This is the real file from the archive you receive, with your listing's metadata already substituted.
Licence options
Every licence ships the same source. What differs is how far you may deploy it and whether you may put your own brand on it.
Personal is for one person on one deployment, not for business use. Commercial costs more because it covers your whole organisation on up to 3 deployments, including services you sell to your own clients: the same code, with the rights a business needs.
This listing is $600 — Pro build tier. The price decides what is in the archive; the licence marked below decides what you may do with it, and is the one that ships in your LICENSE.txt.
| Licence | Price | Deployments | White-label | Included |
|---|---|---|---|---|
Personal - Single deployment This listing | $600 one-time | 1 | No |
|
Commercial - Team use | $1,200 one-time | 3 | No |
|
Agency Bundle - 5 Client Pack | $5,000 one-time (all bots · contact sales) Email to buy | 5 | No |
|
Agency Unlimited ($7500 one-time) | $7,500 one-time (all bots · contact sales) Email to buy | Unlimited | No |
|
Enterprise / White-label (Custom) | CustomRequest a quote | Unlimited | Yes |
|
Personal and Commercial are sold here. Agency and Enterprise cover every bot in the catalogue and are arranged by email: use the button on that row and we reply with a payment link. Questions first? Contact us.
Enterprise is quoted rather than listed. The licence that ships in your archive's LICENSE.txt is the one marked above. Licence prices are what each grant is worth; checkout charges this listing's price, once.
One-time, compared with subscriptions
| Option | Price | Source |
|---|---|---|
| This engine | $600 Personal / $1,200 Commercial, once | this page |
| Zendesk Suite Team | $55/agent/mo | voiceflow.com |
Prices looked up 2026-09-27; check the source before relying on them. A hosted service gives you a web interface and its own support, which this does not; this gives you the source, offline use and no renewal.
Questions before you buy
+Can I try it before I buy?
+Does it run on Mac or Linux?
+Can my team use it?
+Are updates included?
+What if it does not work?
What's inside
Support desk engine: 35KB of source (682 lines of logic, 4 files), plus the shared agent core. Everything below is counted from that code — nothing on this list comes from the listing text.
bot kbList the knowledge base the answers come frombot ticketAnswer or escalate one ticket and show the transcriptbot transcriptsRecent answered and escalated tickets
3 task handler(s), each with retries and a durable journal: support.answer (internal), support.escalate (internal), support.intake (internal)
- Tests
- 7 checks across 1 suite(s), all passing (run 2026-09-27)
- Output
- readable text · JSON
- Speed
- Measured: 7.49 µs mean / 133k/sec — win32-x64, 2026-10-18, 50,000 iterations, bot bench - task scheduler, 12 workers. The live test below runs on this site's server, which has fewer cores than the build machine, so its timings are lower than this.
What's inside the zip
The download is the real program and its full source, yours to keep. The terminal further down this page is a separate, read-only demo copy of the same engine: it keeps nothing and cannot write files.
support-desk-engine/ (the START files are one folder up, beside App/; everything below is in App/) START_HERE.bat / start_here.command / start_here.sh opens the workspace in your browser workspace/ the workspace page, with the engine and a terminal inside it START_TERMINAL.bat / .command / .sh the program itself, in a terminal window COMMANDS.txt every command, with examples README.md build, run, test, licence notes bin/bot.exe (or bot-macos / bot-linux) the program, ready to run src/, include/ ... the full C++ source you own LICENSE.txt what your licence allows
How it works
- 1Download the zip
Unzip it anywhere. No installer, no account.
- 2Double-click START_HERE
Or run the commands below from a terminal in that folder.
- 3Read the output
It lists the knowledge base the answers come from: your config/knowledge-base.json, or the starter one that ships with the program until you write yours. Offline: nothing is sent anywhere.
All commands
Click one to put it in the live terminal below, or to copy it for the download. The full list, with every option, is COMMANDS.txt in the zip and bot --help.
- What it can answer: every entry in the knowledge base, with its pattern count and priority
- Answered from the starter knowledge base (intent human_request), with the transcript line it wrote
- Answered from the starter knowledge base (intent what_we_do) - with the placeholder text until you write your own
- No knowledge-base match: escalated to a human, not guessed at
- The answered and escalated tickets so far
Live output
Captured from a real run of bot ticket --body="Can I talk to a human?" on linux-x64 (the Linux x64 prebuilt program, prebuilt/customer-support-agent/bot-linux, run from a scratch copy of templates/cpp-agent), 2026-10-05. Unedited.
- state answered
- intent human_request
- confidence 0.95
- source kb
Full output
$ bot ticket --body="Can I talk to a human?" 2026-10-05T14:48:09.952Z INFO [scheduler] started with 1 worker(s), 3 handler(s) 2026-10-05T14:48:09.952Z INFO [support] ticket T-1791211689952 answered from kb ticket T-1791211689952 (email) state answered intent human_request confidence 0.95 source kb Of course. Replace this with how a customer reaches a person at your business: a phone number, an email address or your opening hours.
What the price buys
- ✓ The full C++ source - you own your copy
- ✓ A single ready-to-run program, no dependencies
- ✓ Pay once and keep it
- ✓ Runs offline, on your machine; your numbers never leave it
One person, one deployment, personal use. The same program and source.
One organisation, any number of its staff, up to 3 deployments, commercial use - including services you sell. No source resale, no white-label.
Both licences ship the identical archive; the difference is what you may do with it.
Ask in plain language, or speak your question.
Type or speak a request. The engine answers from its own expert brief, using the AI key you connect (Gemini, OpenAI or Anthropic). Your key stays on your computer. Subscribers also get the desktop app.
- Connect your own AI key once, on the Connect AI tab.
- The engine never shows its code or file names.
- Works in your browser, and as the desktop app with a subscription.
TEST IT - LIVE RUN
Runs the Support desk engine this listing ships - compiled C++, on our server, right now. What you see is its real output and real timing. This server has fewer cores than the machine the listed figures were measured on, so expect lower numbers here. config/knowledge-base.json is the starter knowledge base shipped with the product. Type any ticket text you like.
Pick a command below or type one, then press Enter. One command per run; this is a read-only demo copy of the engine, and nothing you type is kept.
- The six intents it can answer
- Answered from the knowledge base
- Matched to the refund policy
- No confident match: escalated, not guessed
