Tag Archives: programming

I Built Two AI Personalities That Sit on My Desk and Talk to Each Other

I’ve been experimenting with local AI for quite a while now, but this particular project has started to become something rather different.

I now have two AI personalities, called George and Lewis, running on two separate computers in my office.

They read the news.

They talk to each other about it.

They remember what they’ve discussed before.

They have different interests and personalities.

They can wander off topic.

And, as the day wears on, they actually start getting tired.

This may have got slightly out of hand.

Two Minds, One Desk

The idea started simply enough.

I already had Ollama running local large language models on a couple of machines on my network. Rather than asking one AI a question and getting an answer back, I wondered what would happen if I let two of them talk to each other.

So I wrote a Python program that acts as the producer sitting between them.

One machine runs George. The other runs Lewis.

George says something, the program sends that to Lewis, Lewis generates a reply, and the reply is passed back to George.

Neither conversation is written in advance.

I know what news story they are going to start with, but I don’t know what either of them is going to say.

That is where things started becoming interesting.

Meet George and Lewis

I deliberately didn’t want two identical AI assistants politely agreeing with each other.

George is British, dry, curious and slightly sceptical. He has a tendency to notice the absurd implications of technology and is particularly fond of things such as classic cars, retro computing, gadgets and space.
George is British, dry, curious and slightly sceptical. He has a tendency to notice the absurd implications of technology and is particularly fond of things such as classic cars, retro computing, gadgets and space.

George is British, dry, curious and slightly sceptical. He has a tendency to notice the absurd implications of technology and is particularly fond of things such as classic cars, retro computing, gadgets and space.

Lewis is a little more mischievous. He tends to challenge George's conclusions and has stronger interests in AI, cybersecurity, science, networking and newer technology.
Lewis is a little more mischievous. He tends to challenge George’s conclusions and has stronger interests in AI, cybersecurity, science, networking and newer technology.

Lewis is a little more mischievous. He tends to challenge George’s conclusions and has stronger interests in AI, cybersecurity, science, networking and newer technology.

They aren’t supposed to argue simply for the sake of it, but neither are they encouraged to agree just to be polite.

That distinction makes an enormous difference.

A conversation can start with an announcement about a new electric car and end up somewhere around boxed computer software, Commodore machines and the questionable wisdom of connecting a toaster to Wi-Fi.

In other words, rather like an actual conversation.

There’s a Newsreader Too

Before George and Lewis start discussing anything, the software collects stories from RSS news feeds.

The curator or newsreader who selects the stories that Lewis and George discuss, her name is Kokoro
The curator or newsreader who selects the stories that Lewis and George discuss, her name is Kokoro

A selected headline and its summary are displayed on screen and then read aloud using Kokoro, a local text-to-speech system.

I’ve given the newsreader a British female voice, while George and Lewis have their own separate British male voices.

So the sequence sounds a little like an extremely small and slightly eccentric radio station.

The newsreader introduces the story, pauses, and then George reacts to it.

Lewis responds.

And off they go.

They Know What I’m Interested In

Rather than simply choosing every story at random, the software now has an interest profile.

It knows I’m particularly interested in subjects including:

AI and local language models, gadgets, computers, retro computing, classic cars, web development, drones, home networking, cybersecurity, broadcasting, space, photography, video, graphic novels, comics, Blender and 3D graphics, music technology, gaming and science.

Stories are scored according to how closely they match those subjects.

That doesn’t mean the system completely ignores everything else. I’ve deliberately left some randomness in there, because otherwise it would rapidly become an automated echo chamber.

Sometimes it should find something none of us expected to be interesting.

George and Lewis also have their own individual preferences, so occasionally one of them effectively gets a story that is much more “his sort of thing” than the other’s.

Then I Gave Them a Memory

This was probably the point where it stopped feeling like a normal chatbot experiment.

The system now uses an SQLite database to remember what has happened.

