Blog
Notes from building agentty.
Release notes, performance deep dives, and design notes — written the same way the code is: measured, specific, no fluff.
Implementing the Agent Client Protocol in C++: a codec is a fold, not a ritual
I wrote the first C++ implementation of the Agent Client Protocol — the thing that lets Zed drive Claude Code and Gemini. Most JSON-RPC libraries hand you stringly-typed blobs and a prayer. acp-cpp treats the protocol as what it actually is: a closed algebra of inductive types, where serialization is a fold over the type's shape and the compiler proves you handled every case. Here's the whole design, from the unit type up to the deferred-reply trick that keeps a single-reader transport from deadlocking mid-turn.
The C++ design of a terminal coding agent: a state machine that can't lie to you
An LLM agent loop looks like the worst possible fit for C++ — async, streaming, full of stringly-typed events. It is actually one of the best. Here's how agentty turns the whole app into a closed sum of events, a single std::visit reducer, and a permission matrix the compiler proves correct over all 48 cells.
I rewrote the Claude terminal agent in C++ and it cold-starts 50× faster
claude-code spends ~150 ms and 222 MB of Node just to print its version. agentty is one 9.6 MB binary that does it in ~3 ms. Here's exactly where the time goes, why a coding agent is a surprisingly good fit for C++26, and the numbers you can reproduce yourself.
agentty 0.2.0 — run your terminal agent inside Zed
0.2.0 teaches agentty to speak the Agent Client Protocol, so the same engine that drives the TUI now drives a first-class agent panel inside Zed — streaming text, inline diffs, native permission prompts, and session reload.