mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
10192 字
27 分钟
Claude Code 实操入门:CLI 选项、/ 命令与文件层
2026-06-20

「当你敲下 claude 这个命令时,到底发生了什么?」

你可能已经用 Claude Code 写过代码、改过 bug,但每次启动时那一长串 --model--print--effort 选项到底在控制什么?进入交互后那些 /compact/resume 命令又各管哪一摊?claude doctorclaude mcp 这些子命令又是干什么的?Claude Code 在磁盘上留下了哪些配置文件、记忆文件和会话数据,它们又是怎么影响行为的?

我在 Ubuntu 26.04 上使用 Claude Code 2.1.195 做了一组实验,把整个链路拆成了三层:

  • 启动时的意图声明
  • 运行时的行为调整
  • 文件系统上的配置与数据

这篇文章记录了我的发现。需要说明的是,本文聚焦”操作层面”:每个选项和命令怎么用、读写哪些文件。对于会话持久化的内部机制(JSONL 事件流、resume 修复流水线、远端 ingress 同步),以及 CLAUDE.md 和 memory 的加载、prompt 拼装与缓存工程,本文在涉及这些主题时只讲操作要点,不展开内部实现。

注:可以使用 npm install -g @anthropic-ai/claude-code 安装最新版 claude-code

Claude Code 是什么#

在拆 CLI 选项和命令之前,先回答一个更基本的问题:Claude Code 到底是什么,它和 Cursor、GitHub Copilot 这些工具差在哪。

一句话概括:Claude Code 是一个跑在终端里的 Agent,能读写你磁盘上的文件、执行 shell 命令、调用子代理并行干活,而不只是补全你光标处的代码。

这个定位决定了它和 IDE 补全类工具的根本差异。Copilot 和 Cursor 的核心场景是”你在写代码,它在你旁边接话”,交互单位是单文件、单次补全。Claude Code 的交互单位是整个仓库和整条任务:你说”把这个服务的重试逻辑改成带退避的”,它会自己找文件、读代码、改多处、跑测试。前者是”打字员旁边的助手”,后者是”能自己动手的实习生”。

为什么主入口是 CLI 而不是 IDE 插件。Agent 要长时间运行、要跑 shell、要被脚本调用做自动化,这些场景天然适合终端。CLI 起来之后可以非交互地接进 CI、接进数据处理管线,这是 GUI 插件做不到的。当然它也有 IDE 扩展和 Web 形态,但 CLI 是功能最完整的入口,本文所有内容都以 CLI 为准。

理解了这个定位,后面三层交互模型就顺理成章了。Agent 要”可自动化、可预期、可排错”,于是它的能力被拆成了三层:启动时把边界条件声明清楚(CLI 选项),运行中能调头(/ 命令),状态都落在磁盘上可查可改(文件系统)。这三层不是随便分的,分别对应”可自动化""可控制""可观测”三个工程诉求。

全局速览#

在展开每一层之前,先看全貌。Claude Code 的交互能力分三层,每层有各自的职责和入口:

层级职责入口典型操作
CLI 选项启动时声明意图claude --model sonnet选模型、定权限、设输出格式
/ 命令运行时调整行为/compact/model压缩上下文、切换模型、回退轮次
文件系统持久化配置与状态~/.claude/.claude/CLAUDE.md项目记忆、会话存储、权限配置

三层的递进关系:声明意图 → 调整行为 → 持久化状态。下面逐层展开。

一、CLI 启动选项:启动时声明意图#

CLI 选项是你在启动 Claude Code 时传入的参数,它们的核心作用是预设会话的初始运行状态。这包括默认模型、工具调用的自动批准策略、输出风格等。这些参数只在启动时解析一次,作为初始配置生效;其中部分项(如模型选择)后续仍可通过设置或 / 命令调整。

1.1 选项全景#

claude --help 输出的选项有将近 50 个,按功能分六组:

分类选项一句话作用
模型与能力--model--effort--fallback-model--agent--agents选哪个脑子、想多深、挂了用谁顶、自定义代理
会话与上下文--continue--resume--session-id--fork-session--from-pr接着上回聊、从 PR 恢复
权限与安全--allowedTools--disallowedTools--permission-mode--safe-mode--dangerously-skip-permissions能做什么、不能做什么
输出与集成--print--output-format--json-schema--verbose--debug--max-budget-usd结果怎么交给你、花多少钱
工作区与环境--add-dir--worktree--bare--mcp-config--tools--settings在哪里干活、用什么配置
系统提示--system-prompt--append-system-prompt给 Claude Code 加规则

下面逐组进行实验与讲解:

1.2 模型与能力类#

--model 指定模型,可以传别名(sonnetopusfable)或全名(claude-fable-5)。

模型选择的原则:日常编码用 sonnet(快、便宜),复杂推理或架构设计用 opus(更谨慎、推理链更长),追求最强能力用 fable。对于简单任务(解释概念、格式化代码),模型之间的差异不明显,不必纠结。

--effort 控制思考深度,取值为 lowmediumhighxhighmax。注意部分模型不支持 max,会静默降级到 high,所以别拿 max 当稳定配置硬靠,效果可能不如你以为的那么强。

工作机制:effort 越高,模型在回答前花越多时间做内部推理(extended thinking)。对于简单问题,高 effort 可能判断”不需要展开”,输出反而更短;对于需要多步推理的问题,高 effort 才会体现为更完整的推导过程。不要用输出长度衡量 effort 的效果,要看推理深度。

