com um clique
codebase-module-generator
阅读任意目录,分析模块结构,生成防腐蚀规范 skill(不生成孤儿文档)
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
阅读任意目录,分析模块结构,生成防腐蚀规范 skill(不生成孤儿文档)
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
Relay-v3 Lua 状态机接入指南。新增一个互联网房间业务(聊天、卡牌、白板、投票、协作…)时使用。描述后端元函数契约、前端闭环套路、Lua 脚本模板、state 转换规范、错误案例。识别"我要实现一个新业务""写一个 Lua 房间脚本""加一个 action 类型"时触发。
当用户提及 Relay/LAN/快照/action 流/net_p2p/net_engine 协议、讨论消息传输层(事件 vs 快照)、新建/重构 P2P 协议、排查"晚加入者错过事件""两端不同步""房间状态丢失""广播丢失"等问题时触发。包含 v1 action/事件驱动(已落地,遗留用法)与 v2 快照驱动(推荐新功能)。
Flutter 项目中"样式"相关工程的渐进式披露指南。当用户要做 UI 样式选型、视觉对齐复刻、画布/HTML mockup 与 Flutter 实现的双向对照、或在 Material 3 体系下选某一类样式(顶部 App Bar / Card / Button / NavigationBar / Modal 等)落地时触发。本 skill 是样式大类的总入口,所有方案的最终形态都登记在分类索引表里,按需加载对应方案文件。同时承载小豆子 FR 项目的 UI 设计原则与实战 bug 沉淀(border-emphasis 边框强调式、嵌套 sheet race condition、多风格 lottery 投票挑选、纯色按钮减负、左重右轻、装饰性 vs 功能性颜色决策)。
flutter的开发操作流程,在dart-flutter任何问题都需要优先加载这个SKILL
Flutter 通过 home_widget 把 1Hz 实时值(如倒计时)推到 Android 桌面 AppWidget 的端到端架构。当用户提到 home_widget 不同步、桌面小组件不刷新、appwidget 实时值、widget 显示卡死、widget 进程被杀场景、AppWidgetProvider 找不到时触发。
Comprehensive Rive animation platform skill covering scripting (Luau), runtime integration (React/Next.js), state machines, data binding, and the complete API. Use this skill when users need to create interactive animations with Rive, integrate Rive into React/Next.js applications, write Rive scripts (Node, Layout, Converter, PathEffect protocols), control animations via state machines, implement scroll-based animations, or work with Rive's drawing API (Path, Paint, Renderer). Triggers on: "rive", "rive animation", "rive script", "luau", "@rive-app/react-canvas", "state machine animation", "interactive animation", "scroll animation with rive". 本项目(xiaodouzi/fr,Flutter + rive ^0.14.5)特化:DataBind / ViewModel 双向数据绑定、lab demo 添加流程见 references/flutter-databind-0.14.md 与 references/flutter-project-workflow.md。
| name | codebase-module-generator |
| description | 阅读任意目录,分析模块结构,生成防腐蚀规范 skill(不生成孤儿文档) |
调用 /writing-skills 或 /skill-creator 获得 skill 规范。
给出 bad_example 和 good_eg 的正反案例。
只生成 .claude/skills/<name>/SKILL.md 文件,不生成孤儿 markdown 文档。
# 获取所有源文件
ls -File -Recurse *.js,*.ts,*.py,*.go
# 查看文件树(含行数)
Get-ChildItem -Recurse -File | Select-Object FullName, @{N='Lines';E={(Get-Content $_.FullName | Measure-Object -Line).Lines}}
分析维度:
| 维度 | 说明 |
|---|---|
| 文件数量 | 判断模块复杂度 |
| 文件大小 | 找出过于臃肿的文件(>300行标记) |
| 命名模式 | 识别模块划分(如 xxx.js + xxx-utils.js) |
对每个源文件提取:
// 导入分析
import ... from './xxx.js' // 相对导入
import ... from 'xxx' // 包导入
// 导出分析
export function xxx() // 命名导出
export default class xxx // 默认导出
export { xxx, yyy } // 多导出
生成依赖矩阵:
## 模块依赖矩阵
| 文件 | 导入模块 | 被导入次数 | 行数 | 状态 |
|------|---------|----------|------|------|
| index.js | commands, groups, utils | 0 | 50 | ✅ |
| groups.js | utils | 3 | 160 | ✅ |
| utils.js | (无) | 5 | 80 | ✅ |
| timeline.js | utils | 2 | 450 | ⚠️ 过大 |
# 超过 300 行的文件
foreach ($f in Get-ChildItem . -Recurse -Filter "*.js") {
$lines = (Get-Content $f | Measure-Object -Line).Lines
if ($lines -gt 300) {
Write-Host "⚠️ $($f.FullName): $lines 行"
}
}
// 如果 A→B→C→A,则存在循环依赖
function detectCycle(moduleGraph) {
// Tarjan 算法或简单 DFS
}
# 查找重复函数名
grep -rn "function openTabboard" . --include="*.js"
# 查找重复的常量
grep -rn "DEFAULT_COLORS\|const DEFAULT_" . --include="*.js"
// 一个文件处理多种职责
const hasStorage = content.includes('chrome.storage');
const hasUI = content.includes('document.createElement');
const hasNetwork = content.includes('fetch') || content.includes('XMLHttpRequest');
if (hasStorage && hasUI) {
warnings.push(`${file}: 同时处理存储和 UI,违反单一职责`);
}
只生成 skill 文件,不生成独立的 markdown 文档。
.claude/skills/<模块名>/
└── SKILL.md ← 唯一的输出物
---
name: <模块名>-standards
description: <触发描述>
---
# {项目名} {模块名} 模块规范
## 模块职责边界
| 模块 | 职责 | 禁止混入 |
|------|------|---------|
| index.js | 入口/组装 | 业务逻辑 |
## 反正面案例
### bad_example
[错误代码]
### good_eg
[正确代码]
开始分析目录
│
├─► 目录包含 background/ 或 service-worker/
│ └─► 生成 chrome-ext-background-standards skill
│
├─► 目录包含 popup/
│ └─► 生成 chrome-ext-popup-standards skill
│
├─► 目录是独立工具库(utils/)
│ └─► 生成 utils-module-standards skill
│
├─► 目录是前端组件(components/)
│ └─► 生成 frontend-component-standards skill
│
└─► 通用的多模块项目
└─► 生成通用的 module-standards skill
# ❌ 生成独立的 markdown 文档
生成 BACKGROUND_STANDARDS.md
生成 MODULE_STANDARDS.md
# 这些文档无人维护,最终成为孤儿
# ✅ 只生成 skill 文件
.claude/skills/chrome-ext-background-standards/
└── SKILL.md ← 唯一的输出物
# skill 文件本身就是规范,可被 /skill-discovery 发现和复用
// utils.js 中没有定义 normalizeUrl
// A.js 自己定义了一份
function normalizeUrl(url) { ... }
// B.js 也自己定义了一份(稍有不同)
function normalizeUrl(url) {
// 略有差异的逻辑
}
// utils.js 中唯一定义
export function normalizeUrl(url) { ... }
// A.js 和 B.js 都导入使用
import { normalizeUrl } from './utils.js';
// groups.js 直接调用 timeline.js 的函数
import { collectCurrentWindowTabs } from './timeline.js';
function addGroup(name) {
collectCurrentWindowTabs(); // ❌ 违反模块边界
}
// groups.js 通过消息与 timeline.js 通信
async function addGroup(name) {
// ✅ 通过 chrome.runtime.sendMessage 通信
await chrome.runtime.sendMessage({ action: 'collectCurrentWindowTabs' });
}
| 错误操作 | 实际后果 | 正确做法 |
|---|---|---|
| 生成独立的 markdown 文档 | 文档无人维护,最终成为孤儿 | 只生成 SKILL.md 文件 |
| 不读取文件就制定规范 | 规范与实际脱节,无法执行 | 先完整遍历目录 |
| 规范过于宽泛 | "要保持代码整洁" 无法执行 | 给出具体检测方式和阈值 |
| 只分析表面命名 | utils.js 可能不是真正的工具模块 | 分析实际 import/export 依赖 |
| 遗漏 package.json | 不知道外部依赖,无法判断是否应该引入 | 同时读取 package.json |
groups.js:130).claude/skills/<name>/SKILL.md 文件.md 文档文件