Skip to content

Nestef/claude-work-journal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

claude-work-journal

Zero-friction work journaling for Claude Code. Every coding session is automatically summarized, rolled up into daily digests, and synthesized into standup and weekly briefs — all written to markdown files you own.

What it does

Session ends → 3-6 bullet summary appended to today's daily note
                    ↓
9 PM + 8:45 AM → daily rollup merges all sessions into one summary
                    ↓
Mon-Fri 8:50 AM → standup brief (yesterday + PRs + commits + calendar)
Monday 8:00 AM  → weekly brief (themes, shipped, in-flight, loose ends)

All output goes to a local markdown vault (Obsidian-compatible, but works with any editor).

Example standup brief

# Standup Brief — 2026-04-09

## Yesterday

- Shipped PDF extraction migration: replaced mupdf-wasm with pdfjs-dist
- Fixed API/Worker version mismatch in staging
- Fixed text reading-order and stripped multi-line running headers

## Today

- No open PRs to chase — clean slate
- Pick up next medchron task post-PDF migration

## Blockers

- None

Prerequisites

  • Claude Code CLI (claude command available in PATH)
  • macOS (for scheduled launchd agents) or Linux (manual cron setup)
  • Optional: gh for PR context in briefs
  • Optional: gcalcli for calendar context
  • Optional: terminal-notifier for macOS notifications

Install

git clone https://github.com/YOUR_USERNAME/claude-work-journal.git
cd claude-work-journal

# Basic install (vault defaults to ~/obsidian-notes)
./install.sh

# With custom vault location and git repo for commit history
JOURNAL_VAULT=~/notes JOURNAL_REPO=~/projects/my-app ./install.sh

The installer:

  1. Copies hook scripts to ~/.claude/hooks/
  2. Copies the /idea skill to ~/.claude/skills/
  3. Configures the Claude Code SessionEnd hook in ~/.claude/settings.json
  4. Installs and loads launchd agents for scheduled briefs (macOS)

Configuration

All scripts read configuration from environment variables:

Variable Default Description
JOURNAL_VAULT ~/obsidian-notes Where daily notes and briefs are written
JOURNAL_REPO (none) Git repo path for commit history in briefs
JOURNAL_LABEL com.claude-journal launchd label prefix

To change settings after install, edit the environment variables in the launchd plists at ~/Library/LaunchAgents/com.claude-journal.*.plist and reload:

launchctl unload ~/Library/LaunchAgents/com.claude-journal.*.plist
launchctl load ~/Library/LaunchAgents/com.claude-journal.*.plist

Components

Session summary (automatic)

Every time a Claude Code session ends, the SessionEnd hook:

  • Reads the session transcript
  • Asks Claude to summarize it in 3-6 bullets
  • Appends the summary to $VAULT/YYYY-MM-DD.md

Subagent sessions are skipped. Large transcripts are truncated to the last 4000 lines.

Daily rollup (scheduled)

Runs at 9 PM and 8:45 AM. Merges all session summaries from the day into a single 4-8 bullet "Daily Rollup" at the top of the daily note. Idempotent — uses HTML comment markers so re-runs replace the previous rollup.

Standup brief (scheduled)

Runs Mon-Fri at 8:50 AM. Gathers:

  • Yesterday's daily note
  • Open PRs (gh pr list --author @me)
  • Recent commits (last 36 hours)
  • Today's calendar (gcalcli, if installed)

Produces a brief in Yesterday / Today / Blockers / Heads up format, written to $VAULT/Briefs/standup-YYYY-MM-DD.md.

Weekly brief (scheduled)

Runs Monday at 8:00 AM. Reads the past 7 days of daily notes plus git history. Produces Themes / Shipped / In flight / Loose ends / Wins format, written to $VAULT/Briefs/weekly-YYYY-Www.md.

Idea capture (skill)

Type /idea your thought here in Claude Code to quickly append an idea (with conversation context) to $VAULT/Inbox.md.

File structure

$VAULT/
├── 2026-04-09.md              # Daily note with session summaries + rollup
├── 2026-04-08.md
├── Inbox.md                   # Quick ideas from /idea
└── Briefs/
    ├── standup-2026-04-09.md   # Today's standup brief
    └── weekly-2026-W15.md      # This week's summary

Linux / cron setup

The installer only sets up launchd (macOS). On Linux, add cron entries manually:

# Daily rollup: 9 PM + 8:45 AM
0 21 * * * JOURNAL_VAULT=~/obsidian-notes /path/to/.claude/hooks/daily-rollup.sh
45 8 * * * JOURNAL_VAULT=~/obsidian-notes /path/to/.claude/hooks/daily-rollup.sh

# Standup brief: Mon-Fri 8:50 AM
50 8 * * 1-5 JOURNAL_VAULT=~/obsidian-notes JOURNAL_REPO=~/my-repo /path/to/.claude/hooks/standup-brief.sh

# Weekly brief: Monday 8:00 AM
0 8 * * 1 JOURNAL_VAULT=~/obsidian-notes JOURNAL_REPO=~/my-repo /path/to/.claude/hooks/weekly-brief.sh

Uninstall

./uninstall.sh

Removes hook scripts, launchd agents, and the idea skill. Your notes are not deleted.

Troubleshooting

Briefs not generating? Check the log files:

cat ~/.claude/hooks/standup-brief.log
cat ~/.claude/hooks/standup-brief.err

Session summaries not appearing? Verify the hook is configured:

cat ~/.claude/settings.json | jq '.hooks.SessionEnd'

macOS TCC / Full Disk Access issues? If your vault is inside ~/Documents, launchd agents may be blocked by macOS privacy controls. Move your vault outside ~/Documents (e.g., ~/obsidian-notes) or grant Full Disk Access to /bin/bash in System Settings > Privacy & Security.

How it works

The system uses Claude's claude -p (prompt mode) to generate all summaries. Each script pipes context into Claude with a carefully tuned prompt and writes the markdown output to disk. No API keys needed beyond what Claude Code already uses — claude -p handles authentication.

License

MIT

About

Zero-friction work journaling for Claude Code — auto session summaries, daily rollups, standup & weekly briefs

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages