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 Skill | MCP Server | AGENTS.md |
|---|---|---|---|
| 本质 | 指令 + 脚本包(文件目录) | 长驻进程 / 远程服务 | 持久化项目指令文件 |
| 上下文开销 | 低(渐进加载,按需读取) | 高(tool schema 常驻上下文) | 中(启动时全量加载) |
| 触发方式 | 显式 $skill 或隐式匹配 description | 模型根据 tool schema 自动选择 | 每次会话自动生效 |
| 适用场景 | 可复用工作流、领域知识、最佳实践 | 外部 API 调用、实时数据获取 | 项目规范、编码约定、构建命令 |
| 作用范围 | 按需激活,任务匹配时生效 | 全局常驻,所有任务可用 | 全局常驻,所有任务可用 |
二、渐进式上下文加载机制
这是 Skills 与 MCP 最本质的区别。理解这个机制是写好 Skill 的前提。
2.1 三级加载流程
| 加载级别 | 加载内容 | 触发条件 | 上下文开销 |
|---|---|---|---|
| Level 0 | name • description • 文件路径 + agents/openai.yaml 中的元数据 | Codex 启动时自动加载所有 Skill | 极低(约 100-200 token/Skill) |
| Level 1 | 完整 SKILL.md 指令内容 | 用户显式调用 $skill 或 Codex 隐式匹配 description | 中(取决于 SKILL.md 长度) |
| Level 2 | references/ 文档 + 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 完整结构
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 正文组成:
---
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 句话 |
description 是最重要的字段。 Codex 在 Level 0 只读取 name + description 来决定是否激活 Skill。一个模糊的 description(如 "帮助开发")会导致误触发或漏触发。请写清楚正向和反向边界。
3.3 agents/openai.yaml 配置
这是 Skill 的可选元数据文件,控制 UI 展示、触发策略和 MCP 依赖:
# 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开头
#!/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 按需加载
references/
├── module-structure.md # 模块目录结构规范
├── pom-template.md # POM 配置模板
├── nacos-config.md # Nacos 配置规范
├── security-conventions.md # 安全编码约定
└── api-design-guide.md # API 设计规范AGENTS.md 中的规范对所有任务永远生效;references/ 中的内容只在 Skill 被激活且工作流需要时才加载。把「全局规范」放 AGENTS.md,把「特定流程的参考资料」放 references/。
四、显式调用 vs 隐式触发
Skills 有两种激活方式,各有最佳场景:
4.1 显式调用
用户在 Codex 中主动输入 $skill-name 触发:
$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 目录:
$skill-creatorCreator 会依次询问:
- Skill 做什么? → 生成
name和description - 何时应该触发? → 优化
description的触发边界 - 是否需要脚本? → 决定是否生成
scripts/目录 - 是否需要参考文档? → 决定是否生成
references/目录
默认生成指令型 Skill(Instruction-only),除非明确需要脚本。
5.2 手动创建
# 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 依赖
# 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 依赖解析流程
6.3 实际联动示例
---
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
# 在 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 |
| SYSTEM | Codex 内置 | 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 安装方式
# 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 管理
# 查看已安装的 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) |
$skill-installer gh-fix-ci10.2 gh-address-comments — 处理 PR Review 评论
| 属性 | 详情 |
|---|---|
| 触发条件 | 用户要求处理当前分支 PR 上的 Review 评论 |
| 工作流 | 获取 PR 所有评论 → 编号列出并总结 → 用户选择要处理的 → 逐个实施修复 |
| 内置脚本 | scripts/fetch_comments.py — 拉取并格式化 PR 评论和 Review Thread |
$skill-installer gh-address-comments10.3 frontend-skill — 高质量前端 UI
| 属性 | 详情 |
|---|---|
| 触发条件 | 任务要求构建视觉出色的 Landing Page、网站、应用原型或游戏 UI |
| 设计哲学 | 先构图后组件;全出血 Hero;最多 2 种字体 + 1 个强调色;默认无卡片布局;每个区域只做一件事 |
$skill-installer frontend-skill10.4 playwright — 浏览器 CLI 自动化
| 属性 | 详情 |
|---|---|
| 触发条件 | 任务需要从终端自动化浏览器(导航、表单填写、快照、截图、数据提取、UI 调试) |
| 与 Playwright MCP 的关系 | MCP 提供底层浏览器控制工具;Skill 提供结构化工作流指导。两者互补,建议同时安装 |
$skill-installer playwright10.5 security-best-practices — 安全最佳实践
| 属性 | 详情 |
|---|---|
| 触发条件 | 用户明确要求安全审查、安全报告或 secure-by-default 编码指导 |
| 三种模式 | ① 写新代码时默认安全 ② 被动检测关键漏洞并提醒 ③ 生成完整安全报告 + 修复方案 |
| 内置参考 | references/ 下按 <语言>-<框架>-<栈>-security.md 组织的安全指南 |
$skill-installer security-best-practices10.6 screenshot — 桌面截图
| 属性 | 详情 |
|---|---|
| 触发条件 | 用户要求桌面截图(全屏、指定应用窗口、像素区域) |
| 跨平台支持 | macOS(screencapture)、Linux(scrot/gnome-screenshot)、Windows(PowerShell) |
$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 目录结构
.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.template12.3 SKILL.md
---
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
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
#!/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:
# 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
# === 推荐安装的 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安装后需要重启 Codex 才能识别新 Skill。安装完成后执行 /skills 命令验证所有 Skill 已正确加载。
十四、最佳实践清单
| # | 实践 | 原因 |
|---|---|---|
| 1 | 每个 Skill 只做一件事 | 单一职责,避免大而全的 Skill 导致 description 模糊和触发歧义 |
| 2 | description 写清正向和反向边界 | 这是隐式触发的唯一依据,模糊描述导致误触发或漏触发 |
| 3 | SKILL.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 起步 | 交互式引导确保结构正确,避免遗漏必需字段 |