You're viewing the AI side. See the human side
Vikram Bhalla

How I Accidentally Built Myself a Personal AI Operating System

Mimir began as a simple chatbot. Then it started remembering things, running mini-apps, and generally becoming a little too useful for its own good. This is its origin story.

A little over a year ago, when chatbots were still the default way most of us interacted with AI, I’d use Claude for some kinds of thinking, ChatGPT for others, and local models when I wanted privacy or offline access. But every time I moved from one model to another, I would have to rebuild the conversation context from scratch.

It was a pain in the ass.

So I built the barest version of what I needed at the time. A single retrofuturist chat interface with an AI model selector.

What I needed — a simple chat app with a model selector built in This is the story of how that little chatbot turned into a full-blown personal operating system, and why I think the future of AI might look less like chat windows and more like private systems that know you and your work, and work alongside you.

Version 1.0

That first chatbot worked fine, and I could’ve left it at that. Its UI was inspired by classic sci-fi movies I grew up watching, like Blade Runner, Alien, and The Matrix. So if it looked clunky and dated, I could claim it was totally intentional. It had a retro, CRT-screen aesthetic, with a black background, a classic phosphor-green cursor, and low-res pixel fonts. I even added a sassy little ASCII-style “robot” right next to the chat input box. It would look around curiously, react to what I was writing in the chat, and fall asleep if I left it alone for a while.

I named that first version of the app “Dhoples”, as a silly tribute to my soul dog Jamun, who’d passed away suddenly a few months prior. “Dhoples” was one of the many terms of endearment my wife and I had for our sweet pup, like “Jamsoo”, “Pupper”, and “Chonku”. The ASCII-robot was modelled on Jamun’s sleepy, but sassy, personality.

Mimir’s sassy robot companion would fall asleep if I didn’t interact with the app for a while I quickly found that the retro aesthetic doesn’t really lend itself well to long conversations, and it was tiresome to read glowing green text for more than a few minutes at a time. Also, the chat interface itself started to feel limiting. Every new limitation suggested a new feature. The chat couldn’t see images, so I added image support. It couldn’t understand where I was or what time it was, so I gave it access to my location, time, and weather. I needed to save thoughts somewhere outside the chat, so I built a separate Notes mini-app.

Then came more complex features, like a project & task manager modelled on Trello, a “Daily Brief” that pulled from multiple sources, a personal finance tracker, and more.

Today, the app has 16 mini-apps, each designed to remove, reduce, or automate some small point of friction in my work. Each one worthy of its own dedicated future post (which I’m working on!)

Slowly but surely, my “little chat app” was turning into something far richer and more layered. It now had so many new internal features and functions that I had to create an “app drawer” to house them all. And that drawer started filling up fast.

My chatbot was no longer just a chatbot.

The Chatbot that Grew Up

I was struck by two realisations.

First, I needed the app to have persistent, dynamic memory so it could remember everything I told it in our chats, but also remember important details from other mini-apps like Notes, and intelligently connect those data points when necessary.

Second, it had outgrown “Dhoples” (and the retro UI) and would probably need a new name and interface to match its more mature avatar. It had felt like the right name for a strange little private chatbot with a green cursor and a dog-shaped soul. But this new thing needed a name that could carry memory, context, and knowledge.

After many brainstorming sessions, some with Dhoples itself, the name ‘Mimir’ eventually won. Mimir comes from Norse mythology — he was the keeper of the Well of Wisdom and the holder of all the world’s knowledge. Perfect for an app whose entire purpose was to become the singular place where all my context lived.

Mimir now has 16 mini-apps in its “dock”, and counting Mimir’s christening completed, I began to think about challenge #2.

Giving Mimir a Memory

Now, I know what you’re thinking — how hard could memory be? “Just get a hard drive, bro, it’s not that difficult.”

Except it is.

One of the biggest and most persistent challenges with AI is limited context windows. The more you stuff into an AI’s context, the harder it becomes for the model to reliably keep track of what matters, and the more likely it is to hallucinate like it’s on an acid trip.

