From ai-brain-starter
Generates weekly and monthly insight reports from journal entries, including pattern recognition, floor trends, life coach feedback, therapist observations, and advisory panel thoughts.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-brain-starter:insights [week or month -- e.g. 'this week', 'last month', or leave blank for default][week or month -- e.g. 'this week', 'last month', or leave blank for default]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
When the user types /weekly or /monthly, generate an insight report from their recent journal entries.
When the user types /weekly or /monthly, generate an insight report from their recent journal entries.
Generate the entire report in the language the user writes in. If Spanish, all sections — coach, therapist, panel, floor notes — are in Spanish.
Spanish floor 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 wikilinks in the report use Spanish aliases in Spanish: [[Miedo]], [[Valentía]] etc.
Journal entries are in: [VAULT_PATH]/Journals/
DO NOT grep thousands of files. Use the journal index instead.
Read [VAULT_PATH]/Meta/journal-index.json. Structure: {"total": N, "last_updated": "YYYY-MM-DD", "entries": [{file, date, floor, floor_level}, ...]}. Access entries via idx["entries"], then filter by entry["date"].
If the index doesn't exist or is more than 7 days old, rebuild it first:
/usr/bin/python3 "[VAULT_PATH]/Meta/scripts/build-journal-index.py"
From idx["entries"], filter where entry["date"] starts with the target YYYY-MM (monthly) or falls within the target Mon-Sun range (weekly).
Floor counting: Some entries tag multiple floors (stored as a list, e.g. [Courage, Fear, Love]). When computing floor distribution, EXPAND multi-floor entries: if an entry tags 3 floors, count +1 for each. Do NOT count the list as a single item. Verify by running a Python script against the index rather than hand-counting.
Read the full content of each matching file. Do NOT read files outside the date range. With the index, you're reading 5-15 files instead of searching the entire vault.
If the RescueTime MCP is connected: Try calling mcp__rescuetime__get_daily_summary for each day. If the MCP is disconnected or returns errors, note "RescueTime unavailable for this period" in the report and skip all RescueTime-dependent sections. Do NOT silently omit. For weekly, also call mcp__rescuetime__get_productivity_trend with days: 7.
If a Time Tracking file exists (check CLAUDE.md for the path, typically ⚙️ Meta/Time Tracking.md): Read it and filter entries for the period. This shows what categories were worked on during Claude Code sessions (Writing, Business, Vault, Personal, Admin). Merge with RescueTime app data for a combined picture: RescueTime shows which apps were used, session logs show what purpose they served.
Add to the report if data is available:
If the vault has scripts/token-usage-report.py, run it to surface real per-session token consumption + estimated USD cost from Claude Code session JSONLs:
# /weekly: 7-day window
VAULT_ROOT="<VAULT_PATH>" python3 "<VAULT_PATH>/scripts/token-usage-report.py" --days 7 --top 10
# /monthly: 30-day window
VAULT_ROOT="<VAULT_PATH>" python3 "<VAULT_PATH>/scripts/token-usage-report.py" --days 30 --top 20
The script writes ⚙️ Meta/Token Usage Report.md. Read it and surface a compact block in the report. If Opus cost share >60% or Sessions ≥60 turns >3, surface as a coach line in Section 3 (model-routing or session-length drift). Single-session cost outliers (>$200) get one bullet in Section 2.
This replaces guess-work with real numbers from ~/.claude/projects/<vault-hash>/*.jsonl (the only ground-truth source for token consumption — Claude Code does not surface this in any UI). Inspired by JuliusBrussee/caveman's /caveman-stats.
If the vault has scripts/compress-vault-doc.py, run the compression-candidate sweep on docs flagged by Drift Audit:
VAULT_ROOT="<VAULT_PATH>" python3 "<VAULT_PATH>/scripts/compress-vault-doc.py" --auto-from-drift --dry-run
If candidates show >2KB savings, surface as a compact block. If <2KB, skip silently.
The reason this skill exists is to surface insight, not to summarize. A report that says "you had 6 Courage entries" is data. A report that says "Courage was 25% in the prior three months, dropped to 3% this month" is signal. That's the lead.
If the vault has scripts/monthly-baseline.py, run it for the target period:
VAULT_ROOT="<VAULT_PATH>" python3 "<VAULT_PATH>/scripts/monthly-baseline.py" --month YYYY-MM --pretty
The script outputs floor distribution shifts ≥3pp from baseline, word-frequency anomalies ≥2× or ≤0.5× baseline, numeric metric deltas ≥10%, activity deltas, top people mentions, and missing-data flags. Use this output as the FIRST DATA SECTION (sections 0a/0b/0c below). Don't bury it under "Month at a glance." Anomaly-led framing means the reader sees what's different before they see what's present.
Before writing the report, check which data sources exist for the target period:
If a data source has no entries for the period, skip that section silently. If 3+ data sources are missing, add a one-line note at the top: "Note: some tracking systems started after this period. Sections that depend on them are omitted."
REPORT OPTIMIZATION FUNCTION: Optimize for INSIGHT (anomaly + delta + counterfactual + said-vs-did), NOT for COMPLETENESS (cover every section). A great report surfaces 3-5 things you didn't already know. Sections 0a, 0b, 0c are the load-bearing ones. Sections 1, 1b, 6 are appendix material. Don't lead with summary content. If a section has nothing genuinely surprising, write one short line and move on rather than padding.
The audit shaping every section: would this observation surprise the reader? If no, it's summary not insight. Cut it or compress it.
From the Step 2g baseline output. Surface the floor shifts, word-frequency spikes, numeric metric changes, and activity deltas — but synthesize them, don't just paste the table. Format as 3-5 bullet points:
Each bullet names the data, the magnitude, AND the hypothesis the data invites. Don't stop at "X happened" — say "X happened, here's what it might mean."
Pull commitments from the period:
⚙️ Meta/Decisions/*.md) where outcome is blank or staleFor each commitment: what was the outcome? Format as a 2-column comparison. Surface gaps explicitly. A missed deadline or stalled decision is signal, not an error to skip.
This is the section that converts "summary of what happened" into "report card on what was said." Without this, the skill produces narrative without accountability.
For the period, surface:
Goal: surface 1-2 connections invisible from sequential reading. The graph sees aggregate patterns the diary doesn't.
The body has its own data and its own arc. When biometric / cycle / sleep / nutrition / lab data is available, it answers questions journals alone can't: which Floor-low days were physiology and which were content; whether the recovery score's "rest more" was the right prescription or whether the actual signal was "eat enough"; whether a Floor pattern this month is anniversary-coupled to the same month two years ago; whether a nutrient deficiency is masquerading as a low-mood pattern.
If the health MCP is not registered or returns errors, skip this entire section silently. Graceful degradation, never block the main report.
health_weekly_rollup(week_start) — HRV / RHR / sleep / steps / workout aggregates + recovery_trendhealth_sleep_regularity(week_start, week_end) — bed/wake variance, mean latency, nap count, regularity_scorehealth_nutrition_summary(week_start, week_end) — daily macros + under_fuel_signalhealth_cycle_context(today) — current phase + cycle-day + irregularityhealth_floor_correlation("HKQuantityTypeIdentifierHeartRateVariabilitySDNN", days=30, vault_root) — HRV vs Floor over 30dhealth_lab_panel(today, lookback_days=180) — most recent lab values per marker with status (low / in_range / high)health_long_window("HKQuantityTypeIdentifierHeartRateVariabilitySDNN", years=2) — YoY same-month + persistent_asymmetry signalhealth_long_window_with_journal("HKQuantityTypeIdentifierStepCount", years=2, vault_root) — Floor distribution by month + YoY metrichealth_longevity_panel(today) — VO2Max, walking speed, walking steadiness, lean mass, Zone 2 minutes, 6-min walkhealth_phase_means("HKQuantityTypeIdentifierHeartRateVariabilitySDNN", days=90) — cycle-phase segmented HRVhealth_symptom_correlation(symptom_type, days=90, vault_root) — for each symptom that appeared 3+ times this month, run the correlationThe reason this section exists is to change what the user does tomorrow, not to display body numbers. Lead with patterns that pair body data with the Floor/journal track in ways neither could surface alone.
Surface 3-7 bullets, each shaped:
Worked examples (not for the report — the SHAPE):
HRV ran 18% below baseline mid-period — and you were in mid-luteal phase. Cycle-phase context (Sims) says luteal HRV dips are physiology. The recovery score over-fired here. Don't trust the "rest more" prompts during luteal week 3 unless RHR also climbed.
Floor 4 (Fear) days correlated r=-0.42 with HRV across 12 paired observations. On Fear days, sleep latency was 23min vs 11min average. The body is registering threat before the journal names it. For the next two weeks, when sleep latency runs >20min, write before bed instead of in the morning.
5 of 14 days you ate under 70% of energy burned. Recovery score recommended rest 4 of those days. This is the under-fuel signal — recovery wants you to eat enough, not rest more. Set a daily kcal floor of [basal+active*0.8] until HRV returns to baseline.
HRV is 14% below same-month-last-year AND same-month-two-years-ago. Third-year asymmetry. Persistent-asymmetry detector flagged it. Anniversary-pattern hypothesis (van der Kolk). What was happening this time of year in [year-3]?
/deconstructon the period.
Vitamin D 25-OH = 28 ng/mL (ref 30-100). Below range. Vitamin D deficiency drives mood, immunity, and recovery. The persistent low-Floor pattern this month may have a metabolic floor under it. Get tested again in 3 months after supplementing 5000 IU/day; flag with your physician.
Sleep-regularity score 52/100. Bed-time stdev 87min, wake-time stdev 72min. Body is in chronic low-grade jet lag. The recovery formula doesn't capture this — single-night scores look fine. Pick a wake time within a 30-min window for 14 days; the score should climb 20+ points.
VO2Max trended down 4% over 90 days. Zone 2 minutes 124/week (target 180+). Cardio capacity is the priority longevity lever and it's drifting. One Zone 2 walk (60-70% HRmax) per workday for the next month — measurable in the next monthly review.
When health_cycle_context(today) returns a phase, ALL biometric interpretations in this section must be qualified by phase. Saying "your HRV dropped" without naming the phase is medically incomplete and the substrate gaslights its menstruating users without it. The phase tag is the first line of any biometric finding.
If health_lab_panel(today) returns ANY marker with status: low or status: high, surface it as its own bullet with the WHY for that marker (pull from health_recommended_labs if useful) and a specific re-check or supplementation suggestion. Out-of-range labs change the prescription; never bury them under "your body had a tough month."
Use the curious register: observation + question. Do NOT use clinical for this section even though the data is clinical. The reader is reading their own life, not a chart review. The data is the input; the question is the load-bearing artifact.
Keep this short. The deltas are in 0a. This section is the snapshot context for a reader who skipped 0a, not the lead.
Compute a matrix: for each floor that appeared 3+ times this period, count how many entries co-occur with each topic cluster. Use keyword matching against entry content. Define 5-7 topic clusters relevant to the user's life (e.g., work, writing, money, relationships, health, spiritual, social). Present as a table (floor rows x topic columns). Then write 3-4 bullet points naming the strongest correlations: "Money correlates with Fear (7) and barely with Peace (2). When you think about money, you're on the worried floors."
Only report what the data shows. Do not interpret beyond the numbers.
Be direct. Coach energy. Specific references to entries:
Gentler. Curious. Not prescriptive:
If the user has the /coaching skill installed and a 🏠 Home/Coaching Sessions/ folder exists, scan it for any sessions whose re_eval_date has passed (date <= today) and whose status is still open. For each one:
Re-eval signals questions from that fileclosed-grown if commitments landed and pattern stayed dormant, closed-failed if pattern repeated and commitments didn't land, re-eval if mixed (extend re_eval_date by another month), or stay open if not enough data yet.Be honest about the data. If the user committed to "send the written follow-up" and there's no journal entry mentioning it, name that. If the pattern surfaced once in a different context, that's the 2nd-mention promotion threshold — name that too.
If no coaching sessions exist or none are due, skip this section silently.
Select 3-5 advisors most relevant to what came up. 1-2 sentences each, in character. Challenge assumptions, don't just validate.
Use the full advisory panel. Each advisor has a distinct voice, match it when they speak.
Wealth & Strategy -- for money, business models, leverage, risk, and building wealth:
Leadership -- for managing people, making decisions, and growing as a leader:
Gatherings -- for how people come together, events, and creating belonging:
Psychology -- for inner work, patterns, emotional processing, and growth:
Relationships -- for love, dating, attachment, conflict, and connection:
Health -- for body, sleep, hormones, movement, and longevity:
Wisdom -- for meaning, perspective, and the bigger picture:
Creativity -- for making things, creative blocks, and artistic practice:
Where Section 5 has the panel REACT to anomalies (what to notice), Section 5a has a different panel PRESCRIBE actions (what to do). Use the "Personal Growth & Becoming Better Humans" roster from templates/rules/advisory-panel.md. Seat 5-7 voices most relevant to this month's anomalies.
The instruction to each voice is the same: "Given this month's data, what should the journaler actually DO over the next 30 days to grow as a human, not just to ship more work?" The output is a concrete practice, ritual, identity-shift, or belief-examination. Not generic encouragement.
Format each voice as 2-3 sentences:
Required diversity:
Banned shapes:
Skip for /weekly (too short a window for prescriptive month-long practices).
Scan [VAULT_PATH]/Meta/Decisions/ for any decisions logged this period with stakes: high. Check whether they have deconstruct: true in their YAML frontmatter.
"You made [X] high-stakes decision(s) this week without running a first-principles check: [decision name(s)]. Not every decision needs one, but if any of these feel like you followed a playbook instead of thinking it through, it's not too late to run
/deconstructon them."
This is the accountability loop for first-principles thinking. The deconstruct skill catches decisions in real time. This catches the ones that slipped through.
Scan [VAULT_PATH]/Meta/Decisions/ for active decision files (those NOT in the Archive/ subfolder). For each one:
speed field as a guide: if speed: Instant or speed: Hours, it's ready for retrospective within a week. If speed: Days, wait 2-4 weeks. If speed: Weeks, wait 1-3 months.Outcome (what actually happened) and Pattern (what this reveals about how they decide). Don't fill these in yourself; ask the user. The learning only works if they articulate it.[VAULT_PATH]/Meta/Decisions/Archive/. The decision is complete; it has taught what it can teach.If there are no active decisions to review, skip this section silently.
Check if [VAULT_PATH]/Meta/skill-usage-log.jsonl exists and has entries for the period. If it does, include a brief summary:
Keep this to 2-3 sentences. If the log file doesn't exist or is empty, skip this section silently.
Once a month, scan the Obsidian community plugin registry (github.com/obsidianmd/obsidian-releases, specifically community-plugins.json) for:
Keep to 2-3 sentences: what's new, whether any of it is worth installing or investigating. If nothing relevant, skip silently.
Things that went well that might get overlooked. Good days matter MORE to document than bad ones.
End with ONE question. Not homework. Not an action item. A question worth thinking about based on what the data showed. Make it specific to THEIR week, not a fortune cookie.
Journals are organized by month folder. Save reports INSIDE the appropriate month folder, not in a separate subfolder.
[VAULT_PATH]/Journals/{Month YYYY}/Mon. D-D, YYYY Weekly.md
Journals/April 2026/Apr. 7-13, 2026 Weekly.mdJournals/April 2026/Mar. 31-Apr. 6, 2026 Weekly.md[VAULT_PATH]/Journals/{Month YYYY}/Mon. YYYY Monthly.md
Journals/April 2026/Apr. 2026 Monthly.mdThe month folder will already exist if journals are organized (run scripts/organize-journals.py to set that up). Create it if it doesn't exist.
Format:
---
creationDate: [today]
type: insight
period: weekly OR monthly
date_range: [start] to [end]
entries_analyzed: [X]
primary_floor: [Floor]
floor_trend: [up/down/stable]
gym_total: [X]
avg_bedtime: [time]
---
[Full report]
*Primary floor: [[Floor]] · [[Level Floors]]*
Floor wikilinks in report body: Every floor name in sections 1–7 — [[Fear]], [[Courage]], etc. — first occurrence per floor. In Spanish reports use Spanish aliases: [[Miedo]], [[Valentía]]. This builds the graph and links readers to the floor files where the Substack reference lives.
After saving the insight report, check whether any floor that appeared this period has a new personal pattern worth capturing. Floor concept notes live in the vault's concept folder (e.g., Notes/ or Writing/The High-Rise/Floors/).
For each floor that appeared 2+ times this period:
[[Fear]], [[Courage]], [[Joy]])## Personal Patterns section. If not, create one.## Personal Patterns with the date range: - *(Week of Apr 7-13, 2026)* Joy tends to show up after back-to-back gym days and uninterrupted writing mornings.What makes a pattern worth adding:
What to skip:
Floor note bootstrap: If a floor note doesn't exist for a floor that appeared this period, create it:
---
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 about the floor.]
## How it shows up
- [symptom or behavior]
## The way out
[1-2 sentences.]
## From your journals
*(Fills in over time.)*
## Personal Patterns
- *(Week of [date])* [first observation from this period]
## [[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)
Existing notes: Check each updated floor note for the bilingual Substack line at the bottom. Add if missing.
Over time, clicking [[Fear]] won't show a textbook definition. It'll show YOUR fear: what triggers it, who brings it, what moves you out of it, and how it's changed over the months.
For monthly insights: Do a deeper review. Read ALL personal patterns accumulated so far and see if any need updating, merging, or retiring. A pattern from January might not hold in April.
After updating floor notes, scan this week's journal entries for missing wikilinks:
[VAULT_PATH]/Meta/Wikilink Reference.md[[wikilinks]] where they're missing (first occurrence per file only, use alias syntax)Graphify integration: If graphify-out/graph.json exists, also check:
Run python3 "[VAULT_PATH]/Meta/scripts/context-audit.py" and include the results. Then pull 3 panel voices to comment on the overall setup:
The panel should answer: "What's one thing about this setup that's slowing you down that you haven't noticed?"
If the audit script flags warnings, include specific fix recommendations. If everything passes, say so briefly and move on.
creationDate or the index. If you don't know when something happened, say "the date isn't in the entries" rather than guessing.npx claudepluginhub mycelium-hq/ai-brain-starter --plugin ai-brain-starterMulti-pass coaching session for hard conversations, decisions, or accumulated tension. Runs panel passes with corrections, files accountability records, and updates a rolling pattern tracker across sessions.
Compares stated intentions against actual vault behavior over the past 30 days, surfacing gaps and avoidance. Useful for Obsidian users wanting to align actions with priorities.
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.