This is a pull request on GitHub.
Ten files, A to Z, and five threads. Where would you start?
Scroll, and Bobby takes it over, one piece at a time. Same PR, same threads, same review at the end.
Know where you are.
OutFour rows of repo and PR navigation.
InOne bar: where you are in the PR, how far you've got, and the view you're reading in.
The files that matter, placed.
OutThe file tree, A to Z.
InEach file tagged by where it sits: L-1 what the change relies on, L0 the change, L1 what it affects. Tests and generated files stay hidden until you ask.
From a list to a map.
OutEvery diff, stacked top to bottom.
InBobby's Diff view lays the same diffs out on one canvas, each file right of the files it relies on, so you see the shape of the change before you read a line.
The diff you know, in order.
OutThe whole map at once.
InStep in and one file fills the view: the same diff and threads as GitHub. j k follow the map, from what a change relies on to what it affects.
What is this?
OutA new tab, to find where it's declared.
In⌘-click a name: its declaration opens over the diff, the whole of it, and esc puts you back where you were.
Who else calls it?
OutSearching the repo for its callers.
In⌘⇧-click: every use, in the diff, in the PR's files and elsewhere. Open one to read it in place, or go to it in the diff. One caller the PR never touched still passes no key.
One change. One question.
OutThe whole diff at once.
InThe Lens view splits the PR into cores, one idea each, and opens each with a question to keep in mind. With Claude Code installed, Claude names the cores and writes the questions.
What it relies on. What it affects.
OutSearching the repo for who calls it.
InThe code around the change, and how each piece connects, including code the PR never touched. That's where bugs hide.
Comments where they belong.
OutA count of conversations, somewhere below.
InEvery GitHub thread under its line. Your comments wait as drafts; private notes never leave your machine.
Walk it, mark it, move on.
Out"Viewed" checkboxes, file by file.
Inj k walk the PR in order; a marks a page looked at and moves on. Marks follow the code, so after a force-push only what changed comes back.
Park the thought.
OutLosing your place to a ping.
Inp parks what's in your head before you switch away. It waits for you in the bar.
Pick up where you left off.
OutScrolling around for where you were.
InWhere you were, how far you got, and the thought you parked. Progress survives restarts and force-pushes.
Ask about any lines.
OutPinging the author: "who else calls this?"
InSelect some lines, press q, and ask. Claude checks the code around them, and answers right there, on those lines. Ask a follow-up, or start a comment from the answer.
Every claim, one click away.
OutTaking an answer on trust.
InEach reference Claude makes is checked against the code and opens it: the lines it means, and what the PR changed in them, highlighted.
A second pair of eyes, when you ask.
OutHoping you caught everything.
InTell Claude what to look for, and which of your tools it may read: the ticket in Linear, the doc in Notion, the thread in Slack. It reads the PR file by file, the way you would.
One finding at a time.
OutA wall of AI comments to wade through.
InThe worst first, each with its code. a adds it to your review, e edits it first, d dismisses it. Nothing is posted unless you add it and submit.
One review, one key.
Out"Review changes", at the end of a long page.
Ins posts every draft as one GitHub review: comment, approve or request changes. Private notes stay on your machine.
Approved, on GitHub.
OutSwitching to the browser to check it landed.
InThe Conversation view is GitHub's own timeline, read live: your approval is already in it, LGTM! and all, next to everyone else's.
Review it with Bobby.
curl -fsSL https://raw.githubusercontent.com/angrybayblade/focus-bobby/main/install.sh | bashThen bobby <pr-url>, or just bobby to pick one. Needs git; Bobby sets up gh. Claude Code is optional: it brings the questions and the reviews.