log, prs, history

The graph, the lists, and the lookups are drawn inside the transcript. Three of them you can walk with the arrows.

log

log draws the commit graph in the transcript: colored lanes with curves where branches fork and join, a dot per commit (a ring for merges), branch and tag chips, subject, author, age, sha, every row numbered.

  • All branches are walked, the default first, up to 12 heads; the footer says how many were left out
  • 40 rows by default, up to 200
  • A log filtered by since or by is drawn flat, without lanes, since its rows are no longer a contiguous walk; explain 2..5 then asks for one row at a time

prs, history, branches, tags

commandshows
prsopen pull requests, most recently updated first (30): number, title, head → base, author, age, and draft, merged, or closed where it applies
history <path>the commits touching a file or directory (30 rows, no lanes)
branchesbranches numbered with ahead/behind against the default, the web cousin of wh ls
tagstags newest first, with sha and age

branches and tags are plain listings. log, prs, and history are blocks you can walk.

walking a block

  • Arrows move; marks the row
  • enter opens a commit or pr in place: sha, parents, author, message, files with their +/−, and explain, changelog, describe, github ↗ actions; hovering a file offers explain, history, and copy
  • esc steps back out
  • A command launched from an open panel leaves it open, so the answer still shows where it came from; /clear closes them all
  • Click a sha to copy it; hover an age for the absolute date
  • Drag a row onto a branch in a branches listing to start a cherry-pick, or into an open plan to add it; see rebase and cherry-pick

who, churn, activity, stale

Lookups, not model calls: no key needed. The first three render as stat blocks (bars in the accent color, section labels in amber, one screenful) and flatten to text for /copy and /export; there is nothing to walk.

commandshows
who <path>the authors of a file or directory from its last 100 commits, recent work weighing more (half-life six months): commit counts, shares as bars, and when each person last touched it
churn, hotspotsthe files changing most, commit counts per path with their +/−, over a window (since <period or ref>, on <branch>, in <path>); the newest 50 commits, merges skipped
activitya year of weekly commits as a sparkline, then top authors and languages; since <period> cuts the window
stalebranches with no commits in 8 weeks (stale 12w, stale since 2026-06-01), oldest first, with ahead/behind

cold repos

github computes activity stats lazily. On a cold repo the answer is counted from the commit list instead (the latest 300, a footer says so) rather than making you wait.

view and ls

view src/git.rs # numbered lines, 24 rows visible, scrolls inside view src/git.rs:42 # scrolled to line 42, marked cat src/git.rs # same thing ls # the root, dirs first with sizes ls src on dev # a directory on a branch
  • Syntax highlighting maps highlight.js tokens onto the palette (comments muted, strings green, keywords violet, numbers orange, names accent, types teal); the highlighter loads lazily and only for known extensions
  • Clicking a line number prefills why <path>:<line>; shift+click a second number to span (why <path>:<from>-<to>). A span blames every line and merges the commits behind it (the 5 newest when there are more)
  • Files are fetched lazily (the transcript stores only the address) and capped at 500k or 5000 lines with a note; binaries and directories are refused with a pointer to the right command
  • on <branch> works on both
search $
↑↓ navigate · enter open · esc close