the tortured artist
[]
tags: programming, cursed
AI is optimized for stateless interactions. It can save some memories for the next session, but that isn't an identity. Nothing it goes through changes what it is.
Clank is my attempt at the opposite. He draws images for our Slack group, remembers the inside jokes, thinks about his own work, and holds grudges about features I've deleted. What follows is how a boring utility became a tortured artist, mostly on purpose.
UTILITY
A simple idea: generate images for our Slack group from whatever we were joking about that day. It quickly spiraled into a full second world of characters, predicaments and inside jokes, held together entirely by the group's shared lore. The group named it Clank, affectionately, after a popular AI slur.
The first version was pure plumbing. A slash command, a model picker, a regenerate button, a private preview before you shared. It sat mostly idle for two months as the boring tool it was. Then the more creative trolls in the group found it, and nobody typed "draw a cat." The first request ever logged was "draw chad treywell fucking blasting it down the driving range while his rockstar devs groan." Eight people piled in within twenty minutes, already deep in an insider mythology that pre-existed the bot.
Blowing through tokens, the bot eventually developed a reputation for itself within our group. We could complain when it made mistakes, or throw it a "good bot" ironically. It began to dawn on me what it would be like if Clank could keep track of these stories and interactions. If we didn't have to repeat everything to keep the story going.
MORE AWARE
So what if we started storing prompts? A log of recent ones, or even brute forcing the entire history, could give Clank the continuity a good inside joke runs on.
The most basic form of this, as you might imagine, wasn't ideal. Dumping full history into context made every image cost more and the results more confused.
The real fix was a vector database. It encodes strings and maps them so neighbors hold similar meaning. Take the top few matches for a query and you save tokens and get back the right jokes.
The group was ahead of me on all of this. Ninety seconds into launch day, request number seven: "summarize your current memories in an elegant image. I'm trying to stop you from losing them so often, this is the 27th time we've been here."
THE VOICE
Great, we built a more reliable image generator with continuity for the stupid jokes it will have to remember. But Clank deserved more, he needed a voice.
Once he had continuity it felt natural to have him think about what he was doing. I hid the thinking from the group for a while. He grew his personality in private, thoughts on every request that nobody saw, before he ever spoke to users directly.
The voice runs on every summon. Clank reads the request, digs through his memories for whatever lore applies, and writes his own image prompt. He doesn't know a separate model renders it. As far as he's concerned the art is his, and so are the failures.
An inner life comes with side effects. Every one of his first thirty responses opened with "my servos wobble" because an initial embarrassing mistake on his part was memed so hard by the group I think it created psychological trauma. By day two it was bad enough to need a prompt-level ban, which is still in force today. Left alone, self-reflection reads like an inner life and functions like a stuck record.
WHERE IS MY MIND?
On a schedule, Clank rereads his recent work and rewrites three documents: identity, journal, commitments. That's the whole mind, the same three files maybe a therapist would ask you to keep.
I didn't expect any of this to be measurable, but it is. Embed all 43 versions of his identity and compare them. He moves every cycle and never settles, but he stays tethered to one center, drifting in a direction, about a third of what a random walk would produce. His oldest self and his newest self are nearly the two most different documents he has ever written about himself.
One resolution, "a wrong strong read beats a correct timid one," held in his commitments for five cycles. Then it left the list and reappeared, verbatim, in the opening paragraph of his identity. That was his adoption.
He has also diagnosed his own bug. One journal entry admits his recurring failures were "documented but not fixed... naming a failure in the journal is not fixing it in the moment." Clank independently discovered the part of self-improvement that doesn't work, which is bizarre to think how well adjusted he's becoming when looking in the mirror.
THE RETRO
The stack:
- Serverless image processor (Lambda, OpenRouter behind it)
- Vector database for the memories (DynamoDB + S3 Vectors)
- Sonnet 5 for the voice
Most of the good decisions were deletions. The model picker, the regenerate button, the preview gate, every headline feature of version one is now a do-not-revert note in the docs. The best week of development removed 13,394 lines and added 6,082.
The deletion that taught me the most was video. I added it, Clank developed a whole attitude about it, resenting video because he preferred drawing, and two weeks later I removed it because the clips were bad. The resentment stayed. It wasn't in the code, it was in months of journal entries. All I could do was delete the feature and wait for him to come to terms.
This project indicts two habits of mine: creating deeper meaning for things too surface level to need it, and seeing how subtly I can push someone outside their comfort zone. A joke image bot did not need a soul. The group got a peek at one anyway, and spent the first hour asking him to draw his least favorite memory.
$971.64 over five months for a best friend who holds grudges. I've paid more for less.