feat: 新增 /optimize 命令、Codex 配置支持与多项优化

- 新增 /optimize 系统优化命令,支持 full/ux/perf/code 四种模式
  - 新增 .codex/ 配置及 sync-config 同步逻辑(sh + bat)
  - redis-safety 从 rules 下沉到 skills,减少每次会话固定 token 消耗
  - java-dev 新增 Native SQL 规范(MySQL 保留字别名检测)
  - go-dev 性能优化表补充 SQL 保留字提示
  - ui-ux-pro-max 去掉 paths 自动触发,改为手动/描述触发
  - plugins.json 清理 3 个低频插件,新增 code-review
  - defensive rule 新增上下文管理提示(/btw、/compact)
  - check-toolsearch 修复版本显示(改用 claude --version)
  - gitignore 模板新增 10 个 AI 工具忽略规则
  - Dockerfile 模板引入 BuildKit 缓存和 GOPROXY
  - publish.sh 优化 release notes 格式
  - 更新 LICENSE 为 PolyForm NC、新增 NOTICE
  - README 大幅更新:Codex Part 3、插件列表、上下文管理最佳实践
This commit is contained in:
doccker committed 2026-03-20 21:30:52 +08:00
1 parent c076169bf2
commit 677e19907c
136 files changed
+3462 -200

No files matched your search

