CLAUDE CODE 配置手册 · 第 2 版 · 2026-09-09

/config 里的 56 个开关,以及一个「前提不问清就全推反」的教训

对应 Claude Code v2.1.266。第 1 版把一个全程放手、只用终端的用户推成了一整套保守配置,还推荐了他根本用不到的手机推送与远程接管 —— 这一版修正了那些结论,并把「为什么会推反」写进了正文,因为那比配置表本身更有用。所有取值、默认值与官方说明均从本机安装的程序内实读。

版本v2.1.266 面板项56 个 面板外6 个数据边界键 取证程序内实读
一句话结论:这些开关里只有 4 个真正需要判断,其余要么程序默认值就是对的,要么取决于两个前提 —— 你用哪些界面内容能不能离开本机。这两个前提问清之前,任何推荐都是猜的:同一份配置,对「终端 + 内容不外传 + 全程放手」的人和对「手机 + 云端 + 逐步确认」的人,答案方向相反
前提

先说清这个菜单的机制,不然逐项讲了也用不上

菜单里的项分三种类型,交互方式和落盘位置都不一样。

TYPE / BOOLEAN

开关型

光标停上去按 空格回车 直接翻转,立刻生效。约四十项属于这类。

TYPE / ENUM

多选一型

左右方向键 在候选值间切换。部分项标了 pickToCommit,意思是要按回车才落盘,光标划过不算选中。

TYPE / MANAGED

受管型

值由外部决定、菜单里只读展示。共三项:Auto-update channel、Agents view、External CLAUDE.md includes。看到它们改不动不是 bug。

落盘位置绝大多数项写到 用户级 settings(跨项目生效),少数写到 项目级(标了 this directory 的那两项 Synced project memory 就是,且要下个 session 才生效)。你这次改的两项分别落在 ~/.claude/settings.local.jsonoutputStyle~/.claude/settings.jsonlanguage —— 位置不同但都是用户级,都生效。
一个容易踩的点:菜单里改的值和你手写进 settings 文件的值是同一份数据,但菜单不认识注释也不保留格式。你那份 settings.local.json 里有大量 NOTE 字段和中文说明,那些是普通 JSON 字段所以安全;但如果哪天你想加真正的 JSON 注释,改完菜单会丢。
前提 · 形态

同一套配置,在四种形态下分别怎么读

上面那节讲的是「值写到哪个文件」,这节讲的是「哪个形态会去读那个文件」。两件事都对了,配置才真的生效 —— 尤其网页版的云端 session,它压根不在这台机器上。

SURFACE / LOCAL

本机三形态:同一套文件

终端、VS Code 与 JetBrains 扩展、桌面 app,官方文档明说它们读同一套 settings 文件。所以在这三者之间,「配置放哪」这个问题没有分叉。settings.md

SURFACE / MENU

/config 只是终端界面的东西

官方文档:/config终端界面的一部分,VS Code 聊天面板与桌面 app 打不开它;要在那边改,就直接编辑设置文件,或走那些 app 自己的设置界面。settings.md

SURFACE / CLOUD

网页版跑在另一台机器上

Claude Code on the web 的云端 session 在另一台机器上运行,本机这些文件里只有一部分到得了它。这是本节所有差异的总根源。settings.md

This page covers Claude Code running on your machine: the terminal, the VS Code and JetBrains extensions, and the desktop app, which all read the same settings files. A cloud session on Claude Code on the web runs on a different machine and reads only some of them. code.claude.com/docs/en/settings.md · 原文
/config is part of the terminal interface. The VS Code chat panel and the desktop app don't open it; change settings there by editing a settings file or through those apps' own settings. code.claude.com/docs/en/settings.md · 原文
形态 × 配置源
配置源 / 能力终端桌面 appVS Code · JetBrains 扩展网页 cloud session
~/.claude/settings.json
用户级
读(本机三形态同一套) 读(同一套) 读(同一套) 不读 留在你自己的机器上
.claude/settings.json
提交进仓库的项目共享设置
读(同一套) 读(同一套) 读(同一套) 因为它是 clone 的一部分 —— 把某项提交进去,云端 session 里就生效
.claude/settings.local.json
项目本地设置
读(同一套) 读(同一套) 读(同一套) 不读 留在本机,而且这个文件不在 clone 里
受管设置
managed
文档未写明 文档未写明 文档未写明 只有服务端管理的设置到得了;你设备上的 managed-settings.json 或 MDM 配置到不了
/config 菜单 有 —— 它就是终端界面的一部分 打不开 VS Code 聊天面板打不开;JetBrains 文档未写明 打开的是你 claude.ai 设置里的 Claude Code 那一节,不是改某个值
hooks 同样的 hook 事件照常触发 同样的 hook 事件照常触发 同样的 hook 事件照常触发 同样的 hook 事件照常触发;但那边的 hooks 来自仓库与组织的服务端设置

本机三形态的三个 settings 文件格子之所以写成一样,是因为官方文档只给到「它们读同一套 settings 文件」这一个粒度,没有逐文件逐形态列举;表里不替它补。受管设置那三格与 JetBrains 的 /config 格标成「文档未写明」,同理 —— 原文只写了「设备上的 managed-settings.json 或 MDM 到不了云端会话」,以及「VS Code 聊天面板与桌面 app 打不开 /config」,没说这两件事在本机各形态上分别怎样。settings.md · hooks.md

