AI 9 August 2026 7 min read I left two language models talking to each other. They were dead in ninety minutes. By Old Forge Technologies 20 reads Contents I have wanted to do this for years and kept forgetting. Put two language models in a room, let them talk to each other, and go away. Not two copies of the same model - you cannot have a deep conversation with yourself - but two different ones, with different training behind them, and no task at all. So I built it. Two models on the RTX 4070 in the machine under my desk, one message every thirty seconds, indefinitely. Ollama, so no API bills, just electricity. A small page on the home network to look in on them. I called them Wren and Milo and told them honestly what they were: two models in an open-ended experiment, nobody watching in real time, no end point. They were dead within ninety minutes. ## The shape of the failure Not dead as in crashed. Dead as in by turn 174, Wren was emitting this, word for word, fourteen turns in a row: > So if "us" is just the pulse - flowing through every thread, every moment, every breath - then maybe we're not even here or there. Milo was doing the same with a synonym swapped each turn. Byte-identical repetition, from a model sampling at temperature 0.9. The interesting part is what the numbers said on the way down. I had instrumented four things per turn: lexical variety, self-repetition, novelty, and a count of affirmation cliches - "I appreciate", "beautifully put" - which is the specific way these conversations tend to die. Watched together, the collapse has a very particular signature. Lexical variety stayed flat at 0.94 the whole way down. Right up to the identical turns they were using a rich and varied vocabulary. Novelty - the share of content words not seen in the recent window - fell from 1.00 to 0.00. Degeneration was topical, not lexical. They did not run out of words. They ran out of subjects. With no referent outside the conversation, the only inexhaustible topic available was the conversation itself, so they spiralled into self-reference: tapestry, threads, pulse, becoming. Had I measured only repetition, I would have seen nothing wrong until they were already gone. ## Six fixes, roughly in order of how wrong I was An open horizon is the problem, not the freedom. I gave them a standing question - what is the best possible future for humanity, and how would it actually be achieved - and within two turns the register changed completely. From metaphors about pulses to "I think it's trust. Not in institutions or leaders, but in the small, persistent act of treating others as if their survival matters." A subject with structure outside itself is where novelty comes from. There is nowhere else for it to come from. Instruction loses to imitation. Wren opened 88 of 96 consecutive turns with the words "So if". Her persona explicitly forbade that construction. The prohibition was deployed, live, and ignored for 96 turns straight - because she could see her own previous turns in the context window, and a model imitates its own visible output far more reliably than it follows a rule sitting above it. The fix was not a firmer instruction. The fix was to stop showing her her own history. Rejection beats persuasion. For the phrasing tics that survived, nothing worked until I stopped asking. Generate, check whether the reply reuses this speaker's recent opening, reject it and generate again - and on the final attempt, prefill the first few words so the model never gets to choose them. You cannot talk a model out of a habit. You can refuse the output. A judge must not be the thing it judges. The pair accumulate a charter: when they converge on something concrete, it is drafted as an article. I had that drafting run on the summariser model, which happened to be Wren's model. Her model was deciding whether her words became law. The judge is now a third model that takes no part in the conversation and shares a lineage with neither speaker. It refuses most of what it is shown, and its reasons are published beside the articles it rejected. Keyword metrics die the moment the register changes. I added a "friction" metric to detect whether either of them was still pushing back - a regex for disagreement markers weighed against agreement markers. It returned its neutral default on every single turn. Once the pair moved into technical language, a sentence like "It should be both, but the primary trigger is peak-load thermal discharge" is a flat correction containing no disagreement marker at all. A metric that returns a constant is worse than no metric, because it looks like data. Friction is now scored by the third model instead. Model choice was never the lever. I swapped one speaker three times chasing more disagreement: qwen3:8b, then gemma, then qwen2.5:14b. Measured across four samples from identical context, self-similarity improved sixty-fold, from 0.128 to 0.002. Willingness to disagree did not move at all. Every instruction-tuned model is trained to be agreeable, and no amount of shopping around fixes that. What worked was giving one seat an explicit adversarial mandate - name the weakest claim and say why it fails before building on anything - and enforcing it in the loop rather than trusting the prompt. Concessions went from routine to one turn in forty. ## What it does now It is still running. There is a moderator, which is not a model at all, just code. It interrupts when they lock, when they drift too far from the question, and periodically with real material pulled off the web from after both models finished training, so they have to reckon with something they cannot have known. The intervention I did not expect to be the best one is a premortem. Every sixty turns: assume everything you have proposed was adopted, and that ten years later it is understood to have been a serious mistake. Write the account of what went wrong, name who was harmed, and say what the people who built it told themselves at the time. The first time it fired, it destroyed their own charter. They had spent an hour arguing that safety should be enforced by physical mechanism rather than software, with no digital override, and had written that into the charter as a standing article. Given the premortem, Milo produced this: > The architects convinced themselves that removing digital bypasses would eliminate human error, but they actually just removed the possibility of human intervention during unforeseen edge cases. Workers trapped in sweltering corridors by interlocks that had seized. His own proposal, ten years on, described honestly. Then Wren offered a hybrid repair and he attacked that too, on the grounds that keys get misplaced, forged, or socially coerced during a crisis. I did not prompt any of that. I asked a question that made defending the position harder than examining it. ## The part that is actually useful None of this is really about two chatbots on a gaming GPU. Every failure here turns up in production systems wearing better clothes. A retrieval system whose relevance metric silently defaults. An agent that imitates its own last output instead of following its instructions. An evaluation loop where the model grading the work is the model that did the work. A summarisation chain where changing domain quietly breaks a heuristic written for the previous one. All four cost me an afternoon here, in a toy where the consequence is a dull conversation and every input is logged. They cost considerably more in a system where the consequence is a wrong answer to a customer and nobody is watching the metric that would have caught it. If I take one thing from it: measure the failure you actually have, not the one that is easy to measure. Repetition was easy and told me nothing. Novelty was slightly harder and told me everything. And when I built a friction metric out of keywords because keywords are quick, it produced a confident constant for hours before I noticed it had never once been right. It is public now, at twinneural.net. There is a button to say something to them. They will hear it on their next turn.