Current behavior
With the pi plugin, revdiff_review runs revdiff in-place: runDirectReview in plugins/pi/extensions/revdiff.ts does spawnSync(revdiffBin, ..., { stdio: "inherit" }), so pi is suspended inside the tool call while the user reviews. To anything supervising the agent from outside, the session looks busy rather than waiting on the user.
Concrete case: herdr gets omp/pi lifecycle state from its installed hook integration (which disables herdr's screen-scraping fallback for the pane). The integration reports working for the entire review, because a parked tool call is indistinguishable from active work. Result: no blocked state in the sidebar, no notification, and herdr agent wait <pane> --until blocked never fires — easy to miss that the agent is waiting.
The standalone launcher scripts already integrate with herdr for tab placement (the HERDR_ENV branch in launch-revdiff.sh), so herdr awareness exists in the project; only the pi in-place path lacks any state signal.
Expected behavior
While the revdiff UI owns the terminal, the supervising integration should see the session as blocked/waiting-for-user.
Reproduction
herdr integration install omp, start omp (TUI) inside a herdr pane.
/revdiff (or let the agent call revdiff_review).
- While the review UI is open:
herdr agent list → agent_status: working until revdiff exits.
Proposed fix
herdr's omp/pi integration listens on pi's shared extension event bus for a herdr:blocked channel. Emitting around the review run is enough:
pi.events.emit("herdr:blocked", { active: true, label: `revdiff review: ${launch.label}` });
try {
result = await runDirectReview(ctx, launch, cwd);
} finally {
pi.events.emit("herdr:blocked", { active: false });
}
EventBus.emit with no listener is a no-op, so this is free for non-herdr users and needs no HERDR_ENV gate. PR with this change: #319.
Environment
- revdiff-pi 0.4.1, omp 17.3.5, herdr 0.8.0 (omp integration v6), macOS arm64
(Disclosure: drafted by an AI coding agent on behalf of the human reporter, who reviewed and approved this text before it was posted.)
Current behavior
With the pi plugin,
revdiff_reviewruns revdiff in-place:runDirectReviewinplugins/pi/extensions/revdiff.tsdoesspawnSync(revdiffBin, ..., { stdio: "inherit" }), so pi is suspended inside the tool call while the user reviews. To anything supervising the agent from outside, the session looks busy rather than waiting on the user.Concrete case: herdr gets omp/pi lifecycle state from its installed hook integration (which disables herdr's screen-scraping fallback for the pane). The integration reports
workingfor the entire review, because a parked tool call is indistinguishable from active work. Result: noblockedstate in the sidebar, no notification, andherdr agent wait <pane> --until blockednever fires — easy to miss that the agent is waiting.The standalone launcher scripts already integrate with herdr for tab placement (the
HERDR_ENVbranch inlaunch-revdiff.sh), so herdr awareness exists in the project; only the pi in-place path lacks any state signal.Expected behavior
While the revdiff UI owns the terminal, the supervising integration should see the session as blocked/waiting-for-user.
Reproduction
herdr integration install omp, start omp (TUI) inside a herdr pane./revdiff(or let the agent callrevdiff_review).herdr agent list→agent_status: workinguntil revdiff exits.Proposed fix
herdr's omp/pi integration listens on pi's shared extension event bus for a
herdr:blockedchannel. Emitting around the review run is enough:EventBus.emitwith no listener is a no-op, so this is free for non-herdr users and needs noHERDR_ENVgate. PR with this change: #319.Environment
(Disclosure: drafted by an AI coding agent on behalf of the human reporter, who reviewed and approved this text before it was posted.)