Refinex DevHubRefinex DevHub
DocsBlogProjectsSitesChangelogAbout
Assistant
你好,我可以基于当前页面内容回答问题、提炼重点,或者告诉你下一步应该继续读什么。
  1. Docs›
  2. Agent Skills 深度指南
Overview
Codex 全景:产品矩阵、模型演进与定价
安装与首次运行:5 分钟从零到第一次对话
核心概念精讲:Prompting、Sandboxing 与 Approval
Codex CLI 深度指南:终端中的编码智能体
Codex App 深度指南:多智能体的指挥中心
IDE Extension 深度指南:编辑器内的 AI 搭档
Codex Web/Cloud:云端异步任务与环境配置
AGENTS.md:让 Codex 真正理解你的项目
config.toml 深度配置指南
MCP 集成深度指南
Agent Skills 深度指南
Subagents:多智能体并行工作流
集成:GitHub、Slack、Linear
自动化与程序化控制:Non-interactive、SDK、App Server
Codex Security:仓库安全扫描与威胁建模
企业部署与团队治理
Prompting 高级指南:从 Cookbook 到实战模式
终极实战:构建 AI 编码团队
  1. Docs›
  2. Agent Skills 深度指南

Agent Skills 深度指南

本文定位

从 Skill 机制原理到自定义 Skill 实战的完整指南。前半部分讲「怎么运作」,后半部分讲「怎么写」和「怎么用」。所有规范均来自 Agent Skills 官方文档、openai/skills 仓库 与 Customization 文档。

一、什么是 Agent Skills

Skills 是 Codex 的可扩展能力模块。每个 Skill 是一个包含 SKILL.md 指令文件及可选脚本/参考资料的目录,Codex 在需要时自动加载并执行。Skills 构建在 开放 Agent Skills 标准 之上,可在 Codex CLI、IDE Extension 和 Codex App 中使用。

一句话理解

AGENTS.md 塑造行为规范,Skills 打包可复用流程,MCP 连接外部系统。三者互补,不是竞争关系。

Skill vs MCP vs AGENTS.md

维度Agent SkillMCP ServerAGENTS.md
本质指令 + 脚本包(文件目录)长驻进程 / 远程服务持久化项目指令文件
上下文开销低(渐进加载,按需读取)高(tool schema 常驻上下文)中(启动时全量加载)
触发方式显式 $skill 或隐式匹配 description模型根据 tool schema 自动选择每次会话自动生效
适用场景可复用工作流、领域知识、最佳实践外部 API 调用、实时数据获取项目规范、编码约定、构建命令
作用范围按需激活,任务匹配时生效全局常驻,所有任务可用全局常驻,所有任务可用

二、渐进式上下文加载机制

这是 Skills 与 MCP 最本质的区别。理解这个机制是写好 Skill 的前提。

2.1 三级加载流程

Mermaid
正在渲染 Mermaid 图表…
加载级别加载内容触发条件上下文开销
Level 0name • description • 文件路径 + agents/openai.yaml 中的元数据Codex 启动时自动加载所有 Skill极低(约 100-200 token/Skill)
Level 1完整 SKILL.md 指令内容用户显式调用 $skill 或 Codex 隐式匹配 description中(取决于 SKILL.md 长度)
Level 2references/ 文档 + scripts/ 脚本SKILL.md 中引用了具体文件,且执行到需要的步骤高(按文件大小计算)
关键启示

因为只有 Level 0 常驻上下文,所以安装大量 Skills 不会像 MCP 那样拖慢性能。但每个 Skill 的 description 质量直接决定了隐式匹配的准确性——它是 Level 0 中唯一携带语义信息的字段。

2.2 对 Skill 编写的指导意义

  • SKILL.md 要精炼: 控制在 500 行以内,详细内容放 references/。Level 1 加载时 SKILL.md 会全量进入上下文
  • references/ 要按需: 大文件拆分为小文件,SKILL.md 中用 "详见 references/xxx.md" 引导按需加载
  • description 要精准: 写清楚「何时应该用」和「何时不应该用」,这是隐式匹配的唯一依据

三、Skill 目录结构规范

3.1 完整结构