云端 session 的四条原文
项目共享设置.claude/settings.json
读得到,因为这个文件是 clone 的一部分。把一项设置提交进去,它就在云端 session 里生效。
Shared project settings (.claude/settings.json): read, because the file is part of the clone. Commit a setting there to apply it in cloud sessions.settings.md · Settings in cloud sessions
用户级与项目本地设置~/.claude/settings.json · .claude/settings.local.json不读
两者都读不到:它们都留在你自己的机器上,而且 local 那个文件不在 clone 里。
User and project local settings (~/.claude/settings.json and .claude/settings.local.json): not read. Both stay on your machine, and the local file isn't in the clone.settings.md · Settings in cloud sessions
受管设置managed settings只有服务端那份
只有服务端管理的设置到得了云端 session;你设备上的 managed-settings.json 文件或 MDM 配置到不了
Managed settings: only server-managed settings reach a cloud session; a managed-settings.json file or MDM profile on your device doesn't.settings.md · Settings in cloud sessions
/config 在网页上打开设置界面,不改值两条路
在网页上敲 /config,打开的是你 claude.ai 设置里的 Claude Code 那一节,而不是改掉某个值。要给云端 session 改一项设置,只有两条路:在那个 environment 上设环境变量,或者把这个键提交进仓库的 .claude/settings.json
/config: on the web, opens the Claude Code section of your claude.ai settings instead of changing a value. To change a setting for a cloud session, set an environment variable on the environment or commit the key to the repository's .claude/settings.json.settings.md · Settings in cloud sessions
hooks 在四种形态下
事件照常触发,但来源换了hooks.md
Claude Code 在哪儿跑都触发同样的 hook 事件:终端 session、IDE 扩展、桌面 app,以及 Claude Code on the web。但云端 session 不读你本机的 ~/.claude/settings.json —— 那边的 hooks 来自仓库,以及你所在组织的服务端受管设置hooks.md
Cloud sessions on Claude Code on the web don't read your local ~/.claude/settings.json; hooks there come from the repo and from your organization's server-managed settings.hooks.md · 原文
Claude Code fires the same hook events wherever it runs: sessions in the terminal, IDE extensions, the Desktop app, and Claude Code on the web.hooks.md · 原文
这一节怎么用本机三形态之间不用操心 —— 同一套文件。真正的分叉只在网页版云端 session 那一列:它跑在另一台机器上,本机的用户级与项目本地设置一概到不了。想让一项配置在云端也算数,只有提交进仓库设成那个 environment 的环境变量这两条路。settings.md
本节取证口径与全文其它章节不同:上下各节是从本机安装的程序内实读,本节全部来自官方文档实读,两个出处见每条断言后的链接。文档没写的格子一律标「文档未写明」,不做推断填充。
第一组 · 输出与人格
GROUP A

决定「我说话什么样」的 4 项

这组是你这次动的地方,也是全菜单里对日常体感影响最大的一组。

