From dbeb8d9fb2f8389eb860eb3b287eabfdfeacdfc2 Mon Sep 17 00:00:00 2001 From: prateek Date: Mon, 16 Feb 2026 20:31:07 +0530 Subject: [PATCH] fix: increase delays in spawn prompt submission to ensure Enter is processed (#62) Fixes issue where spawned sessions would send the prompt text but the Enter keystroke would not be submitted, requiring manual Enter press. Changes: - Increase delay after paste-buffer from 300ms to 1000ms in tmux.ts sendKeys() to ensure tmux processes the paste before receiving Enter keystroke - Add 100ms delay after Escape key to ensure it's processed before pasting - Increase spawn wait time from 1s to 2s before sending initial prompt to allow Claude to fully initialize (permission prompts, startup, etc.) These longer delays account for: 1. tmux paste buffer processing time 2. Claude permission prompt interactions 3. Agent initialization and readiness Closes: FIX-SPAWN-PROMPT-SUBMIT --- packages/cli/src/commands/spawn.ts | 4 +++- packages/core/src/tmux.ts | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/cli/src/commands/spawn.ts b/packages/cli/src/commands/spawn.ts index 93890fad6..db754d8d5 100644 --- a/packages/cli/src/commands/spawn.ts +++ b/packages/cli/src/commands/spawn.ts @@ -221,7 +221,9 @@ async function spawnSession( }); if (composedPrompt) { - await new Promise((resolve) => setTimeout(resolve, 1000)); + // Wait for agent to be fully ready (permission prompts, initialization, etc.) + // Longer delay ensures Claude is ready to receive input before sending prompt + await new Promise((resolve) => setTimeout(resolve, 2000)); await tmuxSendKeys(sessionName, composedPrompt); } diff --git a/packages/core/src/tmux.ts b/packages/core/src/tmux.ts index 565d1af27..be5da26f5 100644 --- a/packages/core/src/tmux.ts +++ b/packages/core/src/tmux.ts @@ -129,6 +129,8 @@ export async function sendKeys( ): Promise { // Clear any partial input first (matches bash reference scripts) await tmux("send-keys", "-t", sessionName, "Escape"); + // Small delay to ensure Escape is processed before pasting + await new Promise((resolve) => setTimeout(resolve, 100)); if (text.includes("\n") || text.length > 200) { // Use a named buffer to avoid global paste buffer race conditions @@ -158,9 +160,11 @@ export async function sendKeys( } if (pressEnter) { - // Small delay for paste to complete before sending Enter + // Delay for paste to complete before sending Enter + // Higher delay needed when using paste-buffer to ensure tmux processes the paste + // before receiving the Enter keystroke (especially with Claude permission prompts) if (text.includes("\n") || text.length > 200) { - await new Promise((resolve) => setTimeout(resolve, 300)); + await new Promise((resolve) => setTimeout(resolve, 1000)); } await tmux("send-keys", "-t", sessionName, "Enter"); }