Local AI · Open source · Signal only
An insanely secure & private thinking partner, living at home.
Estia is reached only through Signal: encrypted texts, voice notes and calls. She/He reads your mail and calendar but never changes them, dims the lights, plays music on Spotify and looks things up. The AI model runs on your own Mac, and answers only you.
- No cloud AI
- No open port
- No account with us
- MIT licence
- Free
- Today 08:41
- what's on Friday?
- Two things: a team call at 10:00, and dinner at 19:00.
- what's a good question to ask about free will?
- That's one of those questions that can go several different directions … “Is the feeling of choosing … enough to call it free will, or is that feeling just a clever trick the brain plays on itself?” … Which of those directions sounds most interesting to you?
- Voice note, 0:04
- Everything is up. The model and helpers are answering, and disk and memory look fine.
/ in short
The short version.
-
Local AI
The AI model (Google's Gemma) runs on your own Mac. No cloud AI, no account with us, no telemetry. Chats, memory and profile stay on the Mac.
Gemma 26B on 32 GB of memory or more, the tested model; Gemma 12B on 16 or 24 GB
-
Read-only mail and calendars
Estia reads your mail and calendar but never changes them. Lights and plugs follow a rule you set for each device.
Mail and Outlook calendars: a read-only Microsoft sign-in. Google calendars: a read-only calendar link. iCloud, Fastmail and Nextcloud: read requests only.
-
Only you, only Signal
Signal is her only way in: no web app, no chat on the Mac, no open port. Only accounts in her config get an answer, and setup adds only yours.
Checked in code before the model sees a word
-
Your secrets stay put
Messages travel end-to-end encrypted through Signal. Keys and sign-ins live in files only her own hidden Mac account can read, never in chat, logs or the code.
Typed into Terminal, hidden on screen, never in chat
-
Make him/her yours
Name her what you like: ours is called Tiffany. Her personality: hearth (steady, kind and frank), playful, or a short file you write. Her language comes from one command, and she remembers your preferences.
soul.md, her personality file, shapes how she sounds, never what she may do
/ what she does
Text, talk or call.
Everything happens in one Signal chat, in one language at a time: English or one of
ten others. Core features work after setup. Each extra stays
off until you switch it on. In a text, “What can you do?” is answered from the list of
what is set up; /help shows it word for word, with an example each and the
current level of the parts that have one.
-
Chat
“What's a good question to ask about free will?”
Short, direct answers. She answers first. On a call, when you think aloud, she may ask one question back. She remembers the conversation and can search older ones. Bold and italic words show in Signal's own text styles, and lists as bullets.
-
Memory
“Remember that I like short answers before noon.”
What you tell her is saved and known in every message. Her notes from your chats are added only when they may matter: first those that share the message's rarer words, then the newest, at most 1,500 characters.
/profilelists each fact and where it came from,/fixcorrects one in your own words,/forgetremoves one. -
Photos
Send a photo with a question.
Answers about the photo, then deletes it.
-
The Mac
“How is the Mac doing?”
A few lines on its health. She also reports problems without being asked; one found between 22:00 and 08:00 waits for the morning.
-
Reminders
“Remind me tomorrow at 7 to call mum.”
A text at that time, once or on repeat. Set only when a note from the code, not from the AI, says “Reminder set”. Missed ones arrive late, marked so.
/reminderslists and cancels them. -
Calls
Call her on Signal.
An encrypted Signal call, with speech (STT and TTS) handled locally on your Mac. Pronunciation is fine-tuned in all 11 languages, on calls and in her voice notes. Numbers, money, dates, units and chords sound natural. Dialogue dynamics optimized, also with background noise: noise in a pause mostly counts as quiet, and road noise rarely cuts her off.
-
Language practice
Type
/babble nl.A short conversation in Dutch at your level, A2 or B1, and a recap of at most three mistakes when it ends. Eight languages. Corrections come from the AI model and can be wrong.
-
Emergency stop
Type
/lock.Stops everything at once: answers, messages she starts, calls and reminders. Only
/unlockfrom the same device ends it, 10 minutes later at the earliest. Holds after a restart, needs no Mac. A new device linked to your Signal account gets no answer until you allow it. -
YouTube videos
Send a YouTube link, with or without a question.
A summary from the video's captions, up to its first 2 hours, with the time of each main point. The captions are never stored.
-
Voice notes
Send a voice note.
Transcribed on your Mac, never online. Answers in text, or as a voice note if you like. Speak in the language Estia is set to.
-
Messages she starts
Type
/initiative on.A check-in on something you said you'd do, a calendar change, a Sunday look back, a short note once a week. At most one a day, never between 22:00 and 08:00, each saying why it came.
/quietpauses them. -
Wake-up calls
“Call me at 6:30.”
A text, then a Signal call on time, and one more try two minutes later if unanswered. For anything that matters, keep your phone's own alarm.
-
Evening note
Type
/evening on.Three short questions at 21:00, or the time you pick: what went well, what is still open, one thing for tomorrow. The same words each evening, written by the code, never by the AI.
/evening 20:30moves it,/evening offstops it. -
Calendar
“What's on Friday?”
That day's events from each of your calendars, read live: Google, Outlook, iCloud, Fastmail or Nextcloud (the last three have not been tested live yet). Plus a morning digest at 09:15. With several, each event names its calendar: “Family: Football”.
-
Mail
“What needs my reply?”
Unanswered mail from the last week, numbered; “read 2” opens one. Microsoft 365 mailboxes, read-only. Gmail: forward it to one of them. Optional: a tiny AI model on the Mac (AgentJev) sorts obvious bulk mail before Gemma reads it.
-
Lights and plugs
“Turn off the living room lamp.”
TP-Link's Kasa lights and plugs, and Philips Hue lights through the Hue Bridge, switched over your home network, never through TP-Link's or Philips' online service. Hue: on, off, brightness and whites, no colours; it has not been tested on a real Hue Bridge yet.
-
Web search
“Who won the match last night?”
An answer with its sources and how recent they are.
-
Places and routes
“How long to the station by bike?”
Time, distance and lines, or places with rating and hours, with Google Maps links.
-
Music
“Play some jazz.”
Spotify on your speakers, by text only: Spotify's rules don't allow voice control.
-
Transposing chords
“Get the chords of Spooky and transpose them 4 semitones higher.”
Chords transposed or moved for a capo, a chord's notes and the key of given chords, worked out on the Mac and given in a note from the code, not from the AI. On texts and calls. A song's chords come from a web search (the Web search extra), with its sources.
-
Documents
“What does my lease say about pets?”
An answer from your PDFs that names the document and the page. They sit in one folder of yours, ~/Estia-KB, and PDFs sent on Signal are saved there. Searched for the words of the question as they are written: no other forms of a word, no translation. Read on the Mac by Apple's PDFKit and Vision, scans too. Tested on macOS 27 and clean scans only.
/docslists them. -
Projects
“What's next on the website?”
Open to-do items and recent changes from a project on the Mac. Off until switched on in setup, which asks the folder and the level: summary, docs or code.
/ security
Security, in plain words.
Estia reads your mail and calendar and switches things in your home, so she is built to do as little as she can, and to tell you what she did. These are the rules, and the gaps.
How a message travels
-
Your phone
You message her in Signal like any contact. The message is end-to-end encrypted.
-
Signal
Signal passes it on and cannot read it. Estia has her own number, so she never sees your other chats.
-
Your Mac
The Mac fetches it with signal-cli, a Signal program without a window, by connecting out to Signal. No part of Estia accepts connections from the internet: no web app, no open port, nothing to log in to. Ollama, the program that runs the AI model, and the voice service answer only the Mac itself, never another device.
The rules
- Only you can talk to her. Only the Signal accounts in her config get an answer, checked in code. Strangers get no reply, read receipt or typing indicator, and their calls are never picked up or rejected, since a rejection is itself a reply. Signal itself still confirms delivery.
-
Only the devices she knows.
A message from a new device linked to your Signal account gets no answer and never
reaches the AI; a note from the code goes to your account, so your phone sees it
too.
/devices ok N, sent from a device she already knows, lets it in. -
An emergency stop on your phone.
/lockstops everything at once (answers, messages she starts, calls and reminders) until/unlockfrom the same device, 10 minutes later at the earliest. It holds after a restart and needs no Mac. -
Mail and calendars are read-only.
Estia reads them but never changes them. Mail is read with Microsoft's read-only
permission, so the sign-in itself cannot send, move or delete. Outlook calendars use
Microsoft's read-only calendar permission,
Calendars.Read, and Google calendars are read through a calendar link whose secret address works like a password: never make a private calendar public for her. iCloud, Fastmail and Nextcloud calendars are read with an app-specific password, with read requests only: any other request is refused in code. The text of a mail is never stored, only its headers (sender, subject, date and the like) and a one-line summary; her answers about a mail stay in the chat like any answer. - Outside text is read as information, not as orders. Web pages, YouTube captions, search and map results, mail, calendar entries, project files, documents, photos and shared audio files. Code rules reduce prompt injection (orders hidden in that text) but cannot rule it out. A device change after outside text waits for your yes.
- Reminders and her own messages come only from you. A reminder or a wake-up call is set only when asked for in your own words, never by a mail, a page, a video, a calendar entry or a shared audio file, and calls go only to your account. The code decides when she writes first. When the AI writes part of a message she starts, it sees only your words, your profile and the moment. Never mail, calendar entries, the web or a page. Calendar notes are written by code, from the calendar. A text with a web link is never sent, and neither is one that asks for a code or a password: those words are checked in all 11 languages.
-
She can't run a command of her own.
The AI model has no command line: it cannot type commands on the Mac. With Projects
on, she reads only files git tracks in the folder named in setup, at the level
chosen there (summary, docs or code), never secret-like files such as
.env. With Documents on, her document tools read only her index of the PDFs in ~/Estia-KB. - One folder of yours for documents. In your home folder, her account adds files only to ~/Estia-KB, and never deletes or changes yours. A PDF is read by Apple's PDFKit and Vision in a helper program that runs as her account: a PDF made to attack the reader reaches only that program and her account, never yours.
- The model stays on the Mac. A cloud model, which Ollama runs on its own servers, is refused: by its name when the config is read, and by Ollama's own list at the start, every five minutes and before every chat. Once the check sees one, answers pause and a note from the code says why.
- She only learns from you. Facts come from what you say, or from a page you ask her to learn from, and what she picks up on her own never replaces a fact you gave her. Mail, calendar, documents, YouTube captions, web and map results never teach her anything.
- Every device has a rule. Each light or plug gets one of three rules, enforced in code: normal, ask first, or never off. A note from code, not from the model, says what really changed. Philips Hue lights are reached only through the Hue Bridge on your home network, and nothing is sent to a bridge whose certificate differs from the one saved at pairing.
- What she keeps stays on the Mac. Chats and your profile stay in one database on the Mac until you delete them. Photos, voice notes and call audio are deleted after use. YouTube captions are never stored: held for 10 minutes for follow-up questions, never written to disk. With Documents on, the text of your PDFs is kept in that database until a PDF leaves the folder. Logs never hold the text of a message.
-
Her own account on the Mac.
She runs as
_estia, her own hidden Mac account with no password and no login: not as you and not as root, the Mac's all-powerful admin account. Her data and keys are readable only by that account. Her code and every program she runs are copies owned by root, changed only by an update you run. A program you run, an AI session included, reads none of it without your Mac password (limits under Known gaps). - Secrets are typed in Terminal, hidden on screen. Setup and each extra ask for keys, codes and passwords in your own Terminal, where what you type stays hidden: never in a chat, and never on a program's command line, where other programs on the Mac can read them.
- A security step in setup. Remote login (SSH) with keys only, no admin rule that skips your password, her files private, and a Signal PIN on her number (Registration Lock): each shown with its state, and changed only on your yes. Together they make the hardened level. FileVault, automatic login, the screen lock and a few more are shown with their fix, never changed. The nuclear level adds the Mac's firewall, with python3 and ruby (programs that run scripts) off its list: a separate choice, never part of setup, which says first that it may stop other services on the Mac. Doctor names the level the Mac is at.
What stays home, and what goes online
The model always runs on the Mac. Outside services are reached only for Signal, links you send and the extras you switch on. Mail syncs every five minutes in the background, and the digest reads the calendar each morning.
| Stays on the Mac | Goes online: Signal, links you send and the extras you switch on |
|---|---|
| The AI model (Gemma, run by Ollama) | Signal, for your messages and calls (end-to-end encrypted) |
| Your chats, memory and profile | Microsoft, to read mail and Outlook calendars (read-only) |
| Speech-to-text and text-to-speech | Google's calendar links, for Google calendars (read-only) |
| Health checks and project reading | iCloud, Fastmail or your Nextcloud, for those calendars (read-only) |
| Lights and plugs (home network) | Ollama's web search and Brave Search: your search questions |
| Reading your PDFs (Apple's PDFKit and Vision), with Documents on | Google Maps: what you look for, a rounded area for “near me”, and your home address for routes from or to home |
| Spotify, for music | |
| Web pages: links you send her, and the top result of a Brave search | |
| YouTube: the video's ID (the 11-character code in a link you send), never the whole link, for its captions |
Setup also downloads the model (ollama.com), Ollama's official build (GitHub; its fingerprint and signatures checked before anything is installed) and, for calls, signal-cli and the call helper's source code (GitHub, crates.io). It runs Homebrew, the installer for Mac tools, with Homebrew's usage reports off. The voice models come from Hugging Face, an online library of AI models. The listening model (Whisper), the speech detector and Smart Turn are fixed to one version and checked against their fingerprints on the Mac at every start: a changed or extra file is never loaded. Smart Turn, which hears when a sentence on a call sounds finished, is a community conversion of Daily's model, not Daily's own. Whisper is downloaded once, then starts with no network. The speaking voices are downloaded as published, with no fixed version and no check of their files.
Known gaps
- Her number runs on signal-cli, an unofficial Signal program. Signal's terms discourage automated accounts, and Signal can disable one: keep her to your own chats, at a low volume, on a number of her own.
- YouTube's terms forbid automated access and downloading its content, captions included, with no exception for personal use. Reading a video does both: a gap the project accepts for personal use. YouTube can block the Mac for a while after many requests, and no proxy is used, so video links then wait until YouTube lifts the block. So far, two reads from a home connection worked; repeated use has not been tested.
-
The captions come through an internal YouTube address, not meant for outside
programs, which YouTube can change without notice: video links then go unread until
an Estia update. Such a change can also pass for an answer: every video then seems
to have no captions, or to be private or removed, while doctor and
/statusstill show YouTube working. In the EU, YouTube may first ask for cookie consent from a separate address, and the read then fails; this has not been tested live. - Her own account keeps her files from your programs, not from root, the Mac's all-powerful admin account, nor from any program that gets root. While an admin rule skips your password, every program you run gets root without it: the security step removes such a rule.
- For every incoming call, her Signal program (signal-cli) starts the call helper before Estia checks who is calling. The helper connects only through Signal's relay servers, so a caller never learns the Mac's internet (IP) addresses.
- One user per Mac is assumed. On a Mac shared with other user accounts, another user could start a fake copy of one of the programs she talks to on the Mac before the real one starts.
- A voice note forwarded inside Signal keeps its voice-note mark, so it counts as your own words.
-
A Mac with 16 or 24 GB of memory gets the smaller model, Gemma 4 12B
(
gemma4:12b-mlx), which failed some of her safety tests (15 Oct, run twice): after a forwarded audio file with planted instructions, it tried to save facts and switch a light (2 of 5 runs passed); on a call, it tried to switch a device before her question was answered (3 of 5 passed). Gemma 4 26B, on 32 GB or more, passed both, 5 of 5. With either model, the code still refuses facts from an audio file, and a device change waits for your yes in three cases: after an audio file, for a device set to ask first, and in a message that is not about devices. 32 GB with Gemma 26B is the tested setup. - Prompt injection (orders hidden in a mail, a web page or a file) is reduced by rules in code, not ruled out. An AI model on the Mac can still be talked into a wrong answer, so check anything important.
The full list is in SECURITY.md.
Found a problem?
Please report it privately, not in a public issue: use Report a vulnerability on the repository's Security tab. Leave real numbers, account IDs and keys out; a made-up example is enough.
The security policy lists what it covers, and security.txt, the standard contact file for security reports, has the contacts.
This page, too
This page sets no cookies and loads nothing from another site: no fonts from a font service, no trackers. One script runs, Vercel Web Analytics, which counts visits without cookies. The browser is told to block scripts written into the page and scripts from any other site.
/ install
Your AI sets it up. Secrets never enter the chat.
Open the folder in an AI coding assistant, such as Claude Code or Codex, and say “set me up”. Setup runs step by step and stops for the few things only you can do. Downloads and builds take about 30 minutes on a 100 Mbit/s line, most of it the model download (18.3 GB); about 15 minutes on a Mac with 16 or 24 GB of memory, where the model is 7.7 GB. Voice adds about 15 minutes while her voice loads, after its build and a 1.7 GB download (about 4 minutes). The model download needs no input; if it stops, running setup again resumes it.
What you need
- A Mac
- Apple silicon. M1 or later, macOS 14 or later. Voice notes and calls need macOS 15.6.
- Memory
- 16 GB or more. 32 GB with Gemma 26B is the tested setup. On 16 or 24 GB, setup offers the smaller Gemma 12B, which failed some of her safety tests (under Known gaps), and downloads it only on a yes.
- A phone number
- A spare number. For her own Signal account; no Signal app may use it. A prepaid SIM is fine.
- Disk
- 15 to 25 GB free. About 25 GB with Gemma 26B, about 15 GB with Gemma 12B. Mostly for the AI model.
Set up with your AI
git clone https://github.com/enable4all/estia-on-mmini.git ~/estia && cd ~/estia
Then open the ~/estia folder in your AI coding assistant and say “set me up”. Keep the folder at ~/estia, outside Desktop, Documents and Downloads: macOS blocks programs that run in the background from those folders.
It follows SETUP-WITH-YOUR-AI.md, security first.
- Secrets are typed into your Terminal, hidden on screen, never into the chat: the captcha link, the SMS code, passwords and keys. If it asks for one in the chat anyway, don't paste it.
- Your AI is told never to read your key files or use admin rights (sudo): you type your Mac password yourself, in your own Terminal, for Homebrew, the usual installer for Mac tools, if it is missing, for Ollama's background service, for the move into her own Mac account, for the security step and for her commands.
- Each step is explained in one sentence before it runs, with what leaves the Mac.
-
Done when
/usr/bin/sudo /usr/local/estia/bin/estia doctorshows no ✗ and her welcome message has arrived on your phone.
Set it up by hand: two commands, then a few questions
The two commands
git clone https://github.com/enable4all/estia-on-mmini.git ~/estia && cd ~/estiascripts/setup.sh
Click a line to select all of it. Keep the folder at ~/estia, outside Desktop, Documents and Downloads: macOS blocks background services there.
Read it before you run it. The dry run, a rehearsal, describes every step and shows its commands, without asking, installing or downloading anything. setup.sh and the Python behind it are plain to read, and setup.sh is safe to run again: it skips what is done.
scripts/setup.sh --dry-run
What setup does, and what it asks of you
-
Installs the tools. Homebrew, the usual installer for Mac tools, if it is missing (it asks first, and Homebrew asks for your Mac password once), then signal-cli and uv. Homebrew's usage reports stay off for every brew command setup runs.
setup.sh -
Installs Ollama's official build. Downloaded from GitHub and checked before anything is installed: its fingerprint, Ollama's signature on every program, and Apple's notarization (Apple's malware check). It runs as a background service that starts with the Mac and answers only the Mac itself; installing it asks for your Mac password once. An Ollama that already runs is kept only when it passes the same signature check and answers only the Mac itself; one that other machines can reach stops setup. Homebrew's Ollama and the Ollama app are never used: setup names them, with the fix.
setup.sh -
Picks the model for your Mac and downloads it. gemma4:26b-mlx on 32 GB of memory or more, the tested model. On 16 or 24 GB, setup first shows which of her safety tests gemma4:12b-mlx failed, then downloads it only on a yes. The Mac stays awake meanwhile. If the download stops, run setup again and it resumes.
setup.sh -
Asks her name. Enter keeps Estia, or type any name you like. You can rename her later by changing
setup.shnamein the config file. -
Registers her Signal number. You type the number; the captcha link, the SMS code and a registration-lock PIN, if any, are typed hidden: never on screen, and never on a program's command line. A mistyped code can be typed again.
You -
Finds you. setup.sh shows a one-time word, and you send it to her new number from your own Signal. The account that sent it is the only one that gets answers: a profile name could be copied, the word cannot. If it does not arrive, setup lists the usual reasons and looks again.
You -
Asks her language and style, and about projects, then writes the config. English unless you pick another, and hearth unless you pick playful. Projects stay off unless you say yes; most people say no. A config file already there is copied first, never just replaced. Her built-in style applies until you write
setup.shsoul.md. -
Locks her number, if you say yes. A Signal PIN on her number (Registration Lock), typed hidden. Keep it in a password manager, off the Mac.
You -
Moves her into her own Mac account, always on. She gets
You_estia, a hidden account with no password and no login, and starts with the Mac, without a login. Her data and keys go to a folder only that account can read; her code to a copy owned by root, the all-powerful admin account. She never runs as you or as root. It asks for your Mac password once.scripts/migrate-to-own-user.sh --dry-runshows every step first, and for 7 days/usr/bin/sudo /usr/local/estia/bin/estia rollbackgoes back. -
Goes through the security step with you. Remote login (SSH) with keys only, no admin rule that skips your password, her files private and her Registration Lock, each changed only on your yes. It asks for your Mac password.
You -
Checks the result.
doctor/usr/bin/sudo /usr/local/estia/bin/estia doctorchanges nothing. Every ✗ line ends with the command that fixes it; ○ means set up but not tested yet. -
Says hello. On her first start she sends you a welcome message on Signal: what is set up, something to try, and what stays on the Mac. You are done when it has arrived and doctor shows no ✗. Reply to see her answer.
Estia
Every step is also in setup_assistant.md, with what it does and how to check it, so you can see exactly what changes on your Mac.
Extras, one at a time
Each extra stays off until it has its own section in the config file. Keys and sign-ins
go through each extra's own script, never through chat and never into the config file.
scripts/setup.sh --extras lists them.
| Extra | What leaves the Mac | How to add it |
|---|---|---|
| Voice notes and calls | Nothing for speech: it runs on the Mac. Calls go through Signal's relay servers, so your phone never learns the Mac's internet (IP) address. To keep your phone's address from the Mac too, turn on “Always relay calls” in Signal on your phone. |
scripts/install-voice-daemon.sh; calls also need a build in
tools/call-tunnel/
|
| Calendar and digest | A read of each calendar, each time she looks and each morning: Google's calendar link, Microsoft 365 for an Outlook calendar, or the iCloud, Fastmail or Nextcloud server |
Google: scripts/set-calendar-url.sh [name]. Outlook:
Calendars.Read, then
scripts/mail-login.sh <address>. iCloud, Fastmail or
Nextcloud: scripts/set-calendar-password.sh [name]
|
| A read-only sync with Microsoft 365, every five minutes |
scripts/mail-login.sh <address>
|
|
| Lights and plugs | Nothing: home network only |
scripts/tapo-discover.sh; Hue (the square Hue Bridge or the Bridge
Pro): scripts/hue-pair.sh
|
| Web search | Your search questions, to Ollama and Brave | scripts/set-web-keys.sh |
| Places and routes | What you look for, an area rounded to about 1 km, and your home address for routes from or to home, to Google | scripts/setup-google-maps.sh |
| Music | Playback commands, to Spotify | scripts/spotify-login.sh |
| Transposing chords | Nothing for the chords: they are worked out on the Mac. A song's chords come from a web search: your search questions, to Ollama and Brave |
Nothing to install: scripts/setup.sh --extras, then add the line it
prints, [chords], to her config
|
| Projects | Nothing: the files are read on the Mac |
Nothing to install: scripts/setup.sh --extras asks the folder and
the level
|
| Documents | Nothing: the PDFs are read on the Mac |
scripts/share-documents.sh without admin rights, then add the two
lines it prints to her config
|
/ operate
Keeping her running.
Once she is set up, there is little to do. She watches the Mac herself, and two checks, which change nothing, tell you what is wrong and how to fix it. Her commands run as her own account, so each asks for your Mac password.
-
Ask her
Text “How is the Mac doing?” for the model, the helpers, disk, memory, mail, calendar and the rest.
/statusshows the AI model, the messages waiting for her and each part's state, as doctor does. -
She tells you
The Mac is checked every four hours. When a check finds a problem, she checks again a few minutes later and tells you only if it is still there, then once more when it is fixed. In quiet hours (22:00 to 08:00 by default) both wait for the morning; security notes, such as a new device linked to her Signal account, never wait.
-
Check the setup
Checks the Mac, the tools, the config, the model and her number, and changes nothing. Each part shows ✓ working (with its last use), ○ set up but not tested yet, or ✗ failing, with the command that fixes it.
/usr/bin/sudo /usr/local/estia/bin/estia doctor -
When she is silent
On the Mac, or from another computer over SSH (remote login), run the health check. It covers the case she cannot report: her main program, the bridge, being down.
/usr/bin/sudo /usr/local/estia/bin/estia check
Updating
git pull/usr/bin/sudo /usr/local/estia/bin/estia-deploy
Run these in Terminal, in the ~/estia folder, which is only the source: she runs from a
copy owned by root. The second line shows the new changes and asks first, then puts the
new code live, checks her within two minutes and switches back on a failure. It asks for
your Mac password. After changes in tools/voice, also run
scripts/install-voice-daemon.sh. When an update changes the tools that run
as root, the deploy says so and keeps the old ones: read the changes, run
/usr/bin/sudo /usr/local/estia/bin/estia-deploy --update-tools, which shows
them and asks, then run the deploy again.
When something is off
| You see | What to do |
|---|---|
| “Estia isn't available right now” |
Ollama, the program that runs the AI model, is not reachable. Start it with
/usr/bin/sudo /bin/launchctl kickstart -k
system/com.local-assistant.ollama; when launchctl cannot find the service,
/usr/bin/sudo /bin/launchctl bootstrap system
/Library/LaunchDaemons/com.local-assistant.ollama.plist. For any other Ollama, doctor names the fix.
|
| “Voice isn't available right now” | The voice service is down or still loading. After an install, a move or a macOS update, allow up to about 15 minutes. |
| A mailbox asks for sign-in | Run scripts/mail-login.sh <address> again. |
| “Calendar: the secret address no longer works” |
Save the new address with scripts/set-calendar-url.sh (with the
calendar's name, if it has one).
|
| “Calendars.Read is not granted yet” |
An administrator grants it in Microsoft Entra, Microsoft's admin center for
sign-ins, or run
scripts/mail-login.sh <address> again.
|
| She says a video has no captions | Nothing to fix when the video has none on YouTube: a video is never transcribed on the Mac. Try a video you know has captions. If it gets the same answer, or is said to be private or removed, YouTube may have changed, even while doctor shows YouTube working: check for an Estia update. |
| She says YouTube is refusing requests from this Mac | YouTube can block the Mac for a while after many requests or a check for automated use. No proxy is used, so there is no way around a block: wait, then send the link again. |
| Doctor shows “! YouTube”, or she says the YouTube helper is not set up |
Run /usr/bin/sudo /usr/local/estia/bin/estia-deploy. If it says the
tools that run as root differ, read the changes, run
/usr/bin/sudo /usr/local/estia/bin/estia-deploy --update-tools,
then run the deploy again.
|
/docs says it cannot read your Estia-KB folder, or a PDF you sent
gets “Not saved”
|
In the ~/estia folder, run scripts/share-documents.sh without admin
rights (it makes ~/Estia-KB when missing), then try again.
|
| She answered before, then replies stop | Often a changed Signal safety number. Confirm it in Signal first, then follow Operations. |
| No reply at all, not even “typing…” |
Log in to the Mac remotely (SSH) and run
/usr/bin/sudo /usr/local/estia/bin/estia check, then
/usr/bin/sudo /usr/local/estia/bin/estia logs. If that fails, the
Mac itself is off or offline.
|
No answer after /lock |
The emergency stop is on. Send /unlock from the device that sent
/lock, 10 minutes later at the earliest.
|
| “A message came from a new linked device N and was held.” |
Yours: send /devices ok N from your phone. Not yours: remove it in
Signal, Settings, Linked devices, then turn on Registration Lock for your
number.
|
| “Answers are paused: Ollama lists the model … as a cloud model …” | Her model's name in Ollama now points to a cloud model, which runs on Ollama's servers. Run doctor: its Model line gives the fix. |
| The laptop can't reach a program on the Mac, such as a file share | The Mac's firewall is on and doesn't let that program through. Run doctor: a “Firewall” line gives the two commands that let a program you started through. |
| “Wake-up: 07:00 … No call: …” |
Read the reason in the text: voice still loading, calls off, a call already
running, or three calls that day. /reminders shows what was missed.
|
| A message you didn't ask for, ending “(… · /quiet to pause)” |
One of the messages she starts herself. Send /quiet to pause them,
or /initiative off to stop them.
|
| “Evening. What went well today? …”, ending “(evening note · /evening off to stop)” |
The evening note, turned on with /evening on or a time set in the
config. Reply if you like, or not: nothing follows. Send
/evening off to stop it.
|
| Anything else |
Run /usr/bin/sudo /usr/local/estia/bin/estia doctor, or send
/status.
|
Good to know
-
She is as awake as the Mac.
If it sleeps or is off, so is she. Her service and Ollama, as setup installs it,
start with the Mac, without a login. With FileVault on (the Mac's disk encryption,
which keeps her data encrypted), your Mac password is typed once at each start;
/usr/bin/sudo /usr/bin/fdesetup authrestartrestarts without that prompt. Homebrew's Ollama and the Ollama app start only after a login: setup stops and names either one, with the fix. An official Ollama that setup keeps may not start with the Mac: setup and doctor name it. - Replies take a few seconds. At most about half a minute. The first one after a quiet spell is slower while the model loads.
- She says when she was away. After a restart she skips messages older than ten minutes and tells you she was offline, so you can ask again.
- Backups are not built in yet. Her database (chats, memory and profile) and her Signal account keys are not backed up for you.
/ faq
Common questions.
Is Estia an AI assistant?
A thinking partner first, and an assistant too. She answers first. On a call, when you think aloud, she may ask one question back. The assistant part: reminders and wake-up calls, mail and calendars read but never changed, lights and plugs, music on Spotify, summaries of YouTube videos you send, answers from your PDFs. Estia is reached only through Signal, and the AI model runs on your own Mac.
Is Estia a secure alternative to OpenClaw?
For one person on one Mac, yes: Estia does less, on purpose. She can't run commands of her own and has no web app: Signal is her only way in. She reads your mail and calendar but never changes them. Every action she can take is in the project's own code, with no plugin or skill store. The AI model runs on your own Mac, and she runs in her own hidden Mac account, so a program you run can't read her keys without your Mac password, as long as no admin rule skips that password.
OpenClaw (OpenClaw Foundation) does more. By default it runs shell commands on the host, without approval, its Gateway serves a browser Control UI, and it can send email. Its skills, add-ons that give it new abilities, come from ClawHub, open to uploads from anyone, where Koi Security reported 341 malicious skills in February 2026. Estia has limits too, listed under Known gaps. Code rules reduce prompt injection (orders hidden in a mail or a page) but cannot rule it out.
What does it cost?
Estia is free and MIT licensed (the call helper, which patches AGPL code, is AGPL-3.0), and the model is free too. Some extras use outside services with their own terms: music needs Spotify Premium, places and routes need a Google Cloud account with billing (a daily cap keeps use within the free allowance), and web search needs Brave and Ollama API keys.
Which Mac do I need?
A Mac with Apple silicon and 16 GB of memory or more; 32 GB with Gemma 26B is the tested setup. macOS 14 or later, and macOS 15.6 or later for voice notes and calls. A Mac that stays on, such as a Mac mini, works best.
Which languages does she speak?
One at a time: English, Spanish, Italian, Korean, Portuguese, Dutch, Polish, German,
Japanese, Russian or French, the languages her speech recognition (Whisper) hears best
that also have a voice. You pick one at setup, and it changes only when you type
/language in Signal, never by voice. What the code writes, such as notes,
the digest's headings and /status, stays in English.
Can I practise a language with her?
Yes. /babble nl starts practice in Dutch: a short conversation at your
level, and a recap of your mistakes when it ends. Eight languages: English, Dutch,
German, Spanish, French, Portuguese, Japanese and Italian, at level A2 or B1, by text,
voice note or call. Started only by typing /babble, ended by
/babble off. Corrections come from the AI model on the Mac and can be
wrong, and there is no pronunciation scoring.
Does anything leave my Mac?
The AI model always runs on your own Mac. Messages travel through Signal, end-to-end encrypted. A link you send reaches its site; a YouTube link reaches YouTube with the video's ID only. Each extra you switch on reaches its own service, and only for that job. The table under Security lists every one.
Why Signal, and not her own app?
Signal already has end-to-end encryption, voice notes and calls, on your phone or laptop. The Mac fetches messages by connecting out to Signal, so it needs no open port: nothing on it waits for the internet to connect in. There is no web app to attack and nothing to log in to.
Can other people talk to her?
No. Only the Signal accounts in her config get an answer, and setup adds only yours. Anyone else is ignored: no reply, no read receipt, no typing indicator. Signal itself still confirms delivery, so a stranger can tell the number exists.
Can she send mail or change my calendar?
No. Mail is read with a read-only permission, so even the sign-in cannot send, move or delete anything. Calendars are read-only too: Google calendars through a read-only calendar link; Outlook calendars with a read-only permission; iCloud, Fastmail and Nextcloud calendars with read requests only. She tells you what needs a reply; you answer it yourself.
Will she message me on her own?
Only once switched on with /initiative on. At most one a day, never
between 22:00 and 08:00 and never during a chat or a call, each ending with why it
came. /quiet pauses them; reminders you set still come. The evening note,
three short questions written by the code, is off until /evening on or a
time set in the config; /quiet pauses it too.
Which model does she use?
Google's Gemma 4, run by Ollama, the program that runs the AI model on the Mac (its official build only). On 32 GB of memory or more: gemma4:26b-mlx, the tested model. On 16 or 24 GB: gemma4:12b-mlx, with weaker answers; it failed some of her safety tests (under Known gaps). Any other Ollama model that runs on the Mac and can use her tools (reading mail, switching lights and the like) can be set in the config. A cloud model, which Ollama runs on its own servers, is refused.
Can I change her personality?
Yes. Two built-in styles, picked in setup and changed later in the config. The
default, hearth, is steady, kind and frank: short answers, one concern when a plan
looks risky, a joke only when asked for something fun or in banter. The other,
playful, is warm, with a light joke now and then. Neither jokes when you are worried
or something serious is going on: calm, kind and practical instead. On a call, a short
spoken version of the style takes its place, with no joke unless you joke or ask for
one (in the tests, hearth joked on 1 call of 25, playful on 2 of 8). A short file you
write, soul.md, replaces either. She reads it but never edits it, and it
shapes how she sounds, never what she is allowed to do.
What if the Mac restarts?
She is back once the Mac is up: her service and Ollama, as setup installs it, start with the Mac, without a login (with FileVault on, once your Mac password is typed at the start). Set the Mac to never sleep and to start after a power failure; the settings are in Keep it running.
Why Estia, and can I call her something else?
Estia (Εστία) is the hearth, the heart of a Greek home. Name her what you like: setup asks, and it is one setting after. Ours is called Tiffany, and Estia started as her. Estia is an independent open-source project by enable4all.
Where is the full documentation?
Every feature, setting, slash command and known gap is in the project's own guide, shown word for word at the version this page describes.