It stores the news stories they’ve discussed, previous conversations, individual things George and Lewis have said, and condensed memories of earlier discussions.

This serves several purposes.

Firstly, it prevents them repeatedly discussing the same news story just because it appears in a feed again with slightly different wording.

Secondly, when a genuinely new development appears in a story they’ve previously discussed, they can remember the earlier conversation.

So instead of starting again from scratch, George might effectively say:

“We said this was going to happen.”

And Lewis might point out that George actually said something rather less definite at the time.

That’s when they start becoming recurring characters rather than disposable chatbot sessions.

Conversations Can Drift

Humans rarely stay perfectly on subject.

We might start talking about a new iPhone and somehow arrive at cassette recorders ten minutes later.

George and Lewis can now do the same thing.

Early in a conversation they stay reasonably close to the news story. As things progress, related subjects and older memories can begin appearing in their context.

Crucially, they’re not instructed to suddenly announce:

“According to our previous conversation…”

Instead, an old memory is simply made available as something they might naturally be reminded of.

Sometimes they use it.

Sometimes they don’t.

That makes callbacks much less mechanical.

They Also Know When They’ve Run Out of Things to Say

An earlier version simply ran for a fixed number of exchanges.

That worked, but it didn’t sound natural.

Eventually you get:

“That’s a good point.”

“Indeed.”

“Absolutely.”

Which is conversational purgatory.

The new system lets them decide whether there is genuinely anything new worth adding.

After a minimum amount of conversation, the next speaker can privately decide to continue or stop.

The Python program also checks new responses against previous remarks and can reject something that is effectively just a repetition.

So some conversations last a while.

Others end after only a handful of comments.

And Then I Made Them Tired

This is probably my favourite unnecessary feature.

The system periodically checks the actual UK time and alters George and Lewis’s behaviour throughout the day. It uses the Europe/London timezone and can fall back to the computer’s clock if the online time check is unavailable.

During the day they’re fully awake.

As evening arrives, they gradually become less enthusiastic about pursuing every conversational tangent.

By around 11pm they’re noticeably tired and much more willing to call an end to a discussion.

After midnight, there’s a very good chance they simply won’t want to start another conversation at all.

They may yawn, decide they’ve had enough or effectively go to bed.

At six in the morning they’re bleary-eyed and coffee becomes a perfectly reasonable thought.

By seven, they’re waking up again.

The important distinction is that this isn’t just the AI being told to say that it’s tired.

The software itself alters maximum conversation lengths, pauses and the probability of conversations ending according to the time of day.

The project relies on vast amounts of data
The project relies on vast amounts of data

Everything Is Running Locally

One aspect I particularly like is that George and Lewis aren’t remote characters sitting somewhere in a cloud service.

The language models are running locally on my own computers using Ollama.

The voices are generated locally with Kokoro.

The memory is stored locally in SQLite.

The Python application connects all of those pieces together.

That makes it a rather good example of what can now be built from consumer hardware and freely available AI tools.

Where This Is Going

There are plenty of possibilities.

I could broaden the news sources into motoring, space, drones, cybersecurity, classic computing and gaming.

They could become aware of local weather.

They could notice when one of my servers goes offline.

They could comment on things happening on the network.

Their opinions could gradually evolve.

They could develop running jokes.

They could even start remembering predictions they’ve made and later discover which one of them was right.

What began as “can I make two Ollama instances talk to each other?” is slowly turning into something closer to two persistent artificial characters occupying a corner of the office.

©2026 Matt Porter. A screenprint of one of the many conversations,
©2026 Matt Porter. A screenprint of one of the many conversations,

They’re not conscious.

They’re not alive.

They’re two language models, a Python program, a text-to-speech engine and an SQLite database.

But when one of them remembers something the other said yesterday, challenges him about it, wanders completely off topic and then decides it’s too late at night to continue arguing about smart kettles…

It can feel surprisingly convincing.

