Skip to content

provider: claude-terminal が Claude Code v2.1.x のプロンプト UI と非互換でタイムアウト #765

@hiranorrr

Description

@hiranorrr

概要

provider: claude-terminal が Claude Code v2.1.x で常に Timed out waiting for Claude terminal input prompt. で失敗する。tmux backend のプロンプト検出正規表現が、v2.1 で導入された「 の後ろにプレースホルダ文字列が並ぶ表記」と非互換になっている。

再現手順

# Claude Code v2.1.153, tmux 3.6b, takt 0.42.0
mkdir /tmp/takt-test && cd /tmp/takt-test && git init
TAKT_VERBOSE=true takt --pipeline -t "echo hello" -w default

出力(実測):

[INFO] [1/30] plan (planner)
[INFO] Provider: claude-terminal
Status: error
[ERROR] Error: Timed out waiting for Claude terminal input prompt.
[ERROR] Workflow aborted after 1 iterations (1m 0s): Step "plan" failed: ...

原因

src/infra/claude-terminal/tmux-backend.ts:17

const CLAUDE_PROMPT_PATTERN = /^[>]$/;

isClaudeInputReady は pane 末尾3行を .trim() し、いずれかが上記正規表現に完全一致するかを見る。

しかし Claude Code v2.1.153 が tmux 内で表示する入力欄は以下のとおり(実 pane の hex dump で確認):

────────────────────────────────────────────────────────────────────────────────
❯ Try "fix typecheck errors"          ← 末尾3行のうちの1行
────────────────────────────────────────────────────────────────────────────────
  ⏵⏵ auto mode on (shift+tab to cycle) · ← for agents        ◉ xhigh · /effort
  • バイト列: e2 9d af c2 a0 54 72 79 20 22 ... + NBSP + プレースホルダ)
  • String.trim() は NBSP を除去するが、文字列内部は残るため ^[❯❱>]$ には一致しない
  • 結果として waitForClaudeInputReady が 60s 待って throw する

v2.0 系では だけの行が出ていた(unit test もそれを前提)が、v2.1 でプロンプト UI が変更されたのが背景。

修正案

^[❯❱>]$ を「//> で始まり、その後ろが空白 or 行末」に緩和する:

const CLAUDE_PROMPT_PATTERN = /^[>](?:\s|$)/;

Node 検証:

$ node -e "const p=/^[❯❱>](?:\\s|\$)/; ['❯ Try \"x\"', '❯', '>'].forEach(s=>console.log(s,'=>',p.test(s)))"
❯ Try "x" => true
❯       => true
>       => true
  • BUSY pattern (Running|thinking|...) は別判定なので、プレースホルダで誤検出はしない("Try" は busy 語彙に含まれない)。
  • 信頼ダイアログ ❯ 1. Yes, I trust this folder も該当行が末尾3行に含まれる場合は誤って ready と判定され得るため、初回未信頼ディレクトリでは別途警告/事前信頼が必要。これは本 issue の範囲外。

環境

  • takt 0.42.0 (pnpm global install)
  • Claude Code 2.1.153
  • tmux 3.6b
  • macOS Darwin 25.3.0

テスト

src/__tests__/claude-terminal-tmux-backend.test.ts の固定文字列('❯', '❯\n? for shortcuts' など)は引き続き通る。プレースホルダ付き表記 '❯ Try "..."' をカバーするケースを追加すると将来の回帰を防げる。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions