Identify all files a specific author contributed to on a branch vs its upstream, tracing code through renames. Use when asked who edited what, what code an author contributed, or to audit authorship before a merge. This skill should be run as a subagent — it performs many git operations and returns a concise table.
author-contributions identifies every file a specific author contributed to on a branch, compared against its upstream (such as main), and traces those contributions through file renames. The output is a single markdown table with a Status column (DIRECT or VIA_RENAME), the file path, and line changes, plus a summary line, a format meant to be consumed by both humans and other models, for example when auditing authorship before a merge.
Because it runs many sequential git commands, it is designed to be delegated to a subagent that does the work and returns only the concise table. The seven-step procedure resolves the author's exact git identity first (via git log formatting or the GitHub MCP get_me tool, since short usernames can mismatch full display names), collects the files the author directly committed, builds a rename map from every commit on the branch rather than only the author's, gets the merge diff file list, classifies each file, gathers diff stats, and formats the table.
Classification is careful: a file the author touched directly is DIRECT, while a file whose rename ancestry (walked transitively across multi-hop moves like contrib/chat to agentSessions to sessions) traces back to the author is VIA_RENAME. Only files that appear in the merge diff are reported, so contributions later deleted entirely are excluded. The guide recommends implementing the logic in a temporary Python script because shell loops with inline comments break in zsh, and it includes a ready-made example script plus an alternative shell cross-check.
A markdown table of every file a given author contributed to on a branch versus its upstream, with columns for Status (DIRECT or VIA_RENAME), file path, and line changes, plus a total summary line.
It performs many sequential git operations, so it is delegated to a subagent that does the heavy lifting and returns only the concise table.
It builds a rename map from every commit on the branch, not just the author's, then walks rename chains transitively so multi-hop moves (such as contrib/chat to agentSessions to sessions) are still attributed.
By exact git identity resolved via git log formatting or the GitHub MCP get_me tool, because --author does substring matching and a short username could match the wrong person.
Only files that appear in the merge diff (git diff --name-only upstream..branch); files the author touched but that were later deleted and will not land upstream are excluded.
Quick Setup:
.claude/skills/Repository
microsoft/vscode