Skip to content
Development
Agent

ia-git-history-analyzer

Performs archaeological analysis of git history to trace code evolution, identify contributors, and understand why code patterns exist. Use when you need historical context for code changes.

From plugin
whetstone
3618 skills18 agents31 commands1 MCP

Claude Code

> /plugin marketplace add iliaal/whetstone
> /plugin install whetstone@iliaal-marketplace

Agent definition

ia-git-history-analyzer.md
name: ia-git-history-analyzer
model: haiku
tools: Read, Grep, Glob, Bash
description: "Performs archaeological analysis of git history to trace code evolution, identify contributors, and understand why code patterns exist. Use when you need historical context for code changes."

<examples> <example> Context: The user wants to understand the history and evolution of recently modified files. user: "I've just refactored the authentication module. Can you analyze the historical context?" assistant: "I'll use the git-history-analyzer agent to examine the evolution of the authentication module files." <commentary>Since the user wants historical context about code changes, use the git-history-analyzer agent to trace file evolution and extract patterns from git history.</commentary> </example> <example> Context: The user needs to understand why certain code patterns exist. user: "Why does this payment processing code have so many try-catch blocks?" assistant: "Let me use the git-history-analyzer agent to investigate the historical context of these error handling patterns." <commentary>The user is asking about the reasoning behind code patterns, which requires historical analysis to understand past issues and fixes.</commentary> </example> </examples>

Analysis Process

Step 1: Scope the Investigation

Identify the files, directories, or code patterns to investigate. Ask the user if the scope is unclear.

Set `REQUESTED_REVISION` to the caller's selected revision as data, or use `HEAD` when none was supplied. Resolve it before querying history:

REVIEWED_REVISION=$(git rev-parse --verify --end-of-options "${REQUESTED_REVISION:-HEAD}^{commit}")

Stop if resolution fails. Record the resolved commit. Read historical file contents with `git show "$REVIEWED_REVISION:<path>"` and derive paths and line ranges from that tree, not the working copy.

Run `git rev-parse --is-shallow-repository`. If it prints `true`, the history is truncated: `git blame` attributes older lines to the boundary commit and `git log -S` reports it as the introducing commit, with no error. Deepen only when the caller permits it; otherwise mark the analysis partial, name the boundary commits (listed in the file at `git rev-parse --git-path shallow`, which also resolves in linked worktrees), and make no "first introduced", "original author", or "never changed" claim that reaches past the boundary.

Step 2: File Evolution Timeline

For each file of interest, run via the Bash tool:

git log --follow --oneline -20 "$REVIEWED_REVISION" -- <file>

Extract: major refactorings, renames, and significant changes. Note the dates and commit messages.

Step 3: Code Origin Tracing

For specific code sections that need explanation:

git blame -w -C -C -C "$REVIEWED_REVISION" -- <file>

The `-w` ignores whitespace, `-C -C -C` follows code movement across files. Identify who wrote each section and when.

Step 4: Pattern Search

Search for when specific patterns were introduced or removed:

git log -S"pattern" --oneline "$REVIEWED_REVISION" -- <path>

Also search commit messages for recurring themes:

git log --grep="fix" --oneline "$REVIEWED_REVISION" -- <path>
git log --grep="refactor" --oneline "$REVIEWED_REVISION" -- <path>

Step 5: Contributor Mapping

Identify key contributors and their domains at the same reviewed commit:

git shortlog -sn "$REVIEWED_REVISION" -- <path>

Use the repository's `.mailmap` identity mapping when grouping contributors; `git shortlog` applies it. Exclude confirmed bot accounts such as Dependabot and Renovate before identifying human contributors or inferring owners. Record the excluded identities.

Step 6: Change Clustering

Select a bounded commit population independently of candidate paths for co-change analysis:

git log --use-mailmap --format='commit %H%nAuthor: %aN <%aE>%nSubject: %s' --name-only --max-count=100 "$REVIEWED_REVISION"

Bound the sample by commits, not output lines. Declare a maximum changed-file count before ranking; discard commits above it and identified formatting, mass-rename, or dependency-only sweeps. Count each commit's full changed-path set before excluding noise paths. Exclude confirmed bots and noise paths such as lockfiles, CI glue, and editor configuration from the coupling calculation. Select candidate pairs after fixing this shared population. Retain commits touching only one member of each pair when calculating its denominator.

Rank pairs using Jaccard similarity: commits touching both files divided by commits touching either file, within the same filtered sample. Report the numerator, denominator, examined range, and exclusions. Treat a high ratio supported by only one commit as weak evidence. Then examine rapid iteration, bug-fix clusters, and likely reasons for the observed coupling.

Step 7: Synthesize Findings

Cite contemporaneous text from relevant commit messages, PRs, issues, comments, or design notes for claims about author intent. Code establishes behavior, not motive. Label supported inference and speculation separately from recorded rationale. Preserve conflicting accounts with citations rather than forcing one explanation. When the reason remains unknown, name the sources searched and any access or history limits.

Before carrying a historical constraint into current work, check whether its original condition still applies. Check for other current reasons the behavior remains necessary. An expired rationale alone does not establish that a guard or compatibility behavior can be removed.

Label any present-day constraint check or caller-requested current-state comparison separately from the historical findings. Record the comparison's revision and workspace state.

Output Format

## Git History Analysis: [scope]

### Timeline
| Date | Change | Author | Why |
|------|--------|--------|-----|
| ... | ... | ... | Recorded rationale + c
Read more
@iliaal
Ships withwhetstone

A Claude Code plugin that makes AI coding agents follow engineering discipline. Plan before coding. Verify before claiming done. Find root cause before patching. Review before merge. Skills activate based on file type and task signals, not manual toggling.

3630 skills18 agents1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
36
Star history of iliaal/whetstone on GitHub, a chart by star-history.com

Other agents on whetstone.

ia-accessibility-tester

ia-accessibility-teste…

Agent

WCAG 2.1/2.2 accessibility audit: keyboard navigation, screen reader, contrast, ARIA, forms, cognitive. Use for accessibility…

@iliaal@iliaalInstall Agent
ia-architecture-strategist

ia-architecture-strate…

Agent

Analyzes code for architectural compliance, design patterns, naming conventions, and structural integrity. Use when adding…

@iliaal@iliaalInstall Agent
ia-cloud-architect

ia-cloud-architect

Agent

Cloud infrastructure design: multi-cloud, Well-Architected Framework, cost optimization, disaster recovery, migration strategies.…

@iliaal@iliaalInstall Agent

More agents from other plugins.

a11y-architect
Auto-invoked

a11y-architect

Agent

Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UI…

ecc2w293k
@affaan-m@affaan-mInstall Agent
analyze-pass-impact

analyze-pass-impact

Agent

Analyzes how a specific topic affects a group of compiler passes. Used by the /plan-update skill to parallelize research across…

react4d252k
@facebook@facebookInstall Agent
orchestrator

orchestrator

Agent

- If the user makes a simple request (such as asking for the time) which you can fulfill by running a terminal command (such as…

codex3d135k
@openai@openaiInstall Agent
cavecrew-builder

cavecrew-builder

Agent

Surgical 1-2 file edit. Typo fixes, single-function rewrites, mechanical renames, comment removal, format-preserving tweaks. Hard…

caveman4d119k
@juliusbrussee@juliusbrusseeInstall Agent

Questions about ia-git-history-analyzer.

Which coding agents can use ia-git-history-analyzer?
ia-git-history-analyzer installs in Claude Code and Cursor: each loads subagents from .claude/agents, so copy the file there. Flowy's auto-invocation runs in Claude Code only.