SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

Claude Code 輸出樣式與自訂方法

輸出樣式會修改 Claude Code 的 system prompt,影響每次回覆。了解 5 種內建樣式、v2.1.251 的切換差異,以及如何建立自訂樣式。

Claude Code 中的輸出樣式

Claude Code 中的輸出樣式是一組指示。Claude Code 會在每次請求中,將這組指示附加到傳送給 Claude 的內容。它會變更 Claude 回覆你的方式,包括採用的角色與輸出的格式。它不會教導 Claude 任何有關程式碼庫的內容,也無法授予 Claude 執行任何操作的權限。

Claude Code 提供 5 種內建樣式。你的選擇會儲存在一個設定鍵 outputStyle 中。在 Claude Code v2.1.251 或更新版本中,工作階段中途切換的樣式會從下一則訊息開始套用。在 v2.1.251 之前,切換設定會先儲存,但在你清除設定前都不會套用。這項差異是舊版功能指南中仍存在大部分混淆的原因。

在 VPS 上,這不只是外觀偏好。你會透過 SSH(secure shell)連線查看工作階段記錄,通常是在 tmux 視窗中進行。因此,Claude 說明的每一行都是你需要等待的內容,也會佔用固定大小的捲動緩衝區。

Output style 設定所在的位置

從 /config 選單中的 Output style 選擇樣式。Claude Code 會將選擇寫入目前工作的專案中的 .claude/settings.local.json。

/output-style 指令也能完成相同工作。執行 /output-style concise 以切換樣式,或不帶引數執行 /output-style,列出樣式並查看目前使用的樣式。此指令會寫入相同的 .claude/settings.local.json 檔案、不區分大小寫,也能在非互動模式中使用。此指令需要 Claude Code v2.1.269 或更新版本。因此,請在遵循任何指南前先確認目前執行的版本,本指南也不例外。本頁列出的版本已於 October 2026 檢查。

claude --version

您也可以手動設定此鍵。共有 4 個設定檔案可以存放此設定,範圍較小的檔案會覆寫範圍較大的檔案。

  • ~/.claude/settings.json 是使用者檔案。它會套用至該電腦上的每個專案。
  • .claude/settings.json 是專案檔案。此檔案會提交至 git,因此複製該 repository 的所有人都會套用此設定。
  • .claude/settings.local.json 是本機專案檔案。此檔案不會提交,且會覆寫上述 2 個檔案。/config 選單與 /output-style 指令會寫入此檔案。
  • 由 IT 團隊從系統路徑(例如 Linux 上的 /etc/claude-code/)部署的受管理設定,會覆寫其他所有設定。

此鍵的值是樣式名稱:

{
  "outputStyle": "Concise"
}

此值區分大小寫。內建名稱請寫成 Proactive、Concise、Explanatory 和 Learning。如果值與樣式名稱不完全相符,例如 concise,系統會安靜地套用 Default 樣式。

若只要套用至單一工作階段,請在命令列傳入相同的鍵。--settings 旗標接受路徑或內嵌 JSON 字串;在該次執行中,其值會覆寫設定檔案中的相同鍵:

claude --settings '{"outputStyle": "Concise"}'

選擇樣式的其他方式也各自需要最低版本:/output-style 指令需要 v2.1.269,VS Code extension 中的 Output styles 選單需要 v2.1.257。最可靠的設定方式是直接使用 outputStyle 鍵。任何指南中的螢幕擷取畫面與您看到的內容不一致時,請直接設定此鍵,再使用 /status 確認有效的設定來源。

新輸出樣式何時生效

在 Claude Code v2.1.251 或更新版本中,您可在工作階段中途透過指令、選單或設定檔切換樣式。切換後,樣式會從下一則訊息開始套用。無須清除工作階段。在 v2.1.251 之前,執行中的工作階段會維持啟動時使用的樣式;新樣式只會在下一次 /clear 或下次啟動時載入。

有一種情況在任何版本中都仍需要重新啟動。Claude Code 會在啟動時讀取樣式檔案。因此,如果您在工作階段執行期間建立或編輯自訂樣式檔案,請先重新啟動 Claude Code,再選取該樣式。在舊版建置中,或編輯檔案後,以下兩個指令可讓您從乾淨狀態開始,然後顯示已載入的內容:

/clear
/context

/context 會列出目前占用 context window 的內容,並依類別分組,其中包括 system prompt。請在每個樣式下,分別於新的工作階段執行此指令;system prompt 那一行就是比較的輸入側。這也是確認自訂樣式是否確實載入的最快方式。如需瞭解 context window 中各類內容的整體分布,請參閱 長時間執行 Claude Code 工作階段時 context 如何逐步填滿。

