Codex CLI 是命令行客户端,Skills(技能) 是可复用的能力包,用于扩展代理的任务处理逻辑;沙箱(Sandbox) 是安全隔离执行环境,用来限制文件读写、命令执行、MCP调用权限。二者搭配,在终端交互、非交互自动化场景下,安全加载并运行各类预置或自定义技能。本文讲解技能加载、沙箱模式、配置、实操示例与安全规范。
一、Codex CLI Skills 概述
Skills 是一组封装好的指令、工具集、MCP配置、任务模板的集合,可一键导入Codex会话,避免重复编写提示词与工具配置。技能可分为官方内置技能与用户自定义技能。
1.1 技能分类
- 内置技能:Codex原生自带,无需额外安装,例如代码评审、单元测试生成、重构、文档生成。
- 自定义技能:用户编写的技能包,以文件夹形式存放,包含技能描述、MCP引用、规则、钩子配置,可纳入Git仓库团队共享。
1.2 技能加载方式
方式1:会话内动态加载(交互模式)
# 启动codex交互会话
codex
# 斜杆命令加载技能
/skills load code-review
方式2:配置文件永久加载(config.toml)
[skills]
enable = ["code-review", "test-generator"]
# 加载自定义本地技能包路径
custom_skill_paths = ["./.codex/skills/"]
方式3:非交互模式单次临时加载
codex exec --skills "code-review" "评审当前git变更"
1.3 技能管理命令
# 列出所有可用技能 /skills list查看指定技能详情 /skills info code-review 重载技能配置 /skills reload 卸载技能/skills unload test-generator
注意:技能加载后,会合并指令到当前代理上下文;多个技能同时加载时,若存在冲突规则,项目AGENTS.md与rules.toml优先级高于技能内定义。
二、Codex 沙箱(Sandbox)机制
沙箱是Codex CLI的安全隔离层,用于约束技能、子代理、工具调用的操作边界,防止误操作删除文件、执行高危命令、访问未授权MCP服务。沙箱分为三种预设模式,和前文系列文档保持一致。
2.1 三种沙箱模式
| 模式 | 权限说明 | 适用场景 |
|---|---|---|
read-only | 仅读取文件,禁止修改文件、执行shell命令 | 代码审计、文档阅读、PR评审 |
workspace-write | 允许读写当前工作目录文件;禁止系统级高危命令 | 本地开发、代码重构、生成测试文件 |
danger-full-access | 完整系统权限,可执行任意shell命令、访问全部MCP | 仅隔离容器环境,生产环境慎用 |
2.2 沙箱配置位置
- 全局默认沙箱:
~/.codex/config.toml - 项目级沙箱:
.codex/config.toml,优先级更高 - 技能单独指定沙箱:技能包内可定义本技能使用的沙箱,加载技能时自动切换
- 子代理独立沙箱:子代理toml配置可单独设置沙箱,和主代理隔离
项目配置示例:
[sandbox]
default_mode = "workspace-write"
# 额外禁止路径
block_paths = ["/etc", "/usr/bin", ".env"]
2.3 沙箱生效范围
沙箱会同时约束:
- CLI内置工具(文件读写、bash执行)
- 加载的Skills技能包
- 派生的子代理
- MCP服务调用权限
- 钩子脚本执行权限
沙箱拦截行为:当技能尝试执行超出权限的操作,Codex直接阻断并返回安全告警,不会执行操作。
三、Skills、沙箱协同逻辑
- Codex CLI启动,读取项目配置,设置默认沙箱。
- 加载指定Skills,技能自带工具、指令、可选沙箱覆盖规则。
- 代理执行任务,所有工具调用都经过沙箱校验。
- 若技能配置独立沙箱,会临时覆盖会话默认沙箱;技能执行结束,恢复原有沙箱。
- rules.toml硬规则在沙箱校验之后二次校验,形成双层防护。
双层安全:沙箱控制基础权限,rules.toml定义细粒度黑名单。
四、实操完整示例
示例1:交互模式加载代码评审技能,read-only沙箱
# 进入codex交互会话
codex
# 切换沙箱为只读
/sandbox set read-only
# 加载代码评审技能
/skills load code-review
# 执行评审任务
评审当前项目src目录代码,列出安全隐患与规范问题
示例2:非交互模式,加载技能+指定沙箱(CI流水线推荐)
codex exec \
--skills code-review \
--sandbox read-only \
--quiet \
"评审git diff变更,输出markdown问题清单"
示例3:自定义技能包目录结构
自定义技能放在项目 .codex/skills/,例如 auto-test 技能:
.codex/skills/auto-test/
├─ skill.json # 技能元信息,名称、描述、默认沙箱
├─ instructions.md # 技能系统提示词
├─ mcp.toml # 技能附带MCP服务配置
└─ rules.toml # 技能局部规则
skill.json 示例
{
"name": "auto-test",
"description": "自动生成单元测试",
"default_sandbox": "workspace-write"
}
示例4:限制技能可访问MCP服务
在config.toml中配置,限制加载的技能只能访问指定MCP服务
[skills.security]
mcp_allowlist = ["git", "db"]
block_unknown_mcp = true
五、安全最佳实践
- 技能最小权限原则:代码评审类技能固定使用
read-only;代码生成使用workspace-write。 - 不使用来源不明的第三方技能包,外部技能加载前人工审查内部指令与MCP配置。
- 技能自带的
danger-full-access沙箱,在本地开发环境默认禁止加载。 - 非交互自动化任务,技能和沙箱参数在命令行显式声明,便于审计。
- 技能内的规则仅作为业务指引,高危防护仍然依靠项目
rules.toml。 - 多技能组合使用时,避免多个技能同时修改同一份文件,防止冲突。
六、常见问题
Q:加载技能之后沙箱会自动改变吗?
A:如果技能包定义了default_sandbox,加载时会临时切换;任务结束恢复会话原有沙箱,也可以手动锁定沙箱不允许技能修改。
Q:技能是否在非交互模式codex exec中可用?
A:完全支持,--skills参数可以加载技能,沙箱配置同样生效。
Q:沙箱是否可以单独对子代理生效?
A:可以,子代理配置文件可单独定义沙箱,不受主会话沙箱影响。
Q:技能里的MCP配置会覆盖项目MCP吗?
A:不会,技能MCP仅追加,同名MCP服务项目配置优先级更高。
七、总结
Codex CLI的Skills是可复用的任务能力包,内置或自定义技能可以快速扩展代理功能;沙箱是底层安全隔离机制,用来限制文件读写、命令执行和MCP访问权限。
在CLI交互与非交互场景,可按需加载技能,搭配对应的沙箱模式,配合rules.toml、AGENTS.md、MCP、子代理,构建安全可复用的自动化开发能力。技能适合封装重复工作流,沙箱保障操作边界,二者结合是Codex CLI自动化的核心能力。
0 条笔记