Skip to content

imjasonh/cnotes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

70 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

cnotes - Git Notes for Claude Conversations

Test

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:

  1. Detects git commit commands in your Claude conversation
  2. Captures conversation context including user prompts and tool interactions
  3. Attaches structured notes to the commit using git notes
  4. 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

  1. Hook Integration: cnotes integrates with Claude Code as a PostToolUse hook handler
  2. Git Command Detection: Monitors bash commands for git commit operations
  3. Context Extraction: Parses Claude transcript files to extract relevant conversation context
  4. Note Creation: Stores structured JSON data using git notes --ref=claude-conversations
  5. Hash Preservation: Automatically configures git to preserve notes during rewrites

Architecture

  • cnotes - Main binary that handles Claude Code hook calls
  • cnotes show - Pretty-print conversation notes in Markdown format
  • cnotes install - Configure Claude Code to use cnotes
  • cnotes backup/restore - Backup and restore conversation notes
  • cnotes 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

  1. Load the extension from chrome-extension/ directory
  2. Navigate to any GitHub commit page
  3. Click the extension icon to view notes

⚠️ Security Notice: cnotes executes as a Claude Code hook handler. Ensure your installation is secure and trusted.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •