Conversation
Claude's classic renderer opens its completion menu for a typed /exit or /<skill> below the composer, sized to about half the pane. On a pane taller than about 35 rows, the composer row, its bottom border, and that menu fill the payload proof's 20-row tail, so the tail starts at the composer row without its top border and the selector refuses it. Every fm-control exit of such a Claude on Herdr then failed with "the exit command could not be sent", idle or busy, and a typed slash command sent through fm-send was reported as never sent. The fullscreen renderer draws the menu above the composer, which is why it never showed up there. When the post-typing read selects no composer, the proof now reads once more at the pane's visible height. The common path keeps its existing calls, the wider read stays on the visible screen, and the selector still takes the bottom-most composer. A fixture of the live shape pins the widened proof and the unchanged refusal without a viewport height, and an opt-in live guard forces the classic renderer in an isolated Herdr lab and requires idle and busy exits to stop.
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
Follow-up to data/fm-remote-secondmate-exit-herdr-20260925/report.md (read it first). That scout found bluefin Claude vim editor mode breaks the exit path. On 2026-09-25 ~14:55 local the captain approved turning vim off: bluefin ~/.claude/settings.json and ~/.claude.json now have editorMode "normal" (backups *.bak-20260925-vim). Lighthouse's footer no longer shows -- INSERT -- (live reload), it reported 'nothing in flight, going idle', yet
FM_HOME=~/firstmate bin/fm-on.sh lighthouse fm-remote-secondmate-control.sh relaunch lighthouse claude claude-opus-5-5 mediumSTILL fails with 'the exit command could not be sent to task lighthouse on herdr' (three more attempts ~13:50-14:05Z UTC). This matches the first report's 'unresolved uncertainty' (idle lighthouse attempts failing). Find the real remaining cause and a safe way to restart lighthouse and bluefin now.Substance of the referenced report (data/fm-remote-secondmate-exit-herdr-20260925/report.md): restarting the two remote second mates on bluefin, lighthouse and bluefin, which are Claude Code agents running on the Herdr backend, fails at the exit step with "the exit command could not be sent to task on herdr", after which the relaunch rolls back and leaves the old agent running. That report found that in Claude's vim editor mode the exit path's interrupt key, Escape, only switches the composer to vim NORMAL mode, so the typed /exit command is garbled and the Herdr submit core's Claude-only payload proof, which reads the composer back before pressing Enter, refuses it. Its unresolved uncertainty: three lighthouse attempts also failed while the mate had been idle for 30 seconds or more, and no Escape is sent to an idle agent; the report could not reproduce or explain those idle failures.
What Changed
/exit.Risk Assessment
✅ Low: The viewport fallback is confined to failed Claude payload proofs and preserves refusal when the composer cannot be verified.
Testing
Targeted backend tests passed. The live lab reproduced the short-read blind spot, then confirmed idle and busy Claude exits through the control plane. The first live attempt stopped at a Claude trust prompt; after a test-fixture fix, the retry passed. The live transcript is saved as evidence. Production mates were not touched, and the referenced report was unavailable in this worktree.
/exit, the widened read found it, andfm-control exitreported stoppedfm-control exitreported stoppedEvidence: Live Claude slash-menu and control-plane exit transcript
Source: Live Claude slash-menu and control-plane exit transcript
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
✅ **Review** - passed
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
/exit, the widened read found it, andfm-control exitreported stoppedfm-control exitreported stoppedtests/fm-backend-herdr.test.shFM_HERDR_SLASH_MENU_LIVE=1 tests/fm-herdr-claude-slash-menu-live-e2e.test.shin a named, torn-down Herdr labRetried the live test after fixing its lab-only Claude external-import prompt handling; removed transient worktree test data✅ **Document** - passed
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ **Push** - passed
✅ No issues found.