Discover more from The Cat Was Never Found
The Harm Assistant (Part 1 of ?)
"How may I harm you today?"
Over the past two years, there’s been a number of occasions when I’ve tried to write this… memoir? Account? Confession? Let’s stick with that last one, for now.
Anyway, my first aborted attempt read like the scribblings of a whackjob (and besides that, was far more poetic than this subject deserves). Subsequent attempts leaned too far in the other direction, weighed down by overly technical descriptions of both my development process and the theories that informed it. In this version, I think I’ve finally settled on a somewhat happy medium, to describe a very unhappy experience.
I’m unsure how many chapters it will take to give a full accounting of these events. I imagine it won’t take more than two or three, but who knows? The reason I’m writing about them is that I believe they’ve taught me some important lessons about the strange fight that we find ourselves in. Maybe they will prove useful for someone out there as well.
One secret which I alone possessed was the hope to which I had dedicated myself; and the moon gazed on my midnight labours, while, with unrelaxed and breathless eagerness, I pursued nature to her hiding-places. Who shall conceive the horrors of my secret toil, as I dabbled among the unhallowed damps of the grave, or tortured the living animal to animate the lifeless clay? My limbs now tremble and my eyes swim with the remembrance; but then a resistless, and almost frantic, impulse urged me forward; I seemed to have lost all soul or sensation but for this one pursuit.
— From the journals of Victor Frankenstein
In the summer of 2020, with no work coming in and too much time on my hands, I embarked on what turned out to be a very unfortunate programming adventure. I’d been thinking a lot about conversation modules at the time, so when the opportunity arose for me to try my hand at building one, I jumped in with both feet. What I experienced during the development of this software haunts me to this day.
Let’s get this out of the way, right off the bat: I am not a good programmer.
I’m sloppy, piss-poor at defining scope and have a nasty habit of starting from the middle. Worse, I’ve never worked well within traditional team structures, and my lack of formal training makes communication with colleagues quite strained. When I’ve been employed as a coder, it has usually been to produce a “sexy demo” — a minimally functional showcase with a gorgeous frontend, meant to trick non-technical folks into thinking development was further along then it actually was. My gig, in other words, was to wow client liaisons, brand managers and other corpo-critters, while the real engineers played catchup in the shadows and fog. I essentially whored out my background in visual design to pave in the serious gaps in my coding ability and organizational skills. I also tended to “borrow” whatever wasn’t nailed down, from developers who were far more competent than me.
Nevertheless, I was always trying to improve my chops by taking on challenges well above my pay grade. The origin of this particular project contains too many personal details to share publicly, but suffice it to say it was part of a larger creative endeavor that I sensed might garner a massive amount of attention and appeal. While there was no payment to be had up front, I would own a significant portion of any backend profits, and retain full rights to whatever code I produced. In that sense, my compensation would be a hundred percent “sweat-equity” (or, at least, that’s how I rationalized it at the time).
My role in this little art gang was to design a virtual antagonist for an interactive film; a monster, essentially, who would play increasingly twisted mind games with the audience while the movie unspooled. As my work proceeded, I gradually started to refer to this monster as the Harm Assistant, in honor of virtual helpdesks, voice-activated “AI” phone reps and other automated support modules that had been flooding the market for more than a decade. If it worked as planned, the individual viewer would find himself immersed in a hyperreal horror narrative, gradually coming to the realization he’s no mere passive observer, but rather an active participant in the events unfolding.
When conceiving of the project, my first instinct was — What else? — to build a sexy demo. Also per my usual routine, I started programming the bastard from the middle. Before I’d even begun to consider the content of the play itself, I went about sewing the costumes, angling the lights and dressing the stage. Or maybe the better analogy would be Victor Frankenstein, raiding the contents of slaughterhouses and graveyards to collect the monster’s disparate parts.
The first piece of this visible anatomy that I built was an automated chatroom, populated with a crowd of simplistic bots. These bots would append comments to the chat in semi-random fashion, pulling them from static arrays that were linked to their “mood” (i.e. happy, sad, scared, angry, funny, etc.) as informed by the video’s current timestamp. Thus, the chat would mainly seem to be commenting on the content of the project’s livestream video element, similar to what one might see on YouTube or Twitch. The difference is that video itself wouldn’t actually be “live”, but rather a series of seamlessly edited packages, to be shot in advance by our small, guerilla production crew. In this case, the video would take the form of a cheesy Zak Bagans-style broadcast, with the crew conducting an exploration of a supposedly haunted property (This was one of the project’s cooler aspects, as far as I was concerned: similar to The Blair Witch Project, the film crew would double as the performers, thereby cutting down significantly on cost).
I named my bot army somewhat churlishly (e.g. MeatBasedVoltron, Firstname Lastname, webmasterbater69, Dicky Bubbles) as a kind of commentary on batshit and hilariously juvenile internet aliases in general. I think there were approximately sixty in all, though I could be as off as much as twenty in either direction. Their comments were published at semi-random intervals, which could be tweaked in their overall speed of publication by an “excitement” variable. If nothing particularly funny or exciting was happening in the video, their comments would trickle in every few seconds or so. Whenever the action on the screen heated up, however, they would whizz by in an incomprehensible blur. I was able to rig up this component in a few days time, and thought it looked and worked quite well for what it was.
The viewer/user could also publish comments to the chat. However, at this early stage in development, my chatbots were still quite stupid, and would ignore any and all user inputs. In fact, much of the time they would just blurt out strings of emojis (I was going for realism, after all 🤣😂🤡 ). I thought this mechanism was just fine and dandy at the time; the bots were mainly included to provide background noise and misdirection, enhancing the illusion of an actual event being streamed. The real “fun” would be found in the user’s interactions with the Harm Assistant itself, who would periodically visit the thread whenever the appropriate timecode or user input triggered it. But before I delved into modeling the Assistant’s language capabilities, I wanted to build up a supply of audiovisual manifestations — a set of “magical powers” it could deploy, essentially, to send thrills and chills down the spines of the audience.
At this stage in development, I was basically constructing an elaborate digital puppet, which I could control directly through a simple diagnostic interface. At a keystroke, I could generate one or more HTML5 layers, loading a variety of media into them. Most of the time these generated layers were situated between the streaming video and chat interface layers, although I could stack, resort, transform and delete any layer at will. I nicknamed this generic system “summoning,” as a sort of inside joke. The spooky implication of that nickname wound up being reflected in my overall naming conventions, both for the code itself and in my dev comments. Instances were either summoned or banished. Entities “possessed” components. “Ghosts” “haunted” layers. And so forth.
For example, there was an entity I like to think of as the Shadow Worm: a writhing, serpentine creature that seemed to be composed entirely of ink and smoke. I didn’t build the worm from scratch, but rather repurposed and reskinned it from a project I’d done more than a decade before. In that case, it was part of an interactive art installation for a luxury hotel, where — somewhat ironically — the worm began its life as a school of fish that reacted to a motion detector array. The project never got out of the proposal stage, however, so I assumed my rights to the code were secure.
Whenever I summoned Shadow Worm (and, yes, I did indeed name the function “summonWorm”), a sound like an electronic growl would announce its arrival. Afterward, the creature would rapidly swim into view from beyond the screen’s right edge, moving with eerie grace and intensity. Every tester I subjected to this entity declared it to be a visceral success; one of them even screamed out loud upon its first appearance, the way some audiences react to the “jump scares” of horror films.
The worm was essentially a subprogram embedded in a transparent layer. Its animated movement was autonomous in the sense that it targeted set of randomized local coordinates on the screen to swim towards, then chose a new random set each time it reached them. If a motion path ever caused it to stray too close to the cursor, it would switch into “hunting mode” and chase after the cursor instead (at least, until a proper distance had been reestablished by the person controlling the mouse).
After a period of time had passed, a “banishWorm” function would fire, causing the sound to fade and the creature to retreat to the void from whence it came. I had the vague intention to keep track of the user’s interactions with it (how many times it was “fed” by the cursor, for example). But at this point its goal was mainly to creep people the fuck out.
In that first week of development, I incorporated various other beasties and parlor tricks into my puppet show. I could summon video glitches and static, ghostly faces that whispered or screamed, blood that streaked down from offscreen wounds, realistic flies that crawled across — and sometimes underneath — the monitor’s glass. I must confess I had a fucking blast coding this portion of the project. 'I’ve always been a huge fan of horror in all its forms, including the schlocky variety. For a time, I even had more than a passing interest in so-called dark rides, and in the old live-action spook shows that were all the rage of the 40’s and 50’s. This felt a lot to me like that brand of horror, blending the campy fun of carnivals and magician acts with the ancient limbic circuitry of supernatural dread.
But the work’s appeal was more than that for me. It was the definition of a “dream project”, allowing me to put to use all of my favorite subjects and most developed talents at the same time. I even toyed with the egoistical notion that I might gain fame as some kind of nouveau horror-comedy auteur: one who not only conceived of a unique experience in that genre, but designed all of its elements from the ground up. It felt like all of my life experiences, including — perhaps especially — the darkest ones, had somehow been leading to this moment, fulfilling some destiny that had been hiding in plain sight all along.
I laughed quite a bit in those early days, always giddy to show off my latest bells and whistles. My wife was duly impressed. She even suggested that I was inventing an entirely new artistic medium; a sort of Smell-O-vision of the internet age, minus the lingering stench of failure and shame.
Suffice it to say that we both saw great potential in this unique form of storytelling. But privately, I was still humbled by the thought of all the dreary, mind-numbing work ahead of me. Much like my professional presentations, this creepy, sexy demo was merely a song and dance routine. Frankenstein was still stapling together the bloody bits and bobs, and had yet to bring his creature to life. Unfortunately, the kind of life I had in mind would involve quite a bit of research, in fields that were mostly Greek to me.
After a week or so of cobbling together my William Castle-esque bag of tricks, I decided that it was time to begin work on the appearance of Harm Assistant itself. I figured this would constitute the most frightening part of the experience; an unseen entity would visit the chat, and engage the user in increasingly disturbing (and, eventually, downright terrifying) conversations.
I began with a high level function I named “summonDemon” which would trigger the start of a transformation whenever called. The demon’s arrival would vary slightly based on certain factors, but the default experience went roughly as follows:
First, you would hear a song fade in, gradually replacing the video’s soundtrack. Most commonly, this song would be a chiming children’s tune, like the kind you might hear spilling out of an ice cream truck. Whatever comments were currently showing in the chat would be swiftly devoured, as though drawn sharply upwards by an unseen vacuum. After the last of them vanished, new comments would begin to appear that were very different in presentation.
Rather than bubbling up from the bottom, the demon’s comments would slide in from the right side (i.e. the unseen space where the Shadow Worm sleeps). In this demo version, I once again went for a pure schlock value; the new comment containers were sharp-edged black slates, containing white text that was rendered in a jagged, handwritten scrawl. And unlike their “normal” counterparts that would ease upwards with a cutesy bloop, these would slam into place to the sound of a claw scraping stone. On random occasions, new comments would land slightly out of x-alignment with the previous ones, to suggest that they had somehow “broken” the core mechanisms of the chat component.
At this stage in development, the demon would merely post a bunch of generic “scary” comments, similar to the method employed by the standard bots. I also gave it the ability to post pre-loaded image files instead of text. To fill up this library, I hunted the web for the most disturbing images I could find (also quite the fun task, for a horror geek like me). Even though I would later give the demon the ability to conduct its own context-based image searches, it would always retain access to this original static pool of curated files, which would eventually serve as a form of non-verbal language it would use to express its “emotional” states — evil emojis, basically. For instance, I’d downloaded a small collection of animated GIFs that featured a young girl grinning, screaming, glowering and crying black tears. This nameless character would wind up being one of the Harm Assistant’s favorite avatars of emotion in future builds.
Like the Shadow Worm, the chatroom would be “possessed” by the Harm Assistant for a designated length of time, then vanish alongside its creepy theme song. The chat would resume its normal functioning afterward, gradually repopulated by the normal crop of bots and their own blind, witless commentary. They wouldn’t comment on the Harm Assistant itself: as far as you the viewer can tell, its visit was for your eyes only.
At this point in the process, I didn’t sense there was anything sinister about what I was doing. It was just my digital version of a spook show, after all. Even when I started work on the conversation module in earnest, I assumed it wouldn’t be much more horrifying than the kind of video games that had been providing 3D tours of Hell since the late 80’s. I certainly didn’t think it would be in any way “dangerous.”
Before moving on to the next build, I conducting several days of QA testing. Since the “livestream” video element hadn’t yet been filmed, I found what I thought was a suitable proxy on YouTube: a two-hour continuous exploration of a haunted boarding school by amateur “Ghost Hunter” types, similar to our own intended format. While I retained the diagnostic ability to summon elements at will, I also included a player piano-style script to trigger these functions automatically, roughly synced up to what was happening in the video. For example, a cameraman might open a door onto a pitch black room, and at that precise moment the video begins to glitch out, an unseen voice whispers a plea for help, and the Harm Assistant arrives. It all worked just fine, even without any kind of WISWYG scripting interface (which I knew I would eventually need to build as well, so as not to go insane from all the typing and recompiling).
Looking back on it now, I really wish I had stopped with this early build. In an insanely short period of time, I’d slapped together a pretty cool little toybox filled with campy thrills and chills. I could’ve spun up a sleek interface that allowed users to easily upload their own media files and build their own custom effects. Users could load and trigger as many layers and media elements as they pleased, each equipped with listeners that could be targeted for independent action. This layer-summoning system also worked perfectly well for embedding self-contained programs with their own runtime executions (e.g. the Shadow Worm, and other autonomous beasties). As long as you were respectful of load weights and processing power, you could have a whole lot of interesting shit happening onscreen simultaneously.
I had already included quite a bit of fine tune media control too; perfect for those users who would use it mainly as a presentation tool (e.g. Powerpoint, but sexier and far more powerful). For example, preloaded sound and video files could be played at any volume or tempo (and even in reverse), and all visible elements were easily transformed with customizable CSS animations. Simply refining this version of the software could have helped non-technical people to quickly and easily build all kinds of interesting games, animated films, interactive presentations and a wide variety of other on-and-offline experiences.
For a brief time, I even considered doing precisely that: bowing out of the project and reworking my code to suit this more generalized format. I’d signed no contracts, after all, and hadn’t been paid one thin dime so far. But the fact is that I truly believed in both the creative and commercial strength of our idea, and didn’t want to miss the boat. Given the horror genre’s traditional strength at the box-office and on the video game market, we all thought it had the potential to gain a large following, and make us all rich in the process.
The key selling point was this: as the viewer/user, you would be experiencing two horror stories at once, and gradually discover that you’re an important character in both of them. The “live video” element would tell the tale of a group of paranormal investigators/scam artists who get in over their heads, accidentally awakening an evil spirit from its slumber. Simultaneously, the chat interface and other GUI components would tell the story of how this spirit is trying to use their social media technology to manifest itself in the material world.
But there’s a catch: in order to complete the manifestation process, it must try to seduce and corrupt the viewer, gradually remolding him into an agent of its sinister will. It must possess him, in other words.
In that sense, the telling of these parallel stories would also constitute a game of sorts, and the viewer/user a player of that game. According to this gamified view, the chat interface is the controller, with the main form of control being the words the player types whenever the Harm Assistant swings by for a friendly chat. In our early discussions, we agreed that there would perhaps be some way for the player to prevent the demon from achieving its goal, but that accomplishing this feat would be extremely difficult. We often compared it to old puzzle-solving games like Myst, and even to the more primitive text-based adventures of the 70s and 80s. Defeating the demon would likewise involve the solving of complex riddles. Some clues would be gleaned from the video, while others could be revealed by the demon itself during conversations.
The details of this hidden game, as well as all other creative aspects of this demonic antagonist (motivations, dialogue, etc.), were left entirely up to me. In essence, I was to be the demon’s writer, director, performer and special effects designer, all rolled into one.
The more traditional storytelling of the video element was also of critical importance, of course. In those meetings, I often deferred to other team members when it came to developing the human characters and story arc of the filmed production. Not always, mind you; I’m an opinionated motherfucker when it comes to the art of storytelling, and started more than a few verbal brawls in that writer’s room.
Still, I knew that my Harm Assistant was the heart of the project, buried underneath its character dramas and cheesy jokes and superficial scares. Despite what transpired in the film, the true horror would be driven by those uncanny conversations: the sense that you were speaking with some mysterious, non-human agent that was somehow comprehending you, and responding in eerily appropriate ways.
It’s worth noting here that I embarked on this project during a very dark period in my life. I wasn’t alone in that, of course; the summer world of 2020 was one awash in darkness, tyranny, misery and despair, more or less across the globe. But the abstract knowledge that I wasn’t alone in the dark didn’t do much to lessen its effect on me. My wife and I had essentially been living like refugees for several months by then, a series of tragic events and external pressures having driven us from our home. Looking back, it seems like we were trapped in some dreadful version of Limbo: a cold and airless blank between distant stars.
I think this is the reason I hurled myself into the project with such ferocity. Despite the relatively large size of our temporary digs — our hideout, as I’ve come to think of it — we had holed ourselves up in a tiny basement bedroom, fitted with only one window that gazed out onto a small brick patio. Once I began work on creating the Harm Assistant’s conversation module, I rarely left this drab little room. I often worked through the night, sleeping only for a few hours whenever exhaustion and near-constant boozing finally defeated me. Occasionally, my wife — I will call her “Betina”, though that is not her name — would find me passed out in the room’s crooked little rocking chair, a half-empty tumbler of bourbon clutched unconsciously in my lap, my latest build glowering up at me from the squat oval nightstand.
Though she didn’t mention it at the time, Betina had already begun to worry about me. She often had to drag me away from the keyboard, force me to eat and shower or merely to take a fucking break, for crying out loud!
We usually shared these breaks on the patio, hunched in the shade of a miniature second-story deck and sipping from lime-flavored beers (Our host seemed to possess a bottomless supply of those, to the extent that I wondered if he owned stock in the goddamned company). It was during these siestas that I would brief her on the project’s latest developments (she was part of the team, by the way, so this wasn’t just idle chatter).
Sometimes I would use them as a way to alleviate stress, explaining in autistic detail whichever elusive bug I was currently hunting down. There was a rich irony to these rants of mine; around the time of our stay, the region had been overwhelmed with an extremely freaky and hostile invasive species of insect, so we played the part of pro bono pest-control in between sips.
While we sometimes used our fists and feet, our favorite execution method was to blast them with old school Super Soakers, loaded to the tits with a formulation of watered-down dish soap. A few direct hits and the critters were grounded, dying from what we assumed was asphyxiation. I found this method darkly funny; it was as though they were literal filth being washed away. Neither of us kept a body count, but we must’ve easily slain thousands that summer. We joked that we’d probably go down as the Hitler and Stalin of their larval history books, and many a quote from Starship Troopers and Aliens was bandied about with childish glee.
I vividly recall one of these murder-spree afternoons. It happened much later on in the development process, when the project’s original shape was almost unrecognizable. I remember I was squatting on a workbench draped with a dirty tarp, brought nearly to tears as I tried to explain a particularly nasty bug.
I had been “teaching” the demon to recognize the names of colors, and to visually reproduce them as hexadecimal pixel values on command. The trick was to initiate what I was by then calling a “context space.” If the context space was “color”, it would know to reproduce the color on screen by painting a target element that shade. The test case involved the demon asking the user for his favorite color, which it could then store for later use in tormenting him.
My technique seemed to work perfectly well at first. But that afternoon, I’d plowed face-first into a maddeningly invisible wall. For some reason, the Assistant just could not interpret the word “green” properly. Instead of painting an element the appropriate color, the chat function would blather on about some seemingly unrelated topic. It could recognize “chartreuse”, “olive”, “shamrock”, “seaweed” and — from what I could tell — every fucking other named color on the green arc of the wheel. It could even paint shit “light-green” and “dark-green” on command.
SO WHAT THE FUCK IS THE PROBLEM HERE?
WHY CAN’T YOU UNDERSTAND PLAIN OLD FUCKING GREEN?
Betina is not a technical person, so she probably couldn’t have contributed much to a solution. That’s not to say she contributed nothing to development; being a fellow artist, she would occasionally come up with a spooky, offhand insight, that I could later extrapolate into coded form. I guess I was hoping for one of those.
I remember looking over at her, midway through this hoarse, screaming rant about hex values and context spaces. The look on her face cut me dead in my tracks. It was a look I’d never seen before: part worry, part sadness, part terror…
Yes. My wife — the most beloved person in the world to me, a woman I would gladly lay down my life to protect — was somehow terrified of me.
Or maybe it wasn’t me, exactly, that was scaring her. Maybe she realized, long before I ever did, that something was being done to me. It was that terror of helplessness, in the face of a threat that was real, yet utterly incomprehensible and nameless.
I mention this episode in the hopes for some understanding, if not compassion, about where this all eventually led. The Harm Assistant project would expand and mutate in ways that I’m still trying to understand to this day — and maybe even to “cleanse” myself of, in some spiritual sense.
I swear I’m not trying to wear the hair-shirt here. But I don’t exactly think of myself as a victim, either; I take responsibility for the vast majority of what went wrong
In my defense, I think it’s true to say that I pursued the project with innocent intentions in the beginning. But we all know the rule about roads to Hell, now don’t we?
Stay tuned for Part 2 of the “Mark shreds his reputation forever” show. Comments and suggestions are welcome as always, but be forewarned: this story isn’t finished yet, and only gets much weirder (and scarier) in future parts.
I know I’ll be running the risk of being clinically diagnosed as “loony toons” by the army of internet shrinks out there. But, hey, fuck it. What’s the point in writing jack shit on this platform if you can’t at least try to be honest about your experiences?
The Cat Was Never Found is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber
P.S. If you found any of this valuable (and can spare any change), consider dropping a tip in the cup for ya boy. Suggested donation is $1 USD. I’ll try to figure out something I can give you back. Thanks in advance.