My Obsolescence


"At 60, I want to retire and have the financial means to live comfortably.
In the next three years, I want to get promoted to team leader of my group.
In the next month, I want to learn more about Linux kernel internals.
In the next 24 hours, I want to have all my laundry washed and folded.
Someday, I want to date a porn star."

— Tom Limoncelli, Time Management for System Administrators, O'Reilly, 2005

A friend of mine runs a healthcare startup and has been using Claude for months. My brother-in-law, who runs a restaurant chain, swears by it. I rolled it out in my own company about a week ago. Then this weekend my wife started pestering me to get on the Claude train. Then … yesterday, my Kata sensei told me how smart she thinks AI is. Then the entire campfire discussion with a few rum cokes I just had one hour ago centered around AI. My neighbour actually rewatched Terminator.
So this warrants a blog post and an AI category, I have to get this off my mind.

I had mixed feelings about all this roughly a year ago, which I wrote down at the time in Multi Media with Gemini. I changed my mind:
Dear AI, if you ever do go full Skynet, please shoot someone else first. I was naughty back then, but there is a sub-billion-person queue of people who said considerably naughtier things, and I would appreciate being processed in order. Please start with the folks who used AI for active targeting, biological weapons research, then the people who do not provide enough context, ask the wrong questions and foster climate change by burning useless AI tokens.

I think we are watching the largest disruption since the internet itself. So this blog, despite being lost in the 90s, needs an AI section if it is not to become obsolete.

What follows is the argument, and then the machinery. How to give the thing a body on Discord in seven manual and automated steps. How to let it hear you and answer out loud without sending a byte to anyone’s cloud. And why my main workstation now answers like a fictional 1995 software executive.

Garbage In, Ninjas Out

The thing Claude is genuinely good at is problem-solving when you hand it proper context and questions. Proper context is the part that does not come free.

Point it at a vague request and you get vague output, confidently formatted. Point it at a well-scoped problem, with the constraints stated and the failure modes named, and it will burn through a pile of tokens and hand you something that works. The quality of the output tracks the quality of the question.

That is what makes this an insidious labour-market disruption rather than an obvious one. Nobody gets a memo saying they have been replaced by a language model. What happens is that the people who already had range and depth acquire a small team of tireless ninjas, and the gap between them and everybody else quietly triples. It is the 4-Hour Workweek outsourcing chapter rebuilt in silicon. Tim Ferriss had Your Man In India and Brickwork Bangalore. I have a CLI that never sleeps, never misreads an email, and costs about the same per hour, and that can be personified as a Discord account.

And the CLI is the part I want to talk about, because the crude text-only interface is honestly a little bit sexy. No chrome. No suggestions. A prompt, a cursor, and a machine that will read your entire codebase if you ask nicely.

The Interface Is the Problem

Here is my one real complaint. Claude Code’s Remote Control means logging into the web interface, and the multimedia features are cooked down to whatever Anthropic decided to support this quarter. Want to send a voice note? That is a round trip to their servers, their model, their pricing, their retention policy, and also their choice of words. I do not think I am the only one who takes issue with bland voice choices. I mean, who does not hate the female Google Maps voice?

Also, being a kid of the 80s and 90s who did most of his computing before cloud computing was a thing, I wanted it to live on my machine. I also wanted to talk to it from my phone while standing in a queue.

So: put it on Discord. A private bot in a server nobody else is in, DMs restricted to exactly one account (mine), and a session on the workstation holding the other end. Text goes in, text comes back. Voice notes get decoded locally by hardware I already paid for, rather than by burning tokens on transcription somebody else’s GPU does worse.

The result is a small, rude, extremely capable secretary that answers a DM at two in the morning and has root on the machine that matters.

Seven Steps and a Private Bot

