還我一個乾淨的對話:用 /btw、/fork、/rewind 對抗 Claude Code 對話污染
在用 Claude Code 處理比較長的任務時,有時候會注意到一件怪事:越到後面,Claude 的回答感覺越「飄」,開始忽略早先講好的架構決定,或是重複問你已經說過的事情。
一開始以為是模型能力問題,後來才意識到——是 context pollution 在作怪。
什麼是 Context Pollution
Claude Code 每次回應都要重讀整個對話歷史。這代表你在 session 裡的每一句話、每一次工具呼叫的輸出、每一個離題的閒聊,都會持續佔用 context 空間,而且每一輪都在反覆消耗 token。
所謂的 context pollution,就是這些「跟當前任務無關的內容」悄悄累積在對話裡,讓 Claude 越來越難精準聚焦在你真正想要的事情上。
常見的污染來源:
- 中途問了一個「順帶一提」的問題,但答案和答案的答案都留在 history 裡
- 試了一個方向、改了主意,但那段試錯對話沒有消失
- 讓 Claude 讀了一個大檔案,輸出結果全部進了 context
v2.1.72(2026/03/10)引入的 /btw 指令,讓我重新注意到這個問題,也才發現 Claude Code 其實有三個專門對付 context pollution 的工具——只是放在文件很角落的地方。
/btw — 提問不留痕跡
/btw 是「by the way」的縮寫,用途很直白:讓你問一個問題,但這個問題的 Q&A 不進主對話 history。
怎麼用
在任何時間點輸入:
/btw which test file covers the auth middleware?
Claude 會在一個獨立的浮動區塊裡回答。你看完、關掉,主線對話繼續,就好像什麼都沒發生過一樣。
更神奇的是,你可以在 Claude 正在執行任務的過程中發出 /btw 問題——它會並行處理,不會打斷正在進行的工作。
什麼時候用
- 不確定某個函數在哪裡,但懶得開新 terminal 去 grep
- 需要一個概念解釋(「
useEffect和useLayoutEffect差在哪?」)但不想讓這段 Q&A 污染後續 context - 想更新 Claude 對這個 session 的風格偏好(「這個 session 以後回答請盡量簡短」)
/btw from now on in this session, keep code comments in English only
這類「工作方式」的設定用 /btw 傳達特別適合——Claude 會記住,但這個設定本身不會每次都重新出現在 history 裡。
重要限制
/btw 沒有 tool access。它只能根據當前 context 裡已有的資訊回答,無法讀取檔案、執行指令、或搜尋程式碼。如果你需要 Claude 去翻 codebase,還是要走正常對話。
另外,/btw 只支援單次問答,無法追問。
/btw 的 Q&A 不進 history,代表後續每一輪請求都不用再讀這段內容,在長 session 裡積少成多。某些使用者回報光靠這一個習慣就減少了 30-50% 的 context 膨脹速度。
/fork — 給 context window 開分支
Git 有 git branch,Claude Code 的 session 也有對應的概念:--fork-session。
怎麼用
從終端機啟動一個 fork session:
claude --fork-session <session-id>
或是在對話中使用:
/fork
Fork 會創建一個新的 session ID,但繼承當前 session 的完整歷史記錄。從這一刻起,兩個 session 完全獨立——不管哪邊做了什麼,另一邊都不受影響。
應用場景一:嘗試不同方向
你在做 refactor,但不確定要用 Strategy Pattern 還是 Visitor Pattern。與其在同一個 session 裡兩個方向都試,不如在還沒動手之前先 fork 兩份:
/fork
# 在 fork-A 裡試 Strategy Pattern
# 原 session 繼續試 Visitor Pattern
最後選一個方向,另一個分支直接捨棄,主線完全乾淨。
應用場景二:Context Pre-warming
這是社群上討論最熱的用法——「pre-warming」。
先建立一個「母 session」,只做一件事:把這個專案的核心知識全部載入——架構決定、重要 API 文件、程式碼慣例、常見坑。這個 session 可能有 40K+ token。
之後每次要開始新功能,就從這個母 session fork 出去,而不是重新建立一個空白 session 再重新解釋背景。
# 載入母 session context
claude --resume <master-session-id>
# 準備開始新功能時
/fork
# 現在在子 session 裡,帶著完整 project context 開工
效果有點像是 git worktree:同一份程式碼的不同工作副本,各自獨立,不互相干擾。
/rewind — 回到過去
/rewind 是這三個工具裡最接近「反悔鍵」的一個。
怎麼用
有兩種觸發方式:
- 鍵盤快捷鍵:連按兩次 Esc
- 指令:
/rewind
兩種方式都會打開一個選單,讓你選擇要回到哪個對話節點。
/rewind 支援選擇性回滾:你可以只回滾對話(但保留已修改的程式碼),或是同時回滾對話和程式碼狀態,根據需求彈性選擇。
壓縮試錯,而不是刪除
/rewind 的聰明之處在於它不只是「刪掉後面的對話」。當你選擇從某個節點重新開始,Claude 會把後面那段試錯過程壓縮成一個摘要——保留關鍵結論(「這個方向行不通,因為 X」),丟掉大量的中間過程。
這樣的結果是:你回到了一個乾淨的起點,但 Claude 還是知道你剛才試了什麼、為什麼沒成功。
這和直接把後面的訊息刪掉不一樣——直接刪掉等於這段試錯歷史不存在,下次 Claude 可能又走同一條死路。
三個工具搭配使用
這三個工具各自獨立,但放在一起用效果更好。
我現在常用的工作流程是這樣:
- 開始一個新功能前,用
/fork從當前 session 開一個分支,而不是繼續在原 session 裡堆疊 - 在分支裡工作時,中途有任何「順帶問一下」的問題,用
/btw——不是開新 session,也不是汙染主線 - 走錯方向之後,用 EscEsc 打開
/rewind選單,選一個乾淨的節點重來,而不是繼續在原本的 context 裡打補丁
# 一個典型的長 session 工作流
[開始任務]
↓
/fork ← 嘗試方向A
↓
/btw did we handle null checks in this module? ← 不汙染主線的即時確認
↓
[發現方向A 跑不通]
↓
Esc Esc → /rewind 到分叉點 ← 壓縮試錯,保留教訓
↓
/fork ← 嘗試方向B
↓
[完成]
這套流程讓 context 的成長保持線性而不是指數型——每個 session 的任務邊界清楚,側問和試錯都不會無限堆疊。
個人心得
說實話,這三個指令存在蠻久了,但我用了幾個月 Claude Code 才偶然在 changelog 裡發現 /btw(v2.1.72 加進來的),進而去挖其他兩個。
文件把它們分散在幾個不同頁面,也沒有特別把「context hygiene」當作一個主題整合起來介紹,所以很容易錯過。
這讓我想到一個習慣:每隔一段時間翻一次 Claude Code 的 changelog 或是跑 /release-notes 看看最近多了什麼,常常會找到放了很久但自己不知道的好東西。
資料來源
- Mastering Claude Code’s /btw, /fork, and /rewind — Towards AI, Mar 2026
- Claude Code /btw Command Explained — Vincent’s Blog
- Claude Code /rewind Explained — Vincent’s Blog
- Ask Questions While Claude Code Is Working with /btw — wmedia.es
- Branch Your Claude Code Conversations — wmedia.es
- How Claude Code works - Official Docs — Claude Code Docs
- Best Practices for Claude Code - Official Docs — Claude Code Docs
留言