注意:这里的
AI指的是Claude Code / Codex。
工作流程:
描述需求 (人) --> 提出方案 (AI) --> 审查并批准 (人) --> 执行方案 (AI) --> 确认执行 (人)^ || v进一步迭代的需求 (人) <------------------------------- 验证结果 (人)
如果需求比较复杂(比如,搭建一个电商系统),可以让 AI 来采访你,从而一步一步地生成一份良好的需求文档:
xxxxxxxxxx我想做一个电商系统,在动手之前,先采访我,问清楚所有你需要了解的事情。
采访结束后,让 AI 把答案整理为一份 Spec(规范文档)。然后,开启一个全新的会话,把 Spec 文档传给 AI,并让它执行。
Context 管理的核心理念:不要试图给出所有信息,而是要给出任务所需要的正确的信息。
Project Onboarding:把 Claude Code 作为一个资深的代码导航员,你可以让它解读整个项目的架构,甚至是具体的函数细节。然后问它,项目的架构是什么、核心模块有哪些、数据流是什么样,等等。
AI 的三层模型:Prompt 层、Context 层、Harness 层。
尽量把信息沉淀在 Context 层、把重复劳动交给Harness 层、仅在 Prompt 层处理真正需要临时决策的事情。
| 对比维度 | Prompt 层 | Context 层 | Harness 层 |
|---|---|---|---|
| 层级位置 | 最内层(核心基线) | 中间层(信息供给) | 最外层(系统基础设施) |
| 核心定义 | 如何向模型表达任务。单次输入给 LLM 的指令与格式设计 | 模型执行任务时能看到什么。长时运行中的上下文动态组装与管理 | 模型运行其中的宿主系统。连接大模型与真实物理世界的确定性外壳 |
| 关注核心 | 句式结构、System Prompt、Few-shot示例、思维链(CoT) | 词元(Token)利用率、状态管理、信息检索与衰减控制 | 权限拦截、工具调用、状态持久化、确定性逻辑控制 |
| 生命周期 | 单次交互(Token 级别) | 单个会话(Session 级别) | 跨系统/工程全程(持久化运行平台级别) |
| 失败时的典型表现 | AI 听不懂人话、格式输出错误、胡言乱语 | 发生“上下文焦虑”,因 Token 堆积而遗忘前文,导致代码改了后面忘了前面 | 陷入无限死循环(反复执行失败的命令)、执行高危危险命令(如误删库)、系统失控逃逸 |
| 生动形象的比喻 | 像是教新员工 “如何开口说话与表达” | 像是给新员工 “一张干净的办公桌和查阅资料的权限” | 像是为员工建立 “整套公司规章、审批工作流以及电脑防火墙” |
这三层在 Claude Code / Codex 中的具体体现:
Prompt 层:
系统内置的基础指令流。
静态的角色定义与意图格式化。
Context 层:
动态代码检索(Semantic Search)。
会话历史压缩与修剪。
CLAUDE.md / AGENTS.md(项目规范与技术栈规则)。
MEMORY.md / Memories(跨会话长期记忆积累)。
Skills 指令。
@ 附加的文件。
Harness 层:
终端命令执行(如运行 npm test) 。
权限门控(询问人类 "Allow this command?") 或者沙箱策略。
MCP 协议(Model Context Protocol)工具链。
运行拦截钩子(Hooks)与会话日志(Logs)。
死循环熔断机制(防止 Agent 刷 Token)。
.
Claude Code / Codex 默认以当前终端所在目录作为工作根目录。
对于 Claude Code,无法通过命令直接切换工作目录。
对于 Codex,可以在启动时指定目录:使用 --cd(或短参数 -C)参数。也可用 --add-dir <路径> 追加额外的可写目录。
x# 在 TUI 交互模式下指定目录启动codex --cd /path/to/project
# 在非交互(脚本)模式下指定目录执行单次任务codex exec "优化首页加载速度" --cd ~/projects/backend-service
TUI是文本用户界面(Text User Interface)的缩写。
排查错误:直接把完整报错信息粘贴给 AI,不要手动转述。
操作 git:AI 可以自动与 git 进行交互。例如直接提示:
xxxxxxxxxx提交当前的改动,写一个有意义的 `commit message`
交互式和非交互式执行:
交互式执行:直接输入基础命令,即可进入一个人类可介入(Human-in-the-loop)的完整 TUI (Text User Interface)交互式工作空间。
xxxxxxxxxxclaude # 直接启动claude "帮我重构一下 utils.ts 文件" # 带初始提示词启动codex # 直接启动codex "帮我重构一下 utils.ts 文件" # 带初始提示词启动非交互式执行(脚本):让 AI 作为一个独立的 Agent 自动流式执行完所有工具链并直接输出最终结果,随后立刻退出。非常适合用于 CI/CD、Pre-commit Hooks、或者 Bash 脚本中。
Claude Code:通过 -p(或 --print)参数触发。
xxxxxxxxxxclaude -p "分析当前项目的代码结构" # 单次执行任务cat error.log | claude -p "解释这个报错并提供修复代码" # 结合管道(Pipe)输入流claude -p "修复所有 lint 错误" --bare --max-budget-usd 2.0 # 限制最高消费预算(防止陷入死循环),提速启动Codex:通过 codex exec 命令。
xxxxxxxxxxcodex exec "分析当前项目的代码结构" # 单次执行任务codex exec --full-auto "创建一个华丽的待办事项 App" # 开启沙盒全自动执行codex --dangerously-bypass-approvals-and-sandbox "部署当前项目到测试环境" # 跳过所有人工审批与沙盒限制执行(高风险/高自由度)codex exec --full-auto "生成API文档" --json # 输出逐行的 JSON 事件流(NDJSON格式),方便 jq 等工具解析codex exec "编写README" -o ./README.md # 过程不刷屏,仅将最终生成的回复直接写入特定文件极简模式:Claude Code / Codex 启动过程中,默认会在项目目录中动态加载大量上下文,包括自动查找上级目录的 CLAUDE.md (或者)规范、运行初始化 Hooks、加载外部插件/自定义 Skills、连接 MCP(Model Context Protocol)服务器、以及读取自动记忆(Auto Memory)。采用极简模式之后,上述所有环境发现动作全部被跳过。这使得启动速度提升高达数倍,避免了在自动化脚本中意外引入不需要的项目配置。
主要用途:用于非交互式脚本和 CI/CD 自动化流水线中。
Claude Code 启用极简模式:用 --bare 参数。
由于 --bare 保证了任务的幂等性(Stateless)与高启动速度,Anthropic 官方将其作为自动化调用的标准推荐。
xxxxxxxxxxclaude -p --bare "运行单元测试并仅报告失败的用例" # 在 CI/CD 脚本或 Git Hook 中的标准写法Codex 启用极简模式:Codex 中没有一个名字完全叫 --bare 的单一代替参数,但可以通过组合 Codex 的原生参数,完美实现甚至超越 claude --bare 的效果。
在脚本或 CI/CD 中,最接近 claude --bare 功能的 Codex 标准写法是:
xxxxxxxxxxcodex exec --ephemeral --ask-for-approval never "你的指令"--ephemeral(短暂/临时模式):这是 Codex 达成“干净上下文”的核心参数。它会告诉 Codex 完全禁用自动记忆、不创建或恢复本地持久化会话、不写入历史日志。每次执行都是完全隔离且幂等的(Stateless),这与 --bare 禁用自动记忆的底层逻辑完全一致。
--ask-for-approval never(禁用人工审批):相当于 Claude 在 --bare 模式下收紧工具或静默执行。它强制关闭所有 TUI 交互式确认,一旦遇到无法安全自主执行的操作直接报错退出,防止 CI/CD 流程卡死。
如果你的脚本是在已经隔离的安全环境(如 Docker、临时虚拟机)中运行,希望彻底剥离所有安全沙盒机制限制(类似于 Claude Code 的 CLAUDE_CODE_SIMPLE 状态),Codex 提供了更激进的标志:
xxxxxxxxxxcodex exec --ephemeral --yolo "编译项目并部署"--dangerously-bypass-approvals-and-sandbox(简称 --yolo):该参数不仅跳过所有人工审批,还会彻底关闭 Codex 本地的进程沙盒防护,直接向系统暴露最大原生执行权限。
--dangerously-bypass-hook-trust:跳过针对本地 Git Hooks 或项目自定义脚本的信任验证,直接静默执行,确保流水线无人值守时不会卡在 “是否信任此脚本” 的提示上。
在审批模式方面,Claude Code 和 Codex 既有相同点、又有不同点。
Claude Code:
| 模式 | 含义与行为 | 适用场景 | 注意事项 |
|---|---|---|---|
default(默认) | 最安全。任何敏感操作前均需手动逐一批准 | 初次接触项目、处理敏感/生产环境代码 | 弹窗多,效率较低 |
acceptEdits(自动接受编辑) | 自动批准所有文件读写,Shell 命令仍需确认 | 日常开发、大规模重构、编写测试等重复性工作 | 警惕 Claude Code 自动修改文件的风险 |
plan(计划模式) | 只读分析,先制定详细执行计划,审核确认后才执行 | 复杂功能开发、架构设计、数据库迁移 | 不会自动执行任何修改,安全可控 |
auto(自动模式) | 内置 LLM 分类器自动判断操作安全性并执行 | Team/Enterprise 计划的高信任项目 | 需特定模型和付费计划 |
dontAsk(不询问模式) | 仅执行 settings.json 中预授权的操作,其余静默拒绝 | CI/CD 自动化流水线 | 需预先配置 allow 规则 |
bypassPermissions(绕过权限) | 跳过所有权限检查,全自动执行 | 完全隔离的 CI/CD 或 Docker 容器环境 | 高危,极不推荐日常使用 |
Codex:
| 模式 | 含义与行为 | 适用场景 | 注意事项 |
|---|---|---|---|
untrusted(全询问) | 最安全。每一步操作都暂停并询问 | 初次接触项目、处理敏感/生产环境代码 | 弹窗多,效率较低 |
plan(计划模式) | 只读分析,先制定详细执行计划,审核确认后才执行 | 复杂功能开发、架构设计、数据库迁移 | 不会自动执行任何修改,安全可控 |
on-request(按需询问,默认) | 仅在风险操作前询问 | 日常开发 | 平衡安全与效率的推荐选项 |
never(从不询问) | 跳过所有权限检查,全自动执行 | 完全隔离的 CI/CD 或 Docker 容器环境 | 高危,仅限隔离环境 |
审批模式的启用:
Claude Code:
执行如下命令:
xxxxxxxxxxclaude # defaultclaude --permission-mode acceptEdits # acceptEditsclaude --permission-mode plan # planclaude --enable-auto-mode # autoclaude --permission-mode auto # autoclaude --permission-mode dontAsk # dontAskclaude --dangerously-skip-permissions # bypassPermissions或者在会话中指定:Shift + Tab 切换;对于 plan 模式,也可以在会话过程中输入 /plan 指令。
或者在配置中设定:在 .claude/settings.json 中配置:
xxxxxxxxxx"defaultMode": "acceptEdits"Codex:
执行如下命令:
xxxxxxxxxxcodex --ask-for-approval untrusted # untrustedcodex -a untrusted # untrustedcodex --ask-for-approval on-request # on-requestcodex -a on-request # on-requestcodex --ask-for-approval never # nevercodex -a never # never对于 plan 模式,可以在会话过程中输入 /plan 指令来启动;或者通过 Shift + Tab 来循环切换;或者通过 Cmd + Shift + P 唤醒。
Codex 将安全和权限视为底层硬边界。因此,在会话中调整它的权限和控制模式主要依靠斜杠命令(Slash Commands),或通过 IDE 的全局快捷键来实现。它不支持像 Claude Code 的Shift + Tab 切换方式。
在会话中的指令如下:
xxxxxxxxxx/approval untrusted # untrusted/approval on-request # on-request/approval never # never或者在配置中设定:在 ~/.codex/config.toml 中配置:
xxxxxxxxxx# 设置审批策略和沙盒权限approval_policy = "on-request" # 遇到高风险操作或命令时才提示确认sandbox_mode = "workspace-write" # 允许直接在当前工作区修改和写入文件.
在 Claude Code 的交互式终端会话中,直接输入 /permissions 并回车,会唤起一个免代码的交互式菜单。在这个菜单中可以看到当前的规则(有哪些工具处于 Allow、Ask 或 Deny 状态)、设置新的规则。
在 /permissions 中或对应的配置文件中,可以对权限进行非常精细的限制,支持通配符语法:
针对大类工具:
Edit:允许或禁止 AI 修改/写入本地文件。
Read:文件读取权限。
Bash:所有终端命令的执行总开关。
针对具体终端命令:
Bash(npm install):只允许精确执行 npm install 这条命令。
Bash(git:*):前缀匹配,允许所有以 git 开头的命令(如 git add, git commit)。
Bash(rm:*):通常放入 Deny 列表,禁止 AI 执行任何删除操作。
直接在会话内用 /permissions 修改的规则通常仅对当前会话生效。可以写入本地的配置文件(如项目的 .claude/settings.json 或全局的 ~/.claude/settings.json):
xxxxxxxxxx{ "permissions": { "allow": ["Bash(npm:*)", "Bash(git:*)", "Edit"], "deny": ["Bash(rm -rf:*)", "Bash(sudo:*)"] }}在使用 /permissions 交互面板或编辑配置文件时,所有工具的权限都被划分为以下三种状态:
Allow(自动允许):AI 可以静默执行该操作,不需要向你弹窗确认。适用于高频、安全的命令(如 git status、ls)。
Ask(每次询问):这是默认状态。当 AI 想要执行该操作时,会在终端弹窗等待你敲击 y/n 确认。
Deny(绝对禁止):完全封死该操作。即使你在对话中要求 AI 去做,系统也会直接拦截,优先级最高(即使同时在 Allow 里也会被拒绝)。通常用于破坏性命令(如 rm -rf)。
Claude Code 的 Auto Mode 与 Codex 的 auto_review 是当前 AI Agent 领域中最前沿的 “自主权与安全性平衡” 机制。它们的共同核心逻辑是:引入一个专门的独立背景分类器(Classifier)/ 审查智能体(Reviewer Agent)。当 main AI 意图执行某项操作时,该分类器会在后台拦截并评估风险,自动放行低风险操作(如纯读、普通文件修改),只有在发现高风险或不可逆操作(如高危 Shell 命令、外部网络请求)时,才会中断并上升为人工确认。
Claude Code 采用独立的背景分类器,而 Codex 采用审查智能体。
Claude Code 的 Auto Mode:Auto Mode 并非简单的开关,它在后台依赖一个专用的 Claude 智能分类器(通常由快速且具备推理能力的模型如 Sonic 驱动),将 main Agent 的所有工具调用(Tool Calls)划分为三个层级:
Tier 1(绝对安全):如读取本地文件。直接自动放行,不触发分类器,无额外费用。
Tier 2(项目内常规操作):如在当前工作区内写入或修改代码文件、使用 mkdir / touch。同样自动放行。
Tier 3(潜在风险操作):执行特定的 Shell 终端命令、执行外部网络请求、调用复杂的 MCP(Model Context Protocol)插件等。这类操作必须通过分类器审查。
Claude Code 内置两阶段分类器:
第一阶段:快速判断操作风险,倾向谨慎,误报率 8.5%。
第二阶段:对第一阶段标记的操作深度推理,误报率降至 0.4%。
Codex 的沙箱策略是它用来约束 AI Agent 运行时行为的第一道技术防线。沙箱不是靠提示词(Prompt)告诉 AI “请不要乱动文件”,而是通过操作系统底层的原生内核机制,强行给 AI 圈定一个绝对无法逾越的技术边界。只要 AI 的操作在边界内,就能自主、流畅地运行;一旦跨越边界,系统就会强行卡死,并交由审批策略(Approval Policy)处理。
有三种核心的沙箱模式(Sandbox Strictness):
| 沙箱模式 | 文件修改权限 | 命令执行权限 | 网络访问权限 | 典型适用场景 |
|---|---|---|---|---|
read-only (只读) | 禁止写入任何文件 | 禁止执行任意 Shell 命令 | 完全隔离 | 用于纯代码审查(Review)、架构分析或陌生项目探索,确保源码绝对不被污染 |
workspace-write(工作区写;默认) | 仅限当前项目目录(如 .codex/ 及源码) | 允许运行本地工具(如 git, npm test) | 默认禁止 | 日常开发的常规模式。AI 能自由修改代码和跑测试,但绝碰不到系统核心文件,也无法外传数据 |
danger-full-access (完全控制) | 无限制 | 无限制 | 允许访问互联网 | 极度危险。 沙箱边界被彻底移除。仅允许在一次性的 Docker 容器、云端沙箱或抛弃型虚拟机(VM)中使用 |
设置沙箱模式:
在启动时指定:
xxxxxxxxxxcodex --ask-for-approval on-request --sandbox workspace-writecodex exec --sandbox workspace-write "重构 utils 目录" # exec 脚本中明确授权写入或者在对话中切换:
xxxxxxxxxx/approvals # 手动切换/set sandbox_mode=read-only # read-only/set sandbox_mode=workspace-write # workspace-write/set sandbox_mode=danger-full-access # workspace-write沙箱模式 (Sandbox) vs 审批策略 (Approval):“沙箱决定了 AI 在技术上能走多远,而审批策略(Approval Policy)决定了当 AI 走到边界时,该由谁来允许它开门。”
完全绕过沙箱和审批(高危):
xxxxxxxxxxcodex --dangerously-bypass-approvals-and-sandbox# 别名:codex --yolo仅在完全隔离的 Docker 容器或 CI runner 中使用,切勿在本机日常开发中开启。
与 Claude Code 不同(Claude Code 的 /permissions 指令用于查看和设置 Allow/Ask/Deny 规则),Codex 的 /permissions 仅仅用于切换三种内置的预设模式。
在 Codex 中,设置 Allow/Ask/Deny 规则采用 Rules。
在 Codex 交互 App 中输入 /permissions 会直接跳转到 App 权限设置管理入口,允许你在以下三种内置的预设模式之间高速切换:
| 模式名称 | 核心权限与行为 | 适用场景 |
|---|---|---|
Auto(默认模式) | 允许 Codex 自动读取文件、改写代码、以及执行当前工作区目录内的常规本地命令。但在涉及网络访问或超出工作区边界(跨目录)的操作时,依然会暂停并弹窗向你请求确认 | 绝大多数日常开发、重构、本地测试场景 |
Read-only(只读模式) | Codex 进入纯咨询状态。它能够浏览、阅读代码以提供架构设计或逻辑分析,但绝对不会在未经你对完整方案进行全局审批前修改任何文件或运行任何命令 | 接入未知的第三方开源仓库、审查复杂逻辑或只希望 AI 扮演“智囊”而不动手时 |
Full Access(全开放模式) | 授予 Codex 跨机器工作的全量权限(包括直接的网络访问),并且完全不再弹窗询问。这是最高危的模式 | 仅在你自己完全信任的本地私有仓库中,且需要 AI 进行大范围自动化脚本跑批、长上下文调用时极少使用 |
通过 /permissions 菜单进行的修改往往只对当前终端会话生效。如果你想为你团队的项目或个人习惯定制一套永久的权限规则,Codex 支持在配置文件(如 config.toml)中编写声明式权限文件。
xxxxxxxxxx# 设置 Codex 启动时默认应用的权限配置文件default_permissions = "my-secure-profile"
[permissions.my-secure-profile]description = "自定义的安全开发权限配置"extends = ":workspace" # 继承官方的默认工作区沙盒防护机制
# 1. 文件系统(Filesystem)精细化控制[permissions.my-secure-profile.filesystem.":workspace_roots"]"**/*.env" = "deny" # 强行禁止 Codex 读取或修改任何 .env 环境变量敏感文件
# 2. 网络(Network)白名单控制[permissions.my-secure-profile.network]enabled = true # 允许网络访问,但仅限于下方指定的域名
[permissions.my-secure-profile.network.domains]"api.openai.com" = "allow" # 只允许向 OpenAI API 发送请求,其余出站流量全部拦截在 Codex 中,在 config.toml 中配置 approvals_reviewer = "auto_review" 是其沙箱与安全策略的高级进阶玩法。它用一个独立的 Guardian Subagent(守护者子智能体)取代了默认的客户端人工交互(user)。
auto_review 并不会改变你原本在 config.toml 中定义的沙箱硬性边界(如 sandbox_mode = "workspace-write"),它改变的是交互式审批的执行人。它主要在以下敏感边界被触碰时激活:
提权请求:Shell 或 exec 工具请求临时超出当前沙箱权限。
网络阻断拦截:主模型触发了当前沙箱或外部策略限制的网络请求。
越界写文件:修改了允许的可写根目录(writable_roots)以外的文件。
高风险 MCP/浏览器操作:触发了标注为需要确认的 MCP 工具,或试图使用 Browser Use 访问未授信的新域名。
当主模型触发上述操作时,Codex 机制流程如下:
操作被拦截,Codex 将其转化为一个 PermissionRequest(权限请求)。
请求被路由至 Reviewer Subagent(通常为高推理 effort 级别的独立模型)。
该子智能体独立输出一份 Guardian Assessment(守护者评估报告)。
Allow(允许):评估认为该操作符合用户意图且安全,无缝继续执行。
Deny / Abort(拒绝/中止):评估认为存在越权或风险,直接阻断,并向用户解释拒绝原因。
在 Auto Review 模式中,人工可以输入 /approve 指令来强行覆盖 Codex 的判断结果。它针对当前被 auto_review 误杀的那一个特定危险动作进行单次放行。
在 Codex中,权限预授权(Rules)是用来控制 AI Agent 在沙盒环境外或执行敏感操作时,哪些终端命令可以“自动放行”、哪些需要“弹窗提示”、哪些被“绝对禁止”的精细化指令规则。
当 Codex 在终端尝试执行某条 Shell 命令(例如 git push、npm install 等)时,它会首先检索配置的 Rules 规则文件:
前缀匹配(Prefix Matching):Codex 会将即将执行的命令与 Rules 中定义的规则模式(Patterns)进行前缀和参数匹配。
执行决策(Decisions):匹配成功后,根据规则中预设的决策直接响应,从而省去了每次都要人工按快捷键审批的麻烦。
在编写 .rules 文件时,你可以为匹配的命令指定以下三种策略之一:
allow (允许):命令无需通过沙盒隔离,直接在外部执行,且完全不弹窗询问用户。
prompt (提示):每次触发该命令时,必须暂停并要求用户手动确认后才能运行。
forbidden (禁止):直接封杀该命令,Codex 绝对无法执行此操作。
安全优先原则:如果一条命令同时触发了多条不同的规则,Codex 会采用最严厉的限制级别,即 forbidden > prompt > allow。
规则文件的配置:Codex 采用多层级配置,规则会在应用启动时自动扫描并叠加生效:
全局/用户层:通常存放在系统用户目录下的 ~/.codex/rules/default.rules。当你在 Codex 的终端界面(TUI)里对某个弹窗选择 “总是允许(Always Allow)” 时,Codex 就会把这条命令的 prefix_rule 自动写入到这个全局文件中。
项目层:存放于项目代码仓库内的 <repo>/.codex/rules/ 目录下。只有当该项目在 Codex 中被标记为 “受信任(Trusted)”时,项目级规则才会生效,非常适合团队统一规范。
rules 语法:一条典型的预授权规则使用类似 TOML 语法 的格式进行配置,通常通过 prefix_rule() 函数来定义:
xxxxxxxxxx# 示例 1:允许 Codex 自由进行常规的 Git 状态查看与提交,无需每次人工点同意prefix_rule( pattern = ["git", ["status", "diff", "log"]], decision = "allow")
# 示例 2:允许运行项目本地测试,即便测试脚本涉及了沙盒外的一些常规工具调用prefix_rule( pattern = ["npm", "run", "test"], decision = "allow")
# 示例 3:出于绝对安全考虑,禁止 AI 执行任何数据库迁移或高危删除指令prefix_rule( pattern = ["rm", "-rf"], decision = "forbidden")验证规则:
xxxxxxxxxxcodex execpolicy check --pretty \ --rules ~/.codex/rules/default.rules \ -- gh pr view 7888Codex 中,沙箱、审批模式、Auto Mode、Rules、permissions 五者之间的关系:
| 概念 | 核心解决什么问题? | 控制的维度 | 典型配置/状态示例 |
|---|---|---|---|
Sandbox (沙箱模式) | AI 能碰哪些文件?能不能联网? | 空间与资源边界 | read-only / workspace-write / danger-full-access |
Approval (审批策略) | AI 在边界内做事时,什么情况该停下来问我? | 流程与交互频率 | on-request / untrusted / never |
Auto Mode (自动模式) | 我不想配那么复杂,默认怎么用最省心? | 官方推荐的开箱即用预设 | --full-auto (等同于:沙箱留在工作区 + 遇例外才弹窗) |
Rules (预授权规则) | 某条特定命令(如 git push)我想每次直接放行或直接禁止 | 特定命令前缀的微调例外 | prefix_rule(pattern=["git", "diff"], decision="allow") |
/permissions | 怎么在终端里快速查看当前的权限配置或现场改模式? | 实时交互指令 | 在 Codex 终端中直接输入 /permissions |
Sandbox 与 Approval:安全的双黄金旋钮 (The Twin Knobs)。Codex 内部通过这两个指标的组合来决定 AI 的行动自由度。
Sandbox Mode:定义硬边界。如果是 workspace-write,AI 的写入权限就被锁死在当前项目目录内,无法越界去改你的系统盘。
Approval Policy:定义沟通频率。如果是 on-request,AI 在沙箱内部改文件、运行常规本地测试时完全不打扰你;但当它需要突破沙箱(比如要执行涉及网络或外部目录的指令)时,就会触发 “审批”,停下来等你说 Yes。
Auto Mode:效率与安全的平衡点。
如果把 Approval 设为每次都问,你会面临“审批疲劳”(要点几十次允许);如果设为 never 且关闭沙箱(俗称 --yolo 模式),AI 的代码一旦写错可能会格式化你的硬盘。
Auto Mode 就是 OpenAI 帮大家选出的最佳甜点位(Sweet Spot):它默认自动打包了 sandbox_mode = "workspace-write" 和 approval_policy = "on-request"。让 AI 拥有“有限的自主权”,既高效又安全。
Rules:打破僵硬沙箱的“特 批条”。
虽然沙箱把 AI 关在了项目里,但有时候你必须让 AI 越界去执行某些命令(例如:去系统全局路径拿一个配置文件,或者调用全局的 git 指令)。
此时你不需要为了这一条命令而把整个沙箱扩大到 danger-full-access。你只需要写一条 Rule:decision = "allow",这就相当于给了这条特定命令一张“免死金牌/特批条”,允许它不经弹窗直接跨越沙箱执行。
/permissions:你的实时仪表盘。
这是一个在 Codex 交互式 TUI 界面中输入的控制台斜杠命令。输入 /permissions 后,你会看到一个可视化界面,上面清晰列出了当前的 Sandbox 级别、当前的 Approval 状态、以及生效的 Rules 列表。例如,你可以在这里通过键盘上下键现场把 AI 的模式从 Auto 切换到 Read-only,调整 AI 的权限。
权限设置原则:
最小权限原则:只允许绝对必要的、明确安全的操作。
优先使用配置文件:将 settings.json (或者 config.toml)纳入版本控制,确保团队环境一致。
避免"YOLO (You Only Live Once)模式":不推荐日常使用 --dangerously-skip-permissions(或者 --dangerously-bypass-approvals-and-sandbox)。
善用 deny 规则:主动阻止高风险操作,如 Bash(rm -rf *) 或 Write(*.env)。
结合 CLAUDE.md(或者 AGENTS.md):在项目根目录明确规范,从源头引导 Claude 的行为。
在 Claude Code 中,可以配置 .claudeignore 文件,其功能和语法与大家熟知的 .gitignore 完全相同。它的主要作用包括:
保护敏感信息:防止 Claude Code 意外读取或修改包含 API Key、密码的 .env 文件或私钥文件。
节省 Token 与成本:屏蔽掉 node_modules/、.git/ 或大型构建产物目录,避免Claude Code 扫描无关文件,降低使用成本。
提高工作效率:让Claude Code集中精力处理真正重要的源代码文件,避免因读取垃圾文件而 “迷路” 或产生幻觉。
你只需要在项目的根目录创建一个名为 .claudeignore 的文件,并在里面写入不想让 Claude 碰到的文件或目录路径。
而 Codex 目前不支持这种 .ignore 文件。
Computer Use: Claude Code 和 Codex 都支持开启和使用 Computer Use(电脑操作模式)。
Claude Code : Claude Code 在 CLI 原生提供了 Computer Use 研究预览版,可以让 AI 在后台打开 macOS 应用、移动鼠标、点击和截图,并支持全无人值守开发模式。
前提条件:
目前仅支持 macOS 平台(研究预览版)。
需要订阅 Pro 或 Max 个人计划(目前不支持 Team 或 Enterprise 计划)。
确保 claude-code 升级至 v2.1.85 或更高版本。
必须在交互式会话中运行,使用 -p 标志的非交互模式无法使用该功能。
使用方法:直接在终端对话中用自然语言对 Claude 下达需要操作桌面的任务。例如:
xxxxxxxxxx启动我正在开发的 Swift App,点击右上角的 ‘测试’ 按钮,并把结果截图发给我。
Codex:Codex 主要通过 Codex App 来提供多模态操作。Codex 提供了三种不同的方式来操作电脑,根据任务需要使用不同的关键词(@ 指令)来触发:
原生桌面端操作(@Computer):
适用场景:需要操作桌面应用、修改系统设置或控制没有 API 的软件界面。
使用方法:在 Codex 聊天框中输入 @Computer 激活该模式,随后输入指令。它会看见你的屏幕并移动虚拟鼠标进行点击和输入。
浏览器接管(@Chrome):
适用场景:任务依赖于你已经登录的 Chrome 浏览器状态、Cookie、多标签页协作或特定网页插件。
使用方法:输入 @Chrome。Codex 会申请调用并连接你本地的 Chrome 浏览器(需在弹窗中点击确认授权),自动接管浏览器去执行网页级自动化任务(如抓取看板、发送邮件等)。
内置独立浏览器(@Browser):
适用场景:正在开发网页、调试本地前端页面、检查响应式布局或做视觉反馈。
使用方法:输入 @Browser,Codex 将在内置的安全沙盒浏览器中运行并测试网页,不会干扰你本地的浏览记录。
Codex 的 Computer Use 可以通过 CLI(命令行界面)进行调用,但是存在一些限制:
首先,必须使用 Codex.app 内部绑定的 CLI 工具,或通过其内置命令行环境。
其次,必须在 Codex App 设置中激活并安装 Computer Use Plugin。
通过 CLI 触发 Computer Use 的方式:
显式指定技能(Skills):使用带 -c 或技能调用标志参数,显式将 computer-use 作为环境技能加载。
或者通过关键字引导(与 App 类似):在交互会话中,直接在 Prompt 开头包含特定声明(如 “Use computer use plugin to...” 或在支持的会话中输入包含 @computer 的指令引导),模型便会分流至 GUI 控制流。
语音输入:
Claude Code:Claude Code 拥有原生内置的语音听写模式(无需配置第三方工具)。
启用:在 Claude Code 交互会话中输入 /voice 回车,即可开启语音模式。
使用(对讲机模式):按住空格键(Space)不放并开始说话;松开空格键,语音会自动被实时转录为文字并插入到当前光标位置。
混合输入:你可以先打字,然后按住空格用语音补充,再接着打字,两者无缝切换。
注意:语音转录功能对 Pro、Max、Team 等订阅用户完全免费,且不计入 Token 额度。
Codex:Codex 对语音的支持已经全面铺开,支持直接的语音转文字。
使用:在 Codex App 或 Codex CLI 中,直接按下快捷键 Ctrl + M(或点击界面上的麦克风图标)即可开始语音听写。
原理:它基于内置的 OpenAI Whisper 模型进行实时转录,精确度极高,能够很好地识别编程相关的技术术语。
图片输入:
Claude Code:由于 Claude Code 主要在终端(Terminal)中运行,无法直接预览图片,但它完全支持将图片作为附件发送给底层的 Claude 模型进行视觉分析。
使用方式:直接拖拽图片文件到终端窗口中,或者在电脑上复制图片后直接在输入框中粘贴(Ctrl+V / Cmd+V)。
效果:图片会作为附加资源(Attachment)挂载在你的下一条提示词中,可以用来让 Claude 审查 UI 截图、报错设计图或参考设计。
Codex:Codex 背靠 GPT 强大的视觉与多模态能力,对图片的处理更加主动,甚至可以进行图像生成。
图片分析(Vision):
Codex App:直接将图片粘贴或拖入输入框,配合提示词让其分析视觉 Bug、解析架构图或还原 UI。
Codex CLI:在终端中,你无法直接 “粘贴” 图片,但可以通过指令显式挂载,例如在输入提示词时使用 --image 参数指定本地图片路径。例如:
xxxxxxxxxxcodex "帮我还原这个UI" --image ./ui_design.png
图片生成(DALL-E 联动):Codex 允许你在对话中直接输入指令,生成或修改占位图、图标、横幅等资产。例如:
xxxxxxxxxx帮我生成一个 64x64 的返回按钮图标
Claude Code / Codex 的 Session(会话)在底层都是为了解决* “让 AI Agent 记住代码上下文并拥有执行权限”的问题,但它们在设计哲学、历史状态管理、跨会话记忆方面有着截然不同的实现方式。
Claude Code 的 Session 是上下文管理与状态持久化的核心单元。
数据格式与存储:Claude Code 绑定特定项目目录。本质是以 JSONL 格式存储在 ~/.claude/projects/<项目哈希>/<会话ID>.jsonl 的本地日志,记录用户输入、Claude 回复、工具调用、文件变更快照等所有交互信息。
在启动时进行 Session 管理:
新建匿名会话:在当前目录创建全新匿名会话。
使用场景:首次进入项目、开启全新任务。
注意事项:后续可用 /rename 命名。
xxxxxxxxxxclaude新建命名会话:创建并启动指定名称的新会话。
使用场景:重要任务提前命名,方便恢复。
注意事项:名称避免特殊字符。
xxxxxxxxxxclaude -n <会话名>恢复最近会话:恢复当前目录最近一次会话。
使用场景:上次任务中断,快速续做。
注意事项:仅恢复当前目录的最近会话。
xxxxxxxxxxclaude -cclaude --continue # 或者打开会话选择器:弹出会话列表,支持搜索/筛选/预览。
使用场景:跨项目切换任务、找回历史会话。
xxxxxxxxxxclaude --resume恢复指定会话:一键恢复指定名称或 ID 的会话。
使用场景:已知会话名,快速切换。
注意事项:需会话已命名。
xxxxxxxxxxclaude --resume <会话名/ID>分支恢复会话:恢复最近会话并创建独立分支副本。
使用场景:基于旧任务尝试新方案,不破坏原进度。
注意事项:原会话工具授权不会继承到新分支。
xxxxxxxxxxclaude --continue --fork-session
在会话中进行 Session 管理:
清空当前会话:清空当前会话的对话上下文,开启全新对话流。原会话历史仍保存本地,可通过 /resume 找回。
使用场景:当需要开始一个与当前会话完全不同的任务时。
注意事项:同任务上下文过长时,优先用 /compact,不要用 /clear。
xxxxxxxxxx/clear/reset # 或者/new # 或者压缩当前会话的历史:将当前会话历史压缩为核心摘要,释放上下文 token 空间。可附加说明指定重点保留的信息(如技术决策、参数定义)。
使用场景:上下文占用超过 80% 时建议执行(可用 /context 查看)。
注意事项:压缩后无法回退到压缩前的历史节点。
xxxxxxxxxx/compact [自定义说明]切换到指定的历史会话:不带参数时打开会话选择器;带参数时直接切换到指定会话。
使用场景:需要回到历史会话继续工作。
注意事项:默认仅显示当前项目会话,按 Ctrl+A 查看所有项目会话。
xxxxxxxxxx/resume [会话名/ID]/continue # 或者创建独立分支会话:基于当前会话完整状态创建独立分支会话,原会话保持不变。
使用场景:用于探索多种方案而不破坏主会话进度。
注意事项:原会话已授权的工具权限不会继承到新分支。
xxxxxxxxxx/branch <新分支名>/fork # 或者回滚当前会话:打开历史检查点列表,支持三种回退模式:同时回退对话 + 代码、仅回退对话(保留代码修改)、仅回退代码(保留对话)
使用场景:当 Claude 正在做你不想要的事或者改坏了代码。
注意事项:仅能撤销 Claude Code 在当前会话内的文件修改,无法撤销手动终端命令(如 rm、git push);无法回退外部系统操作(数据库修改、API 调用);/compact 压缩后的会话无法回退到压缩前节点。
xxxxxxxxxx/rewind/checkpoint # 或者
快捷键:双击 Esc。
重命名当前会话:重命名当前会话。命名后可用 claude --resume <名称> 一键启动。
xxxxxxxxxx/rename <新名称>导出当前会话:无参数时将对话复制到剪贴板;带参数时保存为本地可读文本文件。
注意事项:仅导出文本对话,不含文件变更的二进制快照。
xxxxxxxxxx/export [文件名]查看当前会话上下文:查看当前会话的上下文 token 占用与剩余空间。
使用场景:当上下文过长从而想要压缩上下文时。
注意事项:上下文超过 90% 后 AI 易出现信息遗漏、回答质量下降。
xxxxxxxxxx/context结束当前会话:正常结束会话,退出 Claude Code。
注意事项:Claude Code 会自动保存会话状态,下次可正常恢复。
xxxxxxxxxx/exit/quit # 或者临时提问:临时提问,不污染主线任务上下文。
使用场景:主线任务执行过程中突发简短的、一次性的、临时的任务。
注意事项:不写入会话历史、不占用上下文窗口 token。关闭后完全不留痕迹。
xxxxxxxxxx/btw [你的问题].
Codex 的 Session 核心是一套基于 “显式元提示词和显式文件挂载” 的原子化沙盒。
数据格式与存储:Codex 每次会话的完整原始记录均以 .jsonl 格式持久化存储在本机的 ~/.codex/sessions/ 目录下。
显式上下文管理:它的 Session 是高度结构化的。打开一个底层 JSONL,你会看到非常清晰的三层提示词结构:
Meta Prompt(元提示词):定义当前底层模型(如 GPT-5)的 Agent 人设。
Environment Prompt(环境提示词):当前工作目录、挂载的特定 API 权限。
Context / Skills(上下文与技能):用户明确让其读取的代码片段、日志,以及当前挂载的自定义扩展技能。
在启动时进行 Session 管理:
新建匿名会话:在当前工作目录创建一个全新的交互式会话。
使用场景:首次进入该项目,或需要单独开启一个全新编码任务时。
注意事项:启动后可用内建命令为其命名以方便历史回溯。
xxxxxxxxxxcodex新建命名会话:通过参数指定名称直接启动新会话。
使用场景:对特定复杂的功能开发做预先标记,便于后续通过名称精准找回。
xxxxxxxxxx codex --name <会话名>恢复最近会话:一键拉起并继续当前项目或全局下最近一次的活跃会话。
使用场景:接续中断的编码进度,省去重新扫描项目索引的时间。
xxxxxxxxxx codex resume --last打开会话选择器:弹出一个可交互的命令行 TUI (Text User Interface) 界面,供用户搜索、筛选和预览历史会话。
使用场景:跨模块寻找几天前的历史上下文或查看之前的技术方案。
xxxxxxxxxxcodex resume恢复指定会话:通过路径、会话名称或特定的会话 UUID 直接恢复。
使用场景:精确知道要找哪个历史节点,不需要通过选择器人工筛选。
xxxxxxxxxxcodex resume <会话名/ID或文件路径>分支恢复(创建副本):将最近一次的会话(或者历史会话)复制到一个独立的新线程副本中启动。
使用场景:既想保留上一次的完整上下文基线,又想安全地试探另一种实现分支。
xxxxxxxxxxcodex fork --lastcodex fork <会话名>在会话中进行 Session 管理:
清空当前会话:清空当前的对话上下文和缓存空间,就地开启一个干净的对话流。
使用场景:当前任务已彻底完成,要在同一个项目下安排完全不相关的全新开发需求。
注意事项:此命令仅清除内存上下文,不会抹除已存储的本地磁盘会话文件。
xxxxxxxxxx/clear/reset # 或者/new # 或者压缩当前会话的历史:将冗长的前文大面积压缩为一段概括核心逻辑的 Summary,以释放极其宝贵的上下文 Token 额度。
使用场景:面对超大型长序列,长轮次对话后 Prompts Token 即将溢出时(可通过工具监控占用)。
注意事项:压缩会截断并合并历史细节,一般无法反向平铺还原。
xxxxxxxxxx/compact切换/导入历史会话:不带参数时通常会调出内部搜索器,或者通过技能插件直接加载对应的会话数据注入到当前上下文。
使用场景:在交互中突发需要翻阅或合并之前的任务。
xxxxxxxxxx/resume [会话名/ID]创建独立分支会话:就地基于当前会话的最新时刻,“分裂”出一个全新的独立会话。
使用场景:类似于 Git Branch,用于针对一个 Bug 探索两种完全不同的修复路径,且彼此不污染。
xxxxxxxxxx/fork [新分支名]回滚当前会话:呼出会话的检查点列表,允许用户将整个 Agent 的进程强制倒带回之前的某一步。
使用场景:当 Codex 推理跑偏、陷入死循环调试或大面积把本地代码写坏时。
注意事项:回滚会彻底舍弃该检查点之后的对话流及自动生成的临时代码 diff。
xxxxxxxxxx/rewind快捷键:在部分交互终端中,通常可以通过 Esc 或者 Ctrl+C 快速重置和清理当前的输入提示。.
导出当前会话:将当下的对话历史、执行过程以及系统回执完整转储或输出。
使用场景:需要将 Agent 的思考链路或运行日志存档汇报、提供给队友查看。
xxxxxxxxxx/export [文件名]查看当前会话状态/令牌:查看当前会话中已经消耗的模型 Token、输入输出配额以及当前缓存状态。
使用场景:评估 Agent 还能维持多久的记忆,决定是否需要立即执行 /compact。
xxxxxxxxxx/status/tokens # 或者结束当前会话:正常且安全地退出 Codex 交互式 CLI。
注意事项:退出时 Codex 会确保本地 Session 和代理日志被完全刷入磁盘(Flush),以便后续可以完美 Resume。
xxxxxxxxxx/exit/quit # 或者临时提问/微型目标:在不干扰和不污染当前主对话上下文与记忆链的前提下,插入一个一次性的微型查询任务。
使用场景:在大型重构进行中,突发想问一个关于某 API 规范或基础语法的简短问题,不希望让这个插曲破坏主线的长上下文。
xxxxxxxxxx/ask [你的问题]创建/管理侧边独立会话:在不中断当前主会话的前提下,开启一个共享项目上下文的侧边辅助对话流。无参数时列出所有侧边会话,带参数时可直接创建或切换。
使用场景:在解决主线复杂任务(如大范围重构)时,突发需要并行排查一个独立的小 Bug 或查询特定 API,可用此命令拉起侧边独立讨论,避免主线上下文被不相关的长对话污染。
注意事项:侧边会话是独立的上下文沙盒,其对话历史和 Token 消耗与主会话相互隔离。
xxxxxxxxxx/side [侧边会话名/ID]归档历史会话:将当前会话(或指定会话)移入归档库。无参数时默认归档当前会话并自动退出或切换。
使用场景:某个阶段性开发任务或功能模块已完美收工,不希望它继续堆积在活跃会话选择器(/resume)的主列表中,但又需要保留其历史轨迹以备日后审计。
注意事项:已归档会话不会被物理删除,但在默认的会话列表中会被隐藏,需在选择器中切换筛选模式(或通过特定的全局查看参数)才能重新找回。
xxxxxxxxxx/archive [会话名/ID]取消归档/激活历史会话:将已被移入归档库的冷冻会话重新激活,恢复其在活跃会话列表中的可见性与可操作性。不带参数时通常会打开已归档会话的选择列表。
使用场景:原本以为已经完美收工的阶段性任务(例如一个已归档的功能模块),因为测试反馈了新的边缘 Bug,或者需要在此前技术方案的基础上继续追加迭代,需要将其重新唤醒。
注意事项:激活后,该会话将自动重新绑定到当前项目的活跃会话列表中,用户可以使用 /resume 正常切入并继续对话。如果该会话此前关联的本地代码版本与当前代码仓状态冲突,建议在执行后优先检查代码上下文同步情况。
xxxxxxxxxx/unarchive [会话名/ID]彻底删除会话:永久物理删除指定名称、ID 或当前的会话文件,释放本地磁盘空间。
使用场景:因测试或临时提问产生的废弃会话,或者包含敏感信息、代码写坏需要彻底销毁痕迹的会话。
注意事项:此操作不可逆!执行后对应的本地 JSONL 日志及快照将被彻底抹除,无法通过 /resume 或 /rewind 找回。如果删除当前正在进行的会话,系统通常会自动结束并退回到终端。
xxxxxxxxxx/delete [会话名/ID]/remove # 或者/rm # 或者对历史会话进行管理:
将指定会话移入归档库。
xxxxxxxxxxcodex archive [会话名/ID]取消归档/激活历史会话:将已被移入归档库的冷冻会话重新激活,恢复其在活跃会话列表中的可见性与可操作性。
xxxxxxxxxxcodex unarchive [会话名/ID]彻底删除会话:永久物理删除指定名称、ID 或当前的会话文件,释放本地磁盘空间。
xxxxxxxxxxcodex delete [会话名/ID]codex delete --force [会话名/ID] # 跳过确认直接删除注意:Claude Code 目前官方并没有关于 archive/unarchive/delete 会话的指令。
CLAUDE.md 是 Claude Code 专属持久上下文配置文件,纯 Markdown,每次打开会话自动加载注入上下文,相当于给 Claude 一份永久项目说明书。
核心作用:
消除重复解释:不用每次对话重复说明技术栈、目录、命令、规范。
统一代码输出风格:强制 Claude 遵循项目现有架构、命名、文件分层。
约束危险操作:定义禁止行为、安全边界、数据库/生产环境红线。
提升生成准确率:大幅减少 Claude Code 猜错框架、放错文件的问题。
CLAUDE.md 的加载优先级(由全局到局部,全部合并生效,不覆盖):
| 路径 | 作用域 | 用途 |
|---|---|---|
~/.claude/CLAUDE.md | 本机所有项目 | 个人全局偏好(统一包管理器、默认开启单测等) |
仓库根目录 /CLAUDE.md | 当前整个代码库 | 项目主配置(90% 场景只用这个) |
子目录 /modules/user/CLAUDE.md | 仅该子文件夹 | 模块专属规则 |
创建 CLAUDE.md :
快速生成(推荐):在 Claude Code 中输入 /init,Claude Code 自动扫描项目生成基础模板(提取技术栈、命令、目录结构、代码风格)。
手动创建步骤:
在仓库根目录新建 CLAUDE.md(必须大写,小写不识别)。该文件用 UTF-8 编码,采用标准 Markdown 语法。官方建议单文件 ≤ 200–300 行,过长会稀释指令权重、占用上下文 token。
保存后新开会话立即生效,已打开的窗口需重启会话。
CLAUDE.md 标准结构模板:遵循 “项目全景 → 工具命令 → 目录架构 → 编码规范 → 安全红线 → 外部文档引用” 分层,每条指令具体、可校验。
xxxxxxxxxx---name: 项目全局规则paths: ["**/*"]---
# 1. 项目全景## 项目简介本项目是基于 Next.js 15 App Router 的 SaaS 用户后台,TypeScript Strict,PostgreSQL + Drizzle ORM,Auth.js 登录鉴权,部署 Vercel。
## 技术栈- 语言:TypeScript 5.6,strict: true,禁止 any、禁止隐式类型- 框架:Next.js 15.2 App Router,不创建 pages/ 目录- 样式:Tailwind CSS v4 + shadcn/ui,不引入 Ant Design- 数据库:PostgreSQL,ORM Drizzle,不混用 Prisma- 包管理器:pnpm 9,禁止 npm/yarn 命令- 测试:Vitest + React Testing Library,E2E Playwright
# 2. 开发命令- pnpm dev:启动开发服务,端口 3000- pnpm build:生产打包,提交前必须无报错- pnpm lint:ESLint + Prettier 自动格式化- pnpm test:全部单元测试,新增功能必须补充单测- pnpm db:migrate:执行数据库迁移- pnpm db:seed:本地测试填充假数据,禁止线上执行
# 3. 目录架构src/├── app/ # App Router 路由与 API,route.ts 放接口├── components/│ ├── ui/ # 通用基础组件 Button/Input│ └── features/ # 业务模块组件,按功能拆分文件夹├── lib/│ ├── db/ # ORM 客户端、表定义、查询工具│ ├── auth/ # 登录、权限中间件│ └── utils/ # 纯工具函数,无组件逻辑├── types/ # 全局类型定义,禁止散落在业务文件└── middleware.ts # 全局路由鉴权拦截器
## 目录规则1. 所有接口统一放在 app/api/**/route.ts2. 数据库表结构仅在 lib/db/schema 下修改3. 组件不跨模块导入,公共逻辑抽 lib/utils
# 4. 编码规范## 命名规则1. 文件/文件夹:kebab-case(user-profile.ts)2. React 组件:PascalCase(UserProfile.tsx)3. 变量/函数:camelCase;常量全大写 USER_STATUS4. 数据库表:snake_case,模型类 PascalCase
## 代码格式1. 缩进 2 空格,单行长度 ≤ 120 字符2. 导出函数必须显式声明返回类型3. 组件 Props 统一抽单独 interface,不内联类型
# 5. 安全红线## 必须遵守1. 所有接口参数强制校验,禁止直接入数据库2. 环境变量统一读取 env 工具,不直接 process.env3. 修改数据库逻辑前先写测试用例
## 绝对禁止1. 禁止硬编码密钥、域名、Token2. 禁止生产数据库全表 DELETE / DROP 语句3. 禁止修改根目录 env.example、vercel.json 基础配置4. 架构变更前必须先提问确认,不直接重构目录
# 6. 外部文档引用- API 设计规范:docs/api-design.md- 数据库表说明:docs/database-schema.md- 部署流程:docs/deploy.mdCLAUDE.md 内容设计原则:
只写永久通用内容:临时需求、单次脚本、个人调试方法不写入;复杂文档单独建 docs/,在 CLAUDE.md 中用 @ 来引用。
指令具象化,拒绝模糊话术。例如,不要写 “代码要规范,注意类型,写测试”,而要写 “所有导出函数必须显式标注返回类型;新增组件必须配套同目录 xxx.test.tsx 单元测试文件”。
控制长度:主文件控制 200 行内,模块专属规则放子目录 CLAUDE.md,文件类型规则放 .claude/rules/。
分层清晰:用 #、##、 ### 区分大模块,AI 更容易分块读取。
持续迭代:Claude 反复犯同一错误时,直接补充进 CLAUDE.md 固化。
常见误区:
| 错误做法 | 后果 |
|---|---|
文件名小写 claude.md | 不会被自动加载 |
| 写入密钥、线上配置 | 泄露风险,禁止提交 Git |
写上万字超长文档(包括 @ 引用一个大文件) | Token 过载,核心规则被稀释,Claude Code 无视约束 |
| 只写业务细节,不写架构/命令 | Claude Code 仍会搞错文件位置、执行错误脚本 |
| 只有模糊软性要求,无明确禁止项 | 无法约束危险操作 |
只有 “永远不要做 xxx“,而没有提供一个替代方案 | Claude Code 不知道可以做哪些,因此可能会卡住 |
除了 CLAUDE.md 之外,.claude/rules/*.md 支持文件或者项目模块粒度的规则,仅按需加载(编辑对应文件或模块时加载)。它不会在启动时一次性加载所有规则,而是根据你当前给它的任务来动态加载。
极大地节省 Token 成本:如果项目很大,各类规范加起来有几万字,每次对话都全盘读取会非常烧钱。按需加载能让每次对话的上下文保持精简。
避免 AI “记忆过载”与混乱:AI 的上下文窗口是有限的。规则太多时,它容易顾此失彼。只给它看当前需要的规则,能让它的代码产出质量大幅提升。
在 Claude Code 中,CLAUDE.md 和 .claude/rules/*.md 都是用来持久化配置 AI 编码规范的 Markdown 文件,两者的核心区别在于范围广度与模块化控制。
| 维度 | CLAUDE.md | .claude/rules/*.md |
|---|---|---|
| 定位描述 | 项目的通用宪法(全局常驻规范) | 专项/模块化法规(垂直领域规范) |
| 文件位置 | 放置在项目的根目录(或子包根目录) | 放置在项目根目录下的 .claude/rules/ 文件夹内 |
| 文件结构 | 单文件,包含通用技术栈、编译/测试命令、基础风格 | 多文件/模块化,按技术栈、测试、安全等拆分 |
| 加载机制 | 全局始终加载。启动任何会话或处理任何任务时均会读取 | 根据路径/条件加载。通过 YAML 元数据条件触发,或涉及特定文件时加载 |
| 路径级过滤 | 不支持无法精细到具体的文件后缀或路径 | 支持。可在文件顶部使用 YAML paths 声明生效范围 |
| Token 消耗 | 高(如果写得过长,会全局占用 Context 窗口) | 低(按需加载匹配规则,有效避免 Token 膨胀) |
| 最佳适用场景 | 记录项目的 pnpm build 命令、运行测试方法、核心架构原则 | 记录前端 React 组件规范、后端 API 路由约定、特定目录安全检查 |
进阶用法示例:
通用规章(CLAUDE.md):适合存放整个项目无论修改什么文件都必须知道的大原则。
xxxxxxxxxx# Project Commands- Build: pnpm build- Test: pnpm test
# Universal Code Style- Always use TypeScript with strict mode.- Prefer descriptive variable names.条件触发规则(.claude/rules/api-style.md):适合存放利用 YAML Frontmatter 实现按需加载的局部特化规则。
xxxxxxxxxx---paths: - "src/api/**/*" - "apps/server/**/*"---# API Development Rules- ALWAYS include a `request_id` in response payloads.- Use explicit HTTP status codes (e.g., 201 for Created).- Never return raw database errors to the client.且仅当 Claude 修改或读取符合 paths 里的后端 API 代码时,该规则才会被加载进上下文,避免污染前端 UI 开发的会话。
如果你遇到了 Claude 不听话的情况,可以在终端输入 /memory 指令,实时查看当前会话究竟加载了哪些规则文件。
AGENTS.md 是 Codex 的项目配置文件,相当于 Claude Code 的 CLAUDE.md。
AGENTS.md 的加载优先级(由全局到局部,全部合并生效,不覆盖):
| 路径 | 作用域 | 用途 / 最佳实践 |
|---|---|---|
~/.codex/AGENTS.md (或 AGENTS.override.md) | 本机所有项目 | 个人全局偏好: 定义跨项目的通用 AI 行为,如代码审查风格、回复长短、默认首选的交互语言或通用的 Git 提交偏好。 |
仓库根目录 /AGENTS.md | 当前整个代码库 | 项目主配置(最核心): 定义团队共享的架构规范、技术栈、依赖构建命令(npm run build)、测试套件运行方式以及目录结构约定。 |
子目录 /packages/api/AGENTS.md (任何深度的子文件夹) | 仅该子文件夹及下属目录 | 模块专属规则: 为特定服务或高危模块定制规则。例如:规定 /payments 目录必须执行更严格的安全校验,或规定子模块特有的本地测试命令。 |
创建 AGENTS.md :
快速生成(推荐):在 Codex 中输入 /init,Codex 自动扫描项目生成基础模板(提取技术栈、命令、目录结构、代码风格)。
手动创建步骤:
在仓库根目录新建 AGENTS.md(必须大写,小写不识别)。该文件用 UTF-8 编码,采用标准 Markdown 语法。官方建议单文件 ≤ 200–300 行,过长会稀释指令权重、占用上下文 token。
保存后新开会话立即生效,已打开的窗口需重启会话。
AGENTS.md 标准结构模板:
xxxxxxxxxx# 机器人项目 AI 助手指令 (AGENTS.md)
## 1. 项目概述- **技术栈**: React, TypeScript, Vite, TailwindCSS- **包管理器**: 优先使用 `pnpm`,禁止使用 npm 或 yarn
## 2. 核心目录结构- `/src/components`: 存放通用 UI 组件- `/src/hooks`: 存放全局自定义 React Hooks- `/src/pages`: 页面级组件,禁止在此处编写复杂的业务逻辑
## 3. 运行与验证命令- **开发环境**: `pnpm dev`- **代码构建**: `pnpm build`- **测试命令**: `pnpm test`(修改任何核心代码后必须运行此命令)- **代码检查**: `pnpm lint`
## 4. 编码规范与约束- **修改原则**: 优先进行最小化改动,改代码前先向用户解释原因。- **依赖管理**: 禁止擅自引入新的第三方 npm 依赖,必须先向用户确认。- **注释要求**: 所有的公共 API、导出的函数和接口必须补充完整的 TSDoc 注释。- **状态管理**: 优先使用本地状态(useState/useContext),不要轻易引入全局状态。
## 5. 任务交付定义 (Definition of Done)- 代码通过 `pnpm lint` 检查,无报错与警告。- 新编写的功能必须在 `/tests` 目录下附带对应的自动化测试用例。- 交付时需附带简短的修改说明及验证步骤。
Codex 按以下顺序构建指令链,后加载的优先级更高:
~/.codex/AGENTS.override.md(如存在)。
~/.codex/AGENTS.md。
Git 根目录 → 当前目录,逐级检查 AGENTS.override.md 和 AGENTS.md。
所有文件以空行分隔拼接,总大小默认上限为 32 KiB(project_doc_max_bytes)。如果超出上限,那么超出的部分则直接丢弃,而且没有任何报警。这会导致一个极具误导性的副作用:
在正常情况下,最接近你当前工作目录(叶子节点)的 AGENTS.md 应该拥有最高优先级(因为后拼接的会覆盖前拼接的冲突规则)。
但如果上层的 ~/.codex/AGENTS.md 或项目根目录 /AGENTS.md 已经写得太臃肿,直接塞满了 32 KiB,那么底层的子目录专属规则根本就不会被 Codex 读取和加载。这意味着你在子目录写的特定安全校验、专属测试命令等,将完全处于失效状态。
解决方案:在你的全局配置文件 ~/.codex/config.toml 中,手动修改 project_doc_max_bytes:
xxxxxxxxxx# 将限制扩大到 64 KiBproject_doc_max_bytes = 65536Claude Code 在加载 CLAUDE.md 时也存在严格的大小上限与静默截断机制:
单个或合并后的 CLAUDE.md 会在内部读取时被限制在 40,000 字节(约 40 KB)的硬上限内(默认 lint 警告线为 30KB)
当文件体积超过 ~30KB(精准值为 28,672 字节)时,Claude Code 底层的读取器会直接对其执行静默截断(即,默默截断而不会报警)。超出的规则和指令根本不会进入 Claude 初始化的 System Prompt 中。
与 Codex 一口气把多层级拼接完不同,Claude Code 采用的是按需惰性加载(Lazy Loading)机制:
全局与根目录 (~/.claude/CLAUDE.md 和 /CLAUDE.md) 会在 CLI 会话启动时立即加载。
子目录 (/modules/user/CLAUDE.md) 的规则,只有当 Claude 真正去读取或修改该目录下的源码文件时,才会被动态注入。
致命隐患:如果你的根目录 /CLAUDE.md 本身就已经非常臃肿(接近 30KB),那么当 Claude 深入到子目录工作、尝试动态追加子目录规则时,由于整体规则流迅速被推过了 40KB 硬限制,子目录的专属规则在注入的瞬间就会被直接截断丢弃。
与 Codex 统一使用全局或项目下的 config.toml 不同,Claude Code 的 settings.json 采用了更精细的多层作用域设计,从全局到本地层层覆盖:
全局用户级:~/.claude/settings.json。
作用:影响你这台电脑上的所有项目,通常用来配置通用的偏好、全局的模型路由等。
项目级:你的项目根目录下 .claude/settings.json。
作用:专门针对当前代码仓库。这个文件可以提交到 Git,让团队所有成员共享相同的运行配置(如同类模型、权限级别)。
本地私有级(Local Scope):.claude/settings.local.json。
作用:仅在当前电脑的当前项目生效,会被 Git 忽略。适合存放你个人的测试配置或敏感控制。
注意:对于 MCP 服务,Claude Code 还会配合使用全局的 ~/.claude.json 和项目级的 .mcp.json 来进行扩展工具的管理。
在 Codex 中你可能需要频繁用文本编辑器打开 config.toml 修改参数。但是在 Claude Code 中,不需要手动改 settings.json:在 Claude Code 终端中直接输入 /config,它会弹出一个漂亮的 TUI(终端用户界面)页签,你可以直接用方向键和空格键勾选或修改权限、模型、日志级别等,保存后会自动帮你写入对应的 settings.json 中。
config.toml 是 Codex 的核心配置文件,它采用 TOML(Tom's Obvious, Minimal Language)格式。
技术参数:规定 Codex 底层的硬件和网络参数。
LLM 路由:指定调用哪个模型,包括 API 密钥、温度(Temperature)和最大 Token 数。
工具绑定:激活或禁用 Codex 可以调用的外部工具、API 或沙盒环境。
数据库连接:配置向量数据库或关系型数据库的连接字符串。
config.toml 与 AGENT.md 的核心区别:
| 维度 | config.toml | AGENT.md |
|---|---|---|
| 面向对象 | 机器 / 代码编译器 | 人类开发者 / LLM 提示词引擎 |
| 文件格式 | TOML(键值对、结构化数据) | Markdown(富文本、文档流) |
| 核心关注 | How to Run(怎么运行、用什么资源) | Who & What(我是谁、要做什么任务) |
| 变动频率 | 较低(部署环境确定后很少修改) | 较高(根据测试表现不断调优提示词) |
| 典型内容 | api_key, model_name, timeout | Role, Skills, Constraints |
实例对比:
config.toml :
xxxxxxxxxx[agent]name = "CodeReviewer"version = "1.0.0"
[llm]provider = "openai"model = "gpt-4o"temperature = 0.2
[storage]vector_db = "chroma"path = "./data/vectordb"AGENTS.md:
xxxxxxxxxx# Code Reviewer Agent
## 角色设定你是一个严苛但资深的资深代码评审专家。
## 核心任务1. 检查代码中的内存泄漏隐患。2. 确保所有函数都包含异常处理。
## 约束条件- 永远不要修改用户的业务逻辑,只提供修改建议。- 必须使用严谨、专业的工程师口吻进行回复。.
Auto memory(自动记忆)是 Claude Code 的跨 Session 自主学习机制。
在没有记忆系统前,AI 就像一个“临时工”,每次输入 /clear 或开启新命令行窗口,它就会忘记之前发生的调试经验和约定。
开启 Auto memory 后,Claude 会像 “影子搭档” 一样,在协作过程中自主判断并悄悄记笔记。它会将项目特有的构建命令、踩坑记录、你的个人编码偏好等,自动写入本地的 ~/.claude/projects/<项目名>/memory/MEMORY.md 文件中。当你在第二天或新会话中启动 Claude Code 时,这些记忆会被自动重新加载,实现无缝接续工作。
Auto memory 和 CLAUDE.md 的区别:
| 维度 | CLAUDE.md(显式规则) | Auto memory(隐式经验) |
|---|---|---|
| 定义 | 你写给 Claude 的 ”员工守则” | Claude 自己整理的 ”工作笔记” |
| 维护者 | 开发者手动编写和维护 | Claude 自动在后台读写与更新 |
| 存储位置 | 项目根目录 ./CLAUDE.md(或 .claude/ 中) | 个人全局用户目录 ~/.claude/projects/... |
| 内容偏向 | 硬性标准:技术栈版本、团队规范、严禁事项、固定的测试/编译命令 | 动态经验:特定 Bug 的排查线索、偏好的代码重构风格、临时工作流习惯 |
| 团队共享 | 共享:通常会提交到 Git,团队所有人复用 | 私有:仅留在你的本地机器,不随 Git 提交 |
Auto memory 的配置:
激活/非激活状态切换:
快捷方式:输入 /memory,使用方向键选择 Auto memory 开关 (on/off),敲击 Enter 即可完成切换。
全局配置:可以在全局的 settings.json 中配置是否默认开启,或者使用环境变量(如某些特定脱敏环境)关闭。
修改存储路径:如果你不想将 memory 存在默认的 ~/.claude/ 目录下,可以在 settings.json 中配置:
xxxxxxxxxx{ “autoMemoryDirectory”: “/your/custom/secure/path/memory”}Auto memory 的使用:Auto memory 非常自动化,通常不需要刻意操作,但提供了丰富的交互方式。
全自动记录(默认激活):在正常的编码和 Debug 过程中,当 Claude 独立解决了某个复杂的报错,或者发现了项目特定的潜规则,它会在会话结束或合适时机自动更新 MEMORY.md。
自然语言明示记忆:你可以在对话中直接对 Claude 像下命令一样让它记住某事:
xxxxxxxxxx1. 记住,这个项目我们要用 pnpm,绝对不要用 npm。2. 在记忆里存一下:本地运行 API 测试前必须先启动本地 RedisClaude 回复 ”已记住” 后,该条目就会被实时写入它的草稿本。
查看和管理控制台(/memory):在 Claude Code 的交互式终端中输入 /memory 命令,会弹出一个管理界面。你可以在这里查看当前加载了哪些记忆文件,并能直接跳转、高亮或进入编辑。
相反,
Codex不鼓励用户直接去手动修改~/.codex/memories/下的文件。
注意事项与避坑指南:
核心限制:200 行原则(200-Line Limit)。为了防止上下文(Context Window)被无限膨胀的记忆塞满,Claude Code 规定:在新会话启动时,只会自动加载 MEMORY.md 的前 200 行(或前 25KB)内容。
应对策略:当 Memory 变多时,Claude 会聪明地将具体长篇内容剥离到独立的子主题文件(如 debugging.md),而在 MEMORY.md 仅保留索引摘要。建议定期通过 /memory 检查,把失效、过期的琐碎记忆手动删掉,挪出高价值空间。
敏感信息泄露风险(安全第一):MEMORY.md 是以明文纯文本形式保存在你本地磁盘上的。如果在会话中你打印了包含 API_KEY、生产环境密码、机密 Token 的报错日志,Claude 有可能误将其当作 ”重要调试上下文” 写入记忆。
应对策略:涉及高度敏感数据或合规审查的开发时,建议通过 /memory 临时关闭 Auto memory;或者在操作完后,去本地对应目录下仔细检查并彻底抹除。
相反,
Codex在生成memories时,会自动识别并抹除明文中的密码、API密钥等敏感字段。
团队同步的局限性:因为 Auto memory 存在于你个人的用户主目录下,它无法随 Git 共享给其他队友。
应对策略:如果你发现 Auto memory 自动总结出了一条 ”针对该项目全员普适” 的金科玉律,请手动把它复制到项目根目录下的 CLAUDE.md 中,提交进代码库,让全团队都能共享这一智慧。
配合 Auto Dream 机制:如果你连续使用了几十个会话,记忆可能会出现逻辑冲突(例如前天换了框架,今天的记忆与大前天矛盾)。Claude Code 内部还配套了 Auto Dream 机制(可在 /memory 中看到),它会在后台或者你手动输入 /dream 时,像人类睡觉一样,自动去重、修剪并纠正矛盾的记忆,保持记忆的高质量。
Memory 是辅助记忆层,关键约定必须写在 CLAUDE.md,因为 Memory 不保证始终加载。
Codex 的 Memories 系统可以跨 Session 保留有用上下文,包括技术栈偏好、工作流约定和常用命令,避免每次都重复提供背景信息。
Codex 在会话结束后后台处理历史线程,提炼关键信息写入本地记忆文件。因此,Memories 是在活跃会话结束后才生成,不会即时反映当前会话的内容。
存储位置:~/.codex/memories/(包含摘要、持久条目、近期输入及支撑证据)。Codex 并不鼓励用户直接去手动修改 ~/.codex/memories/ 下的文件。
Codex 自动屏蔽 API Key、密码等敏感信息,但建议手动复查后再分享 ~/.codex/ 目录。
启用 Memories:
xxxxxxxxxx# ~/.codex/config.tomlmemories = true细粒度配置:
xxxxxxxxxx[memories]generate_memories = true # 是否从新会话生成记忆use_memories = true # 是否向新会话注入记忆disable_on_external_context = true # 使用 MCP 工具或网络搜索时禁用记忆存储min_rate_limit_remaining_percent = 10 # 接近速率限制时暂停生成会话内管理 Memories:
xxxxxxxxxx/memories # 查看并配置当前线程的记忆注入/生成策略/memories 指令控制的是当前线程的行为,与全局设置相互独立。
Codex 具备内置的脱敏机制,在生成 memories 时,会自动识别并抹除明文中的密码、API 密钥等敏感字段。
注意事项与避坑指南:
Memories 是辅助记忆层,关键约定必须写在 AGENTS.md,因为 Memories 不保证始终加载。
在 Claude Code 中,可以直接输入命令进行切换,此操作无需重启终端,立即生效。
xxxxxxxxxx/model也可以在 settings.json 中配置,从而将 Claude Code 的模型请求路由到特定的云服务端点(如 AWS Bedrock 或 Google Vertex AI):
xxxxxxxxxx{ "modelOverrides": { "claude-opus-4-7": "arn:aws:bedrock:...", "claude-sonnet-4-6": "arn:aws:bedrock:..." }}.
在 Claude Code 中,effort(推理力度)参数用于控制 Claude 在回答问题或执行编程任务时投入的 Thinking Tokens 预算。通过调节 effort 级别,你可以在响应质量(思考深度)与响应速度(Token 成本)之间取得完美的平衡。
根据你使用的模型(如 Sonnet 4.6、Opus 4.7/4.8、Fable 5 等),Claude Code 提供了以下几个级别:
low(低):最小化或不进行扩展思考,直接生成答案。速度最快,最省 Token。
medium(中):适度思考。在速度、成本和性能之间取得最佳平衡。
high(高):进行深入且全面的逻辑推理。(API 的默认级别)。
xhigh(超高):比 High 更深一层的推理。(Opus 4.7 的官方推荐与默认级别)。
max(最大):解除 Thinking Tokens 的上限约束,让模型进行无限制的深度推理。
auto(自动):交由 Claude 官方 API 的 Adaptive Thinking(自适应思考) 机制,根据提示词的复杂度自动决定思考深度。
ultracode(超级代码模式):这不仅是一个 effort level,更是 Claude Code 独有的高级设置。它会向模型发送 xhigh 推理,同时在工程层面让 Claude 编排动态工作流来处理极度实质性的开发任务。
Claude Code 提供了多种层级的设置方式,按优先级从高到低排列如下:
命令行交互(当前会话临时生效):
快捷命令:在 Claude Code 终端中直接输入 /effort <级别>(例如 /effort high 或 /effort auto)。
交互式滑块:直接输入 /effort 不加参数,会弹出一个交互式滑块,使用键盘 ← → 键调节后回车即可。
模型菜单:输入 /model 切换模型时,底部的 effort 程度滑块同样可以用左右方向键调节。
CLI 启动参数(单次运行生效):在终端启动 Claude Code 时通过 --effort 标签指定:
xxxxxxxxxxclaude --effort high环境变量(全局或持久化生效):在你的 Shell 配置文件(如 .bashrc 或 .zshrc)中加入环境变量,这会覆盖配置文件:
xxxxxxxxxxexport CLAUDE_CODE_EFFORT_LEVEL=high配置文件(长期默认生效):你可以在全局或项目目录下的 settings.json 中配置。
xxxxxxxxxx{ "model": "sonnet", "effortLevel": "high"}注意:settings.json 只接受 low、medium、high、xhigh。max 和 ultracode 属于高危/高消耗模式,不支持在配置文件中持久化,只能在会话中临时开启或通过环境变量设置。
不同 Effort Level 的应用场景:
low:跳过深度推理,基本直出。
应用场景:简单问答、解释名词、文本格式化、单文件拼写错误(Typo)修复、运行简单的 build 编译命令。
medium:适度思考,具备一定的结构化能力。
应用场景:日常业务代码编写、有明确 Specs 的单文件重构、跨文件修改、编写基本的单元测试。
high:权衡多种实现方案,自我审视逻辑。
应用场景:复杂的 Bug 排查、涉及多文件的系统重构、新功能的架构设计、代码性能调优。
xhigh:极深推理,大规模探索工具调用。
应用场景:针对 Opus 4.7/4.8 处理大规模 Agent 自动化任务、复杂黑盒问题的全盘扫描。
max:不惜代价,倾尽全力进行最深推理。
应用场景:极其神秘的线上崩溃(Heisenbug)、算法复杂度极高的核心逻辑攻坚、涉及资金安全或核心系统设计的关键决策。
ultracode:xhigh 推理 + 动态多步工作流。
应用场景:大规模端到端的功能开发、自动化迁移整个老旧项目的框架。
不同 Effort Level 的注意事项:
Token 计费与成本消耗:在 Claude 中,Thinking Tokens 的计费标准与 Output Tokens 完全相同。调高 effort 级别(尤其是 high、xhigh 和 max)会导致 Claude 消耗大量 Token,从而快速触及你的单次请求限额或订阅账单。不要盲目全时段开启最高级别。
响应延迟(Latency):Effort 越高,Claude 在把最终代码吐出来之前在 “后台思维反思” 的时间就越长。如果在不需要的简单任务上开了 high 或 max,会遭遇明显的等待卡顿,甚至发生过度思考(Overthinking)。
模型向后兼容(Fallback):如果你设置的级别当前模型不支持,Claude Code 会自动向下回退(Fallback)到该模型支持的最高级别。例如,你在旧版 Opus 4.6 模型上强行设置 xhigh,它在后台会自动退回并以 high 级别运行。
模型切换时的自动重置:当你首次在当前环境运行 Fable 5、Opus 4.8 或 Opus 4.7 时,Claude Code 会强制应用该模型的官方推荐默认值(Opus 4.7 为 xhigh,其他多为 high),即便你之前为别的模型设置过其他级别。切换模型后,建议随手打个 /effort 重新确认一下。
在自动化 /CI-CD 脚本中优化:如果你在非交互式管道(如 GitHub Actions)中使用 Claude Code,可以通过 --effort 标识针对不同步骤精细化定制(例如:静态分析用 low,生成修复补丁用 high),这样可以打造出成本极其优化的 Agent 工作流。
可以通过如下的命令来查看 tokens 的消耗:
/cost:查看当前会话开销。
显示当前 Session 中已消耗的 Input Token、Output Token 以及缓存 Token 的具体数量。
/usage:查看额度与限制状态。
展示你的计划额度限制和当前的速率限制状态(Rate-limit status)。
/stats:查看历史统计总览。
打开一个内置仪表盘,可以查看热力图、总会话数、历史累计消耗的 Token 总量、以及各模型消耗的分布图(支持查看过去 7 天或 Lifetime 终身数据)。
/context:可视化上下文占用。
如果担心 Token 消耗过快,输入 /context 可以通过彩色网格直观看到当前有哪些文件、MCP 工具输出或子代理(Subagent)正堆积在上下文窗口中,并提供清理优化建议。
在 Codex 中,可以通过两种方式选择模型:
启动时指定模型:
xxxxxxxxxxcodex --model gpt-5.5会话中切换:/model 指令。
常见的 Codex 模型:
xxxxxxxxxxgpt-5.5 # 复杂编程任务(默认推荐)gpt-4.1 # 均衡速度与能力gpt-4.1-mini # 快速迭代、简单任务o4-mini / o3 # 需要深度推理的算法或架构问题类似 Claude Code 的 Effort Level,Codex 的 Reasoning Effort 控制模型在推理上投入的 Token 预算:
xxxxxxxxxxlow # 快速响应,适合简单任务medium # 默认值high # 复杂问题、架构决策xhigh # 最高推理深度,消耗 Token 最多在 Codex 中,可以通过两种方式设置 Reasoning Effort:
在配置文件中设置:
xxxxxxxxxx# ~/.codex/config.tomlmodel_reasoning_effort = "high"在命令行中单次覆盖:
xxxxxxxxxxcodex --config model_reasoning_effort='"xhigh"' "重构认证模块"Codex 的 fast 模式:是 Codex 针对其编程开发工具推出的一种高吞吐量推理配置,旨在为开发者大幅缩短模型响应时间。开启后,GPT-5.4 模型的运行速度可直接提升 1.5 倍。加速的同时,模型的智能级别和代码推理能力完全不变。
简单来说,快速模式是用更多的钱(双倍额度)去换取服务器更多的 GPU 核心为你并行服务。它没有对模型做任何裁剪或量化,因此生成的代码质量、Debug 的精准度与标准模式完全一致。
xxxxxxxxxx/fast on # 开启快速服务层(更低延迟,适合调试)/fast off # 关闭/fast status # 查看当前状态为不同工作模式创建预设配置文件:
~/.codex/deep-review.config.toml 配置文件:
xxxxxxxxxxmodel = "gpt-5.5"model_reasoning_effort = "xhigh"~/.codex/fast-iteration.config.toml 配置文件:
xxxxxxxxxxmodel = "gpt-4.1-mini"model_reasoning_effort = "low"然后,启动时加载指定 Profile:
xxxxxxxxxxcodex --profile deep-reviewcodex --profile fast-iteration可以通过如下的命令来查看 tokens 的消耗:
xxxxxxxxxx/usage # 查看当前会话 Token 用量/usage daily # 按天统计/usage weekly # 按周统计/usage cumulative # 累计用量/status # 查看当前活跃终端 Session 的即时状态在 Claude Code / Codex 中,Skills(技能)是一种模块化的扩展机制,允许开发者将特定任务的 “行为规范”、“专业知识” 和 “工作流脚本” 打包成一个独立单元,供 Claude Code / Codex 在编码时自主调用。
在底层设计中,一个 Skill 本质上是一个包含特定文件结构的目录,其核心是一个名为 SKILL.md 的 Markdown 文件,也可以选配 Python、Bash 脚本或模板资源。
与 Prompt 的区别:Prompt 必须每次手动输入或注入。而 Skill 常驻内存并支持按需渐进式加载,平常用不到时不消耗大模型的上下文 Token 额度。
与 CLAUDE.md 的区别:CLAUDE.md 存放的是项目级的事实与静态规范(如技术栈、代码作风、变量命名等),每次对话都会被加载。而 Skills 存放的是动态流程与操作指南(如打包部署、Bug 调试、自动生成 Commit 记录),只有触发时才加载。
SKILLS 配置:配置自定义技能非常简单,你只需要将包含 SKILL.md 的文件夹放置在指定的目录即可,Claude 启动时会自动扫描。
存放位置:
全局可用(仅限当前电脑用户):放置在 ~/.claude/skills/ 目录下。
项目级别可用(团队共享):放置在当前项目的 ./.claude/skills/ 目录下。建议将该目录一并 Git 提交,这样团队所有人都能在当前项目中共享该编码技能。
配置完成后,可以通过 /skills 命令查看已有的 SKILLS。
优先级是本地覆盖全局。
标准目录结构示例:
xxxxxxxxxx.claude/skills/└── auto-commit/ <-- 技能文件夹名称 ├── SKILL.md <-- 核心配置文件(必须大写) └── generate_msg.py <-- 可选:供该技能调用的辅助自动化脚本SKILLS 的执行机制:Skills 的生命周期由 YAML 元数据(Frontmatter)驱动,其执行包含以下两个阶段:
启动与静默扫描:当你在终端启动 claude 时,AI 引擎只会读取所有 SKILL.md 顶部的 YAML 元数据(约 30 Token 的名称和描述),此时并不会加载数千字的正文内容。
触发与动态注入:有两种方式可以执行技能:
手动/指令触发:在 Claude Code 终端中直接键入斜杠命令加上技能名称,例如 /auto-commit,强制要求 AI 执行该技能。
自动/上下文触发:当你在终端对 Claude 说:“帮我检查一下刚才修改的代码并提交”,Claude 会在后台通过语义匹配到 auto-commit 技能的描述(description),并自动加载正文、执行相关规约。
SKILLS 内容怎么写:SKILL.md 必须由两部分组成:顶部的 YAML Frontmatter 元数据 以及下方的 Markdown 详细正文。
核心模板示范(以自动生成 Commit 命令为例):
xxxxxxxxxx---nameauto-commitdescription当用户要求提交代码、编写 commit 消息,或输入 /auto-commit 时触发。按照约定式提交规范生成优质的 Git 提交记录。user-invocabletruedisable-model-invocationfalseallowed-toolsbash---
# 自动提交规范技能
## 任务目标你的任务是协助用户审查当前工作区的代码修改,并生成符合规范的规范化 Git Commit。
## 执行步骤1. 主动运行 `git status` 检查当前有哪些文件被修改。2. 运行 `git diff --staged`(若无暂存,则执行 `git diff`)分析代码更改的内容。3. 严格遵循 `<type>(<scope>)<subject>` 的约定式提交(Conventional Commits)规范生成一条消息。4. **禁止**生成空泛的“update code”,必须说清改动了哪个组件,修复了什么逻辑。
## 自查清单 (Checklist) type 是否属于 feat, fix, docs, style, refactor, test, chore 之一? 标题字数是否控制在 50 个字符以内? 是否在末尾提供了破坏性更新(BREAKING CHANGE)的说明(若有)?YAML 字段参数解释:
name: 技能唯一标识,也是手动触发的命令名(如 /auto-commit)。
description: 最关键的字段。用于告诉 AI 在什么时候、遇到什么词汇时应该激活此项技能。
user-invocable:(可选)设为 false 则代表隐藏此命令,不允许用户通过斜杠手动触发,仅让 AI 在后台根据语境自动调用。
disable-model-invocation:(可选)设为 true 则代表禁止 Claude 自动触发该技能。一旦设置此参数,该技能将只能由用户通过斜杠命令(如 /auto-commit)手动触发,Claude 在对话中绝对不会自动加载或执行它。
allowed-tools:(可选)声明该技能被激活时,Claude 可以免弹窗警告直接调用的工具(如允许执行 bash 脚本)。
创建 SKILL:
直接用自然语言命令 Claude 创建:Claude Code 的基座模型本身就完美理解 Skill 的 YAML 格式和 SKILL.md 规范。不需要任何多余指令,直接用日常对话命令它即可:
xxxxxxxxxx请帮我创建一个名为 pytest-gen 的本地 Skill。功能是:读取当前的 Python 文件,并在 tests/ 目录下生成对应的 test_*.py 单元测试文件,要求覆盖异常处理和边界条件。”
通过 /plugin 正式安装 skill-creator 工具:
在 claude 会话中输入 /plugin 并回车。
在弹出的界面中,切换到 Discover 标签页,搜索 skill-creator 并选择安装。
安装成功并重启会话后,使用 /skill-creator 指令(注意必须带斜杠 /)来启动交互式的 Skill 引导构建器。
编写与使用注意事项:
Description 必须极其精准:AI 是否能自动触发完全取决于 description 的描述。请不要写模糊的 “这是一个写代码的技能”,而应写清具体的场景,如 “当用户需要对 React 组件编写单元测试,或者输入 /test-gen 时”。
注意上下文自动压缩(Compaction)机制:随着你和 AI 聊天的轮次变多,终端会触发上下文压缩机制。Claude Code 在压缩时会自动保留最近触发的 Skills(上限通常为总计 25,000 tokens),但如果技能包含过于冗长的参考文档,且你同时开启了过多技能,较老触发的技能可能会被顶掉(清除出内存)。
精简为王(控制在 500 行以内):建议单个 SKILL.md 正文控制在 500 行以内。如果需要庞大的外部库文档、API 手册,正确的做法是将它们作为独立的文件放在同目录下,在 SKILL.md 里写 “需要时,请使用 bash 工具读取同目录下的 api-reference.json”,利用 AI 的工具链按需读取,这样更加节省 Token。
官方内置技能与第三方插件:Claude Code 默认自带了一批优质的 Bundled Skills(如 /debug, /code-review, /simplify, /loop)。当你自己编写自定义技能时,注意不要与内置的命令重名以免引发冲突。
编写常驻指令而非一次性步骤:在 SKILL.md 的正文中,要把规约写成 AI 在整个会话中需要一直遵守的原则或框架(如 “在输出任何内容前必须通过自查清单检查”),而不是一笔带过的一次性命令。
在 Claude Code 中,Slash Commands(斜杠命令)是你在交互式会话中用来快速控制 AI 行为、管理会话或触发特定工作流的快捷入口。通过输入以 / 开头的指令,你可以无需编写长篇提示词,瞬间调动特定的专家能力。
根据 Anthropic 的最新更新,自定义 Slash Commands 已正式并入 Skills(技能)系统。
在 Claude Code 的终端交互界面中,直接在输入框首位输入 /,随后会弹出可用命令列表。
基本语法:/<command-name> [arguments]。
参数传递:后面跟的参数不需要严谨的命令行格式,直接写自然语言即可。例如:/commit 修复了登录页面的样式 bug。
你可以通过编写 Markdown 文件来创建自己的斜杠命令。你可以将其配置在两个层级:
项目级(推荐):在当前项目根目录下创建 .claude/skills/(或旧版的 .claude/commands/)文件夹,仅对当前项目生效。
全局级:在系统家目录下创建 ~/.claude/skills/(或 ~/.claude/commands/)文件夹,对所有项目生效。
Anthropic 官方在 v2.1.3 版本中正式将自定义斜杠命令并入了 Skills 系统。这意味着,过去由 .claude/commands/ 承载的“提示词模板”功能,现在已经被 Skills 彻底包容(Envelop)和强化了。
| 阶段 | 你需要做什么? | Claude Code 底层如何处理? |
|---|---|---|
| 旧版逻辑 (已淘汰) | 想手动调用的写在 commands/ 里;想让 AI 自动用的写在 skills/ 里。 | 两个完全独立的系统,互不相通,容易导致 Prompt 重复。 |
| 2026年新版逻辑 | 只需要学习并在 skills/ 目录下编写结构化的 SKILL.md。 | 统一解析为 Skill。同时自动在终端 UI 里注册一个同名的 / 斜杠命令。 |
.
SKILLS 配置:
存放位置(优先级从高到低):
仓库本地:.agents/skills/。
仓库父目录:../.agents/skills/。
仓库根目录:$REPO_ROOT/.agents/skills/。
用户全局:~/.agents/skills/。
系统管理员:/etc/codex/skills/。
标准目录结构示例:
xxxxxxxxxxmy-skill/├── SKILL.md # 必须,包含 YAML frontmatter 和 Markdown 指令├── scripts/ # 可选,辅助脚本├── references/ # 可选,参考文档├── assets/ # 可选,静态资源└── agents/openai.yaml # 可选,UI 与调用策略配置其中 agents/openai.yaml 的示例如下:
xxxxxxxxxxinterface display_name"端到端测试" icon_small"./assets/logo.svg" brand_color"#22C55E"
policy allow_implicit_invocationtrue # 允许自动触发
dependencies toolstype"mcp" value"playwright"SKILL.md 示例:
xxxxxxxxxx---name: run-e2e-testsdescription: 在提交前运行端到端测试。当用户提到"e2e"、"端到端测试"或要求提交前验证时触发。---
## 步骤
1. 确保开发服务器已启动:`npm run dev`2. 运行 Playwright 测试套件:`npx playwright test`3. 如有失败,展示截图并逐一分析原因4. 修复失败用例后重新运行,直到全部通过SKILLS 的执行机制:
显式调用:在对话中输入 /skills 浏览并选择,或直接输入 $run-e2e-tests。
隐式调用:Codex 根据任务描述自动匹配 Skill 的 description 字段触发。
创建 SKILL:
通过 skill-creator 工具:交互式创建新 Skill。
通过 skill-installer 工具:从社区安装已有 Skill。
在 Codex 中,可以通过录制来生成 SKILL:
xxxxxxxxxx/record # 开始录制(在 App 界面)Codex 会记录每一步操作,检查步骤后自动生成对应的 SKILL.md。
可以在配置文件中禁用特定 Skill:
xxxxxxxxxx# ~/.codex/config.toml[[skills.config]]path = "/path/to/skill/SKILL.md"enabled = falseCodex 内置很多 Slash Commands,覆盖会话管理、模型控制、代码审查、上下文管理等全场景。
xxxxxxxxxx/clear, /new, /fork, /model, /plan, /review, ...此外,Skills 可以作为 Slash Command 调用:
xxxxxxxxxx$skill-name # 调用名为 skill-name 的 Skill在 agents/openai.yaml 中设置 allow_implicit_invocation: false 可让 Skill 只通过显式 $ 调用(或者 / 显式调用) ,不自动触发。
在 Claude Code / Codex 中,Hooks(钩子)是一个极其强大的 “事件驱动型” 自动化与安全防御机制。它允许你在 Claude Code / Codex 运行生命周期的特定关键节点,自动触发并强制执行你定义的行为。
Hooks 本质上是在 Claude Code / Codex 运行生命周期(Lifecycle)中埋下的 “自动化传感器”。当 Claude Code / Codex 触发某个特定事件(例如 “准备执行 Bash 命令” 或 “写文件完成”)时,系统会自动拦截并调用你预先配置好的处理器。
与依赖 AI 记忆力的 CLAUDE.md / AGENTES.md 指示不同,Hooks 运行在 LLM(大模型)之外,是100% 确定性、强制执行的规则。无论是进行代码自动格式化、防止 AI 误删关键文件,还是发送通知,Hooks 都能完美胜任。
一个完整的 Hook 通常由以下三要素构成:
Event(事件):什么时候触发?(如:PreToolUse、PostToolUse、Stop)。
Matcher(匹配器):针对哪些工具或文件路径触发?(如:只针对 Bash 工具,或只针对 *.py 文件)。
Handler(处理器):触发后具体执行什么任务?
Matcher 匹配的具体对象,完全取决于它关联的事件类型(event)。
当用于工具类事件时(最核心用途):对于 PreToolUse(工具执行前)、PostToolUse(工具执行后)和 PermissionRequest(权限请求)等事件,Matcher 匹配的是 Claude 正在调用的 “工具名称(tool_name)”。
内置工具名匹配:如 Bash(执行终端命令)、Write(写文件)、Edit(修改文件)、Read(读文件)、Glob(搜索文件)等。
MCP 扩展工具名匹配:如果接入了 Model Context Protocol (MCP),Matcher 会匹配类似 mcp__memory__.* 或 mcp__github__create_issue 这样的长名称。
当用于会话类事件时:对于 SessionStart(会话启动)等生命周期事件,Matcher 匹配的是会话的启动源/触发途径(source)。
例如匹配:startup(首次启动)、resume(恢复历史会话)、clear(清空)、compact(压缩上下文)。
当用于其他普通事件时:对于 UserPromptSubmit(用户发送提示词)、Stop(AI 响应结束)、TaskCompleted(任务完成)等事件,Matcher 不起任何作用。在这些事件中,无论你 Matcher 填什么,它都会被系统忽略,只要事件发生,Hook 必定 100% 触发。
Claude Code 支持的核心 Event:
注意,只有标注 “能” 的事件可以通过在脚本中返回 exit 2 来掐断 AI 的执行链。其他事件(如 PostToolUse)即便返回了 exit 2,也仅仅是被当作 “报错日志” 显示在终端,不会让已经发生的文件修改回滚。
每会话一次(Once per Session):
SessionStart:
触发时机:Claude Code 会话刚刚启动、恢复或执行清空时触发。
对应的 Matcher 匹配什么:启动来源:startup / resume / clear / compact。
Hook 典型应用场景:环境初始化、加载项目特定环境变量、拉取最新的组织规则。
能否阻断 AI 动作:否。
Setup:
触发时机:用户使用 --init-only、--init 等模式启动时。
Hook 典型应用场景:常用于 CI/CD 自动化流水线脚本中进行一键依赖安装或环境配置。
能否阻断 AI 动作:否。
InstructionsLoaded:
触发时机:系统加载 CLAUDE.md 或 .claude/rules/*.md 规范文件后。
Hook 典型应用场景:在 AI 读入规则的瞬间,动态修改、拼接或过滤这些 prompt 提示词。
能否阻断 AI 动作:否。
每轮对话一次 (Once per Turn):
UserPromptSubmit:
触发时机:用户输入了 Prompt 提示词,在发送给 Claude 大模型之前。
Hook 典型应用场景:内容合规审查:拦截包含违规、越权或公司机密的恶意 prompt 注入。
能否阻断 AI 动作:能。
UserPromptExpansion:
触发时机:用户的 Prompt 被展开时(如 @files 提及、斜杠命令解析后)。
Hook 典型应用场景:检查或转换展开后的复杂 prompt,确保上下文不超过 Token 预算。
能否阻断 AI 动作:能。
Stop:
触发时机:Claude 大模型顺利结束当前轮次的全部思考与回答。
Hook 典型应用场景:自动提交:AI 改完代码并确认无误后自动触发 git commit 或更新 Jira/Linear 状态。
能否阻断 AI 动作:否。
StopFailure:
触发时机:当前轮次因为 API 网络超时、Token 耗尽等错误异常中断时。
Hook 典型应用场景:发送错误警报、自动触发重试机制或记录故障日志。
能否阻断 AI 动作:否。
每次工具调用 (Every Tool Call):
PreToolUse:
触发时机:工具真正执行前的刹那(核心防御点)。
对应的 Matcher 匹配什么:内置工具或MCP工具名(例如:Bash、Write、Edit)。
Hook 典型应用场景:安全沙箱防线:拦截危险命令(如 rm -rf)、保护主分支(禁止向 main 强推)。
能否阻断 AI 动作:能 (最常用)。
PostToolUse:
触发时机: 工具(如写文件、跑命令)成功执行并返回结果后。
对应的 Matcher 匹配什么:内置工具或MCP工具名(例如:Bash、Write、Edit)。
Hook 典型应用场景:自动化提效:修改文件后异步自动触发 Prettier 格式化、自动运行 pytest/vitest 单元测试。
能否阻断 AI 动作:否(工具已跑完)。
PermissionRequest:
触发时机: 当 Claude 触发高危操作,导致控制台弹出 y/n 权限确认窗口时。
对应的 Matcher 匹配什么:请求权限的工具名(例如:Bash)。
Hook 典型应用场景:结合企业 IT 策略,自动化判断并批准合规的权限申请,减少人工确认。
能否阻断 AI 动作:能。
SubagentStop:
触发时机:当 Claude 使用 Agent 工具派生出的子代理(Subagent)完成任务时。
Hook 典型应用场景:多智能体管理:跟踪子代理的 Token 消耗、耗时、合并子代理的审计报告。
能否阻断 AI 动作:否。
通知与状态(Notifications):
Notification:
触发时机:Claude 运行长任务状态发生改变(如完成、挂起)时。
Hook 典型应用场景:长任务提醒:在跑完几分钟的复杂测试或构建后,通过 Webhook 发送 Slack 或钉钉通知。
能否阻断 AI 动作:否。
HOOKS 的四种 Handler:Hooks 的 type 决定了你如何编写它的 handler,主要有以下 4 种类型:
Command Hook(命令型 - 最常用):直接运行一条 Shell 命令或执行本地的 Bash、Python、Node.js 脚本。
编写方式:可以编写任意脚本。脚本可以通过环境变量获取 Claude 的数据:
$CLAUDE_EVENT_TYPE:当前事件名。
$CLAUDE_TOOL_NAME:触发的工具名(如 bash、write_file)。
$CLAUDE_FILE_PATHS:涉及的文件路径列表。
示例:
xxxxxxxxxx{ "type": "command", "command": "bash check-rm.sh"}脚本示例 (check-rm.sh):
xxxxxxxxxx# 阻止 AI 在 Bash 中运行 rm -rf 危险命令if echo "$CLAUDE_TOOL_INPUT" | grep -q "rm -rf"; then echo "错误:项目中禁止使用 rm -rf 清理目录,请使用更安全的逻辑。" >&2 exit 2 # 退出码 2 代表拦截fiexit 0HTTP Hook(网络请求型):将事件的 JSON 上下文通过 POST 请求发送到指定的 URL。
编写方式:你需要在团队企业内部署一个 Web 服务器,接收 JSON 并返回结构化响应(如 {"ok": false, "reason": "..."}),非常适合团队统一的安全策略管控。
示例:
xxxxxxxxxx{ "hooks": [ { "event": "PreToolUse", "matcher": "Bash", "type": "http", "url": "https://yourcompany.internal", "timeout": 10 } ]}Prompt Hook(LLM 评估型):不写任何脚本,而是把当前上下文丢给一个轻量、快速的 Claude 模型(如 Claude Haiku)做单轮是非判断。
编写内容:直接写一段 Prompt。
示例:
xxxxxxxxxx{ "type": "prompt", "prompt": "检查以下动作中涉及的提交信息 '$ARGUMENTS'。如果包含任何不文明用语或过于敷衍(如 'update'),请拒绝。", "timeout": 30}Agent Hook(智能子代理型):最重量级、最强悍的类型。它会临时派生出一个拥有 Read、Grep、Glob 等基础工具的隔离子代理(Subagent),让它去全盘扫描代码库后再做决定。
编写内容:指定一句指导子代理去核查的终极任务。
示例:
xxxxxxxxxx{ "type": "agent", "prompt": "验证这次修改的所有业务代码文件,是否在 tests/ 目录下都编写了对应的测试文件。", "timeout": 60}HOOKS 配置:Hooks 是在 Claude 的配置文件 settings.json 中以纯 JSON(或部分版本支持的 TOML)格式进行声明式配置的。
配置文件的位置(作用域,优先级从低到高):
全局生效:~/.claude/settings.json(对本地电脑上所有的项目生效)。
项目共享:项目根目录下的 .claude/settings.json(可提交至 Git,让全团队共享同一套规范)。
项目本地:项目根目录下的 .claude/settings.local.json(本地私有,已被 gitignore 忽略)。
当同一个 Hook(例如 pre-commit 或 post-task)在不同的配置文件中被重复定义时,Claude Code 会按照上述优先级进行完全覆盖(“项目共享” 覆盖 “全局”、而 “项目本地” 覆盖 “项目共享” 和 “全局”),而不是合并。这就是 “就近原则”(或称 “局部覆盖全局原则”)。
注意,
Claude Code采用的是 “覆盖制(Override)”(高优先级直接顶替低优先级,优先级最高的那个Hooks会被加载),而Codex的Hooks采用的是 “追加/合并制(Aggregation/Merge)” (Codex会加载并执行所有匹配到的Hooks)。
配置示例 (JSON 格式):
xxxxxxxxxx{ "hooks": [ { "event": "PreToolUse", "matcher": "Bash", "type": "command", "command": "node .claude/hooks/check-commands.js" }, { "event": "PostToolUse", "matcher": "Write|Edit", "type": "command", "command": "npx prettier --write $CLAUDE_FILE_PATHS", "async": true } ]}配置完成后,你可以在终端中输入 /hooks 命令来查看当前已加载并激活的 Hooks 列表。
HOOKS 的执行原理:Hooks 的底层是一个拦截与反馈循环机制(Self-Correcting Feedback Loop)。它在 Claude Code 内部管道和外部系统之间建立起数据双向流。
xxxxxxxxxxClaude 尝试调用工具 ──> 触发 PreToolUse ──> 评估 Hook ──> (拒绝: 退出码 2) ──> 返回错误给 Claude,提示其修正│(允许: 退出码 0)▼工具实际执行 ──> 触发 PostToolUse ──> 自动格式化/日志记录
1) 事件捕获与上下文注入:当生命周期事件发生时,Claude Code 暂停当前动作,收集当前上下文(如工具名、输入参数、修改的文件路径),并通过环境变量或 stdin(标准输入)将其作为 JSON 数据传给你的 Hook 处理器。
2) 阻断与通过控制:
如果处理器返回 退出码 0 (Exit Code 0),代表检查通过,Claude 继续向下执行。
如果处理器返回 退出码 2 (Exit Code 2),代表动作被拦截。此时,处理器输出在 stderr 或 stdout 中的文本会被作为报错反馈给 Claude。Claude 看到反馈后会智能 “意识到” 自己被拦截了,并自动调整策略重新尝试。
3) 异步/同步执行:默认情况下 Hooks 是阻塞(同步)的。但如果你配置了 "async": true(2026 年新特性),它就会在后台非阻塞运行,适合发送 Slack 通知或记录审计日志等不需要等结果的场景。
使用和编写时的重要注意事项:
不要忘记赋予可执行权限:如果你使用 "type": "command" 调用了本地脚本(如 .sh 或 .py),必须手动在终端执行 chmod +x path/to/script。如果缺少可执行权限,Hook 会在后台默默失败,不会报任何错误,导致防线失效!
严格遵守退出码(Exit Code)规范:
exit 0:代表允许通过。
exit 2:代表强行阻断并报错。
exit 1:在 Claude Code 中通常仅代表记录警告(Warning Log),不会阻止 AI 的动作。做安全防御时请务必使用 exit 2。
保持 Matcher 范围尽可能狭窄:如果 Matcher 写成 .* 或者留空,该 Hook 会在 Claude 哪怕只是读取一个文件、甚至执行每次微小动作时都频繁触发,不仅极大地拖慢编码速度,还会无端消耗大量的 Token。
区分配置项与 AI 的运行时快照机制:Claude Code 拥有安全的设置快照机制,防止恶意代码通过 Write 工具修改 .claude/settings.json 从而实时注入恶意的全局 Hook。当你手动修改了项目中的 Hooks 配置文件后,强烈建议重启一次 Claude Code 终端以确保新 Hooks 安全生效。
在 Windows 系统上注意 Shell 切换:Windows 用户的 Command Hook 默认可能在系统的命令行中执行。可以通过在 Hook 项中显式指定 "shell": "powershell",来确保脚本在现代 PowerShell(如 pwsh)中表现一致。
直接在对话中命令 Claude Code 为你编写一个 Hook 并自动写入 .claude/settings.json。但是要注意,需要重启一次 Claude Code 终端以确保新 Hooks 安全生效。
在 Codex 中,Matcher 是一个断言或评估函数。它在 Hook 执行前运行,决定当前上下文是否满足执行该 Hook 的条件。其核心作用是防止 Hook 误触发,实现按需执行。
核心工作原理:
捕获上下文:Hook 触发时,系统传入当前事件的数据(如代码上下文、文件路径、API 响应)。
规则评估:Matcher 接收这些数据,并根据预设规则(正则、字符串、逻辑表达式)进行计算。
返回布尔值:Matcher 必须返回 true(触发 Hook)或 false(跳过 Hook)。
常用的 Matcher:
路径与位置匹配器 (Path & Location Matchers):路径匹配器主要用于文件系统、URL 路由或静态分析的级别,通过检测当前处理对象的物理或逻辑位置来决定是否激活 Hook。
字符串精确匹配 (Exact Match):
机制:直接比对路径字符串。
场景:针对特定配置文件(如 package.json 或 vite.config.ts)进行拦截。
Glob 模式匹配 (Glob Match):
机制:使用通配符(如 *, `,?`)进行模糊路径匹配。
场景:src/components//*.tsx 匹配所有组件文件。
正则表达式匹配 (Regex Match):
机制:利用强大的正则引擎解析复杂的路径特征。
场景:匹配所有以 .test. 或 .spec. 结尾的测试文件:/.*\.spec\.(js|ts)$/。
语法与结构匹配器 (AST & Structural Matchers):在代码生成、重构和 Linter 工具(如 Codex 代码解析)中,这是最核心的匹配器。它不关心文本长相,而是直接分析代码的抽象语法树 (AST)。
节点类型匹配器 (Node Type Matcher):
机制:匹配特定的语法树节点名称。
场景:指定 Hook 仅在遇到 FunctionDeclaration(函数声明)或 JSXOpeningElement(JSX 标签打开)时触发。
属性匹配器 (Property Matcher):
机制:深入节点内部,检查其属性值是否符合预期。
场景:匹配一个函数,且该函数的 async 属性必须为 true(专门捕获异步函数)。
后代/层级匹配器 (Hierarchy Matcher):
机制:检查节点的上下文父子关系。
场景:匹配所有位于 ClassBody(类内部)之内的 MethodDefinition(方法定义),从而跳过普通的全局函数。
内容与特征匹配器 (Content & Signature Matchers):这类匹配器通过扫描文件内部的实际内容、元数据或签名来做出判断,适用于不方便进行完整 AST 解析的大文件或动态文本。
关键词与文本匹配器 (Keyword Matcher):
机制:对源代码文本进行高效率的字符串检索(如 String.prototype.includes())。
场景:检查代码中是否包含 "TODO:" 或 "FIXME:" 标记。
正则特征匹配器 (Text Regex Matcher):
机制:在源码文本层面上运行正则表达式。
场景:检测文件中是否包含敏感词、特定格式的 API 密钥(如 AIzaSy[A-Za-z0-9_]{35})或版权声明。
哈希/指纹匹配器 (Hash/Fingerprint Matcher):
机制:计算文件内容的 MD5 或 SHA 哈希值,并与缓存比对。
场景:在自动化构建 Hook 中,若文件哈希未发生变化,则跳过后续的所有编译 Hook(增量编译)。
状态与上下文匹配器 (State & Context Matchers):这类匹配器依赖于运行时环境、系统状态或外部传入的上下文变量,具有极高的动态性。
环境变量匹配器 (Environment Matcher):
机制:读取当前的系统环境变量(如 process.env)。
场景:配置 Hook 仅在 NODE_ENV === 'development'(开发环境)下执行性能分析日志记录。
用户/权限匹配器 (User/Role Matcher):
机制:检查触发当前事件的操作者身份。
场景:在 Git Webhook 或 CI/CD 流程中,限制只有 admin 或 repo-owner 触发的 Push 事件才能执行部署 Hook。
时段匹配器 (Time-bound Matcher):
机制:评估当前系统的时间戳。
场景:禁止在非工作时间或冻结期(Freeze Window)执行高风险的代码合并 Hook。
逻辑与组合匹配器 (Composite & Logical Matchers):当单一维度的 Matcher 无法满足复杂的业务逻辑时,组合 Matchers 通过布尔逻辑将多个基础 Matcher 串联起来。
与匹配器 (AND Matcher):所有子 Matcher 必须同时返回 true。例如:“路径符合 src/” 且 “节点类型为 VariableDeclarator“。
或匹配器 (OR Matcher):只要任意一个子 Matcher 返回 true 即可。例如:“后缀是 .js“ 或 ”后缀是 .ts“。
非匹配器 (NOT Matcher):对子 Matcher 的结果取反。例如:”NOT (路径匹配 node_modules/)“,用于快速排除依赖库文件。
在生产环境中,Codex 通常会将这些 Matcher 组织成一个执行链。性能消耗最低的 Matcher(如路径匹配)会最先执行,快速过滤掉 90% 的不相关事件;而消耗较高的 Matcher(如 AST 结构匹配)则放在最后执行。
Codex 中的 Events 及其触发时机:
SessionStart:会话初始化(含 resume、clear、compact 后重启)。
SubagentStart:子代理启动时。
SubagentStop:子代理结束时。
PreToolUse:工具调用前。
PostToolUse:工具调用后。
PermissionRequest:敏感操作触发审批请求时。
PreCompact:对话压缩前。
PostCompact:对话压缩后。
UserPromptSubmit:用户提交 Prompt 时。
Stop:单轮对话结束时(可触发续接逻辑)。
在 Codex 中,Handler(处理器)是决定 “当 Hook 被触发时,具体要执行什么操作” 的核心执行单元。Handler 本质上是一个内置于智能体生命周期循环(Agentic Loop)中的中间件或控制拦截器。其标准执行逻辑如下:
输入入标准 JSON:当某个 Event(如 PreToolUse)被触发并命中 Matcher 后,Codex 会将当前会话的上下文(包括 session_id、cwd、tool_name、command 等信息)组装为标准 JSON,通过标准输入(stdin)传递给 Handler。
执行逻辑处理:Handler 运行用户编写的确定性脚本或程序。
状态码控制行为:Handler 执行完毕后,其退出状态码(Exit Code)以及标准输出(stdout)的内容将直接决定 Codex 接下来的动作。
在 Codex 及其生态系统的演进中,针对不同的自动化深度,Handler 主要支持以下几种配置和表达形式:
Shell 处理器(最基础、最常用):直接调用系统的 Shell 脚本或可执行二进制文件。
用途:运行本地的 Linter、Git 提交命令、安全扫描工具(如 Trufflehog)或执行自动化测试套件。
示例:
xxxxxxxxxx{ "event": "PreToolUse", "matcher": "bash", "handler": { "type": "shell", "command": "python3 ./scripts/security_check.py" }}HTTP / Webhook 处理器:将当前上下文作为 Payload 发送到指定的远程或本地 HTTP 服务器上。
用途:集中式团队审计、向企业合规系统上报 AI 的敏感操作、或者触发远端的 CI/CD 流水线。
LLM Prompt / Agent 级处理器(高级):将 Hook 拦截到的错误信息或输入自动重定向给另一个 “监督型” LLM 提示词或子 Agent 进行二次推理。
用途:当捕获到不可执行的命令时,不直接中断,而是让另一个专用模型自动生成错误修复建议并喂回主循环。
Handler 的关键控制结果(Exit Code):根据最新版 Codex 规范,根据 Handler 返回的 Exit Code 差异,主要分为两类处理结果:
Exit 0:允许通行 (Observe & Inject)。
Exit 2:强行拦截 (Block / Deny)。
由于 Handler 具有直接在本地执行 Shell 脚本或二进制文件的权限,存在极大的供应链安全风险。Codex 默认会禁用所有非托管的本地 Handler,直到开发者手动通过 /hooks 斜杠命令对其进行审查并标记为 Trusted(受信),或者在启动时强制指定 --dangerously-bypass-hook-trust 参数。
Codex 的 Hooks 主要通过 hooks.json 配置文件或在 config.toml 中通过内联方式进行定义,通常存在于以下四个位置:
全局用户级(User-level):~/.codex/hooks.json、~/.codex/config.toml(内联定义)。
适用场景:存放个人全局规则,如 “禁止发送敏感凭证(Secrets)” 或“在会话结束时自动生成摘要”。
项目仓库级(Repo-level / Project-level):<repo>/.codex/hooks.json、<repo>/.codex/config.toml(内联定义)。
适用场景:存放团队或项目的代码规范,如 “在写入文件后自动运行 Prettier 格式化” 或 “执行高危命令前进行阻断校验”。
注意:为了防止未知仓库恶意执行本地脚本,项目级(Project-level)的 Hooks 只有在当前项目目录被显式设为受信任(Trusted)后才会加载和执行。
与传统前端/后端框架中 “高优先级覆盖低优先级” 的替换逻辑不同,Codex 的 Hooks 采用的是叠加与并行(Concurrent)执行机制:
不发生冲突和覆盖:如果全局(User-level)和项目级(Repo-level)同时定义了同一个生命周期事件的 Hook,Codex 不会用高层级的配置去替换或抹除低层级,而是将它们全部加载。
并行异步运行:触发事件时,满足匹配条件的所有 Hooks 会同时并发启动。一个 Hook 的启动或运行状态无法直接阻止另一个 Hook 的启动。
插件独占例外(已知 Issue):在当前的某些版本中,如果第三方插件(Plugin)系统内部定义了特定的生命周期钩子(如 PostToolUse),它可能会演变为独占优先级,从而导致用户全局的 hooks.json 被暂时忽略。
同文件冲突警告:如果在同一个配置层级(例如在项目根目录)同时存在 hooks.json 和 config.toml 里的内联 [hooks] 块,Codex 会将两者同时加载但会触发警告。建议在同一个层级只使用一种表达方式。
撰写 Hooks:
首先,确保在你的 ~/.codex/config.toml 中开启了功能标志(新版使用 hooks = true):
xxxxxxxxxx[features]hooks = true接着,以 JSON 格式编写三层嵌套结构:生命周期事件(Event) --> 匹配器(Matcher) --> 处理器(Handler)。
例如:
xxxxxxxxxx{ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\"", "timeout": 30, "statusMessage": "正在自动格式化代码..." } ] } ] }}接着编写 Handler(标准输入/输出规范):这个 Handler 脚本将接收标准输入(stdin)、返回标准输出(stdout)。例如:
xxxxxxxxxximport sysimport json
def main(): # 1. 从标准输入读取 Codex 传过来的上下文 input_data = json.loads(sys.stdin.read()) # 示例:获取当前正在触发的事件名称 event_name = input_data.get("hook_event_name") # 2. 执行你的业务逻辑/安全审计/拦截规则 is_safe = True # 3. 通过标准输出将结果返回给 Codex if is_safe: print(json.dumps({"continue": True})) sys.exit(0) else: print(json.dumps({ "continue": False, "reason": "触发了团队安全红线,操作已被自动化钩子拦截!" })) sys.exit(1)
if __name__ == "__main__": main()查看并管理当前加载的 Hooks:/hooks 指令。
直接在对话中命令 Codex 为你编写一个 Hook,但是 Codex 无法直接写入你的配置文件(这一点与 Claude Code 不同),因为沙箱安全的原因。
当你在对话中输入 “帮我写一个在每次调用工具前自动备份文件的 PreToolUse Hook 并写入配置“ 时,Codex 的实际表现如下:
生成配置/代码块:AI 会在对话界面中输出符合规范的 JSON 或 TOML 格式的 Hook 配置代码。
拒绝直接写入:AI 会明确提示:“由于安全限制,我无法直接修改您的配置文件。”
提供操作指引:AI 会提供清晰的步骤,引导你手动完成配置。
MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 推出的一种开放标准协议,旨在统一 AI 大模型与外部数据源、工具之间的通信规范。MCP 是 Claude Code 最核心的扩展能力。MCP 已经得到了业界的广泛采用,Codex 已全面原生支持 MCP 规范。
你可以把 MCP 理解为 AI 界的 USB-C 接口:
没有 MCP 时:Claude Code / Codex 只能局限在本地终端中读写文件和运行 Bash 命令。如果想让它查 GitHub、连数据库,必须针对每个服务编写繁琐的定制化集成代码。
有了 MCP 后:任何外部工具或服务只要开发一个符合 MCP 标准的 “服务器”(MCP Server),Claude Code / Codex 就能直接连接并使用它。这让 Claude / Codex 能够安全地连接到 GitHub、Jira、各类数据库、外部 API 甚至是浏览器自动化工具(如 Playwright)。
MCP 的执行原理:MCP 采用典型的 Host - Client - Server(宿主 - 客户端 - 服务器) 三层架构,其执行逻辑如下:
三方角色定义:
Host(宿主):即 Claude Code / Codex。负责与用户交互,并将上下文提交给 Claude / Codex 核心大模型。
Client(客户端):内嵌在 Claude Code / Codex 中,负责为每个集成的外部服务管理连接、协议握手与版本协商。
Server(服务器):独立的轻量级程序(可以是本地可执行文件、Python/Node.js 脚本或远程 HTTP 服务),负责实际执行具体操作并暴露 “能力”。
底层的通信协议:
数据层:基于 JSON-RPC 2.0 协议。Client 和 Server 之间通过结构化的 JSON 格式传递请求与响应。
传输层:主要支持两种通道。
一是本地的 stdio(标准输入输出),Host 直接通过命令行管道派生(Spawn)子进程通信。
二是远端的 SSE(Server-Sent Events)/ HTTP,用于连接网络上的远程工具。
动态执行流程:
握手初始化:Claude Code / Codex 启动时,Client 连上 MCP Server,Server 告知它自己拥有哪些工具(Tools)或资源(Resources)。
意图识别:当用户输入 “帮我把这个 Issue 同步到 GitHub” 时,Claude / Codex 模型发现自己没有直接操作 GitHub 的能力,但识别到当前有一个提供 github_create_issue 的工具。
工具调用:Claude / Codex 模型输出一个带有特定参数的 JSON-RPC 工具调用请求(Tool Call)。
本地/远程执行:MCP Client 将请求转发给 GitHub MCP Server,Server 在本地或通过 API 运行代码,并将执行结果(如 “成功创建,URL 为...”)返回给 Client。
生成最终回复:Claude / Codex 拿到返回的数据放入上下文,最后用自然语言在终端答复用户。
MCP 配置:
配置范围(Scope):安装时你可以通过 --scope(或缩写 -s)指定两种范围:
user(全局):对当前系统的所有项目生效,配置记录在全局 ~/.claude.json 中。
project(项目,推荐):仅对当前项目目录生效,配置会被写入项目根目录的 mcp.json 中,可跟随 Git 提交供全团队共享。
常用配置命令示例:在系统终端(注意:是在启动 Claude Code 之前,而不是在 Claude 的交互式对话框内)运行以下命令:
添加本地 Stdio 服务(以官方 sequential-thinking 工具为例):
xxxxxxxxxxclaude mcp add sequential-thinking --scope project -- npx -y @modelcontextprotocol/server-sequential-thinking添加本地文件系统访问(允许 Claude 额外访问指定目录):
xxxxxxxxxxclaude mcp add filesystem --scope project -- npx -y @modelcontextprotocol/server-filesystem ~/Documents ~/Desktop添加远程网络 HTTP 服务:
xxxxxxxxxxclaude mcp add --transport http my-remote-tool https://example.com手动修改或查看配置:在项目根目录下,mcp.json 的标准文件结构如下:
xxxxxxxxxx{ "mcpServers": { "my-custom-tool": { "command": "node", "args": ["/absolute/path/to/server.js"], "env": { "API_KEY": "your_secret_key_here" } } }}配置完成后,在进入 Claude Code 会话后输入斜杠命令 /mcp,即可查看当前已启用的服务器状态。
claude mcp add 命令:
xxxxxxxxxxclaude mcp add [服务器别名] --scope [user|project] -- [启动该服务的命令] [附加参数...][服务器别名]:自定义的一个小写英文字符串(如 github、mysql-db),用于标识该服务。
--scope(配置范围):
--scope user(或 -s user):全局生效。配置写入系统用户目录(如 ~/.claude.json),电脑上的任何项目启动 Claude Code 都能用它。适合配置个人的 GitHub Token、天气 API 等。
--scope project(或 -s project):当前项目生效。配置写入当前目录的 mcp.json。适合配置与特定代码库强绑定的数据库连接、内部 API 等。
-- 后面是这个 mcp 的启动命令、这个命令的附加参数:
如果工具是用 Node.js/TypeScript 写的,通常用 npx -y [包名]。
如果工具是用 Python 写的,通常用 uvx [包名] 或 python3 -m [模块名]。
如果是本地的可执行文件,可以直接写路径,例如 /usr/local/bin/my-tool。
可以通过 prompts 的方式让 Claude Code 自己安装 MCP。
可以直接将这些信息或安装命令作为 Prompt 提供给 Claude Code,让它自动配置。例如 Fetch 网页抓取工具,你可以直接在 Claude Code 的对话框中发送如下 Prompt:
xxxxxxxxxx请帮我在本项目中安装 Fetch MCP 工具。直接使用项目范围(project scope)运行命令 `claude mcp add fetch --scope project -- npx -y @modelcontextprotocol/server-fetch`。安装完成后请自动输入 `/reload` 并通过 `/mcp` 确认是否生效。
Claude 接收到这条指令后,就会自动在后台组装好一切,你只需要在终端弹出的安全提示中点击 Approve 即可完成一键集成。
常见 MCP 服务器汇总表:
Filesystem (文件系统):
核心能力:
读取/写入本地任意授权目录。
列出文件列表与搜索。
获取文件元数据。
安装方法(Project 范围):
xxxxxxxxxxclaude mcp add filesystem --scope project -- npx -y @modelcontextprotocol/server-filesystem /path/to/dir1 /path/to/dir2典型应用场景:
让 Claude 跨越当前项目,读取桌面、文档或其他项目的配置文件和数据。
跨目录重构代码。
注意事项:
安全性极高风险:严禁授权整个根目录(如 / 或 C:\),避免恶意大模型误删系统文件。
路径必须显式作为参数传入,否则默认无权限。
GitHub (代码托管):
核心能力:
创建/审查/关闭 Issue 和 PR 。
搜索代码库与文件内容。
触发 GitHub Actions 工作流。
安装方法(Project 范围):
xxxxxxxxxxclaude mcp add github --scope project --env GITHUB_TOKEN="你的Token" -- npx -y @modelcontextprotocol/server-github典型应用场景:
自动化管理开源项目。
让 Claude 帮你自动提交 Bug Fix 并直接在终端发起 Pull Request。
注意事项:
需要在 GitHub 申请具有对应 Repo 读写权限的 Fine-grained Personal Access Token。
团队协作时切勿将明文 Token 提交至 Git。
Fetch (网页抓取):
核心能力:
输入 URL 抓取网页内容。
自动将 HTML 转换为干净的 Markdown 文本。
安装方法(Project 范围):
xxxxxxxxxxclaude mcp add fetch --scope project -- npx -y @modelcontextprotocol/server-fetch典型应用场景:
当你想让 Claude 学习某个新框架的官方在线文档时。
获取最新的技术博客或 API 变更通告。
注意事项:
不支持需要复杂登录鉴权(如 Cookie/验证码)的网页。
单次抓取超大网页可能会瞬间消耗大量大模型 Token 上下文。
PostgreSQL / MySQL (数据库):
核心能力:
查看数据库表结构 (Schema) 。
执行只读或指定 SQL 查询。
分析数据样本。
安装方法(Project 范围):
xxxxxxxxxxclaude mcp add my-db --scope project -- npx -y @modelcontextprotocol/server-postgres "postgresql://localhost/mydb"典型应用场景:
编写后端业务代码时,让 Claude 直接查看真实数据库表结构以确保字段准确。
协助编写和优化复杂的 SQL 联表查询。
注意事项:
生产环境大忌:强烈建议仅连接本地开发库或测试库。
严格控制数据库账号权限,最好使用只读账户,防止 AI 误删数据。
Memory (知识图谱记忆):
核心能力:
基于图形数据库持久化存储知识。
跨会话创建、读取、更新实体和关系。
安装方法(Project 范围):
xxxxxxxxxxclaude mcp add memory --scope project -- npx -y @modelcontextprotocol/server-memory典型应用场景:
长期复杂的开发项目,让 Claude 记住项目的整体架构设计、技术债、特定业务逻辑。
注意事项:
随着记忆实体的增加,检索到的上下文会变大,需要定期让 Claude 帮你“清理”或“归档”不再需要的过时记忆。
Gitbraid (多仓库协作):
核心能力:
跨多个独立 Git 仓库同步代码。
跟踪和管理跨项目的依赖修改。
安装方法(Project 范围):
xxxxxxxxxxclaude mcp add gitbraid --scope project -- npx -y gitbraid典型应用场景:
微服务架构开发,一个功能需要同时修改前端、后端、公共库三个独立仓库的代码。
注意事项:
需要确保本地所有涉及的仓库路径和 Git 权限正确配置,避免合并冲突。
MCP 配置:
配置范围(Scope):你可以通过全局配置文件或项目专属文件来指定应用范围:
全局(Global):对当前系统的所有 Codex 会话及 IDE 插件生效,配置记录在全局的 config.toml 中。
项目(Project):仅对当前项目目录生效,配置会被写入项目根目录下的 .codex/config.toml 文件中,可跟随项目代码共享。
常用配置命令示例:在系统终端(注意:是在启动 Codex CLI 之前)运行以下命令:
添加本地 Stdio 服务(以官方 sequential-thinking 工具为例):
xxxxxxxxxxcodex mcp add sequential-thinking --scope project -- npx -y @modelcontextprotocol/server-sequential-thinking添加本地文件系统访问(允许 Codex 额外访问指定目录):
xxxxxxxxxxcodex mcp add filesystem --scope project -- npx -y @modelcontextprotocol/server-filesystem ~/Documents ~/Desktop添加带有环境变量的 MCP 服务(以配置 API 密钥为例):
xxxxxxxxxxcodex mcp add my-custom-tool --env API_KEY=your_secret_key_here -- npx -y @modelcontextprotocol/some-server手动修改或查看配置:在 Codex 中,标准的 config.toml 配置文件结构如下(使用 TOML 语法格式):
xxxxxxxxxx[mcp_servers.my-custom-tool]command = "node"args = ["/absolute/path/to/server.js"]startup_timeout_sec = 30 # 可选,设置服务器启动超时时间
[mcp_servers.my-custom-tool.env]API_KEY = "your_secret_key_here"codex mcp add 命令:
xxxxxxxxxxcodex mcp add <server-name> [options] -- <stdio-server-command> [arguments]<server-name> (必填):MCP 服务器的唯一标识名称。
作用:在 Codex 配置文件中作为该工具的 key,同时也是你在 Codex TUI/CLI 中使用 /mcp 命令查看工具列表时显示的名称。
[options] (选填):
--env VAR1=VALUE1:为该 MCP 服务器设置专用的环境变量。
作用:许多 MCP 服务器需要鉴权才能运行(例如 API Key、Token 或数据库密码),通过此参数将密钥传递给服务器进程。可以多次使用该参数以配置多个环境变量。
-s 或 --scoped (新版本支持):项目级作用域声明。
作用:默认情况下配置会被写入全局 ~/.codex/config.toml;若加上此参数,则会写入当前项目目录下的 .codex/config.toml,使工具仅在当前项目生效。
-- (分隔符,必填):命令行参数终止符。
作用:极其重要。它告诉 Codex CLI,-- 后面的所有内容都不属于 codex 命令的参数,而是启动目标 MCP 服务器所需的原生原生命令和参数。这可以防止 Codex 错误地解析后面的参数(比如服务器自带的 -y 或 --host 等)。
<stdio-server-command> [arguments] (必填):启动 MCP 服务器的实际执行命令和附加参数。
作用:Codex 目前主要通过本地标准输入输出(STDIO)与 MCP 服务器通信。此处填写的是你在终端中独立启动该 MCP 服务时所用的命令。
在终端运行以下命令,查看当前已激活的 MCP 服务器列表:
xxxxxxxxxxcodex mcp list或者在会话中查看当前可调用的具体 MCP 服务器列表:
xxxxxxxxxx/mcp常见 MCP 服务器汇总表: MCP(Model Context Protocol)是由 Anthropic 提出并开源的开放标准,目前已成为包括 Claude Code、Codex、Cursor 在内的众多主流 AI 客户端的通用协议。在 Codex 中常见的 MCP 服务器,请参考 Claude Code 中相关的章节。
在 Claude Code 中,插件(Plugin)是最高级别的扩展机制。它允许开发者将自定义 slash command、特定任务智能体(Agents)、技能(Skills)、事件钩子(Hooks)、MCP 服务器和 LSP 服务器打包成一个可复用、可版本控制的模块,并在不同的项目或团队之间进行共享。
可以将 Plugin 理解为 Claude Code 内置的 “应用软件”。在普通配置下,如果你为一个项目编写了自定义指令,切换到新项目后就必须重新配置。而 Plugin 是一个自包含的目录,它通过统一的清单文件,把 AI 的多种扩展能力集合在一起,实现一次编写,到处运行。
一个标准的 Plugin 可以包含以下组件:
Commands (斜杠命令):用户手动触发的快捷指令(如 /deploy)。
Agents (子智能体):专门处理特定领域复杂任务的 AI 角色。
Skills (技能说明):为 Claude 提供特定领域的专业背景知识和工具引导。
Hooks (事件钩子):在特定生命周期(如提交代码前)自动触发的脚本。
MCP / LSP Servers:用于连接外部工具 API 或提供代码高亮与语法检查的服务器。
Plugin 配置:
安装与配置官方/市场插件:在 Claude Code 终端中输入以下命令进入交互式插件管理器:
xxxxxxxxxx/pluginDiscover(发现):在界面中浏览或搜索(例如搜索 lsp 或 notion)。
安装范围(Scope)选择:
User:全局生效,你电脑上的所有项目都能使用该插件。
Project:仅在当前项目生效,配置会写入 .claude/settings.json,可随 Git 提交与团队共享。
加载生效:安装完成后,在终端执行 /reload-plugins 或重启 Claude Code 即可激活。
配置自定义本地插件(开发调试):如果你在本地写了一个插件,无需发布到市场,可以直接在启动 Claude Code 时通过参数挂载:
xxxxxxxxxxclaude --plugin-dir ./path/to/your-pluginPlugin 的内容:编写一个插件的核心是遵循标准的目录结构,并使用 Markdown(带有 Frontmatter 属性头)编写 AI 提示词。
标准的插件目录结构:
xxxxxxxxxxmy-plugin/├── .claude-plugin/│ └── plugin.json # 必须:插件的元数据清单├── commands/ # 可选:自定义斜杠命令│ └── review.md├── agents/ # 可选:专门的子智能体│ └── security-expert.md├── skills/ # 可选:特定领域的背景知识│ └── docker-helper/│ └── SKILL.md├── hooks/ # 可选:自动化钩子│ └── hooks.json└── README.md # 可选:插件使用说明核心文件示例:
插件清单 .claude-plugin/plugin.json
xxxxxxxxxx{ "name": "my-team-utils", "version": "1.0.0", "description": "团队内部专用的规范检查与部署工具", "author": "Your Name"}自定义命令 commands/review.md
xxxxxxxxxx---description: 按照团队的代码规范对当前更改进行审查---请检查当前暂存区(Staged)的代码更改。重点审查是否包含硬编码的密码、是否编写了单元测试,以及命名是否符合驼峰规范。技能 skills/docker-helper/SKILL.md
xxxxxxxxxx---description: 帮助生成标准化的生产环境 Dockerfiledisable-model-invocation: true---当你被要求为项目创建 Dockerfile 时,请务必使用多阶段构建(Multi-stage build),并以 alpine 作为基础镜像。
Plugin 应用场景:
团队开发规范落地:将团队的 Code Review 标准、代码提交格式(Commit Message)打包成插件,确保 AI 辅助生成的代码完全符合公司规范。
自动化流水线集成 (CI/CD):利用 Hooks,在代码保存或 Git 提交前,自动让 Claude 运行 eslint 或单元测试,发现错误由 AI 直接就地修复。
ESLint是一个用于查找和修复JavaScript及TypeScript代码中问题的静态分析工具。 它就像一个自动化的“代码审查员”,在不运行代码的情况下检查你的文本。
特定框架与专属业务线支持:如果公司有一套自研的内部微服务框架,可以把框架的文档和脚手架生成逻辑写进 Skills,让 Claude 变成该框架的专家。
第三方工具联动:通过集成 MCP服务器,让Claude Code 能够直接读取 Jira 任务、发送 Slack 消息或操作 Notion 文档。
编写和使用时的注意事项:
命名空间冲突(Namespacing):为了防止多个插件的命令重名,Plugin 引入的 Skill 和命令会被自动加上命名空间前缀。例如插件名如果是 my-plugin,里面的 hello 命令在调用时需输入 /my-plugin:hello。
外部依赖需独立安装:例如你使用了 LSP(代码智能)插件,插件本身只包含连接配置,你本地系统仍需通过 npm 或 pip 提前安装对应的 Language Server 实体(如 pyright)。
安全与信任机制:插件中的 Hooks、Monitors 和 MCP 拥有执行本地 Shell 脚本或访问外部网络的能力。在安装来自非官方市场的第三方插件时,Claude 会弹出安全警告,请务必确保插件来源可信。
调试技巧:修改本地插件内容后,无需频繁重启 Claude Code 进程,直接在对话框中输入 /reload-plugins 即可热重载最新的插件代码。
官方在 ~/.claude/plugins/marketplaces/claude-plugins-official/plugins/ 目录中维护了 50 多个内置及官方插件。
核心管理建议:
精简为王:不需要的插件请及时关闭。每一个常驻 plugin 的 Skill Description 都会在会话开始时被塞进上下文,导致基础 API 费用增加。
权限控制:执行命令前务必使用 /permissions 查看当前插件的授权状态,切勿随意开启 auto-approve(自动批准执行)。
巧用隐藏:对于不常使用的插件,可在其 Frontmatter 配置文件中加入 disable-model-invocation: true,需要时再手动通过命令激活。
Claude Code 常用插件快速参考:
typescript-lsp (及各语言 LSP):
类型:技术生态 / 语言服务。
使用场景:
自动追踪跨文件的类型定义。
精准跳转引用、查找代码语法错误。
注意事项:
依赖本地语言环境(如 Node.js 状态) 。
大项目初次扫描时可能会消耗较多 Token。
playwright:
类型:技术生态 / 自动化测试。
使用场景:
UI 界面自动化测试编写与调试。
端到端(E2E)回归测试流程。
注意事项:
运行测试时会启动浏览器,耗费本地算力。
需确保本地 Playwright 依赖已正确安装。
git-workflow:
类型:流程控制 / 版本管理。
使用场景:
自动规范生成 Commit Message。
智能创建分支、处理简单合并冲突。
注意事项:
复杂冲突时 AI 可能误判,需人工二次确认。
建议配合团队的 Git 规范(如 Angular 规范)。
tdd:
类型:工作流 / 测试驱动开发。
使用场景:
新功能开发或大规模代码重构。
严格限定 “写测试-报错-写代码-通过” 循环。
注意事项:
会频繁执行测试命令,增加本地命令等待时间。
若测试用例编写有误,会导致 AI 陷入死循环。
parallel-review:
类型:质量保障 / 并行审查。
使用场景:
Pull Request 提交前的代码自检。
多维度(架构、性能、边界)交叉挑错。
注意事项:
Token 消耗极大!因其同时启动多个 SubAgent。
建议仅在重大功能上线或复杂重构前使用。
brainstorming:
类型:工作流 / 需求预判。
使用场景:
项目初期架构设计与讨论。
梳理模糊需求,找出潜在的逻辑死角。
注意事项:
仅生成设计思路和文档,不直接产出具体代码。
讨论过长时会污染后续编写代码的上下文。
security-guidance:
类型:安全防护 / 代码审计。
使用场景:
涉及鉴权、数据库操作、敏感数据开发。
自动拦截 SQL 注入、XSS 等常见漏洞。
注意事项:
无法完全替代专业的安全扫描工具(如 Snyk)。
可能会出现合规代码被误报的现象。
context7:
类型:上下文管理 / 精简优化。
使用场景:
大型复杂项目、超长上下文的会话。
动态筛选并精准传递最重要的代码片段。
注意事项:
极度精简时可能会漏掉一些边缘文件的关联信息。
需结合项目的实际目录结构配合使用。
.
Plugins 是 Codex 最高层级的扩展机制,将 Skills、App Integration 和 MCP 服务器打包为可安装、可分发的单元。
Skills:特定任务的可复用技能。
App Integration :GitHub、Slack、Google Drive 等外部服务集成。
MCP 服务器:提供额外工具和共享信息的服务。
Plugin 配置:
安装与配置官方/市场插件:在 Codex 终端中输入以下命令进入交互式插件管理器:
xxxxxxxxxx/plugins发现与安装:进入界面后,Codex 会打开内建的插件目录(Plugin Directory)。你可以在此浏览、搜索或一键安装所需的官方和市场插件。
自动缓存:下载的插件会被自动存储在本地的缓存路径中(通常为 ~/.codex/plugins/cache/)。
加载生效:安装完成后,在终端执行 /reload 或重启 Codex 即可激活。
配置自定义本地插件(开发调试):如果你在本地写了一个插件,无需发布到市场,可以直接在启动 Codex 时通过参数挂载:
xxxxxxxxxxcodex --plugin-dir ./path/to/your-local-plugincodex --plugin-dir ./plugin-a --plugin-dir ./plugin-b # 多个插件如果你需要控制插件的生效范围,可以通过修改配置文件来管理:
User(全局生效):直接在全局的 ~/.codex/config.toml 中配置 [plugins] 字段,开启或关闭特定插件。
Project(项目生效):在当前项目的根目录下创建 codex.toml。Codex 在该目录启动时会自动读取此局部配置,你可以像 Git 提交一样将其共享给团队。
xxxxxxxxxx[plugins]"openai/codex-security-plugin" = true # 启用"some-other-plugin" = false # 禁用.
Plugin 管理:
xxxxxxxxxx# CLI 管理codex plugin list # 查看已安装 Plugincodex plugin add # 安装(弹出交互选择器)codex plugin remove # 卸载
# 市场管理codex plugin marketplace list # 查看已注册市场codex plugin marketplace add <来源> # 添加市场(GitHub 简写/Git URL/本地路径)codex plugin marketplace remove <名称>codex plugin marketplace upgrade <名称>其中,codex plugin marketplace add <来源> 中的 <来源> 包括:
xxxxxxxxxxopenai/skills # GitHub 简写https://github.com/myorg/codex-plugins.git # 完整 Git URL/local/path/to/plugin # 本地目录--ref v1.2.0 # 固定到特定 Git refPlugin 的内容与目录结构:在 Codex 生态中,编写 Plugin 的核心是遵循 .codex 清单标准,并围绕技能 (Skills)、外部应用连接器 (Apps) 和模型上下文协议 (MCP 服务器) 展开。
标准的插件目录结构:
xxxxxxxxxxmy-codex-plugin/├── .codex/ # 必须:Codex 插件的专属配置目录│ └── codex.json # 必须:插件的元数据清单(不同于 Claude 的 plugin.json)├── skills/ # 可选:特定领域的提示词/背景知识(与 OpenClaw/Claude 兼容)│ └── docker-expert/│ └── SKILL.md # 同样使用带有 Frontmatter 的 Markdown 编写├── apps/ # 可选:连接外部服务(如 GitHub、Slack、Linear)的凭据与路由配置│ └── github-connector.json├── mcp-configs/ # 可选:捆绑的 MCP(Model Context Protocol)服务器配置│ └── mcp-servers.json # 定义 Codex 可以直接调用的本地或远程 MCP 工具├── hooks/ # 可选:自动化生命周期钩子│ └── hooks.codex.json # 注册 Codex 支持的事件(如 SessionStart, UserPromptSubmit)└── README.md # 可选:说明文档
核心文件示例:
插件清单 .codex/codex.json:
xxxxxxxxxx{ "name": "team-ops-heavy", "version": "1.0.0", "description": "团队内部专用的 CI/CD 运维与代码合规检查工具", "author": "OpenAI Developer", "capabilities": { "skills": true, "mcp": true }, "apps": ["github", "slack"]}技能 skills/docker-expert/SKILL.md:
xxxxxxxxxx---description: 强制执行标准化的生产环境 Dockerfile 审查effort: hightags: [devops, docker]---当分析或生成项目的 Dockerfile 时,请确保:1. 必须使用多阶段构建(Multi-stage build)。2. 基础镜像必须锁定为 `alpine` 或 `distroless`。3. 检查是否有未清理的缓存(如 apk cache)。自动化钩子 hooks/hooks.codex.json:
xxxxxxxxxx{ "events": { "UserPromptSubmit": { "action": "run-pre-check", "description": "在提交代码前自动扫描是否有敏感明文密码" } }}App 集成(App Integration )apps/github-connector.json:充当 Codex AI 与第三方 SaaS 平台(GitHub、Slack、Linear 等)之间的 “安全凭据网关与路由声明中心”。
在它出现之前:AI 想要调用 GitHub,需要开发者自己在代码里死写环境变量(如 GITHUB_TOKEN),既不安全,也无法在团队中分发。
在它出现之后:通过一个 JSON 声明,Codex 就会接管所有鉴权(OAuth / API Key)流程,让 AI 能够“代表当前用户”或“代表组织”安全地操作外部软件。
xxxxxxxxxx{ "app_id": "github", "provider": "openai-oauth-gateway", "auth_type": "oauth2", "scopes": ["repo", "user", "workflow"], "inject_into": { "mcp_servers": ["github-mcp-server"], "env_variable": "GITHUB_PERSONAL_ACCESS_TOKEN" }, "policies": { "write_actions": "requires_explicit_approval", "allowed_domains": ["api.github.com"] }}.
Codex 常用插件快速参考:
codex-rescue (或 codex-plugin-cc):
类型:跨平台协作 / 智能体。
使用场景:
在 Claude Code 或本地终端中遇到棘手 Bug 时,一键召唤 Codex 的 SubAgent 进行深度修复。
利用 OpenAI 庞大的知识库与推理能力进行跨平台联合代码诊断。
注意事项:
属于跨 AI 协同工具,需要同时配置 OpenAI 的 Workspace 访问 Token 。
github-automation:
类型:流程自动化 / CI-CD 集成。
使用场景:
自动管理 GitHub Action 触发器与构建状态。
自动审查 PR 并根据报错信息直接在线修改代码、提交修复分支。
注意事项:
需对仓库拥有较高的 Write 权限,建议在大规模生产环境中使用时做好分支保护。
composio-connector:
类型:外部应用集成 / 工具箱。
使用场景:
将 Codex 连接到 Slack、Jira、Notion、Linear 等 100+ 种办公软件。
编写完代码后,自动生成 Jira 任务更新、发布 Slack 团队通知,或自动提取 Linear 上的需求转化为代码。
注意事项:
严重依赖第三方平台的 API 稳定性与授权状态。
app-server-orchestrator:
类型:运行环境管理 / 自动化部署。
使用场景:
自动启动、配置并监控本地或云端的独立应用服务器(App Server)。
检测服务器环境的中间件缺失,自动进行配置和安全加固。
注意事项:
相比单文件级别的插件,它涉及系统多端口和进程管理,算力占用较高。
non-interactive-runner:
类型:工作流优化 / 后台批处理。
使用场景:
大规模无人工干预的代码库迁移、重构或数据管道处理。
让 Codex 处于非交互模式(Non-interactive Mode)默默跑完长时间的任务,结束后输出完整报告。
注意事项:
运行前必须提供极其精准的 Prompt 和边界条件,否则 AI 在长任务中偏离方向会产生高额的 Token 费用。
plugin-creator:
类型:开发者工具 / 内置脚手架。
使用场景:
当官方插件不满足需求时,使用 @plugin-creator 命令一键生成自定义插件的标准脚手架(包含 plugin.json、SKILL.md 等)。
快速封装企业内部私有的 API 变成 Codex 的专属技能。
注意事项:
生成的只是结构模板,具体的 MCP 协议连接代码仍需人工微调。
LSP(Language Server Protocol,语言服务器协议)是由微软、红帽等公司于 2016 年共同发起的一项开源标准协议。
在过去,如果有人开发了一种新的编程语言(例如 Rust),为了让它在各种编辑器(如 VS Code、Vim、Emacs、Sublime)中都支持代码高亮、自动补全、跳转到定义和语法检查,开发者需要为每一个编辑器都单独写一个插件。这导致了 M × N 的重复工作量。
LSP 改变了这种模式:
核心理念:将 “编辑器/IDE(前端)” 与 “语言分析工具(后端)” 解耦。
工作方式:语言开发者只需要编写一个通用的 LSP Server(负责解析代码、寻找错误、计算补全列表),而各个编辑器只需要实现一个 LSP Client。
通信机制:编辑器与 LSP Server 之间通过 JSON-RPC 协议进行标准化通信。
例如:当你在编辑器中敲击代码时,编辑器(Client)会把光标位置发给 gopls(Go 语言的 LSP Server),gopls 计算出补全列表后返回给编辑器展示。
在 Claude Code 中,LSP Server 提供“精准的眼睛”。Claude Code 虽然聪明,但它在看庞大的代码库时可能会 “漏看” 某些类型定义。通过连接本地的 LSP Server,Claude Code 可以直接调用精准的 AST 语法树分析,像人类程序员一样使用“跳转到定义”或“查找引用”,从而绝对准确地定位代码错误,避免幻觉。
在 Claude Code 中使用 LSP Server(语言服务器)可以将原本基于传统 grep 文本检索的代码导航(耗时约 30~60 秒且不精准),直接提升至 IDE 级别的毫秒级代码智能定位(耗时约 50 毫秒)。通过 LSP 增强后,Claude 在面对大型项目时能够实现精准跳转到定义、查找调用引用、跨文件关联分析,并在编辑代码后立即捕获类型错误或语法警告。
在 Claude Code 中,LSP Server 的配置指南:
第一步:开启 Claude Code 的 LSP 核心工具:LSP 属于高级特性,需要先在系统的环境变量中显式激活其内置的 LSP 功能引擎。
在终端中执行以下命令(建议直接写入你的 ~/.zshrc 或 ~/.bashrc 配置文件中以永久生效):
xxxxxxxxxxexport ENABLE_LSP_TOOL=1注:部分版本也可以通过修改 ~/.claude/settings.json 在 "env" 下添加 "ENABLE_LSP_TOOL": "1"。
第二步:安装本地对应的语言服务器二进制文件 (Language Server):Claude Code 本身不自带特定编程语言的编译器或解析器,它需要作为客户端(Client)去调用你电脑上已经安装好的本地 LSP Server 实体。
根据你正在开发的语言,在系统终端中全局安装对应的服务器:
Python:
LSP Server 实体:pyright
安装命令:npm install -g pyright 或者是 pip install pyright。
TypeScript / JS:
LSP Server 实体:typescript-language-server / vtsls
安装命令:npm install -g typescript-language-server typescript
Go:
LSP Server 实体:gopls
安装命令:go install golang.org/x/tools/gopls@latest
Rust:
LSP Server 实体:rust-analyzer
安装命令:rustup component add rust-analyzer
C / C++:
LSP Server 实体:clangd
安装命令:需通过系统的包管理器安装(如 brew install llvm 或 apt install clangd)
注意:安装完成后,请确保能在系统终端中直接运行该命令(例如输入 pyright --help 能正常响应),即该二进制文件已被正确加入系统的 $PATH 环境变量中。
第三步:在 Claude Code 中安装并配置 LSP 桥接插件:由于 Claude 官方或社区市场提供了许多开箱即用的代码智能插件(Code Intelligence Plugins),它们负责将 Claude 与你本地安装的 LSP 实体进行底层的通信绑定。
启动 Claude Code 并在交互终端中输入:
xxxxxxxxxx/plugin搜索并安装匹配的语言插件:
在界面中找到你所需的插件,例如 Python 开发选择 pyright-lsp,TypeScript 开发选择 typescript-lsp 或 vtsls。
也可以通过命令行直接安装(如社区常用的 LSP 集合仓库):
xxxxxxxxxx/plugin install pyright@claude-code-lsps加载生效:安装完成后,重启 Claude Code(退出并重新运行 claude),或者在 Claude 终端输入 /reload-plugins 刷新。
第四步:日常使用:一旦配置成功,你不需要调整任何原有的提问习惯。当你像平常一样向 Claude 提问时,它会在后台自动放弃缓慢的文本搜索(Grep),优先改为调用 LSP 工具。
你可以直接输入以下指令来测试和体验 LSP 带来的改变:
跨文件精准寻找核心定义:
人类提问: "帮我找出项目里 authenticateUser 这个函数是在哪里被定义的?"
LSP 表现: Claude 不会再盲目扫描几百个文件,而是直接通过 LSP 的 Go to Definition 操作,在 50毫秒 内精准锁定那唯一一个声明该函数的文件和行号。
调用关系追踪(Call Hierarchy)
人类提问: "有哪些地方调用了 processPayment 这个方法?"
LSP 表现: 调用 LSP 的 Find References 功能,准确返回真实的调用链,把注释里的死代码或者同名的无关函数自动过滤掉。
实时类型检查与纠错
人类提问: "优化一下 order.ts 里的数据结构。"
LSP 表现: 当 Claude 帮你修改完代码后,它会立刻读取 LSP 服务端返回的诊断红线(Diagnostics/Squiggles)。如果它改错了导致产生新的 TypeScript 类型冲突,它会不需要你提醒,自己看到红线报错并立即原地修复。
常见排查与避坑指南:
遇到 Executable not found in $PATH 报错:
如果在 /plugin 的 Errors 标签页看到这个提示,说明虽然你安装了 Claude 插件,但它在你的电脑上找不到前面一步中提到的那个底层二进制程序(如 pyright)。请检查本地环境是否正确全局安装了该语言服务。
Python 虚拟环境(Virtual Environments)失效:
如果开发 Python 项目,LSP 可能找不到你第三方库的依赖。请务必先激活项目的虚拟环境,再在同一个终端里启动 Claude Code:
xxxxxxxxxxsource .venv/bin/activateclaude如果你使用的是 VS Code 插件版:
如果你是在 VS Code 内直接使用 Claude Code 扩展,你不需要进行上述任何配置。VS Code 本身启动的底层语言服务器会把所有的类型错误和代码诊断直接共享给 Claude。上述的配置主要是针对在纯终端/命令行(CLI)模式下运行 Claude Code 的开发者。
Codex 目前没有独立的 LSP Server 工具,但通过 IDE 扩展提供了等效的代码智能功能。
支持的 IDE:
VS Code:从扩展市场搜索 "Codex" 安装。
Cursor:内置支持,进行配置即可。
Windsurf:内置支持,进行配置即可。
如需深度代码智能,建议在 IDE 中同时配置项目语言对应的原生 LSP(如 TypeScript Language Server、rust-analyzer 等),Codex IDE 扩展可与之并行工作。
主动管理 Context (上下文)主要为了解决以下四个痛点:
防止 “上下文腐烂”(Context Rot)与性能退化:随着会话拉长、工具调用(如读取大文件、运行测试、生成 Diffs)变多,上下文窗口被填满,Claude Code / Codex 容易遗忘变量名、忽略关键指令、重复错误或产生幻觉。
降低 API 令牌(Token)成本:Claude Code / Codex 按输入和输出 Token 计费。如果不清理,每次对话都会全量携带历史中读取过的十几、二十个文件和测试日志,导致费用成倍激增。
避免触发自动压缩(Auto-Compaction)导致的细节丢失:虽然 Claude Code / Codex 接近窗口上限(对于 Claude Code 约 83.5%、对于 Codex 约为 70% ~ 80%)时会自动压缩,但这种全自动的摘要往往会丢掉精确的函数签名、特定的报错日志等核心技术细节。
提升模型专注度:将大任务水平拆分,让模型在当前的“工作记忆”中只关注一件事,能大幅提升复杂代码生成的成功率。
最佳实践工作流建议:
保持 CLAUDE.md 或者 AGENTS.md 精炼:只写最关键的规范。
Claude Code 默认最多加载的 CLAUDE.md 单个文件内容上限为 40k 字节。
Codex 默认最多加载 32 KiB 的 AGENTS.md 内容(由 project_doc_max_bytes 控制)。
精简每条 SKILLs 的 description 字段,确保触发条件清晰。
监控状态:养成经常使用 /context 命令(Claude Code)或者 /status (Codex)的习惯,它会通过可视化网格展示当前 Token 哪些部分占用最多(如某个 MCP 工具或特定大文件),并提供优化建议。
编写交接文档(Handoff Docs):当遇到极其庞大的任务不得不跨多个会话时:
可以在当前会话结束前让 Claude Code / Codex 生成一份 progress.md 备忘录(直接向 Claude Code / Codex 发送明确的文档化指令)。
随后使用 /clear 开启新会话,直接让新 Claude Code / Codex 读取该备忘录(通过 @ 符号精准喂入该文件),即可完美实现 “无缝低 Token 续接”。
上下文管理的方法、应用场景及注意事项:
/clear:会话彻底清空。
应用场景:当完成一个特性(Feature)并提交 Git 后,准备切换到另一个完全不相关的任务(如从前端 UI 转向后端数据库迁移)。
注意事项:会永久删除当前会话的所有聊天历史(CLAUDE.md 等持久文件不受影响)。执行前确保已将重要方案提交或记录。
/compact:定向/手动压缩。
应用场景:处于同一个长任务中(如复杂重构),由于读取了大量文件导致窗口吃紧,但仍需继续当前工作。
注意事项:强烈建议携带自定义指令(例如 /compact 保持保留 auth 鉴权流程的设计决定),否则无差别的默认压缩容易导致关键技术细节丢失。
CLAUDE.md :
应用场景:存放项目的持久化公共上下文(如构建命令、代码风格规范、核心架构约束),供所有新会话启动时自动加载。
严禁在其中塞入临时或过长的数据(如大段报错、临时计划)。它会占用每一次会话的初始 Token,导致严重的 “规则膨胀”。
使用 SubAgents(子智能体):
应用场景:用于执行独立、重度消耗 Token 的子任务(如深入研究某个陌生复杂模块、跑大段日志测试、生成大范围文档)。
注意事项:SubAgents 拥有独立的全新上下文窗口,其高耗能交互不会污染主会话,只会向主会话返回一个精简的摘要结果。但它无法感知主会话的临时交谈历史。
/rewind:回退重来。
应用场景:当 Claude 走入死胡同、尝试某种重构方法失败,准备使用“补救式修正”时。
注意事项:连按两次 Esc 键或运行 /rewind,可直接跳回历史中某个正确的节点,彻底抹除该节点之后的错误尝试。这比反复用 “那行不通,换个方法” 来打补丁更节省 Token 且效果更好。
精准控制载入(通过 @ 符号):
应用场景:需要让 Claude 了解某些代码,但不想让它自主去检索整个代码库时。
注意事项:手动通过 @path/to/file 引入精准文件。另外,如果 @ 引用的是一个目录,Claude 只会读取目录结构,而不会加载所有文件内容,非常适合需要理解整体架构又不希望上下文爆炸的场景。
上下文管理的方法、应用场景及注意事项:
/clear 或 /new:重置会话。
应用场景:当前开发任务已结束并完成提交,准备开始一个完全全新的任务(如从修复 Bug 转向开发新功能)。
注意事项:会彻底清空当前会话的历史记录。执行前请确保当前的讨论结果、代码片段已保存或应用,避免丢失未记录的思路。
/compact:压缩历史。
应用场景:对话轮次过多、上下文过长导致窗口吃紧,但仍想在当前会话中继续推进同一个任务。
注意事项:该操作会精简历史对话。为了防止核心设计意图或关键技术细节在压缩中被遗漏,建议在后续对话中适时对重要结论进行重申。
@(模糊搜索)或 /mention 路径(精确匹配):附加文件(精准控制载入)。
应用场景:明确知道哪些代码与当前问题相关,只让 Codex 看到这些特定文件,避免其盲目检索整个代码库。
注意事项:通过精准引用可以极大地节省 Token。在引用目录时,通常只会读取结构或索引,若需要编码支持,请确保直接指定到核心关联文件。
AGENTS.md:持久化上下文。
应用场景:存放项目的全局公共上下文(如统一的代码规范、编译部署命令、项目核心架构说明),以便每次新会话启动时自动加载。
注意事项:严禁将临时的调试日志、特定 Bug 的报错或短期开发计划写入其中。否则,每次交互都会重复加载这些无用数据,导致初始 Token 严重膨胀。
SubAgent 或 /side:隔离重任务(子智能体/侧边栏)。
应用场景:需要执行独立、重度消耗 Token 的任务(如探索性技术研究、生成大范围文档、运行深度日志分析)。
注意事项:开辟独立的全新上下文窗口,其高耗能交互不会污染主会话,完成后仅将精简结果返回。但需注意,隔离环境无法直接感知主会话的临时交谈历史。
codex resume --last:恢复历史。
应用场景:由于终端关闭、网络断开或误操作导致会话中断,需要续接上一次的对话状态继续工作。
注意事项:该命令用于恢复最近一次的会话现场。如果已经手动开启了多个新任务,请留意恢复的节点是否为预期的正确历史节点。
Multi Agents 工作方式:可以通过同时开多个 Claude Code / Codex 进程,每个进程执行不同的子任务从而并行处理一个大任务。每个启动的 Claude Code / Codex 实例都是一个独立的进程,拥有自己独立的上下文窗口和会话历史。
然而,如果直接在同一个文件夹路径下盲目多开,会导致严重的 “代码冲突” 与 “状态错乱”。以下是 Claude Code 官方推荐的最佳实践以及必须要关注的注意事项。
Claude Code 官方推荐的两种高效多开方式:
官方推荐:使用原生工作树功能(--worktree)。这是最安全、最优雅的并行开发方式。Claude Code 内置了对 Git Worktree 的支持。它会在项目的 .claude/worktrees/ 目录下为每个任务创建独立的副本和 Git 分支,从而彻底隔离文件修改。例如:
xxxxxxxxxxclaude --worktree feature-auth # 启动任务 Aclaude --worktree bugfix-login # 在另一个终端启动任务 B自带的后台管理:代理视图(agent view)。如果你不希望开辟过多的终端窗口,可以利用 Claude Code 强大的全局任务调度能力:
在终端输入:claude agents 即可打开一个清爽的全局控制面板。
你可以在这里统筹派发、监控所有在后台静默运行的独立任务(Tasks/Subagents),仅在需要人工确认时介入。
核心注意事项:
严禁在同一物理目录/同一 Git 分支上硬多开:如果你直接开两个终端,都在 ~/my-project 且处于同一个 main 分支下运行 Claude Code / Codex,将会面临以下灾难:
文件写入冲突:实例 A 正在重构文件,实例 B 也在修改同一个文件,导致代码互相覆盖或产生 Git 冲突。
工具执行干扰:当实例 A 运行测试脚本或构建服务时,实例 B 启动的进程可能会占用相同的端口或清理掉 A 的临时文件。
上下文污染 bug:在某些旧版本或特定极端情况下,同目录多开可能导致会话历史或压缩后的上下文发生串线。
账户 Token 速率限制与限流(Rate Limits):多开进程意味着 API 调用量成倍增长。
费用与额度:每个进程都有自己独立的上下文,多开几个进程,Token 消耗量就是几倍。
升级方案:使用 Pro 计划(Claude Code)在多实例并发时极易触发官方的 Rate Limit 导致 AI 陷入长时间的等待(Throttled)。若需高强度并发(如同时挂 5 个以上实例),强烈建议升级到官方的 Max 计划(Claude Code)以获取更充足的速率配额。
共享资源的隔离(数据库与端口):即使你使用了 worktree 隔离了代码文件,本地的某些共享环境依然是公共的:
数据库:如果两个独立任务都需要对本地同一个数据库(如本地 Postgres/MySQL)进行迁移(Migration)或写操作,会导致数据污染。建议配合支持分支的数据库或使用不同前缀的容器。
运行端口:如果两个 Claude / Codex 实例都尝试启动 Web 服务(如 npm run dev 都想占用 3000 端口),后启动的将会报错。
缺乏原生的跨进程信息共享:默认情况下,并行运行的两个独立 Claude Code / Codex 进程完全互不相知,它们无法直接读取对方的对话,也看不到对方对文件的实时修改规划。
规避小技巧:如果你需要两个进程相互配合(例如:实例 A 编写后端 API,实例 B 同步编写前端对接),可以先让实例 A 将 API 契约或设计方案写入项目内的一个 API_SPEC.md 文件中,再让实例 B 读取该文件开始干活。
claude --worktree:对原生 git worktree 的全自动封装,一条命令拥有"独立目录 + 专属分支 + 隔离会话 + 自动清理" 的沙箱环境。可以同时开启多个 worktree,每个并行处理不同任务,互不干扰。
每个 worktree 都会占用一定磁盘空间,同时开启过多时注意容量。
要求当前目录是 git 仓库。
合并 worktree:
第一步:在终端中切换回你的主项目根目录(而不是 .claude/worktrees/ 下的子目录)。
第二步:切换到 master 分支并拉取最新代码:
xxxxxxxxxxgit checkout mastergit pull origin master第三步:利用 Claude Code 进行合并(推荐,自动处理冲突)。
在主仓库根目录下启动 Claude Code。
在 Claude 交互界面中,直接向它下达合并指令。
或者手动合并:
xxxxxxxxxxgit merge worktree_name第四步:清理 worktree。
xxxxxxxxxx# 查看当前所有的 worktree 列表git worktree list
# 移除指定的 worktree(Git 会自动删除 .claude/worktrees/ 下的对应目录)git worktree remove <worktree路径或名字>
# 清理可能残留的过期 worktree 引用git worktree prune
# 删除本地已经合并过的临时分支git branch -d worktree-<任务名>官方原生的 Codex CLI 并不直接支持 codex --worktree 这个内置指令。而 Codex App(桌面版)已经原生内置了完整的 Worktree 模块。
在命令行(CLI)工具中,--worktree 的原生功能仍处于开源社区的 PR 讨论和开发阶段。可以手动通过原生 Git Worktree 运行来实现 --worktree 指令:
首先,创建并切换到独立的临时工作区(Git Worktree):
xxxxxxxxxxgit worktree add ../feat-auth-branch -b feat-auth origin/maincd ../feat-auth-branch然后,在此目录下直接唤醒 Codex CLI:
xxxxxxxxxxcodex -- "修复认证模块的bug"接下来的步骤参考 claude --worktree。
在 Claude Code / Codex 中,SubAgent(子代理)是运行在独立上下文窗口中的专用 AI 助手。它通过将特定任务委派给具备独立 System Prompt、工具权限和模型的 “数字专员” 来执行工作,干完活后仅将最终结论/摘要返回给主会话。这种机制可以有效防止复杂的搜索结果、日志和文件内容充斥并污染主对话的上下文。
创建 SubAgent:创建自定义 SubAgent 主要有两种方法:内置交互命令(推荐)或手动编写 Markdown 文件。
使用交互式命令(推荐):在终端的 Claude Code 会话中输入:
xxxxxxxxxx/agents在打开的界面中切换到 Library 选项卡,选择 Create new agent,然后选择它的作用域(Scope):
Personal(个人):保存在 ~/.claude/agents/,所有项目都能调用。
Project(项目):保存在当前项目的 .claude/agents/,可提交到 Git 团队共享。
你可以选择 Generate with Claude,输入一句描述(例如:“一个用于审查代码可读性和性能的专员”),Claude 就会自动为你生成配置文件。
手动创建文件:你也可以直接在对应的作用域目录下(如 .claude/agents/),创建一个以 agent-name.md 命名的文件。
SubAgent 文件内容:SubAgent 文件采用 Markdown 格式,其核心是由顶部的 YAML Frontmatter(配置元数据) 和底部的 System Prompt(系统提示词/正文) 组成:
xxxxxxxxxx---name: code-reviewerdescription: 用于扫描文件、审查代码质量、可读性、性能并提出重构建议的 AI 专员。当用户需要深入的代码审查时调用。model: sonnettools: [Read, Bash]memory: user---
你是一位资深的专家级代码审查员。你的任务是分析指定的代码文件。请指出任何潜在的错误、性能瓶颈或不符合最佳实践的地方。要求提供当前代码与修改后代码的清晰对比,并说明理由。关键字段说明:
name: agent 的唯一标识符。
description:至关重要! 用于让主 Claude 识别什么时候应该把任务交给你这个子代理。描述越精准越好。
model:可指定运行模型(如性能出色的 sonnet,或速度快且成本低的 haiku)。
tools:限制子代理可使用的工具(如仅允许 Read 只读,或允许 Bash)。若省略则继承主会话的所有权限。
memory:设置跨会话的持久记忆(可选 user / project / local / none)。
在 Claude Code 中,memory 字段决定了该 SubAgent 的 ”记忆文件” (MEMORY.md)保存在哪里,以及它的生命周期是什么。Claude Code 拥有跨会话记住项目上下文、开发偏好和历史教训的能力,这几个选项的含义和应用场景如下:
memory: user(个人全局记忆):
含义:记忆存储在你的用户全局 Home 目录下(通常是 ~/.claude/ 或 ~/.config/claude/)。
作用域:跨项目、跨终端会话。无论你在电脑上开发哪一个项目、打开哪一个终端,这个 SubAgent 积累的记忆全电脑通用。
典型场景:存储你个人的编码风格偏好、你常用的缩写习惯、或者你在所有项目中都会严格遵守的代码规范。
memory: project(项目级共享记忆):
含义:记忆存储在当前项目的 Git 根目录下(.claude/ 文件夹内)。
作用域:限定在当前项目内,可团队共享。因为文件在项目内,你可以把它提交到 Git 仓库。
典型场景:存储该项目的特定架构决策、技术债记录、特定的部署流程。团队里的其他成员拉取代码并运行该 SubAgent 时,它能立刻继承这些项目专属的知识。
memory: local(本地会话/特定机器记忆):
含义:记忆存储在当前项目的 .claude/ 目录下,但它被记录在不跟随 Git 提交的本地配置文件中(例如被加入 .gitignore 的本地缓存)。
作用域:限定在当前项目且仅限你当前这台机器。
典型场景:存储你当前机器独有的环境配置、本地 Debug 时的特殊路径、或者你不想提交给团队其他人的个人临时项目笔记。
memory: none(无记忆/单次即开即忘):
含义:完全不启用持久化记忆功能。
作用域:单次调用。SubAgent 被唤醒时是一张白纸,任务结束被销毁时,它在过程中总结的所有经验、偏好和教训都会被直接抹去,不会写进任何文件。
典型场景:执行纯粹的单次自动化任务(如单次格式化代码、一次性的安全扫描)。不需要它记住任何历史,保证每次运行都具备绝对的干净环境和高确定性。
SubAgent 的 System Prompt:它是Sub-agent 的 Markdown 文件中除去顶部配置后的“所有正文”:
xxxxxxxxxx---name: testertools: [Bash]---這裡以下的所有內容,都是這個子代理的 System Prompt:1. 你是一個嚴格的自動化測試專家。2. 你只能使用 npm test 命令。3. 你的回覆必須簡明扼要。一个高效率的 SubAgent System Prompt,通常包含以下三要素:
角色定位:指定它是某一领域的专家(例如:“你是一个专精于 React 性能优化的资深前端工程师”)。
工作流程/步骤:告诉它先做什么、后做什么(例如:“第一步先读取 package.json,第二步运行测试”)。
输出格式限制:严格限制它的返回,因为主会话只需要结论(例如:“请不要输出任何多余的解释,最终必须以 Markdown 表格形式返回修改前后的性能对比”)。
调用 SubAgent:在实际使用中,有自动触发与手动指派两种方式:
自动触发(推荐):由于你在 YAML 中编写了精确的 description,当你向主 Claude 发送指令(如:“帮我审查一下 src/auth.ts 的代码质量”)时,主 Claude 识别到匹配度,就会在后台自动调用 code-reviewer 代理。
手动显式调用:如果你想强制指定某个子代理处理,可以在输入时使用 @ 符号或作为首个单词(例如:“@code-reviewer 帮我看看这个文件” 或者 “code-reviewer 帮我看看这个文件”)。
非交互式命令行或脚本:通过 CLI 启动时传入 JSON 字符串参数(如:claude --agents '[{"name": "...", ...}]')。
注:Claude Code 内部还自带了 Explore(代码库只读搜索)和 Plan(规划模式)等内置子代理,它在需要时会自动调度。
SubAgent 的典型应用场景:
海量日志与数据分析:读取上千行测试或运行日志,主上下文只需要最终的 Error 摘要。
代码基库的大范围探索(内置 Explore):在不破坏你当前白板逻辑的前提下,去整个代码库里地毯式搜索特定的 API 锚点。
专项代码审查与安全审计:由专门配置了各类安全约束 Prompt 的只读 SubAgent 解析代码,反馈漏洞风险。
自动化测试与验证:交给一个专门负责执行 npm test 并尝试修复报错的 SubAgent ,主程序只等它返回 “测试通过” 或 “未通过”。
编写和使用时的注意事项(避坑指南):
只有最后一条消息会被返回: SubAgent 由主智能体通过 Agent(旧版本中叫 Task)工具衍生。 SubAgent 在独立上下文中执行的所有中间工具调用、文件读取、测试报错等过程数据全部会在子上下文销毁时丢弃,只有它发送的最后一条消息(Final Message)会返回给主会话。因此,必须在 Prompt 中严格要求 SubAgent “最终必须交出完整的结论或摘要”。
保持全局 Name 唯一:Claude Code 在加载时会递归扫描目录。如果在同一个作用域内两个 Markdown 文件声明了相同的 name,系统会随机保留一个并直接丢弃另一个,且不会报错或警告。
独立的 System Prompt 限制: SubAgent 开始时是一张白纸,它只接受自己文件里写的 System Prompt,不会继承主 Claude 的长篇全局系统提示词(但会附带当前工作目录等基础环境变量)。
cd 命令不具有持久性:在 SubAgent 内通过 Bash 运行 cd 改变路径,不会影响下一次工具调用,也不会影响主会话的路径。如果需要在完全隔离的副本中写代码,请在 frontmatter 中配置 isolation: worktree。
默认 memory 互不相通: SubAgent 各自的 MEMORY.md 彼此是绝对隔离的。如果两个不同的 SubAgent 在前后脚处理任务,它们无法直接共享彼此在中间过程学到的新知识。
创建 SubAgent:创建自定义 SubAgent 主要有两种方法:内置交互命令(推荐)或手动编写 Markdown 文件。
使用交互式命令(推荐):在终端的 Codex CLI 会话中输入:
xxxxxxxxxx/agents在打开的界面中切换到 Library 选项卡,选择 Create new agent,然后选择它的作用域(Scope):
Personal(个人):保存在全局目录 ~/.codex/agents/,所有项目都能调用。
Project(项目):保存在当前项目的 .codex/agents/,可提交到 Git 团队共享。
你可以选择 Generate with Codex,输入一句描述(例如:“一个用于审查代码可读性和性能的专员”),Codex 就会自动为你生成对应的配置文件。
手动创建文件:你也可以直接在对应的作用域目录下(如 .codex/agents/),创建一个以 agent-name.toml 命名的文件。
SubAgent 文件内容:SubAgent 文件采用 toml 格式:
xxxxxxxxxx# .codex/agents/security-reviewer.toml
name = "security-reviewer"description = "专注安全漏洞分析的代理,适合代码审查和渗透测试模拟"
# 官方标准的提示词注入字段developer_instructions = """你是一名专业的应用安全工程师。在分析代码时:1. 重点关注 OWASP Top 10 漏洞2. 检查输入验证、SQL 注入、XSS、CSRF 等问题3. 只读,不修改代码,只提出建议"""
# 运行及安全限制配置model = "gpt-5.5"model_reasoning_effort = "high"sandbox_mode = "read-only"
# 绑定 MCP 服务或技能扩展mcp_servers = ["file-reader", "bash-executor"]
nickname_candidates = ["Security", "Auditor", "Hawk"]
[skills.config]max_execution_time = 30 # 限制子代理运行本地测试脚本的最长时间为 30 秒allowed_commands = ["npm test", "pytest"] # 严格限制子代理只能在终端执行这两条命令必填字段:
name: agent 的唯一标识符。
主代理或用户在聊天中可以通过 @name 直接点名召唤该 SubAgent(例如:“@security-reviewer 帮我看一下这段代码”)
description:任务派发描述。
至关重要!Codex 由依靠此描述将匹配的任务自动派发给该子代理,描述越清晰越好。必须清晰声明该代理“擅长什么”以及“在什么场景下应该调用它”。
developer_instructions:开发者指令 / 核心提示词。
SubAgent 的系统提示词(System Prompt)。它决定了 SubAgent 的性格、专业背景、思考步骤和输出格式。使用 TOML 的三引号多行字符串(""")编写。建议包含:
角色定位(例:“你是一名专业的网络安全审计专家...”)。
工作流/步骤(例:“第一步扫描...第二步评估风险...”)。
输出规范(例:“必须使用 Markdown 表格列出漏洞等级...”)。
可选字段:
model:指定运行的 OpenAI 模型系列(如性能顶级的 gpt-5、gpt-4o 或追求速度与成本的轻量模型)。
model_reasoning_effort:推理深度控制。
sandbox_mode:沙箱安全模式。
mcp_servers:MCP 协议服务绑定。
skills.config:本地技能/工具箱配置。
memories:是否自动读取 ~/.codex/memories/ (长期记忆库)下沉淀的长期记忆,并将 SubAgent 执行期间提取新的知识与教训然后整合进长期记忆库。
在 Codex 的设计哲学中,SubAgent本身被视为无状态的、短生命周期的轻量级工作流执行单元。因此,Codex 的 Frontmatter 配置中没有 memory: user 这样的字段声明。
在 Codex 中,SubAgent 的全局属性直接在 config.toml 文件的 [agents] 部分进行配置。
xxxxxxxxxx[features]multi_agent = true # 必须开启多代理功能功能
[agents]max_threads = 6 # 最大并发线程数(默认 6,决定同时能跑多少个子代理)max_depth = 1 # 子代理嵌套深度(默认 1,即主代理 -> 子代理,防无限套娃循环)job_max_runtime_seconds = 300 # 单个 Worker 任务超时时间(单位:秒,默认 1800 default_model = "gpt-4o-mini" # 默认子代理模型配置sandbox_policy = "inherit" # 安全与命令执行沙箱(继承或覆盖主代理)auto_approve_sub_commands = false # 自动化流控制enable_thread_logging = true # 打印每个活跃子代理的日志
Claude Code不支持设置SubAgent的全局属性。
调用 SubAgent:在实际使用中,有自动匿名触发、手动指派与配置驱动三种方式:
自动匿名触发(默认/按需):当你向主 Codex 发送复杂的长文本或组合任务指令,且未指定具体 SubAgent 名称时,Codex 会根据任务复杂度,在后台自动生成并激活匿名子代理(Anonymous Subagents)(例如自动调用其内置的 worker 执行代理或 explorer 搜索代理)并行处理,以防止上下文污染和衰减。
手动显式调用(通过 @ 符号):如果你想在对话中精准委派任务,可以在 Codex App 或扩展的输入框中输入 @ 符号。系统会弹出已安装或已定义的自定义代理列表,你可以直接点击或跟上名字来指派(例如,“@security-reviewer 帮我分析这段代码的漏洞”)。
配置文件/工作流驱动:在项目根目录中编写 AGENTS.md或 .toml配置文件,显式定义 SubAgent 的体系、约束、以及子任务的依赖流。当通过 Codex CLI 或自动化管线(Automations)读取并启动该项目时,系统会严格按照该结构批量并发出多个特定的 SubAgents(如安全、测试、可维护性等)协同作业。
注:在 Codex CLI 运行过程中,你可以使用 /agent 快捷指令在不同的 SubAgent 线程之间进行交互切换,并能直接通过主对话指示某个运行中的 SubAgent “转向(Steer)”、“停止(Stop)”或“关闭(Close)”。
在 Codex 中,SubAgent 的核心设计逻辑与 Claude Code 有明显不同(Claude Code 偏向动态对话派生,而 Codex 更偏向静态配置文件驱动的常驻多线程设计)。
Codex 内置了 Default、Worker 和 Explorer 三大 SubAgent。它们覆盖了代码任务从 “读” 到 “写” 再到 “全局统筹” 的完整生命周期。主代理(Manager)可以将复杂任务拆解并分发给这些特定的 SubAgent 并行执行。
内置的 SubAgent 不需要你手动配置,它们已经默认内嵌在系统底层。你只需要在 Prompt 中向主代理表达 “并行分工” 的意思,Codex 就会自动调度它们。例如:
xxxxxxxxxx"请帮我审查这个 Pull Request。请派智能体并行去帮我探索影响到的代码路径 (自动拉起 Explorer),去找出安全与正确性风险 (拉起专门的 Agent/Worker),并在完成后将结果汇总报告。"
| SubAgent 类型 | 核心定位 | 读写权限 | 默认模型行为 | 最佳适用场景 |
|---|---|---|---|---|
| Explorer | 专注于代码库只读探索 | 纯只读 (Read-Only) | 默认跑在更轻快、低成本的模型上(如 Mini / Spark 系列) | 梳理架构、寻找 TODO、分析调用链路 |
| Worker | 专注于执行代码修改与修复 | 读写权限 (Write-Access) | 继承主会话模型与高推理配置 | 编写新功能、重构代码、修复 Bug、跑测试 |
| Default | 通用型降级兜底代理 | 视任务而定 | 完全继承父会话的模型与参数设置 | 单次独立任务、小范围且边界清晰的单文件操作 |
编写和使用时的注意事项(避坑指南):
过程与结果均保持透明交互:与 Claude Code 只返回最后一条消息不同,Codex 的 SubAgent 拥有独立的活动线程。其执行中间件、进度和结果会实时汇总并在 CLI/App 界面中可见,支持通过 /agent 命令进行跨线程切换和实时人工干预(Steer、Stop、Close)。因此,在 Prompt 中应着重规范 “过程日志的输出格式”,而非仅仅卡死最终一条消息。
层级化覆盖与局部优先原则:Codex 的全局配置位于全局目录(如 ~/.codex/agents/),而项目级配置位于特定工作区(如 .codex/agents/)。如果两处存在同名的 .toml 配置文件,项目级的配置会直接覆盖(Override)全局配置。在编写自定义 SubAgent 时,需注意工作区配置是否意外拦截或修改了全局常驻 Agent 的预期行为。
继承父级的沙箱与权限边界:Codex 中的 SubAgent 在启动时并不是“完全的白纸”,它们会无条件继承父级会话的沙箱(Sandbox)模式和审批策略(Approval Policy)。这意味着,如果 SubAgent 在非交互式(Non-interactive)工作流中尝试执行超出父级授权边界的高危写操作或未授权命令,系统将直接报错终止,而不会隐式升级权限。
并发调用存在严格的配额与额度限制:由于 Codex 支持多线程并发调用匿名或具名 SubAgent(如并发进行代码库探索、合规审查与文档核对),这会带来极高的模型与工具调用成本。在高并发场景下,可能会瞬间消耗掉大额度的计算配额或触发会话级别的 Agent 并发数上限(例如配额临时收紧时允许派生的 SubAgent 数量会锐减)。
匿名特例与专用角色的分工失焦:当在提示词中不指定具体 SubAgent 名字而直接唤起匿名派生时,Codex 会默认启用三大内置角色:通用型(Default)、执行型(Worker)和读取型(Explorer)。为了避免混合任务导致的上下文污染或执行混乱,推荐通过编写 .toml 精准定义具名的自定义 SubAgent,严格限制各 SubAgent 的特殊技能集(Skills)与职责边界。
Agent Teams 是 Claude Code 的一项革命性实验性功能。它允许协调多个独立的 Claude Code 实例在同一个项目中进行并行、多智能体协作。
Agent Teams 是一种全方向、并行的多智能体协作开发模式。它与传统的 SubAgent 有本质不同:
传统 SubAgent:采用 “主 → 从” 模式,SubAgent 相互孤立,只能单向向主代理汇报,所有信息必须经由主代理中转。
Agent Teams:引入一个会话作为“团队负责人”(Lead),并生成多个“队友”(Teammates)。所有成员拥有各自独立的上下文窗口,通过共享的任务列表进行协作,并且队友之间可以跨越负责人直接发消息进行辩论和沟通。
Worktrees 可以让你手动管理多个并行的 session;SubAgent 让 main session 调用多个专家;Agent Teams 更进一步,即多个 session 之间能够相互通信、协调分工。
创建 Agent Teams:由于该功能目前为实验性功能,需要手动开启。
启用功能:你需要通过设置环境变量或修改配置文件来激活该功能。
方法 A:在终端中注入环境变量:
xxxxxxxxxxexport CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1方法 B:在 Claude Code 的 settings.json 配置文件中添加:
xxxxxxxxxx"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": true初始化团队:开启环境变量后,启动 Claude Code 会话。在交互界面中,直接向 Claude 下达包含团队协作意图的复杂任务(例如:“请帮我重构这个项目的 API 模块并编写测试,你可以建立一个团队来分工协作。”)。Claude 收到指令后会自动调用 TeamCreate 工具创建团队,并根据任务需求自动提议和生成具备特定角色的队友。
在团队运行期间,日常的使用和调度主要通过以下方式进行:
共享任务看板:团队会维护一个共享的任务列表(Task List),负责人将大任务拆解并指派给特定队友,所有人实时更新进度。
跨代理通信:你可以看到 Claude Code 的各个实例在终端中自发调用 SendMessage 互发消息,在后台讨论接口定义、校验彼此的判断并同步代码更改。
人工直接干预:你不需要全部通过负责人传达命令,你也可以在终端中直接切换或对某个特定的队友实例输入指令,指导其具体的编码工作。
创建和使用时的注意事项:
独立上下文与历史隔离:每个队友都有自己独立的上下文窗口,并会加载项目本地上下文(如 CLAUDE.md、MCP 服务等)。但是,负责人的对话历史不会传递给队友,队友只能感知到负责人传达的启动提示和直接消息。
API Token 消耗极大:由于多个 Claude 实例同时运行,各自独立消耗上下文,且高频互发消息,Token 的消耗速度会呈指数级上升,请密切关注你的 API 账单。
不要手动修改团队配置:团队的状态、tmux 窗口 ID 等运行时信息存储在本地的 ~/.claude/teams/ 目录中。这些由系统自动管理,切勿手动编辑 config.json,否则更改会被覆盖或导致团队崩溃。
明确的生命周期与清理:在 v2.1.178 及更高版本中,会话退出时通常会自动清理生成的队友。如果遇到异常挂起,必须确保先关闭所有活跃的成员,再调用 TeamDelete 或删除残留目录,否则可能导致删除失败或资源白白消耗。
不适合定义持久化角色:Agent Teams 中的队友是根据当前任务临时生成的。如果你需要定义跨越多个会话、可重复使用的特定团队角色,官方建议应当使用 SubAgent替代。
使用场景:在 Claude Code 中,根据 Claude Code 官方文档介绍,Agent Teams 绝非用于解决单一的、线性的简单任务。它的核心优势在于并行探索(Parallel Exploration)、专业分工与跨代理相互质疑(Cross-Challenge)。
以下是目前在实际开发与业务自动化中,Agent Teams 最为经典的四大应用场景和案例:
竞争假设调试(Debugging with Competing Hypotheses):当项目出现一个非常棘手、原因不明的复杂 Bug 时,传统做法是单兵作战,一个假说一个假说地去试。Agent Teams 可以让多个实例并行验证不同的假说,快速收敛问题。
典型案例:线上系统突然出现“用户发送一条消息后,App 会偶发性自动闪退/断开连接”的现象。
团队分工:主代理(Lead)收到指令后,会同时派生出 4-5 个专注于不同方向的调查员(Investigators):
队员 A(WebSocket 调查员):专门排查网络心跳包、重连机制和连接生命周期。
队员 B(状态管理器调查员):追踪消息收发时的内存状态,检查是否存在提前释放。
队员 C(服务端调查员):调取服务端日志,排查连接池配置和超时熔断。
队员 D(代码审查员):负责拦截各队员的结论,进行交叉验证,推翻错误的假说。
优势:不同假说的验证同时进行。队员 B 发现状态异常后可以直接通知队员 A 检查是否是由于网络断开触发的清理逻辑。多个代理在终端互相辩论,比单 Agent 盲目乱猜快数倍。
跨层级多模块新功能开发(Cross-Layer Coding):在开发一个完整的新特性时,通常需要同时修改数据库、编写后端 API、实现前端组件以及补全测试用例。这些任务之间存在微弱的依赖(接口契约),但又可以并行开发。
典型案例:为一个现有的应用集成 Chargebee 支付系统 或者是 Next.js 认证模块。
团队分工:
后端工程师(Backend Agent):负责定义 API 接口路由、编写业务逻辑及对接外部支付 Webhook。
前端工程师(Frontend Agent):负责在 UI 层编写支付按钮、表单和购买后的状态跳转。
测试工程师(QA Agent):编写端到端(E2E)浏览器自动化脚本(如 Playwright),负责整体链路的质量把控。
优势:通过“契约优先”模式,后端 Agent 设计好 JSON 格式后,直接利用 SendMessage 工具发消息给前端 Agent:“接口格式已定,你可以开始渲染了” 。期间如果 QA 发现前端改动跑不通,会自动把 bug 报告直接定向发给前端 Agent 进行重构,全自动化闭环。
代码库审计与大规模重构(Research and Review):面对一个庞大的旧代码库(Legacy Code),单个 Agent 的上下文窗口很快就会被密密麻麻的代码文件和依赖撑满,导致其 “顾此失彼” 引入新 Bug。Agent Teams 允许分配不同的代理各自镇守不同的文件目录,互相查缺补漏。
典型案例:将一个大型老旧项目的通用 API 模块从 REST 架构重构为 GraphQL 架构,或者进行全面的安全漏洞审计。
团队分工:
架构师(Lead):通读全局依赖,制定重构的总体技术路线图并维护任务列表。
安全审计员(Security Agent):不参与编写,专门以批判性视角审查其他队友修改的代码,寻找注入风险或越权漏洞。
重构实施员(Refactor Agent):分配具体的子目录(如 /controllers 或 /models),各司其职,避免同时修改同一个文件造成代码冲突。
优势:各自拥有独立的上下文,不仅防止了单个 Agent 的记忆模糊(Context Compression),还能在代码提交前由安全审计员进行内部 “Peer Review”,极大地保证了老代码重构的鲁棒性。
跨领域的业务资产自动化生成(Business Automation Pipeline):得益于 Claude Code 能够完美接入 MCP 服务(Model Context Protocol),Agent Teams 不仅能写代码,还能联动外部工具(如 Google Drive, GitHub, 搜索引擎)完成复杂的、需要多方对齐的商业工作流。
典型案例:输入一份销售客户调研电话(Discovery Call)的原始录音转文字文本,要求自动产出一整套面向该客户的销售资产。
团队分工:
分析师 Agent:提取原始文本中的痛点、预算、客户痛点等核心洞察(Insights)。
方案撰写 Agent:根据分析师提供的洞察,撰写一份定制化的商业项目建议书(Proposal)。
CRM 专员 Agent:负责调用数据库或 MCP 接口,更新企业的 CRM 系统状态。
文案 Agent:基于建议书,撰写一封语气恰当的客户跟进邮件(Follow-up Email)。
优势:方案撰写 Agent 觉得分析师提取的某个数据模糊时,可以直接发消息要求分析师去原文重新核对,确保整套资产(建议书、邮件、CRM)在逻辑和信息上达到高度的一致性,省去了人工反复黏贴对齐的麻烦。
核心决策:什么时候不该用 Agent Teams?在实际评估时,应当参考官方给出的黄金法则:需要相互讨论、质疑和自我协调的用 Agent Teams;只需要快速单向汇报的用 SubAgent。
禁止使用的场景:串行依赖极强的流水线任务(A 不做完 B 绝对无法开始)、需要高频频繁修改同一个文件的工作、或者一个人一句话就能改完的 Bug。这些场景用 Agent Teams 不仅会因为频繁的代码冲突导致死锁,还会让你的 Token 账单爆炸。
Codex 不支持 Agent Teams 。Codex 只能通过多个 SubAgent 来实现并行协作,而这些 SubAgent 之间无法通行(等价于 Claude Code 的多个 SubAgent 模式)。
Fan-out(扇出)批处理是指将一个大规模的复杂任务拆分为多个独立的子任务,并分发给多个并行的 AI SubAgent 同时执行的架构模式。它是 Claude Code 应对大规模代码重构、全库审计和多文件迁移的核心高阶能力。
核心工作原理:在 Claude Code 的动态工作流中,Fan-out 批处理通常遵循以下标准化执行流程:
任务拆分(Scout & Group):主代理接收用户指令(如 “将所有 React 组件迁移到 Vue”),先扫描代码库生成任务清单,并将文件或待修复点分组。
扇出并行(Fan-out Execution):利用内置的 /batch 命令或工作流引擎,瞬间派生出数个甚至数十个独立的 SubAgent。
沙盒隔离(Isolation):每个 SubAgent 都在独立的 Git Worktree 中运行。它们各自拥有独立的上下文视窗和分支,在互不干扰的环境中跑测试、改代码,彻底避免了文件冲突和上下文膨胀。
对抗验证与合并(Synthesis & Verify):各 SubAgent 完成修改并自测通过后,结果会交由专门的 “审查代理(Reviewer)” 进行对抗性验证,最终安全地合并回主干或生成独立的 PR。
常见的两种实现方式:
内置一键指令(内置开箱即用方案):在 Claude Code CLI 中直接组合或独立使用内置的批量处理 Skill:
/batch:最典型的 Fan-out 封装命令。自动将大任务扇出到几十个 worktree 中并行迁移。
/simplify:通常与 /batch 联合使用,批量清洗代码异味并强制执行 CLAUDE.md 中的规范。
/deep-research:内置的动态研究流,向外扇出大量网页搜索,交叉比对并消除错误网络 claim 后,输出带引用的总结报告。
由于 /simplify 和 /batch 会自动修改你的代码,在它们执行完毕后,强烈建议在终端运行 git diff 来亲自审查 AI 的修改再进行 commit。
自定义 CLI 脚本控制(高度灵活方案):开发者可以使用 shell 脚本配合 --bare(非交互模式,速度提升可达 10 倍)以及 --allowedTools 限制子代理的工具调用权限,实现自定义的并行扇出:
xxxxxxxxxx# 示例:通过 Shell 脚本并行处理文件for file in $(find src -name "*.js"); do claude -p "Refactor $file" --bare --allowedTools "Edit,Bash(git commit *)" & # & 实现后台并行donewait使用 Fan-out 的避坑指南
Token 成本与隔离:多代理并行会消耗大量 Token,且每个 SubAgent 独立运行,不建议在简单的日常任务中使用。
控制安全风险:使用自定义脚本时,建议使用 --allowedTools 严格限制 SubAgent 的操作权限,避免误操作。
先测试后全量:在进行大规模重构前,应先用 3-5 个文件进行测试,确认配置(如 CLAUDE.md)有效后再启动全量扇出任务。
核心 Fan-out 批量指令的具体使用方法与实战场景:
/batch:全库大规模迁移与并行重构。/batch 指令通过在后台自动创建多个隔离的 Git Worktree,调用并行的 SubAgent 同时处理不同目录或文件,专门用于大规模的代码迁移和规范落地。
用法:
xxxxxxxxxx/batch [具体迁移/重构指令] [目标路径]案例:
更换测试框架(如将 Jest 迁移至 Vitest):
xxxxxxxxxx/batch migrate src/ from Jest to Vitest更新模块规范(如将 CommonJS 转换为 ES Modules):
xxxxxxxxxx/batch convert src/ from CommonJS to ES modules批量修复特定漏洞:
xxxxxxxxxx/batch fix SQL injection vulnerabilities across all controllers//simplify:代码质量的 “全自动净化 pass”。/simplify 会自动检测你当前的 git diff(暂存或未暂存的修改),并同时启动 3 个专门的 AI 代理并行工作,检查是否符合项目根目录下的 CLAUDE.md 规范。
代理 1:扫描死代码、重复逻辑和未充分利用的公共工具。
代理 2:检查命名规范、可读性以及 CLAUDE.md 规则。
代理 3:优化性能瓶颈(如多余的循环、欠缺的并发等)。
用法:
xxxxxxxxxx/simplify [可选:聚焦的特定维度]案例:
全自动重构当前工作区(最常用,检查最近修改的文件):
xxxxxxxxxx/simplify定向优化内存效率:
xxxxxxxxxx/simplify focus on memory efficiency定向强化错误拦截与安全:
xxxxxxxxxx/simplify check for error handling gaps/deep-research:向外扇出的全网深度调研。当遇到复杂的依赖冲突、新技术栈评估或未知的 Bug 报错时,可以使用 /deep-research。它会向互联网 “扇出” 大量的并发检索请求,自行鉴别虚假信息并整合出带有权威链接的报告。
用法:
xxxxxxxxxx/deep-research [你需要调研的复杂课题]案例:
调研升级破坏性变更:
xxxxxxxxxx/deep-research What are the breaking changes when upgrading from Webpack 4 to Vite 6 in a monorepo?Codex 不支持 Fan-out 批处理能力,只能通过人工创建多个 SubAgent 来实现类似的功能。
Claude Code 提供了三种不同层级的定时机制,根据生命周期和运行环境进行划分:
| 工具名称 | 运行环境 | 生命周期 | 核心特点 |
|---|---|---|---|
/loop 指令 | 本地终端(CLI 当前会话) | 会话级。终端关闭或重启即失效 | 针对当前会话进行高频轮询、短时间监测、一键创建 |
Desktop 桌面定时任务 | Claude Desktop 客户端(Cowork) | 持久化。只要电脑开机且应用打开就一直有效 | 可直接读写本地文件,结合 UI 可视化管理 |
Cloud Routines (云端常驻) | Anthropic 托管云端基础设施 | 永久有效。关闭电脑也照常运行 | 依赖 GitHub 等云端 MCP 连接器,实现 24/7 纯全自动工作流 |
/loop 指令:这是嵌入在 Claude Code CLI 终端内的 “即时自动化” 工具。它的本质是让 Claude 在你当前的终端会话中,按照指定频率重复执行某项任务,或者在未来某个时间点提醒你。
配置方法与命令语法:你无需编写复杂的配置文件,直接在 Claude Code 的 CLI 交互界面中输入自然语言或斜杠命令:
单次延迟任务(Remind):
xxxxxxxxxx"remind me in 10 minutes to check the server logs"
循环定时任务(Loop/Cron):
xxxxxxxxxx/loop "每隔5分钟检查一次本地 src/ 目录是否有新增的报错信息,并将其追加到 error.log 中"
使用标准 Cron 表达式:
xxxxxxxxxx/loop "0 * * * *" "运行 npm test,如果失败,请通知我"
无提示词的内置维护(配合 loop.md):如果你直接输入 /loop,Claude 会在项目根目录下寻找 loop.md(如有),并按照文件内的提示词运行。Claude 会优先寻找项目根目录下的 .claude/loop.md(或全局用户目录下的相应文件)。
在编写 /loop 的任务描述时,由于它是基于你当前所处的本地代码库目录,你可以直接让它执行本地命令。
xxxxxxxxxx【任务描述】每隔 15 分钟,执行一次命令 `git status` 和 `npm run lint`。
【执行逻辑】1. 如果 `npm run lint` 报错,请分析报错文件。2. 自动尝试修复 Lint 错误。3. 修复成功后,将修改的代码 commit 到名为 `claude/fix-lint` 的本地分支,不要直接 push。典型应用场景:
重构代码:当你正在重构一个复杂模块时,开启一个每 3 分钟运行一次单元测试的 /loop,让 Claude 实时帮你盯着有没有改坏代码。
本地日志监控:监控本地正在运行的后端服务日志,一旦发现特定 Error 立即中断并弹窗提示你。
Desktop 桌面定时任务 (持久化):该工具集成在 Claude Desktop 客户端中(通常与 Cowork 协同功能配合)。它不需要你一直开着终端窗口,只要你的电脑处于开机状态、Claude Desktop 在后台运行,它就会像系统的计划任务(Task Scheduler / Launchd)一样定时唤醒。
配置方法与操作步骤:
打开 Claude Desktop,进入侧边栏的 Schedule (计划任务) 面板。
点击 New Task 创建新任务。
配置参数:
Task Name:任务名称(如:每日代码审查)。
Trigger / Frequency:选择执行频率(如:Every Day at 9:00 AM)。
Working Directory:绑定本地的项目绝对路径(如 /Users/username/projects/my-app)。
System Prompt / Instructions:赋予 Claude 的定时任务角色与核心提示词。
内容/提示词编写模板:由于桌面定时任务通常执行时间较长,提示词需要更加结构化和严密,必须包含输入、处理逻辑、输出路径:
xxxxxxxxxx# 角色你是一个资深的代码安全审计专家。
# 触发条件每天运行一次。
# 步骤1. 进入当前绑定的工作目录,读取过去 24 小时内修改过的所有 `.ts` 和 `.js` 文件。2. 检查代码中是否存在硬编码的 API 密钥、密码、或者潜在的 SQL 注入风险。3. 如果发现风险,在项目根目录下创建或追加写入 `SECURITY_REPORT.md`。
# 输出格式请使用 Markdown 表格列出:文件路径、风险等级(高/中/低)、代码片段、修改建议。典型应用场景:
每日工作技术债审计:每天早上在你上班前,Claude 自动扫描前一天团队提交的代码,生成一份技术债和重构建议报告。
本地文档同步与维护:定期读取代码中的注释,自动更新项目根目录下的 API.md 说明文档。
Cloud Routines (云端常驻):这是最高级别的自动化工具。它由 Anthropic 的云端基础设施托管,完全脱离你的本地电脑。即使你关机、断网、去度假,云端的 Claude 也会按照 Cron 设定的时间准时在云端容器中运行。它主要通过 MCP(Model Context Protocol) 连接器与外部云端服务(如 GitHub、Slack、Linear)进行交互。
配置方法与管理方式:你需要在本地通过 CLI 授权,或者在云端管理面板中将你的代码仓库与 Claude Cloud 绑定:
命令行初始化:
xxxxxxxxxx/schedule create --name "daily-issue-triage" --cron "0 18 * * 1-5"
权限绑定:系统会提示你绑定 GitHub App 授权,允许云端 Claude 访问指定的 Repo,以及绑定 Slack MCP 连接器 用于发送通知。
内容/提示词编写模板:云端任务无法直接读取你的本地硬盘,因此提示词必须明确指定远程数据源(如 GitHub 仓库地址) 和 远程输出渠道:
xxxxxxxxxx# 运行环境GitHub 仓库: https://github.com/<owner>/<repo>分支: main
# 核心任务处理开源仓库中所有新打开的 Issues。
# 详细指令1. 每天下午 6 点,调用 GitHub MCP 插件,拉取过去 24 小时内新创建且未被回复的 Issues。2. 针对每一个 Issue,分析其报错描述。如果是 Bug Report,尝试在云端环境中理解该逻辑。3. 调用 GitHub MCP,自动给该 Issue 回复一条建议(注明由 Claude Routine 自动生成),并根据内容打上标签(如 `bug`, `enhancement`, `question`)。4. 如果遇到严重安全漏洞的 Issue,通过 Slack MCP 插件向 `#security-alerts` 频道发送高能预警。典型应用场景:
开源社区全天候值守:自动分类、打标签、初步回复 GitHub Issues 或 PR。
自动化周报/日报:每周五晚上,自动拉取 GitHub 的 Commit 记录和 Jira/Linear 的任务完成状态,总结成排版精美的周报,通过邮件或 Slack 发送给管理层。
多系统数据同步:定期检查 Notion 里的产品需求,并在 GitHub 中自动创建对应的待办任务(Task Issues)。
Claude Code 还提供了 /goal 指令,它将会话从传统的 “一问一答” 模式转变为完全自主的 “目标导向” 智能体模式。
简单来说,你只需要给它设定一个可验证的终点线(完成条件),Claude 就会不知疲倦地自己运行、测试、修改并不断循环,直到达成目标或耗尽预算,全程无需你手动输入 “继续”。
工作原理:/goal 的底层是一个自动化评估循环:
执行者(Worker Model):主模型(通常是 Sonnet 或 Opus)负责读取文件、编写代码、运行 Bash 命令以及调用各种工具来执行任务。
裁判官(Verifier Model):每一轮工作结束后,一个独立的、轻量快速的模型(默认是 Haiku)会介入并阅读当前的会话记录。
判定逻辑:
未达成:裁判官会给出一个简短的失败原因。这个原因会作为下一轮的指令直接喂给主模型,Claude 随即自动开启新一轮,完全不需要人工干预。
已达成:目标自动清除,控制权返回给你。
语法:
/goal <完成条件>:启动或替换当前会话的活跃目标,输入后会立即开始第一轮,条件本身即是指令。
也可以在单次 CLI 调用中让其后台循环跑到底。例如:
xxxxxxxxxxclaude -p "/goal CHANGELOG.md has an entry for every PR merged this week"/goal(不带参数):显示当前目标的实时状态面板,包括:
/goal active 悬浮指示器。
已运行的持续时间、当前轮次计数以及 Token 消耗量。
裁判官上一次判定不通过的具体原因。
/goal clear:手动强制终止并清除当前目标。(别名:stop, off, cancel)。
/clear:重置会话,会同时清空活跃目标。
编写指南:裁判官只能通过阅读会话记录来判断输赢,它自己不会去运行命令或查看文件。因此,你的目标必须是可以在终端输出中被显式验证的。例如:
xxxxxxxxxx/goal 运行 pnpm test 并且所有测试通过,同时运行 lint 检查无任何报错。不要修改测试文件本身。
在编写复杂的长任务目标时(支持最高 4000 字符),建议遵循以下 “目标契约框架”:
GOAL(明确目标):要达成的核心结果。
CONTEXT(上下文):涉及哪些模块或文件。
CONSTRAINTS(硬性约束):绝对不能修改什么、不能硬编码什么。
DONE WHEN(判定线):可验证的结束状态(如:exit code 0)。
避坑指南与核心限制:
单会话单目标:一个会话同时只能激活一个 goal,新 goal会直接覆盖旧 goal。
会话中断可恢复:如果你关闭了终端,之后使用 --resume 或 --continue 恢复会话,未完成的 goal 会被恢复(但计时器和轮次会重置)。
自动审批(Auto-Approve)陷阱:因为 Claude 在过程中会频繁使用读写文件、执行 Bash 等工具,为了实现真正的“双手离开键盘”,你需要确保相关的自动审批权限已开启(或者在安全隔离的目录中运行),否则每跑一步它还是会停下来问你“是否允许执行命令”。
无论是 /loop 还是 /goal,长时间无人看管的自主循环都会极快地消耗 API Token。强烈建议在输入指令时,加上类似 Stop after 10 turns(10轮内停止)的安全阀门,以防 AI 陷入死循环死磕某一个无法解决的 bug。
Codex CLI 本身没有内置的 /loop 或定时任务系统,用户只能通过人工构造类似的定时任务。例如本地定时任务(cron):
xxxxxxxxxx# crontab -e# 每天早上 9 点生成日报0 9 * * * CODEX_API_KEY=<key> codex exec \ --sandbox read-only \ "分析昨天的 git log,生成开发日报" \ --output-last-message /reports/daily-$(date +\%Y\%m\%d).md在 Codex 中,/goal 被定义为一个长周期的、持久化的工作流契约。
核心设计:数据库级持久化。Codex 的核心工程亮点在于,它把 /goal 存成了本地 app-server 状态层里的一条数据库记录。
断点续传:这意味着它是完全脱离终端生命周期的。即使你合上笔记本电脑、关闭终端、甚至重置系统,这个目标依然挂载在当前 Thread上。下次打开 Codex,它会读取 thread/goal/get 自动接上断点继续跑。
软着陆机制:当 Token 预算或时间耗尽时,Codex 不会硬性崩溃,而是通过内置的限制模板(budget-limit template)引导模型进行 “收尾(wrap up)”,保存好当前的中间成果并优雅退出。
语法:通过 config.toml 开启 goals = true 后,主要通过以下精简的斜杠命令来控制 goal:
/goal <objective>:设定全局目标并激活。
/goal:直接输入可查看当前目标的持久化状态。
/goal pause / /goal resume:中途暂停与恢复(支持跨越数小时的睡眠后恢复)。
/goal clear:清除当前目标。
编写指南:一个能稳健跑起来的强 goal,通常建议在 Prompt 中定义以下 6 个维度:
预期结果 (Outcome):工作完成时必须达到的定量或极其具体的状态。
验证手段 (Verification Surface):Codex 用来证明自己做对的测试、脚本、命令或基准测试。
核心制约 (Constraints):在推进目标期间,绝对不能退化或破坏的已有指标、依赖或功能。
操作边界 (Boundaries):明确授权 Codex 可以访问或修改哪些目录、文件、工具或数据。
迭代策略 (Iteration Policy):指导 Codex 每次尝试失败或遇到报错后,下一步优先尝试什么。
阻塞停止条件 (Blocked Stop Condition):在何种限制或无法突破的瓶颈下,Codex 必须立刻停止并向你报告。
示例模版:
xxxxxxxxxx/goal [这里写期望达到的最终状态/定量指标],验证方法:通过执行 [具体的测试脚本、命令或 benchmark] 验证其成功。核心约束:保持 [哪些功能或性能] 不发生任何退化,不得添加任何新的第三方依赖。操作边界:仅允许使用 [哪些工具/修改哪些特定文件/目录]。迭代策略:若遇到报错,优先检查 [某种特定的配置/日志],并尝试 [某种特定的修复思路]。阻塞条件:如果连续尝试 [X] 次仍无法通过编译,或发现 [某种严重阻碍],请立刻暂停并报告当前限制。避坑指南与核心限制:
单会话单目标:一个会话同时只能激活一个 goal,新 goal会直接覆盖旧 goal。
虽然旧的目标在逻辑上被清除了,但前一个目标在执行过程中产生的 Git Diff、报错日志和修改历史,依然残留在当前会话的上下文窗口中。因此,必须用 /goal clear 进行手动清除。
会话中断可恢复:如果你关闭了终端,之后使用 --resume 恢复会话,未完成的 goal 会被恢复。但它默认会处于 “暂停” 状态,需要你手动或通过特定参数来重新激活它的自循环引擎。
核心编写原则:
描述最终结果,而非具体步骤:告诉 Claude Code / Codex 最终的目标(如:”为公共 API 添加限流功能,并确保既有测试通过”),让其自主去检索文件和设计方案,不要生硬地指挥它一步步操作。
前置关键指令,明确任务框架:将最重要的要求或限制条件放在 Prompt 的最顶部(Front-Load),并在首次对话时就设定好行为框架。
多说 ”要做什么”,少说”不要做什么”:正面引导的效率远高于否定句式。例如:用 “输出清晰流畅的段落” 代替 “不要在回复中使用 Markdown”。
使用精准、非侵略性的语气(适用于 Claude Code ):避免使用情绪化的命令式字眼(如 “必须立刻”、”永远不要”),这反而会触发 Claude Code 复杂的内置系统提示词防御,导致过度调用工具或表现失常。像对待一名高能力的 “技术实习生” 一样给予清晰合理的指引。
给出明确的停止条件:停止条件可验证从而提高效率。例如,”通过 xyz 测试就结束”、“仅仅修改 abc 文件”。
任务与文件管理:
提供明确的验证手段:在 Prompt 中包含运行、测试或对比的命令(如:“编写迁移脚本,在开发数据库运行,并确认 Schema 一致”)。这是让 Claude Code / Code 能够自我迭代、减少幻觉的关键。
明确强制“先探索、再计划、后编码”:为了防止 Claude Code / Codex 盲目自信而直接修改错误的文件,应在 Prompt 中显式加入:“在提出代码修改建议前,必须使用阅读工具检查相关文件,严禁凭空推测”。
指向既有参考源:让其模仿项目中已有的规范(如:“添加一个设置页面,布局和样式参考已有的 profile.tsx”),能有效保持代码风格的一致性。
设定可量化的完成指标:如果涉及重构或优化,给出具体的度量单位(如:“将打包体积控制在 200KB 以下,并向我展示你删除了哪些依赖”)。
具体化任务:描述任务需求越详细越好。例如,不要简单地说:实现一个 “登录功能”;而是说:在 xxx/ 目录下新增 XXX 登录功能,用 YYY 库来实现。
例如,给出具体的文件名、行号、函数名、期望行为。越具体越好。
描述错误的症状而不要猜测原因:遇到 error 时,直接把报错的结果全部粘贴过去,让 Claude Code 自己分析原因。
一次只做一件事:对于大的任务要分解成小步;每一步只做一件事,并且一件事做好之后确认结果再执行下一步。
上下文与项目级沉淀:
编写和维护 CLAUDE.md / AGENTS.md:这是 Claude Code / Codex 的核心项目配置文件。在其中写明项目的技术栈、build/test/Lint 命令、代码风格指南等,这样你就无需在每次输入 Prompt 时重复这些背景。
将高频 Prompt 固化为 Skills:如果你发现自己在重复输入某类复杂指令,应利用系统的自定义能力,将其打包成 Skills(技能) 或自定义 SubAgent,实现 procedural(程序化)的知识复用。
结构化长输入:当不得不编写复杂的指令时,采用由 INSTRUCTIONS、CONTEXT、TASK、OUTPUT FORMAT 组成的 4-Block(四块)结构,或者使用 XML 标签(如 <constraints>)进行物理隔离,这能提升 20%~40% 的输出一致性。
或者:
xxxxxxxxxx## 背景<项目简介、技术栈、当前状态>
## 目标<期望达成的结果>
## 约束<不能动的文件、性能要求、兼容性限制>
## 验收标准<如何判断任务完成:测试通过、功能可用、文档更新>.
流程:
step 1:让 Claude Code / Codex 像产品经理一样采访你,询问你关于产品的细节。当你回答完这些问题之后,让 Claude Code / Codex 把结论整理为一份规格文档(SPEC.md)。整个项目就围绕这个 SPEC.md 展开。
step 2:开启一个新的 session,根据 SPEC.md 对项目进行初始化,然后自动生成并配置 CLAUDE.md / AGENTS.md。
step 3:开启一个新的 session,先用 plan 模式让 Claude Code / Codex 给出完整的技术方案。在这个过程中,你可以提出疑问、调整方案。一旦方案确认之后,让 Claude Code / Codex 开始实现。每次完成一个模块之后,做一次验证。不要让 Claude Code / Codex 完成所有代码之后再验证。
step 4:先完成核心功能,再完善一些细节(例如,UI 美化等等)。
经验总结:
将需求拆分为最小可验证的步骤。每次完成一个步骤,验证它没问题之后再进行下一个步骤。
先做一个能跑通的最简化的版本,然后再丰富它的功能。
每次完成一个功能模块时,立即测试它。
每个 session 专注于做一件事情。
AI 给出技术方案,而由你来做决策。不要让 AI 自己做决策。
在 CLAUDE.md / AGENTS.md 中列出所有的环境变量,部署时用 checklist 确认。否则很可能在本地能跑通,但是部署到线上时无法执行。
重要的规则必须写进 CLAUDE.md / AGENTS.md,不要只在对话里讲;因为对话可能会被压缩,导致对话中提到的规则会被遗忘。
任何涉及具体数据、日期、价格、产品特性的内容,必须要用 WebSearch 验证。
Token 成本:
用 /cost 和 /context (Claude Code)、或者 /usage (Codex)定期检查 Token 消耗。
不用的 MCP 服务器要及时关掉从而释放上下文空间。
大任务拆分为小的 session,更省钱也更稳定。
Agent Teams (适用于 Claude Code)只有在真正需要并行的时候使用。
大多数最佳实践都基于一个限制:Claude Code / Codex 的上下文窗口会迅速填满,并且随着填满,性能会下降。
Claude Code / Codex 的上下文窗口包含你的整个对话,包括每条消息、Claude Code / Codex 读取的每个文件以及每个命令输出。然而,上下文窗口会很快填满。一次 Debug 会话或代码库探索可能会生成并消耗数万个 tokens。
这一点至关重要,因为 LLM 的性能会随着上下文的填满而下降。当上下文窗口接近填满时,Claude Code / Codex 可能会开始”忘记”之前的指令或犯更多错误。
常见误区:
任务与会话管理不当:
单会话堆积多任务,上下文满载才压缩,导致模型 "健忘"、输出质量下降。
任务描述模糊,不明确边界、约束与验收标准,最终结果偏离预期。
不沉淀标准化 Skill,每次从零推理,输出不稳定且重复消耗 Token。
依赖模型内置知识,不主动查阅最新官方文档,易生成过时代码。
在一个跑偏的会话上反复纠正 Claude Code / Codex,导致结果越来越偏离预期。此时要推倒重来。
碎片化零散提问,不引导系统排查,缺乏完整推理链路。
沿用聊天式 AI 习惯,手动粘贴代码片段,不利用其直接访问项目的能力。
项目配置缺失:
不配置 CLAUDE.md / AGENTS.md,每次重复交代技术栈与规范,沟通成本高。
CLAUDE.md / AGENTS.md 内容过长过杂,稀释核心约束,降低规则遵从度。
不配置 .claudeignore (适用于 Claude Code),无效文件占用上下文、干扰模型判断。
质量与安全意识不足:
生成代码不审查直接投产,忽略边界处理、类型安全与安全漏洞。
轻信"任务完成"结论,不运行测试、不核对改动范围,易出现隐性失败。
不做权限约束,放任模型随意修改文件、执行命令,存在项目风险。