如果你只透過對話視窗使用 Claude Code,就只發揮了一半的功能。把它加入終端機管線後,就能像 grep 或 jq 等 Unix 工具一樣使用。
關鍵在於 -p(或 --print)旗標。它會在沒有互動式畫面的情況下處理一個提示,只輸出結果後結束。
claude -p "auth 請說明這個模組的用途"
如果說 Claude Code 第 13 集 談的是工作階段內的內容,這次要介紹的是如何在工作階段外使用它。
透過管線輸入,寫入檔案接收結果
以 官方文件 為基準,-p 模式會讀取標準輸入。將資料透過管線傳入並重新導向結果,就和其他 CLI 工具一樣。
cat build-error.txt | claude -p '請簡潔說明這個建置錯誤的根本原因' > output.txt
依照 官方文件,成功時以結束碼 0 結束,失敗時則以非 0 結束,因此可以在腳本中分支處理。管線輸入上限為 10MB,超過時可在提示中填入檔案路徑繞過限制。
放進 package.json 的腳本後,也能建立專案專用的檢查工具。例如將 diff 傳入管線,只讓它回報錯字。
接收 JSON,交由程式消費
加上 --output-format json 後,結果會連同工作階段 ID、成本等中繼資料,以結構化格式輸出。
claude -p "請摘要這個專案" --output-format json | jq -r '.result'
若需要符合特定結構描述的輸出,請在 --output-format json 中加入 --json-schema。回應會以經過驗證的結構放在 structured_output 欄位中。
若要以 token 為單位即時串流,請使用 --output-format stream-json --verbose --include-partial-messages 組合。
權限必須事先開啟
在 -p 模式中,沒有任何人可以按下核准按鈕。必須事先允許所需的工具。
claude -p "執行測試並修正失敗" --allowedTools "Bash,Read,Edit"
--allowedTools 會直接使用權限規則語法。可以像 Bash(git diff *) 一樣縮小範圍。星號前的空格很重要;沒有空格就會一路比對到 git diff-index。
提供 --permission-mode acceptEdits 後,檔案寫入,以及 mkdir、mv 等常見檔案系統命令會自動核准。其他 Shell 命令與網路請求仍需要 --allowedTools。
延續對話
如果工作無法在一次呼叫中完成,可以延續工作階段。
claude -p "請檢視這個程式碼庫的效能問題"
claude -p "現在 DB 請專注於查詢" --continue
如果同時進行多個對話,請保存 JSON 輸出的 session_id,再使用 --resume 指定並延續特定對話。
CI 中的標準做法是 –bare
若用於腳本或 CI,建議一併使用 --bare。略過自動載入 hook、skill、plugin、MCP 與 CLAUDE.md,可加快啟動速度,也能在任何機器上得到相同結果。
這也有安全性上的理由。-p工作階段無法顯示工作區信任確認視窗,因此沒有 --bare 時,陌生儲存庫中的 hook 與 MCP 伺服器也會照樣執行。官方文件也明確將 --bare 列為腳本呼叫的建議模式,並表示未來預計將 -p 設為預設值。
在 --bare 中,請記住必須使用 ANTHROPIC_API_KEY 環境變數,而不是訂閱登入。
總結
claude -p 會將 Claude Code 變成 Unix 工具。透過管線傳入、以 JSON 接收,再依結束碼分支。
使用 --allowedTools 預先開啟權限,並在 CI 中透過 --bare 以具決定性且安全的方式執行。
下一集會回到互動式畫面,完整整理 ! Shell 模式,以及 Ctrl+O 等特殊輸入與快速鍵。
來源與確認標準
- Claude Code 官方文件 — Run Claude Code programmatically(Anthropic,確認日期:2026-08-14)

![[Claude Code #14] claude -p 無頭模式:將 AI 加入管線 封面圖](/assets/images/posts/17e2516d-ee89-4bf8-a9c3-106a60196e91/claude-code-headless-pipeline.jpg)