如果想立刻看到代理修改過的檔案,只要在 Claude Code 的 PostToolUse hook 裡呼叫 orca file open <檔案路徑> 就行了。這個指令不會改變目前正在看的畫面,只是把那個檔案在 Orca 工作資料夾中開成分頁,所以代理工作的期間不會被打擾,結束後修改過的檔案就排成一排分頁。訣竅是把指令分離到背景啟動,並且不等待結果,這樣 hook 才不會變慢。
這篇文章是連載的第二篇,連載內容是把一個人使用的開發環境改成以 AI 代理為中心(AX,AI 轉型)的過程中,每天整理一個我做出來的機制。第一篇是讓 hook 先替工作階段命名的故事。
為什麼每次都要到處找修改過的檔案?
我在一個叫 Orca 的終端機應用程式裡開著 Claude Code 工作階段,把工作交給它們。代理讀檔案、修改、再換下一個檔案,終端機只留下「修改了這個檔案」的一行就滑過去了。要看實際改了什麼,得用眼睛追著那個路徑,在檔案總管裡一個個展開資料夾,找到檔案再打開。修改過的檔案只要有三四個,就會搞不清哪些看過、哪些還沒看。
一開始想要的是什麼?
一開始想要的是檔案總管。我想,如果檔案一被修改,Orca 的檔案總管就展開那個路徑並標示出檔案,會很好。所以我先讀了 Orca CLI 的說明。在 orca file 底下有三個指令:open(把檔案開成分頁)、diff(把變更比較開成分頁)、open-changed(把 git 中有變動的檔案全部開成分頁),沒有展開檔案總管的指令。「在檔案總管中顯示」只存在於畫面選單,hook 無法呼叫。
卡在哪裡?
我稍微調整了目標。我要的不是檔案總管本身,而是「修改過的檔案就在眼前」。用顏色顯示檔案狀態(新增、修改)這件事,Orca 的原始碼控制清單已經在做了。所以剩下的工作縮減成只要打開檔案,而 orca file open 正好適合。這個指令只是打開,不會把畫面移到那個分頁,只有想移過去時才加上 --focus。
剩下的障礙有兩個。一個是這個指令會依照執行時的資料夾(cwd)來尋找 Orca 工作資料夾。如果從不相干的資料夾呼叫,就找不到要開啟的地方。另一個是,hook 一旦變慢,代理的每一次編輯都會跟著慢同樣的時間。
用 hook 怎麼改?
PostToolUse hook 在工具呼叫結束後立刻執行,輸入的 JSON 裡有工具名稱與參數。只有在編輯工具時才取出檔案路徑,並把該檔案所在資料夾當作 cwd 來啟動指令。把實際的 hook 縮短來看,大概是這樣。
TOOLS = {"Edit", "Write", "MultiEdit", "NotebookEdit"}
def target(payload, env):
if env.get("CC_EDIT_REVEAL", "1") == "0" or env.get("CLAUDE_CODE_ENTRYPOINT", "").startswith("sdk"):
return None # 關閉開關與無人執行時跳過
if payload.get("tool_name") not in TOOLS:
return None
path = (payload.get("tool_input") or {}).get("file_path")
return path if path and os.path.isabs(path) and os.path.isfile(path) else None
subprocess.Popen([orca, "file", "open", path], cwd=os.path.dirname(path), start_new_session=True,
stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
用 start_new_session=True 以與 hook 分離的程序啟動,並把輸出全部丟掉。hook 在呼叫 Popen 之後立刻輸出 {} 就結束,所以不會在 Orca 開分頁的那段時間裡拖住代理。在找不到要開啟位置的資料夾(不是 Orca 工作資料夾的地方),指令會默默失敗,而 hook 不看那個結果,所以代理這邊什麼事都不會發生。
對於沒有人看畫面的無人執行(claude -p),因為沒有人需要替他開啟,所以跳過。想暫時關掉時,只要一個環境變數 CC_EDIT_REVEAL=0 即可。註冊只要在設定檔的 PostToolUse 加一行。為了讓 hook 即使失敗也輸出空的 JSON,後面加上 || echo '{}',時間限制則抓得很短,只有 5 秒。
{
"hooks": {
"PostToolUse": [
{ "hooks": [{ "type": "command", "command": "python3 ~/.claude/hooks/edit_reveal.py 2>/dev/null || echo '{}'", "timeout": 5 }] }
]
}
}
現在的一天有什麼不同?
把工作交給代理,看看別的分頁再回來,修改過的檔案已經開成分頁了。不必再順著路徑展開資料夾,從左邊開始一個個翻看分頁,就剛好成了這次工作的審查順序。因為分頁不會搶走畫面,代理工作的期間,我正在看的畫面也不會突然改變。
這個 hook 在 2026-10-19 以 52 行首次加入,截至 2026-10-20,修改過這個檔案的提交有 3 個。剛做出來時決定的「用分頁取代檔案總管」與「不等待地啟動」這兩件事,之後都沒有改變。
常見問題
每次修改檔案,畫面都會跳到那個分頁嗎?
不會。orca file open 預設是「只開啟,畫面維持不變」,若要連畫面也移過去,必須另外加上 --focus。hook 裡沒有加。
hook 會讓代理的編輯變慢嗎?
hook 把指令以分離的程序啟動後,不等結果就立刻結束。開分頁所花的時間,與代理的下一個動作無關。
在 Orca 以外的終端機也能用嗎?
結構可以照用。hook 中取出檔案路徑的部分是 Claude Code 的功能,所以相同,只要在 orca file open 的位置放入你使用的編輯器的「開啟檔案」指令即可。不過,有沒有不搶畫面就能開啟的選項,必須依編輯器個別確認。