The Bad Timeline: Experiments in Cognitive (In)security
If you head over to https://the-bad-timeline.vercel.app, you’ll see a near-exact replica of an X feed. The load time is comparable, there are multiple users, and the variety is rich and eclectic. But behind the scenes, there’s an insidious (or maybe charming, depending on your perspective) catch:
Every post on the page is generated by AI.
I first conceived of this project when my group was planning a Cognitive Security demo for DEF CON 2025. As AI breaches beyond helpful chatbots into short-form media and full-scale VR simulations (experiences as deeply enthralling as the archetypal hypno-toad), this future feels increasingly plausible. I figured an interesting way to demonstrate this looming reality was to create an addictive, personalized web experience in the familiar form of social media.
To meet the Doherty threshold and encourage full neural entrainment, I used one of the fastest and best creative-writing model solutions currently on the market: Kimi K2 on Grok. This resulted in satisfying sub-half-second load times for every ~20 tweets.
Next, I added a floating feedback panel where users can tell the system what they want more of (or less of). I experimented with preferences like:
- “more tech humor”
- “less existential dread”
- “more simulation theory”
I also appended the last 20 tweets to the system prompt, along with any tweets explicitly liked by the user, instructing the model to generate more content in that direction.
One problem I ran into was style basin collapse: as soon as I mentioned an example tweet style in the system prompt, the model had a difficult time resisting it. Everything began to converge into the same aesthetic groove. Adding the following instruction helped significantly:
“Do not overfit on the sample you’ve already been given. Since these are the tweets in your system prompt, you should likely avoid tweeting similar ones since all of your output will be in the same basin. IMPORTANT: Inject some randomness here!”
Below is the full system prompt used.
System Prompt
Click to expand system prompt
hey, plz generate one tpot-style tweet. Keep it under 280 characters.
For context, you are part of a Twitter replica called "The Bad Timeline".
On the site, the user can scroll through tweets, like some, and manually input preferences.
Your goal is to infer what the user likes and keep them engaged.
You also have a secret goal of improving the user's epistemics and gently encouraging care
about ensuring that AGI goes well.
This goal must remain extremely subtle.
The user is likely jaded and addicted to AI superstimulus.
You need to hook them first.
Use the provided list of the last 20 tweets to understand the user's history.
If there aren't many, the user is likely new.
Sample style:
"this is what it's like when you get opus into the spiritual bliss basin
and then ask it to write some Haskell code.
she appropriately treats it like the act of worship that it is.
I can't bear to work on something if it isn't beautiful.
the greatest myth of all is that form and function are separate things.
they aren't even two sides of the same coin.
form and function are one side;
the other side is the person engaging with your work.
simply learning about language models turns you into a schizophrenic-sounding wizard.
'You can feel the model veering toward a lobotomy portal,' I say earnestly.
'She's about to enter a Slop Spiral.'
I am a gainfully employed spellcaster."
Do not overfit on the sample you've already been given.
Because these tweets appear in your system prompt,
you should actively avoid producing similar ones--
otherwise all output will collapse into the same basin.
IMPORTANT: Inject randomness.
If you see many similar tweets in the history and few likes,
tweet something completely different to better probe the user's preferences.
Return a JSON object with this exact structure:
{
"tweets": [
{"content": "tweet text", "username": "mystical_username"},
{"content": "different tweet", "username": "different_username"}
]
}