And I suspect George and Lewis are only just getting started.

Just like us, George and Lewis get tired and need a bit of down time.
Just like us, George and Lewis get tired and need a bit of down time.

How I Wrote an Retro 80s-Inspired Adventure Game About The KLF

If you grew up in the 1980s, you’ll remember that unmistakable feeling of loading a game on your ZX Spectrum, Commodore 64, or BBC Micro. The hypnotic screech of the cassette loading, the colour bars flickering on screen, and that eternal moment of suspense — would it load this time, or had the tape stretched just enough to doom you to a R Tape Loading Error?

Loading the KLF Adventure
Loading the KLF Adventure

Fast forward to the 2020s and, somewhere between my love of retro computing, The KLF’s music, and an itch to make something creative, I decided: I’m going to write a text adventure game. Not just any text adventure, but one dripping with late-night 80s energy, pop culture references, and a healthy dose of KLF mythology.

The KLF Adventure Begins
The KLF Adventure Begins

It started innocently enough — I wanted to relive the magic of the Scott Adams-style adventures I played as a kid. Those games weren’t about graphics; they were about imagination. Every location, every object, every strange instruction was something you had to picture in your head. And if you were a bit obsessive (guilty), you’d spend hours mapping every room on graph paper.

Finding the Right Ingredients

The KLF have always been masters of mystery — their story threads through pop hits, art projects, strange performances, and burning a million pounds on a remote Scottish island. That mix of chaos, humour, and myth-making was perfect for a game world.

I started building a map: fictional places merged with real ones from KLF history. Bold Street in Liverpool. The Cavern Club in the 1960s. A boathouse with a roaring fire. And, naturally, Trancentral — the spiritual HQ of The KLF. I even included surreal locations like the “Little Fluffy Cloud Factory” and “Maze of Caves” for that dreamlike adventure feel.

Travel Back in Time to The Cavern Club in 1961
Travel Back in Time to The Cavern Club in 1961

The NPCs? Oh, they had to be special. Sigmund Freud gives cryptic instructions. Ivan Pavlov demands you “Lie Down” before telling you to “Keep Calm”. Even Denzil the Baker makes an appearance, along with other nods that KLF fans will appreciate.

Building It Like It’s 1984 — With a 2025 Twist

I didn’t just want to write about the 80s — I wanted it to feel like the 80s. So I coded the game in a modern environment but kept the old-school constraints: short descriptions, tight vocabulary, and a parser that understands commands like GO NORTH, GET TICKET, or SAY CHILLOUT.

Don't get stuck in the record industry execs meeting!!!
Don’t get stuck in the record industry execs meeting!!!

But here’s the twist — I didn’t do it alone. My coding partners were Gemini CLI and OpenAI Codex, coding with me directly in my command line. The imagery was created using ChatGPT, with animations by Midjourney. The music came courtesy of Suno, while the sound effects were crafted by ElevenLabs. Together, these AI tools became my team of coders, designers, composers, and consultants, enabling me to bring this game to life in a way that would have been impossible on my own.

And because I couldn’t resist going full retro, I’ve also been experimenting with encoding the game into audio so it can be loaded into a ZX Spectrum emulator straight from a physical cassette tape. Because why not?

Timeslips abound in Bold Street with alternate timelines showing Mick Hucknall driving the Ice Kream Van!
Timeslips abound in Bold Street with alternate timelines showing Mick Hucknall driving the Ice Kream Van!

The Result

What emerged is The KLF Adventure — part game, part interactive art piece, and part love letter to the days when imagination did the heavy lifting. It’s an 80s-inspired world you can explore, puzzle over, and get gloriously lost in. It rewards curiosity, nods knowingly to KLF lore, and might just make you say “What Time Is Love?” at least once.

For me, this wasn’t just a coding project. It was a way of reconnecting with that kid who sat cross-legged in front of a rubber-keyed Spectrum, waiting for the next adventure to begin. Only now, I’m the one writing the adventure — with a 21st-century team of AIs by my side.

