Agentic Experience: 1,324 calls to my CLI, 15.9% error rate

My CLI’s most frequent user isn’t me lql is a Rust CLI for managing Linear issues. I wrote it because none of the existing alternatives worked for my actual use case: an AI agent that manages issues autonomously. Why I had to write my own CLI Linear’s MCP was the first attempt. The idea is elegant: an MCP server that exposes Linear’s API directly to the agent. In practice, it was slow, unstable, and the agent had to build GraphQL queries from scratch on every call. Each call was an opportunity to invent a field that doesn’t exist. I uninstalled it after two weeks. ...

April 29, 2026 · Fernando

Your CLI Has a New User—and It’s Not Human

You ask your AI copilot to capture a window. The copilot writes peek app "Xcode". The tool looks for a window owned by Xcode exactly. It doesn’t find one because the process is named Xcode-16.3. The tool responds with Error: application not found. The copilot, a large language model (LLM) with the memory span of a goldfish, then tries peek app "Xcode-16.3". This time it works—but it’s wasted a conversational turn, input tokens, output tokens, and the patience of the person paying the bill. ...

April 7, 2026 · Fernando

The Best Thing That's Happened to Python in Decades Is Written in Rust

TL;DR: Python tooling has been a fragmented, slow mess for years. The revolution didn’t come from within the ecosystem: it came from Rust. uv, Ruff and ty — all written in Rust by Astral — have replaced half a dozen tools and are between 10x and 100x faster. Looks like the Cult of Ferris had a point after all. Have you ever tried to explain to someone how to install dependencies in Python? ...

March 26, 2026 · Fernando

150 Lines of Apologies Removed

TL;DR: My AI agent had a 246-line instruction file for managing issues in Linear. 150 of those lines were workarounds: hardcoded UUIDs, curl fallbacks, notes like “the CLI doesn’t support X.” I didn’t rewrite them — I built a tool that made them unnecessary. Now those 150 lines are gone. Have you ever written a set of instructions so long that its sheer length proves something is fundamentally wrong? I’m not talking about legitimate documentation. I mean those files that start with “use tool X” and then spend 80% of the text explaining when tool X doesn’t work and what to do instead. Instructions that are, effectively, a list of apologies for the tool you should have built in the first place. ...

March 26, 2026 · Fernando

Madness Driven Design: Don Quixote, Sancho Panza, and Your AI Copilot

TL;DR: An LLM is like Don Quijote—you can’t cure his madness, it’s stochastic by nature. The solution isn’t to fix the madman but to assign him a deterministic Sancho Panza as a sidekick. MDD consists of two layers: first, you study the errors it makes to design tools that absorb those mistakes, and then you let it loose with those tools to verify you’ve closed any gaps. Design for madness, not against it. ...

March 26, 2026 · Fernando

Why My CLI Output Isn't XML (And How I Ended Up Reinventing TOON Without Knowing It)

TL;DR: When your primary consumer is an LLM, XML and JSON waste tokens by repeating structure in every element. A compact positional format reduces consumption by 50%. Turns out this idea already had a name: TOON (Token-Oriented Object Notation). Same selective pressure — expensive tokens and repeated keys — same solution. Anthropic uses XML for everything. Their system prompts are wrapped in <instructions>, their examples in <example>, their tools in <function>. If you work with Claude, you live surrounded by tags. ...

March 26, 2026 · Fernando

Adversarial Programming: When Your AI Copilot Invents APIs

TL;DR: Your AI will invent API fields that sound perfect but don’t exist. The solution isn’t hoping it gets it right: download the real schema before writing code, capture real responses as fixtures, and separate fetch from processing so you can test without the network. Adversarial programming: code assuming your copilot lies. Have you ever written code against an API where everything compiled, tests passed, the logic made sense… and when you connected to the real API, nothing worked? ...

March 26, 2026 · Fernando

Linear Agent Isn’t What You Need. Your Agent Was Already in the Terminal

TL;DR: Linear just launched an integrated AI agent. Cool, but it doesn’t address the problem developers face when working with coding agents in the terminal. What we actually need isn’t another AI agent but a rock-solid CLI that our existing agents can use seamlessly. And if we’re going to build one, it should be in Rust — which is why lql exists: a CLI for Linear, purpose-built for agents. Yesterday, Linear launched their AI agent. It’s an integrated chatbot that gets your roadmap, your issues, and even your code. You can chat with it on Slack, mention it in a comment, and it’ll synthesize context, suggest actions, and even create issues for you. ...

March 25, 2026 · Fernando

RustyClaw: I'm rewriting an AI agent in Rust (because the meme demands it)

“You know what’s great about Rust? It doesn’t let you compile crappy code. You know what sucks? Everything you write at the beginning is crappy code.” — Mr. Krabs, probably What’s better than an AI agent? An AI agent rewritten in Rust. If you’ve spent more than five minutes on the internet, you’re aware of the meme. It doesn’t matter what project—text editor, DNS server, BMI calculator. Someone will inevitably comment, “you should rewrite it in Rust.” It’s the Rewrite It In Rust—RIIR for friends—and it’s as unavoidable as gravity. ...

February 24, 2026 · Fernando

git-cliff: the changelog that writes itself (almost)

107 commits. Impeccable conventional commits from day one. Feat, fix, refactor, chore — everything perfectly labeled. And the CHANGELOG? Empty. Non-existent. A file that “I’ll write tomorrow” for two months straight. If this sounds familiar, you’re not alone. Writing a changelog by hand is an Olympic-level pain in the ass. It’s not that it’s difficult — it’s just tedious, repetitive, and there’s always something more urgent to do. And that’s exactly why git-cliff exists. ...

February 22, 2026 · Fernando