Text
my-skill/
├── SKILL.md                    # 必需:指令 + 元数据(frontmatter)
├── agents/
│   └── openai.yaml             # 推荐:UI 元数据、策略、MCP 依赖声明
├── scripts/                    # 可选:可执行脚本
│   ├── setup.sh
│   ├── validate.py
│   └── cleanup.sh
├── references/                 # 可选:参考文档
│   ├── api-guide.md
│   ├── architecture.md
│   └── examples.md
├── assets/                     # 可选:模板、资源文件
│   └── template.yaml
└── LICENSE.txt                 # 推荐:许可证

3.2 SKILL.md 元数据规范

SKILL.md 是 Skill 的核心文件,由 YAML frontmatter + Markdown 正文组成:

Markdown
---
name: spring-boot-service
description: >
  Create and scaffold Spring Boot 3.x microservice modules for Refinex-Cloud.
  Use when the user asks to create a new service, add a new module, or scaffold
  a Spring Boot project. Do NOT use for frontend tasks or non-Java projects.
---
​
# Spring Boot Service Scaffolding
​
## 前置检查
1. 确认项目根目录存在 `pom.xml`(Maven 多模块项目)
2. 确认 Java 版本 ≥ 21
​
## 工作流
1. 从模板生成模块目录结构
2. 配置 `pom.xml` 继承父工程
3. 生成标准化的 Application 启动类
4. 生成 bootstrap.yml + application.yml
5. 添加到父工程 modules 列表
​
## 参考资料
- 模块结构规范:见 `references/module-structure.md`
- POM 配置模板:见 `references/pom-template.md`

Frontmatter 字段说明:

字段必需说明
name✅ 必填Skill 的唯一标识名。建议用 kebab-case,如 spring-boot-service。如果两个 Skill 同名,Codex 不会合并,两者都会出现在选择器中
description✅ 必填Skill 的功能描述。这是隐式触发的唯一依据。必须写清楚:① 做什么 ② 何时应该触发 ③ 何时不应该触发。建议 2-4 句话
Warning

description 是最重要的字段。 Codex 在 Level 0 只读取 name + description 来决定是否激活 Skill。一个模糊的 description(如 "帮助开发")会导致误触发或漏触发。请写清楚正向和反向边界。

3.3 agents/openai.yaml 配置

这是 Skill 的可选元数据文件,控制 UI 展示、触发策略和 MCP 依赖:

YAML
# agents/openai.yaml — 完整字段参考
​
# === UI 元数据(Codex App 中展示) ===
interface:
  display_name: "Spring Boot Service"                # 用户可见的展示名
  short_description: "Scaffold Spring Boot modules"  # 简短描述
  icon_small: "./assets/spring-small.svg"            # 小图标
  icon_large: "./assets/spring-large.png"            # 大图标
  brand_color: "#6DB33F"                             # 品牌色(十六进制)
  default_prompt: "创建一个新的 Spring Boot 微服务模块"  # 默认提示语
​
# === 触发策略 ===
policy:
  allow_implicit_invocation: true  # 默认 true,设为 false 则只能显式 $skill 调用
​
# === MCP 依赖声明 ===
dependencies:
  tools:
    - type: "mcp"
      value: "github"                        # 对应 config.toml 中的 mcp_servers 名称
      description: "GitHub MCP server"
      transport: "streamable_http"
      url: "https://api.githubcopilot.com/mcp/"

各段详解:

配置段说明
interface控制 Skill 在 Codex App 中的 UI 展示。CLI 用户可忽略。default_prompt 会作为 Skill 的默认使用提示
policy.allow_implicit_invocation默认 true。设为 false 时,Codex 不会根据任务描述自动选择该 Skill,只能通过 $skill-name 显式调用。适用于破坏性操作(如部署、删除)的 Skill
dependencies.tools声明 Skill 依赖的 MCP Server。当 features.skill_mcp_dependency_install = true(默认开启)时,Codex 会在 Skill 激活时检查并提示安装缺失的 MCP 依赖

3.4 scripts/ 目录:可执行脚本规范

scripts/ 存放 Skill 工作流中需要执行的脚本。Codex 在 Level 2 按需调用。