实际使用建议:日常对话用 medium(默认),写代码和 debug 用 high,遇到特别棘手的问题再上 xhighmax

effort 的来源有几层:--effort 参数 > CLAUDE_CODE_EFFORT_LEVEL 环境变量 > 模型默认值。设环境变量是让 effort 按项目或按 shell 会话固定下来的常用做法。至于解析链的内部实现(状态字段、max 的会话级限制、降级规则),属于实现细节,本文不展开,入门阶段记住”五档加一句环境变量可覆盖”就够用。

--fallback-model 设置备用模型,只在 --print 模式下生效。当主模型过载或不可用时自动切换,可以传逗号分隔的列表按顺序尝试:

claude -p --model opus --fallback-model sonnet "hello"

主模型 opus 如果响应超时,就自动降级到 sonnet。

1.3 会话与上下文类#

这组选项管理”接着上回聊”的能力。它们的背后是一套会话持久化机制:每次对话都被记录在 ~/.claude/sessions/*.json(元数据)和 ~/.claude/projects/<hash>/<id>.jsonl(完整对话内容)中,恢复会话就是从这些文件加载数据(详见3.6 sessions 与 history)。

--continue-c)恢复当前目录下最近一次对话。它的做法是扫描 ~/.claude/sessions/*.json 找到 cwd 匹配当前目录且时间最近的会话,然后从 ~/.claude/projects/<path-hash>/<sessionId>.jsonl 加载完整对话历史。

# 第一轮:让 Claude Code 记住数字
claude -p "记住数字 42"
已记住数字 42。
# 第二轮:恢复会话并追问
claude -p -c "我上次让你记住的数字是什么"
根据我的记忆,你上次让我记住的数字是 42。

会话状态被完整保留了。Claude Code 在后台把每次对话存为 session,--continue 会自动找到当前目录最近的那一个。

--resume--continue 更精确,通过 session ID 直接定位 ~/.claude/projects/<path-hash>/<sessionId>.jsonl,也可以打开交互式选择器(数据来自 ~/.claude/history.jsonl 中的 prompt 记录)。--session-id 在启动时指定一个 UUID 作为会话标识,新会话的元数据和对话内容会写入对应的 ~/.claude/sessions/*.json~/.claude/projects/<path-hash>/<sessionId>.jsonl,适合需要精确追踪会话的自动化场景。--fork-session 配合 --resume 使用,复制源 jsonl 的对话内容到一个新的 session ID 下,相当于”另存为”,原会话不受影响。

1.4 权限与安全类#

这组选项控制 Claude Code 能做什么、不能做什么。权限规则存储在 settings.json 的 permissions.allow / permissions.deny 字段中(详见3.5 settings.json),CLI 选项在启动时与文件中的规则合并生效。

--allowedTools 自动批准列表,列出的工具调用时跳过权限确认,与 settings.json 中的 permissions.allow 合并。注意:它不是白名单,未列出的工具仍然可用,只是走正常权限流程。如果你需要严格限制可用工具,应该用 --tools(见1.6 工作区与环境类)。

--disallowedTools 拒绝列表,列出的工具会从模型的工具上下文中完全移除,模型无法调用它们。拒绝规则优先于所有允许规则,即使 settings.json 中有对应的 permissions.allow 也会被覆盖。比如禁止 Bash 执行:

claude -p --disallowedTools "Bash" -- "列出当前目录的文件"
当前目录下的文件:
README.md src/ package.json

Bash 被移除后,Claude Code 会改用 Read 工具或 Glob 工具来获取文件列表,而不是执行 ls 命令。这在只读审查场景下很实用。

如果你需要更精细的控制,--disallowedTools 也支持范围规则:Bash(rm *) 只拒绝匹配 rm * 的 Bash 调用,但保留其他 Bash 命令的可用性。

--dangerously-skip-permissions 跳过所有权限检查。名字本身就在警告你:只在沙箱环境里用。还有一个相关选项 --allow-dangerously-skip-permissions,它不会直接跳权限,而是让你在运行时可以切换到跳权限模式,更安全一些。--permission-mode 提供更细粒度的控制,可选值包括 manual(每次询问)、acceptEdits(自动接受文件编辑)、auto(自动判断)、dontAsk(不询问直接执行)、plan(只规划不执行)、bypassPermissions(等同 --dangerously-skip-permissions)。不传该参数时走默认行为,即 manual 的逐次询问。

auto 模式不是简单的”全允许”,而是用一个 LLM 分类器实时判断每次工具调用安不安全,判断不了就默认阻止(fail-closed),安全工具(Read、Grep、Glob 等)则直接放行。分类器的双阶段机制、危险规则的临时剥离、熔断回退,这些属于权限系统的实现细节,本文不展开。入门阶段记住”auto 是让一个分类器替你守门,守不住就回退来问你”即可。

排障时常要分清 --safe-mode--bare,两者都”关掉一部分东西”但范围不同:

选项关掉什么保留什么适用场景
--safe-mode所有自定义:CLAUDE.md、skills、plugins、hooks、MCP、自定义命令、agents、output styles、workflows、themes、keybindings认证、模型选择、内置工具、权限系统照常,admin 策略仍生效排查”是不是我的配置搞坏了”
--bare更激进:hooks、LSP、plugin sync、auto-memory、CLAUDE.md 自动发现、attribution、后台预取、keychain/OAuth 读取skills 仍可通过 /skill-name 解析,认证严格限于 API key脚本、容器等无交互的最小启动

--safe-mode 面向”关掉自定义保排障”,--bare 面向”最小依赖启动”。排查行为异常先用 --safe-mode,确认是配置问题后再逐个开回去。

Caution

--dangerously-skip-permissions 会跳过所有安全确认,包括文件删除和命令执行。只在你完全隔离的沙箱环境(无网络、无敏感数据)中使用。

1.5 输出与集成类#

这组选项控制 Claude Code 怎么把结果交给你,在非交互场景下尤其重要。

--print-p)是最常用的集成选项,让 Claude Code 输出结果后直接退出,不走交互式对话。配合 --output-format json 可以拿到结构化的完整信息:

claude -p --output-format json "1+1等于几"
{
"type": "result",
"subtype": "success",
"is_error": false,
"api_error_status": null,
"duration_ms": 3550,
"duration_api_ms": 3499,
"ttft_ms": 3545,
"ttft_stream_ms": 3447,
"time_to_request_ms": 54,
"num_turns": 1,
"result": "2",
"stop_reason": "end_turn",
"session_id": "b6128269-06e7-4a7f-8281-ed0a9c66970b",
"total_cost_usd": 0.11613,
"usage": {
"input_tokens": 23216,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"output_tokens": 2,
"server_tool_use": {
"web_search_requests": 0,
"web_fetch_requests": 0
},
"service_tier": "standard",
"cache_creation": {
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 0
},
"inference_geo": "",
"iterations": [],
"speed": "standard"
},
"modelUsage": {
"claude-opus-4-8": {
"inputTokens": 23216,
"outputTokens": 2,
"cacheReadInputTokens": 0,
"cacheCreationInputTokens": 0,
"webSearchRequests": 0,
"costUSD": 0.11613,
"contextWindow": 202752,
"maxOutputTokens": 32000
}
},
"permission_denials": [],
"terminal_reason": "completed",
"fast_mode_state": "off",
"uuid": "b0d681a9-ef9a-4b10-b9fb-f836dcac438e"
}

JSON 输出里包含了耗时、token 用量、费用、session ID 等元数据,对自动化流程和成本追踪很有价值。

--json-schema 进一步约束输出格式,让 Claude Code 按照 JSON Schema 生成结构化数据:

claude -p --output-format json \
--json-schema '{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name","description"]}' \
"介绍一个 Python 内置函数"

输出里大部分元数据字段(usagemodelUsage 等)和上一个示例一致,省略,只看有差异的部分:

{
"type": "result",
"subtype": "success",
"duration_ms": 36118,
"num_turns": 3,
"result": "{\"name\":\"lru_cache_intro\",\"description\":\"介绍了 Python 内置装饰器 functools.lru_cache 的基本用法、关键参数(maxsize/typed)、实用场景(昂贵计算/重叠子问题/不可变对象判等)、注意事项(可哈希要求/缓存清理/引用语义/Python 3.9+ 的 @cache 简写)以及自省方法(cache_info/cache_clear)。\"}",
"stop_reason": "tool_use",
"total_cost_usd": 0.25574,
"permission_denials": [],
"structured_output": {
"name": "lru_cache_intro",
"description": "介绍了 Python 内置装饰器 functools.lru_cache 的基本用法、关键参数(maxsize/typed)、实用场景(昂贵计算/重叠子问题/不可变对象判等)、注意事项(可哈希要求/缓存清理/引用语义/Python 3.9+ 的 @cache 简写)以及自省方法(cache_info/cache_clear)。"
},
"terminal_reason": "completed",
"fast_mode_state": "off"
}

可以看到,.structured_output 输出严格符合 schema 定义的字段和类型。把 Claude Code 嵌入数据处理管线时,不需要正则提取或后处理,直接拿到结构化结果。

1.6 工作区与环境类#

这组选项控制 Claude Code 的工作范围和运行环境。

--add-dir 允许 Claude Code 访问主工作目录之外的目录。默认情况下,Claude Code 只能操作启动时所在目录(及其子目录)的文件。加上 --add-dir 后,指定的目录也进入它的”视野”,同时会扫描并加载该目录下的 CLAUDE.md(详见3.3 CLAUDE.md):

claude -p --add-dir /tmp/other-project \
"列出两个目录下的所有文件"

--bare 启动极简模式(见 1.4 节说明)。

claude -p --bare "你好"
你好!有什么我可以帮你的吗?

--worktree 为当前会话创建一个独立的 git worktree,避免在主分支上做实验性修改。--mcp-config 加载 MCP(Model Context Protocol)服务器配置,读取指定 JSON 文件中的 mcpServers 定义,与 .mcp.json 和 settings.json 中的配置合并(详见3.8 MCP 配置)。--tools 直接指定可用工具集,比如 "Bash,Edit,Read" 只保留这三个工具,传 "" 则禁用所有工具。--settings 从额外文件或 JSON 字符串加载配置,成为 settings 层级中优先级最高的 flagSettings(详见3.5 settings.json),覆盖项目级和用户级设置。

1.7 系统提示类#

--system-prompt 完全替换默认系统提示,--append-system-prompt 在默认提示后追加内容。后者更常用,因为你不希望丢掉 Claude Code 的内置行为指令。

claude -p --append-system-prompt "所有代码注释用中文" \
"写一个快排函数"

追加的指令会叠加在默认提示之上。--append-system-prompt 适合给 Claude Code 加上项目特有的规则,比如”优先使用函数式风格”或”测试用 pytest 不用 unittest”。它在 prompt runtime 中走的是追加指令总线,涉及多级覆盖优先级,本文只讲操作层面,不展开内部处理。

1.8 CLI 选项的设计哲学#

回头看这六组选项,有一个共同的设计思路:能在启动时声明的,就不要留到运行时。模型选择、权限范围、输出格式、工作目录,这些参数在会话开始前就已经确定了,整个会话期间保持不变。这种”先声明后执行”的模式让 Claude Code 的行为可预期,也方便自动化。

1.9 子命令#

除了选项,claude 还接受子命令,用于执行一次性操作而非启动交互会话:

子命令作用
claude agents管理后台代理(查看、调度)
claude auth管理认证(登录、登出、查看状态)
claude doctor健康检查(检查自动更新器、MCP 服务器等)
claude mcp配置 MCP 服务器(add/list/remove/serve)
claude plugin管理插件(安装、卸载、列表)
claude project管理项目状态
claude install安装 Claude Code 原生构建
claude update检查更新并安装
claude setup-token设置长期认证令牌
claude ultrareview云端多代理代码审查
claude gateway企业认证/遥测网关
claude auto-mode查看自动模式分类器配置

其中 claude doctorclaude mcp 最常用。doctor 是排查环境问题的第一步,mcp 则是管理外部工具接入的核心命令。agentsauthinstallupdate 是个人日常会用到的;setup-tokenultrareviewgatewayauto-mode 偏企业或云端场景(长期令牌、云端多代理审查、企业网关、分类器配置),个人用户多数用不上,不用挨个试。

二、/ 命令:运行时的控制面板#

CLI 选项是”启动参数”,/ 命令是”运行时控制面板”。你没法在对话进行中改 --model--output-format,但可以用 /compact 压缩上下文、用 /model 切换模型、用 /permissions 调整权限。/ 命令弥补了 CLI 选项”一次设定不可更改”的限制,给 Agent 增加了运行时可调节的能力。

2.1 命令全景#

分类命令一句话作用
会话管理/clear/compact/resume/rewind重开、压缩、恢复、回退
上下文操作/context/add-dir查看”它现在知道什么”、加目录
权限调整/permissions运行时开放或收紧工具权限
模型切换/model对话中途换模型
调试与诊断/doctor/cost/debug查健康、查花费、查内部细节
工作流/init/review初始化项目、审查代码变更

下面逐类说明。

2.2 会话管理#

  • /clear:清空当前对话历史,重新开始。不会退出 Claude Code,只是在会话 jsonl 中写入一个清除标记,上下文重置。
  • /compact:压缩对话历史以释放上下文窗口。它读取当前 session 的 jsonl 全文,通过一次额外的 API 调用生成摘要,然后将压缩结果追加写入同一 jsonl(详见3.6 sessions 与 history)。原始消息仍在 jsonl 中留档,只是在上下文窗口中被摘要替代。自动压缩在有效上下文窗口的约 93% 处触发。压缩后最近用到的文件和状态会被重新喂回上下文。连续 3 次压缩失败后自动压缩停止(熔断器机制)。
  • /resume:在交互模式下恢复之前的会话。扫描 ~/.claude/sessions/*.json 展示当前项目的历史会话列表,同时读取 ~/.claude/history.jsonl 中的 prompt 记录供搜索。和 CLI 的 --resume 功能相同,但入口在运行时。
  • /rewind:回退到之前的对话轮次。它从 ~/.claude/file-history/<session-id>/ 目录读取文件编辑前的快照,恢复被修改的文件,同时截断 jsonl 中的对话记录到回退点(快照机制详见3.9 其他数据文件)。

2.3 上下文操作#

  • /context:查看当前会话的上下文状态,展示已加载的 CLAUDE.md 文件、memory 文件、settings 配置等(分别对应3.3 CLAUDE.md3.4 memory3.5 settings.json)。帮你搞清楚”Claude Code 现在到底知道些什么”。
  • /add-dir:运行时添加额外的工作目录,同时扫描并加载该目录下的 CLAUDE.md。和 CLI 的 --add-dir 功能相同,区别是不需要退出重启。

2.4 权限调整#

  • /permissions:查看和修改当前会话的权限设置。读取 settings.json 三层级的权限配置,修改时写回对应层级的 settings 文件(详见3.5 settings.json)。你可以在运行时开放或收紧工具权限,比如临时允许 Bash 执行,做完再关掉。

2.5 模型切换#

  • /model:在对话中切换模型。不用退出重启,直接从 sonnet 切到 opus 或反过来。对”先用快速模型探索,再用强模型精修”的工作流很方便。

2.6 调试与诊断#

  • /doctor:检查 Claude Code 的健康状态。读取 settings.json、.mcp.json、installed_plugins.json 等配置文件(分别对应3.53.83.9),验证 MCP 服务器连接、认证状态、自动更新器是否正常。排查环境问题的第一步。
  • /cost:显示当前会话的累计花费。从当前 session 的 jsonl 中累计 token 用量并换算为费用(详见3.6)。长对话随时看一眼成本是个好习惯。
  • /debug:切换调试模式,查看 API 请求、工具调用等内部细节。

2.7 工作流#

  • /init:在当前项目目录初始化 CLAUDE.md。它分析项目结构后生成一份包含项目规则、关键路径、编码风格的 CLAUDE.md,写入项目根目录(详见3.3 CLAUDE.md)。如果 CLAUDE.md 已存在,会建议改进。新项目接入 Claude Code 时建议先跑一次。
  • /review:让 Claude Code 审查当前的代码变更(git diff),给出修改建议。

2.8 CLI 选项与 / 命令的对照#

有些能力在 CLI 和 / 命令两边都有入口,有些只有单边:

能力CLI 选项/ 命令说明
模型选择--model/model两边都能设,/ 命令可以运行时切换
添加目录--add-dir/add-dir两边都能加
恢复会话--continue--resume/resumeCLI 在启动时选会话,/ 命令在运行时选
权限控制--permission-mode--allowedTools/permissionsCLI 做初始声明,/ 命令做运行时微调
压缩上下文/compact只有运行时入口
清空对话/clear只有运行时入口
回退轮次/rewind只有运行时入口
输出格式--output-format只在启动时确定
JSON Schema--json-schema只在启动时确定
系统提示--system-prompt--append-system-prompt只在启动时确定

表里有个规律:压缩、清空、回退这三个只有运行时入口,没有 CLI 选项。原因很直接,它们操作的是”对话进行中产生的状态”,而启动时还没有对话可压缩、可清空、可回退。反过来,输出格式和系统提示只在启动时确定,因为它们是送进模型的固定框架,运行中改意义不大。这条分界线,正好对应下一节要讲的”可控性”。

2.9 / 命令的设计哲学#

/ 命令解决的核心问题是 Agent 的可控性。如果所有参数都只能在启动时设定,一旦对话方向偏离,你只能退出重来。有了 / 命令,你可以在运行中调整模型、压缩上下文、回退轮次,这些能力让 Agent 从”启动即锁定”变成”运行时可调”。

三、文件系统:配置与数据的持久化#

前两层控制的是 Claude Code 怎么想、怎么输出,文件系统层才是它”记住什么、持久化什么”的部分。CLI 选项和 / 命令都是即时生效的,但 CLAUDE.md 的项目规则、memory 的跨会话记忆、sessions 的对话历史,这些数据全部靠文件系统承载。理解了文件布局,你就知道 Claude Code 的”记忆”存在哪里、配置从哪里加载、哪些东西可以手动编辑。

Note

本节侧重文件布局和操作层面的”读写哪个文件”。CLAUDE.md 和 memory 的加载机制、prompt 拼装工程,以及 JSONL 内部结构和 resume 恢复流水线,属于内部实现,本文不展开。

3.1 命令与文件的映射#

很多命令的行为直接由文件驱动。下面这张表把最常用的”我敲了这个命令,它读写什么文件”的对应关系梳理出来:

命令关键文件
--continue~/.claude/sessions/*.json 找当前目录最近会话;~/.claude/projects/<hash>/<id>.jsonl 恢复对话
--resume同上,按 session ID 精确定位;~/.claude/history.jsonl 供交互式搜索
--fork-session复制源 jsonl 到新 session ID
/compact~/.claude/projects/<hash>/<id>.jsonl 读取全文、写入压缩摘要
/rewind~/.claude/file-history/<session-id>/ 恢复文件快照;jsonl 截断到回退点
/permissionssettings.json 三层级读取 + 写回
/initCLAUDE.md 创建或更新
/contextCLAUDE.md + memory + settings 展示当前上下文
/cost当前 session 的 jsonl 累计 token 用量
--safe-mode部分跳过 CLAUDE.md/memory/hooks/plugins/MCP 的加载
--add-dir扩展文件访问范围,扫描并加载新目录下的 CLAUDE.md
claude mcp add写入 settings.json(local scope,默认)或 .mcp.json(project scope)
/plugin install~/.claude/plugins/installed_plugins.json + ~/.claude/plugins/cache/ + settings.json

有了这张表做参照,下面逐项展开文件布局的细节时,你能随时对照”这个文件被哪个命令读写”。

3.2 文件布局全景#

Claude Code 的文件分布在两个层级:用户级(~/.claude/)和项目级(项目根目录下的 .claude/CLAUDE.md)。

层级路径作用是否手动可编辑
用户级全局配置~/.claude/settings.json全局权限、环境变量、插件、主题可以
用户级历史~/.claude/history.jsonl所有对话的输入记录(prompt、时间、session ID)不建议
用户级会话~/.claude/sessions/*.json会话元数据(进程 ID、工作目录、状态)不建议
用户级项目数据~/.claude/projects/<path-hash>/会话 jsonl、子代理记录不建议
用户级记忆~/.claude/projects/<path-hash>/memory/跨会话持久记忆文件可以
用户级 skills~/.claude/skills/用户级 skill 定义(目录形式)可以
用户级插件~/.claude/plugins/installed_plugins.json已安装插件及版本不建议
项目级配置<project>/.claude/settings.json项目级权限配置可以
项目级本地配置<project>/.claude/settings.local.json不进 git 的本地权限配置可以
项目级 skills<project>/.claude/skills/项目级 skill 定义可以
项目级说明<project>/CLAUDE.md项目规则、关键路径、工作流约定可以,最常编辑

注:实际还有目录级,主要用于 monorepo 的场景,但子目录级别只对 CLAUDE.md.claude/rules/*.md 有效;

下面逐项说明关键文件的作用和内容。

3.3 CLAUDE.md:项目级的行为指令#

CLAUDE.md 是 Claude Code 最核心的配置文件。每次启动时,Claude Code 会自动在项目根目录查找并加载它,把内容注入系统提示。它相当于给 Claude Code 写了一份”项目说明书”。

一个典型的 CLAUDE.md 包含:

# Claude Code 项目配置
## 项目概述
项目是什么、用什么技术栈、部署在哪里。
## 关键路径
文章目录、草稿目录、配置文件位置。
## 写作规范
遵循哪些 skill,优先级如何。
## 工作流约定
修改前检查格式、不编造事实、草稿先放 _draft 目录。

你可以用 /init 命令让 Claude Code 交互式引导你创建 CLAUDE.md,也可以手动编写。CLAUDE.md 的加载路径不限于项目根目录:Claude Code 还会扫描 .claude/rules/*.md、用户级 ~/.claude/CLAUDE.md、以及 --add-dir 添加目录下的 CLAUDE.md(见1.6 工作区与环境类),从外到内逐层叠加。--safe-mode--bare(见1.4 权限与安全类)会跳过 CLAUDE.md 的自动发现。

CLAUDE.md 的加载遵循四级信任模型(Managed > User > Project > Local),后加载的文件覆盖先加载的。Project 和 Local 文件按目录从根到 CWD 遍历,越靠近 CWD 的文件优先级越高。CLAUDE.md 还支持 @./relative/path 语法引用外部文件(深度上限 5),.claude/rules/*.md 中的规则文件可以用 frontmatter 的 paths: 字段声明条件加载。这些加载规则的内部实现(section 化拼装、缓存边界、动态注入)本文不展开。

3.4 memory:跨会话的持久记忆#

memory 目录在 ~/.claude/projects/<项目路径哈希>/memory/ 下。每个记忆是一个独立的 markdown 文件,带 frontmatter(包含 name、description、metadata 等字段)。MEMORY.md 是索引文件,每行一条记忆的标题和摘要。Claude Code 每次启动时加载 MEMORY.md,根据描述判断哪些记忆与当前任务相关,再按需读取具体文件。memory 的注入机制和更新协议(session memory prompt、memory extraction prompt)本文不展开。

memory 和 CLAUDE.md 的区别:CLAUDE.md 是你主动写的项目规则(用 /init 创建,见2.7 工作流),memory 是 Claude Code 在对话中自己沉淀的跨会话经验。一个管”你应该怎么干活”,一个管”上次干活学到了什么”。--safe-mode--bare(见1.4 权限与安全类)会跳过 memory 的自动加载。

3.5 settings.json:权限与配置#

settings.json 有三个层级,优先级从低到高:

  1. 用户级~/.claude/settings.json,全局生效
  2. 项目级<project>/.claude/settings.json,进 git,团队共享
  3. 本地级<project>/.claude/settings.local.json,不进 git,个人覆盖

一个典型的项目级 settings.json:

{
"permissions": {
"allow": [
"Bash(*)",
"Read",
"Write",
"Edit"
]
}
}

这里声明了允许的工具权限。settings.local.json 的格式相同,但适合放个人偏好(比如本地开发环境特有的权限),不会污染 git 仓库。

用户级 settings.json 则承载全局配置:环境变量(API key、base URL)、插件启用、主题选择等。三个层级的配置在启动时合并,高优先级覆盖低优先级。--settings 指定的配置成为 flagSettings 层,优先级最高(见1.6 工作区与环境类)。--setting-sources 可以控制只加载其中某些层级。/permissions 命令(见2.4 权限调整)在运行时修改权限后,会写回对应层级的 settings 文件。

3.6 sessions 与 history:对话数据#

~/.claude/sessions/*.json 存储会话元数据,每个文件以进程 PID 命名,记录 sessionId(UUID)、cwd(工作目录)、status(idle/busy/completed)、startedAt、version 等字段。--continue 就是扫描这些文件找当前目录最近的会话,--resume 按 sessionId 直接定位。

~/.claude/projects/<path-hash>/<session-id>.jsonl 存储会话的完整对话内容,采用 append-only 事件日志格式。每一行是一个 JSON 对象,消息类型包括 modesystemuserassistantattachmentfile-history-snapshotai-titlelast-prompt 等。这是 Claude Code 的”对话档案”,也是 --continue/--resume 恢复对话的数据来源,/compact 写入压缩摘要的目标,/rewind 截断对话的起点。子代理(Agent)的对话记录在 ~/.claude/projects/<path-hash>/<session-id>/subagents/agent-<id>.jsonl,元信息在对应的 .meta.json 中。大工具输出持久化在 ~/.claude/projects/<path-hash>/<session-id>/tool-results/ 下。

~/.claude/history.jsonl 是更轻量的记录,每行只存用户输入的 display text、时间戳、session ID 和 project 路径,不包含模型回复。这个文件用于 /resume 的交互式选择器,让你搜索历史对话。

3.7 skills:行为扩展#

skills 以目录形式存储,每个 skill 目录包含一个或多个 markdown 文件,定义了特定场景下的行为规范。

skills 的加载来源按优先级排列:

  1. Bundled skills:内置在 Claude Code 二进制中(--disable-slash-commands 可禁用)
  2. 用户级~/.claude/skills/,全局生效
  3. 项目级<project>/.claude/skills/,只在该项目生效
  4. 插件级~/.claude/plugins/cache/<marketplace>/<plugin>/skills/
  5. 自定义命令<project>/.claude/commands/ 中的文件自动成为 / 命令

当你在对话中触发一个 skill(比如 /sync-api),Claude Code 从 skills 目录加载对应的 markdown 内容,注入当前对话的上下文。

3.8 MCP 配置:外部工具接入#

MCP(Model Context Protocol)服务器的配置分布在多个文件中:

来源路径写入方式
项目级<project>/.mcp.jsonclaude mcp add --scope project 或手动编辑
用户级~/.claude/settings.json 中的 mcpServers 字段claude mcp add --scope user
本地级<project>/.claude/settings.local.jsonclaude mcp add --scope local(默认)
CLI 临时--mcp-config <file> 指定的 JSON 文件只在当前会话生效

claude mcp list 列出所有来源的 MCP 服务器。项目级 .mcp.json 中的服务器首次加载时会弹出安全确认,批准后才能连接。--strict-mcp-config 只允许 --mcp-config 指定的服务器,忽略其他来源。

3.9 其他数据文件#

文件作用关联命令
~/.claude/plugins/installed_plugins.json已安装插件列表及版本/plugin install/plugin disable
~/.claude/plugins/cache/插件下载缓存/plugin installclaude plugin prune
~/.claude/file-history/文件修改的快照备份/rewind 读取快照恢复文件
~/.claude/shell-snapshots/shell 环境快照Bash 工具每次调用前保存环境
~/.claude/telemetry/遥测数据(失败事件记录)无直接命令
~/.claude/cache/内部缓存(如 changelog)claude update 读取版本信息
~/.claude/backups/settings.json 的备份修改 settings 前自动创建
~/.claude/plans/计划模式产生的计划文件EnterPlanMode 写入
~/.claude/scheduled_tasks.json持久化的定时任务CronCreatedurable: true
~/.claude/projects/<path-hash>/<session-id>/subagents/子代理的对话记录和元信息Agent 工具
~/.claude/projects/<path-hash>/<session-id>/tool-results/大工具输出的持久化缓存工具调用结果过大时自动写入

这些文件一般不需要手动编辑,但了解它们的存在有助于排查问题。比如 /rewind 能回退文件修改,靠的就是 ~/.claude/file-history/ 中的快照;用 /plugin install 装插件时,会同时写入 ~/.claude/plugins/installed_plugins.json~/.claude/plugins/cache/ 和 settings.json 的 enabledPlugins 字段(详见第五节插件生态)。

3.10 文件系统的设计哲学#

Claude Code 的文件布局体现了一个设计思路:文件系统即记忆。CLAUDE.md 是项目级的”工作手册”,memory 是跨会话的”经验笔记”,sessions jsonl 是”对话档案”,settings.json 是”权限清单”。这些文件让 Claude Code 从一个”每次启动都从零开始的聊天机器人”变成了”有项目上下文、有历史经验、有行为约束的 Agent”。文件系统不是 Claude Code 的附带产物,而是它”记住事情”的根基。

四、进阶能力:怎么用得高效#

前三层讲的是”开关在哪、状态存哪”。但真正拉开效率差距的,是 Claude Code 里几个不靠开关、靠用法的能力。它们在 CLI 选项表里只占一行甚至没露脸,却是从”会聊天”到”会干活”的分水岭。这一节给一张地图,每个能力说清解决什么、什么时候用、入口在哪。

能力解决什么什么时候用操作入口
子代理(Agent)把大任务拆给并行子代理,每个独立上下文改动涉及多个不相干模块、需要边查边改时Agent 工具、Task 系列
计划模式(Plan)先出方案再动手,避免跑偏需求模糊或改动较大,不想让它直接改文件时--permission-mode planEnterPlanMode
skills把重复的做事方法固化成可复用指令某类任务反复做(写博客、发版、建组件),每次都要重复交代规则时.claude/skills/ 下的 SKILL.md
hooks在生命周期事件上自动执行脚本想让”每次保存后自动跑 lint""提交前自动检查”这类自动化时settings.json 的 hooks 字段
MCP 服务器把外部工具(数据库、issue 系统、浏览器)接进来需要 Claude Code 操作它本身够不着的系统时claude mcp--mcp-config

挑两个最容易立刻上手的展开。

计划模式适合”需求大、怕跑偏”的场景。用 --permission-mode plan 启动,或对话中进入计划模式,Claude Code 会先给你一份方案而不动文件。你审完方案认可了,再让它执行。这比放任它直接改十几个文件然后你挨个回滚省事得多。复杂任务先 plan 再做,是效率最高的一个习惯。

子代理适合”任务能拆”的场景。比如”给这三个独立模块各加一个单元测试”,主代理可以同时派三个子代理分头干,各自有独立上下文不互相污染,主代理只汇总结果。单线程聊天改成并行调度,是大仓库里提效最明显的一招。子代理的对话记录单独存放在 ~/.claude/projects/<path-hash>/<session-id>/subagents/ 下,不挤占主会话上下文。

skills 和 hooks 的内部机制较重,本文不展开。你只需要知道:skills 是把”怎么做某类事”写成 markdown,触发时注入上下文;hooks 是在工具调用前后挂钩子跑脚本。本仓库自己的写作流程就是靠一套 skills 驱动的(写作规范、格式检查、评审清单都是 skills),这就是 skills 提效的活样本。

五、插件与生态#

上面这些能力都能靠手写配置实现,但社区已经把很多最佳实践打包成了插件。新项目装一两个插件,比从零配 hooks 和 skills 快得多。

插件是打包分发的能力集合,一个插件可以同时带上 skills、slash 命令、hooks、MCP 配置、子代理定义。安装不用记路径,在对话里用斜杠命令:

# 从官方 marketplace 装一个插件
/plugin install <插件名>@claude-plugins-official
# 注册一个第三方 marketplace(owner/repo 简写)
/plugin marketplace add obra/superpowers-marketplace

@ 后面是 marketplace 名。官方 marketplace 叫 claude-plugins-official,由 Anthropic 维护,首次用 /plugin 时通常已自动注册,里面有 200 多个插件。第三方 marketplace 用 /plugin marketplace add <github-owner/repo> 注册后再装。

几个值得新项目优先认识的高频插件:

插件来源解决什么
claude-code-setupAnthropic 官方扫描仓库技术栈,推荐适合的 hooks、skills、MCP、子代理配置
superpowers社区(Jesse Vincent)一套会自动触发的工作流方法论:TDD、系统化调试、计划先行、子代理开发
code-reviewAnthropic 官方多个子代理并行做 PR 代码评审
context7社区拉取最新版本的库文档做实时查询,避免模型用过期 API

表格里前两个最值得新项目先装,命令直接抄:

/plugin install claude-code-setup@claude-plugins-official # 官方,技术栈分析推荐
/plugin install superpowers@claude-plugins-official # 社区,工作流方法论

这里有个容易踩的认知坑。claude-code-setup 装好后提供的是一个叫 claude-automation-recommender 的 skill,引用时写作 claude-code-setup:claude-automation-recommender(插件名和 skill 名不一样)。而且它是只读分析器:扫描你的仓库后给出”建议装哪些自动化”的推荐,本身不写任何文件。推荐落地还得你或 Claude Code 另外执行。把它当成”帮你做技术选型的向导”,而不是”一键配好所有东西的开关”。

superpowers 是社区里最流行的方法论插件。它装上一堆会自动触发的 skills,比如你让它写功能,它会自动走”先头脑风暴澄清需求 → 写计划 → TDD 实现 → 验证”的流程,而不是闷头改代码。适合想要固定工作流纪律的人;如果你只想轻量用,可能觉得它话多。

插件装多了也会互相打架(多个插件都想拦截同一个事件),用 /plugin list 看已装的,不需要的用 /plugin disable 关掉。插件文件落在 ~/.claude/plugins/cache/ 下,清单在 ~/.claude/plugins/installed_plugins.json

六、三层总结与实用建议#

CLI 选项、/ 命令、文件系统交互构成了 Claude Code 的三层交互模型:

  • CLI 选项:启动时声明意图。模型、权限、输出格式、工作目录,这些参数决定会话的边界条件。
  • / 命令:运行时调整行为。压缩上下文、切换模型、回退轮次,这些操作让你在对话中保持控制。
  • 文件系统:持久化配置与状态。CLAUDE.md 是项目规则,memory 是跨会话经验,sessions 是对话档案,settings.json 是权限清单。文件系统让 Claude Code 从”每次从零开始”变成”有记忆的 Agent”。

三层之间的关系是递进的:声明意图、调整行为、持久化状态。理解了这个结构,你对 Claude Code 的掌控就从”碰运气”变成了”有章法”。

Tip

几条实用建议:

  1. 新项目先用 /init。它会帮你生成 CLAUDE.md,让后续每次启动都自动加载项目规则。再装 claude-code-setup 插件,运行它提供的 claude-automation-recommender skill,让 Claude Code 扫描仓库、推荐该装哪些 hooks、skills、MCP(见第五节插件生态)。

  2. 长对话勤用 /compact。上下文窗口是有限资源,定期压缩可以避免 token 浪费在过时的中间过程上。(还可以配置 Auto-compact 和合适的 autoCompactWindow)

  3. 自动化用 -p --output-format json --json-schema。结构化输出是 Claude Code 接入管线的关键,不要在自动化脚本里解析自由文本。

  4. 放权干活,兜底兜住。与其把权限卡死让 AI 寸步难行,不如给它够用的权限放手去做,把精力放在兜底和指挥上:日常写操作留 acceptEdits 让它自动做,删库、发布这类高危操作切回 manualplan 把关,用 CLAUDE.md 指挥方向。注意放权不是用 bypassPermissions,那等于裸奔。只读审查这种确定场景才回头收紧到 --allowedTools Read

  5. 调试时用 --bare 排除干扰。遇到行为异常,先用 --bare--safe-mode 启动,确认是不是自定义配置导致的问题。

  6. 善用 CLAUDE.md 和 memory。CLAUDE.md 写项目规则,memory 沉淀跨会话经验。两者配合,让 Claude Code 越用越顺手。

七、参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

Claude Code 实操入门:CLI 选项、/ 命令与文件层
https://blog.souloss.cn/posts/ai/agents-decoded/claude-code/claude-code-cli-and-commands/
作者
Souloss
发布于
2026-06-20
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时