- Remove pre-push and post-commit hooks - Remove examples directory with hook examples - Update README to recommend git config for automatic notes pushing - Restructure commands from cmd/ to internal/commands/ - Git now configured to push notes automatically with: git config --add remote.origin.push '+refs/notes/claude-conversations:refs/notes/claude-conversations' |
||
|---|---|---|
| .claude | ||
| .github/workflows | ||
| chrome-extension | ||
| internal | ||
| scripts | ||
| .gitignore | ||
| CLAUDE.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| main.go | ||
| README.md | ||
cnotes - Git Notes for Claude Conversations
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
Quick Start
# 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 list
What It Does
When 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
Installation
# Install to project settings (recommended)
cnotes install
# Install globally
cnotes install --global
# Install locally
cnotes install --local
# Uninstall
cnotes install --uninstall
This configures Claude Code to call cnotes as a hook handler when you make git commits.
Viewing Conversation Notes
Pretty-Printed Format (Recommended)
# Show notes for the latest commit
cnotes show
# Show notes for a specific commit
cnotes show abc1234
# List all commits with notes
cnotes list
Example Output
# 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`*
Raw Git Notes Commands
# View raw notes
git notes --ref=claude-conversations show HEAD
# View in git log
git log --show-notes=claude-conversations --oneline
Backup and Restore
cnotes 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 list
Automatic Protection
The 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
Configuration
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"]
}
Privacy Controls
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)
How It Works
- 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
Architecture
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
Requirements
- Go 1.24+
- Claude Code CLI
- Git repository
Development
# 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",...}' | cnotes
Sharing Git Notes
Git 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-conversations
Automatic Notes Pushing (Recommended)
Configure 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.
Chrome Extension
A Chrome extension is available to view git notes directly on GitHub commit pages. See chrome-extension/ for details.
Features
- 🔢 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
Installation
- Load the extension from
chrome-extension/directory - Navigate to any GitHub commit page
- Click the extension icon to view notes
⚠️ Security Notice: cnotes executes as a Claude Code hook handler. Ensure your installation is secure and trusted.