编写规范:

  • 语言选择: Python(推荐,跨平台)、Shell(Linux/macOS)、PowerShell(Windows)。查看 openai/skills 仓库,Curated Skills 以 Python(68.6%)和 Shell(2.2%)为主
  • 幂等性: 脚本应支持重复执行不产生副作用
  • 错误处理: 必须有明确的退出码。0 = 成功,非 0 = 失败
  • 输出规范: 通过 stdout 输出结构化结果(JSON 优先),stderr 输出日志信息
  • 依赖最小化: 避免引入额外依赖。如果需要,在脚本开头检查并提示安装
  • Shebang 行: Shell 脚本必须以 #!/bin/bash 或 #!/usr/bin/env python3 开头
Python
#!/usr/bin/env python3
"""validate_module.py — 验证 Spring Boot 模块结构是否规范"""
import json
import sys
from pathlib import Path
​
def validate(module_path: str) -> dict:
    path = Path(module_path)
    errors = []
    # 检查 pom.xml
    if not (path / "pom.xml").exists():
        errors.append("Missing pom.xml")
    # 检查 Application 启动类
    src_main = path / "src" / "main" / "java"
    if not src_main.exists():
        errors.append("Missing src/main/java directory")
    return {"valid": len(errors) == 0, "errors": errors}
​
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print(json.dumps({"error": "Usage: validate_module.py <module_path>"}), file=sys.stderr)
        sys.exit(1)
    result = validate(sys.argv[1])
    print(json.dumps(result))  # stdout: 结构化输出
    sys.exit(0 if result["valid"] else 1)

3.5 references/ 目录:参考文档组织策略

references/ 存放 Skill 工作流需要的参考资料,在 Level 2 按需加载。

组织原则:

  • 单文件单职责: 每个文件覆盖一个主题,便于按需加载
  • 命名规范: 使用 <主题>-<类型>.md 格式,如 module-structure.md、pom-template.md
  • 大小控制: 单个文件控制在 200-500 行以内。超大文件拆分
  • 引用方式: 在 SKILL.md 中通过 "详见 references/xxx.md" 引导 Codex 按需加载
Text
references/
├── module-structure.md          # 模块目录结构规范
├── pom-template.md              # POM 配置模板
├── nacos-config.md              # Nacos 配置规范
├── security-conventions.md      # 安全编码约定
└── api-design-guide.md          # API 设计规范
references/ vs AGENTS.md 的区别

AGENTS.md 中的规范对所有任务永远生效;references/ 中的内容只在 Skill 被激活且工作流需要时才加载。把「全局规范」放 AGENTS.md,把「特定流程的参考资料」放 references/。

四、显式调用 vs 隐式触发

Skills 有两种激活方式,各有最佳场景:

4.1 显式调用

用户在 Codex 中主动输入 $skill-name 触发:

Text
$spring-boot-service     # 显式调用自定义 Skill
$gh-fix-ci               # 显式调用修复 CI Skill
$security-best-practices # 显式调用安全审查 Skill
  • 在 CLI/IDE 中输入 $ 触发自动补全
  • 在 CLI/IDE 中用 /skills 查看所有可用 Skill
  • 在 Codex App 中用 $ 弹出 Skill 选择器

4.2 隐式触发

Codex 根据用户任务描述自动匹配 Skill 的 description:

  • 用户说 "创建一个新的微服务模块" → 匹配 spring-boot-service
  • 用户说 "修一下这个 PR 的 CI" → 匹配 gh-fix-ci
  • 用户说 "做一个安全审查" → 匹配 security-best-practices

4.3 优化隐式触发的策略

策略说明
写清正向边界description 中明确说明 "Use when..." 触发条件
写清反向边界description 中明确说明 "Do NOT use when..." 排除条件
避免模糊描述❌ "帮助开发" ✅ "Scaffold Spring Boot 3.x modules for Maven multi-module projects"
禁用高风险 Skill 的隐式触发在 agents/openai.yaml 中设 allow_implicit_invocation: false。部署、删除、生产操作类 Skill 应禁用隐式触发
测试触发准确性用不同措辞的 prompt 测试是否正确触发目标 Skill。如果误触发,调整 description 的边界描述
黄金法则

如果一个 Skill 执行的操作是不可逆的(删除、部署、发布),必须设 allow_implicit_invocation: false,强制用户显式确认。

五、自定义 Skill 的完整创建流程

