SSD Nodes Learn 🎉 VPS $5.50/月起
指南 Matt Connor作者: Matt Connor

Claude Code 输出样式怎么设置与自定义

Claude Code 输出样式会修改系统提示词,影响每条回复。了解内置样式、会话记录变化,以及 v2.1.73 弃用、v2.1.91 移除旧命令的版本差异。

Claude Code 中的输出样式

Claude Code 中的输出样式是一组指令。Claude Code 会将其追加到系统提示词中。它会改变 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 会根据每个请求开头的内容,从提示词缓存中处理重复请求;系统提示词正好位于请求最前面。如果在对话中途重写系统提示词,后面的所有内容都会失效,因此下一轮请求必须将完整历史记录作为新输入重新处理。在会话开始时固定输出风格可以避免这项开销。切换风格本身很快,但需要清除会话。

内置输出样式对 transcript 的具体影响

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

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

输出样式与 CLAUDE.md、hook 和子代理的区别

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

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

一个简单的测试可以帮助你在前两者之间做出选择。项目相关的事实应写入 CLAUDE.md,因为 Claude 需要了解这些信息。措辞应写入输出样式,因为它决定答案的表达方式。无论模型如何决定都必须每次执行的操作,应使用 hook。

输出样式只适用于主对话。子代理不会继承你的样式,因为它会使用自己的系统提示启动独立对话。当前对话的分支是例外,因为分支会完整继承父对话的系统提示。如果你不喜欢某个子代理的写作方式,请修改该代理的文件,而不是修改你的样式。

如何编写自己的输出样式

自定义输出样式是一个带有 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;否则,您会发现一名原本谨慎的工程师突然不再检查自己的工作。

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

其次是延迟。响应生成后会流式传输到终端。在往返时延较高的网络连接上,较长的开场说明会占用等待时间。你需要先看着这些文本逐步显示,之后才能看到答案。

第三是输出 token。每一行说明都会计入输出费用。Explanatory 和 Learning 设计得更长。Concise 则设计得更短,因为它会指示 Claude 默认保持简短回答。

不要相信任何人提供的百分比,包括本页面提供的百分比。差异大小取决于你的提示词、模型和所要求的任务,因此应先自行测量,再比较结果。在两个全新的会话中运行同一个实际任务:一个使用 Default,另一个使用 Concise,然后比较结果。状态栏是最方便的计量方式,因为 Claude Code 会通过 stdin 将一个 JSON 对象传给你的脚本,其中已经包含样式名称和 token 计数:

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

现在,会话底部的状态栏会在活动样式旁显示已生成的 token 数。这正是进行前后比较所需的信息。该脚本需要使用命令行 JSON 解析器 jq,因此请先通过 sudo apt install -y jq 安装它。如果状态栏保持空白,请手动运行脚本并向其传入一些 JSON,因为状态栏脚本以非零状态退出时不会显示或报告任何内容。自定义 Claude Code 状态栏列出了该对象中的其他字段。如果你关注的是计费而不是会话,请阅读Claude Code 的 token 实际流向何处跟踪 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 查看当前版本。选择 Output style/config 中的样式,或在设置文件中设置 outputStyle 键。该键的生命周期比命令更长,因此直接设置该键才是值得记录在个人笔记中的操作。

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

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

简洁输出样式会节省费用吗?

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

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

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

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

不能。输出样式是系统提示词中的文本,因此只能影响 Claude 尝试执行的操作。主动式样式会让 Claude 在常规决策中默认采取行动而不是暂停,但它仍无法批准命令。权限模式决定哪些操作可以在不提示的情况下运行。让会话在服务器上持续运行前,应先检查该设置。