Local-first personal AI

An assistant that lives on your computer instead of someone else's.

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?

zsh
$ cp env.example .env
$ make setup
$ make start-all

# → http://localhost:8080, and it's yours from here
  • 100%on your machine, works offline
  • Dozensof tools, before you add any
  • Anywhereyou already are
  • 1file holds its memory of you

What it is

Four things make it different from a chatbot with a local model.

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.

01

Yours

The thinking happens on your computer. What it knows about you is one file you can read or delete.

02

Remembers

Facts, and a record of every conversation you've had. It searches by what you meant, and reaches back months.

03

Reachable

Web, voice, Telegram, Slack, your editor. One memory behind all of them.

04

Acts

Your files, terminal, email, calendar, house, and code. On a schedule, if you like.

How it works

The pipeline every message goes through.

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

  • Web UI voice or text
  • Telegram text, voice notes, photos
  • Slack DMs and mentions
  • Your editor while you're coding
  • Robot mode hold space, talk

The core, every time

1 Listen, if you spoke rather than typed
2 Remember who you are and what you've said before
3 Work out which of its tools this needs
4 Go and do it, however many steps that takes
5 Check with you before anything it can't undo
6 Answer, out loud if you spoke

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

  • The model the part that thinks
  • A second, smaller one doing the background work
  • Its memory of you a file you own
  • Its tools plus any MCP server you add
  • Its ears and voice

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

Memory that outlives the session.

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.

Declarative

Things it knows

Facts, preferences, and reminders, weighted by how much they matter. “What's my pet called?” finds “dog is named Max”.

Episodic

Things you did together

What each conversation was about, written up without you asking. This is what it searches when you refer back to something you discussed.

Working

The thread you're on

What you're talking about now. It reaches back for the rest only when it's needed.

Ask what someone said three weeks ago and it'll tell you.

Everywhere

Reachable wherever you are, with one memory behind it.

Each one starts only if you've set it up. The rest never load.

The web UI

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.

Out loud

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.

Telegram

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.

Slack

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.

Your editor

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.

Robot mode

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

It writes as itself, on your behalf.

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.

Proactive

It starts the conversation.

Tell it when, in plain English. It writes itself a scheduled task, and the result finds you wherever you are.

  • “Every weekday at 7, brief me on my calendar and the news.”
  • “Check for new email every ten minutes, only tell me if it matters.”
  • “Tuesdays, draft me something to post about AI. Don't send it.”

What that's like to live with

  • You describe the job and the timing in your own words. No syntax, no form.
  • Shut your laptop and missed jobs run once when it wakes.
  • It finds you in your browser, or on Telegram if you've gone out.

What it can do

Plenty of tools, and it picks them itself.

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

Files

offline

Read, write, edit, search, and organise, inside a workspace you set. Anything destructive asks first.

Your machine

offline

Runs commands on your machine, from a list you choose. Read-only, developer, or more.

Memory

offline

Remembers, recalls, and forgets on request. You can read or delete anything it holds.

Images

offline

Makes pictures on your own machine. With a model that can see, it reads the ones you send it too.

Artefacts

offline

Writes a document or a small working app, then opens it in a window you can use.

Skills

offline

Teach it a procedure in plain markdown and it follows it. No rebuild needed.

The web

online

Searches and reads pages, and drives a real browser when a site needs clicking through. No account needed for any of it.

Email and calendar

needs a key

Read, search, send, and file your mail. Move events across every calendar you own, and find gaps everyone shares.

Slack

needs a key

Reads your DMs and mentions, searches history, sends messages. As a bot, or as you.

Your house

needs a key

Lights, plugs, thermostats, locks, sensors. “Is the heating on?” becomes answerable.

Code and issues

needs a key

Your pull requests, issues, and tickets. It'll review a branch and tell you what it thinks.

Pictures

It draws, and it can see.

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

A dark study at night. A laptop glows on a wooden desk beside a warm
                         lamp, with a full moon visible through the window.

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

What you'd notice after a month.

The point of running your own is that it keeps working on your terms. A few of the choices behind that you'll notice.

You're not tied to one model

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.

Run it however suits your machine

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.

Remembering doesn't slow you down

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.

Very little to go wrong

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.

It stays quick on ordinary hardware

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

It has your shell and your inbox. These are the limits on it.

Destructive actions need approval

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.

It can only run what you've allowed

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.

It doesn't trust what it reads

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.

What it can reach

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.

Your data is a file

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

Getting it ready to share.

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.

marcusmichaels.com

Whether it'll run on your machine

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.

Get in touch

Allow this command?

It wants to run something on your computer. This is what you'd see.

git -C ~/work/site status --short

Checking whether the site has uncommitted changes before building.

It tells you what it wants and why, every time.