Status Hooks:讓 AI Agent 跑完自動通知你

Status Hooks:讓 AI Agent 跑完自動通知你

4 min read

跑 AI Agent 最浪費時間的事之一:等它。

它在跑,你在旁邊盯著,沒事做,又不敢去做別的怕錯過它卡住的訊號。這種被動等待讓效率掉很多——CCManager 的 Status Hooks 就是來解這件事的。

Status Hooks 是什麼

簡單說:Agent 狀態變化時,自動執行你指定的指令。

狀態分三種:

  • idle:Agent 閒著,可以下新任務了
  • busy:Agent 在跑中
  • waiting(最重要):Agent 在等你確認或輸入,需要你介入

每個狀態都可以設對應的 hook,狀態切換就自動觸發。

設定 Hooks

從 CCManager 主選單:Global Configuration → Configure Status Hooks

進去之後,三個狀態各自設一個指令:

Idle Hook(Agent 閒下來時觸發):

noti -t "AI Agent" -m "任務完成,可以下新指令了 [$CCMANAGER_WORKTREE_BRANCH]"

Waiting Hook(Agent 在等你時觸發):

noti -t "AI Agent" -m "需要你的輸入![$CCMANAGER_WORKTREE_BRANCH]"

Busy Hook(Agent 開始跑時觸發):

noti -t "AI Agent" -m "Agent 開始處理 [$CCMANAGER_WORKTREE_BRANCH]"

上面用的是 noti,一個跨平台的桌面通知工具。用 Homebrew 裝:

brew install noti

環境變數:Hook 裡能用什麼資訊

每次 hook 觸發,CCManager 會帶幾個環境變數進去,讓你在通知訊息裡帶入上下文:

變數 說明
$CCMANAGER_OLD_STATE 轉換前的狀態(idle / busy / waiting_input)
$CCMANAGER_NEW_STATE 轉換後的狀態
$CCMANAGER_WORKTREE_PATH Worktree 的完整路徑
$CCMANAGER_WORKTREE_DIR Worktree 的目錄名稱(basename)
$CCMANAGER_WORKTREE_BRANCH 這個 Worktree 的 Git branch 名稱
$CCMANAGER_SESSION_ID 工作階段的唯一識別碼

Branch 名稱最實用——你同時跑三個 Agent,通知訊息帶上 branch 名稱,一眼知道是誰發出來的。

進階:打 Slack Webhook

不只桌面通知,你可以讓 Agent 狀態變化直接發訊息到 Slack:

curl -X POST -H 'Content-type: application/json' \
  --data "{\"text\":\"[$CCMANAGER_WORKTREE_BRANCH] 狀態:$CCMANAGER_NEW_STATE\"}" \
  YOUR_SLACK_WEBHOOK_URL

把 YOUR_SLACK_WEBHOOK_URL 換成你的 Slack Incoming Webhook URL,就能讓 Slack channel 收到 Agent 的狀態更新。適合團隊協作,或你習慣在 Slack 管理所有通知的工作流。

搭配 tmux 狀態列

如果你同時用 tmux(和 CCManager 分開跑),可以讓 tmux 的狀態列顯示 Agent 的最新狀態:

tmux set -g status-right "Agent: $CCMANAGER_NEW_STATE [$CCMANAGER_WORKTREE_BRANCH]"

幾個實用建議

只設 waiting hook 就夠了——idle 和 busy 的通知容易變成背景噪音,你很快就會習慣性忽略。waiting 才是你真的需要被叫醒的時機。

先在終端機測指令,確認能跑再貼進 Hook 設定。Hook 跑失敗不會噴錯,你不知道有沒有出問題。

Hook 是在 Worktree 目錄下執行的,需要相對路徑的腳本要注意這一點。


通知設好,你就可以放心去做別的事,Agent 需要你的時候自動找你。

系列最後一篇:多專案模式:一個介面管所有 Repo——如果你有多個 repo 同時在跑,這個功能值得知道。