5.1 使用 $skill-creator(推荐)

$skill-creator 是 Codex 内置的 System Skill,通过交互式引导生成 Skill 目录:

Text
$skill-creator

Creator 会依次询问:

  1. Skill 做什么? → 生成 name 和 description
  2. 何时应该触发? → 优化 description 的触发边界
  3. 是否需要脚本? → 决定是否生成 scripts/ 目录
  4. 是否需要参考文档? → 决定是否生成 references/ 目录

默认生成指令型 Skill(Instruction-only),除非明确需要脚本。

5.2 手动创建

Bash
# 1. 创建目录结构
mkdir -p .agents/skills/spring-boot-service/{agents,scripts,references,assets}
​
# 2. 编写 SKILL.md
cat > .agents/skills/spring-boot-service/SKILL.md << 'EOF'
---
name: spring-boot-service
description: >
  Create and scaffold Spring Boot 3.x microservice modules for Refinex-Cloud.
  Use when the user asks to create a new service, add a new module, or scaffold
  a Spring Boot project. Do NOT use for frontend tasks or non-Java projects.
---
​
# Spring Boot Service Scaffolding
​
## 工作流
1. ...
EOF
​
# 3.(可选)编写 agents/openai.yaml
# 4.(可选)添加 scripts/ 和 references/
# 5. 重启 Codex 或等待自动检测

5.3 Skill 变更检测

  • Codex 自动检测 Skill 文件变更,无需手动刷新
  • 如果更新未生效,重启 Codex 即可
  • 支持符号链接(symlink)目录,Codex 会跟随链接目标扫描

六、Skills + MCP 联动

当 Skill 工作流需要调用外部系统时,通过 MCP 依赖声明实现联动。

6.1 在 Skill 中声明 MCP 依赖

YAML
# agents/openai.yaml
dependencies:
  tools:
    - type: "mcp"
      value: "github"                        # config.toml 中的 mcp_servers 名称
      description: "GitHub MCP for PR and Issue management"
      transport: "streamable_http"
      url: "https://api.githubcopilot.com/mcp/"
    - type: "mcp"
      value: "context7"
      description: "Context7 for up-to-date docs"
      transport: "stdio"

6.2 依赖解析流程

Mermaid
正在渲染 Mermaid 图表…

6.3 实际联动示例

Markdown
---
name: gh-release
description: >
  Create a GitHub release with changelog. Use when the user asks to
  release, tag, or publish a new version. Do NOT use for pre-release or snapshot.
---
​
# GitHub Release Workflow
​
## 前置条件
- GitHub MCP 已配置且已 OAuth 登录
- 当前分支为 main/master
​
## 工作流
1. 运行 `git log` 获取自上次 tag 以来的 commit 列表
2. 按 Conventional Commits 分类生成 CHANGELOG
3. 使用 GitHub MCP 的 `create_release` 工具创建 Release
4. 使用 GitHub MCP 的 `create_pull_request` 工具提交 CHANGELOG 更新 PR

七、Skills + Automations 联动

Skills 可以与 Codex 的自动化机制结合,实现定期或事件驱动的执行。

7.1 场景示例

自动化场景实现方式
定期漂移检查设置自动化任务定期运行,检查 AGENTS.md 是否有指导缺口,提示需要补充的内容
PR 创建时自动审查在 GitHub PR 评论中 @codex • Skill 名,触发 Cloud Task 执行安全审查 Skill
CI 失败自动修复CI 失败后通过 @codex 在 PR 评论中触发 $gh-fix-ci Skill
定期依赖更新设置自动化任务运行依赖检查 Skill,自动生成更新 PR

7.2 GitHub 中触发 Skill

Text
# 在 PR 评论中
@codex 使用 $gh-fix-ci 修复这个 CI 失败

# 在 PR 评论中
@codex 使用 $security-best-practices 审查这个 PR 的安全性

Codex Cloud Task 会自动拉取 PR 上下文、激活对应 Skill 并执行工作流。

八、Skill 分发与存储

8.1 存储位置层级

Codex 按以下层级扫描 Skill 目录(从最具体到最通用):

