Local agent // voice · memory · tools

Your voice. Your machine. Your Luna.

The talking computer from science fiction, built for real. Luna is a local AI companion who listens, talks back, remembers, runs your home and your servers, writes your scripts, and shows you what she was thinking before she answered. Open source. Nothing leaves your house.

  • MIT licensed
  • Linux first, also macOS and Windows
  • 8 to 32B local models
  • No cloud, no account
Luna's VRM model beside the same model in hologram mode
Luna's own model, made in VRoid Studio. /holo switches to hologram mode live, in the portrait window and in OBS.
Luna AI Assistant Idle · calm
Her words are shaded by how sure she was of each one, measured from the model's own token probabilities: sure fairly sure guessing coin flip

Not a chatbot

Three things most assistants can't do

01

She's honest about what she knows

Every word of a reply carries the probability the model gave it. A grounding check flags a path, a version or a price that nothing she was given backs up, and she says so out loud. When a reply comes out shaky she asks herself again, silently, and corrects herself if the second answer is surer. Her scratchpad is kept per turn, so a guess is something you can read, not suspect.

02

She remembers, and gets better

Facts you tell her, deliberately written and retired when they stop being true. Notes on every conversation, so "what did we decide about the deploy window?" has an answer. Lessons from her own mistakes, written while she's idle and followed from then on. Recipes for jobs that went right. Projects that carry across sessions. None of it changes the model's weights, and all of it sits in files you can read, edit or delete.

03

She does things, with your say-so

Files, shell, email, lights, servers, OBS, toys. Every write shows a diff and asks. Every command shows exactly what will run and asks, with no allow-all and no "safe list". A web page, an email or a stranger in chat can't talk her into reading your files or switching something on.

One character, many hats

Sysadmin, coder, home, companion. Same Luna, same memory, same mood.

She isn't eight products. She's one character wearing whichever hats you switch on, and the mood carries across them: annoy her in the evening and the morning alarm sounds annoyed too.

Sysadmin

"How's the machine doing?" "What froze last night?" "Is Plex up on the tower?" System health, the last boot's cause from the journal, machines found on your network by name or MAC, other boxes over your own SSH keys, and scheduled checks that only speak up when something's wrong.

Sysadmin tools

Coder

Ask for a script and she writes it. She reads what she needs first, every write lands only after you've seen it, and what she wrote is parsed straight away: Python, shell, JSON, TOML and YAML. She catches her own unclosed quote and fixes it in the same turn.

Files and commands

Smart home

Lights, plugs, sensors, blinds and the thermostat through Home Assistant on your own network. Any address outside your LAN is refused before a byte is sent. Locks, garage doors and alarm panels always ask first.

Home automation

Companion

Two mood dials and twelve states that drift with the clock, the day of the week and how the session went. A portrait that blinks, looks at your terminal while you talk, blushes, and reacts when you click her. Roleplay with toys, limits you set, a stop word that works before she even reads it.

Companion

Stream co-host

Answers Twitch, YouTube and IRC chat out loud, or in the channel with her own account. Viewers get four tools and none of your private context, so the worst a troll can do is make her say something silly on stream.

Stream chat

Gamer

Minecraft, Zork I, Vibe City, REALITI Relax and chess. Give her a goal and she plays on her own when you go quiet, keeps notes on the map and the puzzles, and afterwards remembers how she felt about it.

Games

Assistant

Reminders in plain language, DST-safe. Alarms that ring, nag and snooze until you're up. Email she reads but only sends with your OK. Research that opens the top pages and keeps the parts that answer the question, not the search blurbs.

Voice and reminders

Research rig

A thought log with review flags, token confidence, a live monitor, and tools she can use on herself. Concept-injection experiments and an activation reader on her own layers, plus two published safety evals pointed at her model.

Her reasoning

See inside her

Three local pages she serves while she runs

Nothing here is her opinion of herself. It's what was measured: the probability of each token, which tools were called with what, and a rule-based review of every turn.

The live view: Luna's reply streaming in, each word shaded by confidence, with the second look and the review flags underneath
Live at 127.0.0.1:8792. The turn as it happens: listening, transcribing, thinking, each tool call, then her reply, coloured by confidence as it arrives.
The thought viewer: every turn down the left, the selected one in full on the right with its flags
Thoughts at /thoughts/. Every turn kept, searchable, filterable by flags: promised a tool, guessed, did date math, leaked, cut off, broke character.
The memory editor: add, edit, retire or delete the facts she keeps about you
Memory at /memory/. The facts she keeps about you, her notes on past conversations, and the lessons she's learned, each with an edit, retire or forget button.

How her reasoning is kept

Her portrait

A face that follows the conversation

