Repository navigation
feat: bind your own shell commands to keys on each screen - #39
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Use CmdLine directly to avoid Go's exec escaping, which cmd.exe doesn't understand. Build the command line ourselves with proper cmd quoting rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Logs, PullRequestDetail, and Item now properly handle StatusMsg with error colour: - Logs adds the StatusMsg case to record status and failed state - PullRequestDetail and Item track errStatus separately from failed, so error colour follows the status message without claiming the discussion failed - All three views return the error flag from Status() when displaying an error status message Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
…for real Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
A pipe's read end died with boardwalk, so a running command got SIGPIPE on its next write, and a backgrounded child held Wait open. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq
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.
What
The config gains a
commandslist. Each entry binds a single key, on a kind of screen (pullRequest,workItemorbuild), to a shell command of your own:On that screen, pressing the key runs the command detached, with what the screen shows passed in
BOARDWALK_*environment variables (ID,TITLE,URL,REPO,SOURCE_BRANCH, …). The status line reportsran,failed: <last stderr line>, orstartedif it is still going after two seconds. Commands show in the?panel and the command palette.The motivating example (in the README): on a pull request,
ctrl+ropens a herdr tab in the current workspace and starts a Claude Code review of that PR.How
config:Command, the three kinds,ValidateCommands.ui/custom.go: the runner. It usessh -c(cmd /S /Con Windows) in its own process group. stdin is/dev/nulland stdout is dropped. stderr goes to an unlinked temp file rather than a pipe, so a command outlives boardwalk without dying of SIGPIPE, and a backgrounded child cannot hold up the result.ui/subject.go: eight views gainSubject(): the PR list, detail, diff and file views; the work item list and item; the build list and logs.ui/rootcommands.go: Root matches the key after the prompt, filter and armed-vote guards. A screen's own key always wins. The result goes to the view the command ran on, wherever it now sits in the stack. Startup refuses keys that cannot work: unparseable, reserved, list or viewport movement, ones every screen uses, and the palette key.StatusMsgerror in red without marking the discussion as failed to load.Values reach commands only as environment variables, never spliced into the command string, so a PR title full of shell syntax stays a title.
Design:
docs/superpowers/specs/2026-10-06-custom-commands-design.md. Plan:docs/superpowers/plans/2026-10-06-custom-commands.md.Testing
go test ./...,go vet ./...andGOOS=windows go build ./...all pass.sh. Tests cover the environment, failure output, a 10,000-line stderr flood, detaching from a long command, a background child holding stderr, and shell syntax in a value staying inert.qexits at once with an error naming the file.🤖 Generated with Claude Code
https://claude.ai/code/session_01Jn8iZy7cV652kj9axpyrUq