作用域路径用途
REPO$CWD/.agents/skills当前工作目录。团队共享的项目级 Skill,如微服务特定的 Skill
REPO$CWD/../.agents/skills当前目录的上级。在 Git 仓库嵌套目录中,适用于共享区域的 Skill
REPO$REPO_ROOT/.agents/skills仓库根目录。所有子目录共享的 Skill,作为仓库级根 Skill
USER$HOME/.agents/skills用户个人 Skill,跨所有项目生效。个人工具和偏好
ADMIN/etc/codex/skills机器/容器级 Skill,所有用户共享。SDK 脚本、自动化、管理员默认 Skill
SYSTEMCodex 内置OpenAI 官方预装 Skill(skill-creator、skill-installer 等)

8.2 分发策略

场景放置位置原因
团队共享的项目规范 Skill$REPO_ROOT/.agents/skills/ → 提交到 Git版本控制,新成员 clone 即可用
微服务特定的 Skill$SERVICE_DIR/.agents/skills/ → 提交到 Git仅在该微服务目录下生效
个人工具偏好 Skill~/.agents/skills/跨项目,不污染团队仓库
组织级标准 Skill/etc/codex/skills/ 或容器镜像预装所有用户统一标准
从 openai/skills 安装$skill-installer → 默认 ~/.codex/skills/USER 级,跨项目生效
符号链接支持

Codex 支持 symlink 的 Skill 目录。可以用符号链接将组织级 Skill 仓库链接到多个项目中,实现集中管理、分散使用。

8.3 Skill 安装方式

Bash
# 1. 从 openai/skills 安装 Curated Skill(按名称)
$skill-installer gh-fix-ci
​
# 2. 从 openai/skills 安装 Experimental Skill(指定路径)
$skill-installer install the create-plan skill from the .experimental folder
​
# 3. 从 GitHub URL 安装
$skill-installer install https://github.com/openai/skills/tree/main/skills/.experimental/create-plan
​
# 4. 手动安装(复制目录)
cp -r /path/to/my-skill ~/.agents/skills/

8.4 Skill 管理

Bash
# 查看已安装的 Skills
/skills                              # TUI 内
​
# 禁用 Skill(不删除)
# 在 ~/.codex/config.toml 中:
# [[skills.config]]
# path = "/path/to/skill/SKILL.md"
# enabled = false
​
# 删除 Skill
rm -rf ~/.codex/skills/<skill-name>  # 或对应目录

九、预装 System Skills

以下 Skill 随 Codex 自动安装(.system 目录),无需手动安装:

Skill调用方式用途
skill-creator$skill-creator引导创建自定义 Skill,自动生成目录结构和 SKILL.md 模板
skill-installer$skill-installer <name>从 openai/skills 仓库安装 Curated/Experimental Skill
openai-docs$openai-docs搜索和读取 OpenAI 开发者文档(依赖 OpenAI Docs MCP)

十、推荐安装的 Curated Skills

以下是为全栈开发精选的 Curated Skills,按 GitHub 协作 → 前端开发 → 浏览器调试 → 安全审查 的链路排列:

10.1 gh-fix-ci — 修复 CI 失败

属性详情
触发条件用户要求调试或修复 GitHub PR 中失败的 CI Check
工作流验证 gh 认证 → 定位失败 Check → 拉取 Actions 日志 → 总结失败原因 → 拟定修复方案 → 用户批准后实施
内置脚本scripts/inspect_pr_checks.py — 自动提取失败日志片段
前置要求gh auth login(需 repo • workflow scope)
Bash
$skill-installer gh-fix-ci

10.2 gh-address-comments — 处理 PR Review 评论

属性详情
触发条件用户要求处理当前分支 PR 上的 Review 评论
工作流获取 PR 所有评论 → 编号列出并总结 → 用户选择要处理的 → 逐个实施修复
内置脚本scripts/fetch_comments.py — 拉取并格式化 PR 评论和 Review Thread
Bash
$skill-installer gh-address-comments

10.3 frontend-skill — 高质量前端 UI

属性详情
触发条件任务要求构建视觉出色的 Landing Page、网站、应用原型或游戏 UI
设计哲学先构图后组件;全出血 Hero;最多 2 种字体 + 1 个强调色;默认无卡片布局;每个区域只做一件事
Bash
$skill-installer frontend-skill

10.4 playwright — 浏览器 CLI 自动化

