Repository navigation
Conversation
… body as arguments `todo context <id>` read its body from stdin and only refused a tty. Called inline by an agent with the text as an argument, stdin is the tool harness's socket, which never closes: io.ReadAll blocked forever and the text was dropped. Observed 2026-10-15 as a devbrain process stuck for ~4h on a unix socket stdin, task file never written. Trailing arguments after the id are now the body; with none, stdin must be a pipe or file — a tty or a socket is refused up front with the existing hint. The skills' heredoc form is unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Why
devbrain todo context <id>reads the body from stdin and only refuses a tty. When an agent calls it inline with the text as an argument —devbrain todo context 0115-… "…notes…"— stdin is the tool harness's socket, which never closes, soio.ReadAllblocks forever and the text is silently dropped.Observed on 2026-10-15: a
devbrain todo contextprocess spawned from a Claude Code session sat for 3h50m (STAT S, stdin = unix socket, no children) until killed; the task file was never written.What
/continueand/workheredoc form (devbrain todo context "$id" <<'CTX') is unchanged and still works.How verified
TestContextBodyFromArgsandTestContextRefusesSocketStdin(socketpair as stdin, 2s watchdog). Both failed before the fix (exit 1 "needs the body on stdin"; watchdog timeout) and pass after.go test -race -count=10 ./internal/todo -run TestContext(the new test uses a goroutine), andmake test(vet, full suite, dashboard node checks) are green.🤖 Generated with Claude Code