Modules
The Handler
The module that asks โ daily reflection, check-in surveys, mantras, affirmations, headspace sessions, and the audit that notices a missed day. Rule-based today, a local AI persona later, same module.
On this page
๐พ The Handler is the voice of the game. It sets the day's prompt, asks how your head is on a cadence, hands you a mantra, sits with you through a headspace session, and notices when you skipped the one thing it required. Everything it does is an entry in your journal and an event in the log, so the stats see it.
You name it (What you call them โ the default is "Handler"). The name is in every line it
says. You also set how strict it is; every rule below is a field on /settings.
The daily rhythm
The Handler card on the dashboard shows one line at a time โ the most important thing it wants โ and lights the ๐พ button with due or overdue:
- Not locked โ "The kennel is quiet. When you're ready, cage up."
- Check-in overdue โ "You've gone quiet. Check in. Now."
- No reflection today โ "Write today's reflection before the day ends."
- Check-in due โ "Good boy. Now check in."
- Mantra not yet recited โ "Recite today's mantra and mean it."
- Everything logged โ "Stay in your headspace."
Reflection (required)
One per local day while locked. The prompt is chosen from the library deterministically per day, so reloading never changes the question. Two ways to answer:
- Typed โ at least Minimum reflection length characters (default 120). Shorter is refused, and the refusal tells you how many you wrote.
- Spoken โ press the microphone, talk for at least Minimum spoken reflection seconds (default 30), stop, save. The recording is stored as a voice memo; an optional note goes with it. A recording with no measurable length is refused โ a rule you can pass by sending less is not a rule. (Ogg/Opus recordings are measured exactly; other formats use the browser's reported length, cross-checked against the file's size.)
Either way: +15 XP, Good boy. Reflection logged. The due by hour (default 22:00) only changes the nag text; the day is the unit.
The microphone needs HTTPS
Browsers refuse the recorder on an insecure origin. Use your https:// address through the
reverse proxy, never the raw port. See Install.
Check-in survey
While locked, every Check-in every N hours (default 4; 0 turns it off). Five scores from 1 to 10 โ headspace ยท obedience ยท mood ยท denial ยท energy โ plus a prompt ("What does your Handler need to know right now?") and a free line. At twice the interval it becomes overdue and jumps to the top of the Handler's list. +5 XP.
The scores are the raw material for headspace-over-time charts (on the roadmap) and are exported as their own CSV columns. They are prose-adjacent: they never appear on a share card or on the API's event feed (Privacy).
Mantras and affirmations
A mantra of the day (deterministic per day, like the prompt), meant to be said out loud before you log it โ +3 XP. The whole mantra list is one fold away. Affirmations are the Handler's lines to you, one tap each, +2 XP. Both are journal entries.
Headspace sessions
A timed sit โ meditation now, hypno scripts later. Pick minutes (at least one), optionally a script from the library, add a note after. XP = minutes, capped at 20. The duration is logged as part of the entry.
The audit: a missed reflection costs
Once per local day, at the first tick after midnight, the Handler looks at yesterday:
- If you were locked at 20:00 yesterday, and
- no reflection was logged for that day (voided ones do not count),
then it emits a reflection missed event and adds Penalty for a missed daily reflection (default 30 minutes) to the active clock. If there is no active lock at audit time, the event is recorded with the penalty marked not applied.
It looks exactly one day back, once. It never stacks, and the very first run only starts the clock โ there is no retroactive penalty for days before you installed it. A missed-reflection penalty is undoable within the undo window if it was wrong.
The journal
The Handler page ends with the journal: the last forty entries of every kind, with prompt, body, scores, duration and the voice player where there is a memo. The Log page shows the same things as events with an excerpt.
The library: your Handler's voice
Settings โ ๐พ Handler holds the prompt library, one table, five kinds:
| Kind | Used for | Seeded with |
|---|---|---|
reflection |
the daily prompt | 12 |
checkin |
the check-in question | 4 |
mantra |
mantra of the day | 8 |
affirmation |
the affirmation buttons | 8 |
meditation |
headspace scripts | 3 |
Each line has a weight (probability in the daily draw; 0 never draws) and an enabled switch. Add your own; rewrite the seeded ones; disable what does not land. The register is yours: firm, gentle, explicit, clinical โ the mechanics do not care.
Settings
| Key | Meaning | Default |
|---|---|---|
handler.name |
What you call them | Handler |
handler.reflection_min_chars |
Minimum typed reflection | 120 |
handler.reflection_due_hour |
Due-by hour for the nag text | 22 |
handler.checkin_hours |
Check-in cadence while locked (0 = off) | 4 |
handler.missed_penalty_minutes |
Cost of a missed daily reflection | 30 |
handler.voice_min_seconds |
Minimum spoken reflection (0 = no minimum) | 30 |
What the Handler never does
It never leaves the box, never reads anything that is not in your log, never posts, and only
ever acts by writing events through the same doors you use. When the AI persona arrives
(Roadmap) it inherits exactly those limits: a local model, acting as
actor=ai, rate-limited, every action an event, your words never leaving the LAN.
This page also ships inside the app, at /guide โ so your own instance always serves the guide for the version you are running, with the internet unplugged. Get Latch ยท Something wrong here? Tell me.