属性详情
触发条件任务需要从终端自动化浏览器(导航、表单填写、快照、截图、数据提取、UI 调试)
与 Playwright MCP 的关系MCP 提供底层浏览器控制工具;Skill 提供结构化工作流指导。两者互补,建议同时安装
Bash
$skill-installer playwright

10.5 security-best-practices — 安全最佳实践

属性详情
触发条件用户明确要求安全审查、安全报告或 secure-by-default 编码指导
三种模式① 写新代码时默认安全 ② 被动检测关键漏洞并提醒 ③ 生成完整安全报告 + 修复方案
内置参考references/ 下按 <语言>-<框架>-<栈>-security.md 组织的安全指南
Bash
$skill-installer security-best-practices

10.6 screenshot — 桌面截图

属性详情
触发条件用户要求桌面截图(全屏、指定应用窗口、像素区域)
跨平台支持macOS(screencapture)、Linux(scrot/gnome-screenshot)、Windows(PowerShell)
Bash
$skill-installer screenshot

十一、按需安装的 Curated Skills

Skill适用场景安装命令
playwright-interactive持久化浏览器会话 + 交互式 UI 调试$skill-installer playwright-interactive
imagegen用 OpenAI Image API 生成/编辑图片$skill-installer imagegen
doc创建/编辑 .docx 文档,保持格式保真$skill-installer doc
sentry查询 Sentry 生产错误日志$skill-installer sentry
vercel-deploy一键部署到 Vercel(Preview / Production)$skill-installer vercel-deploy
cloudflare-deploy部署到 Cloudflare Workers/Pages$skill-installer cloudflare-deploy
jupyter-notebook创建和编辑 Jupyter Notebook$skill-installer jupyter-notebook

十二、实战:为 Spring Boot 项目创建自定义 Skill

以 Refinex-Cloud 为例,创建一个微服务模块脚手架 Skill。

12.1 需求分析

  • 目标: 让 Codex 能快速创建符合团队规范的 Spring Boot 微服务模块
  • 触发场景: 用户说 "创建一个新模块" 或 "添加 refinex-xxx 服务"
  • 不应触发: 前端任务、非 Java 项目、已有模块的修改

12.2 目录结构

Text
.agents/skills/spring-boot-service/
├── SKILL.md
├── agents/
│   └── openai.yaml
├── scripts/
│   └── validate_module.py
├── references/
│   ├── module-structure.md
│   ├── pom-template.md
│   └── nacos-config.md
└── assets/
    ├── Application.java.template
    └── bootstrap.yml.template

12.3 SKILL.md

Markdown
---
name: spring-boot-service
description: >
  Create and scaffold a new Spring Boot 3.x microservice module for Refinex-Cloud
  (Maven multi-module project with Spring Cloud Alibaba). Use when the user asks
  to create a new service, add a new module, or scaffold a Spring Boot project
  within the Refinex-Cloud monorepo. Do NOT use for frontend tasks, non-Java
  projects, or modifications to existing modules.
