除錯 Kiro 與 zsh 的 CLI Session 互動問題:無法取得後續指令回傳值

Kiro 與 zsh 互動問題

問題描述

最近在使用 Kiro (Agentic IDE) 玩 multiple-role agents 和 hooks 的時候,遇到了一個相當困擾的問題:在同一個 CLI session 中,Kiro 拿不到第二個指令的回傳值

問題場景是這樣的:

  • 當我請 Kiro 執行第一個指令時,一切正常,指令可以執行且能正確取得輸出結果。
  • 但是接下來 在同一個 shell session 中執行第二個指令時,Kiro 就無法取得該指令的回傳值了。
  • 所以 Kiro 就停在那邊等回傳,vibe 不起來。

這個問題對我的工作流程造成了很大的影響:

  • 頻繁的 session 重啟:
    • 每次執行完第一個指令後,我都必須手動關閉 CLI session,需要我(人類)這麼頻繁地介入,那這不是我想要的 AI agent。
  • 手動複製輸出:
    • 或者我需要手動複製第二個指令的回傳值給 Kiro Chat。
  • 工作效率降低:
    • 原本流暢的 agentic coding 工作流程變得斷斷續續,放鬆的時候是可以放鬆,但我對於工作任務,會想要提升效率。

問題場景影片紀錄(影片中的某些關鍵資訊已經被重新產生,請勿驚慌):



初步調查方向

  • 面對這個問題,我開始從過往的經驗進行推測。
  • 首先想到的是 Amazon Q CLI 可能是兇手之一。
  • 另外補充我的環境可能相對比較混雜,可以參考我的 dotfiles git repo 慢慢研究。如果有人可以幫我重新規劃可以如何簡化,會非常感激。

Amazon Q CLI 的疑慮

我之前在使用 Cursor 時也遇到過類似的問題。根據我的了解,Amazon 收購了一家名為 fig 的公司,並將其整合到 Q CLI 中。

這個整合可能造成了以下的問題:

  • 多層 shell 調用:
    • 當 Cursor 或 Kiro 啟動一個 CLI session (shell) 時
  • 自動接管機制:
    • Q CLI 可能會自動啟動並接管這個 session
  • 輸出傳遞問題:
    • 過太多手讓 std output (stdout) 接不回源頭的 Cursor/Kiro

這種多層包裝的架構很容易造成輸出無法正確傳回原始的 Agentic Coding Chat 環境,特別是在連續執行多個指令的情況下(通常第二個指令就會卡住)。

當時我是將 Cursor IDE 改成走去我本機相對乾淨的 bash shell,但缺點是我一堆在 zsh 設定好的環境變數和工具 Cursor 就無法使用,對我來說是一種降低效率與重工 (duplication of work)。不是很想要這種解法。

# Amazon Q post block. Keep at the bottom of this file.
# Only load Amazon Q in non-Cursor and non-Kiro environments to avoid conflicts
if [[ "$TERM_PROGRAM" != "cursor" ]] && [[ -z "$CURSOR_SESSION" ]] && [[ "$TERM_PROGRAM" != "kiro" ]]; then
    [[ -f "${HOME}/Library/Application Support/amazon-q/shell/zshrc.post.zsh" ]] && builtin source "${HOME}/Library/Application Support/amazon-q/shell/zshrc.post.zsh"
fi

.zshrc 設定的考量

另外,我也注意到我的 .zshrc 中已經有依照 Kiro 文件建議Manual Shell Integration Installation 設定。這讓我開始懷疑是否某些 shell 設定與 Kiro 的互動機制產生了衝突。

# Kiro shell integration - Load first to ensure proper session handling
[[ "$TERM_PROGRAM" == "kiro" ]] && . "$(kiro --locate-shell-integration-path zsh)"

解決方案

經過底下的土炮除錯法,最終發現問題的根源並不在 Amazon Q CLI,而是在我的 ZSH_THEME 設定上。

但要先跟大家說明,我同事也有調整跟我一樣的同一行 ZSH_THEME 設定,但他還是會有發生問題,所以回到源頭是每個人每一台電腦當下的環境一定都不一樣,只能用以下介紹的 逐行排除法 (夠土炮吧)來找每一台電腦環境疊加後的炸點在哪裡。所以嚴格說起來不算是找到 root cause,而是該台電腦環境的最後壓力釋放點。

逐行排除法除錯

我決定採用最直接的方式:一行一行註解掉 `.zshrc` 裡的設定,看看究竟是哪一行在搞鬼。

註解掉某一行之後,回到 Kiro(或你有遇到問題的 Agentic Coding IDE) 請它測試連續三個指令到同一個 CLI session。(測試用的 prompt 可以參考底下第二支影片。)

這個過程雖然有點繁瑣,但是非常有效。透過二分法的方式逐步縮小範圍,最終找到了問題所在。

根本原因:powerlevel10k (以我的環境來說)

結果發現,罪魁禍首是我的 .zshrc 裡頭的這一行:

ZSH_THEME="powerlevel10k/powerlevel10k"

條件式 Shell Theme 切換

確認問題所在行之後,下一步思考,為了既能保持平時使用 powerlevel10k 的外觀體驗,又能確保 Kiro 正常工作,我請 Kiro (還是 Claude Code?!忘了,但模型這陣子大多都使用 Claude Sonnet 4)實作了一個條件判斷的解決方案:

if [[ "$TERM_PROGRAM" != "kiro" ]]; then
    ZSH_THEME="powerlevel10k/powerlevel10k"
else
    # Use simple theme in Kiro to avoid CLI session conflicts
    ZSH_THEME="robbyrussell"
fi

這個方案的邏輯很簡單:

  • 一般情況下:使用 powerlevel10k 主題,保持美觀的終端體驗
  • 在 Kiro 環境中:自動切換到簡單的 robbyrussell 主題,避免互動衝突

透過檢查 $TERM_PROGRAM 環境變數,可以準確識別當前是否在 Kiro 的 CLI session 中執行。

而且整個 .zshrc 在各種場景下都共用,所以我之前的環境變數和工具都可以重複使用,不用例外處理或繞路。

驗證

實作上述解決方案後,問題被解決了,已消失。

修好後的瞬間 Kiro 就幫我打了一個 PRaws-cdk 專案。

修復後的效果非常滿意:

  • 連續指令執行正常:(這是主要的問題)在同一個 CLI session 中,Kiro 可以正常取得所有後續指令的回傳值。
  • 工作流程順暢:(解掉問題後帶來的價值)不再需要頻繁重啟 session 或手動複製輸出內容。
  • 兩全其美:(保持我在每個專案都追求的一致性)平時保持我習慣的 powerlevel10k 外觀,在 Kiro 中自動切換為相容的 theme。

修復後正常運作影片(無搞笑版本):

Bottomline

解法越土我越喜歡,通常適用場景越多元。(被打 XDD

Buy Me a Coffee 如果這個分享對你有幫助,歡迎拍打餵食一杯咖啡 ☕ :)

參考資料


另外,我手邊時不時會有 AI 工作流程整合的路邊專案 (side projects) 與經驗分享議程冒出來,歡迎有興趣一起探索 AI 輔助開發工作流程的朋友傳訊息給我 LinkedIn @dwchiang