PullPulse

Which one needs a human?

Review attention is the scarce resource now. PullPulse ranks the queue for it instead of filtering it, and gives agent-opened pull requests their own policy.

Your agents opened eleven pull requests this morning. Two colleagues opened three more. The channel that was supposed to tell you which one to look at first has fourteen posts about them, five about the same one, and nothing about which of them can wait.

That is the problem PullPulse exists for, and this post is the shape of the answer.

Ranking, not filtering

Every pull request notifier filters. Labels, paths, authors, a keyword in the title. Filtering answers "should this be in the channel at all", which is a question about the channel. The question a reviewer has is about themselves: how much of my attention does this need, and is there anything I must know before I approve?

So PullPulse rates review effort instead. Four tiers, trivial to high, from the shape of the change alone: which files, what kind, how many reviewable lines. A 900-line lockfile bump is trivial. A six-line change spread across three services is not. Beside the tier, an estimate in minutes, and the handful of flags a reviewer must know before approving: a migration, no tests, a credential in an added line, the team's own sensitive areas.

The rating is deterministic. No model, no history, no guesses about what your directories mean, and the Explain button on every card shows which rule fired. A model may propose extra flags, shown as suggested with a sentence each. It may never set the tier.

One message, edited in place

A pull request gets one Slack message. Every later event, a check finishing, a review landing, a push, edits that message. Nothing is re-sent. The message carries a rail with four stops, Ready, Checks, Review, Merge, and one event moves one glyph:

●●○○  Needs a reviewer · ▮▮▮▮ high · ~45 min · migration, no tests
●●◔○  Lee is reviewing
●●●○  Ready to merge
●●●●  Merged · sam · 2h 22m from ready to merged

When it merges, the message folds to that last line and the channel gets its space back. At fifty a day, the channel can keep one board instead, a table edited in place, and the asks move to direct messages.

Agents are a different class of object

Pull requests opened by agent accounts are detected from the account, a bot actor type plus a registry of known agent logins, and never from commit trailers or branch names. A person using an AI editor is a person, and guessing otherwise only demotes their work.

An agent's pull request is held until it is ready and CI is green, collapsed into one rollup per repository, and escalated to a human only when the review effort earns it. The morning's eleven become one line until one of them is worth someone's time.

Agents are users too

The same review state the card shows is exposed over MCP, so Claude Code or Cursor can ask what is blocking and who knows the code, instead of guessing from a diff:

> what's blocking my PRs, and who should I ask?

pullpulse · list_review_queue (author: you)
  #4127  Split ledger writes out of the actor
         ●●◔○  Lee is reviewing · 2 of 2 approvals needed

Eight tools, all but one read-only. Tokens are minted per person from Slack.

What it costs a team

Routing, the message, reminders, escalation and digests run on every plan, including the free one. What a plan decides is model spend, MCP, and how many repositories and linked reviewers a workspace may hold. A workspace that stops paying gets a quieter product, never a broken one.

Add it to Slack, choose the repositories, and the first card posts when the next pull request is ready and green. There is a fourteen-day trial with no card, and it becomes the free tier on its own.

This post is also served as markdown: ask for it with Accept: text/markdown or open /blog/which-one-needs-a-human.md.