Skip to content

Pane input can be accepted without executing in a fresh --no-focus workspace after restore #2449

Description

@mattleong

Is this a reproducible bug?

  • I confirm this is a reproducible bug, not a feature request, idea, question, contribution proposal, or direction check.
  • I reproduced this bug on the version and environment reported below using the exact steps provided.

Current behavior

After restarting Herdr and restoring my existing default session, a fresh workspace created with --no-focus can have a running zsh child but no readable terminal output. pane run, pane send-text, and pane send-keys return success, but the submitted command does not execute; pane wait-output times out and pane read remains empty.

I reproduced this on three consecutive disposable workspaces. It is stateful/intermittent: after activating a disposable workspace, later fresh-workspace probes sometimes succeed. The server log contained no error for the failed input calls.

Expected behavior

A pane returned by workspace create should execute accepted input independently of whether its workspace has been focused. Otherwise the input call should return a structured not-ready or delivery error rather than success.

Reproduction

  1. Restart Herdr with its client attached and allow an existing multi-workspace default session to restore.
  2. From another terminal, run:
created=$(herdr workspace create --cwd "$PWD" --label input-repro --no-focus)
pane=$(printf '%s' "$created" | jq -r '.result.root_pane.pane_id')
workspace=$(printf '%s' "$created" | jq -r '.result.workspace.workspace_id')
trap 'herdr workspace close "$workspace" >/dev/null' EXIT

sleep 1.5
herdr pane run "$pane" "printf '%s%s\\n' HERDR_ EXECUTED"
herdr pane wait-output "$pane" \
  --match HERDR_EXECUTED --source recent-unwrapped --lines 40 --timeout 5000
herdr pane read "$pane" --source recent-unwrapped --lines 40

Observed on failure:

pane run: exit 0, no stdout or stderr
pane wait-output: {"error":{"code":"timeout","message":"timed out waiting for output match"},...}
pane read: exit 0, empty output

The split marker ensures the echoed command cannot satisfy the match; only executed output contains HERDR_EXECUTED.

Impact

Background automation cannot rely on successful pane input. My subagent launcher must causally attest a sterile environment before starting a model, so every affected launch times out, rolls back its workspace, and never starts the agent.

Environment

  • Herdr version: 0.8.0 (protocol 19)
  • Update channel (stable or preview): stable
  • Operating system: macOS 26.6, arm64
  • Terminal: Ghostty 1.3.1
  • Shell, if relevant: zsh
  • Relevant config, if any: default persistent session with restore enabled; approximately 11 workspaces / 27 panes when first reproduced

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions