panes create --initial-input-file / --prompt pastes into the Claude composer but never submits
Summary
When creating a Claude-agent pane with initial input, the text is pasted into the
Claude Code composer but Enter is never sent. The panel reports ready and then sits
idle indefinitely with the prompt staged in the composer. An orchestrating agent that
trusts --wait-ready + initial input will believe work has started when nothing is
running.
Environment
- RunPane wrapper:
2.4.5 (npm, node runtime, linux x64)
- Pane app:
2.4.5 (packaged, Electron 37.6.0, node 22.19.0)
- Agent:
claude → claude --dangerously-skip-permissions (Claude Code 2.1.197)
- Transport: unix socket daemon
Exact command
runpane panes create --repo my-app \
--name "pr-1234-review" \
--agent claude \
--source agent --no-focus \
--initial-input-file /tmp/prompt-pr-1234.txt \
--wait-ready --ready-timeout-ms 60000 \
--yes --json
(/tmp/prompt-pr-1234.txt was a ~15-line multi-line review prompt. Reproduced
identically across 11 panes created sequentially this way.)
Expected behavior
Initial input is delivered to the agent CLI and submitted, so the agent starts
working — or, if auto-submit is intentionally not performed, the JSON result should
say so (e.g. initialInput: "staged") and nextCommand should point at
panels submit-composer.
Actual behavior
-
Creation JSON: readiness.matched: true, state.isCliReady: true,
activityStatus: "active" at creation, then the panel goes idle.
-
panels output / panels screen show only the shell launch line — no agent
activity. lastActivity stays frozen at the creation timestamp.
-
The prompt text was in fact sitting in the Claude composer: running
runpane panels submit-composer --panel <panel-id> --strategy auto --yes --json
returned {"inputBytes": 1, "strategy": "enter", "sequenceName": "enter-cr", "verifiedSubmitted": true} and the agent immediately started working.
This was required on all 11 panes; all fixed by a single Enter.
Observed JSON (creation, trimmed)
{
"ok": true,
"readiness": {
"ok": true,
"condition": "ready",
"matched": true,
"elapsedMs": 501,
"state": {
"initialized": true,
"activityStatus": "active",
"isCliReady": true,
"isCliPanel": true,
"agentType": "claude"
}
}
}
Minutes later, panels wait --for idle matched instantly with lastActivity
unchanged from creation time — i.e. the agent never received a submitted prompt.
Root-cause hypothesis
Initial input is written to the PTY as plain text (paste) with no trailing submit
sequence, or the paste lands as a bracketed paste that Claude Code's composer holds
for confirmation. Since submit-composer --strategy auto resolves to a bare
enter-cr and verifies success, the missing piece is just the submit keypress after
the initial-input paste — likely a race: input may be sent before the TUI composer is
ready to treat Enter as submit, or the submit was never wired for the initial-input
path.
Suggested next steps
- After delivering initial input to a CLI panel, run the same verified-submit logic
as panels submit-composer --strategy auto (it already exists and works).
- Surface the result in the creation JSON, e.g.
initialInput: {delivered: true, submitted: true|false}.
- If auto-submit is deliberately withheld, document it and emit a
nextCommand
of panels submit-composer ... so orchestrating agents don't stall.
Impact
Any agent-driven fan-out (create N background panes with prompts, wait for results)
silently deadlocks: every pane looks "ready" and "idle", and no work ever starts
until something presses Enter. Workaround for orchestrators today: always follow
panes create --initial-input-file with panels submit-composer --strategy auto and
check verifiedSubmitted: true.
panes create --initial-input-file/--promptpastes into the Claude composer but never submitsSummary
When creating a Claude-agent pane with initial input, the text is pasted into the
Claude Code composer but Enter is never sent. The panel reports ready and then sits
idle indefinitely with the prompt staged in the composer. An orchestrating agent that
trusts
--wait-ready+ initial input will believe work has started when nothing isrunning.
Environment
2.4.5(npm, node runtime, linux x64)2.4.5(packaged, Electron 37.6.0, node 22.19.0)claude→claude --dangerously-skip-permissions(Claude Code 2.1.197)Exact command
runpane panes create --repo my-app \ --name "pr-1234-review" \ --agent claude \ --source agent --no-focus \ --initial-input-file /tmp/prompt-pr-1234.txt \ --wait-ready --ready-timeout-ms 60000 \ --yes --json(
/tmp/prompt-pr-1234.txtwas a ~15-line multi-line review prompt. Reproducedidentically across 11 panes created sequentially this way.)
Expected behavior
Initial input is delivered to the agent CLI and submitted, so the agent starts
working — or, if auto-submit is intentionally not performed, the JSON result should
say so (e.g.
initialInput: "staged") andnextCommandshould point atpanels submit-composer.Actual behavior
Creation JSON:
readiness.matched: true,state.isCliReady: true,activityStatus: "active"at creation, then the panel goesidle.panels output/panels screenshow only the shell launch line — no agentactivity.
lastActivitystays frozen at the creation timestamp.The prompt text was in fact sitting in the Claude composer: running
returned
{"inputBytes": 1, "strategy": "enter", "sequenceName": "enter-cr", "verifiedSubmitted": true}and the agent immediately started working.This was required on all 11 panes; all fixed by a single Enter.
Observed JSON (creation, trimmed)
{ "ok": true, "readiness": { "ok": true, "condition": "ready", "matched": true, "elapsedMs": 501, "state": { "initialized": true, "activityStatus": "active", "isCliReady": true, "isCliPanel": true, "agentType": "claude" } } }Minutes later,
panels wait --for idlematched instantly withlastActivityunchanged from creation time — i.e. the agent never received a submitted prompt.
Root-cause hypothesis
Initial input is written to the PTY as plain text (paste) with no trailing submit
sequence, or the paste lands as a bracketed paste that Claude Code's composer holds
for confirmation. Since
submit-composer --strategy autoresolves to a bareenter-crand verifies success, the missing piece is just the submit keypress afterthe initial-input paste — likely a race: input may be sent before the TUI composer is
ready to treat Enter as submit, or the submit was never wired for the initial-input
path.
Suggested next steps
as
panels submit-composer --strategy auto(it already exists and works).initialInput: {delivered: true, submitted: true|false}.nextCommandof
panels submit-composer ...so orchestrating agents don't stall.Impact
Any agent-driven fan-out (create N background panes with prompts, wait for results)
silently deadlocks: every pane looks "ready" and "idle", and no work ever starts
until something presses Enter. Workaround for orchestrators today: always follow
panes create --initial-input-filewithpanels submit-composer --strategy autoandcheck
verifiedSubmitted: true.