You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
herdr-core: restarting an agent in a terminal that was pinned before Ovis restarted unpins it in the Herdr app #2707
On herdr-core, Ovis keeps pinned agents in step with the Herdr app through herdr.pinned (#2694), remembering in herdr-core-pins.json what both sides last agreed on per terminal. A terminal that stopped running an agent while Ovis was stopped keeps its agreement, so a later restart of the agent there is read as an unpin made in Ovis.
Steps (OVIS_RUNTIME=herdr-core):
Pin an agent (e.g. Claude Code) in the Herdr app or in Ovis; both sides agree it is pinned.
Quit the agent in that terminal, leaving its shell, and restart the Ovis server (an update, say).
In Ovis, pin another agent: the Agents list drops the shell's pin, as it holds agents only.
Start the agent again in that terminal.
Expected: the Herdr app keeps it pinned. Actual: Ovis writes herdr.pinned= (empty) and the Herdr app's pin is gone.
Cause: after a reconnect the bridge clears its set of agent terminals and reads the snapshot; a terminal that is no longer an agent never goes through the agent-to-shell transition, so its agreement is not dropped (server/herdr-core/pin-label.ts, agentIs). Reproduced by the review on fabe6f3 with the PR's fake hc.
Likely fix: while reading a snapshot, drop the agreement of every terminal whose status names no agent, and add a regression test for it.
Activity
fix(herdr-core): keep the Herdr app's pin when an agent restarts in a…