系列文章: Ccmanager (9/10)

Status Hooks:讓 AI Agent 跑完自動通知你
跑 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 同時在跑,這個功能值得知道。