Help us improve
Share bugs, ideas, or general feedback.
npx claudepluginhub tnm/git-atraceCapture AI coding sessions to understand intent
Official prompts.chat marketplace - AI prompts, skills, and tools for Claude Code
Behavioral guidelines to reduce common LLM coding mistakes, derived from Andrej Karpathy's observations
Open Design — local-first design app exposed to coding agents over MCP. Install once with your agent's plugin command and projects/files/skills are reachable through stdio.
Share bugs, ideas, or general feedback.
Capture AI coding sessions and link them to commits and lines.
When AI tools generate code, we lose context of why and whence that code; and the final artifact is often alienated from its inputs.
git-atrace captures the coding sessions and links them to the files that were edited.
Sessions are stored locally by default, and can be explicitly shared like any git object.
This tool is small, follows git conventions, and is written in bash. Requires jq for viewing sessions.
.git/trace/sessions/ (private by default)curl -fsSL https://raw.githubusercontent.com/tnm/git-atrace/main/install.sh | bash
This installs git-atrace and git-atrace-hook to ~/.local/bin/.
Or clone manually:
git clone https://github.com/tnm/git-atrace
cd git-atrace
export PATH="$PATH:$(pwd)"
Install as a plugin from GitHub:
/plugin marketplace add tnm/git-atrace
/plugin install git-atrace@git-atrace
Or clone and point to it:
git clone https://github.com/tnm/git-atrace ~/.local/share/git-atrace
claude --plugin-dir ~/.local/share/git-atrace
Copy the hook config to your project or user config:
cp hooks/opencode/oh-my-opencode.json .opencode/
# Edit paths to point to your git-atrace installation
The config includes hooks for both session capture (on file edits) and auto-linking (on git commit).
Copy the hook config:
cp hooks/gemini/settings.json .gemini/
# Edit paths to point to your git-atrace installation
The config includes hooks for both session capture and auto-linking.
Each tool needs two hooks:
| Hook | Trigger | Purpose |
|---|---|---|
git-atrace-hook | File edits | Captures session transcript |
git-atrace-commit-hook | Git commit | Links session to commit |
Sessions are captured automatically when the AI assistant edits files, and linked to commits when committing from within the AI tool.
When git-atrace is in your PATH, git picks it up as a subcommand (git atrace).
git atrace
Shows recent sessions with timestamps and file counts:
Sessions
3ea80c57 2024-01-23T03:52:52Z (3 files) [local]
a1b2c3d4 2024-01-22T22:30:00Z (1 files) [shared]
git atrace show src/auth.py
git atrace view 3ea80c57
Shows the full conversation:
Session: 3ea80c57-6b85-4ca6-bec1-d6d471d207e2
> Add login with rate limiting
I'll create a login function with rate limiting...
[Edit]
> The SQL looks injectable
You're right, let me fix that with parameterized queries...
[Edit]
git atrace files 3ea80c57
git atrace share 3ea80c57
Copies the session to a tracked location and stages it for commit. Now it syncs with your repo.
By default, sharing goes to .agents/sessions/ if a .agents/ directory exists (common with AI tooling). Otherwise, configure a location:
git config atrace.sharedir .trace/sessions
git atrace delete 3ea80c57
Removes the session (checks local first, then shared).
git atrace export 3ea80c57 > session.json
Exports to Agent Trace spec format for interoperability.
git atrace import session.json
Imports an Agent Trace spec file as a local session.
git atrace link 3ea80c57 # links to HEAD
git atrace link 3ea80c57 abc123 # links to specific commit
Associates a session with a commit using git notes (refs/notes/atrace).
git atrace log
Commits with sessions
7490404 Add test2.c for attribution testing
↳ 3ea80c57
git atrace blame src/auth.py
Shows each line with its commit and linked session (if any):
Blame: src/auth.py
(commits with linked sessions shown in cyan)
055a2d0 d5eb95cd def login(user, password):
055a2d0 d5eb95cd # Rate limiting added per review
01d6eb9 05fac6aa if is_rate_limited(user):
01d6eb9 05fac6aa raise RateLimitError()
(local) return check_password(user, password)
Uncommitted changes show as (local) in yellow.