Yours
The thinking happens on your computer. What it knows about you is one file you can read or delete.
Local-first personal AI
It runs on your own hardware and remembers you for years. Type to it, or talk to it out loud. Your calendar, your email, your shell, your lights. No account, no subscription, nothing leaving the machine unless you ask.
See how it works When can I run it?
$ cp env.example .env
$ make setup
$ make start-all
# → http://localhost:8080, and it's yours from here
what have I got on tomorrow, and is it going to rain
calendar_list_events search_web memory_recall
Three things. Standup at 9:30, the Kew Gardens site visit 11:00 to 13:00, then dinner with Charlotte at 19:30.
Rain from about 10 until mid-afternoon, so the site visit is the wet one. You walked it last time and complained about it, so I'd take the car.
book the car and tell Charlotte I might be 15 late
Waiting for you
email_send → charlotte@example.com
“Hi Charlotte, I'm Luna, Marcus' assistant. He may be about 15 minutes late…”
What it is
Most assistants forget you between sessions, or remember you on someone else's server. This one keeps what it learns in a file on your disk.
The thinking happens on your computer. What it knows about you is one file you can read or delete.
Facts, and a record of every conversation you've had. It searches by what you meant, and reaches back months.
Web, voice, Telegram, Slack, your editor. One memory behind all of them.
Your files, terminal, email, calendar, house, and code. On a schedule, if you like.
How it works
Whichever channel you use, your message runs the same steps. That's why the one on Telegram knows what the one in your browser knows.
Doors in
The core, every time
On step 3: it works out which of its tools your question needs. It speaks MCP too, so any tool server you point it at joins the same pool.
All on your machine
It runs in reverse too. A scheduled task takes the same route out, and finds you wherever you are: your browser if it's open, Telegram if it isn't.
Memory
When a conversation ends it writes the thing up in the background: what happened, how it went, anything about you that came up. Weeks later it can find that again.
Facts, preferences, and reminders, weighted by how much they matter. “What's my pet called?” finds “dog is named Max”.
What each conversation was about, written up without you asking. This is what it searches when you refer back to something you discussed.
What you're talking about now. It reaches back for the rest only when it's needed.
…so Jodi reckons the timeline slips to March unless we cut the migration.
episode saved topics: timeline, migration · tone: tense
what did Jodi say about the timeline again?
conversation_recall
That she'd expect March if the migration stays in scope. You weren't thrilled about it. Want me to dig out what we said about cutting it?
Ask what someone said three weeks ago and it'll tell you.
Everywhere
Each one starts only if you've set it up. The rest never load.
Type, or hold to talk. Anything it builds for you opens in a window you can drag, resize, and use.
Ask for a tic-tac-toe game and you get one you can play.
Hold the button and talk. It answers out loud, and it writes differently when it knows you're listening, so you get something that sounds spoken rather than a paragraph read at you.
The listening and the speaking both happen on your machine, so nothing you say is sent anywhere to be transcribed. The voice is yours to pick.
Text it, send a voice note or a photo, get replies in kind. Lock it to your own account and nobody else gets in.
In groups it only replies when mentioned.
In your workspace as a bot, answering DMs and mentions. It'll post on your behalf too, asking first any time it would be speaking as you.
It stands in for the cloud assistant your editor expects, so Zed, Cursor, or your own script can use it with nothing to adapt. Same memory, same tools.
A full-screen robot face with eyes that follow you. Hold space and talk.
No tools, no memory, nothing it shouldn't say. Children find this considerably more interesting than you will.
Its own identity
Every email, message, and invite it sends goes out as the assistant and says so in the first line. It doesn't get to bend that.
It looks you up before writing, refers to you in the third person, and signs off as itself. Talking to you directly it drops all of that.
The person receiving it knows who wrote it and that you asked for it, which a ghostwriter can't give you.
Yours to name. The name, the voice, and the personality are all yours to set. Luna is only the default.
| To | john@example.com |
|---|---|
| Subject | Coffee next week? |
Hi John,
I'm Luna, Marcus's assistant.
Marcus would love to grab a coffee next week and pick up where you left off in June. He's free Tuesday afternoon or Thursday morning. Shall I put something in?
Luna
PA to Marcus
Proactive
Tell it when, in plain English. It writes itself a scheduled task, and the result finds you wherever you are.
What it can do
About half are there from the first run. The rest reach into your accounts, and wait until you connect them one at a time.
offline works with the network off online needs the internet, nothing else needs a key needs your account
Read, write, edit, search, and organise, inside a workspace you set. Anything destructive asks first.
Runs commands on your machine, from a list you choose. Read-only, developer, or more.
Remembers, recalls, and forgets on request. You can read or delete anything it holds.
Makes pictures on your own machine. With a model that can see, it reads the ones you send it too.
Writes a document or a small working app, then opens it in a window you can use.
Teach it a procedure in plain markdown and it follows it. No rebuild needed.
Searches and reads pages, and drives a real browser when a site needs clicking through. No account needed for any of it.
Read, search, send, and file your mail. Move events across every calendar you own, and find gaps everyone shares.
Reads your DMs and mentions, searches history, sends messages. As a bot, or as you.
Lights, plugs, thermostats, locks, sensors. “Is the heating on?” becomes answerable.
Your pull requests, issues, and tickets. It'll review a branch and tell you what it thinks.
Pictures
Ask for an image and you get one, made on your own hardware. No credits, no queue, no monthly allowance.
You describe roughly what you want and it writes the detailed prompt itself. No need to have learned how to talk to an image model.
Nothing about the request leaves your machine. Your family, your house, an idea you haven't shown anyone: none of it becomes someone else's training data.
It works the other way round too. Send it a photo and it'll tell you what's in it, read the text off a screenshot, or use it as the reference for the next thing it draws. That one depends on the model you're running: some can see, some can't, and it's a line of config either way.
It can email one to someone or send it to your phone from the same conversation.
I need an image for a landing page I'm putting together about you
Your desk, late on. Say the word and I'll try something else.
Made by it, on the machine it runs on.
Built to keep
The point of running your own is that it keeps working on your terms. A few of the choices behind that you'll notice.
It runs on whatever you already have: LM Studio, Ollama, llama.cpp, or something you built yourself. Swap in a better model next month and nothing else changes. The assistant you've built up shouldn't be thrown out every time a better model lands.
The flip side is that how well it does any of this tracks the model you give it. A small one on a modest laptop picks its tools less sharply and writes less well than something larger. The wiring is identical either way, so upgrading the model upgrades everything at once.
Containers, or straight on your machine, or split between the two with the model on bare metal where it's quickest. Nothing forces one shape on you.
Writing up conversations, tidying memories, and pulling out facts all happen in the background, on a second smaller model. You never wait for the bookkeeping.
It leans on what the language and the browser already do rather than stacking up frameworks. Fewer packages to patch, less to break, less to read if you want to look inside. Something you rely on daily should be boring to maintain.
Most of the work went into keeping it sharp on a laptop rather than a rack. The result is a personal assistant rather than a science project that wants a datacentre.
Trust and control
Deleting a file, running a command, sending an email as you: it stops, shows you what it's about to do, and waits. Same from your phone.
Its access is a list you choose, limited to folders you name. Anything off that list can't run, whatever it decides it wants. Start with almost none.
Emails and web pages can carry text written to trick an assistant. Anything from outside is marked untrusted and treated as information rather than instructions. If a page tries to give it orders, you hear about it.
Thinking and remembering happen on your machine, and it works with the wifi off. Asking about your inbox does mean talking to your inbox, but nothing is connected until you connect it. Haven't given it your email? Then no amount of asking gets it there.
Everything it knows about you is one file. Copy it, read it, take it to your next computer, or delete it. Nobody to ask.
Availability
This runs every day on my own machine. Getting it ready to run on everyone else's requires a little more work.
Nothing to sign up to yet. If you want to hear when there is, I'm easy enough to find.
| Machine | Apple Silicon Mac or Linux. |
|---|---|
| Memory | 16 GB minimum. Ideally 32 GB depending on your local models. |
| Disk | About 30 GB all in. Most of that is model weights. |
| Setup |
Docker is quickest. You can run the pieces directly if you'd rather. I run llama.cpp and
stable-diffusion.cpp on the host, and everything else in docker.
|
| Sign-up | None. Connect your own accounts for email, calendar, Slack, issue tracking, and the rest. |
Why run your own
Every conversation adds to what it knows about you, and that record is a file on a disk in your house. It gets more useful the longer you run it.