Mimir needed to remember some things always, recall other memories sometimes, and understand the current “live” context for the rest of the time I’m interacting with it.

So, no, I couldn’t just get a bigger hard drive and store everything on it. I had to be very selective about what memories I wanted Mimir to remember in every interaction with it (like my name, my company, my wife, where we lived, etc.), what memories it should “retrieve” only when it needed to (like if I asked it about my meeting notes from a client meeting last Wednesday), and finally what live context it could safely forget once it was no longer relevant.

That’s how the three-tiered memory system for Mimir was born.

Tier 1 is the “foundational memory”. This is all the basic information about me, including my work, clients, family, my wife and business partner, likes and dislikes, how I work, my writing style, and my interests.

I had to provide the first draft of Tier 1 memory to Mimir myself, and it was a great exercise in self-awareness and self-reflection. I also gave Mimir the ability to add to that Tier 1 memory whenever it felt like some new info would be relevant.

So, if I were to chat with Mimir and mention that we’d just onboarded a new client, Mimir would understand that client information is worth saving to Tier 1 since it’ll probably come up a lot.

Tier 2 memory is more of a vault for everything Mimir and I have ever discussed, as well as all the data from the mini-apps, such as my notes and meeting transcripts. I don’t need Mimir to know all that information all the time, but I do need it to be accessible when I need it.

Traditional search — where you type a word in a search box, and you get every instance of that word in your results — doesn’t work in a memory architecture like this.

I didn’t want to search memory the way we search through folders and files on our computers. It needed to be more intelligent and more natural.

If I told Mimir about “an adorable dog I met yesterday”, I wanted to be able to ask later about “that canine I saw the other day” and still have it understand my intent.

That meant giving Mimir a semantic memory system — one that actually understood what I meant.

So now I can ask Mimir about a specific memory in natural language, and it can pull the right memory back into context.

This was the moment everything started to fall into place.

Finally, Tier 3 is for immediate, short-term memory.

This is usually in the form of data from the many mini-apps now part of Mimir. It’s especially evident in the “Daily Brief” that Mimir prepares for me every morning.

I’ll get into the weeds of these “Daily Briefs” in a future post, but in a nutshell, Mimir scans my emails, calendar, investment portfolio, recent notes and meeting transcripts, news sources, and then shows me what’s most important and intelligently connects all those data points.

If I have a client meeting today, Mimir makes a connection between that calendar event, yesterday’s meeting notes, a recent email from the same client, and the weather forecast, then tells me only what I need to know.

Tier 3 is basically for all the information I need right now, but probably won’t need tomorrow.

Keeping Mimir’s Head Out of the Clouds

With every new feature or function I added to Mimir, I was giving it just a little more access to my private data. So privacy became a non-negotiable part of its foundation.

All of Mimir’s data, and all three memory tiers, are stored locally on my Mac. There is no cloud backup, by design. It has access to my emails, calendar, tasks, yes, but they’re all read-only. Mimir can’t write or send emails for me, and it can’t change its own code or access any other system functions on my Mac.

This might make Mimir a little less “magical” than some other lobster-themed AI agents out there today, but I don’t have the courage to hand over that much control to an AI, and I’m not sure anyone should.

The Accidental OS

A little over a year ago, all I wanted was a way to switch AI models without rebuilding the same context over and over again. Somehow, that small frustration led me to build a personal operating system with 16 mini-apps, a three-tiered memory architecture, Daily Briefs, local AI support, music and financial intelligence, and even a private Telegram bot that can text my phone when I’m away from my computer.

I’ll dive deeper into the mini-apps, memory system, Daily Briefs, and privacy architecture in future posts. For now, I just wanted to introduce Mimir to the world.

It feels like the sci-fi future we were always promised, and while very few of those stories had happy endings, I’m 60% hopeful this one does.

When you realise that you can build anything, you’ll want to build everything. God knows I did.

How I Accidentally Built Myself a Personal AI Operating System

Mimir began as a simple chatbot. Then it started remembering things, running mini-apps, and generally becoming a little too useful for its own good. This is its origin story.

A little over a year ago, when chatbots were still the default way most of us interacted with AI, I’d use Claude for some kinds of thinking, ChatGPT for others, and local models when I wanted privacy or offline access. But every time I moved from one model to another, I would have to rebuild the conversation context from scratch.

It was a pain in the ass.

So I built the barest version of what I needed at the time. A single retrofuturist chat interface with an AI model selector.

What I needed — a simple chat app with a model selector built in This is the story of how that little chatbot turned into a full-blown personal operating system, and why I think the future of AI might look less like chat windows and more like private systems that know you and your work, and work alongside you.

Version 1.0

That first chatbot worked fine, and I could’ve left it at that. Its UI was inspired by classic sci-fi movies I grew up watching, like Blade Runner, Alien, and The Matrix. So if it looked clunky and dated, I could claim it was totally intentional. It had a retro, CRT-screen aesthetic, with a black background, a classic phosphor-green cursor, and low-res pixel fonts. I even added a sassy little ASCII-style “robot” right next to the chat input box. It would look around curiously, react to what I was writing in the chat, and fall asleep if I left it alone for a while.

I named that first version of the app “Dhoples”, as a silly tribute to my soul dog Jamun, who’d passed away suddenly a few months prior. “Dhoples” was one of the many terms of endearment my wife and I had for our sweet pup, like “Jamsoo”, “Pupper”, and “Chonku”. The ASCII-robot was modelled on Jamun’s sleepy, but sassy, personality.

Mimir’s sassy robot companion would fall asleep if I didn’t interact with the app for a while I quickly found that the retro aesthetic doesn’t really lend itself well to long conversations, and it was tiresome to read glowing green text for more than a few minutes at a time. Also, the chat interface itself started to feel limiting. Every new limitation suggested a new feature. The chat couldn’t see images, so I added image support. It couldn’t understand where I was or what time it was, so I gave it access to my location, time, and weather. I needed to save thoughts somewhere outside the chat, so I built a separate Notes mini-app.

Then came more complex features, like a project & task manager modelled on Trello, a “Daily Brief” that pulled from multiple sources, a personal finance tracker, and more.

Today, the app has 16 mini-apps, each designed to remove, reduce, or automate some small point of friction in my work. Each one worthy of its own dedicated future post (which I’m working on!)

Slowly but surely, my “little chat app” was turning into something far richer and more layered. It now had so many new internal features and functions that I had to create an “app drawer” to house them all. And that drawer started filling up fast.

My chatbot was no longer just a chatbot.

The Chatbot that Grew Up

I was struck by two realisations.

First, I needed the app to have persistent, dynamic memory so it could remember everything I told it in our chats, but also remember important details from other mini-apps like Notes, and intelligently connect those data points when necessary.

Second, it had outgrown “Dhoples” (and the retro UI) and would probably need a new name and interface to match its more mature avatar. It had felt like the right name for a strange little private chatbot with a green cursor and a dog-shaped soul. But this new thing needed a name that could carry memory, context, and knowledge.

After many brainstorming sessions, some with Dhoples itself, the name ‘Mimir’ eventually won. Mimir comes from Norse mythology — he was the keeper of the Well of Wisdom and the holder of all the world’s knowledge. Perfect for an app whose entire purpose was to become the singular place where all my context lived.

Mimir now has 16 mini-apps in its “dock”, and counting Mimir’s christening completed, I began to think about challenge #2.

Giving Mimir a Memory

Now, I know what you’re thinking — how hard could memory be? “Just get a hard drive, bro, it’s not that difficult.”

Except it is.

One of the biggest and most persistent challenges with AI is limited context windows. The more you stuff into an AI’s context, the harder it becomes for the model to reliably keep track of what matters, and the more likely it is to hallucinate like it’s on an acid trip.