快取機制說明了樣式切換為何以這種方式運作。API 會從 prompt cache 提供重複請求的結果;該快取會比對每個請求的開頭,而 system prompt 正位於最前端。如果在對話中途重寫 system prompt,後續所有內容都會失效,因此下一個回合必須將完整歷史記錄重新處理為新的輸入。舊版會在工作階段啟動時固定樣式,以避免這項成本。目前的建置則會將新樣式的指示改以對話中的訊息傳送,因此切換後的請求仍可從快取讀取 system prompt 與先前的對話內容。無論採用哪種方式,切換樣式的成本都很低。

內建輸出樣式對轉錄內容的影響

  • Default 是 Claude Code 的一般系統提示,針對軟體工程工作撰寫。
  • Concise 會先提供結果。它省略前言與逐步操作說明,並在你要求詳細資訊前維持簡短回答。背後執行的工程工作不變。它不會縮短錯誤報告或安全警告,執行破壞性操作前仍會完整詢問。此樣式需要 Claude Code v2.1.237 或更新版本。
  • Explanatory 會在任務步驟之間加入教學性的「Insights」,說明採用某項實作決策的原因,以及你的程式碼庫目前使用的模式。轉錄內容會刻意變長。
  • Learning 會進一步分享這些洞察,接著要求你自行撰寫部分小段程式碼,並在檔案中以 TODO(human) 註解標示每個位置。
  • Proactive 會直接採取行動,而不是提出詢問。對於例行決策,它會做出合理假設,不會停下來等待確認。

請仔細閱讀最後一項,因為這是最容易被誤解的一項。Proactive 是系統提示中的指引,會改變 Claude 嘗試執行的內容。實際上哪些操作可以在不詢問你的情況下執行,仍由 permission mode 決定。對於持續在無人值守狀態執行的伺服器,這才是重要設定。相關內容請參閱 自動模式與 Claude Code 的 permission mode。

輸出樣式與 CLAUDE.md、hook 和 subagent 的差異

這些介面看起來都像是在告訴 Claude 應如何運作,但它們作用於不同層級。

  • 輸出樣式是 Claude Code 隨每個請求傳送的指示之一。它會套用到主要對話中的每個回應。
  • CLAUDE.md會在 system prompt 之後,以 user message 的形式加入。專案慣例與程式碼庫相關資訊應放在這裡。
  • --append-system-prompt會在單次呼叫中,將文字附加至 system prompt,且不會移除任何內容。這是輸出樣式的一次性版本。
  • hook是 Claude Code 在事件觸發時自行執行的 shell command。它由 harness 強制執行,因此無論 Claude 是否會自行選擇執行,都一定會執行。請參閱 Claude Code hook 能做什麼與不能做什麼。
  • subagent會使用自己的 system prompt 和自己的工具集執行。

只要進行簡短測試,就能在前兩者之間做出判斷。專案相關的事實應放在 CLAUDE.md,因為 Claude 必須知道這些資訊。措辭則應放在輸出樣式,因為這涉及回應的呈現方式。凡是每次都必須發生、不能交由模型決定的動作,都應使用 hook。每個介面所處的層級,是執行模型的程式本身的屬性,而不是模型的屬性;因此,樣式只能影響行為,hook 則能強制執行。

輸出樣式只套用到主要對話。subagent 不會繼承你的樣式,因為它會使用自己的 system prompt,開始另一個對話。當前對話的 fork 是例外,因為 fork 會完整繼承父對話的 system prompt。如果 subagent 的寫法不符合你的需求,請編輯該 agent 的檔案,而不是修改你的樣式。同一台主機上的第二個 Claude Code 工作階段也遵循相同界線:它會在啟動時自行讀取設定檔。因此,當你將工作交給與你並行執行的另一個工作階段時,收到的回應會採用該工作階段載入的樣式,而不是你的樣式。

如何撰寫自己的輸出樣式

自訂輸出樣式是包含 frontmatter 的 Markdown 檔案。將檔案儲存在主目錄下,即可在每個專案中使用;也可以儲存在 repository 內,讓樣式與程式碼一同保存。使用者目錄是 ~/.claude/output-styles/,專案目錄是 .claude/output-styles/。

mkdir -p ~/.claude/output-styles
cat > ~/.claude/output-styles/terse-ops.md <<'EOF'
---
name: Terse ops
description: Command first, explanation after, for SSH sessions
keep-coding-instructions: true
---

Lead with the command or the file change. Put the explanation after it, in two sentences or fewer.

Do not narrate what you are about to do. Report what you did.

When a command can fail, print the one check that proves it worked and say what a healthy result looks like.
EOF

