A lightweight journal/memory system for Claude Code with no ML dependencies. Uses simple SQLite for fast, local storage. This is a full-featured Claude Code plugin with slash commands, skills, an agent, and auto-capture hooks.
FAQ
claude-journal is a Claude Code plugin with 3 hand-picked skills for productivity work, indexed on Flowy. Install it with the command on its page. It includes context-recovery, find-related-work, journal-capture. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
> /plugin marketplace add chrismbryant/claude-journal-mcp> /plugin install claude-journal@claude-journal-dev
Repo: chrismbryant/claude-journal-mcp
A lightweight journal/memory system for Claude Code with no ML dependencies. Uses simple SQLite for fast, local storage.
This is a full-featured Claude Code plugin with slash commands, skills, an agent, and auto-capture hooks.
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/chrismbryant/claude-journal-mcp.git
cd claude-journal-mcp
uv sync
# Option A: Direct install from current directory
claude /plugin install .
# Option B: Add marketplace first, then install
claude /marketplace add ./marketplace.json
claude /plugin install claude-journal
This automatically:
If you prefer to install just the MCP server without the plugin features:
# With uv (recommended - faster)
uv sync
# Or with pip
pip install -e .
~/.claude/config.json or your project's .mcp.json:{
"mcpServers": {
"journal": {
"command": "python",
"args": ["-m", "claude_journal.server"]
}
}
}
Note: Manual installation only provides MCP tools. You won't get slash commands, skills, or the agent without installing as a plugin.
Default: ~/.claude/journal.db
Override with environment variable:
export JOURNAL_DB_PATH="/path/to/your/journal.db"
The plugin provides 6 slash commands for easy interaction:
/journal-addInteractively create a new journal entry. Claude guides you through:
You: /journal-add
Claude: Let's create a journal entry. What's the title?
You: Implemented rate limiting
Claude: Great! Tell me more about it...
/journal-searchSearch entries with advanced query syntax. Supports ID lookup, tag filtering, exact phrases, date ranges, and keywords.
You: /journal-search
Claude: What would you like to search for?
You: authentication
Claude: [Shows all auth-related entries]
Advanced search syntax:
42 or id:42 - Find specific entry by IDtag:bugfix or #bugfix - Filter by tag"user authentication" - Match exact phraselast week authentication - Combine time with searchtag:bugfix "login error" last month - Mix multiple filters/journal-recentShow recent entries to restore context (especially useful after /clear).
You: /clear
You: /journal-recent
Claude: Here's what you were working on:
[Lists recent entries with summaries]
/journal-timeQuery entries using natural language time expressions.
You: /journal-time
You: last week
Claude: [Shows all entries from last week]
Supports: "yesterday", "last month", "january 2024", "last 3 days", etc.
/journal-statsView statistics about your journal usage.
You: /journal-stats
Claude:
๐ 247 entries across 5 projects
๐
Jan 15 - Jul 20, 2024 (6 months)
Most active: my-app (89 entries)
/journal-exportExport your journal for backup or sharing between machines.
You: /journal-export
Claude: Where should I save the export?
You: ~/backups/journal_2024.db
Claude: โ
Exported to ~/backups/journal_2024.db
The plugin includes 3 proactive skills that Claude uses automatically:
journal-captureAutomatically captures significant work when you:
Claude recognizes important moments and captures them without being asked.
context-recoveryRestores your working context from the journal:
/clear commandBrings back project context, recent changes, and next steps.
find-related-workSearches for past work related to current tasks:
Helps avoid reinventing solutions and maintains consistency.
The plugin includes an optional Journal Assistant agent.
When you first use journal features, Claude will prompt:
Would you like to enable the Journal Assistant agent?
The agent helps by:
- Automatically capturing significant work
- Recovering context after /clear
- Finding related past work
- Suggesting when to journal
Enable now?
The agent is opt-in but recommended for the best experience.
journal_add - Manually add entry
Add a journal entry:
- title: "Implemented auth system"
- description: "Built OAuth2 flow with JWT tokens"
- project: "my-app"
- tags: ["auth", "backend"]
journal_auto_capture - Auto-save progress
Automatically called by hooks or when Claude detects significant work
journal_search - Advanced text search
Search examples:
- "authentication" - Keyword search
- "42" or "id:42" - Find entry by ID
- "tag:bugfix" or "#bugfix" - Filter by tag
- "\"user authentication\"" - Exact phrase match
- "last week authentication" - Date range + keyword
- "tag:bugfix \"login error\" performance" - Combined filters
journal_time_query - Time-based search
What did I work on last week?
What did I do in January?
When did I implement feature X?
Supported time expressions:
today, yesterdaylast week, last month, last yearlast 3 days, last 2 weeksthis week, this month, this yearjanuary, january 20242024-01-15 (ISO date)journal_list_recent - Recent entries
Show me the last 10 entries
Show recent work on project X
journal_list_projects - All projects
List all projects with entry counts
journal_stats - Statistics
Show journal statistics
journal_delete - Delete by ID
Delete entry 42
journal_delete_by_project - Delete all for project
Delete all entries for project "old-app"
journal_import - Import from file
Import from ~/other-machine/journal.db
journal_export - Export to file
Export to ~/backup/journal_2024.db
You: Remember that we implemented rate limiting today
Claude: [Calls journal_add]
โ
Journal entry created (ID: 42)
You: What did I work on last month?
Claude: [Calls journal_time_query with "last month"]
Shows all entries from last month
You: When did I add the auth system?
Claude: [Calls journal_time_query with search for "auth"]
Shows entries matching "auth" with dates
You: /clear
You: What was I working on?
Claude: [Calls journal_list_recent]
Shows recent work to restore context
You: Show me everything I've done on my-app
Claude: [Calls journal_search with project filter]
Lists all my-app entries
Machine 1:
You: Export my journal
Claude: [Calls journal_export]
โ
Exported journal to journal_export_20241105.db
Machine 2:
You: Import journal from ~/Downloads/journal_export_20241105.db
Claude: [Calls journal_import]
โ
Imported 150 new entries
The plugin includes an auto-capture hook that runs automatically when installed.
How it works:
~/.claude/journal-capture-state.jsonConfiguration:
The hook is defined in hooks/hooks.json and automatically enabled:
{
"hooks": {
"UserPromptSubmit": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/hooks/journal-auto-capture.js"
}
]
}
]
}
}
Behavior:
๐ Journal auto-capture hook running)The plugin includes a minimal CLI that provides information about available MCP tools:
python -m claude_journal.cli
# Or: claude-journal
All journal operations are performed through the MCP server, not via CLI commands. The auto-capture hook triggers Claude to create entries using the journal_auto_capture MCP tool.
CREATE TABLE journal_entries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
project TEXT,
title TEXT NOT NULL,
description TEXT NOT NULL,
tags TEXT
);
CREATE INDEX idx_created_at ON journal_entries(created_at);
CREATE INDEX idx_project ON journal_entries(project);
pytest tests/
Important: The main branch is protected and requires pull requests.
# Create a feature branch
git checkout -b your-feature-name
# Make your changes and commit
git add .
git commit -m "Description of changes"
# Push your branch
git push -u origin your-feature-name
# Create a pull request
gh pr create --title "Your PR title" --body "Description"
# After CI passes, merge the PR
gh pr merge <PR-number> --squash --delete-branch
Do not push directly to main - all changes must go through pull requests.
claude-journal-mcp/
โโโ .claude-plugin/
โ โโโ plugin.json # Plugin manifest
โโโ agents/
โ โโโ journal-assistant.md # Journal assistant agent
โโโ commands/
โ โโโ journal-add.md # /journal-add command
โ โโโ journal-export.md # /journal-export command
โ โโโ journal-recent.md # /journal-recent command
โ โโโ journal-search.md # /journal-search command
โ โโโ journal-stats.md # /journal-stats command
โ โโโ journal-time.md # /journal-time command
โโโ hooks/
โ โโโ hooks.json # Hook configuration
โ โโโ journal-auto-capture.js # Auto-capture hook
โโโ skills/
โ โโโ journal-capture/
โ โ โโโ SKILL.md # Proactive capture skill
โ โโโ context-recovery/
โ โ โโโ SKILL.md # Context recovery skill
โ โโโ find-related-work/
โ โโโ SKILL.md # Related work finder skill
โโโ src/
โ โโโ claude_journal/
โ โโโ __init__.py
โ โโโ server.py # MCP server
โ โโโ database.py # SQLite operations
โ โโโ time_parser.py # Natural language time parsing
โโโ tests/
โโโ .mcp.json # MCP server config
โโโ pyproject.toml
โโโ LICENSE
โโโ README.md
Embeddings/Semantic Search:
This Approach (SQLite Full-Text):
Trade-off: For a journal, exact keyword matching is usually sufficient. You remember rough terms like "auth", "bug", "deploy" better than abstract concepts.
MIT
Pull requests welcome! Please ensure:
.claude-plugin/
marketplace.json
plugin.json
.github/
workflows/
test.yml
.gitignore
agents/
journal-assistant.md
commands/
journal-add.md
journal-export.md
journal-recent.md
journal-search.md
journal-stats.md
journal-time.md
hooks/
hooks.json
journal-auto-capture.js
README.md
LICENSE
pyproject.toml
README.md
skills/
context-recovery/
SKILL.md
find-related-work/
SKILL.md
journal-capture/
SKILL.md
src/
claude_journal/
__init__.py
cli.py
database.py
server.py
time_parser.py
tests/
test_database.py
test_time_parser.py
uv.lockยฉ 2026 Flowy ยท Free and open source
Built for Claude Code ยท Not affiliated with Anthropic