
Author Contributions
- 2k installs
- 188k repo stars
- Updated July 28, 2026
- microsoft/vscode
author-contributions is an agent skill that 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 contrib.
About
The author-contributions skill. 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. When asked to find all files a specific author contributed to on a branch (compared to main or another upstream), follow this procedure. The goal is to produce a simple table that both humans and LLMs can consume. Delegate it to a subagent with a prompt like: > Find every file that author "Full Name" contributed to on branch compared to . Trace contributions through file renames. Return a markdown table with columns: Status (DIRECT or VIA_RENAME), File Path, and Lines (+/-). Identify the author's exact git identity Match the requested person to their exact string.
- If it's in `author_files` → DIRECT
- Else, walk the rename map transitively (follow chains: current → old → older) and check if any ancestor is in `author_fi
- Otherwise → not this author's contribution
- Use Python for the heavy lifting. Shell loops with inline comments break in zsh. Write a temp `.py` script, run it, then
- Renames can be multi-hop. A file may have moved `contrib/chat/` → `agentSessions/` → `sessions/`. The rename map must be
Author Contributions by the numbers
- 2,030 all-time installs (skills.sh)
- +106 installs in the week ending Jul 28, 2026 (Skillselion tracking)
- Ranked #40 of 739 Git & Pull Requests skills by installs in the Skillselion catalog
- Security screen: MEDIUM risk (skills.sh audit)
- Data as of Jul 28, 2026 (Skillselion catalog sync)
author-contributions capabilities & compatibility
- Capabilities
- if it's in `author_files` → direct · else, walk the rename map transitively (follow c · otherwise → not this author's contribution · use python for the heavy lifting. shell loops wi · renames can be multi hop. a file may have moved
- Use cases
- documentation · planning · orchestration
What author-contributions says it does
When asked to find all files a specific author contributed to on a branch (compared to main or another upstream), follow this procedure.
The goal is to produce a simple table that both humans and LLMs can consume.
npx skills add https://github.com/microsoft/vscode --skill author-contributionsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2k |
|---|---|
| repo stars | ★ 188k |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 28, 2026 |
| Repository | microsoft/vscode ↗ |
How do I apply author-contributions correctly using the SKILL.md workflows and reference files?
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 b
Who is it for?
Developers and software engineers working with author-contributions patterns from the skill documentation.
Skip if: Skip when cached docs are empty, boilerplate-only, or outside the skill documented scope.
When should I use this skill?
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
What you get
Grounded author-contributions guidance with highlights, triggers, and evidence quotes from SKILL.md.
- authorship table of changed files
Files
When asked to find all files a specific author contributed to on a branch (compared to main or another upstream), follow this procedure. The goal is to produce a simple table that both humans and LLMs can consume.
Run as a Subagent
This skill involves many sequential git commands. Delegate it to a subagent with a prompt like:
Find every file that author "Full Name" contributed to on branch<branch>compared to<upstream>. Trace contributions through file renames. Return a markdown table with columns: Status (DIRECT or VIA_RENAME), File Path, and Lines (+/-). Include a summary line at the end.
Procedure
1. Identify the author's exact git identity
git log --format="%an <%ae>" <upstream>..<branch> | sort -uMatch the requested person to their exact --author= string. Do not guess — short usernames won't match full display names (resolve via git log or the GitHub MCP get_me tool).
2. Collect all files the author directly committed to
git log --author="<Exact Name>" --format="%H" <upstream>..<branch>For each commit hash, extract touched files:
git diff-tree --no-commit-id --name-only -r <hash>Union all results into a set (author_files).
3. Build rename map across the entire branch
For every commit on the branch (not just the author's), extract renames:
git diff-tree --no-commit-id -r -M <hash>Parse lines with R status to build a map: new_path → {old_paths}.
4. Get the merge diff file list
git diff --name-only <upstream>..<branch>These are the files that will actually land when the branch merges.
5. Classify each file in the merge diff
For each file in step 4:
- If it's in
author_files→ DIRECT - Else, walk the rename map transitively (follow chains: current → old → older) and check if any ancestor is in
author_files→ VIA_RENAME - Otherwise → not this author's contribution
6. Get diff stats
git diff --stat <upstream>..<branch> -- <file1> <file2> ...7. Return the table
Format the result as a markdown table:
| Status | File | +/- |
|--------|------|-----|
| DIRECT | src/vs/foo/bar.ts | +120/-5 |
| VIA_RENAME | src/vs/baz/qux.ts | +300 |
| ... | ... | ... |
**Total: N files, +X/-Y lines**Important Notes
- Use Python for the heavy lifting. Shell loops with inline comments break in zsh. Write a temp
.pyscript, run it, then delete it. - Author matching is exact. Always run step 1 first.
--authordoes substring matching but you must verify the right person is matched (e.g., don't match "Joshua Smith" when looking for "Josh S."). Use the GitHub MCPget_metool orgit logoutput to resolve the correct full name. - Renames can be multi-hop. A file may have moved
contrib/chat/→agentSessions/→sessions/. The rename map must be walked transitively. - Only report files in the merge diff (step 4). Files the author touched that were later deleted entirely should not appear — they won't land in the upstream.
- The rename map must include all authors' commits, not just the target author's. Other people often do the rename commits (e.g., bulk refactors/moves).
Example Python Script
import subprocess, os
os.chdir('<repo_root>')
UPSTREAM = 'main'
AUTHOR = '<Author Name>' # Resolve via `git log` or GitHub MCP `get_me`
# Step 2: author's files
commits = subprocess.check_output(
['git', 'log', f'--author={AUTHOR}', '--format=%H', f'{UPSTREAM}..HEAD'],
text=True).strip().split('\n')
author_files = set()
for h in (c for c in commits if c):
files = subprocess.check_output(
['git', 'diff-tree', '--no-commit-id', '--name-only', '-r', h],
text=True).strip().split('\n')
author_files.update(f for f in files if f)
# Step 3: rename map from ALL commits
all_commits = subprocess.check_output(
['git', 'log', '--format=%H', f'{UPSTREAM}..HEAD'],
text=True).strip().split('\n')
rename_map = {} # new_name -> set(old_names)
for h in (c for c in all_commits if c):
out = subprocess.check_output(
['git', 'diff-tree', '--no-commit-id', '-r', '-M', h],
text=True, timeout=5).strip()
for line in out.split('\n'):
if not line:
continue
parts = line.split('\t')
if len(parts) >= 3 and 'R' in parts[0]:
rename_map.setdefault(parts[2], set()).add(parts[1])
# Step 4: merge diff
diff_files = subprocess.check_output(
['git', 'diff', '--name-only', f'{UPSTREAM}..HEAD'],
text=True).strip().split('\n')
# Step 5: classify
results = []
for f in (x for x in diff_files if x):
if f in author_files:
results.append(('DIRECT', f))
else:
# walk rename chain
chain, to_check = set(), [f]
while to_check:
cur = to_check.pop()
if cur in chain:
continue
chain.add(cur)
to_check.extend(rename_map.get(cur, []))
chain.discard(f)
if chain & author_files:
results.append(('VIA_RENAME', f))
# Step 6: stats
if results:
stat = subprocess.check_output(
['git', 'diff', '--stat', f'{UPSTREAM}..HEAD', '--'] +
[f for _, f in results], text=True)
print(stat)
# Step 7: table
for kind, f in sorted(results, key=lambda x: x[1]):
print(f'| {kind:12s} | {f} |')
print(f'\nTotal: {len(results)} files')Alternative Script
After following the process above, run this script to cross-check files touched by an author against the branch diff. You can do this both with an without src/vs/sessions.
AUTHOR=""
# 1. Find commits by author on this branch (not on main)
git log main...HEAD --author="$AUTHOR" --format="%H"
# 2. Get unique files touched across all those commits, excluding src/vs/sessions/
git log main...HEAD --author="$AUTHOR" --format="%H" \
| xargs -I{} git diff-tree --no-commit-id -r --name-only {} \
| sort -u \
| grep -v '^src/vs/sessions/'
# 3. Cross-reference with branch diff to keep only files still changed vs main
git log main...HEAD --author="$AUTHOR" --format="%H" \
| xargs -I{} git diff-tree --no-commit-id -r --name-only {} \
| sort -u \
| grep -v '^src/vs/sessions/' \
| while read f; do git diff main...HEAD --name-only -- "$f" 2>/dev/null; done \
| sort -uRelated skills
How it compares
Use author-contributions for branch-scoped contributor file lists; use git blame tools when you need per-line history rather than per-author file inventory.
FAQ
Who is author-contributions for?
Developers and software engineers working with author-contributions patterns from the skill documentation.
When should I use author-contributions?
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 o
Is author-contributions safe to install?
Review the Security Audits panel on this page before installing in production.