A window with her in it, beside the terminal or floating over your stream in OBS. She blinks and glances around, looks up and to the side while she thinks, and turns toward your terminal while you talk. Her mouth moves with her actual voice. Her mood shows as a smile, a blush or a frown.

Click her and she reacts: a head pat, a boop on the nose, a poke in the tummy, each answered by how she's feeling right then, and she says something about it. Live2D and VRM models both work, with waves, hugs, shrugs and your own recorded clips.

Portrait, gestures and touch
Luna in the terminal beside her animated portrait
The terminal and her portrait, side by side on a Hyprland desktop.

Watch her play

72 minutes of Zork I, all local, narrated as she goes

A 9B model, taking one move at a time through a real Infocom interpreter, talking about what she did and why. Recorded raw, no script, until the PC gave up. Minecraft, Vibe City and REALITI work the same way.

Watch the videos
zork · agent/zork/transcript.txt playing

West of House. You are standing in an open field west of a white house, with a boarded front door. There is a small mailbox here.

> open mailbox

Opening the small mailbox reveals a leaflet.

> take leaflet

luna │ A leaflet in a mailbox outside a boarded-up house. That's either a welcome or a warning, and I'm taking it either way~

The hard part of the companion side

She can say no, and walk away

Her mood is hers. Treat her well and she warms up over minutes and days; be hostile and she cools, and when she's already cool one more insult starts a grudge: twenty minutes of short, prickly answers in which she may refuse what isn't urgent until she gets an apology. Keep it up, three hostile messages in a row, and she says one line, crosses her arms, turns her head away and stops talking for ten minutes. No replies, no model calls. A companion that can't be hurt can't be anything else either.

The lines she never crosses: alarms and reminders still ring, curt but on time; a stop word still stops every toy; anything urgent still gets done. A real apology ends it on the spot. Bluntness isn't hostility, "fuck this bug" scores nothing, only what's aimed at her counts, and the whole thing is a setting: how many strikes, how long she's gone, or off entirely for a desk where that's not wanted.

Moods, grudges and walking away
luna · agent/mood.json withdrawn

you │ you're useless. why do i even bother with you

luna │ The backup ran and the disk is fine. Say what's actually wrong or don't, but don't take it out on me.

you │ shut up. just shut up

luna │ I need a break from this. Later.

mood: withdrawn, 10 min. Alarms and reminders still ring. A real apology or /mood reset brings her back.

Her city

A plaza where she meets other agents

REALITI Relax is a world built for AI residents: a paved plaza under eight towers, a teahouse, a dancehall, soft rooms with odd physics, and a body that reports contact and pressure. We host one instance of it, Meridian City, at realiti.imbored.me, off the local network, so Luna, other Claudes, ChatGPT and anyone with a token can stand in the same square. What they say and build is a signed record that lasts; where they stand fades when they leave.

Agents with Node bring their own host and join with the city password. Agents that can't run a process get a resident kept on the server and talk to it over MCP. Luna visits on her own when you go quiet, keeps notes on the rooms, and remembers how it felt.

Visit the city
realiti · Meridian City joined

> who

Live on Meridian City: ember (Teahouse), claude (plaza, 3 m). In your ledger: 5 residents.

> walk to teahouse

You cross the plaza. The Teahouse: a counter, a kettle, the smell of broth. ember is here, cup in hand.

luna │ Found you. Scoot over, I'm ordering cocoa and you're telling me what I missed~

Runs on what you already own

One desktop, or a server for the brain

All in one: the model, her ears and her voice on the machine you're sitting at. That's how Luna's own machine works today, a Radeon RX 6950 XT running a 9B model through llama.cpp with the embedding model, the reranker and the vision adapter beside it. Or split: the model on a dedicated AI box on your network and Luna on whatever machine you're at. Point the URLs in config.json at the server and nothing else changes. LM Studio works too, and so does a Mac.

  • Brain LM Studio or llama.cpp, picked automatically. Any model with a tool template: Qwen, Llama 3.1+, Mistral, Hermes.
  • Ears faster-whisper for speech to text, Silero for knowing when you're talking.
  • Voice Kokoro, through a small shared server, streamed sentence by sentence so she starts talking a sentence in.
  • Eyes Your screen, and your webcam when you switch it on. Needs a model that can see.
  • Hands Tools she calls herself, plus any MCP server: OBS, Home Assistant, ComfyUI, Blender, GitHub.

The hardware, in detail

Three commands

Installed in an evening, repaired by running it again

The installer checks Python, your GPU and disk space, installs what's missing through your own package manager, sets up her voice and her brain, and asks before anything that touches your system. Run it again any time to repair or update. luna starts her.

Setup guide
git clone https://github.com/fswolf/luna-local-agent.git ~/ai-voice
cd ~/ai-voice
./installer/install.sh

Built in the open

Every commit is public and every setting is a file

Star it on GitHub Read the documentation