ctlr+r #01: Toon, LLM CLIs
Hey there, I’m starting a new habit that I hope to stick with and that will help you: ctrl+r : a weekly recall from the terminal of my mind.
Each issue includes:
🧠 something I’ve been thinking about
🛠 something I’ve built, tried, or found useful
📚 something I read or watched, with my take
No fluff. Just highlights from my dev brain across data, AI, tools, and indie building.
🧠 Toon vs JSON
Last week, the TypeScript SDK for TOON hit 1.0 : a compact, token-efficient alternative to JSON designed for LLM prompts.
In short, instead of passing data to your LLM API through JSON like this:
{
“users”: [
{ “id”: 1, “name”: “Alice”, “role”: “admin” },
{ “id”: 2, “name”: “Bob”, “role”: “user” },
{ “id”: 3, “name”: “Charlie”, “role”: “admin” }
]
}You would use Toon encoding like this:
users[3]{id,name,role}:
1,Alice,admin
2,Bob,user
3,Charlie,adminAs you can see:
JSON repeats keys (”id”, “name”, “role”) every row → more tokens, more cost.
TOON declares keys once, then streams values row-by-row → significantly fewer tokens, especially for large arrays (10k+ rows).
It’s interesting to see that while Toon has been around for a month, the trigger for the hype was the 1.0 release of the TypeScript SDK. Indeed, most LLM API calls today are made through TypeScript. Meanwhile, the Python SDK is still very early and under heavy development, so Python-heavy data pipelines aren’t adopting it yet.
🛠 Multi-LLM CLI
Like many of us, I’ve been juggling between LLM tools (be it UIs or CLIs like Claude Code or Gemini CLI), and it always presents the same challenges: finding past chats and having a common repository for prompts instead of framework-specific ones.
I’ve looked at multiple projects, and aichat comes closest to what I need. It’s missing a built-in TUI (I opened an issue here and prototyped one) to easily search for past conversations, but it has a decent REPL, and I’m already using it for some workflows.
# proofreader is prompt+model definition, here fixing grammar and lightweight edit
aichat --role %proofreader% “here’s my sentence that could use some grammar edits”You can then, of course, wrap it up in a bash alias command or even a Raycast keybinding so you just write and get the result back.
Other projects worth mentioning I checked:
📚 What I Read / Watched
TUIs Are Perfect for LLM Chat Code to the Moon built shore for the same problem I faced and explained above. Aside from the project itself, he made really good points, and his channel consistently produces high-quality software videos (especially if you like Rust!).
90-percent Armin Ronacher (creator of Flask and popular developer in the OSS world) shares his experience with coding assistants, their strengths, and where they fail. Great insights from a truly experienced developer!
Python 3.14 will change the way you parallelise code There’s a lot of noise about 3.14 and free threading that could significantly speed up Python for some tasks. However, as the author said: “I don’t think data pipelines will benefit from no-GIL though. Most don’t have latency requirements (rather throughput), and we already offload the bulk of CPU work.”
How Not to Partition Data in S3 (And What to Do Instead) Interesting points highlighting that it’s generally more efficient to use
datetimefor partitioning large datasets on S3 (e.g.,my_path/dt=2026-11-01=events.parquet) versus the common knowledge around Hive partitioning (my_path/year=2026/month=11/day=01).Gemini released their fully managed RAG service also known as the “File Search Tool.” This represents a next level of abstraction, making it interesting not to have to manage vector databases and other components. It will probably be useful for many use cases, as it’s often overkill to set up such infrastructure for the value it provides.
Hope you all had a great week. I’m still figuring out what to program for my new NuPhy Air75 V3 keyboard keycaps... any suggestions???



