A yellow CAT with a big claw approaches a big blue box.

I started the day playing around with MCP’s for Claude Desktop. I found one for Emacs and one called Basic Memory.

emacs-mcp-server sends evals to your running Emacs instance via emacsclient. It’s sort of fascinating to watch in progress. Not the fastest thing on the planet, but it was a jolt the first time I turned my attention to something else and came back to realize it had created a new function and added it to my configuration.

It was an even bigger jolt when I went after the problem of Emacs not being properly associated with a number of file types on my Mac:

It wrote a script to use duti to make all the associations, and when I reported that they weren’t “sticking” it decided to write a systemd agent to periodically re-run its duti script. I didn’t realize that had happened until macOS sent me a notification that something new was running on my behalf.

I … am not sure what to make of this, entirely.

Well … a little I am.

For about an hour, this seemed very cool. I haven’t used Claude much, but with it able to pilot Emacs we got through a small reimplementation of org-capture for Markdown files that built on a few recent projects and allows for simple templating. Neat. Pretty complex. Functioned correctly.

Unlike previous sessions with an LLM doing this kind of thing, though, it was a little dulling and weird to have Claude and Emacs quietly collaborating to write all this. It got me to a fundamental understanding of how I am feeling about LLM-driven development:

I have one eye cocked over my shoulder because most people I know personally do not like to admit they perceive any utility with these things, often seem uncomfortable mentioning it if they do use them, and seem to feel a small, almost ritualized compulsion to shit on them even if they do perceive utility. There are any number of reasons someone might be there with these things. They activate a whole catalog of anxieties and irritations.

But I am able to make things with these tools I couldn’t make without 10x the time and effort, and the things I make let me get to what I want to do and spend less time doing the toil of supporting activities more quickly.

I guess I think that they are labor saving devices with the same caveats riding lawnmowers are. Like, I’m glad to be free of the scythe, but also once I have a new John Deer riding mower I understand I can’t sort of tie the steering wheel to a 15 degree angle, put a brick on the accelerator, and get back to my nap.

And I understand they’re not people replacing. Even with the modest projects I work on I can see that.

But one thing I’ve come to enjoy is the part that involves playing to their weaknesses:

I can’t sit back and say “make this thing for me that does some broad directive.”

I have to ask for something simple, then slowly layer things on, redirecting from blind alleys or unwanted optimizations. It’s a creative, iterative process and I enjoy it. It’s a way to engage with a problem I’d like to solve that involves patiently working through the steps of the problem, having second thoughts, realizing that I want things that are at odds with each other, sometimes realizing there’s a much more elegant way to do something. The things I end up with are maybe not the best in terms of their coding craft, but they’re tailored to my mental model.

So Claude and Emacs working in concert removed a small amount of friction I actually welcome in the process of looking at code, moving it over, reading it before evaluating it in a buffer, etc. I didn’t care for that. It was alienating.

The other MCP server I mentioned, Basic Memory, sits in Claude Desktop and remembers what you tell it by writing Markdown notes in a directory. They’re basic “Markdown-n-YAML” files with light structure. You can have the usual sort of “talk to a robot” conversation for a while, then prompt it to make a note, and it does. Then those notes become part of its persistent context. There are db-backed services to do this at scale, but it suits me very much to have something like this. It’s super transparent and introspectable.

In addition to notes, you can record “Observations” in your Markdown files. Observations are simple lines of Markdown, as these examples from the project repo:

- [method] Pour over extracts more floral notes than French press
- [tip] Grind size should be medium-fine for pour over #brewing
- [preference] Ethiopian beans have bright, fruity flavors (especially from Yirgacheffe)
- [fact] Lighter roasts generally contain more caffeine than dark roasts
- [experiment] Tried 1:15 coffee-to-water ratio with good results
- [resource] James Hoffman's V60 technique on YouTube is excellent
- [question] Does water temperature affect extraction of different compounds differently?
- [note] My favorite local shop uses a 30-second bloom time

These become grist for the MCP, alongside your notes, creating a sort of synthesizing glue, and it persists from session to session.

It is still far too early to say much about this. I’ve got a few ideas about how to use it in some work and personal contexts, but haven’t paused long enough to think of a workflow to facilitate those ideas.

( Note: Updated this post to narrow down a little more finely the kinds of social responses to LLMs and their use I have noticed.)