啟動工作階段並開啟 /config。樣式會顯示在 Output style 清單中,旁邊是你撰寫的描述。如果沒有顯示,表示系統未讀取該檔案:請確認路徑;如果儲存檔案時工作階段已在執行,也請重新啟動 Claude Code。如果樣式只顯示檔名而沒有描述,表示 frontmatter 解析失敗,claude --debug 會顯示解析錯誤。除非 frontmatter 設定 name,否則檔名會成為樣式名稱。因此這個樣式稱為 Terse ops,而不是 terse-ops。

選取該樣式,或將金鑰設為完全相同的名稱,並保留相同的大小寫:

{
  "outputStyle": "Terse ops"
}

其中一個欄位會決定你的檔案是調整還是取代。keep-coding-instructions 預設為 false,表示自訂樣式會捨棄 Claude Code 內建的軟體工程指示,只依照你的文字執行。這些內建指示會告訴 Claude 如何界定變更範圍,以及如何驗證工作結果。如果你要建立的是寫作助理或資料分析工具,可以省略此欄位,因為這些情境不需要相關指示。對於仍會處理程式碼的用途,請設為 true;否則你會發現原本謹慎的工程代理程式突然不再檢查自己的工作。只有 Claude Code 的完整 system prompt 包含該區段,因此在較短的 system prompt 中,此欄位不會產生作用。將 CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT 環境變數設為 0,即可在任何模型上選取完整 prompt。如果你真正需要的不是不同的語氣,而是更嚴格地定義任務應投入多少工作,這應該透過工程指示處理,而不是修改樣式檔案:Ponytail skill 是一個完整範例,其中只有一條規則,會促使代理程式採用能運作的最小變更。

description 是 /config 選擇器在名稱旁顯示的文字。請以你在六個月後於兩個自訂樣式之間做選擇時,仍能理解的情境來撰寫它。

為什麼透過 SSH 時,精簡風格有所不同

在 VPS 上,您會透過本機終端機沒有的多層環境讀取工作記錄,而每一層都會讓冗長內容付出代價。

第一個因素是回捲緩衝區。在 tmux 中,每個窗格都會保留固定行數,由 history-limit 設定,預設值為 2000。較長的說明會更快填滿緩衝區,因此工作階段較早的內容會提早被移除,您想回捲查看的輸出也可能消失。若需要更多空間,請提高這個值:

echo 'set -g history-limit 20000' >> ~/.tmux.conf
tmux source-file ~/.tmux.conf

之後建立的窗格各自會保留 20000 行,但每個窗格都會增加記憶體使用量。已開啟的窗格仍會使用舊的限制,因為緩衝區大小會在建立窗格時固定。如果您仍在建立工作階段配置,請參閱在 VPS 的 tmux 中執行 Claude Code。

第二個因素是延遲。回應產生後會串流到您的終端機。在往返時間較高的連線上,您必須先等待冗長的前言逐字顯示,答案才會出現。

第三個因素是輸出權杖。每一行說明都會計入輸出費用。Explanatory 和 Learning 本來就設計得較長。Concise 則本來就設計得較短,因為它會指示 Claude 預設維持簡短回應。

不要相信任何人提供的百分比,包括本頁的數字。差異大小取決於您的提示、模型及要求執行的工作,因此請自行比較變更前後的結果。在兩個全新的工作階段中執行相同的實際工作,一個使用 Default,另一個使用 Concise,然後進行比較。狀態列是最容易使用的測量方式,因為 Claude Code 會將 JSON 物件透過 stdin 傳給您的指令碼,其中已包含風格名稱、最新回應的輸出權杖數量,以及工作階段目前累計的成本估計值:

cat > ~/.claude/statusline.sh <<'EOF'
#!/bin/bash
input=$(cat)
style=$(echo "$input" | jq -r '.output_style.name // "default"')
out=$(echo "$input" | jq -r '.context_window.total_output_tokens // 0')
cost=$(echo "$input" | jq -r '.cost.total_cost_usd // 0')
echo "style=$style out=$out cost=$cost"
EOF
chmod +x ~/.claude/statusline.sh

將 statusLine 設定指向該指令碼:

{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  }
}

