Personas

Personas

A persona gives homebot a name, emoji, colours and alternate wording for some messages. Neatpik is the default. Run homebot persona list to see the built-in and local choices, with the active one marked. homebot persona show <id> shows its header, colours and four sample messages.

Eight personas are built in: HAL 9000, Johnny 5, Marvin, Miss Minute, Neatpik, R2-D2, Rosie and WALL-E. Each carries its own lines. Neatpik rewords a subset of the messages and leaves the rest in the catalog’s English; the other seven cover every message a persona can voice, in their own manner. A message a persona has no line for falls back to Neatpik’s, then to the catalog’s English. You can write persona files of your own too.

Here is each one telling you three things need you, the way the inbox prints it under the header:

Id Emoji Name Sample line
neatpik 🧹 Neatpik 3 things are waiting for you
rosie 🧽 Rosie 3 chores waiting, hon. Sleeves up
wall-e 🌱 WALL-E Ooh. 3 things. Found them for you
marvin ☔️ Marvin 3 things need you, and this will all end in tears
r2-d2 📡 R2-D2 Dweet-bwoo-wee! [3 things need you]
johnny-5 🤖 Johnny 5 3 things need you! Read it all twice. Wonderful!
hal-9000 🔴 HAL 9000 3 things need you, Dave. I’m afraid I can’t do this for you
miss-minute ⏰️ Miss Minute 3 things need you, sugar, and the clock’s a-tickin’

A persona cannot change facts, paths, counts, commands, fixes or the commit guard. Help, commit messages, the journal and anything stored in your home repo keep their neutral wording. Ordinary piped command output also stays neutral; persona show and persona preview deliberately display their named voice even through a pipe. On a terminal, the active persona speaks where a message allows it; the shell nudge and desktop notifications use that voice even though they run in the background. The file format and checks explain what a voice is allowed to change.

Choose a voice

From inside your home repo:

homebot persona use neatpik
homebot persona use none

use checks the choice and writes persona: in homebot.yml, preserving comments. none selects the neutral voice, including for the nudge. The next homebot save carries the config change; use does not make a commit. It also rewrites the shell nudge, prompt symbol and count at once. When HOMEBOT_PERSONA names another persona in that shell, use says the variable still wins there, and the caches it rewrites take that persona’s voice. homebot setup --persona <id> also writes persona:, and it judges the choice the way use does: the persona must exist and load, and a refusal says so before setup changes anything on the machine. A persona file that is lost or broken later shows up as persona_broken in the inbox.

HOMEBOT_PERSONA=<id> overrides persona: in the current process. An empty value counts as unset. HOMEBOT_PERSONA=none selects neutral without changing the repo. An unusable selection falls back to Neatpik; a broken selection from homebot.yml also becomes an inbox item. An unusable environment selection warns once on a terminal and makes no shared inbox item.

homebot --plain <command> or HOMEBOT_PLAIN=1 uses neutral wording for that run, even in persona show and persona preview. NO_COLOR=1 removes colours but keeps the chosen voice. HOMEBOT_THEME=light or dark chooses a palette; it does not change the words. Giving homebot a command name uses the separate homebot name command and name: key; a persona does not create that name.

Write your own

homebot persona new tester
homebot persona validate tester
homebot persona preview tester
homebot persona preview tester --event inbox.nudge --all-variants
homebot persona ids

new creates $XDG_CONFIG_HOME/homebot/personas/tester.toml and will not overwrite a file. --from <id> copies an existing persona’s name, emoji, tagline, extends, lang, colours and lines into the new file, under the new ID. It refuses a persona with an error in its chain. Without --from, the scaffold lists voice message IDs as comments. ids shows each voice ID, its English text and its placeholders. validate also accepts a .toml path; preview shows light and dark output without sending a notification or changing your repo. With --event, a slot the inbox fills with another message or a count is filled the same way (the nudge’s urgency, a notification’s item title and “+N more”, an optional detail like “last unpacked”); any other slot shows a generic sample such as <profile>.

If homebot.yml cannot be read, persona list and a bare persona validate still list or check the personas, report the config error the way use does, and exit 1. They mark no persona as the current one while the config is broken, since which one the repo selects is not known. HOMEBOT_PERSONA, when set, still decides.

Findings name a file in the config directory relative to it (personas/tester.toml), and any other file by its full path.

Persona files live in each machine’s config directory. To take yours to another machine, keep it in the home repo with homebot pack and let homebot link it there. A machine that sees persona: tester before receiving tester.toml speaks as Neatpik in the terminal, keeps the shell nudge, the prompt symbol and desktop notifications neutral (the prompt shows 🚚), and shows a persona_broken inbox item; run homebot persona validate tester on that machine to inspect the problem.

Before adding persona: to a home repo shared with other machines, update every machine that reads it to a homebot build that has the persona commands. An older build either rejects the key, and so does its background helper, or ignores it and stays neutral (homebot · laptop · …). HOMEBOT_PERSONA set in one shell also affects the shared nudge and symbol caches when a background refresh inherits that environment, so a shell may show that voice after the setting is removed until the next refresh.