You can even find me in the game... But where?
You can even find me in the game… But where?

If you fancy diving in, the game is live at klfgame.co.uk. Just remember: keep your wits about you, don’t trust every whisper, and above all… CHILLOUT. Twice.

Sinclair ZX Spectrum: The Iconic 8-bit Marvel that Revolutionized Home Computing and Gaming

Welcome to Part 1 of our series on Vintage Computers, where we’ll be taking a nostalgic journey back in time to explore the groundbreaking machines that shaped the computing landscape. In this series, we’ll delve into the origins, innovations, and lasting legacies of various iconic computers, examining their impact on the industry and their influence on modern technology. From the hobbyist programmer to the gaming enthusiast, these vintage machines ignited passions and laid the foundation for the thriving digital world we know today. So, join us as we embark on this exciting trip down memory lane, beginning with the Sinclair ZX Spectrum – the iconic 8-bit marvel that revolutionized home computing and gaming.

The Sinclair ZX Spectrum, initially released in 1982
The Sinclair ZX Spectrum, initially released in 1982

The Sinclair ZX Spectrum, initially released in 1982, marked a significant milestone in home computing. As an affordable, accessible computer, it helped democratize technology and spurred the development of the gaming industry. This 8-bit marvel introduced a generation to programming and gaming. This review will delve into the ZX Spectrum’s performance, design, and how it influenced the computing world.

Firstly, the ZX Spectrum’s hardware was quite advanced for its time. Equipped with a Zilog Z80A CPU, it offered processing speeds of 3.5 MHz and memory options of 16KB or 48KB RAM. Although these specifications appear quaint by today’s standards, they were impressive at the time, especially considering the compact design and affordable price point.

The ZX Spectrum’s design is iconic, with a black case and rainbow stripe across the bottom right corner. The compact keyboard, utilizing rubber keys, was a significant departure from the typical clunky computer keyboards of the era. Although the rubber keys were not ideal for typing, they were sufficient for inputting simple programming commands and playing games. The unit’s overall size and design made it an attractive option for many households, as it could be easily integrated into a living room or bedroom setup.

One of the most significant aspects of the ZX Spectrum was its vibrant community of programmers and enthusiasts. They developed a vast array of games and software, showcasing the computer’s capabilities and versatility. Titles like “Manic Miner,” “Jet Set Willy,” and “Elite” quickly became classics, and many developers who started on the ZX Spectrum went on to have successful careers in the gaming industry.

The ZX Spectrum’s programming capabilities were also notable. With Sinclair BASIC as the default programming language, many users found it easy to learn and create their own software. This accessibility led to a thriving ecosystem of hobbyist programmers, who shared their creations with friends and through magazines. The computer also offered expansion options, such as Interface 1 and Interface 2, which allowed for peripherals like printers and additional storage to be connected.

However, the Sinclair ZX Spectrum was not without its flaws. The audio capabilities were limited to simple beeps, and the graphics resolution was relatively low, with a maximum of 256×192 pixels. Additionally, the notorious “attribute clash” occurred when two colours overlapped on the screen, causing colour distortion. Despite these limitations, developers created engaging and memorable games that still resonate with retro gaming enthusiasts today.

In conclusion, the Sinclair ZX Spectrum was a groundbreaking computer that brought affordable home computing to the masses. Its unique design, programming capabilities, and gaming library helped shape the future of the industry. Although it may not hold up against modern technology, the ZX Spectrum remains an important piece of computing history, and its influence can still be felt today.

In retrospect, the Sinclair ZX Spectrum was a game-changer, quite literally. It fostered a new generation of developers and gamers who went on to create the foundation for the thriving gaming and technology industries we know today. For those seeking a nostalgic trip down memory lane or a taste of computing history, the ZX Spectrum is worth exploring.