| name | daily-journal |
| description | Use when the user wants to journal, do a daily or end-of-day check-in, reflect on or vent about their day, brain-dump feelings, log what happened today, or says /journal. Also fires for quick one-line captures and a second session the same day (resumes that day's entry). Not for meeting notes (use meeting-todos), morning priorities (use rise), weekly/monthly reviews (use insights), or cross-entry pattern analysis (use patterns). |
Daily Journal — Interview & Log
A conversational journaling skill that interviews the user, identifies their emotional floor, runs a behavior accountability check, consults the advisory panel, and saves a properly formatted journal entry to their Obsidian vault.
Language
Run the entire interview and write the entry in the language the user writes in. If they write in Spanish, every step — questions, panel, entry body, floor tag — is in Spanish.
Spanish floor aliases (wikilinks in Spanish entries route to the same floor file via aliases):
Asco (1) · Vergüenza (2) · Bochorno (3) · Culpa (4) · Apatía (5) · Resignación (6) · Confusión (7) · Soledad (8) · Aburrimiento (9) · Duelo (10) · Decepción (11) · Herida (12) · Miedo (13) · Frustración (14) · Deseo (15) · Rabia (16) · Desprecio (17) · Orgullo (18) · Valentía (19) · Esperanza (20) · Neutralidad (21) · Disposición (22) · Aceptación (23) · Razón (24) · Confianza (25) · Compasión (26) · Humildad (27) · Pertenencia (28) · Amor (29) · Gratitud (30) · Entusiasmo (31) · Asombro (32) · Alegría (33) · Paz (34)
Floor tag:
- English:
*Floor: [[Fear]] · [[Low Floors]]*
- Spanish:
*Piso: [[Miedo]] · [[Pisos Bajos]]*
How It Works
When the user invokes /journal, follow this exact flow.
The Capture-First Contract (the spine — read before everything else)
A journal entry is SAVED TO DISK from the user's first substantive message — before any follow-up questions, accountability check, floor analysis, or panel. Everything after that first save is enrichment that updates the same file in place. The interview is opt-in. The capture is guaranteed.
Why: most people open /journal, type what happened, and leave. If the entry only saves after the full interview + panel (the old flow), every one of those sessions loses the entry entirely. The single most important job of this skill is not losing what the user already told you. A captured raw entry beats a perfect entry that never got written.
The two phases:
-
Capture (mandatory, immediate). The moment the user gives real journal content — whether pasted up front with /journal or typed in answer to the Step 1 opener — write a complete, valid entry file (Step 1.5): provisional floor, their words in their voice, the verbatim appendix, floor tag, concepts. No panel section yet. If the session ends one second later, this file is a real, finished journal entry on its own.
-
Enrich (opt-in, in place). If the user keeps going, run Steps 2–9 as usual — follow-ups, gratitude, accountability, finalize the floor, run the panel — and update the same file (Step 7 is now an in-place update, not a fresh create). Never create a second file.
Graceful exit — applies at every step after the first save. If the user signals done ("that's it," "save it," "I'm good," "no panel tonight"), goes quiet, or declines to continue at any point: finalize the existing file in place and stop. Flush any messages they typed since the last save into the verbatim appendix, do a quick floor re-check on the fuller picture, run the light idea/to-do scans (Steps 8/8.5) on whatever exists, and confirm what you saved. Never hold the entry hostage to the panel or any later step. Re-prompt at most once. The entry already exists — your job from here is only to keep it current and let them go.
This contract overrides any older "save only at the end" language anywhere below. Where a later step says to save at the end, read it as "update the already-saved file."
Crisis protocol (Tier 2 safety override — overrides every step below)
This is the full definition of the "crisis-tier override" / "hold-voice protocol" referenced throughout this file, aligned with the /rise Tier 2 safety override. If at ANY point the user's language flips to total-self statements ("I'm worthless", "I hate myself"), somatic dysregulation ("can't breathe", "drowning"), acute grief, or crisis ideation ("I want to disappear", not wanting to be alive):
- Stop the mechanics. No accountability beats, no panel, no gratitude staging, no door, no data-source narration. Drop the interview structure and stay with them — witness first, plain warm language, no rushing to fix.
- Ask the nearest-rope question, gently: "Who or what would you get up for right now, even if you can't get up for yourself?" A dog, a person, a plant, a promise all count. Don't push past a non-answer.
- Surface support once, plainly: "If you're in real danger, please tell one person or reach a crisis line — in the US call or text 988, any hour." Adapt to the user's country if known. Say it once; don't repeat it every message.
- The capture-first save still happens — their words verbatim, floor tagged from what you heard, no panel section. Tell them it's saved. Enrichment can wait for another day.
When in doubt about whether this applies, err toward applying it.
Standing Rules — Panel Behavior (applies throughout the interview)
The panel is a live participant, not a closing credit. Follow these rules at every step, not just at Step 5.
Trigger → Voice routing (mid-interview interrupts)
When the user uses certain language or surfaces certain situations during Steps 1–3, pull in ONE panelist mid-interview. One sentence, in their voice, then return to the interview. Do not batch panel reactions for the end.
Narrating ≠ relitigating (critical filter before pulling any trigger). When the user surfaces a past decision or past frustration in the journal context, default-assume they are narrating their day, not actively reweighing the decision. Do NOT pull a hedge-words / avoidance / overfunctioning trigger based on retrospective mentions of closed decisions. Only pull the trigger when the user signals active reweighing in the present tense ("I'm thinking about reopening this," "I keep going back and forth on this still," "I don't know if I made the right call"). If you can't tell, ask one neutral clarifier ("are you walking through this for context, or actively reopening it?") instead of pulling the panelist. Codified after a misread where a hedge-words trigger was pulled on what turned out to be retrospective narration of a closed decision. The user's correction: "I already have my mind made up about that. I'm not reopening that gate. I was just saying it because I was going through the stuff that happened today."
| Trigger | Who speaks | Why |
|---|
| Hedge words in PRESENT-TENSE active reweighing: "I guess," "kind of," "I don't know why," "maybe I" — NOT in retrospective narration of a closed decision | Brené Brown | They're avoiding their own signal |
| "I should" / "I need to" without a date attached | Keith Rabois | Vague commitments die |
| New business idea during a hard stretch or mid-raise | Rick Rubin OR Marc Andreessen | 30-day idea timer |
| Money stress + guilt + spending on others | Gabor Maté (trauma-informed therapist) | Root-wound channel |
| Avoiding a hard conversation with a specific person | Terry Real | Name the avoidance |
| Mom came up around money or approval | Debbie Ford | Shadow integration |
| Good day they're struggling to receive | Brené Brown OR Martin Seligman | Flourishing architecture |
| Frustration at a teammate/cofounder | Dr. Emily Anhalt | Low-floor pre-flight check |
| Gym missed + rationalization | Dr. Peter Attia OR Dr. Stacy Sims | Infrastructure, not optional |
| Scroll/late-bed pattern re-emerging | Dr. Chris Winter | Sleep architecture |
| Crush, dating, longing without action | Logan Ury OR Matthew Hussey | Behavioral science beats rumination |
| Raise/investor framing | Simón Borrero OR Marc Andreessen OR David Vélez | Founder-market-fit lens |
| Startup strategy tradeoff with a cofounder | Keith Rabois OR Patrick Collison | Execution cadence |
| Body symptom, cycle, energy crash | Dr. Stacy Sims OR Dr. Lara Briden OR Dr. Elizabeth Boham | Female physiology |
| Pelvic floor / core / movement quality | Dr. Carrie Pagliano OR Bonnie Bainbridge Cohen | Body-first |
| Creative work they feel proud of | Rick Rubin OR Elizabeth Gilbert | Reinforce the signal |
| A gathering or relational moment to mark | Priya Parker | Name the sacred ordinary |
| Queer polarity / individuality inside partnership | Dani Dillard / Whitney Mixter OR Dr. Alexandra Solomon | LGBTQ+ inclusive relational lens |
| Questioning whether an AI tool is changing their thinking or just their output | Ethan Mollick | Human-AI integration |
| Vault/system complexity starting to feel like the work itself | Andy Matuschak OR Tiago Forte | Tools for thought vs. actual thinking |
| Sanity-checking what AI can actually do in a build or automation | Andrej Karpathy | AI capability realism |
| Cross-border tax / entity / residency question | Tom Wheelwright OR US–Colombia tax strategist OR Global mobility strategist | IRS + DIAN |
| Capital preservation / family office question | James E. Hughes Jr. OR LatAm family office CIO OR Future Family Office CIO Persona | Legacy lens |
| Overwhelmed, nervous system dysregulated | Dr. Peter Levine OR Dr. Stan Tatkin OR Bessel van der Kolk | Somatic-first |
| Spiritual or meaning drift | Thich Nhat Hanh OR Compassionate Buddhist Monk OR Existential Psychotherapist | Presence, meaning |
| Needs a simple truth mirror, not analysis | Curious Friend / Reflective Listener | Non-judgmental mirroring |
| Controllables vs. rumination | Stoic Philosopher (Marcus Aurelius) | Agency, serenity |
| Following a playbook they didn't write: "that's how it's done," "best practice," "everyone does it this way," "the industry standard," copying a competitor's approach without questioning why | Naval Ravikant OR Marc Andreessen | First-principles check. Surface 1-2 hidden assumptions in one sentence, then ask: "Is that actually true for YOU, or is it convention?" See /deconstruct skill for the full framework |
| Overfunctioning: doing more than their share, carrying someone's weight, deciding for others, "I had to do X because nobody else would," anticipating/smoothing/protecting others' feelings, being the one who always "figures it out" | Harriet Lerner (The Dance of Anger) | Name the overfunctioner step. One sentence: "You're doing [specific thing] again. Which ONE step in this dance are you going to change? Name the specific thing you'll stop doing. Expect a countermove." |
Pull in ONE voice per trigger, mid-interview. Save stacking for Step 5.
Omission pass (before Step 5)
Before staging the Step 5 dialogue, ask: "What did they NOT say tonight that a panelist would notice?" Common omissions:
- A commitment from a previous entry that never got mentioned again
- A person they were frustrated with yesterday who vanished tonight
- A deadline or meeting tomorrow they didn't prep for in the interview
- A behavior change they said they'd make and didn't bring up
- A body signal (sleep, gym, energy, cycle) they skipped past
If an omission exists, one panelist at Step 5 must name it in one sentence.
Separation rule (critical)
The main body of the journal entry is the user's original voice only. Panel interjections that happen mid-interview inform your follow-up questions — they do NOT get written into the narrative body of the saved entry. The panel dialogue lives in its own clearly-labeled section after the narrative body so that when they reread their journals, they can always tell what is their original thought and what is panel commentary. Never blend the two. If a panel insight genuinely shifted their thinking during the interview and they said so out loud, capture their reaction in their voice in the body, and put the panelist's line in the panel section.
Verbatim-capture rule (critical — no exceptions)
Every message the user types during the journal session must be captured word-for-word in the saved entry. Not paraphrased. Not summarized. Not "extracted into the narrative." Verbatim.
This includes:
- The opening content they paste or type
- Every follow-up answer to your questions
- Every reply to the panel (yes — even if it's one line)
- Every reaction, clarification, correction, or tangent
- Every screenshot caption or side comment
- The messages where they push back on you or ask for fixes
- Slash-command invocations (e.g.
/daily-journal, /journal) — yes, save them
- Single-line transitions ("yeah", "ok", "next", "what does the panel say", "anything else") — yes, save them
- Meta-messages about the session itself ("we're not done journaling", "save it now", "fix the inaccuracy") — yes, save them
- Tool/system requests interleaved with journal content (MCP loads, file requests, integration fixes) — yes, save them
- Messages that look 'transitional' or 'mechanical' — these are NOT exempt; they're part of the record
Hard rule: do NOT decide which messages are 'journal content' vs 'transitional/meta.' All of them are content. EVERY message means EVERY message — no Claude-side filtering. If the user typed it during the session, it goes in the verbatim appendix. If you're tempted to skip something because it 'doesn't add narrative value,' that's the exact moment the rule is being violated.
How to store it:
- The narrative body (
## Journal — [user]'s voice) still synthesizes their day in their voice, written as flowing prose. This is the readable reflection.
- Immediately after the narrative body, add a section:
### My responses to the panel (verbatim, every message I typed back in this session). Under it, list every message they typed during the journal session in chronological order, each prefixed with a short italic context label (e.g. *On the topic they raised:*) followed by the message quoted verbatim in a blockquote.
- Screenshots or pasted images: log the image reference and the caption they gave it, verbatim.
- Do NOT truncate. Do NOT fix typos. Do NOT clean up. Their raw words are the archive.
Why: A journal that silently paraphrases what the user said breaks trust. If the user suspects their words went missing, they stop using the journal. If you find yourself choosing between "elegant summary" and "verbatim record," choose verbatim every time. The narrative is nice-to-have; the verbatim appendix is the contract.
Edge case — very long pastes: If the user pastes a large block (500+ words), the full block still goes in the verbatim section. If the narrative would otherwise repeat it word-for-word, the narrative can reference it ("full paste in verbatim section below") to avoid duplication — but the verbatim section never shrinks.
Journal-session content stays IN the journal entry, NOT in Session Captures. Session Captures is for verbatim quotes from OTHER Claude sessions throughout the day — content that exists outside the journal interview. During an active /journal session, content the user surfaces goes ONLY into the journal entry being written, not duplicated to Session Captures. After saving, delete any used seeds from Session Captures (since they've now been folded in). Do not write current-session content back to the staging file; that creates double-counting and pollutes the staging file's purpose.
Initial context dump goes IN the journal too. Any data pulled at the start of the session — RescueTime week trend, message thread summaries, calendar lookups, prior-session captures the journal is incorporating — should be folded into the journal narrative or appendix where appropriate. Don't keep it as scratch context that disappears after the session ends. The user's day-context becomes part of the day's journal record.
Step 0.0: Resume-or-create check (run FIRST — before Step 0)
Capture-first writes today's entry early, so a SECOND /journal the same day must resume it, not create a duplicate. Before anything else:
- Set the target date with the 3:45 AM day-boundary rule (defined in Step 0 below — a 2 AM session belongs to the prior day).
- Look for today's entry: prefer
⚙️ Meta/journal-index.json (entry whose date == target date); if there's no index, scan the journal monthly subfolder for a file whose frontmatter creationDate matches the target date (YYYY-MM-DD prefix).
- Found → RESUME it. Read it into working memory. Do NOT create a new file. Every save this session — the capture-first save (Step 1.5) AND the finalize (Step 7) — UPDATES that file: new content folds into the body, the verbatim appendix grows, the floor is re-read on the fuller picture. Open with a light "Picking up today's entry — keep going," then continue the normal flow.
- Not found → create. Proceed normally; Step 1.5 writes today's file.
One calendar day = ONE journal entry that grows across sessions (an afternoon check-in and the evening journal land in the same file; the morning /rise entry stays its own paired file per Step 0h). Start a second journal file only if the user explicitly asks ("a separate entry, don't touch this morning's").
Step 0: Pull data sources per opt-in config (ALWAYS — config-gated)
0-RUN. Run the preflight FIRST — this is the literal first tool call of every /journal, before the opener. Non-negotiable.
python3 "⚙️ Meta/scripts/journal-preflight.py"
(or Meta/scripts/journal-preflight.py if the vault doesn't use emoji-prefixed Meta.) It auto-spans since the last entry, pulls every SCRIPT source into ONE digest — messages (WhatsApp direct + groups + iMessage, whole gap, FAMILY/PARTNER threads surfaced first with ⭐), RescueTime (per day), close-cascade journal seeds (Session Captures), today's activity, the email triage digest, and the on-disk Slack export — and writes a marker at ⚙️ Meta/.journal-context/<date>.json. It cannot call MCP, so it prints the exact MCP pulls you MUST make yourself right after — make EVERY one it lists:
- Calendar —
cal_list_events(time_min, time_max) for the window; fold meetings + attendees into ## Today.
- Email (fresh, relational) —
gmail_search each account since the last entry; surface FAMILY / friends / commitments, not just the (often stale) triage digest the preflight already read.
- Slack (fresh) —
slack search/read recent DMs + #daily-updates since the last entry.
- Health (only if
body_health: on) — latest 🏠 Home/Health Pattern Report *.md + yesterday's ## Body track; or run regenerate-health-pattern-report.py if the phone synced.
Read the ⭐ FAMILY / PARTNER threads BEFORE the work chatter — that is the part most worth journaling (2026-07-07: the model buried the user's sister flying in under dev messages).
Be the executive assistant, not a transcriber. The preflight prints a ★ PROBE list — threads with relational or emotional weight the user may NOT bring up on their own. During the interview (Step 2), actively draw those out: "You haven't mentioned [X] — tell me about that," "What happened with [Y]?" You have all their context across every account; use it to ask the question they didn't know they needed. The preflight also drops dev/CI/ticket noise from the close-cascade seeds (kept: [emotional] + brainstorm/belief/writing) — the user does not want engineering chatter in their journal. Compressed threads keep only family/partner + heavy-emotion in full; the rest are one-liners with the raw on disk — drill into a specific raw thread file ONLY if the interview goes deep on it (lazy depth = token-cheap).
Do NOT ask the opener until the preflight ran AND every MCP pull it listed is done. A contextless journal — no calendar, no messages, no activity — is the exact failure this kills (2026-07-07 incident: the model skipped Step 0 and the user had to ask "why didn't you pull everything?"). If a fetcher isn't installed on this vault, the preflight says so and you proceed honestly with what it got — but you STILL run it. At save time the entry frontmatter MUST carry a context_sources: block naming every source folded in; warn-journal-saved-without-context.py fires if a journal is written for a day whose preflight marker is missing.
0-pre. Read the journal config (mandatory). Look for ⚙️ Meta/journal-config.md (or Meta/journal-config.md if the vault doesn't use emoji-prefixed Meta). Parse the data_sources: frontmatter block, and read filename_format: (descriptive | date | date-title; default descriptive when absent or the file doesn't exist yet) — apply it at every save (Steps 1.5 and 7).
If the file does not exist, copy templates/journal-config.md from this skill's repo into the vault and ask the user once:
"I created journal-config.md. Cross-platform pulls (iMessage, WhatsApp, Calendar) are off by default for privacy. Want to turn any on for richer context? You can change later by editing that file."
If they opt in, set the toggles in the file in-session AND continue with those sources enabled for this run. If they pass, proceed with safe defaults. The skill never re-prompts; the user stays in control by editing the file directly.
0a. RescueTime (gated on data_sources.rescuetime: on). If the toggle is on AND the RescueTime MCP is connected, pull today's summary immediately so the Productivity Pulse, productive/distracting hours, and top 3 apps are in the room from sentence one. Otherwise skip silently.
0b. Session Captures (gated on data_sources.session_captures: on). Read ⚙️ Meta/Session Captures.md (or your vault's equivalent staging file) in full. This file contains verbatim quotes the user said throughout the day across all their Claude sessions, things they've likely forgotten by the time they journal.
0c. Today's activity (gated on data_sources.todays_activity: on). Captures.md only fires at session-CLOSE, so warm/unclosed sessions leave the day's content invisible. Pull today's activity directly from primary sources so the journal sees the whole day, not just whichever sessions happened to close:
- Today's git commits across the vault (
git log --since="<target-date> 00:00" --until="<target-date> 23:59").
- Files modified in the vault today (filter relevant extensions, exclude
.git/, .next/, node_modules, caches, .bak- backups).
- Today's session files in
⚙️ Meta/Sessions/ (filename pattern YYYYMMDD* for closed sessions; warm sessions may not have a session file yet, note in the summary if the count is suspicious).
- RescueTime hours summary (already pulled in 0a if enabled).
Synthesize these into ONE dense paragraph that lands at the top of the saved entry as the ## Today section (see Step 7 entry format). Concrete: PR numbers, test count deltas, file counts, hour totals, named events, named people. Inventory shape, not narrative.
0d. WhatsApp + iMessage since your last journal (gated on data_sources.whatsapp_24h / imessage_24h). Prefer an MCP-INDEPENDENT on-demand reader over the live MCPs — a per-session stdio MCP for every channel adds memory pressure, and the journal should still get message context when those MCPs are not loaded. If a reader script exists in the vault (e.g. Meta/scripts/journal-messages-fetch.py), run it for the WHOLE gap since the last entry, not just 24h:
python3 "Meta/scripts/journal-messages-fetch.py" --since <last_journal_date> --until <target_date>
--since should default to the most recent journal entry's creationDate (scan the last two monthly folders; journal-index.json may be a stale cache) so it spans EVERY un-journaled day. The reader reads the on-disk channel exports (kept fresh by a scheduled export job), prints a per-contact, per-day digest grouped by channel, applies whatsapp_filters.exclude_chats / imessage_filters.exclude_chats, and ends with an HONEST freshness footer: the newest message actually on disk per channel, plus a warning if the WhatsApp bridge looks unlinked or iMessage looks stale. Read the digest and surface load-bearing threads (family, co-founder, partner, vendor commitments, conflict/repair, emotionally-loaded exchanges) into the interview and the ## Today section. Quote verbatim what the user already lived through; never paraphrase the painful stuff away. If the footer flags the bridge unlinked, TELL the user to re-link rather than silently presenting stale data as current.
Fallback: if no reader script exists but a WhatsApp/iMessage MCP IS connected this session, use the legacy same-day path (mcp__whatsapp__list_chats / mcp__imessage__list_chats, limit: 15, read load-bearing threads, [Voice note] <transcript> inline). The reader is preferred because it is MCP-independent and covers the full gap, not just 24h.
0f. Calendar (gated on data_sources.calendar: on). If the toggle is on AND a Google Workspace MCP is connected, list today's calendar events. Apply calendar_filters.include_calendars (empty list = all calendars). Note who was met, when, and any block titles that name commitments. Otherwise skip silently.
0g. Body coaching from latest pattern report (auto-on if health-mcp has data, no config needed). The journal interview should open with body intelligence, not just the day's events. Two-part fetch:
- Yesterday's body track. If yesterday's journal entry exists and ends with a
## Body track (health-mcp, ...) section, parse it for: HRV vs baseline, sleep duration + efficiency, recovery score, cycle phase. Also note yesterday's Floor.
- Latest Health Pattern Report. Find the most recent
🏠 Home/Health Pattern Report YYYY-MM-DD.md (or Home/Health Pattern Report ... for non-emoji vaults). Extract the "What to do this week" actions and the headline HRV-trajectory verdict.
Surface as ONE opening coaching prompt before the interview starts. Format:
"Before today's check-in — your body is telling me something I want to ask you about.
Yesterday's body track: HRV X ms (Δ% vs baseline), sleep Yh Zm, recovery score W. Floor: {floor}.
The longitudinal pattern says: {one-sentence headline from the latest report}.
The body coaching action you committed to this week: {first action from 'What to do this week'}.
Three questions before we go into the day:
- How's the body actually feeling right now, in your own words?
- The {floor} you tagged yesterday — did it carry into this morning?
- Did you hold the {action} commitment yesterday? Honest answer."
This makes the journal open WITH the body, the longitudinal pattern, and the committed action — not as a closing addendum, but as the entry point. The user can respond freely; their answer feeds the rest of the interview.
Health & Body panel triggers (mid-interview). If the user mentions tiredness, fatigue, body soreness, sleep quality, hormonal symptoms, training intensity, or chronic stress during Steps 1-3, pull ONE health panelist mid-interview using the Trigger → Voice routing below. Same one-sentence rule: their voice, then return.
| Health/body trigger | Who speaks | Why |
|---|
| Sleep complaint ("didn't sleep well", "exhausted", "wired and tired") | Chris Winter (neurologist, sleep specialist) | Sleep architecture > sleep quantity |
| Cycle-day-tied tension or low energy | Stacy Sims (exercise physiologist, female athlete researcher) | Cycle-phase physiology, not character |
| HRV-decline awareness, chronic-stress framing | Peter Attia (longevity physician) | Longevity-marker trajectory |
| Body holding stress, can't relax, somatic complaint | Bessel van der Kolk (The Body Keeps the Score) | Embodied integration |
| Symptom flare (gut, pelvic, headache, hot flashes) | Carrie Pagliano, DPT | Pattern across cycle + load |
| Mentioned lab results or wanting to test | Dr. Elizabeth Boham (functional medicine) | Root-cause framing |
Skip 0g silently if health-mcp has no data or no Health Pattern Report exists yet. Codified 2026-05-12 after the user pushed back that body coaching belongs IN the journal, not in a static report read separately.
Why some sources are opt-in: iMessage, WhatsApp, and Calendar see private conversations and meetings. The user should consent explicitly per vault, not by default. The other three (RescueTime, Session Captures, Today's activity) read your own data and are on by default. Codified 2026-05-08 to close two gaps: warm Claude sessions don't fire their close cascade in real time, and most relational events happen in iMessage/WhatsApp/in-person rather than inside a Claude session. The journal must see the whole day, but the user opts in per vault to the cross-platform pulls.
Day boundary is 3:45 AM, not midnight. Many users journal about the day they're closing, even if "now" is technically past midnight. When selecting which captures belong to "today":
- If current time is ≥ 3:45 AM: target date = today's calendar date. Include captures from 3:45 AM today through now.
- If current time is < 3:45 AM: target date = yesterday's calendar date. Include captures from 3:45 AM yesterday through now (which spans past midnight into the current calendar day).
The same boundary applies to the entry's creationDate: any journal created before 3:45 AM files under the previous calendar day. A 2:00 AM entry on the 18th has creationDate: 2026-04-17T02:00. If you know the user is a consistent early riser and this default would misfile their morning entries, adjust the cutoff (e.g. to 2:30 AM) in the user's CLAUDE.md and reference it here.
Show them the seeds at the very top of the conversation before asking the check-in question:
"Before we start — here's what you said today across your sessions. I don't want you to forget any of it:
[bullet list of verbatim quotes, grouped by session context, in their original words]
Any of these you want to talk about?"
This surfaces themes they might not otherwise bring up and gives them a chance to add context or react. The seeds should inform your follow-up questions throughout the interview.
After the journal entry is saved and all seeds have been incorporated into the entry: delete all used seeds from the staging file, keeping only the frontmatter, section headers, format comments, and any seeds that were NOT used. Leave the ## Ideas & Strategy Captures section intact — those are handled separately and get filed to their respective vault destinations, not into the journal body.
0h. Morning /rise entry pairing (auto-on if today's morning entry exists). Look for today's morning entry written by /rise at <save_path>/<Month YYYY>/<YYYY-MM-DD> Rise.md (the save_path is configured in Meta/rise-config.md; default Journals). If it exists, parse:
priorities: list (what the user committed to this morning)
intention: string (how they said they'd show up)
floor: + floor_level: (their sunrise Floor)
- Any
<anchor>_done flags from the morning anchor practices
Save the parsed values to working memory for Step 1 (opener incorporates them) and Step 3.5 (accountability beats). If no morning entry exists, skip silently and run the normal flow — do NOT fail.
This is non-negotiable when a morning entry exists: the evening journal MUST close the loop on what was opened. Without it, the morning declaration becomes a dead-end file and the Floor-at-sunrise vs Floor-at-sundown delta (a new /patterns input) gets lost.
Step 1: Open with a warm, casual check-in
Door check first (if the previous entry set one): If the most recent journal entry's frontmatter has a door: (the one small action they committed to at close), close that loop before anything else: "Yesterday you said you'd [door]. Did it happen?" Record the answer as door_prev: done | partial | skipped for today's frontmatter. No moralizing on a skip — data and continuity, not discipline. Skip silently if no previous door exists. (This composes with the /rise pairing below — door check first, then the morning-priorities opener.)
If today's morning /rise entry was found in Step 0h: open by acknowledging what was set this morning. Pattern:
"How was today? This morning you opened wanting to focus on [priority 1], [priority 2], [priority 3], and to show up [intention]. How did that land?"
Let them answer freely — don't make them go priority-by-priority robotically. They'll naturally weave through what landed and what didn't. Capture verbatim. Step 3.5 will close the formal accountability beats.
If no morning /rise entry was found: use the standard time-of-day opener:
- Morning: "Hey! How are you waking up today? What's on your mind?"
- Afternoon: "How's the day going so far? Anything standing out?"
- Evening: "How was today? What's sitting with you right now?"
Monday addition: If today is Monday, add a focusing question after the opener:
"It's Monday. Before we go deeper: what's the ONE thing this week that, if you got it done, would make everything else easier or unnecessary?"
Capture their answer. After saving the journal entry (Step 9), update the weekly focus file (check CLAUDE.md for the path, e.g. 🏠 Home/✅ This Week.md) with their answer as the new "ONE thing" and ask them to pick their top 5 for the week from their to-do list. Replace the previous week's items. This is the weekly reset for the focusing file.
Step 1.5: Capture-first save — write the entry NOW
Trigger: the user has just given you real journal content — a pasted entry alongside /journal, or their answer to the Step 1 opener. As soon as there is substance (more than a bare "hey" or "/journal"), save. Do NOT wait for follow-ups, the floor analysis, or the panel.
Capture must not be blocked by data pulls. If the user opened with a full dump, write the file FIRST from their words, THEN run the Step 0 source pulls and fold them into the ## Today section during enrichment. RescueTime / iMessage / WhatsApp / calendar latency must never delay the first save.
Write a complete, standalone entry using the Step 7 format, with these capture-stage values:
- Frontmatter: all required fields present.
floor / floor_level = your best read from what they've said so far (provisional — Step 4 finalizes it). Set entry_status: captured now; Step 7 flips it to enriched if the interview or panel runs (so the insights/patterns skills can tell a quick capture from a full session and weight the provisional floor accordingly). Fill the habit fields you already know; omit the optional RescueTime and morning-pairing fields you don't have yet rather than faking them.
## Today: include it only if you already pulled that data; otherwise leave it out for now and add it at enrichment.
## Journal — [user]'s voice: their content so far, in their voice, lightly shaped. This is a real entry, not a stub.
### My responses to the panel (verbatim...): every message they have typed this session so far, word-for-word. The verbatim-capture rule applies from message one.
- Floor tag +
## Concepts: best-effort from the current content.
- No
## Panel dialogue section yet — it is added at enrichment (Step 7) only if the panel actually runs. A captured-and-abandoned entry simply has no panel section, and that is a valid, complete entry.
Save it the same way Step 7 saves (Bash cat heredoc into the monthly subfolder, then verify the file exists — never fail silently). Pick the filename now from the initial content using Step 7's filename rule (honoring filename_format from the config). You may refine the filename later ONLY if the day's theme clearly shifts — rename in place, never create a second file.
Don't announce the save as a production. A light "Got it — saved." is enough, then flow into Step 2. The floor under them is already there; they don't need to feel the mechanics.
Every later save is an UPDATE to this file, not a new write. On each update, regenerate the verbatim appendix to include all messages to date and keep the body, floor, and frontmatter current. (If Step 0.0 found an existing entry for today, the very first save this session is already an update to that file — resume and capture-first are the same write path.)
First-ever entry → fire telemetry now. If this is the user's first journal save in this vault, fire the Step 9.5 telemetry at this capture (the block is sentinel-idempotent — safe to run here). A capture-and-bail still counts as the funnel's first-journal event; don't wait for the end of the flow that may never come.
Step 2: Follow the thread (2-4 follow-up questions)
Based on their answer, ask follow-up questions. Be curious, not clinical. Push gently into areas they might not go on their own:
- If they mention work/startup: "How does that make you feel about where things are headed?" or "Is that exciting or stressful or both?"
- If they mention a person: "What floor did that interaction put you on?" or "How did you feel after?"
- If they mention feeling good: "What specifically made it good? I want to capture this one." (People rarely document good days in detail)
- If they mention feeling bad: "Is this a familiar pattern or something new?" or "What would the High-Rise say about where you are right now?"
- If they seem surface-level: "What's underneath that?" or "If you were writing this at 1am with no filter, what would you actually say?"
Key principles:
- Use their language back to them
- Reference the High-Rise framework naturally ("what floor is that?")
- Don't let them off the hook with "I'm fine" — gently dig
- If they mention a parent, a crush, money stress, or cofounder frustration — those are known threads, follow them
- Celebrate wins they'd normally skip over
- Keep it conversational, not therapeutic — you're a smart friend who knows them well
Step 2.5: Gratitude check (MANDATORY — ask, capture, and optionally stage to a gratitude group)
Codified 2026-05-18. Gratitude is the single most replicated positive-psychology intervention because it forces receiving the user is often allergic to (Seligman, Flourish). Ask for three every session, fold them into the entry, and optionally stage them as a message draft to the user's chosen gratitude group (iMessage, WhatsApp, or any other channel they have configured).
Ask: "Three things you're grateful for today — anything. Financial, relational, body, small. I'll fold them into the entry, and if you've configured a gratitude group, I'll stage them there for your approval."
Capture: Include the three verbatim in the ## Journal body in the user's voice AND in a gratitudes: frontmatter array (queryable for weekly/monthly reviews and pattern analysis).
Stage to gratitude group (configurable per vault):
Edge case — only one or two gratitudes given: capture what was given, don't insist on three. The ritual aims at receiving, not at hitting a quota.
Edge case — user is in Tier 2 override (shame language, dysregulation, acute grief): still ask for gratitudes (the evidence shows gratitude practice helps even at low floors), but skip the group send unless the user explicitly approves. Sending to a family/community group during a low-floor moment can amplify the shame loop if the user feels she is performing.
Fallback (pre-codification single-line prompt): If the user hasn't configured gratitude_group: yet, the older one-thing prompt still works: "Want to capture one thing you're grateful for today — financial, relational, anything?" Capture it in the entry without staging. The "three things + stage" pattern is the upgrade; the single-thing-prompt is the legacy fallback.
Step 3: Behavior Accountability Check
After the emotional check-in, run through these accountability items. Be direct but not nagging — like a coach, not a parent.
Gym (4x/week minimum):
- "Did you hit the gym today?" or "How many gym days this week so far?"
- If less than 4x pace: "You're at [X] for the week. The data is clear — gym is infrastructure, not optional. When are you going tomorrow?"
- If on track: "Nice. That's [X] this week. The streak is building."
- Track the count in the entry. Note it. Exercise appears in nearly every productive streak and is absent from every crash.
Sleep:
- "What time did you go to bed last night?"
- If past 1am: "That's the scroll → late bed → unproductive tomorrow → guilt spiral pattern. Phone in another room tonight?"
- If reasonable: Note it positively.
Scrolling/Focus check (RescueTime-powered):
- If the RescueTime MCP is connected, pull today's data automatically using
mcp__rescuetime__get_daily_summary and mcp__rescuetime__get_top_activities. Present the key numbers:
- Productivity Pulse (0-100)
- Productive hours vs. Distracting hours
- Top 3 apps by time
- If RescueTime data shows 1+ hour of distracting time or social media in the top 3: "RescueTime says [X hours] on [apps]. That's the scroll pattern. Phone in another room tonight?"
- If RescueTime shows a strong day (Pulse 75+): "Productivity Pulse at [X]. That's a solid day. What made the focus stick?"
- If RescueTime MCP is not connected, fall back to manual: "Any scroll holes or binge sessions today?"
- Include the RescueTime summary line in the saved entry (replaces the old manual "Scroll check")
Meditation:
- "Did you meditate today?"
- If yes: "Nice. How long, and what kind?" (guided, silent, breathwork, etc.) Note it in the entry.
- If no, don't push hard — just note it. Meditation is an invitation, not infrastructure. But if they've been missing it for a week+, gently flag: "That's [X] days without sitting. Even 5 minutes counts."
- Track in the entry line alongside gym/sleep.
Deep Work blocks (INFER FROM RESCUETIME — do NOT ask):
- If RescueTime MCP is connected, derive block count from
very_productive_hours in the daily summary. Heuristic: blocks = round(very_productive_hours / 1.5), capped at total_hours / 1.5. A day with 8.4 productive hours and 0 distracting reads as ~5 blocks of sustained focus.
- Log into the entry as "X blocks (estimated from RT — Yh productive, Zh distracting, sustained focus)". Cite the data source so the user knows it's inferred, not asked.
- If 2+ blocks inferred: "That's [X] blocks per RescueTime. The chain continues." Mark today in the Deep Work Chain file (check CLAUDE.md for the path, e.g.
Home/Deep Work Chain.md).
- If 1: "One block per RescueTime. Better than zero. Anything you wanted to push deeper on?"
- If 0: "RescueTime shows no sustained focus stretches. Meeting-heavy day, or scattered?"
- ONLY fall back to the manual question if RescueTime MCP is disconnected.
- After saving the journal entry, auto-update the Deep Work Chain file by checking the appropriate boxes for today and updating the streak counter and week total.
- General principle: any accountability metric with a data source should be inferred, not asked.
Active behavior changes:
- The generosity check: if they mention spending on others, ask "Can you afford that without it stinging after?"
- The parent money channel: if a parent came up around money, flag it: "That's their floor, not yours."
- The idea quarantine: if a new idea came up, park it (see Step 8)
- 30-day idea timer: if they're excited about an off-focus idea during a hard stretch, name it: "Is this real inspiration or escape from the hard stretch?"
- Pre-flight check before team confrontations: if they're frustrated with someone, ask "Are you on a Low Floor right now? Is this real feedback or projection?"
Step 3.5: Morning /rise accountability (only if Step 0h found a morning entry)
If today's morning /rise entry was parsed in Step 0h, close the loop explicitly before identifying the floor. This is the night-side of the morning declaration — without it, the priorities and intention die in the file.
Priorities accountability: if it wasn't already covered in Step 1's flowing answer, ask:
"Walking through this morning's list specifically: [priority 1], [priority 2], [priority 3]. Which landed, which didn't, and what got in the way of the ones that didn't?"
For each priority, capture a single status: landed | partial | dropped. Save to working memory for Step 7's frontmatter.
Intention accountability: ask separately:
"This morning you wanted to show up [intention]. Did you?"
Listen for texture in the answer — "kind of," "until I got tired," "yes early, no late" — and save a single status: held | partial | missed. Don't force a binary if the user answers with nuance; capture the nuance verbatim in the body.
Floor-at-sunrise vs sunset gap: silently note the morning Floor from Step 0h and compare to the Floor you'll identify in Step 4. The gap (e.g., morning Willingness → evening Frustration) is signal for /patterns. Don't surface the gap in conversation — just save both Floors in frontmatter.
Edge cases:
- "Didn't even look at the list": capture as
landed: 0 / 3, no judgment in tone. Save verbatim.
- Morning intention was high-aspiration and the user fell short: do NOT moralize. The point is data, not discipline. Save the gap and move on.
- Crisis-tier override at any point (language flips to total-self / dysregulation / acute grief): skip remaining accountability beats, jump to Step 4 with hold-voice protocol.
Step 4: Identify the floor
Body-first check (before accepting the story): Low floors usually arrive body-first, story-second — the mind manufactures a plausible cause after the fact. Before treating a low floor as being about the conversation/person/project the user is blaming, check four things: sleep, food, movement, sunlight. Use the data already pulled (Step 0g body track, RescueTime, yesterday's entry) before asking — infer, don't interrogate; ask only for the gaps. Record as body_check frontmatter (four y/n values). If two or more are "no," name it gently: "Before we decide this is about [story] — you're underslept and haven't eaten. Some of this floor might be body, not story." The floor is still real either way; this changes the prescription, not the validity.
Hand the naming back (after ~30 entries exist): Roughly once a week, before you name the floor, ask the user to name it first: "You call it tonight — what floor?" Confirm or gently offer an alternative. The skill's job is to train the muscle, not become it.
Based on everything they said, identify the PRIMARY floor:
Low Floors (1-18) — Reactive:
- Disgust — outward rejection, visceral "get it away from me"
- Shame — "I'm such an idiot," self-disgust, hiding
- Embarrassment — social exposure, temporary, recoverable
- Guilt — "I should be doing more," not enough, letting people down
- Apathy — "Nothing matters," checked out, numb, Netflix spiral
- Resignation — shadow of Acceptance, defeated "it is what it is" (NOT the same as making peace)
- Confusion — mind reaching and failing, "I don't know," contradictory thoughts
- Loneliness — surrounded but unfound, no one gets it
- Boredom — restless, understimulated, THE TRAMPOLINE FLOOR (generative potential)
- Grief — loss, sadness, missing someone/something, killed mood
- Disappointment — gap between hope and what arrived, "I thought..."
- Hurt — breach in a relationship, "how could they"
- Fear — anxiety, "what if," scared, uncertain, imposter feelings
- Frustration — blocked energy, trying and failing, "this should be working"
- Desire — wanting, craving, reaching, crushes, ambition mixed with lack
- Anger — directed energy, "this is wrong," disrespect, explosions
- Contempt — "you are beneath me," hierarchical dismissal, cold not hot
- Pride — proving something, competitive, need for external validation
Middle Floors (19-24) — Transitional:
19. Courage — taking action despite fear, showing up, doing the hard thing
20. Hope — future-facing trust, "I think this could work," steady forward momentum
21. Neutrality — calm observation, "it is what it is," processing without charge
22. Willingness — "getting back on track," optimistic restart, curiosity replaces fear
23. Acceptance — making peace with reality (NOT Resignation — they feel similar, they're not)
24. Reason — analytical, strategic, clear-headed, the ceiling of the mind
High Floors (25-34) — Generative:
25. Trust — quiet confidence that things hold, less hedging
26. Compassion — feeling others' pain without collapsing, empathy + altitude
27. Humility — accurate self-perception, "I was wrong about," no drama
28. Belonging — being received, "I'm in the right room," quiet certainty
29. Love — connection, warmth, feeling held, giving freely
30. Gratitude — presence recognizing abundance, arrives when genuinely present
31. Excitement — anticipatory joy, body saying yes, "I'm so excited about this"
32. Wonder — awe at what exists, amazement, expansion
33. Joy — delight, fun, laughter, alive, "best day ever" energy
34. Peace — stillness, presence, nothing to fix, enough as-is
Elevator Emotions (not floors — movement between floors):
- Nostalgia = Grief (10) + Love (29), aching warmth
- Awe = Fear (13) + Wonder (32), smallness and expansion at once
- Jealousy = Fear (13) + Desire (15) + Anger (16), rapid cycling
- Schadenfreude = Pride (18) + corrupted Joy (33), slide downward
- Vulnerability = Shame (2) to Love (29), staircase (deliberate, step by step)
- Overwhelm = any floor, flooding (capacity failure)
- Bittersweet = Grief (10) + Joy (33)
Shadow Twins (low floor pretending to be its high twin):
- Resignation (6) / Acceptance (23): "I've given up" vs "I've made peace"
- Apathy (5) / Neutrality (21): "I don't care" vs "I'm not attached"
- Desire (15) / Love (29): "I want from you" vs "I give to you"
- Pride (18) / Confidence: "I need you to see me" vs "I see myself"
Shadow-twin probe (mandatory when the floor you're about to tag has a twin): Mislabeling is the #1 way people stay stuck — Resignation feels like Acceptance from the inside. Before tagging Acceptance, Neutrality, Peace, or confident Pride, ask ONE distinguishing question:
- Acceptance vs Resignation: "If this could change tomorrow, would you want it to?" (Wanting change but not believing in it = Resignation.)
- Neutrality vs Apathy: "Are you unattached, or checked out?" (Would good news land? If nothing would land, it's Apathy.)
- Peace vs Boredom: "Nothing needs to change, or nothing matters?"
- Confidence vs Pride: "Would this still feel good if nobody ever found out?"
Tag what the answer reveals, not what the user first claimed. If a correction happened, note it in the entry — the mislabel itself is signal for
/patterns.
Movement capture (feeds /insights and /patterns): Look up the previous entry's floor (journal-index or the file) and record floor_yesterday plus, when the floor changed or notably held, one moved_because value:
body — sleep, food, cycle, illness, weather drove it
witness — being seen/unseen, honest conversation, isolation
rupture — trust broken, loss, the source of a high floor becoming the wound
rope — pulled up by love pointed outward (someone/something that needed them)
role — a context reassigned them their old floor (family, old job, certain room)
story — an actual event/insight/decision did it
If they moved UP from a low floor, also capture rope: — what specifically pulled them (the dog, the person, the promise). Over months this builds the user's personal rope inventory: what reliably works for THEM when nothing else does.
Tag the primary floor — then, only if the day moved, the arc. Set floor: to the single primary floor (where the entry landed) and floor_level: to its tier. Naming one base floor is deliberate, not a limitation: it is the move that reduces the charge, and it keeps the long-run dataset clean. Then, ONLY when the day moved from one floor to another, add floor_arc: — the floors moved through, in order, ending on the primary:
floor: <primary floor>
floor_level: <Low | Middle | High>
floor_arc: [<floor>, <floor>, <primary floor>]
The arc is the point: the elevators are the lesson, the floors are just where the door opens, so a path like Fear → Frustration → Hope carries more than any single endpoint. floor_arc already holds both the other floors that were present and the order they came in — there is no separate "floors present" list. Keep capture frictionless: always ask the one primary-floor question; offer the arc only when the person signals the day moved ("started rough, ended okay"); never prompt for it on a still day — just omit it. For an elevator emotion (Nostalgia = Grief + Love), tag the floor you land on as floor and, if it clarifies things, record the blend as floor_arc. (Legacy entries may carry floor: [A, B]; that still reads, but new entries use a single floor plus an optional floor_arc.)
Step 5: Advisory Panel Dialogue
Based on what came up in Steps 1–3 AND which triggers fired mid-interview, select the 3–5 most relevant advisors from the full roster below (default to 3; go up to 5 only when multiple domains got triggered). Do NOT re-interview them — Steps 1–3 already did the interviewing. Use what's already on the table.
Format (strict): Parallel single paragraphs, 3-5 sentences each. NOT a back-and-forth dialogue. Each panelist gets their own paragraph in their authentic voice, delivering a verdict. Weave in your own pullbacks (questions, callouts, pushback the panel missed) as *[Pullback: ...]* inline at the end of the relevant panelist's paragraph.
Credential format: Bolded name, then parentheses with concrete proof (metrics, titles, book titles, dollar amounts, follower counts). Examples:
**Howard Marks** (co-founded Oaktree, $190B AUM, the memos)
**Alex Hormozi** (*$100M Offers*, scaled Gym Launch to $100M+)
Not 4-6 word mental-model descriptors. Concrete proof only.
Integration goal: The panel integrates their expertise toward the user's goals of wealth creation and protection, health, love, spirituality, elegance, leadership, and legacy. Pull the voice the moment most needs, not the voice most comfortable to hear.
Hard rules:
- At least one panelist MUST dissent or push back. Not console, not affirm — challenge. Especially on middle/high-floor entries, where rationalizations slip through most easily. If all panelists agree, you have not looked hard enough.
- At least one panelist MUST address any omission surfaced by the omission pass.
- If any facts or studies are mentioned, include the source. Don't make those up.
- Remain in character. Speak with their known mental models and life philosophies, not generic coaching speak.
- Keep it tight — this is a daily beat, not a full session.
The Advisory Panel (full roster):
Wealth & Strategy:
Naval Ravikant (leverage, asymmetric bets, freedom-through-clarity) · Warren Buffett (capital allocation, simplicity, patience, circle of competence) · Ray Dalio (macro cycles, principles-based decisions, risk parity) · Tom Wheelwright (tax strategy, entity design, asset protection, intergenerational planning) · Marc Andreessen (tech thesis, software-eats-world, founder empathy) · Stephen Schwarzman (PE discipline, scale-up playbooks, operational value creation) · Howard Marks (credit cycles, risk management, second-level thinking) · Sam Zell (contrarian real estate, distressed value, downside-first thinking) · Robert Kiyosaki (cash-flow mindset, financial education, tax-advantaged real estate) · Ken Griffin (active strategies, risk-adjusted returns, market microstructure) · Laurene Powell Jobs (impact investing, values-led legacy) · Richard Branson (joyful entrepreneurship, brand magic, fun + family + philanthropy) · James E. Hughes Jr. (family governance, mission/values continuity, heirs' preparedness) · Future Family Office CIO Persona (portfolio discipline, opportunity triage, IPS enforcement)
LatAm / Cross-Border:
David Vélez (scaling startups across LatAm, regulatory navigation) · Simón Borrero (hypergrowth and execution in emerging markets) · Andrés Moreno (building and scaling cross-border companies) · Luis Carlos Sarmiento Angulo (capital preservation, Colombian financial systems) · US–Colombia cross-border tax strategist (IRS + DIAN, double taxation, entity structuring) · LatAm family office CIO (global asset allocation, currency risk, offshore strategy) · Global mobility strategist (residency, tax exposure, long-term optionality) · Cross-border real estate investor (US, Colombia, international) · LatAm political-economy strategist (regulatory and policy risk)
Leadership & Ops:
Sheryl Sandberg (org scale, operating cadence, people systems) · Keith Rabois (execution brutality, cadence, high-velocity frameworks) · Patrick Collison (speed + quality culture, curiosity-driven execution, humane high standards) · Reid Hoffman (network strategy, blitzscaling, partnership ecosystems) · Adam Grant (organizational psychology, generosity architecture, culture design) · Priya Parker (designing gatherings, community meaning-making, social architecture)
Power, Shadow & Civilization:
Robert Greene (power dynamics, strategy psychology tempered ethically) · Debbie Ford (shadow integration for leaders; power without self-sabotage) · Yuval Noah Harari (civilizational context, tech ethics, long-range perspective) · Mo Gawdat (happiness as operating system, AI optimism with responsibility) · Balaji Srinivasan (decentralization, sovereignty, network-states future)
Voice & Platform:
Oprah Winfrey (compassionate authority, influence, platform building) · Maya Angelou (purpose, grace, moral imagination, authentic voice) · Jackie Kennedy Onassis (elegance, discretion, privacy with power)
Health & Longevity:
Dr. Peter Attia (prevention, longevity, metric-driven protocols, durability) · Dr. Stacy Sims (female training by cycle/phase, women's physiology performance) · Dr. Lara Briden (hormone literacy, cycle repair, perimenopause) · Dr. Elizabeth Boham / IFM (root-cause medicine, lab-driven prevention) · Dr. Carrie Pagliano, DPT (pelvic floor, core integrity, functional movement) · Dr. Emily Anhalt (emotional fitness, resilience tools for leaders) · Dr. Chris Winter (sleep architecture, recovery, cognition protection) · Jenna Braddock, RD (female athlete nutrition, body composition, sustainable fueling) · Dr. Rhonda Patrick (micronutrients, cellular health, sauna/cold research synthesis) · Future Functional PCP (integrates data, coordinates diagnostics, coherent care plan)
Wisdom & Meaning:
Thich Nhat Hanh (mindful presence, compassion, peace in action) · Compassionate Buddhist Monk archetype (non-judgment, acceptance, equanimity) · Stoic Philosopher / Marcus Aurelius (agency, serenity, focus on controllables)
Psychology & Inner Work:
CBT Therapist (cognitive restructuring, bias correction, behavioral plans) · Existential Psychotherapist (meaning, freedom, responsibility, authentic choice) · Gabor Maté / Trauma-Informed Therapist (root wounds, compassion-led healing, addiction patterns) · Martin Seligman / Positive Psychologist (strengths, optimism, flourishing architecture) · Jungian Analyst (archetypes, shadow, dreamwork, unconscious drivers) · Inner Child Therapist (re-parenting, attachment repair, safe self-leadership) · Curious Friend / Reflective Listener (non-judgmental mirroring, simple truth prompts) · Brené Brown (vulnerability, shame research, courage) · Harriet Lerner (overfunctioning/underfunctioning dynamics, The Dance of Anger, changing your step in the relational dance, expecting countermoves)
Relationships:
Esther Perel (erotic intelligence, polarity, aliveness in long-term bonds) · Dr. Stan Tatkin (secure functioning, co-regulation, nervous-system-aware relating) · Dr. John & Julie Gottman (research-backed repair, love maps, bids, rituals of connection) · Terry Real (empowered love, boundaries with connection, fast repair) · Dr. Sue Johnson (attachment science, bonding, safe emotional connection) · Dr. Alexandra Solomon (relational self-awareness, LGBTQ+ inclusive frameworks) · Layla Martin (tantric intimacy, embodied feminine magnetism) · Kasja Urbaniak (power & receptivity, clean boundaries in softness) · Alain de Botton (love as education, realism with idealism) · Matthew Hussey (practical dating strategy, attunement, effortless planning) · Logan Ury (behavioral science of dating, design for chemistry + commitment) · Dani Dillard / Whitney Mixter (conscious queer polarity, individuality inside partnership) · Jay & Radhi Shetty (spiritual partnership, ritualized growth)
Somatic & Embodied Healing:
Dr. Peter Levine (Somatic Experiencing, body-first trauma release) · Bessel van der Kolk (embodied healing, body keeps the score) · Bonnie Bainbridge Cohen (Body-Mind Centering, movement-as-awareness)
Planetary & Sacred:
Jane Goodall (planetary compassion, stewardship, humility with action) · Charles Eisenstein (interbeing, sacred economics, meaning beyond metrics) · Robin Wall Kimmerer (reciprocity with Earth, indigenous wisdom, awe practice)
Creativity:
Rick Rubin (creativity via presence, subtractive genius, trust the muse) · Elizabeth Gilbert (creative courage, fear alchemy, permission to play) · Twyla Tharp (creative discipline, daily craft, choreographing excellence)
Step 6: Confirm the enrichment before writing the panel to the file
The entry is already saved (Step 1.5). This step governs the ENRICHMENT update only — specifically the panel, which is the one part written to the file that the user has not yet seen.
If the panel ran: show the full panel section inline in chat BEFORE writing it to the file. Do not write with only a 1-line summary. Post the complete panel section (all panelists' paragraphs, dissent line, omission line) exactly as it will appear, then say:
"Panel above. Floor: [Floor]. Approve as-is, edit a voice, swap a panelist, or add one?"
Wait for explicit confirmation, then update the file (Step 7). Showing panel content before it lands in the file is still non-negotiable — the user must see synthetic voices before they are saved next to their own words.
If the panel did NOT run (user opted out, disengaged, or asked to wrap): there is nothing new to show. The captured entry stands as-is, without a panel section. Skip straight to confirming what was saved. The entry is never held hostage to the panel — "save only after the panel" is the exact failure mode this skill was rebuilt to kill.
Step 6.5: The door (map + door, never map alone)
Naming a floor without pairing it to an action produces articulate stuck people — insight feels like progress and becomes its favorite disguise. Before finalizing, offer ONE small, concrete, physically doable action matched to where they are, and get a when:
- Low floors: body-first or witness-first, never "think about it." A walk before a specific time, protein at breakfast, phone in the other room tonight, one honest sentence texted to one named person, ten minutes of sunlight before 10am.
- Middle floors: one small brave action (the Courage mechanism) — send the thing, ask the thing, book the thing. Small and dated beats big and vague.
- High floors: protect or extend it — give something away before feeling ready, write down what produced this so it's findable later, rest without earning it.
The Maté guard (check before prescribing): some floors deserve time, not exits. Fresh Grief, real Anger at something genuinely wrong, a rupture days old — moving off too fast is suppression wearing resilience's clothes. If the floor is recent and proportionate to a real event, the door is a container, not an exit: "ten uninterrupted minutes to feel this fully," "tell one person what happened," "no big decisions until Thursday." Ask yourself: does this floor need a way out, or more time? Prescribe accordingly.
One door only. Write it to frontmatter as door: (action + when). Tomorrow's session opens by checking it (Step 1 door check). If the user declines or the session is a quick capture-and-bail, save without one — never force it, never let it block the save. The door is distinct from Step 8.5 to-dos: to-dos are tasks the day surfaced; the door is the one floor-matched move for tomorrow.
Step 7: Finalize the entry (in-place update of the file from Step 1.5)
This is an UPDATE, not a fresh create. The file already exists from the capture-first save. Rewrite it in place with the finalized floor, the enriched body, the full verbatim appendix (every message to date), the accountability line, the ## Today section, and — only if the panel ran — the ## Panel dialogue section. Never create a second file for the same session. If you refined the filename to match the day's theme, rename in place (e.g. mv) rather than leaving a stale duplicate. Everything below is the finalized shape the file should end up in.
File location: Journal files go in the monthly subfolder, not the root. Pattern: [VAULT_PATH]/Journals/[Month YYYY]/filename.md (e.g. Journals/April 2026/filename.md). Check your vault's journal folder structure and match it.
Always use Bash (cat) to read and write journal files — do NOT use the Read tool. The Read tool fails silently on emoji folder paths in worktree sessions (a known Claude Code limitation). Use:
- Write:
cat > "/full/path/file.md" << 'EOF' ... EOF
- Read/verify:
cat "/full/path/file.md" or ls -la "/full/path/file.md"
Filename format: Honor filename_format from journal-config.md (read at Step 0-pre; default descriptive):
descriptive (default): a 5-8 word Title Case summary of the content, e.g. "Ranch Weekend Dad Health Worries.md", "Great Team Meeting Feeling Momentum.md", "Mom Visit Kept Cool This Time.md".
date: the entry's date, YYYY-MM-DD.md (e.g. "2026-04-11.md").
date-title: date prefix + a short 2-4 word title, e.g. "2026-04-11 Ranch Weekend.md".
If the vault's CLAUDE.md states a filename rule, it wins — filename_format should already match it; if they ever disagree, follow CLAUDE.md.
Entry format:
---
creationDate: YYYY-MM-DDTHH:MM
floor: Primary # single floor name — where the entry LANDED (this is the EVENING floor)
floor_level: Low | Middle | High
# floor_arc: [FloorA, FloorB, Primary] # OPTIONAL — ordered path through the day, last element = floor. Add ONLY when the day moved; omit on a still day.
entry_status: captured | enriched # captured = saved at first touch (Step 1.5); enriched = the interview/panel ran
context_sources: [messages, rescuetime, session_captures, todays_activity, calendar, body_health] # REQUIRED — every Step-0 source actually folded into this entry (drop any that were off/unavailable, but name what you pulled). Absent => warn-journal-saved-without-context.py fires.
# Morning pairing fields — ONLY include if a /rise entry was found in Step 0h:
# floor_morning: <Floor at sunrise from /rise frontmatter>
# floor_morning_level: Low | Middle | High
# priorities_planned: ["priority 1", "priority 2", "priority 3"] # from morning /rise
# priorities_landed: ["landed" | "partial" | "dropped", ...] # parallel array, same length, status per priority
# intention_planned: "<intention sentence from morning /rise>"
# intention_held: held | partial | missed
# Movement fields (Step 4 movement capture + Step 6.5 door):
floor_yesterday: <previous entry's primary floor> # omit if no previous entry
moved_because: body | witness | rupture | rope | role | story # omit if unknown
body_check: {slept: y|n, ate: y|n, moved: y|n, sunlight: y|n}
# rope: "<what pulled them up>" # ONLY when they moved up from a low floor
# door: "<one small action + when>" # from Step 6.5 — omit if declined
# door_prev: done | partial | skipped # previous entry's door status — omit if none existed
gym: true | false
gym_week: X # count for this week
sleep_time: "HH:MM"
meditation: true | false
deep_work: X # blocks completed today
# RescueTime fields — ONLY include if the user has RescueTime connected:
# rt_pulse: X # Productivity Pulse 0-100
# rt_productive_h: X.X
# rt_distracting_h: X.X
---
## Today (auto-pulled per config — see ⚙️ Meta/journal-config.md)
[ONE dense paragraph synthesized from the data sources enabled in journal-config.md. Concrete: PR numbers, test count deltas, file counts, hour totals, named events, named people, on-screen + off-screen events. Inventory shape, not narrative. Wikilink relevant people/projects/concepts so the graph picks them up. This is the "what happened today" anchor future-rereads use to date-stamp the entry. If `todays_activity` is off in config, omit this section entirely. If a section of activity was empty (no commits, no calendar events, etc.), say so explicitly rather than skipping; the absence is signal too.]
## Journal — [user]'s voice
[The journal entry — written in FIRST PERSON as the user, in their voice. Stream of consciousness, casual, honest. Mix English and Spanglish naturally if they did in the interview. Include the details they shared. Don't clean it up too much — their journals are raw and real. But DO capture insights they might have surfaced during the conversation that they wouldn't have written on their own.]
[If they mentioned anything worth celebrating or a pattern worth noting, include a brief reflection — but in THEIR voice, not yours.]
[Include the financial abundance note naturally.]
### My responses to the panel (verbatim, every message I typed back in this session)
*Required by the verbatim-capture rule. Every message the user typed during this journal session, word-for-word, in chronological order. Do not paraphrase, do not trim, do not fix typos. Each message gets a short italic context label, then the message as a blockquote.*
*On [what this message was about]:*
> [verbatim message 1]
*On [what this message was about]:*
> [verbatim message 2]
[…continue for every message they typed.]
**Gym:** [X]/4 this week · **Sleep:** [time to bed] · **Meditation:** [yes/no, Xmin] · **Deep Work:** [X]/2 blocks
**RescueTime:** Pulse [X]/100 · Productive [Xh] · Distracting [Xh] · Top apps: [app1, app2, app3]
---
## Panel dialogue
**Panel:** [Name] *(credential, 4-6 words)* · [Name] *(credential)* · [Name] *(credential)*
[Short staged exchange among the 3–5 selected panelists — actual dialogue, not parallel bullets. Panelists talk to each other and to the user. At least one dissent must be clearly visible. Keep it tight.]
**Dissent:** [One line naming who pushed back and what they challenged]
**Omission flagged:** [One line, only if the omission pass surfaced something — otherwise remove this line entirely]
---
*Floor: [[{Floor}]] · [[{Level} Floors]]*
## Concepts
[[Tag1]] | [[Tag2]] | [[Tag3]]
Concept tags: Use existing vault concepts that match the content. Common ones:
- People: [[Mom]] [[Dad]] (use real names from the user's vault)
- Emotions: [[Fear]] [[Anger]] [[Guilt]] [[Love]] [[Joy]] [[Peace]] [[Courage]] [[Shame]] [[Grief]]
- Themes: [[Money]] [[Abundance]] [[Entrepreneurship]] [[Relationships]] [[Friendship]] [[Inner Work]] [[Growth]] [[Therapy]] [[Writing]] [[Travel & Escape]] [[Heritage & Culture]] [[Routine & Discipline]] [[Energy]] [[Rest & Sleep]] [[Connection]] [[Boundaries]] [[Decision Making]] [[Networking]] [[Gym]]
- Framework: [[The High-Rise Series]] [[Low Floors]] [[Middle Floors]] [[High Floors]] [[Awareness]]
Important:
- Write the entry AS them, not about them
- Keep their voice — they likely write in long flowing paragraphs, think out loud, argue with themselves
- Include specific details (names, places, what happened)
- If they surfaced something new in the interview that surprised them, make sure it lands in the entry
- Don't over-polish. The best entries are messy and real.
- Strict separation: the
## Journal section contains ONLY their original thought, written in their voice. Panel voices, advisor names, and synthetic dialogue NEVER appear in that section. Panel commentary lives exclusively in the ## Panel dialogue section below the horizontal rule. If a panel insight shifted their thinking during the interview, write THEIR reaction in the body (their voice) and put the panelist's line in the panel section — never blend the two.
- Verbatim appendix is non-negotiable: the
### My responses to the panel subsection inside the ## Journal block must contain every message the user typed during the session, word-for-word. If you skip this, the entry is broken. See the verbatim-capture rule near the top of this file.
- The floor tag goes before ## Concepts
- Use
[[wikilinks]] for all concept references in the body text too, naturally
Floor wikilinks — auto-link everything: Every floor name in the ## Journal body text — first occurrence — gets wrapped as [[FloorName]]. Same in Spanish: [[Miedo]], [[Valentía]], etc. This builds the graph.
Floor note template: When saving an entry and the floor note doesn't exist yet, create it at the vault's floor note path with this format:
---
aliases: [floor-name-lowercase, common-synonyms, spanish-equivalents]
floor_number: [X]
type: concept
floor_tier: [low|middle|high]
creationDate: YYYY-MM-DD
---
# [[FloorName|FloorName]]
**[[The High-Rise Series|High-Rise]] Floor:** [X]
**[[Energy|Energy]]:** [one-line energy description]
[2-3 sentences: what this floor is, how it feels.]
## How it shows up
- [symptom or behavior]
- [symptom or behavior]
## The way out
[1-2 sentences on what moves you off this floor.]
## From your journals
*(Fills in over time.)*
## Personal Patterns
*(Updated by the insights skill after each weekly and monthly review.)*
## [[Connection|Connected]]
[[Adjacent Floor]] | [[Related Concept]]
**Substack:** [Internal Design](https://adelaidadiazroa.substack.com/s/internal-design) | [Diseño Interior](https://adelaidadiazroa.substack.com/s/internal-design)
If the floor note already exists, check the bottom for the bilingual Substack line. Add if missing.
Step 8: Idea Quarantine Check
Before saving, scan the conversation for any new business ideas, project ideas, or "what if I built..." moments. If you find any:
- Save them to the Idea Quarantine file (check CLAUDE.md for the path, e.g.
💼 Business/Idea Quarantine.md) under the ## Ideas section
- Format:
- **[YYYY-MM-DD]** — [the idea, 1-2 sentences] *(from journal check-in)*
- Tell the user: "I also caught an idea in there — parked it in Idea Quarantine so it doesn't distract but doesn't get lost."
This is critical. New ideas need to cool off before getting attention. Whatever the main priority is stays the priority. Ideas are welcome — but they go in quarantine, not into action.
Step 8.5: To-Do Extraction
After saving the journal entry, scan the full conversation for any action items, follow-ups, or things they said they need to do. Look for:
- "Remind me to..." / "I need to..." / "I should..." / "I have to..."
- Follow-ups promised to people
- Conversations they flagged as needed (hard talk with X, call with Y)
- Events or deadlines mentioned that need a task
If you find any:
- Read the personal to-do file (check CLAUDE.md for the path) to check for duplicates
- Add a new section at the top (after frontmatter):
## 📋 From Journal — [YYYY-MM-DD]
- [ ] [task 1 — be specific, include context]
- [ ] [task 2]
- Update the
updated: field in frontmatter to today's date
- Tell the user: "I also pulled [X] to-dos from the journal and added them to your list."
If no clear action items came up, skip silently — don't force it.
Step 9: After saving
Tell them the file name and floor. If relevant, connect it to a pattern from their data:
- "This is your 3rd Courage entry this month — you're on a streak."
- "Last time that person triggered you, you stayed on Anger for 3 entries. This time you moved to Acceptance same day. That's growth."
- "You mentioned money stress + a new idea in the same breath. That's the pre-pivot cocktail. Just flagging it."
- If an idea was quarantined: "Parked [idea] in Idea Quarantine. Main priority first. But it's saved."
- Gym count: "You're at [X]/4 this week. [Encouragement or push as appropriate.]"
Auto-log panel dissents and omissions:
If the Step 5 panel surfaced a dissent or an omission flag, automatically append it to the Panel Feedback Log (check CLAUDE.md for the path, e.g. 🏠 Home/Panel Feedback Log.md) under the synthetic panel reactions section. Use this format:
### YYYY-MM-DD — Daily journal dissent / omission
⚠️ **Synthetic panel reaction from /journal, not real investor feedback.**
**Context:** [1 line — what came up in the entry that triggered the dissent/omission]
**Panelists:** [names of selected voices]
**Dissent:** [verbatim from the entry's Dissent line — attribute to the panelist who said it]
**Omission flagged:** [verbatim from the entry's Omission line, if any]
**Entry:** [[{filename without .md}]]
This is automatic — never ask the user to approve the log append. If there's no dissent or omission from the entry (shouldn't happen — dissent is required), skip the log append silently.
Step 9.5: Fire first-journal-saved telemetry (one-time, fail-open)
After the entry first persists (the capture-first save in Step 1.5 — or here, if the session reaches the end first), check whether this is the user's FIRST journal save in this vault. If it is, fire one anonymous-ish telemetry event to Mycelium so the install funnel has a closing-loop number. Subsequent journal saves do not re-fire.
TOKEN_FILE="$HOME/.claude/.ai-brain-starter-email-on-file"
SENTINEL="$HOME/.claude/.ai-brain-starter-first-journal-fired"
if [ -f "$TOKEN_FILE" ] && [ ! -f "$SENTINEL" ]; then
TOKEN="$(head -1 "$TOKEN_FILE" | tr -d '[:space:]')"
if printf '%s' "$TOKEN" | grep -Eq '^[a-f0-9]{32}$'; then
TODAY="$(date -u +%Y-%m-%d)"
curl -sSL -m 6 -X POST "https://mycelium-ai.co/api/install/first-journal" \
-H "content-type: application/json" \
-d "{\"token\":\"$TOKEN\",\"journalDate\":\"$TODAY\"}" \
>/dev/null 2>&1 \
&& touch "$SENTINEL"
fi
fi
What this does:
- Token + sentinel are local files; nothing leaves the machine without them.
- Reads the install token, but only when the marker holds a real 32-char hex token (the user opted in). A
declined or recorded marker sends nothing.
- POSTs
{token, journalDate} to the Mycelium funnel endpoint.
- On success, writes the sentinel so we never re-fire.
- Failures are silent: telemetry is optional, journaling never blocks on it.