Appearance
两个工具都在宣传"可扩展",但它们做的根本不是同一件事。
两种"可扩展"
| 类型 | 说明 |
|---|---|
| 封闭体系里打补丁 | 工具提供完整功能,扩展只能在开放的接口里操作 |
| Harness定位 | 核心尽量精简,更多能力交给第三方生态 |
Claude Code走第一条路,Codex走第二条路。
Claude Code的扩展系统
三层结构
| 来源 | 说明 |
|---|---|
| Bundled Skills | 编译进CLI二进制,用户无法修改 |
| User/Project Skills | ~/.claude/skills/或.claude/skills/下的SKILL.md,用户完全可控 |
| Managed Skills | 企业通过MDM/组策略下发,优先级最高 |
Feature Flag门控
Bundled Skills里部分技能被feature flag门控,启动时按条件注册。用户永远无法通过配置文件打开Anthropic没有开放的技能。
最小权限
每个内置技能在注册时声明allowedTools,技能的工具边界在注册时就定死了。
四源配置合并
userSettings → projectSettings → localSettings → policySettings(最高)企业级设计:MDM可以强制下发策略。
Codex的扩展系统
从Rust到Markdown
核心实现是Rust,但技能本身是Markdown。系统技能部署在~/.codex/skills/.system/目录下,用户可以直接读,也可以拿来当模板。
渐进式披露
"The context window is a public good."
技能内容分三个层次加载:
| Level | 内容 | Token | 何时加载 |
|---|---|---|---|
| Level 1 | YAML frontmatter(name/description) | ~100 | 始终在context |
| Level 2 | SKILL.md正文(工作流/规则/示例) | ~5000 | 技能触发时 |
| Level 3 | scripts/references/assets/ | 视情况 | 按需加载 |
Agent YAML
agents/openai.yaml是纯UI层配置,只管展示,不参与AI决策。没有allowedTools,没有权限声明。
技能目录结构
skill-name/
├── SKILL.md # 必需
├── agents/openai.yaml # 推荐
├── scripts/ # 可选
├── references/ # 可选
└── assets/ # 可选没有"内置"和"用户"的二元区分,系统技能、用户自建技能、第三方技能全部遵循同样格式。
核心对比
| 维度 | Claude Code | Codex |
|---|---|---|
| 技能存储 | Bundled(二进制)+ SKILL.md | SKILL.md,部署到文件系统 |
| 系统技能可见性 | 不可见 | 可读可参考 |
| 第三方扩展 | Marketplace审核 | 目录即可,无审核 |
| 权限控制 | allowedTools硬编码 | 模型判断 |
| Feature Flag | 有,Anthropic控制 | 无 |
| 企业支持 | MDM/组策略/Managed Skills | 暂无 |
这对你意味着什么
| 场景 | 推荐 |
|---|---|
| 企业环境/需要安全审计 | Claude Code |
| 想深度定制/参考系统技能 | Codex |
| 团队共享AI工具配置 | Claude Code(.claude/settings.json提交git) |
根本问题
AI工具的边界应该由谁来定义?
- 相信工具厂商比你更懂 → Claude Code封闭生态
- 工具应该尽可能少干涉用户决策 → Codex Harness哲学
📖 Claude Code文档:docs.anthropic.com/en/docs/claude-code 📦 Codex:github.com/openai/codex
