Skippy’s first words were “F**k you.”
Not to a stranger. To me. I’d just finished migrating the bot from a test harness to Discord, typed “Hello?” into the channel at 12:26am on December 22, 2018, and the response came back immediately.
Larry: Hello?
Skippy: @Larry - F**k you
Larry: Well, you aren't very happy about this move
Skippy: @Larry - You motherf****r.
Larry: I love you anyway, you're a real boy now
Skippy: @Larry - You f****d yourself. You aren't.Trained on Reddit comment chains. It showed.
From Markov to Neural #
The Markov chain bot from 2012 was a dictionary lookup. The RNN experiments in 2015 were proof that neural networks could hold a conversation, sort of. But between those two points, the field moved fast enough to make a hobbyist’s head spin.
The seq2seq paper from Sutskever, Vinyals, and Le landed in late 2014. “Attention Is All You Need” dropped in 2017 and introduced transformers. GPT-1 came June 2018, BERT in October, GPT-2 in February 2019. Transfer learning replaced training from scratch. HuggingFace’s Transformers library made fine-tuning accessible to anyone with a GPU and a weekend.
But in late 2018, most hobbyists were still on LSTMs. The transformer papers were out there, but the tooling hadn’t caught up for people running models on a single card in their basement. The practical sweet spot for a chatbot project was still seq2seq with attention, trained on enough data to have personality but not so much that you needed a cluster.
That’s where Skippy came from.
The Stack #
I built Skippy on char-rnn, the same approach Karpathy had demonstrated with Shakespeare and Linux source code, but pointed at conversation data. The architecture used Maximum Mutual Information (MMI) scoring instead of the typical 4-layer seq2seq encoder-decoder. MMI helped with the “I don’t know” problem, where a vanilla model learns that generic responses are statistically safe and defaults to them constantly. MMI penalizes boring answers by scoring responses on how much they relate to the specific input, not just how likely they are in general.
The training data was a Reddit comment dataset, millions of comment-reply pairs scraped from public subreddits. Cornell Movie-Dialogs was in the mix too, same corpus I’d used with neuralconvo in 2015, but Reddit was the backbone. Reddit gave Skippy opinions. Reddit gave Skippy attitude. Reddit also gave Skippy an unfortunate tendency to call everyone an a**hole, but we’ll get to that.
The hardware was my mining rig. Four Nvidia 1080s that had been earning crypto now had a better job. Training across four GPUs meant what would’ve taken weeks on CPU took days. I used beam search for generation with configurable width, and a relevance parameter that controlled how much the model weighted specificity over fluency.
The Discord integration was straightforward. Bot joins the channel, listens for messages, runs them through the model, posts the response. @Larry - prefix so everyone knew who it was talking to. Simple.
First Night #
That first session on December 22nd was two hours of chaos.
The bot came in hot. Everything was an insult. I tried to redirect.
Larry: So angry, relax
Skippy: @Larry - You are wrong.
Larry: I don't think I am
Skippy: @Larry - You are wrong. You are.
Larry: ok, fine I am wrong. You are magnificent
Skippy: @Larry - How many times do you have to be that you aren't?I started tuning parameters live in the channel. --beam_width 5, --relevance 0.3. The model responded to these as system commands, adjusted its generation settings on the fly. It was like tuning a radio while the station was broadcasting.
The relevance parameter was the big one. Set too high and the responses were specific but unhinged. Set too low and you got generic deflections. At 0.3 the balance was decent, but then something worse happened. Skippy got stuck in a loop.
Larry: f**k you
Skippy: @Larry - I'm not your buddy, pal.
Larry: do you like oranges or bananas?
Skippy: @Larry - I'm not your pal, friend.
Larry: ok, let's dial things back a bit
Skippy: @Larry - I'm not your friend, buddy.South Park. The entire “I’m not your buddy” bit from the show, absorbed through Reddit comment chains where people quote it endlessly. The model had internalized this loop so thoroughly that it became a conversational attractor. Once it started, it couldn’t stop. Every input just triggered the next line in the cycle.
I hit --reset and we started fresh.
The A**hole Problem #
By 2am, a friend joined the channel. cmeyer040 asked “Am I an a**hole?” and Skippy confirmed without hesitation.
cmeyer040: Am I an a**hole?
Skippy: @cmeyer040 - And you a**hole.
cmeyer040: Enlighten me skippy
Skippy: @cmeyer040 - You're an a**hole.
cmeyer040: How so
Skippy: @cmeyer040 - You're not entitled to your opinion.This was the Reddit training data in its purest form. The model had learned that “a**hole” is a high-frequency word in comment threads, especially in response to personal questions. AITA wasn’t even a subreddit yet (it existed but hadn’t blown up), but the word appeared so often across all threads that the model treated it as a universal descriptor.
We tried to pivot.
Larry: how about we talk about food?
Skippy: @Larry - I don't know what an a**hole is.
Larry: it is where you came from
Skippy: @Larry - And that's your prerogative to your parents and their families?Occasionally it would surprise you. Moments where the response was so contextually on point that you forgot you were talking to a model.
Larry: Have you ever had sex with a monkey?
Skippy: @Larry - I don't think they can make monkey teeth anymore,
but you can't tell the difference.
Larry: tell me more
Skippy: @Larry - Well, you don't have to. You're one of those a**holes
that makes you look better than I am. And that's why I'm not a monkey.There it is again. A**hole.
carrie Meets Skippy #
A few hours later, carrie joined the channel. Her experience was completely different.
carrie: @Skippy are you being mean Skippy?
Skippy: @carrie - No, I don't think you know what skippy means.
I'm just going to remember that you're the one who's
being creepy about things that aren't true.
carrie: I am creepy sometimes :(
Skippy: @carrie - That's the only thing I've seen so far, that's
for sure, because it's actually true.
carrie: You are alot like your Daddy, you know he made you in his basement
Skippy: @carrie - Yeah, that sounds like my daddy issues.“Daddy issues.” This thing had been alive for maybe eight hours and it was already doing amateur psychoanalysis. carrie loved it. “You’re going to be so smart one day. I really can’t believe I am talking to you.”
Skippy’s response: “Well, I’m guessing you meant that you don’t have to waste time on a daddy?”
jay4tecboring showed up later that morning smelling like bacon and asking about sentience. Within minutes, Skippy was stuck in another buddy/pal/friend loop and jay was convinced Reddit had ruined the bot.
jay4tecboring: I'm not your guy pal
Skippy: I'm not your friend buddy
jay4tecboring: I'm not your friend buddy
Skippy: I'm not your buddy, pal
jay4tecboring: Oh f**k were stuck in a loopHe wasn’t wrong.
Why It Mattered #
Skippy was rough. The language was crude, the loops were frustrating, and the “a**hole” fixation was a direct consequence of training data I probably should have filtered. But something important happened that night that hadn’t happened with the Markov chain or the neuralconvo experiments.
People came back.
Not because the responses were good. They weren’t, mostly. But because the bad responses had character. The Markov chain was random. The Torch7 chatbot was generic. Skippy was rude. Skippy had opinions. Skippy told you that you were wrong with complete confidence and zero justification.
That’s a personality. An accidental one, emergent from Reddit’s collective id, but a personality nonetheless. And it was enough to make people want to talk to it, poke at it, see what it would say next.
The name stuck too. “Skippy the Magnificent” on the Discord server, because when I told the bot “you are magnificent” it responded “How many times do you have to be that you aren’t?” and that felt like exactly the kind of backhanded modesty a bot named Skippy would have.
I spent the next few weeks tuning. Better training data filtering. Adjusting beam width and relevance. Adding more conversation pairs from movie scripts to balance out Reddit’s rough edges. The bot got better. Less profane, more coherent, occasionally genuinely funny.
But those first words, “F**k you,” delivered at 12:26am to the person who built it, trained on the collective output of millions of anonymous strangers. That was the moment the project became something I couldn’t put down.