crod.me

Festina lente — and build something that lasts.


Using the tool without becoming the tool

How I keep AI small in a suckless workflow

AI is never going to be suckless. The models are huge, opaque, networked, and proprietary. The companies behind them go against almost everything the suckless philosophy stands for, which is small, simple code you can actually read in an afternoon. And yet I use these tools every day. So this is me trying to make sense of that.

If you have not run into suckless before, it is a project that ships things like a window manager (dwm), a terminal (st), and a launcher (dmenu). The whole point of them is that they are tiny. dwm is around 2,000 lines of C. You configure it by editing the source and compiling it again. There is no plugin system, because the source is the plugin system. The idea is not that small is good for its own sake. It is that you can hold the entire thing in your head. You can read it, you can change it, and nothing about it is a mystery to you, because you can see every line.

AI is the exact opposite of that. A frontier model is hundreds of billions of numbers that no human has ever read or understood. Even the people who trained it cannot tell you why it said any particular thing. Whatever AI is, it is not transparent.

So a lot of people in the Linux and free software circles I read land on a simple position. AI is the worst kind of black box, it is closed, it needs the network, it is monetized, and on top of all that it makes confident garbage. So avoid it. And honestly, they are not wrong about the tool. The big AI products really are that. Cursor, Copilot autocomplete, the IDE agents that bury your screen in suggestions, I do not want any of that near how I work. They go against every preference I have.

Where I think that position goes wrong is the conclusion. “The tool is bad, so don’t use it” assumes you have to use it the way the companies want you to. You don’t. They want you inside their app, watching their suggestions. You do not have to be there.

The more interesting question to me is whether the way you use AI can be suckless, even if the AI itself never will be. I think it can. It runs in the terminal, not some IDE plugin or browser tab. Claude Code is the one I use. It only does something when I ask it to, there is no autocomplete sitting there guessing what I am typing. I read whatever it gives me, run it through my own eyes and my own tools, and throw it out if it is wrong. It reads and writes the same files I already control. In that shape it is just another thing in the terminal. I give it something, I read what comes back, I keep the good part.

People throw the term vibe coding around like it is one thing, but there are two very different versions of it. One is passive. You let the model write whatever it wants, you do not really read it, you do not understand it, and you ship it because it ran. That is the part the suckless instinct is right to reject. It puts the AI between you and the problem and rewards you for not thinking. The other version is the one I actually do. I let it write the code, yes, but I am opinionated about it. I tell it exactly what I want, I read everything it gives back, I throw out what is wrong, and I have to actually understand what I am building or the output is just confident nonsense. Maybe that still makes me a vibe coder. If it does, I am a picky one. The typing is the part I handed off. The thinking and the judgment stayed with me. That is the whole difference, and it is the same difference as any unix tool. find does not think for you, awk does not think for you, and neither does this. Getting it right is still on you.

Screenshot of the claude command running in a terminal window
claude running in my terminal.

In practice this is pretty boring, which is the point. I am on Void Linux running dwm, and claude runs in a terminal scoped to whatever project I am in. I am not sitting there hand-typing the code next to it. I direct it, it writes, and then I read what it did and keep it, change it, or throw it out. I drop into nvim when I want to read a file myself or fix something by hand. No plugin, no extension, no IDE, it is the same unix I have run for years with one more tool I can point at a problem. The work that moved off my plate is the typing. The work that did not is deciding what to build, reading what comes back, and being the one responsible when it is wrong.

The scoping is the part that actually keeps it small, and it is almost embarrassingly low tech. Every project I work on has one plain text file sitting at the top of it that tells the tool what it needs to know about that project and nothing else. No database, no dashboard, no settings screen, just a markdown file I wrote by hand and can read in a couple of minutes. When I sit down to work, it reads that file and whatever code is actually in front of it, and that is the whole world as far as it is concerned. It does not see the rest of the projects sitting next to it. I decide what goes in that file, so I decide what it knows.

That is the same trick the rest of my setup runs on. The config is text I can edit, the pieces are small, and I can keep the whole thing in my head. The projects that have something in common share one file at the top that holds whatever is true everywhere, and the rest just point at it instead of repeating it. Around the edges I have a few little shell scripts that run when the tool goes to change a file, so it stays inside the lines I drew. None of it is clever. It is plain files and small scripts boxing a huge tool into a shape I can actually live with. The model is gigantic and I cannot do anything about that. The part I own is the context I hand it and the box I keep it in, and that part is small, on purpose.

I am not going to pretend this is actually suckless. It is not very close. The tool is still a giant black box on someone else’s computer, and I am still depending on a network and a company’s pricing. None of that is great. It is a trade I decided to make for what I get out of it, while keeping it boxed into the smallest corner of my workflow I can. The trick is to keep the tool small in how you use it even though the tool itself is enormous. Direct it, do not get directed by it. Check what it gives you. Do not let it creep into places it has no business being. AI is not going to become suckless. But you can. That part is up to you.