現在,工作階段底部的狀態列會顯示目前使用的風格、最近一則回應的大小,以及截至目前為止的工作階段估計成本。out 只涵蓋最新回應,因此可顯示每個答案的長度。cost 會累計,因此每次執行結束時的數值就是變更前後的比較結果。請在清除前讀取這個數值,因為 /clear 開始新的工作階段時,成本會重設為 $0;同時請將它視為估計值,而不是實際帳單。該指令碼需要 jq,也就是命令列 JSON 剖析器,因此請先使用 sudo apt install -y jq 安裝它。如果狀態列維持空白,請手動執行指令碼並將一些 JSON 傳送給它,因為以非零狀態結束的狀態列不會顯示任何內容,也不會回報任何資訊。自訂 Claude Code 狀態列列出該物件中的其餘欄位。若要了解計費面向,而非工作階段面向,請參閱Claude Code 的權杖實際流向及追蹤 Claude Code 支出的工具。

如何確認實際載入的輸出樣式

請使用以下檢查方式,不要靠猜測。

  • /status 列出本次工作階段生效的設定來源,包括是否套用了組織管理的設定。
  • /context 會在內容視窗的分解資訊中,將已載入的系統提示顯示為一個類別。
  • claude doctor 在尚未啟動工作階段的情況下從 shell 執行,可列出安裝與設定診斷資訊,並回報無效的設定檔。

樣式未套用時,原因幾乎總是以下兩種之一。第一種是時機問題:在早於 v2.1.251 的 build 中,工作階段期間切換樣式會等到 /clear;而在任何 build 中,工作階段期間建立或編輯的樣式檔案都必須等到重新啟動後才會生效。第二種是優先順序:.claude/settings.local.json 會覆寫 .claude/settings.json,而這兩者都會覆寫 ~/.claude/settings.json。因為 /config 選擇器和 /output-style 命令會寫入本機檔案,所以團隊提交至 .claude/settings.json 的樣式,會在任何曾有人使用其中一者的電腦上遭到靜默覆寫。/status 會告訴你哪些檔案已載入,但不會指出哪個檔案提供該設定鍵,因此請開啟它列出的每個檔案,尋找 outputStyle。

JSON 語法錯誤會產生相同症狀,但修正方式不同。claude doctor 會指出無法剖析的檔案,建議先執行它,再檢查更複雜的問題。大小寫錯誤的值(例如 explanatory)仍是有效的 JSON,但會讓你使用 Default 樣式,因此也請檢查大小寫。

FAQ

為什麼 /output-style 命令停止運作?

在目前的版本中,該命令並未停止運作。/output-style 會列出樣式,/output-style concise 會切換至指定樣式,但此命令需要 Claude Code v2.1.269 或更新版本,因此舊版本不會提供此命令。執行 claude --version 查看目前版本。在任何版本中,您都可以從 /config 的 Output style 選取樣式,或在設定檔中設定 outputStyle 索引鍵。文件未指定此索引鍵的最低版本,因此直接設定該索引鍵,是值得記錄在個人筆記中的做法。

我變更了輸出樣式,但沒有任何變化。為什麼?

先確認版本。在 Claude Code v2.1.251 或更新版本中,工作階段中途切換的樣式會從下一則訊息開始套用。在 v2.1.251 之前,變更會先儲存,但只有在執行 /clear 或開始新的工作階段後才會套用。若您在工作階段期間建立或編輯自訂樣式檔案,則需要重新啟動,因為 Claude Code 會在啟動時讀取樣式檔案。若仍未套用,請確認值與樣式名稱完全相同,包含大小寫,然後執行 /status 查看載入了哪些設定檔,因為 .claude/settings.local.json 會覆寫 .claude/settings.json,而兩者都會覆寫 ~/.claude/settings.json。

Concise 輸出樣式能節省費用嗎?

它會讓輸出 token 朝您預期的方向變化,因為它會指示 Claude 預設維持簡短回應。實際節省幅度取決於您的提示與模型,因此應將任何已公布的百分比視為他人工作內容的測量結果。請測量您自己的結果:在新的工作階段中,分別使用各種樣式執行 /context,以測量輸入部分;接著分別使用各種樣式執行相同工作,並比較輸出 token 與預估費用。Concise 不會縮短錯誤報告或安全性警告,因此您最需要閱讀的內容仍會完整保留。

輸出樣式會改變我的 subagents 的寫法嗎?

不會。輸出樣式只套用至主要對話,因為 subagent 會使用自己的 system prompt 與工具集,開始獨立的對話。例外是目前對話的分支,因為分支會完整繼承父對話的 system prompt。若要變更 subagent 的回應方式,請編輯該 agent 自己的檔案。

輸出樣式能讓 Claude 不經詢問就執行命令嗎?

不能。輸出樣式是 system prompt 中的文字,因此只能影響 Claude 嘗試執行的操作。Proactive 樣式會讓 Claude 在例行決策中採取假設並直接行動,而它仍無法核准命令。您的 permission mode 會決定哪些操作可在不提示的情況下執行;讓工作階段持續在伺服器上執行前,應先確認此設定。