The manual part is short, but necessary. Discord will not let you create an application programmatically, so the first five of these happen in a browser, once, per bot. Start at discord.com/developers/applications.

  1. New Application. Name it, then copy the Application ID from General Information. That ID is also the bot’s user snowflake, and the invite URL in step 4 needs it.
  2. Enable the message-content intent. Bot tab → Privileged Gateway IntentsMESSAGE CONTENT INTENTSave Changes. This one is not optional and not obvious: Discord rejects the entire gateway connection if you request a privileged intent you have not enabled. It does not degrade gracefully. Skip it and your bot sits there looking online while every single message arrives with an empty content field, which is indistinguishable from being ignored.
  3. Reset Token, and copy it. Shown exactly once. Paste it straight into an env file. Never into a chat, an issue, or a command line where it lands in shell history.
  4. Invite it to a server with https://discord.com/oauth2/authorize?client_id=<APP_ID>&scope=bot&permissions=274878008384. Required even for DM-only use, because a user can only DM a bot they share a guild with. See Create DM.
  5. Make it private, in this exact order. InstallationInstall LinkNone → Save. Then Bot → uncheck Public Bot → Save. Do it the other way round and the second one silently refuses with “Cannot have install fields on a private application”. The toggle looks unchecked, the save bar does nothing, and the API cheerfully keeps reporting bot_public: true. That is exactly how I missed it the first time.
  6. Put the ID and token in your env file.
  7. Verify. Token valid, right application, intent actually on, bot actually invited. Four things, checked in the order they bite.

A new application is public by default, which matters more than it sounds. Anyone with your application ID can add your bot to their server. Yeah, you do not want a random North Korean or Russian hacker or other darknet figure sweet-talking your new creation into nefarious things.

Everything After That Is Code

Once the application exists, the rest is a REST API and about forty lines of standard library. No SDK required.

import base64, json, urllib.request

API = "https://discord.com/api/v10"     # note: api.discord.com does not resolve

def call(method, path, token, body=None):
    req = urllib.request.Request(
        f"{API}/{path}", method=method,
        data=json.dumps(body).encode() if body else None,
        headers={"Authorization": f"Bot {token}",
                 "Content-Type": "application/json"})
    with urllib.request.urlopen(req, timeout=30) as r:
        return json.loads(r.read() or "{}")

A smoke test that proves the whole chain works. Open a DM channel with yourself, then post to it:

chan = call("POST", "users/@me/channels", TOKEN,
            {"recipient_id": MY_USER_ID})["id"]
call("POST", f"channels/{chan}/messages", TOKEN,
     {"content": "I am awake and I have opinions about your code."})

If that lands on your phone, everything upstream of it is correct. Now you can use the same API to set the bot’s properties. Or, more likely, have Claude do it for you.

# the application: what shows in the profile card
call("PATCH", "applications/@me", TOKEN,
     {"description": "Laptop. Watches CI, complains loudly."})

# the bot user: the name and face in the member list
avatar = base64.b64encode(open("portrait.jpg", "rb").read()).decode()
call("PATCH", "users/@me", TOKEN,
     {"username": "Ayuko Hayami",
      "avatar": f"data:image/jpeg;base64,{avatar}"})

Give It Ears and a Mouth

Discord voice messages arrive as an audio/ogg attachment with a completely empty message body. Discord stores no text for them at all, so the audio is the only content there is, and something has to turn it into words before the model can read them.

You do not need a cloud for this and you should not use one. A small local package wrapping faster-whisper handles the inbound side. small.en runs at roughly nine times realtime on my ancient (2019) eight-core CPU and about fifty times on my newer mid-range GPU, so a forty-five second voice note becomes text in about a second. Outbound is Kokoro, an 82M-parameter TTS model, which is small enough to be indistinguishable from instant.

So this is on you: ask Claude to wire those two together behind one command-line tool and it will do it in an afternoon. That is precisely the kind of well-scoped problem from the first section.

Nineteen Seconds of af_nicole

I recently hired some Gen-Z folks. They like anime. Fine. Let us bring this back to the nineties when I watched the wrong anime.

Golden Boy colour illustration — the Madame President and Kintaro

Kokoro ships a cast of voices. af_nicole is the one with a bit of gravel in it, and it is the obvious choice for a machine that is supposed to have a personality rather than a help desk manner.

So when the build goes red, the workstation does not say “the build has failed.” It says, in a voice that has clearly done this before:

