Repository navigation
Conversation
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.
Summary
Dispatch can encode
pane.send_keysinternally, but a user cannot bind that operation inconfig.json. This addsherdr.pane.sendKeyswith a required, orderedkeysarray and optionalpaneID. For example,{"id":"herdr.pane.sendKeys","arguments":{"keys":["ctrl+z"]}}now sends Ctrl+Z over Herdr's socket to the pane focused when the binding executes. SupplyingpaneIDtargets that pane without moving focus or requiring the terminal to be foreground.The implementation follows the existing provider path: register the action, decode its arguments, resolve omitted pane IDs from a fresh snapshot, and reuse the protocol-22 codec. Empty/malformed keys and empty explicit pane IDs fail before any input request; Herdr remains responsible for key-name validation. Focused key sequences are kept out of action-resolution logs. Documentation includes focused-pane and multi-pane macro examples, Herdr key syntax, and agent-specific suspension semantics.
This exposes configurable terminal input. It does not automatically discover or pause all agents; users can target known panes with ordered actions. No DispatchRuntime awaits or task behavior change, so the lifecycle specification remains unchanged.
Validation
scripts/check.shpassed withDISPATCH_BUILD_DIR=/private/tmp/dispatch-herdr-keys-build: build, parallel Swift tests, strict SwiftLint (zero violations), version checks, and both TLA+ configurations.Manual checks and environment: macOS 26.6.2, Herdr 0.9.3 / protocol 22, isolated named headless server with configuration/state under
/private/tmp. A temporary harness linked the built DispatchCore/DispatchProviders libraries and executed the registered action. Focused-pane Ctrl+Z suspended a disposablesleep 60; after shellfg, explicit-pane Ctrl+C interrupted it. The test server was stopped afterward. A terminal app and device firmware are not applicable to this socket check.Checks not run / residual risks: No live Claude Code or other agent CLI suspension tests; the live check used a shell process. Individual programs decide what a key means, and suspension of all background/child work is not guaranteed. Multi-pane macros use live IDs scoped to Herdr's currently selected machine and stop at the first action error.