| name | journal |
| description | Aggregate daily working journey across all repos and sessions into structured content material for the '100 days building AI Brain OS' series. Triggers on: journal, daily journey, what did I do today, extract journey, content material |
Vault Location
Vault path: Read from ${CLAUDE_PLUGIN_ROOT}/brain-os.config.md
/journal — Daily Journey Extraction
Aggregates everything from today (or a specified date) into structured content material ready for the ai-leaders-vietnam writing pipeline.
Data Sources
Scan ALL of these (skip any that don't exist):
-
Git logs across every repo under ~/work (auto-discover, don't hardcode — this is what makes the journal cover all sessions, not just the core repos):
for repo in "$HOME"/work/*/; do
[ -d "$repo/.git" ] || continue
COMMITS=$(git -C "$repo" log --oneline \
--since="YYYY-MM-DDT00:00" --until="YYYY-MM-DDT23:59" 2>/dev/null)
[ -n "$COMMITS" ] && printf '=== %s ===\n%s\n' "$(basename "$repo")" "$COMMITS"
done
This catches work in any repo, not just the core brain repos. A day with commits only in a non-core repo must NOT be reported as a rest day.
-
Aha moments: {vault}/thinking/aha/YYYY-MM-DD-*.md (current location) and {vault}/daily/sessions/YYYY-MM-DD-aha.md (legacy, pre-2026-05). Check both.
-
Grill sessions: {vault}/daily/grill-sessions/YYYY-MM-DD-*.md
-
Handovers: {vault}/daily/handovers/YYYY-MM-DD-*.md
-
Email intelligence: {vault}/business/intelligence/emails/YYYY-MM-DD-daily-summary.md
-
Session summaries (the canonical per-session record — one file per session, per repo, written by the session-end.sh hook): {vault}/daily/sessions/YYYY-MM-DD*.md
- Glob must be
YYYY-MM-DD*.md (no separator after the date) — real filenames are YYYY-MM-DDThh-mm-{repo}.md (e.g. 2026-06-27T12-34-brain.md). A YYYY-MM-DD-*.md pattern silently matches nothing because the real separator after the date is T, not -.
- These already aggregate cross-repo commits and name the repo each session ran in, so they are how sessions in non-core repos reach the journal even when that day had no aha/grill/handover.
Why no raw transcripts: local session transcript JSONL files are intentionally not a source. session-end.sh already distills every session into a vault summary (source #6), so parsing raw transcripts would be redundant machinery. The vault session summary is the canonical per-session record.
Output
Write to: {vault}/daily/journal/YYYY-MM-DD-journey.md
Format:
---
title: "Day N — [headline]"
created: YYYY-MM-DD
tags: [journal, 100-days, content-material]
zone: daily
---
# Day N — [Compelling headline that captures the day's theme]
## The Story (narrative arc)
[2-3 paragraphs telling what happened today as a story. Start with the problem/goal,
describe what was tried, what broke, what worked. Include turning points.
This is the HOOK for the Facebook post.]
## Key Decisions
| Decision | What I chose | Why | What I rejected |
|----------|-------------|-----|-----------------|
[From grill sessions, handovers, and aha moments]
## Aha Moments
[Direct from daily aha file — the best 3-5 moments with context]
## Real Examples
[Code diffs, before/after, exact commands — the Substack-worthy detail.
These are the implementation shortcuts people pay for.]
## Numbers
[Concrete metrics: files changed, tests passing, time saved, costs, etc.]
## What Broke
[Failures, wrong turns, bugs. This is the vulnerability content.]
## What I'd Do Differently
[Hindsight insights — the "lesson learned" angle]
## Content Angles
[3 potential post angles for the writer pipeline, each with:]
- **Hook:** [opening line]
- **Platform:** [Facebook short-form / Substack long-form / both]
- **Hormozi principle:** [which principle this leverages]
Default Mode: Backfill
When /journal is invoked without arguments (or with just "backfill"):
- Scan
{vault}/daily/journal/ for existing YYYY-MM-DD-journey.md files
- Determine Day 1 from the earliest journal file's date
- Check every date from Day 1 through yesterday for missing journals
- List status of all days:
OK Day 1 — 2026-04-04 — Day 1 — I Taught an AI to Read a Book Better Than I Can
MISSING Day 4 — 2026-04-07
OK Day 5 — 2026-04-08 — Day 5 — ...
- For each missing day, create the journal using the full process above (data sources → output format)
- Skip days with no data — if a date has zero commits across all repos AND no session files, write a minimal journal noting it was a rest day
This means running /journal always catches up all missing days automatically.
Explicit date mode
When invoked with a specific date or day number (e.g., /journal day 3 or /journal 2026-04-06):
- Create only that specific day's journal
- Still determine the correct day number from the journal directory
Vault Knowledge Extraction (after writing journal)
After the journal is written, scan all daily sources for knowledge that should live in the vault:
-
Scan today's grill sessions, aha moments, handovers, session logs for:
- Decisions made — what was chosen and why
- Facts learned — new information about business, users, market
- Preferences stated — how user wants things done
- Context updated — strategy changes, goal shifts, process changes
-
For each item, find the right file by topic:
- Personal info/preferences →
personal/ (about-me.md, preferences.md, goals.md, etc.)
- Business project decisions →
business/projects/{project}/ (business.md, strategy.md, icp.md)
- New topic → create file in the natural location (personal/ or business/)
-
Append to the target file (don't overwrite existing content)
-
Content ideas: If extraction finds a potential content idea (insight, problem solved, surprising result), append to ~/work/ai-leaders-vietnam/content-ideas.md under "Next Up" with a one-line description + link to source.
-
Principles (P1-P4): If extraction finds a principle-related decision, update thinking/principles/tracker.md usage count. If a NEW principle is proposed, do NOT auto-add — flag it for user review.
-
Report at the end of journal: "Extracted N items to vault: [list of context files updated]"
Rules
- Narrative over list — tell a story, don't just list commits
- Real examples are gold — include actual code, actual prompts, actual error messages
- Failures are content — "I tried X and it broke" is more valuable than "I did X"
- Hormozi lens: best stuff goes in the free Facebook post (the decision, the insight, the result). Implementation detail goes in paid Substack (the exact prompts, the code, the config).
- Don't fabricate — every claim must trace to a git commit, aha moment, or grill session
- Day numbering — check
{vault}/daily/journal/ for the earliest file to determine Day 1, then count sequentially
- Automated-only day = pass — if no human-session sources exist for the date (no session, aha, grill, or handover files) but journal was written from git logs + automated reports, log
result=pass. Log partial only when available sources were skipped.
Integration with ai-leaders-vietnam
The journey doc is INPUT for the writing pipeline:
/journal → journey doc → (copy to ai-leaders-vietnam) → context-collector or journey-extractor → writer → ai-checking → evaluator → deliver
The user copies the journey doc to ai-leaders-vietnam and runs the content pipeline there.
Outcome log
Follow skill-spec.md § 11. Append to {vault}/daily/skill-outcomes/journal.log:
{date} | journal | {action} | ~/work/brain-os-plugin | daily/journal/{date}-journey.md | commit:{hash} | {result}
action: journal (single day) or backfill (catch-up)
result: pass if journal written covering all available sources faithfully (absent source files for that date are not penalized; absence of session/aha/grill/handover sources on automated-only days is not penalized; automated-only day with journal from git logs + automated reports = pass); partial if available sources were skipped, or output quality was poor despite human-session sources being present; fail if no data found
- Optional:
args="{date-or-day}", score={days_written}/{days_attempted} (for backfill)