SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-28

Claude Code 输出样式:作用、设置与自定义

输出样式会修改 Claude Code 的系统提示词,影响每条回复的角色和格式。了解内置样式、v2.1.73 弃用与 v2.1.91 移除的命令,以及为何必须清除会话后才生效。

Claude Code 中的输出样式

Claude Code 中的输出样式是一组指令。Claude Code 会将其追加到系统提示词中。它会改变 Claude 回答您的方式,包括 Claude 承担的角色和输出内容的形式。它不会让 Claude 了解您的代码库,也不能授予 Claude 执行任何操作的权限。

Claude Code 内置五种样式。您的选择保存在一个设置键 outputStyle 中,该键只会在会话启动时读取一次。这一事实解释了该功能的大多数困惑:您在会话中途切换的样式会被保存,但在清除前不会生效。

在 VPS 上,这不仅是外观偏好。您通过 SSH(安全 Shell)连接查看会话记录,通常是在 tmux 窗口中进行。因此,Claude 叙述的每一行都需要您等待,也会占用大小固定的回滚缓冲区。

Output style 设置的位置

在 /config 菜单的 Output style 下选择样式。Claude Code 会将您的选择写入当前项目中的 .claude/settings.local.json。

独立的 /output-style 命令已不再存在。该命令在 v2.1.73 中弃用,并在 v2.1.91 中移除,因此当前版本执行它不会产生任何效果。阅读旧指南前,请先检查正在运行的版本。本页中的版本已于 2026 年 8 月检查。

claude --version

您也可以手动设置该键。4 个设置文件都可以包含此键,范围更窄的设置优先于范围更广的设置。

  • ~/.claude/settings.json 是用户文件。它对该计算机上的所有项目生效。
  • .claude/settings.json 是项目文件。该文件会提交到 git,因此所有克隆此存储库的用户都会应用该设置。
  • .claude/settings.local.json 是本地项目文件。该文件不会提交,并且会覆盖前两个文件中的设置。/config 菜单会写入此文件。
  • 由 IT 团队从系统路径(例如 Linux 上的 /etc/claude-code/)部署的托管设置会覆盖其他所有设置。

该键的值是样式名称:

{
  "outputStyle": "Concise"
}

如果只想对当前会话生效,请在命令行中传入相同的键。--settings 标志接受路径或内联 JSON 字符串,其值会在本次运行中覆盖设置文件中的相同键:

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

在该功能的演变过程中,菜单标签和斜杠命令都至少更改过一次。outputStyle 键从未更改。任何指南中的屏幕截图与您看到的界面不一致时,请直接设置该键,然后使用 /status 确认当前生效的设置源。

为什么新的输出样式在清除前不会生效

Claude Code 会在会话启动时构建一次系统提示词,输出样式也包含在该系统提示词中。因此,在会话运行期间更改设置只会保存该值,不会改变可见结果,因为当前会话仍会发送启动时构建的提示词。新样式会在下一次 /clear 或下次启动时加载。

/clear
/context

/context 会按类别显示当前占用上下文窗口的内容,其中包括系统提示词。在每种样式下分别启动一个新会话并运行该命令,系统提示词这一行就是比较的输入。它也是确认自定义样式是否实际加载的最快方法。要进一步了解上下文窗口中包含哪些内容,请参阅 Claude Code 长会话中的上下文如何逐渐占满。

该设置需要等待,而不是实时应用,这是有原因的。API 会从提示词缓存中处理重复请求。该缓存根据每个请求开头的内容进行匹配,而系统提示词正位于请求最开始的位置。如果在对话中途重写系统提示词,后续所有内容都会失效,下一轮请求必须将完整历史记录作为新输入重新处理。在会话开始时固定输出样式可以避免这项开销。切换样式本身很快,只需清除会话。

