Skip to content

Kiro Chat 终端命令卡在 Working 状态不结束的解决方法

问题

在 Kiro Chat 中让 AI 执行终端命令时,命令已经在终端中完成,但 Chat 界面一直显示"Working...",不继续后续步骤。常见症状:

  • 第二次在同一终端执行命令时必然卡住
  • npm run devgit log、Python 脚本等长时间运行的命令卡死
  • 终端 tab 旁出现红色图标(session disconnected)
  • 必须手动关闭终端才能让下一条命令正常执行

根本原因

Kiro 通过检测终端 shell prompt 的变化来判断命令是否执行完成。如果终端 prompt 是动态的(每次显示内容不同,如包含最近命令的退出码、时间、分支名等),Kiro 无法判断命令是否结束,导致无限等待。

常见触发 prompt 定制工具:

  • Powerlevel10k(zsh)
  • Starship.rs
  • Byobu(终端复用器)
  • Oh My Bash / Oh My Zsh 的部分主题
  • 手动在 .bashrc/.zshrc 中设置的动态 prompt(包含时间戳、退出码等)

解决方案

方案一:使用简单的 shell prompt(推荐)

将 Kiro 使用的终端 shell prompt 改为静态简单格式:

zsh(~/.zshrc

bash
# 在 Kiro 中使用简单 prompt
if [ "$TERM_PROGRAM" = "kiro" ]; then
  export PS1='%~ $ '
fi

bash(~/.bashrc

bash
if [ "$TERM_PROGRAM" = "kiro" ]; then
  export PS1='\w $ '
fi

修改后重启 Kiro 终端即可生效。

方案二:在 Kiro 中设置默认 shell 为 sh

在 Kiro IDE 设置中找到 Terminal 的默认 Shell 设置,改为 /bin/sh(而不是 bash/zsh)。sh 没有额外的定制,不会触发 prompt 检测问题。

方案三:对特定工具禁用定制(Starship 用户)

~/.config/starship.toml~/.bashrc 中,检测 TERM_PROGRAM 变量,仅在 Kiro 中禁用 Starship:

bash
# ~/.bashrc 或 ~/.zshrc
if [ "$TERM_PROGRAM" != "kiro" ]; then
  eval "$(starship init bash)"
fi

方案四:在 Kiro 中禁用 Byobu 自动启动

如果安装了 Byobu 且设置了 autostart,Byobu 会劫持 shell 会话,导致 Kiro 的命令输出检测失败。

bash
# 在 Kiro 终端内临时禁用 Byobu
byobu-disable

或在 ~/.bashrc 中加条件:

bash
if [ "$TERM_PROGRAM" != "kiro" ]; then
  _byobu_sourced=1 . /usr/bin/byobu-launch 2>/dev/null || true
fi

方案五:关闭终端重开(临时方案)

如果不想修改 shell 配置,每次 Kiro 执行命令后手动关闭终端 tab。下一条命令会创建新 terminal,不受上次命令残留状态影响。

常见问题

Q: 我遇到的是 git log 这类需要按 q 才退出的命令卡住,怎么处理?

A: 按 q 退出 pager(less/more),Kiro 会检测到命令结束并继续。这是分页程序的正常交互行为,不是 Bug。

Q: 修改了 PS1 但还是偶尔卡住?

A: 检查 .bashrc/.zshrc 中是否有其他修改 prompt 或挂接 shell 的工具(如 condanvm 的 hook),它们也可能导致 prompt 变化。

来源GitHub Issue #53