AX 提示 1 — 讓 hook 先替工作階段命名

發布 · 更新

  • AX 提示
  • Claude Code
  • 開發環境自動化
  • hook

Claude Code 的工作階段名稱,在人用 /rename 命名之前,讓 hook 先附上就好。SessionStart hook 在輸出的 JSON 裡放入 sessionTitle,效果就和 /rename 一樣,終端機分頁標題不會隨對話主題晃動,從一開始就固定成 [大][中]-小 的格式。如果在名稱中間放入「分析」「開發」這類角色標籤,其他 hook 就能讀取這個名稱,連在分析用的工作階段裡想修改程式碼的失誤也能擋下來。

這篇文章是連載的第一篇,連載內容是把一個人使用的開發環境改成以 AI 代理為中心(AX,AI 轉型)的過程中,每天整理一個我做出來的機制。

為什麼分頁標題一直在變?

我在一個叫 Orca 的終端機應用程式裡,開著好幾個 Claude Code 工作階段。寫部落格文章的分頁、修改網站的分頁、調整自動化的分頁,同時開著。但是沒有命名的工作階段,Claude Code 會在每次提示時依對話主題重新取終端機標題。只問了一個簡單計算的分頁,標題變成了 1+1 計算。分頁多了以後,每次都得點開看,才知道哪個分頁是做什麼的。

一開始試了什麼?

第一個嘗試,是在建立分頁時就決定標題。我用 orca terminal create --title 給標題並開啟,但 Claude Code 一啟動就把標題覆蓋成 Claude Code。第二個嘗試,是用環境變數 CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 乾脆把改標題的功能關掉。晃動是停了,但這次連工作階段名稱都不會顯示在標題上,所有分頁看起來都一樣。這兩種方法都是 2026-10-07 我親自試過後放棄的。

卡在哪裡?

試過之後,我才知道規則。工作階段有名稱的話,標題就固定為那個名稱,只有沒有名稱時才會跟著主題改變。結論其實是「一律附上名稱」,但問題是我常常忘記 /rename。需要人記住的規則,忙的時候最先被丟掉。所以我決定把記住這件事交給 hook。

用 hook 怎麼改?

SessionStart hook 會在新開、接續開啟、分支開啟工作階段時執行。只要在輸出的 hookSpecificOutput 放入 sessionTitle,那個名稱就會附到工作階段上。把實際的 hook 縮短來看,大概是這樣。

APPLY_SOURCES = ("startup", "resume", "fork")   # 不適用於 clear、compact

def auto_title(payload):
    if payload.get("session_title") or payload.get("source") not in APPLY_SOURCES:
        return None                              # 已有名稱就不動
    return "[%s][分析]-基本" % major_of(payload["cwd"])

out = {"hookEventName": "SessionStart", "sessionTitle": auto_title(payload)}
print(json.dumps({"hookSpecificOutput": out}))

最前面的大分類,是從同一個資料夾最近用過的工作階段名稱中,挑選用得最多的那個。一開始只看最近的一個,但打錯一次的字會原封不動傳到下一個工作階段名稱,所以改成「用得最多的」。預設角色定為「分析」。因為在分析工作階段裡想修改檔案或提交時,另一個 hook(PreToolUse)會讀取名稱並加以阻擋,所以我選了最安全的一邊當預設值。

最後一格的「小」,會依工作內容而變。如果第一個輸入是斜線指令,hook 會立刻把「小」改成那個指令的名稱;否則先保留 -基本,等第一項工作結束時,由代理看內容來取名。負責改名的小腳本會把新名稱寫進檔案,下一次提示時,UserPromptSubmit hook 讀取那個檔案,並套用成 sessionTitle。同一時刻也會用 orca terminal rename 一併改掉 Orca 的分頁名稱。

hook 為工作階段命名的流程開啟工作階段(startup、resume、fork) → 已經有名稱嗎?; 已經有名稱嗎? → 維持原樣 (是); 已經有名稱嗎? → 附上 [大][分析]-基本 (否); 附上 [大][分析]-基本 → 第一個輸入是斜線指令嗎?; 第一個輸入是斜線指令嗎? → 小 = 指令名稱 (是); 第一個輸入是斜線指令嗎? → 第一項工作後由代理取小的名稱 (否)是否是否開啟工作階段(startup、resume、fork)已經有名稱嗎?維持原樣附上 [大][分析]-基本第一個輸入是斜線指令嗎?小 = 指令名稱第一項工作後由代理取小的名稱
hook 為工作階段命名的流程 — clear、compact 不是對象

對於沒有人可以回答的無人執行(claude -p),不放入詢問名稱的提示。因為在無人執行的測試中,這個提示曾經攔截了最後的回答,結果以一個不相干的問題收尾。

現在的一天有什麼不同?

掃過分頁,就能立刻看出各是做什麼的工作階段。像 [部落格][開發]-robots、[網站][分析]-搜尋統計 這樣,大分類、角色與主題都出現在同一行。依 2026-10-19 量測的值,2026-10-12 以後使用的 211 筆工作階段紀錄中,有 206 筆附有名稱。修改這兩個負責命名的 hook 檔案的提交,到目前為止是 10 個。現在,命名不再是我要記住的事,而是 hook 做的事。

命名前與命名後人工 /rename: 忙的時候常常忘記, 分頁標題隨對話主題改變, 要點開才知道是什麼分頁 → hook 先做: 開啟時就附上預設名稱, 標題從一開始就固定, 用角色標籤擋下失誤人工 /rename忙的時候常常忘記分頁標題隨對話主題改變要點開才知道是什麼分頁hook 先做開啟時就附上預設名稱標題從一開始就固定用角色標籤擋下失誤
命名前與命名後

常見問題

hook 附上的名稱,會不會覆蓋我自己取的名稱?

已經有名稱的工作階段不會動。傳進 hook 的值裡如果有工作階段名稱,就立刻離開,只有在新開或接續開啟沒有名稱的工作階段時,才附上預設名稱。

/clear 或壓縮之後也會附上名稱嗎?

SessionStart hook 在 clear、compact 回傳的名稱不會被套用,所以一開始就把它們排除了。

一定要有像 Orca 這樣的終端機應用程式嗎?

不用。工作階段名稱是 Claude Code 的功能,所以在任何終端機裡,分頁標題都會固定。只有同時改 Orca 分頁名稱的部分是 Orca 專用的。

要不要一起打造您的網站?

免費諮詢