From journal
Logs work, recaps progress, searches history, and attaches media to a developer journal. Triggers: "journal this", "journal recent work", "recap", "journal search", "journal attach", "journal setup", or needs to record completed tasks, decisions, or progress.
How this skill is triggered — by the user, by Claude, or both
Slash command
/journal:journalThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Record development work, recap progress, search history, and attach media. Route by subcommand.
evals/evals.jsonreferences/append.mdreferences/attach.mdreferences/recap.mdreferences/search.mdreferences/setup.mdscripts/journal-attach.shscripts/journal-config.shscripts/journal-context.shscripts/journal-date.shscripts/journal-find-entry.shscripts/journal-git.shscripts/journal-index.jsscripts/journal-project.shscripts/journal-read-entry.shscripts/journal-root.shscripts/journal-write-entry.shRecord development work, recap progress, search history, and attach media. Route by subcommand.
Parse the user's input to determine the mode:
| Input | Mode | Resource |
|---|---|---|
/journal (no args) | Append — journal recent work | references/append.md |
/journal some text here | Append — journal with the text as focus/annotation | references/append.md |
/journal recap [N] [project] | Recap — narrative summary of last N days | references/recap.md |
/journal search <query> | Search — find entries by tag, project, or date | references/search.md |
/journal attach <file> [project] | Attach — attach media to a journal entry | references/attach.md |
/journal setup | Setup — configure journal storage location | references/setup.md |
After determining the mode, Read the corresponding resource file (MANDATORY — load exactly one based on the routed mode) from the skill directory and follow its instructions. Do not proceed without reading the mode file.
POINTER_PATH = ~/.claude/journal-config.json
The pointer file contains { "journal_root": "<path>" } and is the single source of truth for where journal data lives.
JOURNAL_ROOT = read from POINTER_PATH, or env CLAUDE_JOURNAL_ROOT, or ~/.claude-journal
CONFIG_PATH = $JOURNAL_ROOT/config.json
Gather context by running the bundled scripts:
bash ${CLAUDE_SKILL_DIR}/scripts/journal-date.sh # → "YYYY-MM-DD HH:MM"
bash ${CLAUDE_SKILL_DIR}/scripts/journal-project.sh # → project name
bash ${CLAUDE_SKILL_DIR}/scripts/journal-git.sh # → "true/false" then project path
NEVER use your internal clock for the date.
Resolve journal root:
bash ${CLAUDE_SKILL_DIR}/scripts/journal-root.sh
If the pointer file does not exist (first interactive run), read and run references/setup.md before proceeding.
Ensure config exists and read it:
bash ${CLAUDE_SKILL_DIR}/scripts/journal-config.sh "$JOURNAL_ROOT"
Creates $JOURNAL_ROOT/config.json with defaults if missing, then outputs its content. Use the output for default_recap_days and media_hints_enabled.
Read the resource file for the determined mode and follow its instructions.
When invoked as a background auto-journal (spawned by the main agent, not by the user running /journal):
~/.claude-journal silently — do not run interactive setup.Journaled: <summary> → entries/YYYY/MM/DD/HH-MM-project.md
With media hints:
Journaled: <summary> → entries/YYYY/MM/DD/HH-MM-project.md
📷 Capture while fresh: <media hint description>
Run /journal setup to enable auto-journaling. Setup will offer to add the required CLAUDE.md snippet automatically.
The snippet spawns the dedicated journal:journal-worker agent:
Agent(subagent_type="journal:journal-worker", run_in_background=true,
prompt="<what was done>")
~/.claude-journal silently. Create directory structure and config automatically./journal first.| File | Contents | When to load |
|---|---|---|
references/append.md | Entry composition, frontmatter schema, index upsert | MANDATORY for append mode |
references/recap.md | Date range querying, narrative recap structure | MANDATORY for recap mode |
references/search.md | Query parsing, index search, results formatting | MANDATORY for search mode |
references/attach.md | Media copy, frontmatter linking, index media increment | MANDATORY for attach mode |
references/setup.md | First-run config, pointer file, auto-journal snippet | MANDATORY for setup mode |
scripts/journal-date.sh | Current date/time | Before Any Mode step 1 |
scripts/journal-project.sh | Sanitized project name from cwd | Before Any Mode step 1 |
scripts/journal-git.sh | Git repo status and project path | Before Any Mode step 1 |
scripts/journal-root.sh | Resolved journal root path | Before Any Mode step 2 |
scripts/journal-config.sh | Ensure config exists, output values | Before Any Mode step 3 |
scripts/journal-find-entry.sh | Find existing entry for today | Append mode step 2 |
scripts/journal-read-entry.sh | Read existing entry content | Append mode step 2 |
scripts/journal-write-entry.sh | Write entry file from stdin | Append mode step 4 |
scripts/journal-index.js | Index upsert, media increment, filtered list | Append, attach, recap, search |
scripts/journal-attach.sh | Media file validation and copy | Attach mode |
agents/journal-worker.md | Background auto-journal agent | Spawned by main agent for auto-journaling |
devlog, work log, developer journal, recap, standup, blog-worthy, demo-worthy, progress tracking, media capture
npx claudepluginhub vivecuervo7/claude-pluginsGenerates markdown developer journals from Claude Code activity data over specified time periods like today or last week. Focuses on accomplishments, decisions, and project progress with day-by-day breakdowns.
Logs daily development progress with project-isolated diary entries and optional sync to Notion/Obsidian. Invoke via /diary or when summarizing achievements.
Logs accomplishments from Claude Code sessions to dated markdown files at session end, context checkpoints, self-improve triggers, or user request.