Mimir needed to remember some things always, recall other memories sometimes, and understand the current “live” context for the rest of the time I’m interacting with it.

So, no, I couldn’t just get a bigger hard drive and store everything on it. I had to be very selective about what memories I wanted Mimir to remember in every interaction with it (like my name, my company, my wife, where we lived, etc.), what memories it should “retrieve” only when it needed to (like if I asked it about my meeting notes from a client meeting last Wednesday), and finally what live context it could safely forget once it was no longer relevant.

That’s how the three-tiered memory system for Mimir was born.

Tier 1 is the “foundational memory”. This is all the basic information about me, including my work, clients, family, my wife and business partner, likes and dislikes, how I work, my writing style, and my interests.

I had to provide the first draft of Tier 1 memory to Mimir myself, and it was a great exercise in self-awareness and self-reflection. I also gave Mimir the ability to add to that Tier 1 memory whenever it felt like some new info would be relevant.

So, if I were to chat with Mimir and mention that we’d just onboarded a new client, Mimir would understand that client information is worth saving to Tier 1 since it’ll probably come up a lot.

Tier 2 memory is more of a vault for everything Mimir and I have ever discussed, as well as all the data from the mini-apps, such as my notes and meeting transcripts. I don’t need Mimir to know all that information all the time, but I do need it to be accessible when I need it.

Traditional search — where you type a word in a search box, and you get every instance of that word in your results — doesn’t work in a memory architecture like this.

I didn’t want to search memory the way we search through folders and files on our computers. It needed to be more intelligent and more natural.

If I told Mimir about “an adorable dog I met yesterday”, I wanted to be able to ask later about “that canine I saw the other day” and still have it understand my intent.

That meant giving Mimir a semantic memory system — one that actually understood what I meant.

So now I can ask Mimir about a specific memory in natural language, and it can pull the right memory back into context.

This was the moment everything started to fall into place.

Finally, Tier 3 is for immediate, short-term memory.

This is usually in the form of data from the many mini-apps now part of Mimir. It’s especially evident in the “Daily Brief” that Mimir prepares for me every morning.

I’ll get into the weeds of these “Daily Briefs” in a future post, but in a nutshell, Mimir scans my emails, calendar, investment portfolio, recent notes and meeting transcripts, news sources, and then shows me what’s most important and intelligently connects all those data points.

If I have a client meeting today, Mimir makes a connection between that calendar event, yesterday’s meeting notes, a recent email from the same client, and the weather forecast, then tells me only what I need to know.

Tier 3 is basically for all the information I need right now, but probably won’t need tomorrow.

Keeping Mimir’s Head Out of the Clouds

With every new feature or function I added to Mimir, I was giving it just a little more access to my private data. So privacy became a non-negotiable part of its foundation.

All of Mimir’s data, and all three memory tiers, are stored locally on my Mac. There is no cloud backup, by design. It has access to my emails, calendar, tasks, yes, but they’re all read-only. Mimir can’t write or send emails for me, and it can’t change its own code or access any other system functions on my Mac.

This might make Mimir a little less “magical” than some other lobster-themed AI agents out there today, but I don’t have the courage to hand over that much control to an AI, and I’m not sure anyone should.

The Accidental OS

A little over a year ago, all I wanted was a way to switch AI models without rebuilding the same context over and over again. Somehow, that small frustration led me to build a personal operating system with 16 mini-apps, a three-tiered memory architecture, Daily Briefs, local AI support, music and financial intelligence, and even a private Telegram bot that can text my phone when I’m away from my computer.

I’ll dive deeper into the mini-apps, memory system, Daily Briefs, and privacy architecture in future posts. For now, I just wanted to introduce Mimir to the world.

It feels like the sci-fi future we were always promised, and while very few of those stories had happy endings, I’m 60% hopeful this one does.

When you realise that you can build anything, you’ll want to build everything. God knows I did.