Appearance
Kiro Chat 终端命令卡在 Working 状态不结束的解决方法
问题
在 Kiro Chat 中让 AI 执行终端命令时,命令已经在终端中完成,但 Chat 界面一直显示"Working...",不继续后续步骤。常见症状:
- 第二次在同一终端执行命令时必然卡住
npm run dev、git 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='%~ $ '
fibash(~/.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 的工具(如 conda、nvm 的 hook),它们也可能导致 prompt 变化。