---
​
# Spring Boot Service Scaffolding
​
## 前置检查
1. 确认当前目录为 Refinex-Cloud 项目根(存在根 `pom.xml` 且 `<groupId>` 为 `com.refinex`)
2. 确认 Java 版本 ≥ 21(`java -version`)
3. 确认 Maven 可用(`mvn -version`)
​
## 工作流
​
### Step 1: 收集信息
- 模块名称(如 `refinex-notification`)
- 模块描述
- 需要的核心依赖(从已有模块参考)
​
### Step 2: 创建模块目录
按照 `references/module-structure.md` 中的标准结构创建目录:
refinex-<name>/
├── pom.xml
└── src/
├── main/
│   ├── java/com/refinex/<name>/
│   │   ├── <Name>[Application.java](http://Application.java
│   │   ├── controller/
│   │   ├── service/
│   │   ├── mapper/
│   │   ├── domain/
│   │   └── config/
│   └── resources/
│       ├── bootstrap.yml
│       └── application.yml
└── test/
└── java/com/refinex/<name>/
​
### Step 3: 配置 POM
参考 `references/pom-template.md`,生成 `pom.xml`:
- 继承父工程 `refinex-cloud` 的 `<parent>`
- 添加 `spring-boot-starter-web`、`spring-cloud-starter-alibaba-nacos-discovery` 等基础依赖
- 添加 `refinex-common-core`、`refinex-common-security` 等通用模块依赖
​
### Step 4: 生成启动类
使用 `assets/Application.java.template` 生成 Application 启动类,包含:
- `@SpringBootApplication`
- `@EnableDiscoveryClient`
- 标准化的启动日志
​
### Step 5: 生成配置文件
参考 `references/nacos-config.md`,生成 `bootstrap.yml`:
- 配置 Nacos 服务发现地址
- 配置应用名、端口、Profile
​
### Step 6: 注册到父工程
在根 `pom.xml` 的 `<modules>` 列表中添加新模块。
​
### Step 7: 验证
运行 `scripts/validate_module.py <module-path>` 验证模块结构完整性。
然后执行 `mvn clean compile -pl refinex-<name>` 确认编译通过。
​
## 约定
- 包名统一使用 `com.refinex.<module-name>`
- 端口分配参考已有服务的端口段
- 所有模块必须接入 Nacos 服务发现
- 启动类命名:`<ModuleName>Application.java`

12.4 agents/openai.yaml

YAML
interface:
  display_name: "Spring Boot Service"
  short_description: "Scaffold Refinex-Cloud microservice modules"
  brand_color: "#6DB33F"
  default_prompt: "为 Refinex-Cloud 创建一个新的微服务模块"
​
policy:
  allow_implicit_invocation: true
​
dependencies:
  tools:
    - type: "mcp"
      value: "context7"
      description: "Context7 for Spring Boot documentation"
      transport: "stdio"

12.5 scripts/validate_module.py

Python
#!/usr/bin/env python3
"""validate_module.py — 验证 Spring Boot 模块结构是否符合 Refinex-Cloud 规范"""
import json
import sys
from pathlib import Path
​
def validate(module_path: str) -> dict:
    path = Path(module_path)
    errors = []
    warnings = []
​
    # 必须文件检查
    required_files = [
        "pom.xml",
        "src/main/resources/bootstrap.yml",
    ]
    for f in required_files:
        if not (path / f).exists():
            errors.append(f"Missing required file: {f}")
​
    # 必须目录检查
    required_dirs = [
        "src/main/java",
        "src/main/resources",
        "src/test/java",
    ]
    for d in required_dirs:
        if not (path / d).is_dir():
            errors.append(f"Missing required directory: {d}")
​
    # Application 启动类检查
    java_files = list((path / "src" / "main" / "java").rglob("*Application.java"))
    if not java_files:
        errors.append("Missing Application.java entry point")
    elif len(java_files) > 1:
        warnings.append(f"Multiple Application classes found: {[str(f) for f in java_files]}")
​
    return {
        "valid": len(errors) == 0,
        "errors": errors,
        "warnings": warnings,
        "module": path.name,
    }
​
if __name__ == "__main__":
    if len(sys.argv) < 2:
        print(json.dumps({"error": "Usage: validate_module.py <module_path>"}), file=sys.stderr)
        sys.exit(1)
    result = validate(sys.argv[1])
    print(json.dumps(result, indent=2))
    sys.exit(0 if result["valid"] else 1)

12.6 references/ 示例

references/module-structure.md:

Markdown
# Refinex-Cloud 模块标准目录结构
​
refinex-<name>/
├── pom.xml                          # 模块 POM,继承 refinex-cloud 父工程
└── src/
    ├── main/
    │   ├── java/com/refinex/<name>/
    │   │   ├── <Name>Application.java   # 启动类
    │   │   ├── controller/              # REST 控制器
    │   │   ├── service/                 # 业务逻辑层
    │   │   │   └── impl/
    │   │   ├── mapper/                  # MyBatis Mapper
    │   │   ├── domain/                  # 实体类
    │   │   │   ├── entity/
    │   │   │   ├── dto/
    │   │   │   └── vo/
    │   │   └── config/                  # 配置类
    │   └── resources/
    │       ├── bootstrap.yml            # Nacos 引导配置
    │       ├── application.yml          # 应用配置
    │       └── mapper/                  # MyBatis XML
    └── test/
        └── java/com/refinex/<name>/
​
## 命名约定
- 模块名:`refinex-` 前缀 + 功能名(kebab-case)
- 包名:`com.refinex.<name>`(点分隔,小写)
- 启动类:`<Name>Application`(PascalCase)
- 端口:参考端口分配表,避免冲突

十三、一键安装推荐 Skills

Bash
# === 推荐安装的 6 个 Curated Skills ===
​
# 1. 修复 GitHub Actions CI 失败
$skill-installer gh-fix-ci
​
# 2. 处理 PR Review 评论
$skill-installer gh-address-comments
​
# 3. 高质量前端 UI 开发
$skill-installer frontend-skill
​
# 4. Playwright 浏览器 CLI 自动化
$skill-installer playwright
​
# 5. 安全最佳实践审查
$skill-installer security-best-practices
​
# 6. 桌面截图
$skill-installer screenshot
Warning

安装后需要重启 Codex 才能识别新 Skill。安装完成后执行 /skills 命令验证所有 Skill 已正确加载。

十四、最佳实践清单

#实践原因
1每个 Skill 只做一件事单一职责,避免大而全的 Skill 导致 description 模糊和触发歧义
2description 写清正向和反向边界这是隐式触发的唯一依据,模糊描述导致误触发或漏触发
3SKILL.md 控制在 500 行以内Level 1 全量加载进上下文,过长会挤压推理空间
4详细内容放 references/Level 2 按需加载,不占用 Level 1 的上下文空间
5优先用指令而非脚本除非需要确定性行为或外部工具调用,否则指令更灵活
6脚本输出 JSON 到 stdout结构化输出让 Codex 更容易理解和处理脚本结果
7不可逆操作禁用隐式触发部署、删除、发布类 Skill 设 allow_implicit_invocation: false
8项目级 Skill 提交到 Git版本控制 + 团队共享,新成员 clone 即可用
9声明 MCP 依赖在 agents/openai.yaml 中声明,自动检测和提示安装缺失依赖
10用 $skill-creator 起步交互式引导确保结构正确,避免遗漏必需字段

参考文档

  • Codex Skills 官方文档
  • openai/skills 仓库(Curated + System + Experimental)
  • Customization — Skills
  • Agent Skills 开放标准
← 上一篇
下一篇 →
一、什么是 Agent SkillsSkill vs MCP vs AGENTS.md二、渐进式上下文加载机制2.1 三级加载流程2.2 对 Skill 编写的指导意义三、Skill 目录结构规范3.1 完整结构3.2 SKILL.md 元数据规范前置检查工作流参考资料3.3 agents/openai.yaml 配置3.4 scripts/ 目录:可执行脚本规范3.5 references/ 目录:参考文档组织策略四、显式调用 vs 隐式触发4.1 显式调用4.2 隐式触发4.3 优化隐式触发的策略五、自定义 Skill 的完整创建流程5.1 使用 $skill-creator(推荐)5.2 手动创建工作流5.3 Skill 变更检测六、Skills + MCP 联动6.1 在 Skill 中声明 MCP 依赖6.2 依赖解析流程6.3 实际联动示例前置条件工作流七、Skills + Automations 联动7.1 场景示例7.2 GitHub 中触发 Skill八、Skill 分发与存储8.1 存储位置层级8.2 分发策略8.3 Skill 安装方式8.4 Skill 管理九、预装 System Skills十、推荐安装的 Curated Skills10.1 gh-fix-ci — 修复 CI 失败10.2 gh-address-comments — 处理 PR Review 评论10.3 frontend-skill — 高质量前端 UI10.4 playwright — 浏览器 CLI 自动化10.5 security-best-practices — 安全最佳实践10.6 screenshot — 桌面截图十一、按需安装的 Curated Skills十二、实战:为 Spring Boot 项目创建自定义 Skill12.1 需求分析12.2 目录结构12.3 SKILL.md前置检查工作流Step 1: 收集信息Step 2: 创建模块目录Step 3: 配置 POMStep 4: 生成启动类Step 5: 生成配置文件Step 6: 注册到父工程Step 7: 验证约定12.4 agents/openai.yaml12.5 scripts/validate_module.py12.6 references/ 示例命名约定十三、一键安装推荐 Skills十四、最佳实践清单参考文档