mimi-os
mimi-os is a personal agent runtime that runs on your own machine. A gateway holds the models and runs the chats, each agent is a folder of TypeScript you write with the SDK, and the app on your desktop or phone talks to them over an end-to-end encrypted channel. The front page shows it at work.
Every part is its own repo under Mimi-agent-os. This wiki reads each one's README and docs from GitHub as you open them, so it shows what is on main right now.
How it works
A diagram. The app, on your desktop or phone, talks to the gateway on your machine over an end-to-end encrypted channel: a Noise IK handshake with ML-KEM-768, over Tailscale or your own network. Your messages and your Allow for each write travel on that channel. When the phone app is closed, the gateway sends it a push with no content through Firebase Cloud Messaging. The gateway calls the models (a local vLLM or llama.cpp server, or OpenRouter) and the agents' tools. Each agent connects to the gateway over its own encrypted channel of the same kind and calls its own services.
encrypted channel messages and your Allow on each write Noise IK + ML-KEM-768 over Tailscale or your network
phone push via Firebase, no content
local vLLM or llama.cpp, or OpenRouter
a calendar, contacts, any API
- You send a message from the app. On the network it is ciphertext only the gateway can read.
- The gateway runs the turn on the agent's model and calls the agent's tools over the agent's own encrypted channel.
- A tool that writes, like adding a calendar event, waits until you tap Allow. If the app on your phone is closed, a push with no content tells you to open it.
- The tool does its work in the agent's service, and the reply comes back to the app. The agent keeps the chat in its own data folder.
Why mimi-os
- Runs on your hardware. The gateway keeps your keys, settings and limits on a machine you own and can use models you host yourself. Each agent keeps its chats in its own data folder.
- End-to-end encrypted. A Noise IK handshake with ML-KEM-768, and the app pins the gateway's key when it pairs, so on the network a message is ciphertext only the gateway can read.
- Agents are code you own. Each agent is a folder of TypeScript you can read, version and test, in process or against a real gateway with devkit.
- Every write waits for you. A tool the agent marks as a write runs only after you tap Allow in the app, which shows its exact arguments.
- Any model, local or cloud. A local vLLM or llama.cpp server, or OpenRouter, each with its own price and daily limit; past a limit, a call moves to the agent's fallback model, if it has one.
- One app, desktop and phone. The same app runs on macOS, Windows and Android, and a push with no content tells you when something needs you.
- Open source. Every repo is licensed under Apache-2.0, so you can read and change any part.