内置的每种输出样式会如何改变会话记录

  • Default 是 Claude Code 的常规系统提示词,面向软件工程工作编写。
  • Concise 会先给出结果。它省略前言和逐步叙述,并在您要求详细说明前保持回答简短。背后的工程工作不变。它不会缩短错误报告或安全警告,并且在执行破坏性操作前仍会先完整询问。此样式需要 Claude Code v2.1.237 或更高版本。
  • Explanatory 会在任务步骤之间添加教育性的“Insights”,说明为何采用某种实现方式,以及您的代码库已经使用了哪些模式。会话记录会有意变长。
  • Learning 更进一步。Claude 会分享这些见解,然后要求您自行编写代码的小片段,并在文件中每个位置使用 TODO(human) 注释标记。
  • Proactive 会让 Claude 直接执行操作,而不是提出询问。对于常规决策,它会做出合理假设,而不是停下来等待确认。

请仔细阅读最后一项,因为人们最容易误解它。Proactive 是系统提示词中的指导。它会改变 Claude 尝试执行的操作。权限模式仍决定哪些操作可以在不询问您的情况下实际运行;对于无人值守、持续运行的服务器,这才是重要设置。详见自动模式和 Claude Code 的权限模式。

输出样式与 CLAUDE.md、hook 和 subagent 的区别

这些机制看起来都是在告诉 Claude 应如何运行,但它们作用于不同层级。

  • 输出样式会添加到系统提示中,适用于主对话中的每个响应。
  • CLAUDE.md会作为用户消息添加到系统提示之后,用于记录项目约定和代码库事实。
  • --append-system-prompt会在单次调用中向系统提示追加文本,不会删除任何内容。它是输出样式的一次性版本。
  • hook 是 Claude Code 在事件触发时自行运行的 shell 命令。它由执行框架强制执行,因此无论 Claude 是否会主动选择运行,都会执行。请参阅 Claude Code hook 能做什么以及不能做什么。
  • subagent 使用自己的系统提示和工具集运行。

一个简短测试即可区分前两者。项目事实应写入 CLAUDE.md,因为 Claude 需要了解这些信息。措辞应写入输出样式,因为它决定答案的呈现方式。无论模型如何决策、每次都必须执行的操作,都应使用 hook。每个界面位于哪一层,取决于运行模型的程序,而不是模型本身。因此,样式只能影响输出,而 hook 才能强制执行。

输出样式只适用于主对话。subagent 不会继承您的样式,因为它会使用自己的系统提示启动独立对话。当前对话的分支是例外,因为分支会完全继承父对话的系统提示。如果您不喜欢某个 subagent 的写作方式,应编辑该 agent 的文件,而不是修改您的样式。同一台主机上的第二个 Claude Code 会话也遵循这一边界:它启动时会自行读取设置文件。因此,当您 将工作交给并行运行的另一个会话 时,对方返回的回复会采用该会话加载的样式,而不是您的样式。

如何编写您自己的输出样式

自定义输出样式是一个带有 frontmatter 的 Markdown 文件。将它保存在主目录下,即可在每个项目中使用;也可以将它保存在代码仓库中,使其与代码一起维护。用户目录是 ~/.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 列表中,并显示您编写的描述。如果样式未显示,说明系统没有读取该文件:请检查路径,并确认 --- frontmatter 块位于文件开头。除非 frontmatter 设置了 name,否则文件名会成为样式名称。因此,此样式名是 Terse ops,而不是 terse-ops。

选择该样式,或者将该键设置为完全匹配的名称,然后清空:

{
  "outputStyle": "Terse ops"
}

有一个字段决定您的文件是调整项还是替代项。keep-coding-instructions 默认为 false,这表示自定义样式会移除 Claude Code 内置的软件工程指令,仅依据您的文本运行。这些内置指令用于告诉 Claude 如何确定变更范围,以及如何验证工作结果。如果您要创建写作助手或数据分析师,可以省略该字段,因为这些场景不涉及上述内容。对于仍会修改代码的任务,请将其设置为 true;否则,您会发现一个原本谨慎的工程师突然不再检查自己的工作。如果您真正需要的不是不同的表达风格,而是更严格地定义任务应投入多少工作量,那么这应当写入工程指令,而不是样式文件:Ponytail skill 是一个完整示例,其中只有一条规则,却能促使代理执行可行的最小变更。

