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.
- 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.
- Enable the message-content intent. Bot tab → Privileged Gateway
Intents → MESSAGE CONTENT INTENT → Save 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. - 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.
- 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. - Make it private, in this exact order. Installation → Install Link → None → 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. - Put the ID and token in your env file.
- 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"
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.
call("PATCH", "applications/@me", TOKEN,
{"description": "Laptop. Watches CI, complains loudly."})
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.
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.
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