shorter corridors of less time

emacs, AI, and other people

Pretty much everything I do on my computer I do inside a program called Emacs. Emacs is first and foremost an open-source text editor. It’s largely written in a custom-built programming language called Elisp; the way that Elisp is integrated into the software makes the program highly extensible. When you’re tweaking Emacs (which you will do a lot if you use it), you are interacting directly with Elisp. Changing settings in the settings menu is just a shortcut for writing and executing Elisp.

What this means is that (a) it’s extremely customizable and (b) you can squeeze a ton of shit in there. There are a lot of packages accessible within Emacs itself that allow you to add all kinds of functionalities, depending on what you want to do with it. (Though built with programmers in mind, an extensive and intricate package called “org-mode” facilitates not only other kinds of writing but also hierarchicalized notes, todo lists, agendas, and a whole bunch of other stuff.)


Things as they were

I used the program Obsidian for about a year before switching to Emacs. It’s a great piece of software. It provides a nicely-organized environment for working with plain-text files written in Markdown, meaning that you can access your writing through whatever application you want – you’re not locked into Google Docs or Microsoft Word (or even a free program like LibreOffice).

But I never quite clicked with it. It wasn’t quite supple enough with formatting for drafting stories or novels, and I couldn’t reliably or consistently coerce my (extremely scattered) “workflow” into it.


A project beckons

I first learned about Emacs on the sociologist Kearan Healy’s blog. I was already a bit in the weeds of goofy computer stuff – I’d already switched to running Linux full-time; I was self-hosting a bunch of “cloud”-type services on an old computer – so I felt capable of tackling projects. And I prefer using open-source stuff when possible; though I don’t think it matters terribly much in their case, Obsidian is closed-source.

The main thing that was seductive to me about Emacs was the fact that it seemed like such a project. Because you can do so much with it, people get really into customizing their setups; users post and compare configuration files, borrowing and adapting snippets of text to suit their needs. (Some people claim to have been tweaking the same “init.el” files for forty years! Like a mole sauce or something.) It’s infamous for relying on a bunch of esoteric keybindings that are tricky to learn, but really fun when you’ve got them under your fingers. It was all very seductive. I resisted for a few weeks, then gave in.

I’ve learned two things about myself over the course of the last couple of years that are in slight conflict with each other. One of them is that the only way I can change my habits is by (a) figuring out what I’m already doing and (b) modifying it the absolute smallest amount. Big changes never stick. The second, however, is that when something calls to me, like this silly text editor did, it’ll take more energy to resist than it will to just give it a whirl. So I spent last winter break getting it configured.


You must change your life. Or your init.el file

It is strange and difficult to talk about without sounding hyperbolic, but Emacs, especially on the heels of the home server project, pretty much changed my life. There are a lot of basic logistical reasons this is true. Having everything I ever write (notes, emails, stories, posts) all in one place is helpful for dealing with being an unbelievably scattershot person; because it’s all in plain text, I can use version control to back everything up really well. I’m much better at checking my email now that I do it with an Emacs package called “notmuch” – it just pares the whole process down to something I can manage. Its todo and calendar functions are the first that’ve ever stuck. I’ve learned a tiny bit of Elisp, which has been a treat.

More than any of that, however, the customizability and extensibility of Emacs force you to consider what it is you want out of it. I’ve spent the last two years in graduate school for writing, meaning that I have basically lived on my laptop; figuring out the kind of environment I want my computer to be is like figuring out how to set up an office or something. How do I actually want to organize my todo list? How do I want to differentiate between longer-term projects and things I need to do today? There are a bunch of examples like this, no one of them particularly interesting, but it’s been really helpful to learn to perceive where I’m having problems and think through how to intervene.

Importantly, you’re always doing this work in dialogue with the software itself. Packages other people write are in code exactly like the kind you modify when you change the settings – like the kind that you run when you’re doing a search for something or checking your email. This lends a materiality to the program, a hard facticity, that can be immensely frustrating. (I’ve “joked” before that every single thing I tried to do while setting up failed at first. It sure felt like that!)

But, in some sense, it’s real. It’s outside of yourself. It’s something you have to work with, like clay. It requires a dialectical motion I associate with grasping a difficult concept: testing your understanding, figuring out where it failed.


The code of others

And the reality is a social one. You’re dealing with something other people have built – lots of other people. Not just those who created the program itself, but people who wrote the packages you want to install, people on Stack Exchange answering questions. Because it’s so customizable, you quickly wind up with a configuration constructed around your own particular needs and quirks, as well as the hiccups and eccentricities of your configuration and computer.

It also means that integrating the packages others have made involves some friction between their use-cases and yours. To get a little more specific, here is a very small sample of the packages written by others that I use every day:

  • Olivetti-mode: easily shrink the margins to make it a better writing environment
  • EXWM: turns Emacs into my “desktop environment,” meaning I launch programs from it and so on
  • EMMS: a music player I run from within Emacs
  • Notmuch: an email client
  • Elfeed: an RSS reader
  • Org-journal: a nicely-formatted journal
  • Magit: version control (like document historY)
  • Ebuku: bookmarks manager
  • Bluetooth: Bluetooth manager
  • Org-tracktable: wordcount tracker
  • wombag: a Wallabag (read-it-later application) client
  • a ton of visual modifications and inside baseball shit