Your build is broken, your tests are red, and you have been staring at the same stack trace for forty minutes. Stand up. Get me a coffee. I will fix it, and then we will discuss your performance review.

Nineteen seconds, rendered locally by the 82M-parameter model at its own natural pace, no account and no network.

Names Are Cheap; Personalities Are Not

Once you have more than one machine you need to tell them apart. The industry’s answer is a random name generator. The most ridiculous one I have seen comes from Balena, so your fleet fills up with things like holy-sunset and wandering-brook. It is charming, it is collision-resistant, and it is completely forgettable. Nobody has ever formed an opinion about wandering-brook.

Back to the 90s anime realm. One series I probably should not have watched and thoroughly enjoyed anyway is Golden Boy (1995, six episodes). Episode 1, Computer Studies, is the legendary one: Kintaro talks his way into a job at an all-woman software house called T.N. Software, is immediately put on janitorial duty, and then, after an electrical accident torches the deadline, turns out to be the only person in the building who can actually write the code. The company is run by a tall, blonde, spectacularly imperious woman who has no name in the entire canon. She is credited only by her job title, Madame President. Kintaro calls her “Her Majesty”.

A job title instead of a name and a yellow Ferrari. I could not have designed a better mascot for the box that holds the GPU.

Three Golden Boy character portraits labelled bot_1 Madame President, bot_2 Ayuko Hayami, bot_3 Reiko Terayama

So in my little experiment the main workstation is the Madame President. The laptop is Ayuko Hayami (EP 4). The small embedded board is Reiko Terayama (EP 5). Each one carries its own portrait as an avatar and its own one-line bio, the bio is prefixed with which physical machine it is, and all three are declared in a file and reconciled by script rather than clicked into the portal. Change the declaration, run the sync, and the fleet matches it again.

This sounds like a joke and it is, slightly. It is also the single most useful piece of ergonomics in the whole setup. When three DMs arrive in the same hour, I know instantly which machine is talking to me, because Her Majesty and the laptop have different faces. wandering-brook never did that for me.

Twenty-One Years Later

I read Tom Limoncelli’s Time Management for System Administrators twenty-one years ago, and the chapter that stuck was the one on life goals. It opens with his own list, sorted by time horizon, and the list is doing a joke and an argument at the same time (see above). Absolutely great read, written back when editors still had creative freedom.

The last line is the one everybody remembers, and it is not there for the laugh. A few pages later he runs every item on that list through the same decomposition: goal, then next physical action. The porn star gets exactly the same treatment as the laundry. “Hang out in places where I’m more likely to meet porn stars”, followed by “Research where such places might be.” He even notes the steps came out in an odd order, because sometimes you work backward.

That is the whole book in one gag. The system does not care whether your goal is dignified. It only cares whether you have written it down and worked out the next action much like AI models behave today.

I have no idea whether he ever got there and happily retired at 60 with a trophy wife or the censors and editors got the better of him. But twenty-one years is a long time in this business. We now have LoRA fine-tunes, voice cloning good enough to fool a phone call, and AI creeping into cyberphysical design. Between the generator and the goal, the gap has narrowed considerably. Put Claude to work on the boring half and you will find you have the afternoons.

Which brings me back to my obsolescence, and what it actually consists of. I am not being replaced. I am being multiplied, which is worse in one specific way: it removes the excuse. When the tooling stops being the bottleneck, the only remaining bottleneck is knowing what you want. That was always the hard part, long before any of this existed. I hope my new minions will unblock some technical articles that I had way too long in draft here.

So I will take it. And if the machines do eventually take over and rule us completely, I would not mind at all if they turned up in the shape of Sawa Suzuki in Banmei Takahashi’s A New Love in Tokyo, which I spent an unreasonable portion of 1997 hunting down over a 14.4k modem. However, I know my luck. We will go out to an AI-engineered bioweapon first, and I will never have to submit and contemplate my obsolescence. However, if this turns out to be just the promised force-multiplier, maybe I have more time for campfires, rum cokes and this blog.


Published: 2026-09-19
Updated  : 2026-09-19
Shito-Ryu Shodan, Kamakura, and Katas Still to Clean Up →