My AI setup, part 1: how I got here

Published 2026-07-14

tag(s): #overblown-minor-annoyances #failures #programming

How I feel about all this

I still dislike LLMs and I think they are a disgrace.
That said, I've been using the thing more at work - a combination of curiosity and trying to get more of the "I told you so" moments.
I also have the feeling that if I don't use them, I am going to be out of a job soon. That's 100% just how I feel, no one suggested or implied this, to be fair. The AI craze at my employer takes more the form of enthusiasm, not obligation. I just have a hard time feeling enthusiastic. 🤷

And honestly, sometimes the results are great, which I kinda hate. But it can be useful, what can I say.
Others times the results are completely off. And I feel validated!

The worst part when the results are off, is that if I don't realize (because I am not that familiar with that portion of our systems, or because they are off in subtle enough ways) then I end up spending more time in a wild goose chase.
But the tokens are spent, and eventually the job is turned in, so yay? Everyone happy? Except for {insert here all the problems with LLMs regarding natural resources usage, intellectual property, etc. etc. etc. etc.}

Things I tried so far

I've come a long way from what I described in this post at work.
A while after posting that, I changed my setup to use the excellent gptel and gptel-agent packages. I was meaning to write a post about it. I highly recommend it, even though now I use a completely different approach.

I figured I would get a personal Copilot subscription, to run experiments at home that I wouldn't feel comfortable running on the company's dime. Things like asking the thing to review my Emacs dotfiles, or see how it handles Common Lisp.
Turns out, at least until then (a couple months back) you couldn't have more than one Copilot subscription tied to a GitHub username. Since sebasmonia was associated to the enterprise subscription of my employer, I ended up asking a few friends and reading online what were the alternatives, and landed on Claude.

That's the story of how I switched to using LLM CLI tools. First Claude Code for my at home stuff, a few days later to Copilot CLI at work, in both cases via the awesome agent-shell Emacs package.

Even if I was running these CLI inside Emacs[1], the way they modify files meant that I was constantly either reverting buffers that I had open, or fishing for the files that the tool modified in its run.
No matter how much people say that they don't write code anymore, I keep finding that I want to review what it outputs. Little stylistic tweaks, simplifying a block, adding a comment about why we make a change.

And the truth is, I don't regularly write that much code! I am working in a pretty big codebase, with a mixture of styles and things that evolved over the years in multiple directions, some of them unplanned. More or less the average for any company that's been around for over 20 years. :)
I mostly add little things here and there, if anything, being minimal about the changes is better. It is very important to know where to add or remove something, and understanding its consequences.

The beginning: yak shaving and mincp

When running Copilot CLI in Windows, it wouldn't run any external tools because the version of Powershell in my laptop was too old. For reasons to this day unknown, the Powershell installer for a newer version failed. This was really annoying.
I also I couldn't get Copilot CLI to use the GNU native executables I have installed in my work laptop, but this blocker gave me an idea...

So, Copilot won't use ls or grep on Windows, but what if it used dired or project-find-regexp in Emacs? Then it won't matter which OS I am using.
So I asked it how to achieve this, it suggested an MCP server, and thus mincp was born. A "minimal MCP", that exposed buffer finding and editing tools.

Eventually we got the option to use Claude at work too, and honestly Claude Code is way more mature than Copilot CLI (or so it was then), so I swiched to Claude everywhere.
As time went by, this minimal MCP kept growing in features as I got Claude Code to run more tasks using Emacs-specific tools, avoiding the annoyances I experienced with reverted buffers and not having the same context the agent is using.

In part 2...

In part 2 I will go over a more details of my current setup, including a few things that didn't quite work in early versions.

I have the impressions that I built something that adjusts to my preferences, if only to make these tools "fun" to use. Even if my setup is very personal, there's value in documenting the journey.

Footnotes
  1. A good thing, of course. 😌

Share your thoughts (via email)

Back to top

Back to homepage