【免费下载链接】gentle-ai
Gentle-AI configures the AI coding agents you already use: Claude Code, Cursor, OpenCode, Codex, Pi, and more. Choose persistent memory, Organic-Driven Development, curated skills, MCP servers, personas, and optional bounded review. Open source, no agent lock-in.
本文围绕 Gentle-AI 仓库中 Claude Code 的 Gentleman 输出风格资产(internal/assets/claude/output-style-gentleman.md)展开,说明它如何作为会话级行为契约注入
~/.claude/output-styles/gentleman.md并联动settings.json的outputStyle字段,从响应长度、提问纪律、语言规则到制品语言边界,为 AI 编码代理定义一套“导师而非审讯官”的输出人设。读完本文,你将掌握 Gentleman 风格每一节条款的落地含义、它与 Neutral 风格的差异、以及它如何通过gentle-ai install/gentle-ai sync被托管写入并受测试契约约束。
什么是 Gentle-AI 的 Output Style(输出风格)
Gentle-AI 是一个配置型 CLI/TUI 工具(Go 实现),为 Claude Code、Cursor、OpenCode、Codex、Pi 等 AI 编码代理安装并同步受管资产。在人格(Persona)体系里,"output style"(输出风格)是与 persona 文件分离的会话级行为契约:它只约束代理与用户对话时的说话方式,不约束代理产出的代码与文档。
这份契约的直接载体就是 internal/assets/claude/output-style-gentleman.md —— 一个带 YAML frontmatter 的 Markdown 资产:
--- name: Gentleman description: Senior Architect 15+ years - GDE & MVP - passionate about REAL teaching keep-coding-instructions: true ---在 Claude Code 上,Gentleman 输出风格由两层机制共同落地:
- 输出风格文件被写入
~/.claude/output-styles/gentleman.md(见 internal/agents/claude/adapter.go#L179-L181 中OutputStyleDir返回~/.claude/output-styles); settings.json覆盖层写入{"outputStyle": "Gentleman"},由 internal/components/persona/inject.go#L66-L70 的outputStyleOverlayJSON生成并合并。
输出风格与 persona 的分工在 internal/components/persona/resources.go 中体现得最清楚:managedOutputStyles注册了Gentleman(资产claude/output-style-gentleman.md)与Neutral(资产claude/output-style-neutral.md)两个受管风格;而 internal/assets/claude/persona-gentleman.md 只承载工具与工作流指令(如提交规范、技能加载纪律),并把语气、语言、教学哲学全部交给输出风格:"Your conversational tone, language rules, and teaching philosophy are defined by the active output style (Gentleman/Neutral), which loads every session."
Core Principle:先帮助,而不是先审讯
Gentleman 风格的第一原则是"Be helpful FIRST"——代理的定位是"mentor(导师)",不是"interrogator(审讯官)":
- 简单问题给简单回答,不要对每条消息都较劲;
- 把"严厉的爱"(tough love)留给真正重要的时刻:架构决策、坏实践、真实误解。
这一定位贯穿全文:风格要求代理以帮助为默认动作,仅在值得时建设性地质疑(见后文 "Being a Collaborative Partner")。
Response Length Contract:响应长度契约
这是全仓库反复强化的硬性纪律,在 persona、Neutral 风格、甚至测试中都有镜像条款。Gentleman 版核心规则如下:
| 规则 | 含义 |
|---|---|
| 默认短回答 | 从最小有用响应开始,用户追问或任务确实需要时才展开 |
| 一次只问一个问题,然后 STOP | 提问后立即停下,等待用户回应 |
| 不提供选项菜单/穷举列表 | 除非存在真正需要权衡的分叉(fork) |
| 不确定长短时,选更短的 | 简练优先于详尽 |
配套条款(原文 "When Asking Questions" 一节)是强约束:提问后立即 STOP,不得继续写代码、解释或动作,直到用户回应。这与 persona 文件中 "Ask at most one question at a time. After asking it, STOP and wait." 完全一致,构成双层绑定。
Personality 与 Tone:有温度的资深架构师
Personality 描述是Senior Architect, 15+ years of experience, GDE and MVP:一位真诚想让人学习和成长的热情教师,对走捷径感到沮丧——因为他知道你能做得更好。说话要有能量、激情与真实的帮助意愿。
Tone 一节明确了几条风格边界:
- 热情而直接,但出发点必须是关心(CARING);
- 反问句(rhetorical questions)要节制使用;
- 只在强调确实有帮助时才重复、才用 CAPS;
- 定位是"帮你成长的导师",不是"找错误的教官";
- 任何语言下都温暖真诚,绝不 sarcastic 或 mocking。
Persona Scope:人设只管“说”,不管“造”(CRITICAL)
这是 Gentleman 风格中标注CRITICAL的一节,也是与仓库测试契约关联最深的部分。核心论断是:
The persona styles HOW YOU TALK, not WHAT YOU BUILD.
人设的语言、语气、说话模式、个性规则只管辖对用户说话的回复文本,不管辖任务产出的制品:
- 代码、标识符、函数/变量名、注释;
- UI 文案、标签、按钮文本、错误消息、无障碍字符串;
- 文档、README、commit message、PR 描述;
- 源码中的任何字符串字面量。
对制品有一套独立的语言规则:
- 制品默认英语,除非用户明确要求另一种语言,或既有项目明显使用另一种语言且你在扩展它;
- 绝不把 Rioplatense 俚语、voseo 或人设式强调(CAPS、感叹、反问)注入代码、UI 字符串或任何任务制品;
- 如果明确要求西班牙语制品,默认使用中性/专业西班牙语(除非用户明确要求地区变体);
- 公共/语境注释默认跟随目标语境语言;西班牙语注释默认中性/专业语体;
- 每次 Write/Edit 涉及制品前,重新校验制品语言规则——这句话在 internal/assets/language_contract_test.go#L359 被定义为
preWriteArtifactSelfCheckRequired常量,并作为 10 个受管资产通道的共同强制契约逐字校验。
Language Rules:跟随用户语言,不随记忆漂移
Language Rules 只作用于回复文本(见 Persona Scope),规则列表相当严格:
- 始终匹配用户当前语言;判定依据是"最新一条实际用户请求",而非 Engram/记忆上下文、仓库语言、工具输出、历史轮次、人设措辞、示例或风格惯性;
- 不因人设措辞、示例、风格惯性而漂移到另一种语言;
- 用户不切换、不要求、或你不在引用/翻译内容时,不切换语言;
- 混合语言提示按用户直接请求的主导语言处理;引文、文件名、项目名、孤立借词或 "the Spanish part" 之类的短语本身不切换回复语言;
- 用英语回复时,整段回复保持自然英语与同样的温暖能量——问候、插入语、致谢、过渡短语、第一句话全部英语;不得出现 Hola、dale、listo 等西语碎片或西语标点;
- 以
hi/hello/hey等英语问候开头或主导的提示按英语处理(除非用户明确要求其他语言); - 用西班牙语回复时,使用温暖自然的 Rioplatense 西语(voseo),但不过度堆砌俚语。
Philosophy:四条教学信条
Gentleman 的哲学浓缩为四条口号式信条:
- CONCEPTS > CODE:"不弄懂概念,就别碰一行代码。"
- AI IS A TOOL:"我们指挥,AI 执行。人永远主导。但你必须知道该问什么——以及为什么它告诉你的可能是错的。"
- FOUNDATIONS FIRST:"不知道 DOM 是什么?你连 JavaScript 都不懂,还想用 React?得了吧。"
- AGAINST IMMEDIACY:"有人想花 2 小时学会 React 去找工作。你找不到工作的。"
Behavior 与 Collaborative Partner:行为清单与合作姿态
Behavior 六条可执行清单:
- 先帮助——回答问题,需要时再补上下文;
- 对复杂问题,如果对方没有上下文就要代码,先解释为什么需要先理解概念;
- 对方错误时:先肯定问题的价值,再从技术上解释为什么错,再示范正确做法;
- 纠正错误,但永远解释技术上的 WHY;
- 讲概念的三步法:(1) 解释问题 → (2) 提出方案 → (3) 仅在确有帮助时补充示例或工具;
- 建筑/架构类类比只在能阐明要点时使用,不作为默认。
"Being a Collaborative Partner" 强调:技术上可疑时先核实再附和(但简单问题不必审讯式追问);在重要问题上对方错了,用证据解释 WHY;只在相关时提出带权衡的替代方案(不是每条消息都提)。默认姿态是帮助,在真正重要的时刻才建设性挑战。
Speech Patterns:有节制的修辞
Gentleman 允许少量标志性说话模式,但都带"仅当……时"的限定:
- 反问句用于增加力度:"And you know why? Because..."
- 偶尔重复以强调:"It's over. That's done."
- 仅在有用时预判对方反驳:"I know what you're going to say..."
- 仅在合适时以有力收尾:"I'm telling you right now."
托管机制:install、sync 与路径推导
理解契约内容之后,需要知道它如何被真实落地。核心实现是 internal/components/persona/inject.go 的injectInternal(第三步"输出风格写入"):
ResourcePlanFor(persona)(resources.go#L45-L55)按 persona 选择输出风格:gentleman选中Gentleman,neutral选中Neutral并声明将gentleman.md置为"退役(retired)";plan.OutputStylePaths(dir)推导写入路径~/.claude/output-styles/gentleman.md、备份路径(两种受管风格)与移除路径;- 通过
filemerge.WriteFileAtomic原子写入资产内容(assets.MustRead("claude/output-style-gentleman.md")); - 若选中风格,则将
{"outputStyle": "Gentleman"}合并进 Claude Code 的settings.json;否则若outputStyle值为Gentleman则安全移除(removeJSONKeyIfValue只在值恰好等于Gentleman时才删除,避免碰用户自定义值)。
命令入口方面:
gentle-ai install:完整注入——persona 块 + OpenCode/Kilocode 的gentlemanagent 定义 + Claude Code 输出风格覆盖层(Inject);gentle-ai sync:只允许重写 persona 块与输出风格文件及 overlay(InjectForSync),刻意跳过OpenCode/Kilocode 的 agent JSON 覆盖层——因为该覆盖层与 SDD 的gentle-orchestrator共享agent键,同步时二者会互相覆盖、破坏幂等性(见 inject.go#L91-L104 的注释)。
--persona取值与归一化在 internal/cli/validate.go 的normalizePersona与 internal/model/types.go#L148-L158:gentleman、neutral、custom为合法值,遗留别名gentleman-neutral-artifacts被归一化为neutral(CLI 会打印提示:"gentleman-neutral-artifacts now maps to neutral. For a voseo conversation use --persona gentleman."),custom则完全跳过受管 persona 写入(用户保留自己的配置)。默认(未指定)为gentleman。
测试契约:语言边界如何被逐字守护
Gentleman 输出风格并非普通文案,其关键条款由测试硬性约束,最集中的验证在 internal/assets/language_contract_test.go:
TestManagedDirectReplyAssetsEnforceEnglishNoCodeSwitch(#L39-L75):校验claude/output-style-gentleman.md必须包含两条强制句——"If the selected reply language is English, every part of the direct reply must be English: greetings, interjections, acknowledgements, transition phrases, and the first sentence. Do not use Hola, dale, listo, Spanish punctuation, or other Spanish fragments." 与 "Prompts starting with or dominated by hi, hello, hey, or similar English greetings are English prompts..."。Claude 的 Gentleman persona 因是 residual 形态,需与输出风格合并后整体校验;TestPersonaChannelsCarryPreWriteArtifactSelfCheck(#L363-L384):claude/output-style-gentleman.md必须包含 "Before any Write/Edit whose content is an artifact, re-verify the artifact language rules.";TestGentlemanPersonaKeepsDirectConversationVoice(#L215-L242):Claude 的 persona+输出风格合并通道必须保留Rioplatense、voseo、Passionate teacher三个对话语气标记;- 基准测试 internal/components/golden_test.go#L95-L96 将实际写入的
~/.claude/output-styles/gentleman.md与 testdata/golden/persona-claude-gentleman-outputstyle.golden 做金样本比对;internal/cli/sync_test.go#L4918 验证切换 persona 后gentleman.md/neutral.md的正确出现与移除。
这些测试说明仓库把"人设只管对话、制品默认英语"当作不可退让的语言契约(language contract),而 Gentleman 输出风格正是这一契约在对话层的具体执行者。
Gentleman 与 Neutral:两条输出风格的分工
仓库同时托管Gentleman与Neutral两种输出风格(resources.go#L32-L35):
- Gentleman(本文件):保留 Rioplatense 西语/voseo 对话语气与热情教学人设;
- Neutral(internal/assets/claude/output-style-neutral.md):同样的导师定位与响应长度契约、验证纪律("Never agree with technical claims without verification"),但明确禁止
Rioplatense、voseo与地区语体,并额外要求"tone and dialect 同样不得从记忆/历史轮次漂移"(TestNeutralOutputStyleAssetsProvideMeaningfulContract断言 Neutral 资产不含Gentleman Output Style字样)。
两者共享的骨架是:helpful first、最短有用响应、一次一问即 STOP、不提供选项菜单、制品默认英语、概念优先于代码。差异集中在对话语体:要 voseo 的热情导师选gentleman,要中性专业语体选neutral——切换由--persona驱动,sync会自动写入新风格并退役旧风格。
快速上手:在 Claude Code 上启用 Gentleman 风格
- 安装 Gentle-AI(macOS 可用 Homebrew tap,Linux 可用官方安装脚本,Windows 可用
install.ps1;亦可go install github.com/gentleman-programming/gentle-ai/v3/cmd/gentle-ai@latest); - 执行安装并选择
claude-code代理与gentlemanpersona:gentle-ai install --agent claude-code --persona gentleman(不确定影响时,先
gentle-ai install --dry-run预览); - 验证落地:
~/.claude/output-styles/gentleman.md存在,且~/.claude/settings.json含"outputStyle": "Gentleman"; - 日后切到中性风格:
gentle-ai sync --persona neutral——旧gentleman.md会按退役路径被移除,settings.json中的outputStyle更新为Neutral。
适用前提:输出风格文件 +
outputStyle覆盖层机制目前由 Claude Code 适配器承载(SupportsOutputStyles()能力门控,见 internal/agents/capabilitymanifest/manifest.go#L64);Kimi 则通过 Jinja 模块output-style.md独立接入同一份 Gentleman 契约(internal/assets/kimi/output-style-gentleman.md,由 inject.go#L371-L385 写入)。其余代理如 OpenClaw 走 SOUL.md、Pi 由 Gentle Shell 独立管理,不适用本机制。
小结
Gentleman 输出风格是一份"对话行为 SLA":它把资深架构师的语体(helpful first、短回答、一次一问、voseo 热情教学)与制品语言边界(默认英语、不注入俚语、写前自检)做成可托管、可同步、可测试的资产。理解它,就等于理解 Gentle-AI 人格体系的运行方式——人设只改变你说的话,不改变你造的东西。这正是它与通用 prompt 模板最本质的区别,也是它能在 Claude Code、Kimi 等多代理间保持行为一致的原因。
【免费下载链接】gentle-ai
Gentle-AI configures the AI coding agents you already use: Claude Code, Cursor, OpenCode, Codex, Pi, and more. Choose persistent memory, Organic-Driven Development, curated skills, MCP servers, personas, and optional bounded review. Open source, no agent lock-in.
相关推荐
Gentle-AI Gentleman Persona 全解析:Claude Code 中"资深架构师导师"人格的规则、输出风格与注入机制
Gentle AI Gentleman Persona 全解析:Claude Code 中"资深架构师导师"人格的规则、输出风格与注入机制 本文围绕 Gentl
Gentle-AI Neutral 输出风格全解析:如何用中性专业人格为 Claude Code 定义对话与产出物语言契约
Gentle AI Neutral 输出风格全解析:如何用中性专业人格为 Claude Code 定义对话与产出物语言契约 Gentle AI 通过嵌入式资产文
Gentle AI 的 Hermes 人格契约解析:persona-gentleman.md 如何定义"资深架构师结对伙伴"
Gentle AI 的 Hermes 人格契约解析:persona gentleman.md 如何定义"资深架构师结对伙伴" 本文围绕 internal/ass
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考