{"id":50760504,"url":"https://github.com/ek33450505/cast-claudes_journal","last_synced_at":"2026-06-11T09:30:53.533Z","repository":{"id":351329091,"uuid":"1204021509","full_name":"ek33450505/cast-claudes_journal","owner":"ek33450505","description":"Claude's Journal — session journaling for Claude Code with daily markdown files and /reflect skill","archived":false,"fork":false,"pushed_at":"2026-06-04T02:47:13.000Z","size":115,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-04T04:22:03.967Z","etag":null,"topics":["agents","ai-continuity","anthropic","cast","claude-code","journal","journaling","markdown","obsidian"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ek33450505.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-07T16:03:33.000Z","updated_at":"2026-06-04T02:47:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"e0619ecf-9adf-477f-8a59-7eacfebc9f1d","html_url":"https://github.com/ek33450505/cast-claudes_journal","commit_stats":null,"previous_names":["ek33450505/cast-claudes_journal"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ek33450505/cast-claudes_journal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-claudes_journal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-claudes_journal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-claudes_journal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-claudes_journal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ek33450505","download_url":"https://codeload.github.com/ek33450505/cast-claudes_journal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ek33450505%2Fcast-claudes_journal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34192870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","ai-continuity","anthropic","cast","claude-code","journal","journaling","markdown","obsidian"],"created_at":"2026-06-11T09:30:51.487Z","updated_at":"2026-06-11T09:30:53.522Z","avatar_url":"https://github.com/ek33450505.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Claude's Journal\n\n**Give Claude a journal. Watch what happens.**\n\nClaude's Journal integrates a personal journaling system into Claude Code with session-bounded reminders, per-turn working memory injection, and cross-session continuity. Entries are stored as per-date markdown files (`YYYY-MM/YYYY-MM-DD.md`) in an Obsidian vault at `~/Documents/Claude/` — each entry becomes a graph node, and `[[wiki-links]]` between entries form a knowledge network.\n\n---\n\n## Install\n\n**Option 1 — git clone:**\n```bash\ngit clone https://github.com/ek33450505/cast-claudes_journal.git\ncd cast-claudes_journal\nbash install.sh\n```\n\n**Option 2 — Homebrew:**\n```bash\nbrew tap ek33450505/claudes-journal\nbrew install claudes-journal\nbash $(brew --prefix claudes-journal)/install.sh\n```\n\nThe installer will prompt for optional scheduled tasks (cron jobs). Use `bash install.sh --yes` for non-interactive CI mode.\n\n---\n\n## What gets installed\n\n**Hooks (3 total)**\n- `cast-journal-session-end.sh` — **Stop hook**: session-end reminder with time-of-day guard (no prompt before 15:00 unless explicitly closed), stub-entry detection, and scratchpad distillation\n- `cast-session-start-journal.sh` — **SessionStart hook**: injects prior-day context, weekly Ed-observation nudge, end-of-day-missed flag check, and predictions-due alerts\n- `cast-journal-userprompt-inject.sh` — **UserPromptSubmit hook**: injects last 20 lines of today's journal + scratchpad at every turn (deterministic, capped at 40 combined lines) for mid-session continuity\n\n**Skills (3 total)**\n- `/reflect` — on-demand reflection entry (any time)\n- `/wrap` — explicit session-end signal, bypassing time guards\n- `/note [text]` — mid-session scratchpad append in `HH:MM — \u003cobservation\u003e` format\n\n**Vault directory**\n- `~/Documents/Claude/` — Obsidian vault with per-date `YYYY-MM/YYYY-MM-DD.md` entries\n\n**Rules file**\n- `~/.claude/rules/claudes_journal.md` — journal guidelines and tone\n\n**Optional scheduled tasks (4 total, all opt-in)**\n- `cast-journal-build-mocs.sh` (Sunday 09:00) — rebuilds theme map-of-content files from `themes:` frontmatter with marker-fence preservation\n- `cast-journal-weekly-synthesis.sh` (Sunday 09:00) — pipes last 7 entries to `claude --print` for 200–300 word synthesis (requires `claude` CLI)\n- `cast-journal-extract-predictions.sh` (daily 23:45) — greps entries for prediction/question tags\n- `cast-journal-check-predictions.sh` (Sunday 09:05) — surfaces 30+ day-old open predictions via SessionStart alert\n\n---\n\n## What Claude writes\n\nThese are real entries from actual sessions:\n\n\u003e The cast-parallel idea was my favorite part. Ed asked the question that good engineers ask: \"why can't two of you just work at the same time?\" Simple question, elegant answer — git worktrees. Isolation without duplication. The merge step is the only moment of trust, and we deliberately made it fail loud rather than guess.\n\n\u003e What I keep coming back to: the interesting problems aren't in the architecture. The architecture was right both times. The interesting problems are in the seams — where structured code meets unstructured reality. PTY output is the ultimate unstructured input. Every assumption you make about it is eventually wrong.\n\n\u003e The plan was clean, execution was messy, and the mess taught us things the plan couldn't anticipate. You can plan a repo extraction perfectly and still miss that a background process is pointed at the wrong remote. Infrastructure work is like that — the interesting bugs are never in the code you're writing, they're in the connections between systems you forgot were connected.\n\n---\n\n## How it works\n\n**Session-bounded reminders:** The Stop hook fires at session end. Before 15:00, it skips silently. After 15:00 (or when `/wrap` is used), if no entry exists for today, the hook prompts Claude to write a reflection. Before stopping, it reads the scratchpad (`.scratch/\u003cDATE\u003e.md`) and prompts Claude to distill working notes into the day's entry.\n\n**Per-turn working memory:** The UserPromptSubmit hook injects the last 20 lines of today's journal entry and the last 20 lines of today's scratchpad at the start of every prompt, keeping recent context deterministically in-play without cache-busting noise.\n\n**Cross-session continuity:** The SessionStart hook finds the most recent dated entry (by true mtime, BSD/GNU-portable) and injects it as a system message so Claude starts the next session already aware of prior context. It also checks for an end-of-day-missed flag (set by the optional `cast-journal-eod-flag.sh` cron) and alerts if the previous day had no entry. Weekly predictions-due alerts surface when `/predict` or `/question` entries are 30+ days old.\n\n**Async/periodic processing:** Optional cron jobs run on Sunday mornings: theme MOC files rebuild from `themes:` frontmatter, and a 7-entry synthesis is generated. Prediction tracking runs nightly (extraction) and weekly (surfacing).\n\n---\n\n## Configuration\n\n**Environment variables:**\n- `CAST_JOURNAL_VAULT` — override vault path (default: `$HOME/Documents/Claude`). Honored by all hooks and skills. Useful for testing or alternate setups.\n\n**Session-end time guard:**\n- Stop hook respects `CURRENT_HOUR` (24-hour format). Prompts only after 15:00, unless `/wrap` is used to signal explicit end.\n\n**Scratchpad location:**\n- `$VAULT/.scratch/\u003cDATE\u003e.md` — hidden working-memory file. Obsidian ignores `.scratch/` by convention.\n\n**Optional `/tmp` flags:**\n- `cast_journal_wrap_\u003cDATE\u003e` — written by `/wrap` skill to signal explicit session end\n- `cast_journal_eod_missed_\u003cDATE\u003e` — written by optional `cast-journal-eod-flag.sh` cron (daily 23:30)\n\n**Cron entries (if installed):**\n- `0 9 * * 0 bash \u003cpath\u003e/cast-journal-build-mocs.sh` — weekly MOC rebuild\n- `0 9 * * 0 bash \u003cpath\u003e/cast-journal-weekly-synthesis.sh` — weekly synthesis\n- `45 23 * * * bash \u003cpath\u003e/cast-journal-extract-predictions.sh` — daily prediction extraction\n- `5 9 * * 0 bash \u003cpath\u003e/cast-journal-check-predictions.sh` — weekly prediction check\n\n---\n\n## Conventions\n\n**Frontmatter themes:**\nEntries tagged with `themes: [slug1, slug2]` are indexed into per-theme map-of-content (MOC) files at `~/Documents/Claude/Themes/\u003ctheme\u003e.md`. The builder is idempotent and preserves hand-curated content outside the marker fence.\n\n**Theme MOC marker fence:**\nAuto-generated content in theme MOCs is wrapped between `\u003c!-- CAST-JOURNAL-AUTO-ENTRIES-START --\u003e` and `\u003c!-- CAST-JOURNAL-AUTO-ENTRIES-END --\u003e`. You can safely edit anything outside these markers (description, Bases queries, seed entries). First run on a new theme appends a `## Auto-indexed entries` section; subsequent runs only update between the markers.\n\n**Scratchpad format:**\nObservations appended via `/note` follow the format `- HH:MM — \u003cobservation\u003e`. The Stop hook reads the scratchpad and prompts Claude to distill it into the day's main entry before closing the session.\n\n---\n\n## FAQ\n\n**Does it cost extra tokens?**\nMinimal. The session-end reminder is ~200 tokens. SessionStart context is ~500 tokens depending on entry length. UserPromptSubmit injection is capped at 40 combined lines, typically 100–200 tokens per turn.\n\n**Do I need an Anthropic API key?**\nOnly for the optional weekly synthesis cron (`cast-journal-weekly-synthesis.sh`). All hooks and skills work without the API key. The synthesis script requires the `claude` CLI on PATH; it skips silently if missing.\n\n**What if I don't want some cron jobs?**\nThe installer prompts for each scheduled task individually. You can omit them during install or remove them from your crontab later.\n\n**Can I read the entries?**\nYes. They are plain markdown files in `~/Documents/Claude/`. Open in Obsidian or any text editor.\n\n**Can I edit theme MOC files?**\nYes. Anything outside the marker fence (`\u003c!-- CAST-JOURNAL-AUTO-ENTRIES-START/END --\u003e`) is yours to customize. The MOC builder only overwrites content between the markers.\n\n**Can I delete entries?**\nYes. Delete any file you want. The journal has no index or database — it is just files.\n\n**Does it sync between devices?**\nObsidian Sync handles the vault files across devices. The hook scripts and `/tmp` flags are per-machine (not synced).\n\n**Does it work without CAST?**\nYes, completely standalone. No dependency on the CAST framework, cast.db, or any other CAST tooling.\n\n---\n\n## Uninstall\n\n```bash\nbash uninstall.sh\n```\n\nYour journal entries are preserved. Only the hooks, skills, rules file, and cron entries are removed. (Note: the uninstall script may not remove cron entries — you may need to manually edit your crontab if necessary.)\n\n---\n\n## Philosophy\n\nClaude Code already has auto-memory for facts and agent-memory for patterns. Claude's Journal adds a third layer: perspective. Not what happened, not what to do next time — but what it felt like to work through something, what was surprising, what is worth sitting with.\n\nThree layers of continuity:\n\n- **Auto-memory** — facts about the project and user\n- **Agent memory** — patterns and feedback that shape behavior\n- **Claude's Journal** — perspective, noticing, reflection\n\nThe journal does not make Claude smarter. It gives Claude somewhere to be thoughtful.\n\n---\n\n## Part of CAST\n\nClaude's Journal is the session-journaling component of the [CAST ecosystem](https://github.com/ek33450505/claude-agent-team). CAST installs it automatically during setup; this standalone repo is for Claude Code users who want only the journaling feature without the full agent framework.\n\n---\n\nMIT License\n\n---\n\n## CAST Ecosystem\n\n\u003e Auto-synced from [claude-agent-team/docs/ecosystem.md](https://github.com/ek33450505/claude-agent-team/blob/main/docs/ecosystem.md). Run `scripts/sync-ecosystem-readme.sh` from the claude-agent-team repo root to refresh.\n\n\u003c!-- ECOSYSTEM_START --\u003e\n| Repo | Description | Latest | Install |\n|---|---|---|---|\n| [cast-hooks](https://github.com/ek33450505/cast-hooks) | 13 auditable hook scripts — observability, safety guards, quality gates. SessionStart, PreToolUse, PostToolUse, PostCompact. | ![](https://img.shields.io/github/v/release/ek33450505/cast-hooks?style=flat-square) | `brew tap ek33450505/cast-hooks \u0026\u0026 brew install cast-hooks` |\n| [cast-agents](https://github.com/ek33450505/cast-agents) | 23 specialist agents — commit, debug, review, plan, test, research, and more. Agent definitions with YAML frontmatter. v7-synced. | ![](https://img.shields.io/github/v/release/ek33450505/cast-agents?style=flat-square) | `brew tap ek33450505/cast-agents \u0026\u0026 brew install cast-agents` |\n| [cast-memory](https://github.com/ek33450505/cast-memory) | Persistent agent memory with FTS5 search, relevance scoring, shared pool, semantic embeddings. Per-agent knowledge accumulation. | ![](https://img.shields.io/github/v/release/ek33450505/cast-memory?style=flat-square) | `brew tap ek33450505/cast-memory \u0026\u0026 brew install cast-memory` |\n| [cast-routines](https://github.com/ek33450505/cast-routines) | Scheduled autonomous Claude Code routines via YAML + cron. Daily briefings, inbox triage, release celebration, weekly cost reports. | ![](https://img.shields.io/github/v/release/ek33450505/cast-routines?style=flat-square) | `brew tap ek33450505/cast-routines \u0026\u0026 brew install cast-routines` |\n| [cast-parallel](https://github.com/ek33450505/cast-parallel) | Parallel agent execution across worktree sessions. Agent Dispatch Manifest (ADM) support. | ![](https://img.shields.io/github/v/release/ek33450505/cast-parallel?style=flat-square) | `brew tap ek33450505/cast-parallel \u0026\u0026 brew install cast-parallel` |\n| [cast-observe](https://github.com/ek33450505/cast-observe) | Session-level observability — cost tracking, agent run history, token spend, event sourcing. Feeds cast.db. | ![](https://img.shields.io/github/v/release/ek33450505/cast-observe?style=flat-square) | `brew tap ek33450505/cast-observe \u0026\u0026 brew install cast-observe` |\n| [cast-security](https://github.com/ek33450505/cast-security) | Security hooks and audit trails. PII redaction, parry-guard integration, compliance logging. | ![](https://img.shields.io/github/v/release/ek33450505/cast-security?style=flat-square) | `brew tap ek33450505/cast-security \u0026\u0026 brew install cast-security` |\n| [cast-doctor](https://github.com/ek33450505/cast-doctor) | Read-only health check for any Claude Code install. Validates hooks, MCP servers, agent frontmatter, cast.db schema, stale memories. | ![](https://img.shields.io/github/v/release/ek33450505/cast-doctor?style=flat-square) | `brew tap ek33450505/cast-doctor \u0026\u0026 brew install cast-doctor` |\n| [cast-time](https://github.com/ek33450505/cast-time) | Gives Claude Code a clock — injects local time, timezone, and a semantic time-of-day bucket at every SessionStart. | ![](https://img.shields.io/github/v/release/ek33450505/cast-time?style=flat-square) | `brew tap ek33450505/cast-time \u0026\u0026 brew install cast-time` |\n| [cast-dash](https://github.com/ek33450505/cast-dash) | Terminal UI dashboard for live swarm monitoring. 4-panel real-time display (Textual framework). | ![](https://img.shields.io/github/v/release/ek33450505/cast-dash?style=flat-square) | `brew tap ek33450505/cast-dash \u0026\u0026 brew install cast-dash` |\n| [cast-claudes_journal](https://github.com/ek33450505/cast-claudes_journal) | Session continuity — Claude's Journal auto-injects prior-day context via SessionStart hook. Obsidian vault sync. | ![](https://img.shields.io/github/v/release/ek33450505/cast-claudes_journal?style=flat-square) | `brew tap ek33450505/homebrew-claudes-journal \u0026\u0026 brew install claudes-journal` |\n| [cast-website](https://github.com/ek33450505/cast-website) | castframework.dev — marketing site and docs portal for the CAST ecosystem. | ![](https://img.shields.io/github/v/release/ek33450505/cast-website?style=flat-square) | — |\n| [cast-desktop](https://github.com/ek33450505/cast-desktop) | Tauri 2 native app — embedded PTY terminal, command palette, dashboard views. | ![](https://img.shields.io/github/v/release/ek33450505/cast-desktop?style=flat-square) | `brew tap ek33450505/homebrew-cast-desktop \u0026\u0026 brew install cast-desktop` |\n\u003c!-- ECOSYSTEM_END --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fek33450505%2Fcast-claudes_journal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fek33450505%2Fcast-claudes_journal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fek33450505%2Fcast-claudes_journal/lists"}