description 是 /config 选择器在名称旁显示的行。请根据您在 6 个月后需要在两个自定义样式之间进行选择的场景来编写它。

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 对象传给您的脚本,该对象已经包含风格名称和令牌计数:

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"
  }
}

现在,会话底部的状态栏会在活动风格旁显示已生成的令牌数,这正是您进行前后对比所需的信息。该脚本需要使用命令行 JSON 解析器 jq,因此请先通过 sudo apt install -y jq 安装它。如果状态栏仍为空,请手动运行脚本并向其传入一些 JSON,因为状态栏脚本以非零状态退出时不会输出任何内容,也不会报告错误。自定义 Claude Code 状态栏列出了该对象中的其他字段。如果您关注的是计费而不是会话信息,请阅读Claude Code 的令牌实际流向何处和跟踪 Claude Code 支出的工具。

如何检查实际加载的输出样式

使用以下检查项,不要凭猜测判断。

  • /status 列出本次会话生效的设置来源,包括组织托管设置是否正在生效。
  • /context 在上下文窗口明细中,将已加载的系统提示显示为一个类别。
  • claude doctor 在 shell 中运行且不启动会话时,输出安装和设置诊断信息,并报告无效的设置文件。

样式不生效时,原因几乎总是以下两种之一。第一种是您在会话中途修改了样式,因此请运行 /clear。第二种是优先级问题:.claude/settings.local.json 会覆盖 .claude/settings.json,而这两者都会覆盖 ~/.claude/settings.json。由于 /config 选择器会写入本地文件,因此团队在 .claude/settings.json 中提交的样式,在任何曾有人使用过该菜单的机器上都会被静默覆盖。/status 会告诉您最终生效的是哪个来源。

JSON 语法错误也会产生相同的现象,但修复方法不同。claude doctor 会指出无法解析的文件,建议先运行它,再排查更复杂的问题。

FAQ

为什么 /output-style 命令停止工作?

该命令已在 v2.1.73 中弃用,并在 v2.1.91 中移除,因此在 2026 年年中的版本中已不存在。运行 claude --version 查看当前版本。前往 /config 的 Output style 下选择样式,或在设置文件中设置 outputStyle 键。该键的生命周期比命令更长,因此直接设置该键才是值得记入个人笔记的操作。

我更改了输出样式,但没有任何变化。为什么?

输出样式属于系统提示词的一部分,而 Claude Code 会在会话启动时构建一次系统提示词。会话中途进行的更改会保存,但不会应用,因为正在运行的会话仍会发送启动时构建的提示词。运行 /clear 或启动新会话。如果仍未生效,运行 /status 查看哪个设置源优先,因为 .claude/settings.local.json 会覆盖 .claude/settings.json,两者都会覆盖 ~/.claude/settings.json。

Concise 输出样式能节省费用吗?

它会按预期减少输出 token,因为该样式要求 Claude 默认保持响应简短。具体节省多少取决于您的提示词和模型,因此不要直接采用公开发布的百分比;那只是他人工作中的测量结果。请自行测量:在新会话中分别使用每种样式运行 /context,测量输入部分;然后分别使用每种样式运行相同任务,并比较输出 token 数量。Concise 不会缩短错误报告或安全警告,因此您最需要阅读的部分仍会完整保留。

输出样式会改变我的子代理的写作方式吗?

不会。输出样式只应用于主对话,因为子代理会使用自己的系统提示词和工具集启动独立对话。当前对话的分支是例外,因为分支会完全继承父对话的系统提示词。若要更改子代理的响应方式,请编辑该代理自己的文件。

输出样式能让 Claude 无需询问就运行命令吗?

不能。输出样式只是系统提示词中的文本,因此只能影响 Claude 尝试执行的操作。Proactive 样式会让 Claude 在例行决策中直接假设并执行,而不是暂停询问,但它仍无法批准命令。权限模式决定哪些操作可以在不提示的情况下运行;在让会话持续运行于服务器上之前,应检查此设置。