MASON

Settings and configuration

Nothing here is needed to get started: every setting has a default that works. This page lists all of them. A test compares it with the code on every change, so a switch or a variable that is not on this page fails the build.

Settings

Under the gear in the app window. Mason calls you by the first name on this Mac's account until you type another under Name.

SwitchDefaultWhat it does
SummariesOnA model writes the summary of each project and words the proposals. Off: the memory is your own last prompts.
VoiceOnElevenLabs speaks, listens and calls. Shown as a switch once there is a key. Off: the Mac's own voice, typed answers, no calls.
Logos from the webOffAsks each site you used for its own icon, once. Off: lettered tiles.
New versionsOnAsks GitHub once a day whether a newer release is out, and says so here and on the island. Installs nothing.
Agent logsOnReads the logs of Claude Code, Codex and Grok. Off: Mason knows time, not what was built.
What you said, by meaningOffAn embedding model on this Mac places your prompts by meaning, for Find.
Chat and mail by nameOffKeeps the name of a chat or mail app and the time spent there. Off: counted, never named.
SoundOnMason speaks. Off: silent.
A word on the islandOnNudges on the island when an answer has waited.
Liquid glassOffA second look to try: glass panels over the desktop.

The first four are grouped as Leaves this Mac, the next three as Stays on this Mac. What each one sends or keeps is in What it reads, sends and keeps.

Also in Settings: Screen shows whether Mason has Accessibility and offers Fix access when it has not, In your agents' rules lists the rules that stand in your agents' rules files, with the agents that hold each, and Kept on this Mac opens the memory and the notes in Finder.

In .env.local

apprentice/.env.local is read at start. It is local and ignored by git; cp .env.local.example .env.local gives you a file to fill in. Only the names in this table are read from it. A variable that is already set in the environment wins.

VariableDefaultWhat it sets
ELEVENLABS_API_KEYnoneYour ElevenLabs key. Turns on the voice.
ELEVENLABS_VOICE_IDA premade voiceAnother voice for speech and the calls.
ELEVENLABS_MODEL_IDeleven_flash_v2_5The speech model.
ELEVENLABS_LANGUAGEDetected; the calls in enThe language dictation listens for and the agents speak, for example sv.
ELEVENLABS_AGENT_LLMgemini-2.0-flashThe model the three calling agents think with.
APPRENTICE_LLM_URLnone: your Claude loginAn address that answers in the OpenAI chat format. That model then writes the summaries.
APPRENTICE_LLM_MODELhaiku with ClaudeThe name of the model.
APPRENTICE_LLM_KEYnoneA key, when the provider asks for one.
APPRENTICE_EMBED_URLnone: llama.cpp on this MacAn address that answers in the OpenAI embeddings format.
APPRENTICE_EMBED_MODELThe .gguf in data/models/The embedding model: a name at that address, or the path of a .gguf file.
APPRENTICE_EMBED_KEYnoneA key for the embeddings address.
APPRENTICE_LLAMALooked forThe path of llama-server, when it is not where Mason looks.
APPRENTICE_SYSTEM_VOICESamanthaThe Mac voice used when ElevenLabs is off.
PORT4317The port of the local server.

In the environment

For a rehearsal, a test or a recording. These are read from the environment of the process, not from .env.local.

VariableWhat it does
APPRENTICE_DATAAnother folder for the memory. The notes are then written inside it.
APPRENTICE_COLLECT0: the screen is not watched and nothing is opened in Finder.
APPRENTICE_OVERLAY0: no island.
APPRENTICE_MUTE1: silent.
APPRENTICE_LLM0: no model is asked. The same as Summaries off.
APPRENTICE_LLM_BINThe path of the Claude Code CLI, when it is not on the path.
APPRENTICE_PODCAST_MODELThe model that writes the recap script. sonnet by default.
APPRENTICE_RULES_FILEAnother file than ~/.claude/CLAUDE.md to read your agents' rules from.
APPRENTICE_CLAUDE_DIRAnother folder of Claude Code logs. Codex, Grok and Cursor are then read only when their folders are named too.
APPRENTICE_CODEX_DIRAnother folder of Codex sessions.
APPRENTICE_GROK_DIRAnother folder of Grok sessions.
APPRENTICE_CURSOR_DIRAnother folder of Cursor workspaces.
APPRENTICE_DEMOShorter pauses between questions, for recording a demo.
ELEVENLABS_DIALOGUE_MODEL_IDThe model that records the recap. eleven_v3 by default.
ELEVENLABS_ANCHOR_VOICE_IDThe first voice of the recap.
ELEVENLABS_REPORTER_VOICE_IDThe second voice of the recap.

APPRENTICE_URL, APPRENTICE_KEY, APPRENTICE_OPEN and APPRENTICE_DESKTOP_PID are passed between the app and its own server. Leave them alone.

A rehearsal instance, with its own memory, no voice, no island and no watching. It prints the address to open, with the key of that start in it:

PORT=4318 APPRENTICE_DATA=/tmp/mason-rehearsal APPRENTICE_MUTE=1 APPRENTICE_OVERLAY=0 APPRENTICE_COLLECT=0 node src/server.mjs

Commands

Run in apprentice/.

CommandWhat it does
npm run build:readerBuilds Mason.app and its two helpers with swiftc. Only what changed is built again.
npm startBuilds, then runs the server in the terminal.
npm testEvery test. No network, and no data of yours is needed or touched.
npm run workflowsChecks the collection in workflows/. -- build writes its page, -- add <file> puts a workflow in.
npm run mcpRuns the MCP server on standard input and output.

Where things are

PathWhat
apprentice/Mason.appThe app. Built on your Mac, not in the repository.
apprentice/data/The memory. Not in the repository.
apprentice/wiki/The memory as Markdown notes. Not in the repository.
apprentice/.env.localYour keys. Not in the repository.
http://127.0.0.1:4317The local server, on this Mac only. Everything but the pages needs the key of this start. /mcp is the MCP endpoint.