Changeset Narrator
See the full narrative for any line of code. Click on a line and get a chronological sidebar timeline showing the commit, the PR it was part of, review comments on that hunk, linked issues, and related commits.
No tool currently offers this "full narrative" experience -- GitLens shows blame but not PR discussions, issues, or review comments stitched together.

Features
- Git blame -- see who changed the line, when, and what the commit message was, with diff stats
- Pull request -- the PR that introduced the change, with title, description, and merge date
- Review comments -- inline review comments from the PR that are relevant to the blamed file and line range
- Linked issues -- cross-referenced issues connected to the PR
- Related commits -- recent commits that touched the same file
- Chronological timeline -- everything sorted by date with colored event types
Usage
- Open any file in a git repository
- Click on a line
- The Changeset Narrator sidebar shows the full narrative for that line
GitHub data (PRs, review comments, linked issues) requires signing in to GitHub when prompted. Local git data (blame, commit, related commits) always works without authentication.
Commands
- Changeset Narrator: Refresh -- clears the cache and re-fetches data for the current line
- Changeset Narrator: Sign in to GitHub -- authenticate with GitHub for PR and review data
Requirements
- A git repository with a GitHub remote (for full GitHub integration)
- VS Code 1.85.0 or later
How It Works
When you click on a line, the extension:
- Runs
git blame to find the commit that last changed the line
- Fetches commit details and diff stats from local git
- Queries the GitHub API for the associated pull request
- Fetches review comments and linked issues from that PR (in parallel)
- Finds other recent commits on the same file
- Merges everything into a chronological timeline
GitHub API responses are cached for 5 minutes to stay well within rate limits. All GitHub calls degrade gracefully -- if auth is unavailable or API calls fail, the timeline still shows local git data.