Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Core Concepts

Understanding these concepts will help you get the most out of whogitit.

Line Attribution

whogitit tracks the origin of every line in your codebase. Each line is classified into one of five categories:

SourceSymbolDescription
AIGenerated by AI and committed unchanged
AIModifiedGenerated by AI, then edited by a human before commit
Human+Written by a human after AI edits in the same session
OriginalExisted before the AI session started
Unknown?Attribution could not be determined

Why “AIModified” Matters

The distinction between AI and AIModified is crucial:

  • AI (): The AI wrote this and you accepted it as-is
  • AIModified (): The AI wrote something, but you improved or corrected it

This helps identify code that was reviewed and refined versus code that was accepted wholesale.

Three-Way Diff Analysis

whogitit uses a sophisticated three-way diff algorithm to accurately attribute lines, even when you modify AI-generated code before committing.

The Three States

  1. Original - The file content before any AI edits in this session
  2. AI Snapshot - The file content after each AI edit
  3. Final - The content at commit time

How It Works

Original Content          AI Generates           You Modify            Final Commit
      │                        │                      │                      │
      ▼                        ▼                      ▼                      ▼
┌──────────┐            ┌──────────┐            ┌──────────┐            ┌──────────┐
│ line 1   │            │ line 1   │            │ line 1   │            │ line 1   │
│ line 2   │     ──►    │ NEW LINE │     ──►    │ NEW LINE │     ──►    │ NEW LINE │ ● AI
│ line 3   │            │ line 2   │            │ EDITED   │            │ EDITED   │ ◐ AIModified
│          │            │ line 3   │            │ MY LINE  │            │ MY LINE  │ + Human
│          │            │          │            │ line 2   │            │ line 2   │ ─ Original
│          │            │          │            │ line 3   │            │ line 3   │ ─ Original
└──────────┘            └──────────┘            └──────────┘            └──────────┘

By comparing all three states, whogitit determines:

  • Lines that appeared in AI snapshots and remained unchanged → AI
  • Lines that appeared in AI snapshots but were modified → AIModified
  • Lines you added that weren’t in AI snapshots → Human
  • Lines that existed before AI edits → Original

Sessions and Prompts

Sessions

A session represents a continuous period of working with an AI assistant. Each session has:

  • Session ID: A unique identifier
  • Model: The AI model used (e.g., claude-opus-4-5-20251101)
  • Start time: When the session began
  • Prompts: All the prompts used during the session

Prompts

Each prompt you give to the AI is captured and stored with:

  • Index: The order within the session (0, 1, 2, …)
  • Text: The actual prompt (with sensitive data redacted)
  • Affected files: Which files were changed as a result

Git Notes Storage

whogitit stores attribution data in git notes, a built-in git feature for attaching metadata to commits.

Why Git Notes?

  • Native to git: No external database required
  • Travels with the repo: Notes can be pushed/fetched like branches
  • Non-invasive: Doesn’t modify commit history or clutter logs
  • Standard tooling: Can be inspected with normal git commands

The Notes Ref

Attribution is stored under refs/notes/whogitit:

# View raw attribution for a commit
git notes --ref=whogitit show HEAD

# List all commits with attribution
git notes --ref=whogitit list

Pending Buffer

Before a commit, whogitit stores captured changes in a pending buffer (.whogitit-pending.json). This file:

  • Accumulates all file edits during a session
  • Stores complete content snapshots for three-way diff
  • Is processed and cleared when you commit
  • Can be cleared manually with whogitit clear

Pending Buffer Lifecycle

Claude Code Edit
       │
       ▼
PreToolUse Hook ──► Save "before" snapshot
       │
       ▼
   AI makes edit
       │
       ▼
PostToolUse Hook ──► Save "after" snapshot + prompt
       │
       ▼
.whogitit-pending.json (accumulates)
       │
       ▼ (git commit)
       │
Post-commit Hook ──► Three-way analysis ──► Git Note
       │
       ▼
Pending buffer cleared

Privacy and Redaction

Prompts may contain sensitive information. whogitit automatically redacts:

  • API keys and secrets
  • AWS credentials
  • Private keys
  • Bearer tokens
  • GitHub tokens
  • Email addresses
  • Passwords

See Privacy & Redaction for details on configuring redaction patterns.

Next Steps