case study // agent engineering // 2026
Ken is my fork of an open-source agent framework. On top of it I built the desktop app, the operations layer and the skills library — then left 34 bots running unattended. Every number below is read out of the thing itself: the git history, the cost ledger, the cron database. Including the ones that keep me honest.
Ken is a fork of Hermes Agent by Nous Research, not a framework I wrote. The upstream repo has 22,536 commits from dozens of contributors; mine is 298 of them. Publishing a page that implied otherwise would be a lie that a single click on the repo would expose.
What those 298 commits actually are, by how often I touched the file:
| area | what I did to it |
|---|---|
WORKLOG.md | 20 dated entries, 446 lines — the build written down as it happened |
ken_cli/ | web server, CLI surface, banner and branding |
apps/desktop/ | desktop app work, including English + Chinese i18n and its type layer |
agent/ | the conversation loop and the auxiliary-model client |
34 bots organised into 4 fleets with a coordinator each, assigned to six tiers of model — free tiers and a locally hosted model first, paid capacity last. The dashboard reads a real ledger rather than a mock-up, which is the only reason these numbers exist.
| tier | bots | what it is |
|---|---|---|
| flash | 17 | cheap hosted models for high-volume work |
| pro | 4 | stronger models, reserved for reasoning |
| local | 4 | qwen3:8b on my own GPU — zero marginal cost |
| groq / openrouter | 4 | fallback providers when a tier rate-limits |
| unassigned | 5 | on-demand agents that pick a tier at call time |
# measured, not estimated — from the fleet cost ledger 25 recorded calls $0.003721 total 20,046 prompt tokens / 5,363 completion tokens 7 distinct models, incl. qwen3:8b running locally
The cost headline only means something because of the routing rule behind it: try the free and local tiers first, escalate to paid providers only when a job needs more than they can give. That rule is also why the ledger is small — most of the fleet's work never reaches a metered API at all.
A fleet that only runs when you watch it is a demo. The operations layer is what I built on top:
The part I underestimated: 203 SKILL.md files across 32 categories, plus 2 plugins. Each one is a task I got wrong once and wrote down, so the next run starts from the fix. That library is also why sessions behave consistently — the agent loads the relevant skill before touching a task instead of rediscovering the sharp edges.
Not "I wrote an agent framework." It is: I forked one, shipped 298 commits of real changes into it, built and ran an operations layer that survives unattended, and instrumented it well enough to quote its own spend to six decimal places. The interesting engineering isn't the chatbot — it's everything around it that makes the chatbot something you can leave running while you sleep.