cnotes automatically captures Claude conversation context in git notes using Claude hooks, making it easy to understand the development history and reasoning behind each commit. The tool shows a conversational transcript of user prompts, tool uses, and Claude's responses.
βοΈ cnotes is pronounced like π΅ c-notes or π cenotes
# Build and install
go install github.com/imjasonh/cnotes
cnotes install
# Note: you may need to restart `claude` to pick up the new hooks
# Now every git commit made through Claude will have conversation context attached!
# View conversation notes for the latest commit
cnotes show
# View notes for a specific commit
cnotes show abc1234
# List all commits with conversation notes
cnotes listWhen you work with Claude and make git commits, cnotes automatically:
- Detects git commit commands in your Claude conversation
- Captures conversation context including user prompts and tool interactions
- Attaches structured notes to the commit using
git notes - Preserves context across rebases, squashes, and other git operations
# Install to project settings (recommended)
cnotes install
# Install globally
cnotes install --global
# Install locally
cnotes install --local
# Uninstall
cnotes install --uninstallThis configures Claude Code to call cnotes as a hook handler when you make git commits.
# Show notes for the latest commit
cnotes show
# Show notes for a specific commit
cnotes show abc1234
# List all commits with notes
cnotes list# Claude Conversation Notes
**Commit:** `abc1234 Add user authentication with password validation`
**Session ID:** `claude_session_20250121_143022`
**Timestamp:** 2025-01-21 14:30:45 EST
**Claude Version:** claude-sonnet-4-20250514
**Tools Used:** Edit, Write, Bash
## Commit Context
Git command: git commit -m "Add user authentication with password validation" Result: [main abc1234] Add user authentication with password validation
## Conversation Context
Recent user prompts:
- Add user authentication to the login form
- Make sure to use bcrypt for password hashing
Tool interactions:
- Edit: components/LoginForm.jsx
- Write: utils/auth.js
- Bash: npm install bcrypt
---
π‘ *Generated by `cnotes`*
# View raw notes
git notes --ref=claude-conversations show HEAD
# View in git log
git log --show-notes=claude-conversations --onelinecnotes includes comprehensive backup functionality to protect against data loss during rebasing, squashing, or other destructive git operations:
# Backup all conversation notes
cnotes backup my-notes-backup.json
# Restore notes from backup
cnotes restore my-notes-backup.json
# View all commits with notes
cnotes listThe system automatically:
- Warns before destructive operations like
git rebase,git reset --hard - Configures git to preserve notes during rebase operations
- Provides backup commands for manual recovery
Customize behavior by creating .claude/notes.json:
{
"enabled": true,
"max_excerpt_length": 5000,
"max_prompts": 2,
"include_tool_output": false,
"notes_ref": "claude-conversations",
"exclude_patterns": ["password", "token", "key", "secret"]
}The system includes built-in privacy protections:
- Automatically filters sensitive patterns (passwords, tokens, keys)
- Limits excerpt length to prevent excessive data storage
- Only includes conversation context from the current session
- Configurable exclusion patterns
- Option to disable entirely (
"enabled": false)
- Hook Integration: cnotes integrates with Claude Code as a PostToolUse hook handler
- Git Command Detection: Monitors bash commands for
git commitoperations - Context Extraction: Parses Claude transcript files to extract relevant conversation context
- Note Creation: Stores structured JSON data using
git notes --ref=claude-conversations - Hash Preservation: Automatically configures git to preserve notes during rewrites
cnotes- Main binary that handles Claude Code hook callscnotes show- Pretty-print conversation notes in Markdown formatcnotes install- Configure Claude Code to use cnotescnotes backup/restore- Backup and restore conversation notescnotes list- List all commits with conversation notes
- Go 1.24+
- Claude Code CLI
- Git repository
# Clone and build
git clone https://github.com/imjasonh/cnotes
cd cnotes
go build -o cnotes
# Install for development
cnotes install
# Test manually (simulates Claude Code calling it)
echo '{"hook_event_name":"PostToolUse",...}' | cnotesGit notes are local by default. To share them with your team:
# Push notes manually
git push origin refs/notes/claude-conversations
# Pull notes from remote
git fetch origin refs/notes/claude-conversations:refs/notes/claude-conversationsConfigure git to automatically push notes whenever you push commits:
# Set up automatic notes pushing
git config --add remote.origin.push '+refs/notes/claude-conversations:refs/notes/claude-conversations'After this one-time setup, every git push will automatically include your notes. This is the most reliable way to ensure notes are always synchronized with your commits.
A Chrome extension is available to view git notes directly on GitHub commit pages. See chrome-extension/ for details.
- π’ Shows badge indicator when commits have notes
- π Displays notes in a popup when clicked
- π·οΈ Supports multiple notes refs with tabs
- β‘ Works with any public repository
- Load the extension from
chrome-extension/directory - Navigate to any GitHub commit page
- Click the extension icon to view notes