Repository navigation
fix(prompt): read Claude's ticked choices and wrapped /model hint, answer Hermes, end shut-down teammates - #764
Merged
Merged
Conversation
…ed as running An agent-team teammate ends by answering its lead's shutdown_request with SendMessage(shutdown_response, approve: true); Claude Code's tool result says "Shutdown approved … is now exiting" and nothing follows. turnAfter took only an end_turn answer as the end, and the shutdown request after it reset that, so every shut-down teammate read as running forever: a live pane showed 12 background tasks with 1 background shell and no subagent alive. That approved answer now ends the agent's turn; any later message still resumes it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Text already on the clarify dialog's `>` line (typed in the terminal, or a typed answer Tab brought back) joined the answer sent from the chat. The line is emptied first with its TextInput's ctrl+k and ctrl+u, as pi's dialog is, for an open question and for the Other row. Also drops currentPrompt, an export nothing called.
…ped /model hint Claude Code 2.1.296 draws a ticked multiple-choice row as [✔]. The reader only took [✓], so a ticked question became a single choice whose labels kept the box, and a pick there toggled the row instead of answering (#752). With the cursor on the unnumbered Submit row no row was selected and the card went away; the moves now count Submit as the row it is, before "Chat about this". The /model list's hint is read with its spaces taken out over up to sixteen lines, so a hint cut inside a word or wrapped over seven lines still holds pending delivery and still reads as a card. The run of lines must begin with the hint, so the same words quoted in Claude's output (after a ⏺ bullet) hold nothing. parseClaudeModel and promptTailIsActive read the hint the same way as the guard (#542).
# Conflicts: # CHANGELOG.md
This was referenced Oct 11, 2026
DarkoKuzmanovic
added a commit
to DarkoKuzmanovic/herdr-web-ui
that referenced
this pull request
Oct 12, 2026
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.
Change
Fixes four things reported against 0.4.6, all in the prompt reader and the Claude background-task reader.
[✔]; the reader only took[✓], so once a row was ticked the card became a single choice, its labels kept the box, and a pick sent Enter on a multi-select row, which unticks it.[✔]is now a tick. With the cursor on the unnumbered Submit row the card no longer disappears: the moves count Submit as a row between "Type something" and "Chat about this", so ↑/↓ + Enter + → still land where they should./modelguard (Model-list guard: a hint split inside a word or over more than six lines is missed, and a quoted hint holds pending delivery #542).claudeModelListWaits()read the hint over six lines joined with spaces, so a hint cut inside a word (ses/sion) or wrapped over seven lines was missed and pending delivery could type Enter into the list. The hint is now read with spaces taken out over up to sixteen lines, and the run of lines that holds it must begin with it, so the same words quoted in Claude's output (⏺ Example: Enter to set as default …) no longer hold pending sends.parseClaudeModelandpromptTailIsActiveread the hint the same way, so the card and the guard agree.>line (typed in the terminal, or a typed answer Tab brought back) used to join the chat's answer, so the line is emptied first with ctrl+k / ctrl+u, which Hermes's TextInput takes on every platform (ui-tui/src/lib/platform.ts). An unusedcurrentPromptexport is dropped.Fixes #752
Fixes #542
Carries #744 and #750
Not changed: #542's gap 4 (a line under the hint that is not Claude's footer). The issue says no real layout is known to draw one, so it is left for a maintainer decision.
Verification
Claude's multiple choice ticked in the terminaltests (no card, single choice, Submit move missing) and the threeClaude Code's model list under a hint wrapped anywheretests (split word, seven lines, quoted hint). They pass after 999099b.HERDR_TEST_MODE=unit bun test ./server/prompt.test.ts ./server/hermes-prompt.test.ts ./server/claude-subagents.test.ts: 311 pass, 0 fail.bun run typecheck: passes.CHECK_MAX_RUNS=8 bun run check fullon ba61fd4 (after merging origin/main 5792d71): workflow syntax, generated types, typecheck, build, unit tests and the integration and browser lanes allok(252 browser PASS, 0 FAIL).Origin/main was merged in, not rebased (5792d71, #755); the only conflict was CHANGELOG.md.