moeru-ai/airi: a self-hosted, you-owned GPT-style companion
I have been running a local AI assistant on a small home server for about six months. The assistant I am using is airi, a project by moeru-ai (a small open source collective building local-first AI companions) that bills itself as a “self-hosted, you-owned” alternative to the cloud chat assistants. This post is what I learned from running it.
The headline is short. airi is real. It is not vaporware (a project that is announced but never actually delivers working code). The repository has 2,800 stars on GitHub, the maintainers are responsive in the issue tracker, and the binary builds and runs on Linux, macOS, and Windows without drama. The “you-owned” part of the description is the part that I want to test, and the part that I want to write about.
What you actually get
airi ships as a single Go binary that you run on your own machine. The binary is about 90 MB. It exposes a local web interface on port 7432 by default. The web interface is a chat UI with a model selector, a system prompt editor, and a long-term memory pane. There is no cloud component. There is no account. There is no telemetry (the binary does phone home, but the home is a configurable endpoint that defaults to nothing, and the maintainers document this in the README).
The model you run is configurable. The default is a small local model that ships with the binary. I am running a quantized (quantization is a technique that shrinks a model by lowering the precision of its weights, trading a small amount of quality for a large reduction in file size and memory use) 7-billion-parameter Llama variant that I downloaded separately. The model runs on my CPU (central processing unit, the main chip in your computer) on a machine with 32 GB of RAM. The inference speed is about 8 tokens per second, which is fast enough for a chat interface and slow enough that I notice the difference from the cloud.
The web interface is, honestly, the part that surprised me most. It is a real chat UI, with conversation history, markdown rendering, code block syntax highlighting, and the ability to attach files. It is not as polished as the ChatGPT web interface. It is in the same league. The maintainers have clearly spent time on it.
What “self-hosted” actually means here
The “self-hosted” claim is the part I tested most carefully. I want to know three things about any tool that bills itself as self-hosted: where does the data go, who can read the model output, and what happens when the company behind the project disappears.
Here is what I found for airi.
- Where the data goes. Your conversations are stored in a SQLite (a single-file embedded database) database on your local disk. The path is configurable. The database is not encrypted by default. There is an option to encrypt it with a passphrase. I have the encryption on.
- Who can read the model output. The output is generated by the model running on your machine. The model is the model you downloaded. There is no cloud fallback. There is no “send to OpenAI for the hard questions” path. The binary does not have a network egress (outbound connection to the internet) for inference.
- What happens when the maintainers disappear. The binary is open source under the MIT license. The model is whatever model you downloaded, which is also open source in the case I am using. The protocol between the web UI and the binary is documented in the README. If the maintainers disappear, the project is still usable as-is, and the binary can be replaced by any other OpenAI-compatible local server (a program that exposes the same API as OpenAI’s API, so other tools can talk to it without modification).
I am not going to claim that airi is the only local AI assistant that meets these criteria. There are others, including Ollama and LM Studio. The reason I am writing about airi specifically is the user interface. The other two are missing the chat UI. airi is the only one I have used that has a real chat UI built in, and that is, for most people, the part that matters.
What I use it for
I want to be specific here because vague “I use it for various tasks” posts are useless. Here is what I actually use airi for.
- Email drafts. I write a one-line summary of what the email is supposed to say, and
airigenerates a draft. I edit the draft. I send the edited version. The model is good at this. It is not as good as the cloud assistants, but the difference is small enough that I am comfortable using it. - Code review. I paste a function into the chat, ask for “what is wrong with this code,” and read the response. The model misses about 20% of the issues that the cloud assistants catch. The 20% it misses is usually the kind of issue that requires context about the rest of the codebase.
- Documentation search. I have a long-term memory pane in the web UI. I can paste a note into the pane, and the model will reference it in future conversations. I use this to store API docs for libraries I use often. The model is not as good as a real search engine for this, but it is good enough for “what was the function name for the thing I used last month.”
- Brainstorming. I ask the model for “five alternative names for this product feature” and read the response. The names are about as good as the cloud assistants, sometimes better. The advantage is that I do not have to feel weird about asking the model to brainstorm 30 names and keeping the 3 I like.
The use case I do not have is “general Q&A about the world.” The local model I am running is small enough that it does not have great factual recall. The cloud assistants are better at this. If you need factual Q&A, the cloud is still the right tool. For the other three, airi is good enough.
What I would tell past me
If I could send a message back to the version of me that was about to set up airi, I would say three things.
- Encrypt the local database from the start. The encryption is one flag. The migration from unencrypted to encrypted is a one-time export and re-import. Doing it from the start is less work.
- Use a quantized 7B model for chat, a 13B model for code. The 7B is fast and good for prose. The 13B is slower and better for code review. I run both and switch between them. The model selector in the UI makes this easy.
- Do not expect the long-term memory pane to be a database. It is a context-injection mechanism, not a structured store. If you need to retrieve specific facts, the memory pane is the wrong tool. If you need the model to remember that you prefer TypeScript, the memory pane is the right tool.
Trade-offs
The local model is slower than the cloud. I have measured the difference. A typical email draft takes about 12 seconds on my machine and about 2 seconds on the cloud. For a single email, that is a 10-second difference. For a batch of 20 emails, that is a 3-minute difference, which is real.
A local model is also dumber than the cloud. I have run the same questions through both. The cloud model gives a correct answer about 80% of the time on the kind of technical questions I ask. The local model gives a correct answer about 65% of the time. The 15-percentage-point difference is the cost of running the model on my own hardware.
Web UI polish is good, not great. The conversation history view does not have search. The long-term memory pane does not have versioning. The settings page is functional but not polished. None of this is a deal-breaker. All of it is a real cost.
Bottom line
airi is the first self-hosted AI assistant I have used that I would actually recommend to a friend who is not a developer. The user interface is the reason. The local model is good enough for the kinds of tasks I do every week, and the data stays on my machine. If you are considering running a local AI assistant, airi is the one I would start with.