BotStudio9
Customer Support Agent

Customer Support Answer

Answers customer questions instantly from your own help docs.

Open the workspace

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++20
modules/support/module.cppc++20
1// Customer Support Answer — customer support module
2//
3// The pipeline:
4//
5// support.intake normalise the ticket, score it, decide who answers
6// support.answer reply from the knowledge base, or from the LLM
7// support.escalate hand to a human, with the reason recorded
8//
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 base
14// score < threshold, LLM on ask the LLM, with the best KB entries as
15// context; on ANY failure fall back to the
16// knowledge base, and escalate if even that
17// is below the floor
18// score < threshold, LLM off escalate
19//
20// Nothing here returns a low-scoring canned answer as though it were a
21// 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 in
79/// (`transcript_include_body`). A transcript gets copied into spreadsheets and
80/// support reviews far more readily than a ticket store does, and the body is
81/// 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.

LicencePriceDeploymentsWhite-labelIncluded
Personal - Single deployment
This listing
$600 one-time1No
  • 1 person, 1 deployment
  • Personal, non-commercial use
  • No client resale
  • No white-label
Commercial - Team use
$1,200 one-time3No
  • Up to 3 deployments
  • Any number of users in one organisation
  • Commercial use, including services you sell
  • No source resale or sublicensing
  • No white-label
Agency Bundle - 5 Client Pack
$5,000 one-time
(all bots · contact sales)
Email to buy
5No
  • Up to 5 client deployments
  • Per-client keys
  • Agency use allowed
  • Email support
  • No white-label
Agency Unlimited ($7500 one-time)
$7,500 one-time
(all bots · contact sales)
Email to buy
UnlimitedNo
  • Unlimited deployments
  • Unlimited keys
  • Agency use allowed
  • Priority support
  • All future updates
  • No white-label
Enterprise / White-label (Custom)
CustomRequest a quoteUnlimitedYes
  • Everything in Agency Unlimited
  • Full white-label with your logo
  • Custom domain
  • Source code option
  • Dedicated support
  • Custom SLA

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

OptionPriceSource
This engine$600 Personal / $1,200 Commercial, oncethis page
Zendesk Suite Team$55/agent/movoiceflow.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?
Yes. The live terminal on this page runs the same engine the download ships, on our server. Paste your own numbers into it; nothing you type is kept.
+Does it run on Mac or Linux?
The download includes a ready-to-run program for Windows, Linux, macOS.
+Can my team use it?
Personal is 1 person, 1 deployment, not for business use. Commercial covers one organisation: any number of its staff, up to 3 deployments, commercial use including services you sell. Need more deployments or client use? The Agency licences in the table above are arranged by email.
+Are updates included?
You buy this version with its full source, and it keeps working without us. Personal and Commercial do not include future updates; Agency Unlimited does.
+What if it does not work?
Before you download, you can have a full refund within 14 days for any reason. After download, you are refunded if the archive does not build from its own README, a feature named on the listing is missing or broken, or the licence does not match - a fix is offered first. Full terms: refund policy.
Read from the source

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.

3 commands you can run
  • bot kbList the knowledge base the answers come from
  • bot ticketAnswer or escalate one ticket and show the transcript
  • bot 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.
Outright purchase

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

  1. 1Download the zip

    Unzip it anywhere. No installer, no account.

  2. 2Double-click START_HERE

    Or run the commands below from a terminal in that folder.

  3. 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
Personal
$600

One person, one deployment, personal use. The same program and source.

Commercial
$1,200

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.

Subscription workspace

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.
Real engine · server-side

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.

All commands →
bs9@botstudio9:~/customer-support-agent

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.

$
Commands to try - click to load, or copy
  • The six intents it can answer
  • Answered from the knowledge base
  • Matched to the refund policy
  • No confident match: escalated, not guessed