Output Styles
Output Styles 模块实现了 Claude Code 的 AI 响应风格定制系统。它从项目级(.claude/output-styles/*.md)和用户级(~/.claude/output-styles/*.md)目录加载 Markdown 风格文件,解析 frontmatter 元数据(name、description、keep-coding-instructions),将文件内容作为风格提示词注入 AI 响应生成。支持项目级覆盖用户级、插件风格扩展、以及编码指令保留控制。
职责与设计理念
职责说明
输出风格系统,从 Markdown 文件加载可定制的 AI 响应风格
设计理念
风格即 Markdown——用最自然的格式(Markdown + frontmatter)定义 AI 的表达方式。用户不需要学习 API,只需要写一个 .md 文件就能定制 AI 的输出风格。
架构决策
为什么用 Markdown 文件而不是 JSON/YAML 配置?
Markdown + frontmatter 作为风格定义格式
风格的核心是"提示词"——一段自然语言文本。Markdown 是最自然的载体,frontmatter 提供结构化元数据。用户可以用任何文本编辑器创建风格,无需学习配置语法。
⚖️ Markdown 解析比 JSON 慢,但 memoize 缓存消除了重复解析的开销。
文件清单
| 文件名 | 用途 |
|---|---|
| loadOutputStylesDir.ts | 风格加载器,从多级目录扫描并解析 Markdown 风格文件 |
使用场景
项目根目录有 .claude/output-styles/concise.md
自动加载为可选风格,用户可在 /config 中切换
keep-coding-instructions: true
风格提示词与默认编码指令合并,而非替换,保留代码生成能力
依赖关系
无外部模块依赖
关键代码片段
输出风格加载
const getOutputStyleDirStyles = memoize(
async (cwd: string): Promise<OutputStyleConfig[]> => {
const markdownFiles = await loadMarkdownFilesForSubdir(
'output-styles', cwd
)
return markdownFiles.map(({ frontmatter, content, source }) => ({
name: frontmatter['name'] || styleName,
description: frontmatter['description'],
prompt: content.trim(),
source,
keepCodingInstructions: parseBoolFlag(
frontmatter['keep-coding-instructions']
),
}))
}
) Markdown + frontmatter → OutputStyleConfig,memoize 缓存避免重复 I/O