That dialectical back-and-forth I mentioned before is perhaps most present in my experience of packages. Often I sought them out and used them because I wanted to do something they did. But others, like EMMS (the music-playing one), were totally surprising to me: they did something I had no idea I could do in Emacs. (Did I need this stuff? No. But it’s fun!) Mostly, they live in between the two. I go to a package with a use-case in mind, then have to work with something that fits my need – but obliquely. Maybe the interface looks different than I thought it would; maybe it doesn’t sort things the way I want at first. But these functionalities are the result of decisions, and interacting with them entails figuring out why they are the way they are. Often they’re the way they are for a good reason. (While the unintuitive keybinds are controversial, I have found this to be the case with them – the reasons why they’re set up like they are only makes sense once you sit with them for a while.) This whole process forces you to think through why you want it to do something in particular, and it forces you to consider that the way you want to do it might not map well onto the broader picture. I can’t count the number of times I’ve found something confusing or clunky, tried to get it to work more like I think it should – then realized, when a problem comes up, that it actually worked better the first way. There are always intelligences behind the packages, and they all know Elisp better than I do. I don’t have to do things the way they want me to – I change shit all the time! – but they do things that way for a reason.


More like artificial unintelligence imho tbh

I would describe myself as strongly anti-AI. I currently do paid work for an organization opposed to the implementation of AI (by which I mean primarily consumer-facing software based on frontier LLMs, like ChatGPT and Claude, though local models still have a lot of the same problems) in universities.

The reasons I’m opposed to this technology are myriad, but for our purposes I’ll focus on one: what psychologists and researchers are calling “cognitive deskilling.” It is far too blunt to say that AI “makes you stupider,” but there’s a lot of evidence that using it rapidly makes you worse at things in a way that exceeds your specific use-case. If you outsource writing emails to it, your writing capacity more broadly begins to decline (even if you don’t write that many emails). Studies have supported this thesis, and I’ve read more anecdotal accounts of this happening than I can count.

Though I have failed to market it successfully in the past, the sole marketable skill I have is writing. My primary creative output is writing. I write stuff like this. I value being able to do so very highly and I want to keep getting sharper. So many forces in the world act at all times to dull my capacities – to make me confused and scattered.


Vibing fast and slow

Before two days ago, I’d used AI maybe twice (not counting, like, when ChatGPT was released and I wanted to see what the deal was). The first time was to reformat a CSV file or a JSON file or something, and it didn’t work. The second time was to noodle around with (terrible fucking name) “vibe coding.”

I got stoned and made a free Claude account to build a couple of little gimmicky scripts: something that could fetch a random poem from PoetryDB and print it in the command-line; a really bad CLI RSS reader. There were a couple others that didn’t work. I ran out of tokens really fast and put the whole thing to bed.

The day before yesterday, I spent three or four (hungry, distracted) hours trying to get Emacs to do one specific thing: take a chunk of text I’d written in Emacs and post it on this Ghost page. I could not do it, because I do not know Elisp (though I want to learn!), and no package existed. I tend to get obsessed with stupid problems like this, so I woke up the next day unable to stop thinking about it. I remembered my Vibe Coding Expedition; reluctantly, I went to the Claude website and instructed it to build something for me.

In a lot of ways, this is the perfect project for an LLM. They’re good at API stuff, and everything I was working with was open-source. The final file wasn’t that long. It worked the first time I tried it.

I won’t say it blew my mind, but it was definitely a weird feeling. It was so quick! I didn’t have to do anything! I just copy-pasted – but isn’t that what I usually do? Find a package or a chunk of code on Stack Exchange, then paste it in?

The difference, of course, is that LLMs are bullshit machines pushed by the ruling class and built on theft, imperialism, and environmental destruction. But I drive a car and eat meat. A small handful of free prompts feels less damaging than that.

I immediately tried asking it to do a bunch of other shit. I got it to write me a couple of scripts I could’ve probably written. Then it did a bunch of shit that didn’t work and I ran out of tokens again. I did other stuff all day and got stoned again and got it to build me a package that interfaces with podcast feeds and then another one that lets me access my self-hosted ebook library from Emacs. They’re all ugly and they all work. (Edit: the ebook library did not, in fact, work.) None of them interact with anything particularly vulnerable from a security perspective; none of them are high-stakes at all.


Feelings

Why does this feel wrong? All the ethical stuff, yes. Ethical purity is impossible, and the bottomless left-liberal discourse around the ethics of voting proves, to me at least, that the only thing more useless than believing you can keep your hands clean is picking on random contrarians. And I think it’s actually useful for the work I’m doing to stay in touch (in a controlled and experimental environment) with the technology as it is. It doesn’t help with the organizing work I’m doing to deceive myself about what it can and can’t do.

Still, I don’t like folding AI shit into the weird little handmade quilt that is, at this point, my own personal Emacs configuration. The Claude interface is really cute and charming – Anthropic’s design team is all-fucking-time, as good as Apple was in its heyday, I think – in a way I find viscerally disgusting for how deceptive it is, and I love Emacs because it’s so undeceptive. It’s all right there for you to pick apart and poke around in. Frontier LLMs, on the other hand, will never open up their source code, weights, or training data, both for market competition reasons and because it’d make them look really bad.

None of the problems “vibe coding” solved for me were major problems: they were all just fun little workflow things. Even though their environmental impact was ultimately negligible, it still probably wasn’t worth it.

More than any of that, though, I really did feel the truth of the slot machine comparisons I’ve seen around lately. The last package I got it to build took a fair amount of troubleshooting (I wound up making free Claude accounts with different email addresses I have so I could overcome the pathetic free-account rate limits), and when it worked I felt the same cheap little rush I get from the kinds of videogames I try not to play. After it finished, I sat there trying to think of other shit I could get it to do. It reminded me of those insane posts from the early “vibe coding” days talking about how everyone in Silicon Valley was going home from parties early to stay up all night running twelve Claude instances at the same time.

I don’t know. It was an interesting experiment. I see the appeal. And it did work! I used it to upload this post. It saved me maybe twenty seconds. But using Claude felt bad. I might delete the stuff I made with it. I’m going to try not to use it again.

Thoughts? Leave a comment