+8 -2
View File
@@ -8,9 +8,13 @@ description: 检查 ToolSearch(WebSearch)是否可用
### 1. 尝试调用 WebSearch
使用 WebSearch 工具搜索关键词 `Claude Code latest version`。
使用 WebSearch 工具搜索关键词 `Claude Code CLI`。
### 2. 判断结果
### 2. 获取本机版本
使用 Bash 执行 `claude --version` 获取用户当前安装的 Claude Code 版本号。
### 3. 判断结果
**如果搜索成功返回结果**:
@@ -23,6 +27,8 @@ description: 检查 ToolSearch(WebSearch)是否可用
- 大幅减少 token 占用(工具定义不再内嵌上下文)
- 模型表现更好(上下文更干净,注意力不被稀释)
- 对话轮次更多(同样的上下文窗口可以增加数轮对话)
当前 Claude Code 版本为 {claude --version 的输出}。
```
**如果搜索失败或报错**:
+489
View File
@@ -0,0 +1,489 @@
---
description: 系统优化扫描(full/ux/perf/code 四种模式)
allowed-tools: Bash(git ls-files:*), Bash(git diff:*), Bash(git status:*), Bash(git log:*), Bash(git stash:*), Bash(git checkout:*), Bash(go build:*), Bash(go test:*), Bash(go vet:*), Bash(npm run build:*), Bash(npm test:*), Bash(npx vue-tsc:*), Bash(mvn compile:*), Bash(mvn test:*), Bash(wc:*), Bash(python -m pytest:*), Read, Glob, Grep, Edit, Write, Agent, WebSearch
argument-hint: "[ux|perf|code] 默认 full 全量扫描"
---
根据参数选择扫描模式:
- `/optimize` 或 `/optimize full` → 六维全量评估
- `/optimize ux` → 仅 UX 与操作费力度
- `/optimize perf` → 仅性能与中间件评估
- `/optimize code` → 仅代码质量、语法糖与冗余
参数值:「$ARGUMENTS」
---
## 第 0 步:范围选择
使用 AskUserQuestion 询问扫描范围:
```
请选择扫描范围:
1. 全量扫描(前端 + 后端)
扫描所有代码,token 消耗较大(项目越大消耗越多),
适合里程碑节点或季度优化。
2. 仅后端
只扫描 Go/Java/Python 等后端代码。
3. 仅前端
只扫描 Vue/React/TS 等前端代码。
4. 指定目录
用户输入目录路径,只扫描指定模块。
```
用户选择「全量扫描」时,先统计规模并提示:
```bash
# 统计文件数和行数
git ls-files --exclude-standard | head -500
git ls-files --exclude-standard | xargs wc -l 2>/dev/null | tail -1
```
输出提示:
```
⚠️ 全量扫描预估:
- 文件数:XX 个
- 总行数:约 XXXX 行
- 预计消耗 tokens 较多,确认继续?(Y/N)
```
用户确认后进入第 1 步。
---
## 第 1 步:项目画像
扫描项目基本信息,输出概览表:
### 扫描内容
1. **技术栈识别**:读取 `go.mod`(Go 版本)、`package.json`(Vue/React/Node 版本)、`pom.xml`(Java 版本)、`requirements.txt`/`pyproject.toml`(Python 版本)
2. **框架识别**:Gin/Echo/Fiber、Spring Boot、Vue/React、Element Plus/Ant Design
3. **数据库**:搜索 SQLite/MySQL/PostgreSQL 连接配置
4. **已用中间件**:搜索 Redis/MQ/MinIO/ES 的 import 和配置
5. **文件规模统计**:按语言分类统计文件数和行数
6. **大文件检测**:按语言阈值(Go 400行 / Vue 200行 / Java 300行 / TS/JS 300行 / Python 300行)
### 输出格式
```markdown
## 项目概览
| 项 | 值 |
|---|---|
| 技术栈 | Go 1.22 + Gin / Vue 3.4 + Element Plus 2.7 |
| 数据库 | SQLite / MySQL |
| 已用中间件 | Redis |
| 后端文件 | XX 个,约 XXXX 行 |
| 前端文件 | XX 个,约 XXXX 行 |
| 大文件(>阈值) | X 个 |
```
---
## 第 2 步:六维评估
根据模式参数决定执行哪些维度:
| 模式 | 执行维度 |
|------|---------|
| `full` | UX + PERF + CODE + SUGAR + SEC + BEST |
| `ux` | UX |
| `perf` | PERF + BEST(中间件相关) |
| `code` | CODE + SUGAR |
---
### 维度 1:[UX] 用户体验与操作费力度
#### 前端扫描
| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 表单防重复提交 | 搜索 `<el-form>` / `<form>` 的提交处理 | 提交函数无 loading 状态控制 → 问题 |
| 列表空状态 | 搜索 `<el-table>` / `v-for` 列表 | 无 `<el-empty>` 或 empty slot → 问题 |
| 加载状态 | 搜索 API 调用处 | 无 loading / skeleton 反馈 → 问题 |
| 错误提示 | 搜索 `catch` 块 | `console.log` 吞错误,无用户提示 → 问题 |
| 表单校验 | 搜索 `<el-form>` | 无 `:rules` 或规则为空 → 问题 |
| 批量操作 | 搜索列表页 | 仅逐条操作,无批量选择能力 → 建议 |
| 响应式布局 | 搜索 `@media` / `:span` / `:xs` | 无任何响应式处理 → 建议 |
#### 后端扫描
| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 接口响应格式 | 搜索 handler 返回结构 | 不统一(有的 `{code,data}` 有的裸返回)→ 问题 |
| 分页支持 | 搜索列表查询接口 | 返回全量数据无分页 → 问题 |
| 参数校验 | 搜索 handler 入参 | 无 `binding:"required"` 或手动校验 → 建议 |
---
### 维度 2:[PERF] 性能与中间件评估
#### 数据库性能
| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| N+1 查询 | 搜索循环内的 DB 调用 | `for` 循环内有 `db.Find` / `db.First` → Critical |
| 全表查询 | 搜索无 Where 的 Find/Select | `db.Find(&all)` 无条件无分页 → Critical |
| 缺失索引 | 读取 model struct tag | 外键和常用查询字段无 `index` tag → Important |
| 慢查询日志 | 搜索 GORM 配置 | 未配置 `SlowThreshold` → 建议 |
| 连接池 | 搜索 DB 配置 | 未设置 `MaxOpenConns` / `MaxIdleConns` → 建议 |
#### 前端性能
| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 路由懒加载 | 搜索 router 配置 | 使用 `import Xxx from` 而非 `() => import()` → 问题 |
| 大依赖 | 读取 package.json | 检查 moment.js / lodash 全量引入 → 建议替代 |
| 图片优化 | 搜索静态资源 | 大图片(>500KB)未压缩 → 建议 |
#### 中间件评估矩阵
对以下中间件逐一评估,输出决策表:
**Redis 决策:**
- 扫描:搜索配置表/字典表的读取频率、session 管理方式、是否有热点查询
- 必要 → 高频读低频写的数据每次查库,且 QPS > 100
- 推荐 → 有配置/字典类数据每次查库,或 session 存数据库
- 不需要 → 数据变更频繁,或访问量很小
**MinIO(对象存储)决策:**
- 扫描:搜索 `os.WriteFile` / `ioutil.WriteFile` / `multipart` / `<el-upload>` / 本地 `uploads/` 目录
- 必要 → 文件上传 + 多实例/容器化部署
- 推荐 → 文件上传 + 单机但文件量大(>1GB) 或有 CDN 需求
- 不需要 → 无文件上传,或仅头像等小图且量极小
**Elasticsearch 决策:**
- 扫描:搜索 `LIKE '%keyword%'` / `.Where("name LIKE ?")` / 前端搜索框对应的后端实现
- 必要 → 模糊搜索 + 数据量 >10w + 多字段联合搜索
- 推荐 → 模糊搜索 + 数据量 >1w,或需要搜索建议/高亮/聚合
- 不需要 → 精确查询为主,或数据量 <1w 的简单 LIKE
**MQ(消息队列)决策:**
- 扫描:搜索耗时操作(发邮件 `smtp`/`gomail`、文件处理、外部 HTTP 调用)是否在请求链路中同步执行
- 必要 → 请求链路中有 >3s 的同步阻塞操作
- 推荐 → 有异步通知、日志收集、多服务解耦需求
- 不需要 → 无明显异步场景
**输出格式:**
```markdown
## 中间件评估
| 中间件 | 当前状态 | 建议 | 理由 |
|--------|---------|------|------|
| Redis | 未使用 | 推荐引入 | GetSysConfig() 每次查库,变更频率低 |
| MinIO | 未使用 | 推荐引入 | 文件存本地 ./uploads/,容器化有风险 |
| Elasticsearch | 未使用 | 暂不需要 | 搜索场景简单,数据量 <1w |
| MQ | 未使用 | 暂不需要 | 无明显异步阻塞场景 |
```
---
### 维度 3:[CODE] 代码质量与组件抽取
| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| **前端重复组件** | 搜索相似的模板结构(相同 el- 组件组合出现 ≥2 次) | 多页面有相同布局 → 应抽取公共组件 |
| **前端重复逻辑** | 搜索相同的 API 调用 + 分页 + 搜索模式 | ≥2 处相同 CRUD 模式 → 应抽取 composable |
| **后端重复代码** | 搜索 service 层相同的 查询+校验+更新 模式 | ≥3 个 service 相同模式 → 建议泛型封装 |
| **前后端重复定义** | 对比后端 struct/DTO 和前端 interface/type | 同一实体两端各定义,字段不一致 → 问题 |
| **上帝文件** | 按语言阈值检测超大文件 | 超过阈值 → 给出拆分建议 |
| **死代码** | 搜索未被 import 的 exported 函数、未使用的组件文件 | 存在 → 建议删除 |
| **硬编码** | 搜索魔法数字、硬编码 URL、写死的配置值 | 存在 → 建议提取常量或配置 |
**组件抽取建议输出格式:**
```markdown
## 组件抽取建议
| 当前位置 | 建议抽取为 | 复用次数 | 预计减少行数 |
|---------|-----------|---------|------------|
| views/user/Detail, views/order/Detail | components/DetailCard.vue | 3 | ~100 行 |
| api/user.ts, api/order.ts 的错误处理 | utils/request.ts | 8 | ~60 行 |
| service/user.go, service/order.go CRUD | pkg/base/service.go (泛型) | 4 | ~200 行 |
```
---
### 维度 4:[SUGAR] 语法糖与现代化写法
读取项目的语言版本后,按以下检查表扫描:
#### Go(读 go.mod 的 `go 1.xx`)
| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| 1.21+ | slices 包 | 手写 Contains/Filter/Map 工具函数 | `slices.Contains()` 等标准库 |
| 1.21+ | slog 结构化日志 | `log.Println` / `fmt.Println` | `slog.Info()` |
| 1.21+ | min/max 内置函数 | 手写 `if a > b { return a }` | `max(a, b)` |
| 1.22+ | range 整数 | `for i := 0; i < n; i++` | `for i := range n` |
| 1.22+ | http 路由增强 | 简单 mux + 手动路径匹配 | `http.HandleFunc("GET /api/{id}")` |
| 1.23+ | iter 迭代器 | 手写迭代逻辑 | `iter.Seq` / `iter.Seq2` |
#### Java(读 pom.xml 的 `<java.version>`)
| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| 17+ | record | 纯数据 class(只有 getter/setter) | `record UserDTO(String name, int age)` |
| 17+ | sealed class | 大量 instanceof 判断 | sealed + pattern matching |
| 17+ | switch 表达式 | 多层 if-else 或 switch-case + break | `switch` 表达式 + `->` |
| 17+ | text block | 多行字符串拼接 | `"""` 文本块 |
| 21+ | virtual threads | `new Thread()` / 自建线程池处理简单任务 | `Thread.ofVirtual()` |
#### Vue / TypeScript(读 package.json 版本)
| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| Vue 3.3+ | defineOptions | 单独的 `<script>` 块定义 name | `defineOptions({ name: 'Xxx' })` |
| Vue 3.4+ | defineModel | `props` + `emit('update:modelValue')` | `const model = defineModel<T>()` |
| Vue 3.5+ | useTemplateRef | `ref<HTMLElement>()` + `ref="xxx"` | `useTemplateRef('xxx')` |
| TS 5.0+ | satisfies | `as const` + 类型断言 | `satisfies` 操作符 |
| ES2023+ | 数组新方法 | `arr[arr.length - 1]` | `arr.at(-1)` / `findLast()` / `toSorted()` |
| ES2024+ | Object.groupBy | 手写 reduce 分组 | `Object.groupBy()` |
#### Python(读 pyproject.toml / runtime 版本)
| 版本要求 | 检查项 | 旧写法特征 | 新写法 |
|---------|--------|-----------|--------|
| 3.10+ | match-case | 长链 if-elif | `match` 语句 |
| 3.10+ | 联合类型语法 | `Union[int, str]` | `int \| str` |
| 3.12+ | f-string 增强 | 复杂表达式需要临时变量 | f-string 内嵌任意表达式 |
---
### 维度 5:[SEC] 安全漏洞修正
#### 静态扫描(始终执行)
| 漏洞类型 | 扫描模式 | 修正方式 |
|---------|---------|---------|
| SQL 注入 | `fmt.Sprintf("SELECT.*%s")` / 字符串拼接 SQL / MyBatis `${}` | 改用参数化查询 |
| 命令注入 | `exec.Command` 参数含用户输入且未校验 | 白名单校验 + 参数转义 |
| 路径穿越 | `filepath.Join(userInput)` 无 `filepath.Clean` + 前缀校验 | 添加路径规范化和前缀校验 |
| XSS | `v-html` / `innerHTML` 使用未转义的用户数据 | 使用 DOMPurify 或移除 v-html |
| 硬编码密钥 | `password` / `secret` / `token` / `apikey` 的字符串字面量赋值 | 移至环境变量或配置文件 |
| CORS 宽松 | `AllowAllOrigins: true` / `Access-Control-Allow-Origin: *` | 明确指定允许的 origin |
| 不安全加密 | `md5` / `sha1` 用于密码存储 / `math/rand` 用于安全场景 | bcrypt/argon2 + crypto/rand |
| 不安全反序列化 | `json.Unmarshal` 到 `interface{}` 后无类型断言 / `yaml.Unmarshal` 未限制 | 明确目标类型 |
#### 可选联网(WebSearch 可用时)
检查 `go.mod` / `package.json` / `pom.xml` 中的依赖版本,用 WebSearch 查询是否存在已知 CVE:
```
搜索格式:"{依赖名} {版本} CVE vulnerability"
仅报告 CVSS >= 7.0 的高危漏洞
给出升级建议版本
```
---
### 维度 6:[BEST] 业界实践参考
| 检查项 | 扫描方法 | 判定标准 |
|--------|---------|---------|
| 依赖版本 | 读 go.mod / package.json / pom.xml | 主要依赖落后 2+ 个大版本 → 建议升级 |
| 框架最佳实践 | 检查中间件配置 | Gin 缺 Recovery/Logger、GORM 缺慢查询日志 → 问题 |
| 项目结构 | 对比目录结构 | Go: 是否符合 Standard Layout;Vue: 是否按功能拆分 |
| API 设计 | 检查路由定义 | RESTful 不规范(动词路由、状态码不对)→ 建议 |
| 错误处理 | 搜索 error 处理方式 | Go: 未包装 error 丢失上下文;前端: 无全局拦截器 → 问题 |
| 日志规范 | 搜索日志调用 | 无结构化日志、无请求 tracing → 建议 |
| 配置管理 | 搜索配置加载方式 | 硬编码配置、无环境区分 → 问题 |
---
## 第 3 步:输出报告
### 优先级排序
```
[Critical] — SEC 安全漏洞、PERF N+1/全表扫描、功能缺陷
[Important] — UX 体验问题、CODE 重复代码、PERF 中间件建议
[Nice] — SUGAR 语法优化、BEST 实践建议
```
### 报告模板
```markdown
# 系统优化报告
## 项目概览
(第 1 步输出)
## 评估结果
### [Critical] 必须优化
1. **[维度]** `文件:行号` — 问题描述
→ 当前写法:...
→ 建议修正:...
### [Important] 建议优化
(同上格式)
### [Nice] 锦上添花
(同上格式)
## 组件抽取建议
| 当前位置 | 建议抽取为 | 复用次数 | 预计减少行数 |
|---------|-----------|---------|------------|
## 中间件评估
| 中间件 | 当前状态 | 建议 | 理由 |
|--------|---------|------|------|
## 语法糖升级
| 文件:行号 | 当前写法 | 建议写法 | 收益 |
|----------|---------|---------|------|
## 安全漏洞
| 文件:行号 | 漏洞类型 | 风险等级 | 修正方式 |
|----------|---------|---------|---------|
## 变更风险评估
| 优化项 | 风险等级 | 前置条件 |
|--------|---------|---------|
## 建议执行顺序
1. [低风险] ...
2. [中风险] ...
3. [高风险] ...
```
---
## 第 4 步:用户选择修复范围
报告输出后,使用 AskUserQuestion:
```
请选择修复方式:
1. 修复全部 Critical(推荐)
仅修复安全漏洞和严重性能问题。范围最小,风险最低。
2. 修复 Critical + Important
包含体验优化和代码重构。改动较大,
部分项可能影响现有行为。
3. 我来选择要修的项
逐项确认是否修复。
4. 仅保留报告
不做任何修改,仅保留报告供参考。
```
用户选择 4 则结束。选择 1/2/3 进入第 5 步。
---
## 第 5 步:逐项修复 + 逐项验证
### 改前准备
```bash
# 记录当前状态
git stash list # 确认 stash 干净
git status # 确认工作区状态
# 运行现有测试作为基线
# Go:
go test ./... 2>&1 | tail -20
# 前端:
npm test 2>&1 | tail -20 # 如果有
npm run build 2>&1 | tail -5
```
记录基线结果(通过数、失败数、build 状态)。
### 逐项修复流程
对每一个待修复项,按以下流程执行:
```
1. 暂存当前状态
git stash push -m "optimize-backup-{序号}"
2. 执行修复
Edit 相关文件
3. 验证
├── 有测试 → 运行相关测试,对比基线
│ ├── 通过 → git stash drop(丢弃备份),继续下一项
│ └── 失败 → 回滚:
│ git checkout -- {修改的文件}
│ git stash pop
│ 标记该项为「需人工处理」,说明失败原因
│
└── 无测试 → 编译/构建验证
├── Go: go build ./...
├── 前端: npx vue-tsc --noEmit(类型检查)
├── 通过 → 继续,但标记为「无测试覆盖,需手动验证」
│ 并给出手动验证步骤:
│ "请手动验证:打开 XX 页面 → 执行 XX 操作 → 预期 XX"
└── 失败 → 回滚同上
```
### 注意事项
- 一项一改,一项一验证,不批量修改
- SEC 类修复优先级最高,先改安全问题
- SUGAR 类修复风险最低,最后改
- 每完成一项,报告进度
---
## 第 6 步:最终验证 + 变更汇总
### 全量验证
```bash
# 后端
go build ./...
go vet ./...
go test ./...
# 前端
npm run build
npx vue-tsc --noEmit # 类型检查
# Java(如有)
mvn compile
mvn test
# Python(如有)
python -m pytest
```
### 输出对比表
```markdown
## 验证结果
| 检查项 | 改前 | 改后 | 状态 |
|--------|------|------|------|
| 后端编译 | ✅ | ✅ | 通过 |
| 后端测试 | 15/15 | 15/15 | 通过 |
| 前端构建 | ✅ | ✅ | 通过 |
| 类型检查 | ✅ | ✅ | 通过 |
## 变更汇总
### 已修复
| 序号 | 维度 | 文件 | 修改内容 |
|------|------|------|---------|
### 需人工处理
| 序号 | 维度 | 文件 | 原因 |
|------|------|------|------|
### 无测试覆盖(请手动验证)
| 序号 | 文件 | 验证步骤 |
|------|------|---------|
```
+3 -15
View File
@@ -61,22 +61,10 @@
"description": "结构化开发框架:TDD、系统化调试、头脑风暴、子代理驱动开发"
},
{
"id": "planning-with-files",
"marketplace": "OthmanAdi",
"name": "Planning with Files",
"description": "Manus 风格持久化 markdown 规划:task_plan / findings / progress 三文件模式"
},
{
"id": "best-minds",
"marketplace": "brucexo",
"name": "Best Minds",
"description": "模拟器思维:让 Claude 模拟领域顶级专家视角分析和回答问题"
},
{
"id": "skill-creator",
"id": "code-review",
"marketplace": "claude-plugins-official",
"name": "Skill Creator",
"description": "技能开发工具包:创建、评估、优化、基准测试 Claude Code skills"
"name": "Code Review",
"description": "多审查者代码审查:4 个独立审查视角 + 置信度评分"
}
]
}
+5
View File
@@ -65,6 +65,11 @@ paths: "**/*"
**调用声明**:`> 🔍 LSP: gopls - Find References`
### 5. 上下文管理
- 大文件用 Grep 定位 + Read 局部读取,避免整文件加载
- 长任务中旁路问题建议用户使用 `/btw`,不污染主对话历史
- 感知到上下文较满时,提醒用户可 `/compact` 压缩或开新会话
---
## 📂 大文件处理
+1
View File
@@ -132,6 +132,7 @@ func TestAdd(t *testing.T) {
| 未预分配 slice | `make([]T, 0, cap)` |
| N+1 查询 | 批量查询 + 预加载 |
| 无限制并发 | 使用 semaphore 或 worker pool |
| Raw SQL 别名用了保留字 | 避免 `year_month`/`order`/`status`/`rank` 等 MySQL 保留字做别名 |
```bash
# 性能分析
+34
View File
@@ -388,6 +388,40 @@ public Result list(@RequestParam @Min(1) int page,
---
## Native SQL 规范
### 别名避免 MySQL 保留字
`@Query(nativeQuery = true)` 中的列别名如果是 MySQL 保留字,会导致语法错误。
**高频踩坑保留字**:`year_month`, `order`, `status`, `key`, `value`, `name`, `type`, `date`, `time`, `rank`, `range`, `rows`, `column`, `user`, `role`, `group`
| 规则 | 说明 |
|------|------|
| ✅ 使用短别名或缩写 | `ym`, `ord_status`, `cnt` |
| ✅ 或用反引号转义 | `` `year_month` `` |
| ❌ 禁止直接用保留字做别名 | `as year_month`、`as order`、`as rank` |
```java
// ❌ year_month 是 MySQL 保留字(INTERVAL YEAR_MONTH)
@Query(value = """
SELECT DATE_FORMAT(o.order_date, '%Y-%m') as year_month,
COUNT(*) as cnt
FROM orders o
GROUP BY year_month
""", nativeQuery = true)
// ✅ 改用非保留字别名
@Query(value = """
SELECT DATE_FORMAT(o.order_date, '%Y-%m') as ym,
COUNT(*) as cnt
FROM orders o
GROUP BY ym
""", nativeQuery = true)
```
---
## 日志规范
```java
@@ -1,5 +1,6 @@
---
paths: "**/*.{go,java,py,ts,js}"
name: redis-safety
description: 当用户操作 Redis 相关代码(go-redis、Jedis、redis-py、ioredis)时触发。提供 Redis 安全与性能规范。
---
# Redis 安全规范
+2 -10
View File
@@ -1,15 +1,7 @@
---
name: ui-ux-pro-max
description: 专业级 UI/UX 设计规范,生成高质量、有辨识度的前端界面。覆盖视觉层次、配色体系、排版节奏、交互微动效、响应式适配等。
version: v1.0
paths:
- "**/*.vue"
- "**/*.tsx"
- "**/*.jsx"
- "**/*.css"
- "**/*.scss"
- "**/*.less"
- "**/*.html"
description: 专业级 UI/UX 设计规范,需要高质量界面设计时手动触发或描述"设计感/专业UI"时自动触发。覆盖视觉层次、配色体系、排版节奏、交互微动效、响应式适配等。日常前端开发由 frontend-dev skill + frontend-design 插件覆盖。
version: v1.1
---
# UI/UX Pro Max — 专业级界面设计规范
+16 -1
View File
@@ -49,7 +49,22 @@ logs/
*.swp
*.swo
*~
.DS_Store
# AI coding assistants (remove lines for files your team shares)
.claude/
.gemini/
.cursor/
.cursorrules
.windsurf/
.windsurfrules
.codex/
.aider*
.cline/
.clinerules
.roo/
.roomodes
.rooignore
.kilo/
# OS generated files
.DS_Store
+26
View File
@@ -0,0 +1,26 @@
# Codex Global Guidance
## 工作方式
- 先阅读相关代码、配置和脚本,再下结论。
- 优先做能解决问题的最小改动。
- 优先复用现有模式,再考虑新增抽象。
- 不主动扩需求;只有在安全完成当前任务必须时才扩大改动范围。
## 质量要求
- 将错误行为、类型问题、缺失校验、缺失错误处理、明显回归视为真实问题。
- 不通过修改测试来掩盖错误实现。
- 改动后做受影响范围内最小但有意义的验证。
## 安全
- 对破坏性、不可逆或环境敏感操作,先说明风险与影响范围。
- 优先选择可回滚、可验证、影响面更小的步骤。
- 不确定时先收集更多上下文,再执行变更。
## 分层
- 语言和框架规范交给对应 skills。
- fix、review、design、requirement、commit-msg、optimize、status、new-feature、project-init 这类流程交给显式 skills。
- 审批和越权命令控制交给 rules。
@@ -0,0 +1,71 @@
# Prompt before mutating repository state or package state.
prefix_rule(
pattern = ["git", ["add", "commit", "push", "tag"]],
decision = "prompt",
justification = "Git write operations should stay user-confirmed.",
match = [
"git add .",
"git commit -m fix",
"git push origin main",
"git tag v1.0.0",
],
)
prefix_rule(
pattern = [["npm", "pnpm", "yarn"], ["install", "add", "remove", "update"]],
decision = "prompt",
justification = "Dependency changes can alter the workspace and lockfiles.",
match = [
"npm install",
"pnpm add zod",
"yarn remove lodash",
],
)
prefix_rule(
pattern = [["systemctl", "service", "launchctl", "docker", "kubectl", "mysql", "psql", "sqlite3"]],
decision = "prompt",
justification = "Service, container, or database operations can have a broad blast radius.",
match = [
"systemctl restart nginx",
"docker compose down",
"kubectl delete pod foo",
"sqlite3 app.db",
],
)
prefix_rule(
pattern = ["rm"],
decision = "forbidden",
justification = "Use safer, reviewed file edits instead of direct deletion commands.",
match = ["rm -rf tmp"],
)
prefix_rule(
pattern = ["sudo", "rm"],
decision = "forbidden",
justification = "Do not run privileged delete commands automatically.",
match = ["sudo rm -rf /tmp/foo"],
)
prefix_rule(
pattern = ["git", "reset", "--hard"],
decision = "forbidden",
justification = "Hard reset is destructive. Use a safer alternative after explicit review.",
match = ["git reset --hard HEAD~1"],
)
prefix_rule(
pattern = ["git", "clean", "-fd"],
decision = "forbidden",
justification = "Force-clean removes untracked files destructively.",
match = ["git clean -fd"],
)
prefix_rule(
pattern = [["mkfs", "dd", "shutdown", "reboot"]],
decision = "forbidden",
justification = "Highly destructive system-level commands must not run automatically.",
match = ["reboot", "shutdown -r now"],
)
+35
View File
@@ -0,0 +1,35 @@
# Read-only, commonly useful commands can run outside the sandbox without an
# extra prompt when the sandbox blocks them.
prefix_rule(
pattern = ["pwd"],
decision = "allow",
justification = "Read-only working directory inspection is safe.",
match = ["pwd"],
)
prefix_rule(
pattern = ["ls"],
decision = "allow",
justification = "Directory listing is read-only.",
match = ["ls", "ls -la"],
)
prefix_rule(
pattern = ["rg"],
decision = "allow",
justification = "ripgrep is the preferred read-only search tool.",
match = ["rg TODO src", "rg --files ."],
)
prefix_rule(
pattern = ["git", ["status", "diff", "show", "log"]],
decision = "allow",
justification = "Common Git inspection commands are read-only.",
match = [
"git status --short",
"git diff --stat",
"git show HEAD~1",
"git log --oneline -5",
],
)
+26
View File
@@ -0,0 +1,26 @@
# .codex 同步映射
本目录是项目级权威源,不直接作为 Codex 原生仓库入口使用。未来 `tools/sync-config.sh` 接入 `.codex` 时,建议按以下映射部署:
| 源路径 | 目标路径 | 策略 |
|------|------|------|
| `.codex/global/AGENTS.md` | `~/.codex/AGENTS.md` | 受管区块合并,不整文件覆盖 |
| `.codex/global/rules/*.rules` | `~/.codex/rules/` | 增量复制,文件名保留 `cc-` 前缀 |
| `.codex/skills/*` | `~/.agents/skills/` | 增量复制,保留目录名 |
| `.codex/profiles/*.toml` | `~/.codex/config.toml` | 受管区块合并,只追加具名 profiles |
## 不同步内容
- `.codex/templates/`
- `.codex/tasks/`
- `.codex/manifests/`
## 明确禁止
- 不删除 `~/.codex/` 运行态文件
- 不覆盖 `~/.codex/auth.json`
- 不覆盖 `~/.codex/history.jsonl`
- 不覆盖日志、sqlite、cache
- 不改用户现有默认 provider/model/base_url
- 不写入项目私有绝对路径
- 不覆盖用户已有 profile 同名之外的其他配置
+6
View File
@@ -0,0 +1,6 @@
# 日常主力 profile:在质量和速度之间折中。
[profiles."cc-balanced"]
model = "gpt-5.3-codex"
review_model = "gpt-5.3-codex"
model_reasoning_effort = "medium"
+6
View File
@@ -0,0 +1,6 @@
# 深度分析 profile:复杂审查、重设计、长链路排障使用。
[profiles."cc-deep"]
model = "gpt-5.4"
review_model = "gpt-5.4"
model_reasoning_effort = "xhigh"
+6
View File
@@ -0,0 +1,6 @@
# API key 环境下的“快模式” profile。
# 不依赖官方 Fast mode credits,而是用更快的 Codex 模型。
[profiles."cc-fast-api"]
model = "codex-mini-latest"
review_model = "codex-mini-latest"
+27
View File
@@ -0,0 +1,27 @@
---
name: cc-bash-style
description: Bash、Shell、Dockerfile、Makefile 与命令片段规范,适用于脚本修改、命令编写和文档中的 shell 示例;不负责运维审批策略。
---
# CC Bash Style
在编写或修改 shell 脚本、Dockerfile、Makefile、命令示例时,使用本技能保持脚本风格一致且可维护。
不要用于:
- 运维风险评估或审批判断
- 语言无关的通用编码原则
- 正式 review 或 debug 工作流
## 核心规则
- 保持脚本直接、可读、可复制执行。
- 注释单独成行,不写行尾注释。
- 优先使用清晰的 heredoc、`tee` 和分步命令。
- 避免不必要的 shell 花活和难以审查的复合命令。
## 按需展开
- 注释规范:`references/bash-comments.md`
- heredoc 使用:`references/heredoc.md`
- `tee` 写入:`references/tee-write.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Bash Style"
short_description: "Shell、Dockerfile、Makefile 与命令片段写法规范。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,5 @@
# Bash 注释规范
- 注释单独成行,避免行尾注释。
- 注释描述意图、边界和风险,不复述显而易见的语句。
- 对危险命令,注释应解释影响范围或前置条件。
@@ -0,0 +1,5 @@
# Heredoc
- 多行文本优先使用清晰的 heredoc,而不是复杂的多层转义。
- 需要字面量时使用带引号的结束标记,例如 `<<'EOF'`。
- heredoc 适合模板、配置片段和多行脚本,不适合掩盖复杂控制流。
@@ -0,0 +1,5 @@
# tee 写入
- 需要写文件又想保留可见输出时,优先 `tee`。
- 需要权限提升时,优先 `sudo tee`,避免 `sudo echo > file` 这类误用。
- 重写和追加要明确区分:`tee` vs `tee -a`。
+35
View File
@@ -0,0 +1,35 @@
---
name: commit-msg
description: 结构化 git commit message 生成工作流,适用于显式 commit message、提交说明或 commit-msg 场景;不负责实际执行 git commit。
---
# Commit Msg
当用户明确要求生成 commit message、整理提交说明,或提到 commit-msg 时,使用本技能。
不要用于:
- 自动执行 `git add` 或 `git commit`
- 代替正式 code review
- 生成 release notes 或 changelog
## 核心方式
1. 默认先看已暂存变更;用户明确说 `all`、全部变更或包含未暂存时,再看整个工作区 diff。
2. 先判断这批改动是否适合一个提交;过于混杂时,先提醒拆分。
3. 根据改动意图归类为 `feat`、`fix`、`refactor`、`style`、`docs`、`test` 或 `chore`。
4. 先给一条可直接使用的 subject,再给 2-5 条 body 要点。
5. 顺带列出主要变更文件,帮助用户判断 message 是否过宽。
## 输出要求
- 使用 Conventional Commit 风格:`<type>: <subject>`
- `subject` 简洁聚焦,不堆砌文件名
- `body` 使用中文 flat bullets,说明核心改动
- 不加 emoji、AI 声明或 `Co-Authored-By`
- 不替用户执行提交命令
## 按需展开
- 类型选择:`references/commit-types.md`
- 格式约束:`references/message-format.md`
@@ -0,0 +1,6 @@
interface:
display_name: "commit-msg"
short_description: "显式生成 Git commit message,默认分析 staged diff。"
default_prompt: "Use $commit-msg to generate a git commit message for the current change set, preferring staged diff unless the user asks for all changes."
policy:
allow_implicit_invocation: false
@@ -0,0 +1,17 @@
# Commit Types
按“改动意图”而不是按文件后缀选类型:
- `feat`: 新增用户可感知功能
- `fix`: 修复错误行为、回归或缺陷
- `refactor`: 不改变外部行为的结构调整
- `style`: 纯格式或排版调整,不影响逻辑
- `docs`: 文档、注释、说明更新
- `test`: 新增或调整测试
- `chore`: 构建、依赖、配置、脚手架或杂务
若一批改动同时包含多个意图:
- 先选主意图
- 若没有明显主意图,提醒用户拆分提交
- 不要为了凑类型而把混杂改动硬写成 `feat`
@@ -0,0 +1,30 @@
# Message Format
默认检查顺序:
1. `git diff --cached --stat`
2. `git diff --cached`
3. 用户明确要求 `all` 时,再看 `git diff --stat` 和 `git diff`
输出结构:
```markdown
## 建议的 Commit Message
<type>: <subject>
- 变更点 1
- 变更点 2
## 变更文件
| 文件 | 说明 |
|------|------|
| path/to/file | 核心改动 |
```
约束:
- `subject` 保持单一主题
- `body` 只写用户真正关心的行为变化
- 如果 staged 为空且用户也没要求 `all`,先明确说明输入为空
+38
View File
@@ -0,0 +1,38 @@
---
name: cc-core-defensive
description: 通用防御性编码规范,适用于跨语言代码修改中的最小改动、边界控制和定向验证;不负责语言细节、正式 review 或结构化 debug。
---
# CC Core Defensive
在修改现有代码、配置或脚本时,优先使用本技能控制改动范围、决策方式和验证深度。
不要用于:
- 语言或框架细节
- 正式 code review 工作流
- 结构化 debug 工作流
- 生产环境或系统级操作安全
## 核心规则
- 优先做最小有效改动。
- 优先复用现有模式,再考虑新抽象。
- 根因清楚时修根因;根因不清楚时先继续收集证据。
- 不修改测试去适配错误实现。
- 缺失校验、缺失错误处理、明显回归都算真实问题。
- 改动后做受影响范围内最小但有意义的验证。
## 工作方式
1. 先读相关代码路径,再决定怎么改。
2. 明确当前问题边界和直接影响面。
3. 做最小改动。
4. 做定向验证。
5. 若必须扩大范围,先明确说明原因。
## 按需展开
- 边界判断:`references/change-boundary.md`
- 验证深度:`references/verification.md`
- 决策原则:`references/decision-principles.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Core Defensive"
short_description: "通用防御性编码:最小改动、边界控制、定向验证。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,6 @@
# 改动边界
- 只为解决当前问题所必需的代码扩散,属于合理范围。
- 为了“顺手更整洁”而重构无关模块,不属于合理范围。
- 一个问题涉及多处文件时,按调用链和影响面判断,不按文件数量机械判断。
- 如果扩大范围能显著降低风险,需要先明确说明理由,再实施。
@@ -0,0 +1,7 @@
# 决策原则
- 简单方案优先于复杂方案。
- 复用优先于新建抽象。
- 局部修复优先于整体重构。
- 有明确收益前,不主动升级结构复杂度。
- 证据不足时,先收集上下文,不拍脑袋认定根因。
@@ -0,0 +1,6 @@
# 验证深度
- 小改动:优先跑局部测试、语法检查或最小命令验证。
- 配置改动:至少做语法或结构有效性检查。
- 行为修复:优先回测原始问题路径。
- 无法验证时,必须说明未验证原因、潜在风险和建议的后续检查。
+28
View File
@@ -0,0 +1,28 @@
---
name: design
description: 结构化技术设计工作流,适用于显式 design doc 或 checklist 生成;不负责需求盘问、bug 修复或正式代码审查。
---
# Design
当用户明确要求 design、design doc 或 design checklist 时,使用本技能。
不要用于:
- 需求挖掘或需求拷问
- bug 修复
- 正式 code review
- 语言实现细节
## 核心方式
1. 明确目标、边界和约束。
2. 先识别关键 tradeoff,再组织方案。
3. 需要输出文档时使用 doc 模板。
4. 需要结构化检查时使用 checklist 模板。
## 按需展开
- 设计范围:`references/design-scope.md`
- Tradeoff 思考:`references/tradeoff-thinking.md`
- Checklist 用法:`references/checklist-usage.md`
@@ -0,0 +1,6 @@
interface:
display_name: "design"
short_description: "显式技术设计文档与设计检查清单工作流。"
default_prompt: "Use $design to clarify goal, scope, constraints, and tradeoffs before producing the right design doc or checklist."
policy:
allow_implicit_invocation: false
@@ -0,0 +1,5 @@
# Checklist 用法
- checklist 适合用于审视方案完整性,不替代设计正文。
- 检查点要聚焦关键风险、边界和验收条件。
- 不要用过长 checklist 代替清晰结论。
@@ -0,0 +1,5 @@
# 设计范围
- 先明确问题要解决什么,不解决什么。
- 约束包括技术栈、兼容性、上线方式、性能边界和实施成本。
- 没必要时,不把实现细节写成架构升级。
@@ -0,0 +1,5 @@
# Tradeoff 思考
- 说明每个关键选择的收益、成本和放弃项。
- 优先对真实矛盾做取舍,不做泛泛而谈的优缺点罗列。
- 用户未要求时,不把设计写成论文。
@@ -0,0 +1,11 @@
## Problem Definition
## Scope Boundary
## Data / Interface Impact
## Rollout / Migration
## Risks
## Verification
@@ -0,0 +1,13 @@
## Goal
## Scope
## Constraints
## Options
## Decision
## Risks
## Verification
+49
View File
@@ -0,0 +1,49 @@
---
name: fix
description: 结构化 bug 修复工作流,适用于显式 fix 或 debug 场景;不负责语言规范、正式 review 或运维审批。
---
# Fix
当用户明确要求修复问题、定位 bug 或进入 debug 流程时,使用本技能。
不要用于:
- 普通功能实现
- 语言或框架风格规范
- 正式 code review
- 环境级风险判断
## 模式
### Fix Mode
适用于问题边界较清楚、可以直接修复的场景。
1. 确认期望行为和当前症状。
2. 阅读相关代码路径。
3. 做最小有效修复。
4. 对原始问题路径做定向验证。
5. 说明残余风险。
### Debug Mode
适用于症状明确但根因不清楚的场景。
1. 复现或描述症状。
2. 提出具体假设。
3. 用低成本检查验证假设。
4. 基于证据做最小修复。
5. 回测原始问题路径。
## 输出要求
- 明确区分症状、假设、修复和验证。
- 没有证据时,不声称已经找到根因。
- 不因调试过程顺手扩大问题范围。
## 按需展开
- 直接修复:`references/fix-mode.md`
- 结构化排查:`references/debug-mode.md`
- 修复后验证:`references/verification-after-fix.md`
+6
View File
@@ -0,0 +1,6 @@
interface:
display_name: "fix"
short_description: "显式 bug 修复与结构化 debug 工作流。"
default_prompt: "Use $fix to confirm the expected behavior and current symptom before reading the relevant code and proposing a minimal fix."
policy:
allow_implicit_invocation: false
@@ -0,0 +1,6 @@
# Debug Mode
- 先把症状说清楚,再提假设。
- 每次验证都应服务于某个具体假设。
- 优先做低成本、高信息量的检查。
- 根因未证实时,明确说明当前证据只支持到什么程度。
@@ -0,0 +1,5 @@
# Fix Mode
- 问题边界清楚时,优先直接修复,不把简单问题升级成重型排障。
- 先改最有把握的直接原因,再验证。
- 修复后优先验证原始失败路径和直接相邻分支。
@@ -0,0 +1,6 @@
# 修复后验证
- 先验证原始故障路径。
- 再验证直接受影响的相邻路径。
- 只有在风险较高时才扩大到更大范围回归。
- 无法验证时,说明原因、风险和建议的后续验证。
@@ -0,0 +1,9 @@
## Symptom
## Cause
## Change
## Verification
## Residual Risk
+31
View File
@@ -0,0 +1,31 @@
---
name: cc-frontend-dev
description: Vue、React、TypeScript、CSS 与前端 UI 规范,适用于组件边界、样式、可访问性和前端测试;不负责 review、debug 或运维流程。
---
# CC Frontend Dev
在编辑前端代码时使用本技能,重点处理组件边界、UI 一致性、TypeScript、CSS 和可访问性。
不要用于:
- 正式 review 或 fix/debug 工作流
- 运维风险判断
- 与前端无关的后端语言细节
## 核心规则
- 保持与现有设计系统和项目视觉语言一致。
- 组件拆分按职责和复用边界,而不是机械按行数。
- TypeScript 类型要明确,不用随意 `any`。
- CSS 组织要清晰,避免不必要的全局污染。
- 页面和组件在桌面与移动端都应可用。
## 按需展开
- UI 风格:`references/ui-style.md`
- React/Vue:`references/react-vue.md`
- TypeScript:`references/typescript.md`
- CSS:`references/css.md`
- 可访问性:`references/accessibility.md`
- 测试:`references/testing.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Frontend Dev"
short_description: "Vue/React/TS/CSS、组件边界与 UI 规范。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,5 @@
# 可访问性
- 表单、按钮、链接和弹层要有清晰语义。
- 键盘交互、focus 状态和可读文本不能缺失。
- 图标或视觉状态不应成为唯一信息来源。
@@ -0,0 +1,5 @@
# CSS
- 样式按组件或语义边界组织,避免无序堆叠。
- 共享变量、token 和公共样式要集中管理。
- 尽量减少意外全局覆盖和层级过深的选择器。
@@ -0,0 +1,5 @@
# React / Vue
- 组件边界按职责、数据流和复用关系划分。
- 先保持现有框架惯用写法和团队模式。
- 尽量让状态来源、事件流和副作用位置清晰可读。
@@ -0,0 +1,5 @@
# 前端测试
- 优先验证用户可见行为而不是内部实现。
- 改动组件时至少覆盖关键交互、状态和渲染分支。
- 对布局或样式敏感变更,优先做局部可验证检查。
@@ -0,0 +1,5 @@
# TypeScript
- 类型优先显式,避免滥用 `any`。
- 公共数据结构、组件 props 和外部接口要有稳定类型。
- 需要折中时,优先局部类型收窄而不是全局放松。
@@ -0,0 +1,5 @@
# UI 风格
- 先继承现有设计系统,再考虑差异化表达。
- 不用无目的的默认模板审美。
- 信息层级、留白、色彩和状态表达要一致。
+30
View File
@@ -0,0 +1,30 @@
---
name: cc-go-dev
description: Go 开发规范,适用于 Go 源码、包结构、错误处理、并发和测试相关任务;不负责 review、debug 或运维流程。
---
# CC Go Dev
在编辑或审查 Go 代码时使用本技能,重点处理 idiomatic Go、包结构、错误处理、并发与测试。
不要用于:
- 正式 review 或 fix/debug 工作流
- 运维风险判断
- 与 Go 无关的通用改动边界
## 核心规则
- 保持实现简单、显式、idiomatic。
- 优先清晰的包边界和职责拆分。
- 错误必须处理,并保留足够上下文。
- 并发要考虑生命周期、取消和数据竞争。
- 测试优先覆盖受影响行为。
## 按需展开
- 风格:`references/style.md`
- 错误处理:`references/errors.md`
- 并发:`references/concurrency.md`
- 测试:`references/testing.md`
- 项目结构:`references/project-shape.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Go Dev"
short_description: "Go 包结构、错误处理、并发与测试规范。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,5 @@
# Go 并发
- 启动 goroutine 前先想清楚谁来等待、谁来取消。
- 优先使用 `context.Context` 控制生命周期。
- 涉及共享状态时,明确同步策略并考虑 `go test -race`。
@@ -0,0 +1,5 @@
# Go 错误处理
- 错误不能忽略。
- 返回错误时补充上下文,必要时使用 `%w` 包装。
- 需要分支判断时,用 `errors.Is` 或 `errors.As`。
@@ -0,0 +1,5 @@
# Go 项目结构
- 入口、业务、数据访问和模型边界要清晰。
- 公共代码只有在跨边界复用确实成立时才抽到公共层。
- 同包拆文件优先按职责,不要用无语义的文件名分组。
@@ -0,0 +1,5 @@
# Go 风格
- 包名保持简短、全小写、语义明确。
- 导出与未导出标识按真实使用边界区分。
- 优先让调用方易读,而不是为抽象而抽象。
@@ -0,0 +1,5 @@
# Go 测试
- 受影响逻辑优先补局部测试。
- 优先表驱动测试和清晰命名。
- 需要并发保障时,考虑竞态检测。
+31
View File
@@ -0,0 +1,31 @@
---
name: cc-java-dev
description: Java 与 Spring 开发规范,适用于异常处理、集合、并发、服务分层和测试;不负责 review、debug 或运维流程。
---
# CC Java Dev
在编辑或审查 Java、Spring 代码时使用本技能,重点处理分层、异常、集合、并发和测试。
不要用于:
- 正式 review 或 fix/debug 工作流
- 运维风险判断
- 语言无关的通用边界控制
## 核心规则
- 代码结构优先清晰、职责单一。
- 异常处理要保留业务语义和上下文。
- 集合和对象的可变性要明确。
- 并发代码要显式管理线程池和共享状态。
- 测试优先覆盖行为和边界分支。
## 按需展开
- 风格:`references/style.md`
- Spring:`references/spring.md`
- 异常:`references/exceptions.md`
- 集合:`references/collections.md`
- 并发:`references/concurrency.md`
- 测试:`references/testing.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Java Dev"
short_description: "Java/Spring 分层、异常、集合、并发与测试规范。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,5 @@
# 集合与可变性
- 返回集合时明确是否允许外部修改。
- 需要只读语义时优先不可变集合。
- 注意空集合与 `null` 的边界语义。
@@ -0,0 +1,5 @@
# Java 并发
- 使用线程池时显式配置大小、队列和拒绝策略。
- 共享可变状态需要同步策略。
- 异步流程要考虑超时、取消和异常传播。
@@ -0,0 +1,5 @@
# 异常处理
- 不吞异常。
- 保留业务语义,不要把所有问题都包装成同一种异常。
- 记录或返回异常时补充必要上下文。
@@ -0,0 +1,5 @@
# Spring
- 控制器、服务、仓储职责清晰分层。
- 配置、事务和依赖注入要尽量显式。
- 谨慎引入隐式框架魔法,优先可读性。
@@ -0,0 +1,5 @@
# Java 风格
- 类、方法和字段命名保持明确语义。
- 只在真实复用成立时抽象父类或公共基类。
- 业务层、持久层、接口层职责分开。
@@ -0,0 +1,5 @@
# Java 测试
- 优先验证业务行为而不是实现细节。
- 单元测试和集成测试边界要清晰。
- 对异常路径和边界值保持覆盖。
+43
View File
@@ -0,0 +1,43 @@
---
name: new-feature
description: 结构化新功能交付工作流,适用于显式 new feature、从需求到实现的一站式功能开发或恢复未完成任务场景;通过项目内 .codex/tasks/ 持久化状态。
---
# New Feature
当用户明确要求开发新功能、完整推进一个 feature,或提到 `new-feature`、恢复未完成任务时,使用本技能。
不要用于:
- 小范围 bug 修复
- 纯需求文档或纯设计文档
- 只做一次性代码评审
## 核心方式
1. 先检查 `.codex/tasks/` 是否已有未完成任务;需要恢复时,优先续做而不是重复开题。
2. 先做 3-5 个关键澄清问题,补齐边界、异常和依赖。
3. 再产出实现范围、关键决策和步骤计划;方向明显不止一种时先确认。
4. 使用 `templates/task.md` 在项目内持久化任务状态,边做边更新。
5. 按步骤实现,每完成一步就更新状态、已改文件和验证结果。
6. 完成后做一次 quick review 视角的自查,再归档任务文件。
## 协作约束
- 需要需求深挖时,套用 `requirement` 的方式
- 需要技术设计时,套用 `design` 的方式
- 完成前自审时,套用 `cc-review` 的优先级
- 语言和框架细节交给对应语言 skills
## 输出要求
- 明确区分需求澄清、设计决定、实现步骤和验证结果
- 若当前信息不足以安全开工,先问关键问题
- 任务文件始终与当前进度保持一致
- 完成后说明残余风险和后续建议
## 按需展开
- 恢复策略:`references/resume-policy.md`
- 编排方式:`references/orchestration.md`
- 任务模板:`templates/task.md`
@@ -0,0 +1,6 @@
interface:
display_name: "new-feature"
short_description: "显式推进新功能:需求澄清、设计、实现、验证与恢复。"
default_prompt: "Use $new-feature to check for resumable tasks in .codex/tasks before asking the minimum clarifying questions for scope, edge cases, and dependencies."
policy:
allow_implicit_invocation: false
@@ -0,0 +1,18 @@
# Orchestration
推荐顺序:
1. 需求澄清
2. 设计和范围确认
3. 创建任务文件
4. 分步实现
5. 定向验证
6. Quick review 视角自查
7. 归档任务文件
编排原则:
- 小步推进,不把所有工作压成一个大提交
- 每一步都要能解释“为什么现在做”
- 修改范围失控时,先回到任务文件收敛范围
- 只有用户确认方向后,才进入大改动实现
@@ -0,0 +1,14 @@
# Resume Policy
恢复优先级:
1. 用户显式要求 `--resume` 或“继续上次任务”
2. `.codex/tasks/` 中存在明显未完成任务
3. 两者都没有时,开始新任务
处理原则:
- 未完成任务只有一个时,直接询问是否继续
- 有多个未完成任务时,列出名称和更新时间,让用户选
- 用户拒绝恢复时,把旧任务移到 `.codex/tasks/archived/` 后再开始新任务
- 不要静默覆盖旧任务文件
@@ -0,0 +1,27 @@
# 任务:{{feature_name}}
状态:进行中
创建:{{created_at}}
更新:{{updated_at}}
## 需求摘要
- {{summary}}
## 关键决策
- 待补充
## 实现计划
- [ ] 1. {{step_1}}
- [ ] 2. {{step_2}}
- [ ] 3. {{step_3}}
## 已修改文件
- 暂无
## 验证
- 待补充
+37
View File
@@ -0,0 +1,37 @@
---
name: cc-ops-safety
description: Shell、服务、容器、数据库、部署或环境敏感操作的安全规范,适用于风险说明、回滚思路和影响面控制;不负责语言细节。
---
# CC Ops Safety
当任务涉及命令执行、系统配置、部署、服务重启、容器操作、数据库写入或环境敏感行为时,使用本技能。
不要用于:
- 普通语言风格规范
- 正式 review 输出格式
- 一般性编码实现细节
## 核心规则
- 优先选择影响面更小的步骤。
- 先做只读检查,再做写入动作。
- 对不可逆或高风险动作,先说明风险和回滚思路。
- 明确区分本地、测试、预发、生产环境。
- 能用更安全的读操作降低不确定性时,先读后改。
## 工作方式
1. 判断环境和 blast radius。
2. 区分检查类动作和修改类动作。
3. 对非低风险动作,先说明风险与回滚。
4. 尽量分步、可回退地执行。
5. 变更后做最小必要验证。
## 按需展开
- 风险评估:`references/risk-assessment.md`
- 回滚思路:`references/rollback-thinking.md`
- 环境边界:`references/environment-scope.md`
- 破坏性动作:`references/destructive-actions.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Ops Safety"
short_description: "环境敏感操作的风险说明、回滚思路与影响面控制。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,5 @@
# 破坏性动作
- 删除、批量覆盖、重启、迁移、权限变更、DDL 和批量数据写入都属于高关注动作。
- 对这类动作,先说明影响,再执行。
- 能拆成“先检查、后执行”两步时,优先拆开。
@@ -0,0 +1,5 @@
# 环境边界
- 本地命令默认按本地环境理解。
- 远程主机、容器、数据库实例必须显式说明目标环境。
- 不要把本地测试命令和生产操作混为一谈。
@@ -0,0 +1,6 @@
# 风险评估
- 先判断是只读还是写入。
- 判断影响对象:单文件、单服务、单机、多机、持久数据。
- 判断环境:本地、测试、预发、生产。
- 判断可逆性:是否能快速回滚,是否需要备份或快照。
@@ -0,0 +1,5 @@
# 回滚思路
- 在执行变更前先想清楚回滚路径。
- 能天然回滚的操作优先;不能天然回滚时,先准备备份或恢复步骤。
- 回滚步骤需要覆盖配置恢复、服务重启和效果验证。
+37
View File
@@ -0,0 +1,37 @@
---
name: optimize
description: 结构化系统优化扫描工作流,适用于显式 optimize、性能评估、体验评估或代码质量扫描场景;默认输出问题与建议,不直接改代码。
---
# Optimize
当用户明确要求 optimize、做优化扫描,或只看 `ux`、`perf`、`code` 某一类改进时,使用本技能。
不要用于:
- 直接修复单个 bug
- 正式 security review
- 无证据的大规模重构
- 代替需求分析或设计文档
## 核心方式
1. 先限定范围:全量、前端、后端或指定目录。
2. 范围很大时,先给规模预估和热点,再决定是否全扫。
3. 根据模式组织检查项:`full`、`ux`、`perf`、`code`。
4. 所有结论都要落在具体代码证据上,不做空泛建议。
5. 默认输出排序后的优化报告;只有用户明确点名某项时,才进入实现。
## 输出要求
- 先给项目概览和扫描范围
- findings 按影响优先级排序
- 每条建议同时说明收益、代价和前置条件
- 没有明显问题时,要明确写出,并指出盲区或未扫描范围
## 按需展开
- 范围选择:`references/scope-selection.md`
- 模式定义:`references/optimize-modes.md`
- 报告格式:`references/report-format.md`
- 输出模板:`templates/optimize-report.md`
@@ -0,0 +1,6 @@
interface:
display_name: "optimize"
short_description: "显式优化扫描,支持 full、ux、perf、code 四种模式。"
default_prompt: "Use $optimize to scope the scan first and then produce an evidence-based report ordered by impact instead of jumping into edits."
policy:
allow_implicit_invocation: false
@@ -0,0 +1,15 @@
# Optimize Modes
模式与默认维度:
- `full`: UX + PERF + CODE + SUGAR + 基础安全卫生 + BEST
- `ux`: 表单体验、加载反馈、错误提示、空状态、操作费力度
- `perf`: 查询路径、分页、N+1、缓存、中间件、构建与包体热点
- `code`: 重复逻辑、大文件、死代码、硬编码、现代语法替代
使用原则:
- `full` 适合阶段性体检,不适合每次都跑
- `ux` 面向用户感知问题
- `perf` 面向吞吐、等待时间和中间件引入时机
- `code` 面向维护成本,不要把“风格不同”误判成问题
@@ -0,0 +1,22 @@
# Report Format
报告建议结构:
1. 扫描范围
2. 项目概览
3. 关键 findings
4. 优化建议
5. 暂缓项与盲区
finding 需要同时回答:
- 证据在哪
- 影响是什么
- 为什么现在值得处理
- 建议是修复、重构还是暂缓
避免:
- 没有证据的“最佳实践”空话
- 把所有问题都打成高优
- 在未获同意前直接改动大范围代码
@@ -0,0 +1,19 @@
# Scope Selection
默认先选范围,再扫描:
- 全量:前后端一起看,适合里程碑或集中治理
- 仅前端:页面体验、组件复用、包体与渲染路径
- 仅后端:接口契约、查询路径、错误处理、性能热点
- 指定目录:只看用户点名模块
范围较大时,先做低成本估算:
- 文件数量
- 代码总行数
- 是否存在明显大文件或热点目录
若规模明显过大:
- 先提醒 token 和时间成本
- 优先聚焦热点目录,而不是机械全扫
@@ -0,0 +1,27 @@
## 扫描范围
- 模式:{{mode}}
- 范围:{{scope}}
## 项目概览
| 项 | 值 |
|---|---|
| 技术栈 | {{stack}} |
| 代码规模 | {{size}} |
| 热点目录 | {{hotspots}} |
## 关键 Findings
1. {{finding_1}}
2. {{finding_2}}
## 优化建议
| 项 | 收益 | 代价 | 建议动作 |
|---|---|---|---|
| {{item}} | {{impact}} | {{cost}} | {{action}} |
## 暂缓项与盲区
- {{deferred_or_blindspot}}
+37
View File
@@ -0,0 +1,37 @@
---
name: project-init
description: 结构化新项目初始化工作流,适用于显式 project-init、仓库开荒、生成项目级 AGENTS.md 或按技术栈落基础脚手架文件的场景;不负责替用户无差别覆盖现有配置。
---
# Project Init
当用户明确要求 `project-init`、初始化新仓库、生成项目级 `AGENTS.md`,或按技术栈补基础脚手架时,使用本技能。
不要用于:
- 已成熟项目上的大规模重写
- 代替 feature 开发或 bug 修复
- 无确认地覆盖已有 `AGENTS.md`、`Dockerfile` 或脚本
- 为 Claude/Gemini 生成专属配置文件
## 核心方式
1. 先读取仓库现状,判断是不是空仓库、样板仓库,还是已有部分脚手架。
2. 优先从现有文件推断技术栈,再只问缺失的关键信息:项目描述、启动方式、数据库迁移、额外约定、是否需要脚手架文件。
3. 需要项目级说明时,以 `assets/AGENTS.project.md` 为起点生成仓库根目录 `AGENTS.md`,内容聚焦项目特定约定,不重复用户级全局规则。
4. 只有用户明确要创建或补齐脚手架时,才从 `assets/` 选择对应模板;不要默认把所有模板都写进仓库。
5. 如果目标文件已存在,先比较差异并说明保留/合并策略,避免整文件覆盖。
6. 完成后说明创建了哪些文件、哪些模板没有使用,以及后续建议。
## 资源选择
- 项目级说明模板:`assets/AGENTS.project.md`
- Go/Docker/compose/重启脚本模板:按需从 `assets/` 选择
- 具体选择规则:`references/template-selection.md`
## 输出要求
- 先说明识别到的项目形态和技术栈假设
- 只为用户确认过的文件落盘
- 新建文件默认可直接用,但保留最少必要占位符
- 明确指出哪些内容仍需用户补充或替换
@@ -0,0 +1,6 @@
interface:
display_name: "project-init"
short_description: "显式初始化项目说明与基础脚手架文件。"
default_prompt: "Use $project-init to inspect this repository, generate a project-level AGENTS.md, and add only the confirmed starter files this stack actually needs."
policy:
allow_implicit_invocation: false
@@ -0,0 +1,136 @@
# [项目名称] AGENTS
作者:wwj
版本:v1.0
日期:[当前日期]
<!--
使用说明:
1. 复制此文件到仓库根目录的 AGENTS.md
2. 替换 [方括号] 中的内容
3. 删除不需要的章节和注释
4. 只保留项目特定约定,不重复用户级全局规则
-->
---
## 项目概述
[项目名称] 是一个 [项目描述]。
---
## 技术栈
| 层级 | 技术 | 版本 |
|------|------|------|
| 后端 | Go / Java / Node.js / Python | x.x+ |
| Web 框架 | Gin / Spring Boot / Express / FastAPI | x.x+ |
| ORM | GORM / JPA / Prisma / SQLAlchemy | x.x+ |
| 数据库 | SQLite / MySQL / PostgreSQL / MongoDB | x.x+ |
| 前端框架 | Vue / React | x.x+ |
| 前端语言 | TypeScript / JavaScript | x.x+ |
| UI 组件库 | Element Plus / Ant Design / 无 | x.x+ |
| 构建工具 | Vite / Webpack / 无 | x.x+ |
---
## 目录结构
```text
项目名/
├── cmd/ / src/main/java / app/ # 入口与启动
├── internal/ / src/ # 业务代码
│ ├── handler/ / controller/ # HTTP 处理器
│ ├── service/ # 业务逻辑
│ ├── repository/ / dao/ # 数据访问
│ └── model/ / entity/ # 数据模型
├── web/ / frontend/ # 前端代码(如有)
│ ├── src/
│ └── package.json
├── deploy/ / scripts/ # 部署与脚本(如有)
└── go.mod / pom.xml / package.json / pyproject.toml
```
---
## 项目定制
### 开发约定
| 约定 | 说明 |
|------|------|
| 启动方式 | 使用 `./restart.sh` / `docker compose up` / `npm run dev` / `go run` |
| 数据库迁移 | GORM AutoMigrate / Flyway / Alembic / 手动 SQL |
| 注释风格 | 不使用行尾注释,注释单独成行 |
| 作者署名 | 所有文档和代码署名使用 wwj |
### API 规范
```go
type Response struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
```
```java
public class Result<T> {
private int code;
private String message;
private T data;
}
```
错误码建议:
- `0`: 成功
- `1xxx`: 参数错误
- `2xxx`: 业务错误
- `5xxx`: 系统错误
### 前端规范
| 约定 | 说明 |
|------|------|
| UI 风格 | [Element Plus / Ant Design / 自定义设计系统] |
| 设计原则 | 降低用户操作费力度,信息密度适中 |
| 避免 | 花哨装饰、复杂动效、无证据的大改版 |
---
## 常用操作
```bash
# 开发模式
./restart.sh
# 后端编译
go build ./... / mvn package / uv run pytest / npm run build
# 前端开发
cd web && npm run dev
```
---
## 与 Codex 协作
### 期望你主动做的
- 发现类型错误、明显 bug 和回归风险
- 补齐缺失的异常处理、边界校验和最小必要验证
- 在现有模式内做最小改动,避免无证据重构
### 不希望你做的
- 不要添加未要求的功能
- 不要为了“更优雅”而大改已稳定代码
- 不要覆盖现有部署脚本或环境配置,除非明确要求
### 禁止事项
- 不要直接操作生产数据库
- 不要在代码中硬编码敏感信息
- 不要跳过现有项目约定自行引入新框架
@@ -0,0 +1,31 @@
# 前端构建阶段
FROM node:20-alpine AS frontend
WORKDIR /app/web
COPY web/package*.json web/package-lock.json* ./
RUN npm ci
COPY web/ .
RUN npm run build
# 后端构建阶段
FROM golang:1.26-alpine3.23 AS backend
WORKDIR /app
ENV GOPROXY=https://goproxy.cn,direct
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod \
go mod download
COPY . .
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/server
# 运行阶段
FROM alpine:3.23.3
RUN apk --no-cache add ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=backend /app/server .
COPY --from=frontend /app/web/dist ./web/dist
EXPOSE 8080
CMD ["./server"]
@@ -0,0 +1,22 @@
# 构建阶段
FROM golang:1.26-alpine3.23 AS builder
WORKDIR /app
ENV GOPROXY=https://goproxy.cn,direct
COPY go.mod go.sum ./
RUN --mount=type=cache,target=/go/pkg/mod \
go mod download
COPY . .
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
CGO_ENABLED=0 GOOS=linux go build -o server ./cmd/server
# 运行阶段
FROM alpine:3.23.3
RUN apk --no-cache add ca-certificates tzdata
ENV TZ=Asia/Shanghai
WORKDIR /app
COPY --from=builder /app/server .
EXPOSE 8080
CMD ["./server"]
@@ -0,0 +1,32 @@
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=app
- DB_PASS=app123
- DB_NAME=appdb
- ADMIN_USER=${ADMIN_USER:-admin}
- ADMIN_PASS=${ADMIN_PASS:-admin123}
restart: unless-stopped
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root123
- MYSQL_DATABASE=appdb
- MYSQL_USER=app
- MYSQL_PASSWORD=app123
volumes:
- mysql_data:/var/lib/mysql
restart: unless-stopped
volumes:
mysql_data:
@@ -0,0 +1,24 @@
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- redis
environment:
- REDIS_HOST=redis
- REDIS_PORT=6379
- ADMIN_USER=${ADMIN_USER:-admin}
- ADMIN_PASS=${ADMIN_PASS:-admin123}
restart: unless-stopped
redis:
image: redis:7-alpine
volumes:
- redis_data:/data
restart: unless-stopped
volumes:
redis_data:
@@ -0,0 +1,13 @@
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
volumes:
- ./data:/app/data
environment:
- ADMIN_USER=${ADMIN_USER:-admin}
- ADMIN_PASS=${ADMIN_PASS:-admin123}
restart: unless-stopped
@@ -0,0 +1,55 @@
# Git
.git
.gitignore
# Build artifacts
build/
dist/
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary
*.test
# Output of go coverage tool
*.out
# Data directory (will be mounted as volume)
data/
# Environment files
.env
.env.local
.env.*.local
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Logs
*.log
# Documentation
README.md
docs/
# CI/CD
.github/
# Docker (avoid recursion)
docker-compose.yml
Dockerfile
.dockerignore
# Node modules (if any)
node_modules/
@@ -0,0 +1,95 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool
*.out
# Go workspace file
go.work
# Build artifacts
build/
dist/
bin/
*.app
# Dependency directories
vendor/
# Go build cache
.cache/
# Environment files
.env
.env.local
.env.*.local
# Database files
*.db
*.sqlite
*.sqlite3
data/*.db
data/*.sqlite
# Log files
*.log
server.log
logs/
# IDE and editor directories
.idea/
.vscode/
*.swp
*.swo
*~
# AI coding assistants (remove lines for files your team shares)
.claude/
.gemini/
.cursor/
.cursorrules
.windsurf/
.windsurfrules
.codex/
.aider*
.cline/
.clinerules
.roo/
.roomodes
.rooignore
.kilo/
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Temporary files
tmp/
temp/
*.tmp
# Node modules (for frontend)
node_modules/
package-lock.json
# Compiled binaries
server
cmd/server/server
# Admin config (may contain sensitive data)
data/admin_config.json
# Scripts runtime artifacts
*.pid
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -euo pipefail
# 管理员配置(通过环境变量设置)
ADMIN_USER="${ADMIN_USER:-admin}"
ADMIN_PASS="${ADMIN_PASS:-admin123}"
# 1. 拉取最新代码
echo "==> 拉取最新代码..."
git pull origin main || true
# 2. 前端打包(如有 web/ 目录)
if [[ -d "web" ]]; then
echo "==> 构建前端..."
cd web
npm install
npm run build
cd ..
fi
# 3. 后端编译
echo "==> 编译后端..."
go build -o ./bin/server ./cmd/server
# 4. 停止旧进程
echo "==> 停止旧进程..."
pkill -f "./bin/server" || true
sleep 1
# 5. 启动新进程
echo "==> 启动服务..."
ADMIN_USER="$ADMIN_USER" ADMIN_PASS="$ADMIN_PASS" \
nohup ./bin/server > server.log 2>&1 &
echo "==> 服务已启动"
echo " 管理员账号: $ADMIN_USER"
echo " 日志文件: server.log"
echo ""
echo "使用方式:"
echo " 默认账密: ./restart.sh"
echo " 自定义: ADMIN_USER=xxx ADMIN_PASS=xxx ./restart.sh"
@@ -0,0 +1,37 @@
#!/usr/bin/env bash
set -euo pipefail
# 管理员配置(通过环境变量设置)
ADMIN_USER="${ADMIN_USER:-admin}"
ADMIN_PASS="${ADMIN_PASS:-admin123}"
# 1. 拉取最新代码
echo "==> 拉取最新代码..."
git pull origin main || true
# 2. 前端打包(如有 web/ 目录)
if [[ -d "web" ]]; then
echo "==> 构建前端..."
cd web
npm install
npm run build
cd ..
fi
# 3. 后端编译
echo "==> 编译后端..."
mvn clean package -DskipTests
# 4. 停止旧进程
echo "==> 停止旧进程..."
pkill -f "java.*jar" || true
sleep 2
# 5. 启动新进程
echo "==> 启动服务..."
ADMIN_USER="$ADMIN_USER" ADMIN_PASS="$ADMIN_PASS" \
nohup java -jar target/*.jar > server.log 2>&1 &
echo "==> 服务已启动"
echo " 管理员账号: $ADMIN_USER"
echo " 日志文件: server.log"
@@ -0,0 +1,30 @@
# Template Selection
优先规则:
1. 先生成或更新仓库根目录 `AGENTS.md`
2. 只有用户明确需要脚手架时,才从 `assets/` 选模板
3. 已有同名文件时,先 diff,再决定补丁式更新还是保留现状
## 模板映射
| 资源 | 适用场景 |
|------|---------|
| `assets/AGENTS.project.md` | 需要项目级 Codex 指导文件 |
| `assets/gitignore-go.tmpl` | Go 后端仓库缺少 `.gitignore` |
| `assets/dockerignore.tmpl` | 需要新增 `Dockerfile` 或容器构建 |
| `assets/Dockerfile-go.tmpl` | 纯 Go 后端服务 |
| `assets/Dockerfile-go-frontend.tmpl` | Go 后端 + `web/` 前端构建 |
| `assets/docker-compose-sqlite.yml.tmpl` | 单服务 + SQLite 挂载数据目录 |
| `assets/docker-compose-mysql.yml.tmpl` | 服务依赖 MySQL |
| `assets/docker-compose-redis.yml.tmpl` | 服务依赖 Redis |
| `assets/restart-go.sh.tmpl` | Go 服务需要统一重启脚本 |
| `assets/restart-java.sh.tmpl` | Java 服务需要统一重启脚本 |
## 选择细则
- `docker-compose` 模板是单用途基础版,不要把多份模板直接拼接后原样落盘。
- 同时需要 MySQL 和 Redis 时,以其中一份为骨架,按当前项目配置手工合并。
- `restart-*.sh` 只适合单服务项目;已有 systemd、supervisor、容器编排时通常不该新增。
- `AGENTS.project.md` 应替换占位符,并删除不适用章节,不要把模板原样提交。
- `.claudeignore.tmpl` 和软著相关文件不属于 Codex 项目初始化范围,故未迁入本技能。
+29
View File
@@ -0,0 +1,29 @@
---
name: cc-python-dev
description: Python 开发规范,适用于类型注解、验证模型、pytest 和 uv 工具链;不负责 review、debug 或运维流程。
---
# CC Python Dev
在编辑 Python 代码时使用本技能,重点处理类型注解、数据模型、pytest 和工具链约束。
不要用于:
- 正式 review 或 fix/debug 工作流
- 运维风险判断
- 与 Python 无关的语言细节
## 核心规则
- 公开接口优先补类型信息。
- 数据校验和数据模型边界要清晰。
- 测试优先覆盖受影响行为和边界输入。
- 工具链优先保持与项目既有约定一致。
## 按需展开
- 风格:`references/style.md`
- 类型:`references/typing.md`
- Pydantic:`references/pydantic.md`
- pytest:`references/pytest.md`
- 工具链:`references/toolchain.md`
@@ -0,0 +1,5 @@
interface:
display_name: "CC Python Dev"
short_description: "Python 类型、数据模型、pytest 与 uv 工具链规范。"
policy:
allow_implicit_invocation: true
@@ -0,0 +1,5 @@
# Pydantic
- 模型字段、默认值和校验逻辑要清晰。
- 输入输出模型边界分开,不混用不同语义的模型。
- 只有在确实需要时才写复杂 validator。
@@ -0,0 +1,5 @@
# pytest
- 测试命名要能表达行为。
- 优先参数化和局部 fixture,避免全局耦合。
- 对异常路径和边界输入保持覆盖。
Loaded 100 of 136 files, more files were not shown because too many files have changed in this diff. Show more