State of Agentic Engineering: Building a CLI for turbopuffer

2–3 minutes

For HevMind, I’ve been helping clients get their agents up and running with various search systems — from Elastic to Algolia to rip grep. The right search system for a given use case is the one they already have access to (another post, perhaps). But for clients that need to build a search service at scale, with custom ranking across many large datasets, there’s a clear price-performance leader. Do the napkin math.

turbopuffer. (Yes, really, that’s the name.)

I started working with turbopuffer extensively in the last six months, and over that time I’ve had many moments of surprise and delight. That said, the dashboards weren’t one of them. I know price-performance is the main feature here, but whenever I put my data in turbopuffer I was always left with this feeling of — now what? It was a pain to browse the data, and when I needed to redo my schema and start over, no practical utils existed.

So back in October I coded up my first version of tpuff in TypeScript. I was feeling positive about the Node ecosystem at the time, and it was a good excuse to try Xenova embedding models (they were… fine). I wired up a basic namespace browser and deletion of data. My needs for browsing data and managing namespaces were sporadic, so it sat idle for a while. When I came back to it I had the realization that having it in TypeScript was impractical — everybody uses Python-based models for embeddings. This was also when I first started wrapping Claude code and built a Ralph — coding loop. I spent time putting in better test coverage on my TypeScript version, and then decided to use it to try out my first agentic coding task.

Total success! I floored me and scared me a bit. You needed a loop to get this out of the harnesses back then (~December 2025). I’ve been piling on features since — like scans (which are pretty handy, by the way) — and finally found myself once again cursing Python and wanting a TUI. Well, it’s now April 2026 and I was pretty confident a standard harness (Claude Code) could one-shot a Go port.

It did not. But barely. I put very little effort into prompting the go rewrite — it stopped and I had to ask it to keep going. I used Opus 4.6 with extended thinking and a 1M context window, but it completed in roughly 200–300k tokens, I suspect.

This isn’t slop, though. I spent the next few days building out a TUI experience that I think fills some real gaps when working with Turbopuffer — enough so that I’ve decided to call it 1.0.

I hope you like it.
https://github.com/hev/tpuff