Scan a repository to surface actionable findings about agent performance. Analyzes source code, git history, GitHub data, agent logs, and agent context, then synthesizes cross-referenced findings with targeted actions informed by Tessl product awareness. Supports incremental multi-developer contributions and produces a self-contained HTML report.
70
88%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Advisory
Suggest reviewing before use
Examine the repository's git history to surface patterns that indicate where coding agents are likely to struggle.
Scope: Focus on git commands (log, shortlog, diff, blame, show, rev-list, etc.) for temporal and change pattern analysis.
Read the shared reference files:
Resolving reference paths: The links above use relative paths (
../../references/...) that work when this skill is read from its tile directory. If those paths do not resolve (e.g. when activated via a.claude/skills/symlink), find the shared references at.tessl/tiles/*/agent-insight-experiment/references/relative to the repository root.
Your report prefix is GIT (e.g., GIT-001, GIT-002).
Run the data collection script to gather all git metrics in a single pass:
bash "$(dirname "$0")/scripts/git-data-collector.sh" --root "$(pwd)"Resolving script path: The path above assumes this skill is read from its tile directory. If run via a
.claude/skills/symlink, locate the script at.tessl/tiles/*/agent-insight-experiment/skills/analyze-git-history/scripts/git-data-collector.shrelative to the repo root. Pass--months <n>to adjust the analysis window (default: 6), or--out <path>to write to a file.
The script outputs JSON containing: repository vitals (commit count, authors, last commit, recent activity), file churn (top 40), co-change pairs (top 10 files with their co-changed files), reverts, fix-up commits, contributor concentration (top 20 directories with author breakdown), large commits (>20 files), commit message prefix conventions, and pattern shifts (recent vs older half). Read the output and proceed directly to insight generation — skip the manual collection steps below.
If the script is unavailable, collect data manually using the steps below.
git rev-list --count HEAD # total commits
git log --format='%ae' | sort -u | wc -l # unique authors
git log --since="6 months ago" --oneline | wc -l # recent activity
git log -1 --format='%ci' # last commit dateCheckpoint: If total commits <50 or recent activity is zero, adjust scope — the repo may be too small or inactive for meaningful churn analysis. Note this in the report and focus on contributor patterns and structural observations instead.
git log --since="6 months ago" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -40Find files that always change together — this reveals hidden coupling where an agent might miss a required co-change:
# For each of the top 10 high-churn files, check what else changes in the same commits
git log --since="6 months ago" --pretty=format:"%H" -- <file> | head -20 | while read sha; do
git diff-tree --no-commit-id --name-only -r "$sha"
done | sort | uniq -c | sort -rn | head -10git log --since="6 months ago" --oneline --grep="revert" -i
git log --since="6 months ago" --oneline --grep="fix" -i | head -30Check whether reverts and fixes cluster around specific areas.
# For each of the top 20 most-changed directories
git log --since="6 months ago" --format='%ae' -- <directory> | sort | uniq -c | sort -rnSingle-contributor areas signal concentrated implicit knowledge — high KCG-3 risk.
# Large commits (many files) — suggest complex, coupled changes
git log --since="6 months ago" --pretty=format:"%H %s" --shortstat | head -100
# Commit message conventions
git log --since="6 months ago" --pretty=format:"%s" | sed 's/(.*//' | sort | uniq -c | sort -rn | head -20Convention changes visible in activity shifts between recent and older code:
# Compare directory activity: last 3 months vs 3-6 months ago
git log --since="3 months ago" --name-only --pretty=format: | sed 's|/[^/]*$||' | sort | uniq -c | sort -rn | head -20
git log --since="6 months ago" --until="3 months ago" --name-only --pretty=format: | sed 's|/[^/]*$||' | sort | uniq -c | sort -rn | head -20--since flags consistently to bound queriesGit history is especially good at revealing:
Produce a JSON report conforming to the insight report schema. Save to the path provided by the orchestrator (or .tessl-insights-poc/reports/git-history.json standalone).
Set scope.metrics to include:
commits_analyzed: number of commits examinedauthors_seen: number of unique authors (by email, %ae) in the analysed window (denominator for the commit_authors_impacted hero stat)branches_examined: number of branches checkedtime_range_days: how many days of history coveredproblem_commits: array of commit SHAs (short or full) that appear as evidence in this report's insights — i.e. the specific commits used to illustrate reverts, revert-reland cycles, oversized commits, drift commits, etc. Deduplicate across insights. Include every SHA you cite in evidence.commit_authors_impacted: number of distinct authors (by email, %ae) who wrote the commits listed in problem_commits. Derive this by running git log -1 --format='%ae' <sha> for each SHA and counting unique values. This is the numerator for the commit_authors_impacted hero stat in the synthesized report.The synthesizer uses problem_commits + commit_authors_impacted + authors_seen to populate summary.commit_authors_impacted in findings.json. Every insight that cites commits as evidence must use SHAs that also appear in scope.metrics.problem_commits — if you can't cite concrete SHAs for a "problem commits" style finding, the insight is too vague.
Validation before saving:
metadata fields presentid, category, impact, effort, priority_scorescope.metrics.problem_commits contains every SHA cited in any insight's evidence and that scope.metrics.commit_authors_impacted matches the count of distinct authors for those SHAsMark data_source_exclusive: true for insights from temporal/change data (churn rates, co-change patterns, contributor concentration).