gitview
Which branches are finished, and which only look like it
One table: worktree, uncommitted changes, branch, open pull request, ahead, behind, unpushed, and whether the branch can go. The last column is the hard one. A branch merged by squash stays ahead of the trunk forever while contributing nothing, so gitview works it out by test-merging, and by finding the squash commit, rather than by reading a number that has stopped meaning anything.
Install gitview
Add the DBHQ marketplace, once
/plugin marketplace add dbhq-uk/marketplaceInstall the skill
/plugin install gitview@dbhq
Both commands work in Claude Code and in Codex. The marketplace is a public repository you can read first: dbhq-uk/marketplace (external site)
What it is good at
Answering the question a commit count cannot
A branch merged by squash stays ahead of the trunk forever while contributing nothing, so its commit count says nothing and git branch --merged never sees it. Where a repository permits nothing but squash, and many do, that check is not unreliable - it is always wrong. gitview test-merges the trunk into each branch with git merge-tree and compares the trees. If the trunk has since edited the same lines, it finds the squash commit by its patch id. Every YES in the table names its proof.
Working it out without touching your checkout
On git 2.38 or later the check is git merge-tree, which computes the merge in the object store with no worktree, no hooks and no commit, and ignores your signing and fast-forward settings, any of which can make a real merge report a finished branch as unfinished. Older git falls back to a real merge in a temporary worktree with hooks and signing switched off, and removes only that worktree.
Flagging the work that exists on one machine
A branch is at risk when it has not landed and some of it exists nowhere but here: its upstream was deleted, no remote holds it, or it has commits not yet pushed. The survey names those first, in a note under the table, and prints the exact push command where a push is safe. A landed branch is never on that list, because its content is already on the trunk.
Refusing to delete anything it cannot re-verify
A table is a snapshot, and a repository worked by several sessions moves underneath it. So each branch is re-checked in code just before it goes, and refused, with the reason printed, if it is the trunk, has unlanded work on it or on its remote copy, is checked out in a worktree or has an open pull request. Both SHAs are printed first so a wrong call can be undone, and the remote delete is leased to the SHA it checked.
Showing the work the branch columns cannot see
The uncommitted column counts changes and untracked files in every worktree, and a finished branch whose worktree is dirty, locked or missing is never a YES. When a clean, unlocked worktree is all that stands in the way, it offers git worktree remove, never with --force, and lists any ignored files that would go with it, such as a local .env.
What it does not do
It does not delete anything
The agent does, in your session, where you can see the commands and your own tool permissions apply. That goes for a worktree it offers to remove as much as for a branch. The skill's job is to make a destructive suggestion and gate it; a skill is instructions, not a sandbox. If you do not want an agent proposing branch deletions at all, do not install this one.
Pull requests need gh or the Azure CLI, on two hosts only
It shells out to gh on github.com and the Azure CLI on Azure DevOps, using whatever credential those already hold. It never handles a token itself and makes no HTTP request of its own. On any other host, GitHub Enterprise and SSH host aliases included, or when the lookup cannot run, the column shows dashes and --verify refuses every delete until you re-run it with --no-pr, which skips the open pull request check.
It never fetches
The unpushed column is only as fresh as the remote-tracking refs, so a note under the table says when this clone last fetched, and the agent is told to offer git fetch --prune before anyone relies on it. There is no server, no index and no cache, and nothing is remembered between runs. On git 2.38 or later the one thing it writes is unreferenced merge objects, which git gc clears.
Read it before you install it
Every line is public and MIT licensed. The README is the long version of this page, including the parts that are still rough.