Cursor CLI 無限除錯迴圈:讓 AI 跑到測試通過才停
5 min read

測試掛了,改 code,再跑測試,還是掛,再改——這個迴圈大家都做過。為什麼要自己來?
寫一個 shell 腳本,把這個迴圈交給 cursor agent 跑:測試失敗就把錯誤訊息餵給 AI,AI 修完再跑,直到測試全過才停。你去喝咖啡、回訊息,等終端機出現 ✅ 測試通過! 再回來驗收。
核心邏輯
while 測試沒過:
跑測試 → 收集錯誤訊息
把錯誤訊息餵給 cursor agent
cursor agent 修 code
重新跑測試
就是「跑測試 → 失敗 → 叫 AI 修 → 再跑」的迴圈,直到綠燈。簡單粗暴,但有效。
前置條件確認
cursor已安裝且登入(cursor --version驗證)- 專案有可以在終端機跑的測試指令,例如
npm test、pytest、go test ./...、cargo test - 測試失敗時 exit code 不為 0(幾乎所有測試框架預設都這樣)
最簡版腳本
建立 debug-loop.sh:
#!/bin/bash
MAX_LOOPS=10 # 最多跑幾圈,防止真的無限跑
TEST_CMD="npm test" # 換成你的測試指令
loop=0
while [ $loop -lt $MAX_LOOPS ]; do
echo ""
echo "=== 第 $((loop + 1)) 圈 ==="
TEST_OUTPUT=$(eval "$TEST_CMD" 2>&1)
EXIT_CODE=$?
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ 測試通過!共跑了 $((loop + 1)) 圈。"
exit 0
fi
echo "❌ 測試失敗,讓 AI 來修..."
echo "$TEST_OUTPUT" | tail -30
cursor agent "測試失敗了,錯誤如下,請修 code 讓測試通過:
$TEST_OUTPUT" --model gpt-codex-5.3-high --no-interactive
loop=$((loop + 1))
done
echo "⚠️ 已達最大圈數 ($MAX_LOOPS),停止。請手動檢查。"
exit 1執行:
chmod +x debug-loop.sh
./debug-loop.sh跑起來之後就可以去做別的事了。若跑滿 MAX_LOOPS 還沒過,代表問題超出 AI 能自己解決的範圍,這時才需要人介入。
依專案調整
換測試指令(第 3 行):
TEST_CMD="pytest -x" # Python,-x 遇第一個錯就停
TEST_CMD="go test ./..." # Go
TEST_CMD="cargo test" # Rust
TEST_CMD="./vendor/bin/phpunit" # PHP調最大圈數:5 圈保守(問題複雜的話 AI 比較快卡死)、15 圈給點餘裕——設太大只是在浪費 quota,設太小又不夠。10 是個不錯的起點。
讓 AI 有更多背景資訊,在 cursor agent 指令裡說清楚:
cursor agent "測試失敗,錯誤如下。
測試框架是 Jest,語言是 TypeScript。
不要改測試檔案,只改 src/ 底下的檔案。
錯誤訊息:
$TEST_OUTPUT" --model gpt-codex-5.3-high --no-interactive加強版:保留每圈的日誌
如果想事後分析「第幾圈開始跑歪了」:
#!/bin/bash
MAX_LOOPS=10
TEST_CMD="npm test"
LOG_DIR="debug-logs"
mkdir -p $LOG_DIR
loop=0
while [ $loop -lt $MAX_LOOPS ]; do
echo ""
echo "=== 第 $((loop + 1)) 圈 ==="
LOG_FILE="$LOG_DIR/loop-$((loop + 1)).log"
TEST_OUTPUT=$(eval "$TEST_CMD" 2>&1 | tee "$LOG_FILE")
EXIT_CODE=${PIPESTATUS[0]}
if [ $EXIT_CODE -eq 0 ]; then
echo "✅ 測試通過!共跑了 $((loop + 1)) 圈。"
exit 0
fi
echo "❌ 失敗,日誌存到 $LOG_FILE"
cursor agent "測試失敗,錯誤如下,請修 code 讓測試通過:
$TEST_OUTPUT" --model gpt-codex-5.3-high --no-interactive
loop=$((loop + 1))
done
echo "⚠️ 達最大圈數,停止。請看 $LOG_DIR/ 裡的日誌。"
exit 1每圈的錯誤都存成獨立檔案,方便對比 AI 改了什麼、問題有沒有在演化。
安全注意事項
| 風險 | 怎麼防 |
|---|---|
| AI 改爛更多檔案 | 跑前先 git commit 備份,不對就 git checkout . 還原 |
| 跑太多圈浪費 quota | 設合理的 MAX_LOOPS,建議 5~15 |
| AI 改到測試檔本身 | 提示詞明確說「不要改測試檔案」 |
| 每圈失敗原因不同 | 保留日誌(加強版腳本),方便事後追蹤 |
git commit 這個動作最重要——腳本跑爛了隨時能還原,睡得比較安心。
搭配 Worktree:在不同 branch 各開一個除錯迴圈,可參考 06-cursor-cli-with-worktree。
下一步:08-worktree-merge — Cursor 內建 Worktree 進階應用與 Apply 策略。