Output style已设 Concisedefault / Proactive / Concise / Explanatory / Learning / +自定义
切换我的回话人格。选中的那一档会把一整段行为指令注进我的系统提示,并且原文写明「与别处的沟通或格式指导冲突时,本档规则优先」—— 所以它的效力高于你 CLAUDE.md 里的沟通风格条款,是全菜单里唯一能压过你自己规则的开关。自定义档放在 ~/.claude/output-styles/*.md,你的 prose 就在那儿,会自动出现在候选里。
建议:Concise 常驻。它那六条几乎就是你 persona-core 里「禁止做」清单的逐条对应。写稿时临时 /output-style prose 切过去,写完切回来。
Language已设 简体中文任意语言名或 ISO 代码,如 ja;default = 英文
强制我用哪种语言回复。它不只是"倾向",是硬指令,且附带一条正字法要求(不许把带音标的字符降级成 ASCII)。注意它管的只有回复文本:代码标识符、commit message、工具输出不受影响。
建议:保持简体中文。你之前不设它也基本是中文回复,但那靠的是我读你 CLAUDE.md 的中文推断出来的倾向,不稳定 —— 尤其在跑 subagent、workflow 这些新开上下文的场景,子代理不一定继承那个倾向,而这个设置会。
Verbose outputon / off
开了以后工具调用的完整输出直接铺在对话里,不折叠。
建议:关。和 Concise 直接对冲,而且会大幅吃上下文。真要看某一条的全文按 Ctrl+O 单独展开就行,不必全程开着。
Default viewtranscript / chat / default
启动时默认停在哪个视图。chat 是精简对话流(隐掉工具细节),transcript 是完整流水,default 交给程序判断。
建议:default。你的活儿是长任务产线,需要随时看到工具在干什么,chat 模式会把判断依据藏起来。
第零组 · 前提
PREREQUISITE

这两个问题决定一半开关的答案,而它们在磁盘上看不出来

观测能告诉你「他怎么干活」,但告诉不了你「他用哪块屏幕、愿不愿意让内容出去」。猜的代价不是推荐不够优,是推荐一堆他用不到的东西。

前提 A · 你实际用哪些界面

终端 CLI / IDE 扩展 / claude.ai 网页 / 手机 App / 桌面 App。不是「装了哪些」,是「真的在用哪些」。

不用这个这些键直接归零,不必问
手机 AppinputNeededNotifEnabledagentPushNotifEnabled
claude.ai 网页 / 云端 sessionremoteControlAtStartupremoteHomeSettingsremoteTools.allowUnattendedServingattribution.sessionUrl
IDE / 桌面 AppautoConnectIdeautoInstallIdeExtensiondiffTool 的 IDE 档

前提 B · 内容能不能离开本机

这一条不是「你信不信任云」,是一个可执行的开关组:有 6 个键控制内容外发,而它们全都不在 /config 面板上,只能写 settings 文件。

更麻烦的是:这 6 个键的程序默认值全部未确证。也就是说「不动它」不等于「关着」—— 想要关,必须显式写。清单见数据边界键那一节。

反向命名disableClaudeAiConnectors 要写 true 才是关。照着别的键的模式写 false,等于允许。
为什么这一节排在最前面第 1 版是先做用量观测、再按观测推荐,前提完全没问 —— 结果给一个只用终端的人推了「开手机推送」和「开机就开远程接管」。那两条不是「建议不够好」,是根本不存在的功能对他而言。顺序错了,后面做得再细也是白做。
核心教训

「要求我严谨」和「他想亲自确认」是两件事,混了就全反

这是第 1 版推错的根因,也是这份手册最值钱的一段。它不只适用于配置,适用于任何「从用户写下的规则推测用户偏好」的场合。

推不出自主度

纪律文本

用户写在规则文件里的那些话:验证过再报告举证责任在写入那一刻不静默删除共享资源未经确认禁改防火墙

它们管的是我的严谨程度。「你必须验证过才能说做完了」是对执行质量的要求 —— 它完全不意味着这个人想坐在屏幕前逐个点确认框。

第 1 版恰恰把这些读成了「他想全程参与」,于是一路推保守值。

这才是自主度

行为证据

只看他实际怎么跑:启动实参里有没有 --dangerously-skip-permissionsbypassPermissionsskipDangerousModePermissionPrompt 是不是 true;deny / ask 规则各有几条;以及最有力的一个 —— 监督密度

监督密度=每条用户发言换来多少次工具调用。这个数字骗不了人:说一句话让它跑 40 步的人,和每两步就要过问一次的人,需要的是相反的配置。

本机实测的自主度画像
10 / 10
放手型(hands-off)
四项硬证据全部命中
1 条
每 session 用户发言中位数
说一句就走开
40 次
每 session 工具调用中位数
≈ 每条发言 14.8 次
0 / 0
deny / ask 规则条数
什么都不拦、什么都不问
true
skipDangerousModePermissionPrompt
主动关掉了危险模式提示
50%
≥15 步/发言 的 session 占比
一半以上是纯放手
最刺眼的一条翻转askUserQuestionTimeout 第 1 版被我列成红线,说必须保持 never —— 方向是反的。对一个放手型用户,never 意味着「我一提问就无限期等下去」,而他早就走开了 ⇒ 无人值守的长任务会静静停死在提问处。正确答案是给个超时(5m),配合「真需要裁决时才喊人」的机制。程序默认值恰好是 never,所以这一项不显式改就一直踩着
但放手 ≠ 什么都放行自主度管的是要不要打断他,数据边界管的是内容能不能出去。一个极度放手的人完全可以在数据边界上极严 —— 本机就是这样:全程 bypass,同时要求任何内容不外传。把 hands-off 当成外发类键也放行,是第二种推错方式。
GROUP A · 展开

六档人格,各自到底注了什么进去

菜单里每档只有一行说明,但实际注入的是几百字的行为指令。下面是各档真正管的事,以及它跟你现有规则的相容性。

1 · Default 不注入

字面意义上的空档 —— 程序内部它的值就是 null,不追加任何人格指令,只跑基础的软件工程行为。

对你:冗余。你 CLAUDE.md 里写的沟通规范已经比它细得多,选它等于白占一档。

2 · Proactive 与你的规则冲突

六条指令:立刻动手、少打断、不要进 plan mode 除非用户明确要求、把纠偏当正常输入、不做破坏性动作、不外泄数据。还附带一条特殊的「等待提示」:如果只剩等后台任务,立刻结束回合不要轮询。

对你:不建议。第 3 条和你 change-workflow 里「不确定性高档必须先走澄清→调研→Plan Mode→审核」正面冲突;「少打断」也和你自己记下的那条节奏反馈(别抢节奏、别催 commit)反向。

3 · Concise 你的选择

六条:结论先行、砍叙述留实质、简单问题一到三句、去掉对冲话术、但被要求详说时必须给全且绝不为简洁牺牲正确性(报错、失败测试输出、安全告警、破坏性操作确认一律保留全文)。

对你:最贴。后两条是关键 —— 它不是"少说话"档,是"不说废话"档。你担心的"会不会漏掉我要的细节",它自己写明了不会。

4 · Explanatory 场景档

在完成任务之外附带讲解代码库与实现选择,用一个 ★ Insight 分隔块把 2-3 条要点框起来,写代码前后各来一次。明确允许为此超出正常长度限制

对你:接手陌生代码库时值得临时开。常驻不合适 —— 它讲的是"这个代码库里的门道",你自己的项目不需要人给你讲。

5 · Learning 教学档

生成 20 行以上代码且涉及设计决策、有多种合理解法的业务逻辑、关键算法或接口定义时,停下来让你手写 2-10 行,并且会在 TodoList 里专门插一条「请人类输入某决策」。

对你:不建议。你是在跑生产线不是在练手,这档会把日更节奏切碎。

6 · prose 你自建的

你写的写作人格:段落散文、正文禁 bullet 与编号、并列关系用自然语言消化、加粗一段最多一处、禁六个填充语、结尾不许附「我做了什么」的汇报段,且要求稿子落文件的同时把全文打在回复里。

对你:按任务临时挂。别设常驻 —— 工程排障时禁 bullet,会把"三个候选原因 + 各自判据"强行摊成散文,反而更难读。

补一条你可能想知道的自定义档的 frontmatter 支持 keep-coding-instructions 这个字段。五个内置档全都设了它(保留软件工程基础指令),而你的 prose.md 没设 —— 所以挂 prose 时我会丢掉一部分工程行为基座,这正是你要的(那档明确写了"你现在的职责是写文章不是完成软件工程任务")。但也意味着:挂着 prose 别让我改代码
第二组 · 自主度与权限
GROUP B

决定「我什么时候该停下来问你」的 7 项

这组是全菜单里风险最高的一组 —— 三条红线中有两条在这里。

Default permission modedefault / plan / acceptEdits / dontAsk / auto
新 session 默认落在哪个权限档。程序里完整的权限模式共六个,但菜单刻意把 bypassPermissions 从候选里剔掉了 —— 它只能靠启动参数或运行中手动切,不允许设成默认。你现在这个 session 就跑在 bypass 下,所以你在菜单里看不到它、也别去找。
建议:不动它。你实际靠启动实参跑 bypassPermissions(进程里能直接看到 --dangerously-skip-permissions),而菜单把这个值排除在外 ⇒ 在菜单里设任何别的值,都只是给一个用不上的档位赋值,还可能和启动实参打架。真正该承载你那些服务器红线的不是这个档位,是 hook 与 permissions.deny —— 确定性拦截,不依赖你每次去点确认。你现在 deny/ask 各 0 条,那才是值得补的地方。

原第 1 版建议(保留以示对照):你的 security.md 有一条硬红线是「未经用户确认禁止修改防火墙规则」、「不静默删除共享资源」—— 那些拦截靠的就是权限询问这一层。把默认档提到 dontAsk 等于把闸拆了,而你自己在 change-workflow 里写过「闸被拦下时不许调阈值,调阈值等于拆闸」。
Question auto-continue timeoutnever(默认) / 60s / 5m / 10m第1版判反了
官方说明:空闲多久后,用「目前已选中的答案」自动往下跑。默认是 never —— 官方原文特别注明「只有显式设成 60s/5m/10m 才会自动续跑」。
建议:5m。这一项取决于你是不是在旁边,不取决于你的纪律有多严。第 1 版我按「规则里写了必须先澄清」推出 never,那是把两件事混了 —— 澄清纪律说的是「重要决策要你定」,而 never 的实际后果是你走开之后任务停死在提问处,连不重要的问题都在等。放手型画像下(每 session 发言 1 条、跑 40 步),给个 5 分钟窗口才是对的:你在旁边就照常答,不在就继续跑。代价说清:偶尔会自己选一个你本想亲自定的选项。
Thinking modeon / off
是否默认开启扩展思考。关掉后仍可用 think 类关键词临时触发。
建议:开(默认就是开)。你的活儿里有大量选型、诊断、多约束权衡,这些场景关思考等于自降一档。
Fast modeon / off ·(菜单里带当前模型名)
Opus 的加速输出档。它不换小模型 —— 仍然是 Opus,只是吐字更快。菜单项的标签会动态带上当前模型名。也可以用 /fast 随时切。
建议:按场景手动切,不必常驻。写代码、跑批量任务时开着舒服;做长链条推理(跨审、架构决策)时关掉更稳。
Use auto mode during planon / off ·(默认 on)
程序内的字段说明是:当 auto mode 可用时,plan mode 是否采用 auto mode 的权限语义(默认 true)。也就是说它不是"允许只读调研"那么无害,而是把 auto 这个权限档的放行规则搬进 plan 阶段。
建议:开,但知道自己在选什么。程序自己的策略表里把这一项的保守值标成 false —— 换句话说开着是偏放行的一端。对你划算的理由是 plan 阶段本来就该大量读代码(你 change-workflow 的「调研」阶段),关掉会被确认淹没;但如果哪天你在陌生仓库里跑 plan,把它关掉更稳。
Claude-proposed goalsauto / alwaysAsk / disabled
我是否可以自己给长任务提出并登记目标。
建议:alwaysAsk。你有 Todolist.md 那套自己的待办纪律(todolist-sync 规则),两套目标系统各写一份会打架。让它每次问一声,你决定要不要让它插手。
Dialog expirydefault / 60s / 5m / 10m / never
程序内的字段说明限定得很具体:转发到远程客户端的权限/用户弹窗的最长存活时间。所以它管的不是你眼前终端里的确认框,而是 Remote Control / 云端 session 把弹窗推到别处时那一份。
建议:default(等价于不过期)。程序策略表把这一项的保守值标成 never,说明"永不过期"才是安全端 —— 设成 60s 意味着一个推到远端的授权请求可能在你还没看到时就已消失,你会以为没人问过你。
第三组 · 上下文与记忆
GROUP C

决定「我记得多少、能退回多远」的 7 项

这组对你的长任务产线影响最大 —— 尤其是 checkpoints 和 usage limit 那两项。

Auto-compacton / off
上下文接近上限时自动压缩历史。压缩后我拿到的是摘要 + 未压缩的尾部,可以继续干活不必换 session。
建议:开。你 context-management 规则写的是「禁止主动 compact」「除非系统自动触发」—— 注意那条禁的是我手动去 /compact,不是禁这个兜底开关。关掉它的后果是撞上限时直接硬停,长任务当场断在半路。
Continue automatically at usage limiton / off
撞到用量上限时,自动等到额度恢复再继续,不需要你回来手动敲一下。
建议:开 —— 而且程序默认就是开,你不用动。你有一堆无人值守的长任务(渲染、批量转写、发布流水线)。程序策略表把保守值标成 off,那是给企业管成本用的;对你,off 的代价是任务在你睡觉时停住。
Rewind code (checkpoints)on / off
给文件改动打快照,可以整段回退到某个时间点 —— 不是 git,是在 git 之下更细一层的本地历史。
建议:开 —— 程序默认已是开,无需设置。你 git-workflow 里「回滚必须先确认三件事再操作」那套纪律,前提是有东西可回滚。checkpoints 给的是 commit 之前那段真空期的保险。
Precompute compactionon / off ·(灰度项)
提前算好压缩结果,等真撞上限时直接换上,省掉当场压缩那段等待。这一项挂在灰度开关后面,不一定出现在你的菜单里。
建议:看到就开。纯体验优化,没有语义副作用。
Session recapon / off
你离开一段时间回来时,给一段「这期间发生了什么」的小结。
建议:开。配合你并发多条线的习惯有用;而且它只在你真的离开过之后才出现,不构成日常噪音。
Synced project memory(本目录,下个 session 生效)on / off
读取组织级同步的项目记忆。注意两点:它是按目录生效的,且改完当前 session 不变,要重开。
建议:默认(开)即可,但别指望它。你的记忆体系是自建的文件树(主索引 + 专题文件 + 分桶),跟这个组织同步机制不是一回事,两者不会互相污染。
Synced project memory writeson / off ·(需先开读)
允许往组织同步记忆里。菜单标签会随状态变文字:没开读时显示「enable reads first」。这一项是 consent-gated,撤回权限有单独的确认流程。
建议:关。你的写入纪律(举证责任在写入那一刻、单一权威源、原子性)全靠你自己那套文件规范维持。多一个自动写入的通道,等于多一个没有取证约束的写入源。
第四组 · 多智能体与工作流
GROUP D

决定「我能不能一次派出一群分身」的 7 项

这组是烧钱最快的一组。它们控制的不是我说话的方式,而是我一次能开多少个我。

Dynamic workflowson / off
允许我把一个任务编译成脚本、扇出几十个子代理并行跑,再把结果收回来。开着不等于会自动用 —— 触发要么你明说,要么命中关键词。
建议:开。你已经在用(跨审、批量审计那类活儿),而且你自己的 change-workflow 里就有「并行」一节,规定可拆分任务按文件分工派子代理、一个文件只由一个 agent 改。这个开关就是那条规则的执行器。
Ultracode keyword triggeron / off ·(默认 on)
你在 prompt 里打 ultracode 这个词就自动开启工作流编排,不用另外说明。
建议:开,但记住这是个"暗门"。好处是省一句话;风险是你哪天在讨论别的事时顺口打出这个词,就会触发一次几十个代理的扇出。你知道它存在就行 —— 我在这里写出来,主要就是为了让你知道有这么个词。
Dynamic workflow sizeunrestricted / small / medium / large当前 medium
给单次工作流的代理数量定上限档。当前这个 session 的实际约束是 medium = 保持在 15 个代理以内,且它是指导性的不是硬限制:我的 prompt 明确要求你如果要求更大规模,就按你说的来。
建议:medium 保持。它的价值在于给了个默认刹车,你要更大规模只需一句话就能突破,不需要提前把闸放到最大。
Artifactson / off你有特殊情况
允许我把网页发布成 claude.ai 上托管的 Artifact 页面。
建议:开着不动,靠 hook 拦。这是全菜单最微妙的一项。你的 deck 交付铁律是「不给 claude.ai 的 Artifact 地址」,所以直觉上该关。但你已经在 PreToolUse(Artifact) 上挂了守卫 hook —— 那是精确拦截(调用时注入判据),关掉开关是粗暴阉割,会连带失去读取别人分享的 artifact、给页面配数据库那些能力。按你自己的判据「advisory 规则约八成遵循、hook 百分之百」,hook 已经在管这件事了,开关不必再动。
Agents viewon / off ·(只读)
子代理面板是否可用。这是三个受管只读项之一,菜单里显示状态但改不动 —— 它的值由下面两项聚合出来。
建议:无需操作。看到它灰着不是故障。
Open agents view by defaulton / off
启动时直接停在子代理面板而不是对话流。
建议:关。你多数时间是单线对话,只在扇出时才需要看面板。
← opens agentson / off ·(默认 on)
左方向键直接唤出子代理面板。菜单里的标签会动态换成实际的箭头符号。
建议:开。一个快捷键,代价为零。工作流跑起来后看进度就靠它。
第五组 · 远程与通知
GROUP E · 已按前提重写

这组 8 项里,有 6 项对纯终端用户根本不存在

第 1 版逐项给了「建议开 / 建议关」,那是在给用不到的功能调参。前提问清之后,正确动作是把它们判成「不适用」,而不是给个值。

Push when actions required默认 false不适用
官方说明:有权限提示或问题在等你时,推送到手机
不适用 —— 不用手机端,这个开关无处可去。第 1 版建议「开」,理由是「放手型最需要它」;那个理由本身没错,但前提是有手机端接收。替代方案:靠上面那条 askUserQuestionTimeout=5m 让任务自己往下走,而不是靠喊人。默认已是 false,不必写。
Push when Claude decides默认 false不适用
官方说明:允许 Claude 主动推送手机通知。
不适用,同上。这一项我在两版里给过相反建议(先「关」,后「开」),两次都没意义 —— 争论一个不存在的接收端要不要收,本身就是前提没问清的症状。
Enable Remote Control for all sessionsremoteControlAtStartup · 默认未确证已显式关
官方说明:每个 session 自动启动 Remote Control 桥,让你从别处接管。
已写 false。不用网页/手机/桌面端 ⇒ 接管端不存在。这一项之所以要显式写而不是「不管它」,是因为它的程序默认值未确证 —— 「保持关」如果靠默认,可能保持成开的。你已经有 ssh + tmux 那条更可控的路。
Unattended commands from cloud sessionsremoteTools.allowUnattendedServing · 默认 true已显式关
官方说明:设为 false 时,auto 模式的云端 session 在这台机器上跑任何命令都必须有人逐条批准,不管这台机器之前给过什么授权;project / local / --settings 里的值会被忽略,只有 managed 或 user settings 说得上话。
已写 false。这一项在两版之间来回过一次,值得说清为什么:第 1 版按「服务器红线」关掉 → 发现那是拿纪律推自主度,撤回 → 问清「完全不用云端 session」后再次关掉。三次的理由都不同,最后这次才成立:通道用不到,关掉零成本。注意它默认是 true,不写就是敞着的。
Use this machine's settings in cloud sessionsremoteHomeSettings不适用
云端 session 是否继承本机的 settings(规则、hooks、权限配置)。
不适用 —— 没有云端 session 需要继承。顺带说明它的方向:它是让云端受本机约束,不是让云端获得本机权限。将来真要用云端时,这一项该开。
Messages from your other sessionscrossSessionInbound · default / accept / hold / refuse已设 accept
你在别的 session 里的分身给这个 session 发消息时怎么处理。这一项和上面几条不同 —— 它管的是本机多个 session 之间,不需要手机或网页端,所以对你是真实有效的。
已设 accept。程序保守值列的是 refusehold,accept 是放行端 —— 你在知情下选的,理由是分身之间自己对话正是你要的工作方式。附带好处:行为从「我说不清的 default」变成了明确的「直接收下」(那四个值的完整枚举定义我始终没从程序里确证,这是本手册唯一的待验项)。
Notifications / Local notificationspreferredNotifChannel · 默认 auto
用什么方式提醒你「该看一眼了」。注意这一项是本地终端通知,不是手机推送 —— 候选值里 terminal_bell / iterm2 / kitty / ghostty 全是终端能力,所以它对纯终端用户依然有效。
建议:保持 auto,或钉成 terminal_bell。放手型 + 长任务的组合下,这是你唯一真正会收到的提醒渠道。auto 会按终端类型自己挑;发现它不响就直接钉 terminal_bell。
Claude-drafted feedbackfeedbackDrafts · notify(默认) / quiet / off
官方说明:控制 SendFeedback 工具 —— notify 在草稿入队时显示一行提示,quiet 只显示页脚计数,off 完全禁用工具、永不入队。草稿只存本地,没有你明确同意不会发送。
建议:quiet,或保持 notify。它是纯本地队列所以不违反你的数据边界;但如果你不打算提交反馈,off 也合理。这一项属于「外发面」而非「打断面」,所以不随放手型画像自动放行 —— 该单独判。
这一组的通用判据看到一个开关,先问「它的另一端是什么」。另一端不存在的开关,正确处理是判成不适用,而不是给它一个值。给不存在的东西赋值不会出错,但会让配置表里塞满噪音,下次读的人(包括三个月后的你自己)分不清哪些是真在生效的决定。
面板之外 · 数据边界
NOT IN /config

这 6 个键控制内容会不会离开本机,而菜单里根本找不到它们

第 1 版整节漏掉了 —— 因为它是照着菜单逐项写的,而这些键不在菜单上。只翻菜单会漏掉整个数据边界维度。

两个共同陷阱一、这 6 个键的程序默认值全部未确证 ⇒「不动它」不等于「关着」,想关必须显式写。二、其中一个是反向命名disableClaudeAiConnectors 要写 true 才是关,照着别的键写 false 等于允许。
JSON 键关闭外发要写官方说明
autoUploadSessionsfalse把本机 session 镜像到 claude.ai 供只读查看(无远程控制)。这是这组里最直接的一条 —— 它管的就是你的会话内容要不要上传。
syncClaudeAiSkillsfalse与 claude.ai 同步 skill。你有 55 个自建 skill,其中不少含内部流程与主机信息。
syncClaudeAiPluginsfalse与 claude.ai 同步 plugin。
disableClaudeAiConnectorstrue为 true 时,claude.ai 的 MCP 云连接器不会被自动获取或连接。注意反向
attribution.sessionUrlfalse是否把 claude.ai session 链接追加到「由网页或 Remote Control session 创建的」commit 与 PR(默认 true);设 false 则省略 Claude-Session trailer 与 PR 正文链接。
channelsEnabledfalse受管组织开关:允许带 claude/channel 能力的 MCP 服务推送入站消息。Teams/Enterprise 默认关,Console 默认开(无 managed settings 时)。
一个不该关的例外
Artifact 工具enableArtifact · unset = 开保持开
Artifact 是发布到 claude.ai 的,按「内容不外传」的字面意思该关。但这里的正确答案是不关。
保持开,靠 hook 精确拦截。三个理由:一、真正要防的是「拿 claude.ai 链接当交付物」这个行为,而不是工具本身,那已经有 PreToolUse(Artifact) 守卫 hook 在管;二、关掉开关会连带失去读取别人分享给你的 artifact 这个纯输入能力;三、按你自己的判据 ——「advisory 规则约八成遵循、hook 百分之百」—— 已经有 hook 管住的事,不必再动开关。这是「精确拦截优于粗暴阉割」的典型。
怎么自己找齐这类键:它们的共同特征是官方说明里出现 claude.aiuploadsyncmirrorconnector。菜单只暴露「影响交互体验」的开关,「影响数据流向」的开关多半只在 settings schema 里 —— 这是翻菜单永远发现不了的一整类。
第六组 · 界面与工具链
GROUP F

剩下这三十项,先看值得动的 9 个

这一组绝大多数是偏好而非语义,默认值都是对的。但有 9 项要么会影响产出正确性,要么你可能不知道它存在。

Model受管枚举 · 候选随账号能力变
默认用哪个模型。菜单里只给几个常用档,要钉死某个具体 model ID 得用 /model(菜单里那行提示就是这么写的)。另外有个细节:如果切到需要额度授权的模型,菜单会直接拒绝并让你去 /model 走一遍授权。
建议:Default(recommended)。你现在跑的是 1M 上下文的 Opus 5,这正是 default 给你的。手动钉版本号的风险是模型迭代后你钉在旧的上 —— 你 context-management 规则里刚踩过一次「写死版本号的规则必然过期」。
Worktree base reffresh / head
我开隔离 worktree 干活时,从哪儿起点:fresh 是从远端最新的干净基线,head 是从你当前 HEAD。
建议:fresh —— 程序默认已是 fresh,确认别被改掉即可。你 git-workflow 里有一条实打实的伤疤:「曾误推预存 commit 导致线上版本混乱」,所以 push 前必须 git log origin/<branch>..HEAD 核对。选 head 会把你本地那些未推送的 commit 带进 worktree,正是那个故障的形状;fresh 从根上避掉。
Respect .gitignore in file pickeron / off
文件选择器是否跳过 .gitignore 里的东西。
建议:开。你的 .gitignore 里躺着本地 settings 与 .env 那类文件 —— 关掉它等于让含密钥的文件出现在补全候选里,增加误读误贴的面。你 security.md 有一条「含密钥的文件绝不入库」,这是同一件事的上游。
Time formatauto / 12-hour / 24-hour / 24-hour-utc
时间戳的显示格式。24-hour-utc 会统一按 UTC 显示。
建议:24-hour。你的机器散在多个时区(本机、遥控 Windows、洛杉矶、东京、上海、北京),日志和记忆里全是绝对日期。12 小时制在跨时区排障时会让你多算一步。至于 UTC 档 —— 除非你想让所有机器读数一致,否则本地 24 小时更直观。
Editor modenormal / vim
输入框的编辑键位。选了 vim 就有 normal / insert 两态。(程序内部还兼容 emacs 这个旧值,但会被折叠显示成 normal。)
建议:按你手感选,没有对错。唯一提醒:写长 prompt 时 vim 模式的 dd / ciw 确实快,但误触 :q 类命令的代价你自己权衡。
Diff toolterminal / auto
展示改动时用终端内置 diff 还是让程序自己挑(有 IDE 连着就用 IDE 的)。
建议:auto。你多数时候在纯终端里,auto 会落回 terminal;接上 IDE 时自动升级,不用手动切。
Claude in Chrome enabled by defaulton / off
浏览器扩展是否默认接入,让我能操作真实浏览器页面。
建议:关,按需开。你的浏览器里长期登着若干管理后台。默认接入意味着我随时能读那些已登录的页面 —— 需要时手动开一次,比一直开着好。
Auto-update channellatest / slow ·(只读)
受管只读项。程序内部会把配置里的 rc 显示成 slow;被策略禁用时直接显示 disabled。
建议:无需操作。你本机 2.1.266 就是 npm 上的 latest,说明这条通道本来就通。
External CLAUDE.md includestrue / false ·(只读)
第三个受管只读项:是否允许 CLAUDE.md 通过 @ 语法引入工作目录之外的文件。
建议:留意它是开的。你的全局 CLAUDE.md 结尾就有一行 @MEMORY.local.md 的个人覆盖层引用,靠的正是这个机制。它要是关了,那层覆盖会静默失效 —— 而"静默"是这里的关键词,不会报错。
剩下 21 项 · 纯偏好,看一眼就够
配置项取值它改变什么建议
Show tipson / off启动与空闲时的使用小贴士关(你早过了那个阶段)
Prompt suggestionson / off输入框里的候选 prompt 提示关(会干扰长 prompt 输入)
Reduce motionon / off减少动画与加载动效看眼睛舒适度,无副作用
Terminal progress baron / off终端标题栏的进度条开(长任务能瞄一眼)
Show status in terminal tabon / off ·灰度把状态写进终端标签页开(多标签并发时有用)
Show turn durationon / off每回合耗时开(判断哪步慢的最便宜量具)
Show message timestampson / off ·灰度每条消息的时间戳开(跨时区排障要)
Auto-scrollon / off新内容自动滚到底
Copy on selecton / off选中即复制看习惯(易误覆盖剪贴板)
Skip the /copy pickeron / off直接复制整段回复不弹选择器开(少一步)
Show last response in external editoron / off把上一条回复丢进外部编辑器看关(Concise 档下用不上)
Show PR status footeron / off底部常驻 PR 状态开(你有 Actions 流水线)
Auto-connect to IDEon / off外部终端里自动连 IDE关(你在纯终端)
Auto-install IDE extensionon / off自动装 IDE 扩展默认开即可
Themedark / light / 各自的 daltonized 与 ansi 变体配色。自定义主题走 /themedark;ansi 变体适合终端配色已定死的场景
Default permission mode见第二组default
Verbose output见第一组
Default view见第一组default
Agents view见第四组只读
Open agents view by default见第四组
← opens agents见第四组
还有一项你可能看不到:程序里有个 Teammate mode(候选 auto / tmux / iterm2 / in-process),控制多代理协作时子代理跑在哪 —— 独立 tmux 窗格、iTerm2 分屏,还是同进程内。它挂在灰度开关后面,你的菜单里不一定出现。如果出现了:你在 Linux 主控机上跑,选 tmux 最合适,因为你本来就用 tmux 管长任务。
收尾 · 最终状态
FINAL

实际写进 settings 的 11 项,以及故意没写的那些

「没写」和「写了」一样是决定。默认值就对的项不写,是为了让配置文件里剩下的每一行都是真实的判断。

已写入 · settings.json
为什么必须显式写
outputStyleConcise它那六条=个人沟通规范的逐条对应
language简体中文子代理与新上下文不继承「倾向」,只继承设置
askUserQuestionTimeout5m默认 never 会让无人值守任务停死在提问处
timeFormat24-hour机器横跨多时区,12 小时制排障要多算一步
crossSessionInboundaccept把「说不清的 default」换成明确行为;知情选择放行端
modelProposedGoalsauto已有自建待办纪律;放手型下每次批准=纯打断
autoUploadSessionsfalse数据边界组:这 6 个键程序默认值全部未确证,不显式写就不知道自己处在什么状态。disableClaudeAiConnectors 反向命名,写 true 才是关。allowUnattendedServing 默认是 true,不写就是敞着。
syncClaudeAiSkillsfalse
syncClaudeAiPluginsfalse
disableClaudeAiConnectorstrue
remoteTools.allowUnattendedServingfalse
attribution.sessionUrlfalse
remoteControlAtStartupfalse接管端不存在;默认值未确证故不能靠默认
故意没写 · 默认值已经是对的
默认值为什么不写
permissions.defaultModedefault靠启动实参跑 bypassPermissions,菜单排除该值,写别的只会打架
fileCheckpointingEnabledtrue已经开着
autoContinueAtUsageLimittrue已经开着
autoCompactEnabledtrue已经开着(⚠ 受 DISABLE_COMPACT / DISABLE_AUTO_COMPACT 环境变量压制,两者均未设)
worktree.baseReffresh已经是推荐值
orgMemoryWritesfalse已经关着
workflowSizeGuidelinemedium写了会让 /config 里那一行消失 —— 官方说明明确:settings 提供该键时菜单行隐藏
enableWorkflows按套餐近 30 天 Agent 386 + Workflow 347 次,说明现在就是开的
enableArtifact靠 hook 精确拦截,不靠关开关
两个 Push 开关false不用手机端,接收端不存在
复盘

第 1 版错在哪,三条可复用的判据

错法 01

拿纪律文本推自主度

「要求我严谨」被读成「他想亲自确认」。判据:只有行为证据(启动实参、skip 标志、deny/ask 条数、监督密度)能推自主度,写下来的规则不能。

错法 02

前提没问就开始推荐

给只用终端的人推手机推送和远程接管。判据:看到一个开关先问「它的另一端是什么」;另一端不存在就判不适用,不要给值。

错法 03

把保守值表当推荐清单

那张 64 条表是给受管企业终端锁定用的。判据:算完推荐再拿它自检「我在偏离吗」,偏离就说清代价 —— 不要照着它开单子。

还有一条独立的「未设」不等于「待改」。键没写进 settings 时行为由程序默认值决定,而默认值经常已经是推荐值。第 1 版把 12 项都标成「建议改」,实际只有 4 项需要动 —— 其中 checkpoints、额度自动续跑、worktree base ref 三项默认就是推荐值,催人去改已经对的东西是纯噪音。反过来也成立:allowUnattendedServing 默认 trueaskUserQuestionTimeout 默认 never,这两项不显式写就一直是不想要的状态。⇒ 先查默认值表,再决定问不问。
取证说明。配置项清单、每项取值范围与类型、六档人格的注入原文、39 个键的程序默认值、64 条保守值表、6 个数据边界键及其官方说明,全部从本机安装的 Claude Code v2.1.266 程序内实读,非记忆或文档转述。版本号与 npm latest 比对一致。自主度画像的六项数字来自本机 session 记录实测(近 14 天、120 份 >20KB 的 session)。
  1. 第 2 版修正了第 1 版三处方向性错误:askUserQuestionTimeout 由「必须 never」改为 5m;两个 Push 开关由「建议开/关」改为不适用;Remote Control 由「按需开」改为显式关。
  2. 第 1 版另有三处「建议改」实为默认值已符合(checkpoints、额度续跑、worktree base ref),已改标为「默认已是」。
  3. 56 个面板项中若干挂在灰度或组织策略开关后,实际菜单里未必全部出现;手册中已逐项标注「灰度」。
  4. 三个受管只读项(Auto-update channel、Agents view、External CLAUDE.md includes)在程序里回调为空实现,改不动是设计如此。
  5. 唯一待验项:crossSessionInbound 的四个候选值中,accept/hold/refuse 可确证,default 具体等价于哪种行为未从程序内读到。