find-best-skill
当用户明确要求"搜索技能"、"寻找 Agent Skill"、"查找某个领域的 skill"、"推荐最佳 skill"时使用。支持多平台搜索(GitHub、SkillsMP、Reddit)和社区/AI 双维度评价,推荐数量可根据用户指令动态调整(默认 5-10 个,支持 3-20 个)。⚠️ 不适用:用户只是询问"有没有某个技能"(应直接回答)、只是想了解技能列表(应直接列举)、没有明确"搜索/寻找/查找/推荐"意图。
Install
npx skills add https://github.com/huangwb8/skills/tree/main/skills/beta/find-best-skill
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install huangwb8-skills@llmmart
git clone https://github.com/huangwb8/skills.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole huangwb8/skills collection as a plugin from our marketplace. Git is the plain clone.
README
Find Best Skill
本 README 面向使用者:如何触发并正确使用 find-best-skill skill。
执行指令与硬性规范在 SKILL.md;默认参数在 config.yaml。
用法
最推荐 - 简单需求
我想找一个能做 TDD 的 skill
场景化变体
结合需求解构(推荐用于复杂需求)
帮我找最适合的数据分析 skill,要求:支持 Python、有可视化功能、社区活跃
对比替代方案
现在最好的 code review skills 有哪些?帮我对比一下
发现专业领域技能
找一些做科学计算或材料模拟的 skills
功能概述
find-best-skill 是一个智能技能推荐助手,帮你从 GitHub 生态的 37,000+ Agent Skills 中找到最合适的工具。
核心价值
- 需求解构:自动分析你的真实需求
- 社区调研:搜索 GitHub、SkillsMP、Reddit 等平台
- 舆情分析:综合社区评价和 AI 评价
- 客观推荐:提供推荐理由 + 局限性分析
工作原理
你的需求 → 需求解构 → 多平台搜索 → 舆情分析 → 排序推荐
↓
(GitHub + SkillsMP + Reddit + awesome-claude-skills)
与其他技能的区别
| 技能 | 作用 | 配合使用 |
|---|---|---|
| get-review-theme | 解构需求 | find-best-skill 会自动调用它 |
| find-best-skill | 推荐技能 | 使用后可直接安装推荐技能 |
| awesome-code | 协调多技能开发 | 找到技能后用它来执行开发 |
使用示例
示例 1:寻找测试工具(最简单)
你:找一个能做 TDD 的 skill
find-best-skill 输出(摘要):
基于您的需求 "测试驱动开发(TDD)",我为您推荐以下 skills:
## 1. test-driven-development
**GitHub**: [obra/test-driven-development](https://github.com/VoltAgent/awesome-claude-skills)
### 推荐理由
**社区评价**:
- ⭐ 1.2k+ | 🍴 150+ | 📅 2周前更新
- 被多个团队采用,社区活跃讨论
**AI 评价**:
- 强制 Red-Green-Refactor 循环,确保 TDD 严格执行
- 支持多种测试框架
- 渐进式加载设计,性能优秀
### 局限性
- 对测试框架有预设(可能不支持您使用的框架)
- 初次使用需要适应其严格的流程要求
## 2. tdd-workflow
**GitHub**: [anthropics/tdd-workflow](https://github.com/anthropics/skills)
### 推荐理由
**社区评价**:
- ⭐ 官方维护 | 📅 持续更新
- Anthropic 官方最佳实践
**AI 评价**:
- 与 Claude Code 深度集成
- 简洁的工作流设计
- 灵活的测试适配
### 局限性
- 功能相对基础,高级特性较少
- 专注于 Claude Code 生态
[... 继续推荐 3-8 个 skills]
示例 2:寻找复杂功能技能
你:找一个能做 Git commit 信息自动生成的 skill,最好支持 Conventional Commits
find-best-skill 会:
- 解构需求 → 关键词:
git、commit、conventional commits - 搜索平台 → GitHub、SkillsMP、awesome-claude-skills
- 分析舆情 → Stars、更新时间、社区讨论
- 推荐输出 →
git-commit(多个实现,按推荐度排序)
示例 3:对比同类技能
你:现在最好的 debugging skills 有哪些?帮我对比一下
find-best-skill 输出特点:
- 并列推荐多个调试技能
- 每个技能的适用场景说明
- 帮你选择最适合你工作流的
输出格式
每个推荐技能包含:
| 部分 | 内容 |
|---|---|
| GitHub 链接 | 项目地址(可点击) |
| 推荐理由 | 社区评价 + AI 评价 |
| 局限性 | 潜在短板、适用场景限制 |
| 排序 | 按推荐度降序(最合适在前) |
配置选项
默认配置在 config.yaml,主要参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
recommendation.target_count |
8 | 目标推荐数量 |
recommendation.default_min |
5 | 默认最少推荐数量 |
recommendation.default_max |
10 | 默认最多推荐数量 |
recommendation.absolute_min |
3 | 绝对最少数量(找不到更多时) |
recommendation.absolute_max |
20 | 绝对最多数量(避免信息过载) |
recommendation_criteria.min_stars |
10 | 最少 Stars 数量 |
recommendation_criteria.max_age_months |
12 | 最大未更新月数 |
如需自定义,可以在调用时说明:
- "只推荐前 3 个"
- "至少找 10 个"
- "只要最近 6 个月更新的"
备选用法(辅助脚本)
以下脚本主要用于开发调试,普通用户无需使用。
生成研究清单
# 为指定仓库生成研究检查清单
python scripts/get_skill_info.py "obra/test-driven-development,anthropics/skills"
# 输出结构化清单,包含需要收集的信息点
常见问题
Q:推荐结果包含哪些平台?
A:主要从以下平台搜索:
- GitHub:开源项目主阵地
- SkillsMP:37,000+ 技能市场
- awesome-claude-skills:社区精选列表
- Reddit(/r/ClaudeCode):真实用户讨论
Q:如何保证推荐质量?
A:通过以下筛选标准:
- 必须有 GitHub 仓库
- 必须有有效的 SKILL.md 文件
- 优先推荐高 Stars(>100)
- 优先推荐最近更新(6个月内)
- 排除已归档仓库
Q:推荐的数量为什么是 5-10 个?
A:这是经验值:
- 少于 3 个:选择太少,可能错过好工具
- 多于 10 个:信息过载,难以决策
- 5-8 个:最佳平衡点(默认目标 8 个)
Q:如果找不到合适的技能怎么办?
A:可能的原因:
- 需求太新,社区还没有相关技能
- 需求太偏,属于小众领域
- 关键词不够准确
建议:
- 尝试更通用的关键词
- 描述问题而非解决方案
- 考虑创建自定义技能
Q:可以直接安装推荐的技能吗?
A:推荐报告包含 GitHub 链接,你可以:
- 克隆仓库到
~/.claude/skills/ - 使用 SkillsMP 的一键安装(如果支持)
- 手动复制 SKILL.md 到本地
Q:推荐结果会保存吗?
A:不会自动保存。如需保存,建议:
- 复制推荐报告到 Markdown 文件
- 保存推荐的 GitHub 链接到书签
- 使用 Claude Code 的会话历史功能
更多文档
- SKILL.md — 完整的工作流和执行规范
- config.yaml — 可配置参数
- references/agent-skills-research.md — Agent Skills 生态调研
- references/skillsmp-guide.md — SkillsMP 使用指南
WHICHMODEL - 模型选择最佳实践
最后更新:2026-01-25
披露信息
- 覆盖厂商:Anthropic(1/6 = 17%)
- 来源构成:社区 70%, 官方 20%, 技术博客 10%
- 数据时效:2024-10 至 2026-01
- 局限性:未覆盖国产模型,未独立测试技能推荐准确率
场景化建议
场景 1:标准技能搜索(最常见)
触发条件:需要寻找特定功能的 Agent Skill
| 项目 | 建议 |
|---|---|
| 推荐模型 | Claude Sonnet 4.5 |
| 推理强度 | medium |
| 预期成本 | ~$0.02-0.10/次 |
理由:
- 技能搜索需要需求解构、多平台搜索、舆情分析和 AI 评价等多个步骤
- Sonnet 在多步骤任务协调中表现出色,能够理解需求并综合多源信息
- 社区对比 显示 Sonnet 在复杂场景下的优势
- 技能搜索需要平衡推理能力与效率,Sonnet 的性价比最高
避免:简单搜索不需要 Opus,用 Sonnet 即可
来源:社区对比讨论 + 官方模型选择指南
场景 2:复杂需求分析
触发条件:
- 需要深度理解复杂需求并解构主题
- 需要对比多个技能的优缺点
- 需要分析社区舆情和 AI 评价
| 项目 | 建议 |
|---|---|
| 推荐模型 | Claude Sonnet 4.5 |
| 推理强度 | medium-high |
| 预期成本 | ~$0.05-0.20/次 |
理由:
- Sonnet 在复杂分析任务中表现优异,能够理解需求的复杂性并生成准确的推荐
- 社区反馈 显示 Sonnet 在分析任务中与 Opus 质量相当
- 复杂需求分析需要较强的推理能力,Sonnet 足够胜任
避免:极少需要 Opus,除非需求极其复杂
来源:Reddit 社区讨论 + 90 天对比测试
对比总结
| 模型 | 最适合 | 最不适合 | 相对成本 | 相对速度 | 推荐度 |
|---|---|---|---|---|---|
| Sonnet 4.5 | 所有技能搜索场景(95%) | 极端复杂的需求分析 | \(\) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Haiku 4.5 | 简单关键词搜索 | 复杂需求分析(理解不足) | $$ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| Opus 4.5 | 不推荐 | 所有场景(浪费) | \($\) | ⭐⭐ | ⭐ |
说明:
- Sonnet 覆盖 95% 的技能搜索场景
- Haiku 仅用于简单关键词搜索(单一功能、无复杂分析)
- Opus 对此任务完全不必要,成本过高且无性能提升
通用原则
- 默认从 Sonnet 开始:95% 的技能搜索任务 Sonnet 足够,无需 Opus
- 复杂度判断:根据需求的复杂程度选择模型
- 简单搜索(单一关键词):Sonnet 或 Haiku
- 标准搜索(多关键词、需要对比):Sonnet
- 复杂需求(需要深度解构和分析):Sonnet(极少需要 Opus)
- 质量优先:技能推荐是"找到合适的工具",不应只追求低成本而牺牲推荐质量
- 多步骤任务需要推理:需求解构 + 多平台搜索 + 舆情分析 + AI 评价,需要较强的推理能力
- Haiku 的局限性:虽然 Haiku 速度快、成本低,但 社区反馈 显示它在完成复杂多步骤任务时可能遇到困难
⚠️ 争议点
Sonnet vs Haiku:技能搜索可以用 Haiku 吗?
| 观点 | 支持者 | 理由 |
|---|---|---|
| Sonnet 更保险 | 社区多数意见 | 技能搜索需要理解需求并综合多源信息,Haiku 可能无法胜任 |
| Haiku 足够 | 部分开发者 | 简单关键词搜索是简单任务,Haiku 完全胜任 |
数据支持:
建议:
- 默认使用 Sonnet:技能搜索需要理解和综合能力,Sonnet 完全胜任
- 仅在以下情况使用 Haiku:
- 非常简单的关键词搜索(单一功能、无复杂分析)
- 快速查找已知的技能名称
- Sonnet 出现理解错误时(极少见)
更新记录
- 2026-01-25:首次调研,覆盖 Anthropic
- 建议:2026-07 重新调研(6 个月后)
来源链接
官方文档:
社区讨论:
技术博客:
Skill manifest
Find Best Skill
目标
当用户明确要求"搜索技能"、"寻找 Agent Skill"、"查找某个领域的 skill"、"推荐最佳 skill"时使用。支持多平台搜索(GitHub、SkillsMP、Reddit)和社区/AI 双维度评价,推荐数量可根据用户指令动态调整(默认 5-10 个,支持 3-20 个)。⚠️ 不适用:用户只是询问"有没有某个技能"(应直接回答)、只是想了解技能列表(应直接列举)、没有明确"搜索/寻找/查找/推荐"意图。
流程
输入
使用场景
当用户需要:
- 寻找特定功能的 Agent Skill
- 了解社区中某个领域的最佳实践方案
- 对比不同技能的优劣
- 发现已有技能的替代方案
依赖关系
可选依赖:
- get-review-theme skill:用于需求解构(第 1 步)
- 如果用户未安装该 skill,可直接分析用户需求提取主题和关键词
执行步骤
核心工作流
1. 需求解构
分析用户需求,提取核心主题和关键词:
优先使用 get-review-theme skill(如已安装):
/skill get-review-theme "用户原始需求描述"
如未安装:直接分析用户需求,从用户输入中提取核心主题、关键词、具体问题。
2. 缓存查询
优先检查本地缓存,快速匹配历史技能:
# 使用缓存管理器搜索匹配技能
python scripts/cache_manager.py --search "关键词1" "关键词2" --limit 10
说明:
- 默认缓存参数来自
config.yaml:cache(单一真相来源) - CLI 参数(如
--cache-dir)会覆盖config.yaml
命中策略:
| 情况 | 处理方式 |
|---|---|
| 有命中 | 展示本地结果 → 询问用户"是否联网扩展?" → 用户选择 |
| 无命中 | 直接进入联网搜索(第 3 步) |
用户交互话术:
基于本地缓存,我找到 {N} 个相关技能:
{展示本地结果}
💡 发现 {N} 个候选,是否联网扩展搜索以获取更多最新结果?
- 回复"是"或"联网"进行在线搜索
- 回复"否"或"直接使用"直接输出以上结果
3. 社区调研
基于解构结果,使用 WebSearch 类工具或搜索类 MCP 工具(如 SearXNG、Tavily)进行多平台搜索。
搜索平台:
| 平台 | 搜索语法示例 | 搜索重点 |
|---|---|---|
| GitHub | site:github.com "SKILL.md" {关键词} |
开源项目、Stars、Forks |
| SkillsMP | site:skillsmp.com {关键词} skill |
技能市场、人气排序 |
| awesome-claude-skills | 直接访问 github.com/VoltAgent/awesome-claude-skills |
社区精选 |
site:reddit.com/r/ClaudeCode {关键词} |
用户讨论、真实反馈 |
搜索关键词组合(见 config.yaml:search_keywords):
{topic} claude skill(如TDD claude skill){topic} agent skill{topic} claude code
搜索示例:
# GitHub 搜索 TDD 相关技能
site:github.com "SKILL.md" TDD claude
# 搜索测试驱动开发技能
"test driven development" agent skill github
# Reddit 社区讨论
site:reddit.com/r/ClaudeCode TDD skill
辅助脚本(可选):
# 生成研究检查清单模板
python scripts/get_skill_info.py "repo1,repo2,repo3"
4. 结果合并与缓存更新
如果联网搜索:将本地缓存结果与联网搜索结果合并:
| 操作 | 说明 |
|---|---|
| 去重 | 基于 skill_name 或 GitHub URL 去重 |
| 数据源标记 | 本地/联网分别标记(source: local/online) |
| 排序优化 | 联网结果优先(最新数据),本地结果补充 |
缓存更新:将联网搜索到的新技能写入缓存
from scripts.cache_manager import CacheManager
manager = CacheManager()
manager.add_skill(
skill_name="skill-name",
meta={
"url": "https://github.com/xxx/skill",
"description": "技能描述",
"stars": 1234,
"last_updated": "2026-01-18",
"source": "online"
},
keywords=["tdd", "testing"],
tags=["official", "workflow"]
)
5. 社区舆情分析
对每个候选 skill,收集以下信息:
社区评价维度:
- GitHub Stars 数量
- 最近更新时间
- Issue 响应速度
- Fork/Watch 比例
- 社区讨论热度
质量信号:
- 是否有官方支持(Anthropic、OpenAI)
- 是否被知名团队使用(Sentry、Vercel)
- 文档完整性
- 代码质量
6. AI 评价
从 AI 视角评估每个 skill:
技术维度:
- 工作流设计的合理性
- YAML frontmatter 质量
- Progressive Disclosure 实现程度
- 与现有生态的兼容性
实用性维度:
- 使用场景覆盖度
- 配置灵活性
- 扩展性
- 维护活跃度
7. 生成推荐报告
按最合适至最不合适排序,推荐 skills。
推荐数量规则(详细参数见 config.yaml:recommendation):
优先级1:用户明确指定
- 解析用户指令中的数量关键词(如"推荐 3 个"、"给我 15 个候选")
- 示例:
"找 5 个最好的 TDD skill"→ 推荐数量 = 5
优先级2:使用默认范围
- 默认目标数量:见
config.yaml:recommendation.target_count - 可调整范围:见
config.yaml:recommendation.default_min/default_max
- 默认目标数量:见
边界约束:
- 最少:见
config.yaml:recommendation.absolute_min - 最多:见
config.yaml:recommendation.absolute_max
- 最少:见
每个 skill 包含:
## N. {Skill Name}
**GitHub**: [项目地址](https://github.com/xxx/xxx)
### 推荐理由
**社区评价**:
- ⭐ {Stars} | 🍴 {Forks} | 📅 {最后更新}
- {社区使用情况、知名团队引用等}
**AI 评价**:
- {技术优势}
- {工作流设计亮点}
- {与需求匹配度}
### 局限性
- {潜在短板}
- {适用场景限制}
- {依赖或平台要求}
辅助脚本
缓存管理
# 查看缓存统计
python scripts/cache_manager.py --stats
# 搜索缓存中的技能
python scripts/cache_manager.py --search "关键词1" "关键词2" --limit 10
# 清理特定技能缓存
python scripts/cache_manager.py --clear "skill-name"
# 清理所有缓存
python scripts/cache_manager.py --clear
批量获取技能信息
# 生成研究检查清单模板
python scripts/get_skill_info.py "repo1,repo2,repo3"
参考资源
示例
用户输入:找一个能做 TDD 的 skill
输出示例:
基于您的需求 "测试驱动开发(TDD)",我为您推荐以下 skills:
## 1. test-driven-development
**GitHub**: [obra/test-driven-development](https://github.com/VoltAgent/awesome-claude-skills)
### 推荐理由
**社区评价**:
- ⭐ 1.2k+ | 🍴 150+ | 📅 2周前更新
- 被多个团队采用,社区活跃讨论
**AI 评价**:
- 强制 Red-Green-Refactor 循环,确保 TDD 严格执行
- 支持多种测试框架
- 渐进式加载设计,性能优秀
### 局限性
- 对测试框架有预设(可能不支持您使用的框架)
- 初次使用需要适应其严格的流程要求
## 2. tdd-workflow
**GitHub**: [anthropics/tdd-workflow](https://github.com/anthropics/skills)
### 推荐理由
**社区评价**:
- ⭐ 官方维护 | 📅 持续更新
- Anthropic 官方最佳实践
**AI 评价**:
- 与 Claude Code 深度集成
- 简洁的工作流设计
- 灵活的测试适配
### 局限性
- 功能相对基础,高级特性较少
- 专注于 Claude Code 生态
[... 继续推荐 3-8 个 skills]
输出
输出规范
推荐数量
动态确定规则:
优先级 1:用户明确指定
- 解析用户指令中的数量关键词(如"推荐 3 个"、"给我 15 个候选")
- 示例:
"找 5 个最好的 TDD skill"→ 推荐数量 = 5
优先级 2:使用默认范围
- 用户未指定时,使用 5-10 个
- 根据候选质量和相关性灵活调整
边界约束:
- 最少:3 个(确实找不到更多时)
- 最多:20 个(避免信息过载)
排序:按推荐度降序排列
筛选标准
必须满足:
- 有 GitHub 仓库地址
- 有有效的 SKILL.md 文件
- 有明确的功能描述
优先推荐:
- 官方维护(Anthropic、OpenAI)
- 高 Stars(>100)
- 最近更新(6个月内)
- 有完整文档
排除条件:
- 没有 GitHub 链接
- 仓库已归档
- 超过 1 年未更新
- 文档严重缺失
数量解析示例
| 用户指令 | 解析结果 | 说明 |
|---|---|---|
"推荐 3 个 TDD skill" |
3 个 | 明确数字 |
"给我 15 个候选" |
15 个 | 超出默认范围但有效 |
"找一些 debug 技能" |
5-10 个 | 未指定,使用默认 |
"只要最好的一个" |
1 个 | 少于最少边界,但用户意图明确 |
"列出所有相关的" |
5-10 个 | 无明确数量,使用默认 |
输出管理
BenszAPI 任务工作区
校验
质量检查清单
触发验证(执行前):
- 用户明确要求"搜索/寻找/查找/推荐"技能
- 非简单询问"有没有某个技能"(应直接回答)
输出验证(执行后):
- 每个推荐都有 GitHub 链接
- 推荐理由包含社区和 AI 双重视角
- 局限性分析真实客观
- 排序逻辑清晰可解释
- 总数符合"输出规范"的约束(见上文"推荐数量规则")
失败与恢复
搜索、缓存与候选失败
get-review-theme未安装时直接从用户需求提取主题和关键词,不把可选依赖故障当作任务失败。- 本地缓存无命中时进入联网搜索;联网来源不可用或部分失败时,明确标记失败来源并使用仍可验证的缓存/搜索结果,不虚构 Stars、更新时间、链接或社区评价。
- 候选缺少 GitHub 链接、有效
SKILL.md、明确功能描述,或命中排除条件时剔除并在数量不足时说明原因,不用低质量结果填充数量。 - 缓存写入、辅助脚本或单个平台失败时保留已收集的结果和错误信息;只有满足来源可追溯、排序和数量约束的候选才进入最终推荐报告。
约束
公共硬约束
本块由 docs/templates/skill-common-constraints.md 统一维护;每个 SKILL.md 的 ## 约束 必须逐字同步本块,不得在副本中改写公共规则。
- 任务需要落盘时,使用唯一的
./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/根目录;共享材料放入shared/,Skill 专属材料放入该 Skill 的input/、output/、log/。 - 正式交付物、源代码和正式计划按项目约定保存,不写入任务工作区;未经授权不覆盖、删除、迁移或远程写入。
- 项目维护变更检查 BAC 可用性并记录需求、AI 产出、工具结果、文件改动和验证摘要;BAC 只做过程审计,不替代署名、责任或合规判断。
- 不记录 API Key、访问令牌、密码、Cookie、环境/凭据文件、私有 Prompt、身份信息、本地用户名、主机名或不必要的大体积原始数据。
- 文件路径必须规范化并限制在授权项目范围内;外部 URL、子进程和网络访问遵循最小权限,防止路径遍历、SSRF 和命令注入。
- Skill 版本唯一记录在自身
config.yaml:skill_info.version;公开 API、协议、目录或配置变更同步文档与CHANGELOG.md。 bensz-collect-bugs是一个 Agent Skill;仅将 Bensz Agent Skill 或 Bensz 基础设施本身的设计缺陷交给它。先脱敏写入~/.bensz-skills/bugs/,当前任务不中断,只有用户明确要求才公开上报,禁止直接修改用户已安装的 Skill 源码。
Files (skills)
-
references
-
agent-skills-research.md 1.6 KB
# Agent Skills 调研报告 > 最后更新:2026-01-18 > 注意:本文档可能随外部平台变化而失效,请以官方文档为准 > > 本文档是 Agent Skills 生态系统的完整调研报告,用于 find-best-skill 技能参考。 ## 核心发现 - **生态系统规模**:SkillsMP 收录超过 37,000 个 Agent Skills - **平台标准化**:Anthropic 已将 Agent Skills 发布为开放标准(2025年) - **工作流覆盖**:从 TDD、调试到代码审查,全流程自动化已成现实 ## 主要平台 | 平台 | 网址 | 特点 | |------|------|------| | **GitHub** | github.com | 开源项目聚集地 | | **SkillsMP** | skillsmp.com | 技能市场,37,000+ Skills | | **awesome-claude-skills** | github.com/VoltAgent/awesome-claude-skills | 社区精选 | | **Reddit** | reddit.com/r/ClaudeCode | 用户讨论 | ## 技能分类 ### 开发工作流 - **TDD**:test-driven-development, tdd-workflow - **调试**:systematic-debugging, root-cause-tracing - **代码审查**:code-review, code-auditor - **Git**:git-commit, git-workflow ### 专项领域 - **Web 测试**:webapp-testing, playwright-skill - **安全**:security-bluebook-builder, defense-in-depth - **云服务**:aws-skills, vercel-deploy - **数据库**:postgres ### 知名团队 - **Sentry**:getsentry/skills - **Vercel**:vercel-labs/skills - **Anthropic**:anthropics/skills ## 评价维度 ### 社区评价 - GitHub Stars/Forks - 最近更新时间 - Issue 响应速度 - 社区讨论热度 ### AI 评价 - YAML frontmatter 质量 - Progressive Disclosure 实现 - 工作流设计合理性 - 文档完整性 -
skillsmp-guide.md 1.3 KB
# SkillsMP 搜索指南 > 最后更新:2026-01-18 > 注意:本文档可能随外部平台变化而失效,请以官方文档为准 ## SkillsMP 概述 **网址**:https://skillsmp.com/ SkillsMP 是 Agent Skills 的主要市场平台,收录超过 37,000 个技能。 ## 主要功能 ### 1. 智能搜索 - **AI 语义搜索**:理解自然语言查询 - **关键词搜索**:传统关键词匹配 - **分类浏览**:按功能类别浏览 ### 2. 质量指标 - Stars 数量 - 下载次数 - 社区评分 - 最后更新时间 ### 3. 一键安装 - 支持 marketplace.json - 兼容 Claude Code、Codex CLI、ChatGPT ## 搜索技巧 ### 语义搜索 直接描述需求: - "帮我做测试驱动开发" - "需要调试代码的工具" - "自动生成 Git 提交信息" ### 关键词搜索 使用技术术语: - "TDD" - "debugging" - "git commit" - "code review" ### 分类浏览 - 测试驱动开发 - 调试与诊断 - 代码质量 - Git 工作流 - Web 开发 - 安全与合规 - DevOps ## API 使用 SkillsMP 提供 API 用于程序化搜索: ```bash # 搜索技能 curl "https://skillsmp.com/api/search?q=TDD&limit=10" # 获取技能详情 curl "https://skillsmp.com/api/skills/{skill_id}" ``` ## 相关链接 - **官方网站**:https://skillsmp.com/ - **GitHub**:https://github.com/skillsmp/skillsmp - **文档**:https://docs.skillsmp.com/
-
-
scripts
-
cache_manager.py 14.1 KB
#!/usr/bin/env python3 """ Find Best Skill - 缓存管理器 功能: - 缓存技能元数据到 .bensz-api/skills/find-best-skill/cache/ - 基于关键词和标签进行相似度匹配 - 自动清理过期缓存(默认半年) - 支持本地/联网数据混合推荐 """ import json import os import sys from datetime import datetime, timedelta from pathlib import Path from typing import Dict, List, Optional, Tuple from difflib import SequenceMatcher import argparse # `cache_manager.py` needs to work in both modes: # - `python scripts/cache_manager.py ...` (scripts/ on sys.path) # - `from scripts.cache_manager import CacheManager` (scripts as namespace package) try: from .config_loader import get_cache_config, load_config # type: ignore except ImportError: # pragma: no cover from config_loader import get_cache_config, load_config class CacheManager: """技能缓存管理器""" def __init__(self, cache_dir: Optional[str] = None, config: Optional[Dict] = None): """ 初始化缓存管理器 Args: cache_dir: 缓存目录路径,默认 .bensz-api/skills/find-best-skill/cache config: 配置字典,包含 TTL 等参数 """ self.cache_dir = Path(os.path.expanduser(cache_dir or ".bensz-api/skills/find-best-skill/cache")) self.cache_file = self.cache_dir / "cache" / "metadata.json" self.keywords_index = self.cache_dir / "cache" / "index" / "keywords.json" self.tags_index = self.cache_dir / "cache" / "index" / "tags.json" self.config = self._normalize_config(config) self._ensure_structure() @staticmethod def _normalize_config(config: Optional[Dict]) -> Dict: """Normalize config keys to keep backward compatibility.""" defaults = { "ttl_days": 180, "max_size": 1000, "similarity_threshold": 0.3, } if not config: return defaults # Accept both the new keys (ttl_days/max_size) and legacy keys # (cache_ttl_days/max_cache_size) from early versions. normalized = dict(defaults) if "ttl_days" in config: normalized["ttl_days"] = int(config["ttl_days"]) if "cache_ttl_days" in config: normalized["ttl_days"] = int(config["cache_ttl_days"]) if "max_size" in config: normalized["max_size"] = int(config["max_size"]) if "max_cache_size" in config: normalized["max_size"] = int(config["max_cache_size"]) if "similarity_threshold" in config: normalized["similarity_threshold"] = float(config["similarity_threshold"]) return normalized def _ensure_structure(self): """确保缓存目录结构存在""" self.cache_dir.mkdir(parents=True, exist_ok=True) self.cache_file.parent.mkdir(parents=True, exist_ok=True) self.keywords_index.parent.mkdir(parents=True, exist_ok=True) # also covers tags_index.parent # 初始化缓存文件(如果不存在) if not self.cache_file.exists(): self._write_cache({"skills": {}, "version": "0.1.0"}) def _read_cache(self) -> Dict: """读取缓存数据""" try: with open(self.cache_file, "r", encoding="utf-8") as f: return json.load(f) except FileNotFoundError: return {"skills": {}, "version": "0.1.0"} except json.JSONDecodeError: self._backup_corrupt_file(self.cache_file) # Self-heal to a clean cache file to keep the tool usable. fresh = {"skills": {}, "version": "0.1.0"} self._write_cache(fresh) return fresh def _write_cache(self, data: Dict): """写入缓存数据""" self._atomic_write_json(self.cache_file, data) def _read_index(self, index_file: Path) -> Dict: """读取索引文件""" try: with open(index_file, "r", encoding="utf-8") as f: return json.load(f) except (FileNotFoundError, json.JSONDecodeError): return {} def _write_index(self, index_file: Path, data: Dict): """写入索引文件""" index_file.parent.mkdir(parents=True, exist_ok=True) self._atomic_write_json(index_file, data) @staticmethod def _atomic_write_json(path: Path, data: Dict) -> None: path.parent.mkdir(parents=True, exist_ok=True) tmp_path = Path(f"{path}.tmp.{os.getpid()}") try: with open(tmp_path, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) os.replace(tmp_path, path) finally: # Best-effort cleanup (if replace failed). try: if tmp_path.exists(): tmp_path.unlink() except OSError: pass @staticmethod def _backup_corrupt_file(path: Path) -> None: ts = datetime.now().strftime("%Y%m%d%H%M%S") backup = Path(f"{path}.corrupt.{ts}") try: os.replace(path, backup) except OSError: # If we can't move it, we still fall back to a fresh cache. pass @staticmethod def _parse_iso_datetime(value: Optional[str]) -> Optional[datetime]: if not value: return None try: return datetime.fromisoformat(value) except ValueError: return None def _update_access_time(self, skill_name: str): """更新技能的访问时间""" cache = self._read_cache() if skill_name in cache["skills"]: cache["skills"][skill_name]["meta"]["last_accessed"] = datetime.now().isoformat() self._write_cache(cache) def add_skill(self, skill_name: str, meta: Dict, keywords: List[str], tags: List[str]) -> bool: """ 添加技能到缓存 Args: skill_name: 技能名称 meta: 元数据(url, description, stars, last_updated 等) keywords: 关键词列表 tags: 标签列表 Returns: 是否成功添加 """ cache = self._read_cache() # 检查缓存大小限制 if len(cache["skills"]) >= self.config["max_size"]: self._cleanup_old_entries() now = datetime.now().isoformat() cache["skills"][skill_name] = { "meta": { "name": skill_name, "cached_at": now, "last_accessed": now, "source": meta.get("source", "online"), **meta }, "keywords": [k.lower() for k in keywords], "tags": [t.lower() for t in tags], "quality": meta.get("quality", {}) } self._write_cache(cache) self._rebuild_indexes() return True def get_skill(self, skill_name: str) -> Optional[Dict]: """ 获取技能详情 Args: skill_name: 技能名称 Returns: 技能数据,不存在返回 None """ cache = self._read_cache() skill = cache["skills"].get(skill_name) if skill: self._update_access_time(skill_name) return skill def search_by_keywords(self, query_keywords: List[str], limit: int = 10) -> List[Tuple[str, float, Dict]]: """ 基于关键词搜索技能 Args: query_keywords: 查询关键词列表 limit: 返回结果上限 Returns: [(skill_name, score, skill_data), ...] 按分数降序 """ cache = self._read_cache() results = [] query_keywords = [k.lower() for k in query_keywords] for skill_name, skill_data in cache["skills"].items(): skill_keywords = skill_data.get("keywords", []) skill_tags = skill_data.get("tags", []) # 计算关键词相似度 keyword_scores = [] for qk in query_keywords: for sk in skill_keywords: ratio = SequenceMatcher(None, qk, sk).ratio() if ratio >= self.config["similarity_threshold"]: keyword_scores.append(ratio) # 标签完全匹配加分 tag_bonus = sum(1 for tag in skill_tags if tag in query_keywords) # 计算综合分数 if keyword_scores: avg_keyword_score = sum(keyword_scores) / len(keyword_scores) final_score = avg_keyword_score + (tag_bonus * 0.1) results.append((skill_name, final_score, skill_data)) # 按分数降序排序 results.sort(key=lambda x: x[1], reverse=True) return results[:limit] def _cleanup_old_entries(self): """清理过期缓存""" cache = self._read_cache() now = datetime.now() ttl = timedelta(days=self.config["ttl_days"]) to_remove = [] for skill_name, skill_data in cache["skills"].items(): cached_at = self._parse_iso_datetime(skill_data.get("meta", {}).get("cached_at")) if not cached_at or now - cached_at > ttl: to_remove.append(skill_name) for skill_name in to_remove: del cache["skills"][skill_name] self._write_cache(cache) def _rebuild_indexes(self): """重建索引文件""" cache = self._read_cache() # 构建关键词索引 keywords_index = {} for skill_name, skill_data in cache["skills"].items(): for keyword in skill_data.get("keywords", []): if keyword not in keywords_index: keywords_index[keyword] = [] keywords_index[keyword].append(skill_name) self._write_index(self.keywords_index, keywords_index) # 构建标签索引 tags_index = {} for skill_name, skill_data in cache["skills"].items(): for tag in skill_data.get("tags", []): if tag not in tags_index: tags_index[tag] = [] tags_index[tag].append(skill_name) self._write_index(self.tags_index, tags_index) def get_stats(self) -> Dict: """获取缓存统计信息""" cache = self._read_cache() now = datetime.now() ttl = timedelta(days=self.config["ttl_days"]) expiring_soon = 0 expired = 0 for skill_data in cache["skills"].values(): cached_at = self._parse_iso_datetime(skill_data.get("meta", {}).get("cached_at")) if not cached_at: expired += 1 continue age = now - cached_at if age > ttl: expired += 1 elif age > ttl * 0.8: # 超过 80% TTL expiring_soon += 1 return { "total_skills": len(cache["skills"]), "expired": expired, "expiring_soon": expiring_soon, "cache_dir": str(self.cache_dir), "ttl_days": self.config["ttl_days"] } def clear_cache(self, skill_name: Optional[str] = None): """ 清理缓存 Args: skill_name: 指定技能名,None 表示清理所有 """ cache = self._read_cache() if skill_name: if skill_name in cache["skills"]: del cache["skills"][skill_name] print(f"✓ 已清理技能: {skill_name}") else: print(f"✗ 技能不存在: {skill_name}") else: cache["skills"] = {} print("✓ 已清理所有缓存") self._write_cache(cache) self._rebuild_indexes() def main(): """命令行入口""" parser = argparse.ArgumentParser(description="Find Best Skill 缓存管理器") parser.add_argument( "--config", default=None, help="config.yaml 路径(默认:使用 find-best-skill/config.yaml)", ) parser.add_argument("--cache-dir", default=None, help="缓存目录路径(CLI 覆盖 config.yaml)") parser.add_argument("--stats", action="store_true", help="显示缓存统计信息") parser.add_argument("--clear", nargs="?", const="__ALL__", help="清理缓存(可指定技能名)") parser.add_argument("--search", nargs="+", help="搜索关键词") parser.add_argument("--limit", type=int, default=10, help="搜索结果上限") args = parser.parse_args() try: cfg = load_config(args.config) if args.config else load_config() except Exception as e: print(f"✗ 读取配置失败:{e}", file=sys.stderr) sys.exit(1) cache_cfg = get_cache_config(cfg) if not cache_cfg.enabled: print("✗ 缓存已在 config.yaml:cache.enabled 中禁用") return cache_dir = args.cache_dir or cache_cfg.dir manager = CacheManager( cache_dir=cache_dir, config={ "ttl_days": cache_cfg.ttl_days, "max_size": cache_cfg.max_size, "similarity_threshold": cache_cfg.similarity_threshold, }, ) if args.stats: stats = manager.get_stats() print("\n📊 缓存统计:") print(f" 总技能数: {stats['total_skills']}") print(f" 已过期: {stats['expired']}") print(f" 即将过期: {stats['expiring_soon']}") print(f" 缓存目录: {stats['cache_dir']}") print(f" 过期时间: {stats['ttl_days']} 天\n") elif args.clear: skill_name = None if args.clear == "__ALL__" else args.clear manager.clear_cache(skill_name) elif args.search: results = manager.search_by_keywords(args.search, limit=args.limit) print(f"\n🔍 搜索结果: {' + '.join(args.search)}\n") if results: for i, (skill_name, score, skill_data) in enumerate(results, 1): meta = skill_data["meta"] print(f"{i}. {skill_name} (相关度: {score:.2f})") print(f" {meta.get('description', 'N/A')}") print(f" ⭐ {meta.get('stars', 'N/A')} | 📅 {meta.get('last_updated', 'N/A')}") print(f" 🔗 {meta.get('url', 'N/A')}\n") else: print("未找到相关技能\n") else: parser.print_help() if __name__ == "__main__": main() -
config_loader.py 2 KB
#!/usr/bin/env python3 """ find-best-skill 配置加载器 目标: - 让 scripts/ 下的工具都以 skill 根目录的 config.yaml 为单一真相来源 - 允许通过 CLI 参数覆盖(CLI > config.yaml > 默认值) """ from __future__ import annotations from dataclasses import dataclass from pathlib import Path from typing import Any, Dict, List, Optional, Union import yaml def find_skill_root() -> Path: """Return the find-best-skill root (parent of scripts/).""" return Path(__file__).resolve().parents[1] def default_config_path() -> Path: return find_skill_root() / "config.yaml" def load_config(config_path: Optional[Union[str, Path]] = None) -> Dict[str, Any]: path = Path(config_path) if config_path else default_config_path() with open(path, "r", encoding="utf-8") as f: data = yaml.safe_load(f) or {} if not isinstance(data, dict): raise ValueError(f"config.yaml 格式不正确(期望 dict):{path}") return data def _get_nested(d: Dict[str, Any], keys: List[str], default: Any) -> Any: cur: Any = d for k in keys: if not isinstance(cur, dict) or k not in cur: return default cur = cur[k] return cur @dataclass(frozen=True) class CacheConfig: enabled: bool = True dir: str = ".bensz-api/skills/find-best-skill/cache" ttl_days: int = 180 max_size: int = 1000 similarity_threshold: float = 0.3 def get_cache_config(cfg: Dict[str, Any]) -> CacheConfig: cache = _get_nested(cfg, ["cache"], {}) or {} return CacheConfig( enabled=bool(cache.get("enabled", True)), dir=str(cache.get("dir", ".bensz-api/skills/find-best-skill/cache")), ttl_days=int(cache.get("ttl_days", 180)), max_size=int(cache.get("max_size", 1000)), similarity_threshold=float(cache.get("similarity_threshold", 0.3)), ) def get_min_stars(cfg: Dict[str, Any], default: int = 10) -> int: return int(_get_nested(cfg, ["recommendation_criteria", "min_stars"], default))
-
-
CHANGELOG.md 5.2 KB
# 变更日志 本文档记录 find-best-skill 的所有重要变更。 格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/), 版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。 --- ## [Unreleased] ### Changed - 版本升级:0.4.0 → 0.4.1;默认缓存目录从 `~/.find-best-skill/` 迁移到当前工作目录下 `.bensz-api/skills/find-best-skill/cache/`,同步更新配置与脚本 fallback。 --- ## [0.4.0] - 2026-01-18 ### Changed - **搜索方式简化**:社区调研改用 WebSearch 类工具或搜索类 MCP 工具(如 SearXNG、Tavily) - 直接利用模型内置搜索能力,无需依赖 GitHub API - 提供 `site:github.com "SKILL.md" {关键词}` 等搜索语法示例 - GitHub SEO 良好,普通搜索即可获得高质量结果 ### Removed - **移除 `search_github_skills.py`**:功能已被 WebSearch 替代,遵循 KISS 原则 - **移除 `references/github-api.md`**:不再需要 GitHub API 相关文档 - **简化 `config.yaml`**:移除 `platforms.github.search_url` 和 `platforms.github.api_url` --- ## [0.3.1] - 2026-01-18 ### Added - **统一配置加载器**(P1) - 新增 `scripts/config_loader.py`,为 scripts 提供 `config.yaml` 单一真相来源 ### Fixed - **GitHub 搜索链接类型修复**(P0) - `search_github_skills.py` 生成 GitHub code search(`type=code`),避免 repo 搜索 + code 限定符混用导致的误导 - `config.yaml:platforms.github.search_url` 同步口径 - **缓存健壮性修复**(P0) - `cache_manager.py` 的缓存/索引写入改为原子落盘(降低半写入导致损坏的风险) - 缓存 JSON 损坏自动备份并自愈 - 非法 `cached_at` 不再导致 `--stats/--cleanup` 崩溃(视为已过期) - **README 配置项口径修复**(P2) - 修正 `recommendation.min_count/max_count` 等已不存在的字段名,改为以 `config.yaml` 为准 ### Changed - **缓存参数以 `config.yaml:cache` 为准**(P0) - `cache_manager.py` 默认从 `config.yaml` 读取 `dir/ttl_days/max_size/similarity_threshold`(CLI 可覆盖) - **文档口径同步**(P1) - `SKILL.md` 补充“配置来源与覆盖优先级”说明 ### Quality - 通过 auto-test-skill A 轮测试(v202601182019) - 验证脚本可运行:`search_github_skills.py`、`cache_manager.py` - 验证缓存自愈:损坏 JSON 备份并重置 - 验证非法时间字段容错:`cached_at=not-iso` 不崩溃(判为 expired) - 通过 auto-test-skill B 轮质量检查(B轮-v202601182024) --- ## [0.3.0] - 2026-01-18 ### Added - **本地缓存机制**(P0) - 新增 `scripts/cache_manager.py` 缓存管理脚本 - 缓存目录:`~/.find-best-skill/` - 支持技能元数据缓存、关键词搜索、相似度匹配 - TTL 硬编码为 180 天(半年) - 自动过期清理、访问时间更新 - **缓存配置**(P0) - config.yaml 新增 `cache` 节(enabled, dir, ttl_days, max_size, similarity_threshold) - config.yaml 新增 `cache_strategy` 节(on_hit, on_miss, after_search 策略) - **工作流改造**(P0) - 第2步增加"缓存查询"环节 - 第4步增加"结果合并与缓存更新"环节 - 原第3-5步顺延为第5-7步 - **辅助脚本扩展**(P1) - 新增缓存管理命令:`--stats`, `--search`, `--clear` - 集成到 SKILL.md"辅助脚本"章节 ### Changed - **版本号升级**:0.2.0 → 0.3.0(新增缓存功能,次版本号更新) ### Quality - 轻量测试通过: - 缓存读写功能正常 - 关键词搜索功能正常 - 统计和清理功能正常 --- ## [0.1.1] - 2026-01-18 ### Fixed - **P0**:修复 Python 语法错误(scripts/get_skill_info.py:95) - 将 `choices["text", "json"]` 修正为 `choices=["text", "json"]` - **P0**:重新定位技能描述,更符合实际能力 - 将 YAML description 从"智能推荐"改为"搜索辅助" - 明确功能边界:生成搜索链接和研究清单 ### Changed - **P1**:删除过度设计的评价权重配置 - 移除 config.yaml 中的 `scoring_weights` 节(8个未使用的权重参数) - **P1**:统一推荐数量配置范围 - config.yaml 中 `min_count` 从 3 改为 5 - SKILL.md 同步更新为"目标 8 个(范围 5-10 个)" - **P1**:修复参考文档时效性问题 - 将"2025年12月"改为"2025年"(更通用) - **P1**:改进官方仓库列表维护 - 添加"最后验证"时间标记 - 将不存在的仓库注释掉 ### Added - **P1**:输入验证和错误处理 - search_github_skills.py:添加长度检查(200字符)和空值检查 - 两个脚本都添加了 try-except 和友好错误消息 - **P2**:参考文档时效性标记 - 所有 references/*.md 文件添加"最后更新"时间 ### Quality - 通过 auto-test-skill A 轮测试(v202601181359) - 通过 auto-test-skill B 轮质量检查(B轮-v202601181410) - 质量评分:109/115(优秀,生产就绪) --- ## [0.1.0] - 2025-12-XX ### Added - 初始版本发布 - 核心 search_github_skills.py 和 get_skill_info.py 脚本 - GitHub、SkillsMP、Reddit 搜索平台支持 - 配置文件和参考文档 --- ## 版本说明 - **主版本号**:不兼容的 API 修改 - **次版本号**:向下兼容的功能性新增 - **修订号**:向下兼容的问题修正 -
config.yaml 3 KB
# 技能基本信息 skill_info: name: find-best-skill version: 0.4.1 description: 根据用户需求智能推荐最佳 Agent Skills author: "Bensz Conan" category: 技能发现 # 搜索平台配置 platforms: github: base_url: https://github.com # 使用 WebSearch 工具搜索,语法示例:site:github.com "SKILL.md" {关键词} skillsmp: base_url: https://skillsmp.com # 使用 WebSearch 工具搜索,语法示例:site:skillsmp.com {关键词} skill awesome_list: repo: VoltAgent/awesome-claude-skills url: https://github.com/VoltAgent/awesome-claude-skills # 搜索关键词模板 search_keywords: - "{topic} + claude skill" - "{topic} + agent skill" - "{topic} + codex skill" - "{topic} + claude code" # 推荐筛选标准 recommendation_criteria: min_stars: 10 # 最少 Stars 数量 max_age_months: 12 # 最大未更新月数 require_github: true # 必须有 GitHub 仓库 require_skill_md: true # 必须有 SKILL.md 文件 # 推荐数量配置 recommendation: default_min: 5 # 默认最少推荐数量 default_max: 10 # 默认最多推荐数量 target_count: 8 # 默认目标推荐数量 absolute_min: 3 # 绝对最少数量(找不到更多时) absolute_max: 20 # 绝对最多数量(避免信息过载) user_override: true # 允许用户指定数量覆盖默认值 # 官方仓库列表 # 最后验证时间:2026-01-18 official_repos: - anthropics/skills # Anthropic 官方技能仓库(已验证) - openai/skills # OpenAI Codex Skills Catalog(已验证) # 知名社区仓库 # 最后验证时间:2026-01-18 notable_repos: - VoltAgent/awesome-claude-skills # 社区精选列表(已验证) - vercel-labs/agent-skills # Vercel Agent Skills(已验证,原 claude-skills 已重命名) # 输出格式配置 output: include_metrics: true # 包含指标(Stars、Forks 等) include_limitations: true # 包含局限性分析 # 缓存配置 cache: enabled: true # 是否启用缓存 dir: .bensz-api/skills/find-best-skill/cache # 缓存目录路径(相对当前工作目录) ttl_days: 180 # 缓存过期时间(默认半年,可配置) max_size: 1000 # 最大缓存技能数 similarity_threshold: 0.3 # 关键词相似度匹配阈值(0-1) # 缓存策略 cache_strategy: # 本地缓存命中时的处理方式 on_hit: show_results: true # 显示本地结果 ask_user: true # 询问用户是否联网扩展 default_action: "ask" # 默认动作: ask/online_only/local_only # 本地缓存未命中时的处理方式 on_miss: auto_search: true # 自动联网搜索 save_to_cache: true # 搜索结果自动写入缓存 # 联网搜索后的数据处理 after_search: merge_results: true # 合并本地和联网结果 dedup_method: "url" # 去重方法: url/name update_cache: true # 更新缓存 priority: "online" # 排序优先级: online/local/merged -
README.md 12.2 KB
# Find Best Skill 本 README 面向**使用者**:如何触发并正确使用 `find-best-skill` skill。 执行指令与硬性规范在 [SKILL.md](SKILL.md);默认参数在 [config.yaml](config.yaml)。 --- ## 用法 ### 最推荐 - 简单需求 ``` 我想找一个能做 TDD 的 skill ``` ### 场景化变体 #### 结合需求解构(推荐用于复杂需求) ``` 帮我找最适合的数据分析 skill,要求:支持 Python、有可视化功能、社区活跃 ``` #### 对比替代方案 ``` 现在最好的 code review skills 有哪些?帮我对比一下 ``` #### 发现专业领域技能 ``` 找一些做科学计算或材料模拟的 skills ``` --- ## 功能概述 **find-best-skill** 是一个智能技能推荐助手,帮你从 GitHub 生态的 37,000+ Agent Skills 中找到最合适的工具。 ### 核心价值 - **需求解构**:自动分析你的真实需求 - **社区调研**:搜索 GitHub、SkillsMP、Reddit 等平台 - **舆情分析**:综合社区评价和 AI 评价 - **客观推荐**:提供推荐理由 + 局限性分析 ### 工作原理 ``` 你的需求 → 需求解构 → 多平台搜索 → 舆情分析 → 排序推荐 ↓ (GitHub + SkillsMP + Reddit + awesome-claude-skills) ``` ### 与其他技能的区别 | 技能 | 作用 | 配合使用 | |------|------|----------| | **get-review-theme** | 解构需求 | find-best-skill 会自动调用它 | | **find-best-skill** | 推荐技能 | 使用后可直接安装推荐技能 | | **awesome-code** | 协调多技能开发 | 找到技能后用它来执行开发 | --- ## 使用示例 ### 示例 1:寻找测试工具(最简单) **你**:找一个能做 TDD 的 skill **find-best-skill** 输出(摘要): ```markdown 基于您的需求 "测试驱动开发(TDD)",我为您推荐以下 skills: ## 1. test-driven-development **GitHub**: [obra/test-driven-development](https://github.com/VoltAgent/awesome-claude-skills) ### 推荐理由 **社区评价**: - ⭐ 1.2k+ | 🍴 150+ | 📅 2周前更新 - 被多个团队采用,社区活跃讨论 **AI 评价**: - 强制 Red-Green-Refactor 循环,确保 TDD 严格执行 - 支持多种测试框架 - 渐进式加载设计,性能优秀 ### 局限性 - 对测试框架有预设(可能不支持您使用的框架) - 初次使用需要适应其严格的流程要求 ## 2. tdd-workflow **GitHub**: [anthropics/tdd-workflow](https://github.com/anthropics/skills) ### 推荐理由 **社区评价**: - ⭐ 官方维护 | 📅 持续更新 - Anthropic 官方最佳实践 **AI 评价**: - 与 Claude Code 深度集成 - 简洁的工作流设计 - 灵活的测试适配 ### 局限性 - 功能相对基础,高级特性较少 - 专注于 Claude Code 生态 [... 继续推荐 3-8 个 skills] ``` --- ### 示例 2:寻找复杂功能技能 **你**:找一个能做 Git commit 信息自动生成的 skill,最好支持 Conventional Commits **find-best-skill** 会: 1. 解构需求 → 关键词:`git`、`commit`、`conventional commits` 2. 搜索平台 → GitHub、SkillsMP、awesome-claude-skills 3. 分析舆情 → Stars、更新时间、社区讨论 4. 推荐输出 → `git-commit`(多个实现,按推荐度排序) --- ### 示例 3:对比同类技能 **你**:现在最好的 debugging skills 有哪些?帮我对比一下 **find-best-skill** 输出特点: - 并列推荐多个调试技能 - 每个技能的适用场景说明 - 帮你选择最适合你工作流的 --- ## 输出格式 每个推荐技能包含: | 部分 | 内容 | |------|------| | **GitHub 链接** | 项目地址(可点击) | | **推荐理由** | 社区评价 + AI 评价 | | **局限性** | 潜在短板、适用场景限制 | | **排序** | 按推荐度降序(最合适在前) | --- ## 配置选项 默认配置在 [config.yaml](config.yaml),主要参数: | 参数 | 默认值 | 说明 | |------|--------|------| | `recommendation.target_count` | 8 | 目标推荐数量 | | `recommendation.default_min` | 5 | 默认最少推荐数量 | | `recommendation.default_max` | 10 | 默认最多推荐数量 | | `recommendation.absolute_min` | 3 | 绝对最少数量(找不到更多时) | | `recommendation.absolute_max` | 20 | 绝对最多数量(避免信息过载) | | `recommendation_criteria.min_stars` | 10 | 最少 Stars 数量 | | `recommendation_criteria.max_age_months` | 12 | 最大未更新月数 | 如需自定义,可以在调用时说明: - "只推荐前 3 个" - "至少找 10 个" - "只要最近 6 个月更新的" --- ## 备选用法(辅助脚本) 以下脚本主要用于**开发调试**,普通用户无需使用。 ### 生成研究清单 ```bash # 为指定仓库生成研究检查清单 python scripts/get_skill_info.py "obra/test-driven-development,anthropics/skills" # 输出结构化清单,包含需要收集的信息点 ``` --- ## 常见问题 ### Q:推荐结果包含哪些平台? A:主要从以下平台搜索: - **GitHub**:开源项目主阵地 - **SkillsMP**:37,000+ 技能市场 - **awesome-claude-skills**:社区精选列表 - **Reddit**(/r/ClaudeCode):真实用户讨论 ### Q:如何保证推荐质量? A:通过以下筛选标准: - 必须有 GitHub 仓库 - 必须有有效的 SKILL.md 文件 - 优先推荐高 Stars(>100) - 优先推荐最近更新(6个月内) - 排除已归档仓库 ### Q:推荐的数量为什么是 5-10 个? A:这是经验值: - **少于 3 个**:选择太少,可能错过好工具 - **多于 10 个**:信息过载,难以决策 - **5-8 个**:最佳平衡点(默认目标 8 个) ### Q:如果找不到合适的技能怎么办? A:可能的原因: - 需求太新,社区还没有相关技能 - 需求太偏,属于小众领域 - 关键词不够准确 建议: - 尝试更通用的关键词 - 描述问题而非解决方案 - 考虑创建自定义技能 ### Q:可以直接安装推荐的技能吗? A:推荐报告包含 GitHub 链接,你可以: 1. 克隆仓库到 `~/.claude/skills/` 2. 使用 SkillsMP 的一键安装(如果支持) 3. 手动复制 SKILL.md 到本地 ### Q:推荐结果会保存吗? A:不会自动保存。如需保存,建议: - 复制推荐报告到 Markdown 文件 - 保存推荐的 GitHub 链接到书签 - 使用 Claude Code 的会话历史功能 --- ## 更多文档 - [SKILL.md](SKILL.md) — 完整的工作流和执行规范 - [config.yaml](config.yaml) — 可配置参数 - [references/agent-skills-research.md](references/agent-skills-research.md) — Agent Skills 生态调研 - [references/skillsmp-guide.md](references/skillsmp-guide.md) — SkillsMP 使用指南 ## WHICHMODEL - 模型选择最佳实践 **最后更新**:2026-01-25 ### 披露信息 - **覆盖厂商**:Anthropic(1/6 = 17%) - **来源构成**:社区 70%, 官方 20%, 技术博客 10% - **数据时效**:2024-10 至 2026-01 - **局限性**:未覆盖国产模型,未独立测试技能推荐准确率 --- ### 场景化建议 #### 场景 1:标准技能搜索(最常见) **触发条件**:需要寻找特定功能的 Agent Skill | 项目 | 建议 | |------|------| | **推荐模型** | Claude Sonnet 4.5 | | **推理强度** | medium | | **预期成本** | ~$0.02-0.10/次 | **理由**: - 技能搜索需要需求解构、多平台搜索、舆情分析和 AI 评价等多个步骤 - Sonnet 在多步骤任务协调中表现出色,能够理解需求并综合多源信息 - [社区对比](https://medium.com/@ayaanhaider.dev/sonnet-4-5-vs-haiku-4-5-vs-opus-4-1-which-claude-model-actually-works-best-in-real-projects-7183c0dc2249) 显示 Sonnet 在复杂场景下的优势 - **技能搜索需要平衡推理能力与效率,Sonnet 的性价比最高** **避免**:简单搜索不需要 Opus,用 Sonnet 即可 **来源**:社区对比讨论 + 官方模型选择指南 --- #### 场景 2:复杂需求分析 **触发条件**: - 需要深度理解复杂需求并解构主题 - 需要对比多个技能的优缺点 - 需要分析社区舆情和 AI 评价 | 项目 | 建议 | |------|------| | **推荐模型** | Claude Sonnet 4.5 | | **推理强度** | medium-high | | **预期成本** | ~$0.05-0.20/次 | **理由**: - Sonnet 在复杂分析任务中表现优异,能够理解需求的复杂性并生成准确的推荐 - [社区反馈](https://www.reddit.com/r/ClaudeAI/comments/1por062/claude_opus_45_is_insane_and_it_ruined_other/) 显示 Sonnet 在分析任务中与 Opus 质量相当 - **复杂需求分析需要较强的推理能力,Sonnet 足够胜任** **避免**:极少需要 Opus,除非需求极其复杂 **来源**:Reddit 社区讨论 + 90 天对比测试 --- ### 对比总结 | 模型 | 最适合 | 最不适合 | 相对成本 | 相对速度 | 推荐度 | |------|-------|---------|---------|---------|-------| | **Sonnet 4.5** | 所有技能搜索场景(95%) | 极端复杂的需求分析 | $$$$ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | | **Haiku 4.5** | 简单关键词搜索 | 复杂需求分析(理解不足) | $$ | ⭐⭐⭐⭐⭐ | ⭐⭐ | | **Opus 4.5** | **不推荐** | 所有场景(浪费) | $$$$$ | ⭐⭐ | ⭐ | **说明**: - Sonnet 覆盖 95% 的技能搜索场景 - Haiku 仅用于简单关键词搜索(单一功能、无复杂分析) - Opus 对此任务**完全不必要**,成本过高且无性能提升 --- ### 通用原则 1. **默认从 Sonnet 开始**:95% 的技能搜索任务 Sonnet 足够,无需 Opus 2. **复杂度判断**:根据需求的复杂程度选择模型 - 简单搜索(单一关键词):Sonnet 或 Haiku - 标准搜索(多关键词、需要对比):Sonnet - 复杂需求(需要深度解构和分析):Sonnet(极少需要 Opus) 3. **质量优先**:技能推荐是"找到合适的工具",不应只追求低成本而牺牲推荐质量 4. **多步骤任务需要推理**:需求解构 + 多平台搜索 + 舆情分析 + AI 评价,需要较强的推理能力 5. **Haiku 的局限性**:虽然 Haiku 速度快、成本低,但 [社区反馈](https://www.reddit.com/r/ClaudeAI/comments/1o856eb/tested_haiku_45_it-is-fast-but-cant-complete/) 显示它在完成复杂多步骤任务时可能遇到困难 --- ### ⚠️ 争议点 #### Sonnet vs Haiku:技能搜索可以用 Haiku 吗? | 观点 | 支持者 | 理由 | |------|-------|------| | **Sonnet 更保险** | 社区多数意见 | 技能搜索需要理解需求并综合多源信息,Haiku 可能无法胜任 | | **Haiku 足够** | 部分开发者 | 简单关键词搜索是简单任务,Haiku 完全胜任 | **数据支持**: - [某用户测试](https://medium.com/@cognidownunder/claude-haiku-4-5-matches-sonnets-coding-skills-at-80-less-cost-changes-everything-297f4b163d4e):Haiku 在编码任务中匹配 Sonnet 能力,成本降低 80% - [官方文档](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model):Haiku 专为"高吞吐量、低延迟"场景设计 **建议**: - **默认使用 Sonnet**:技能搜索需要理解和综合能力,Sonnet 完全胜任 - **仅在以下情况使用 Haiku**: - 非常简单的关键词搜索(单一功能、无复杂分析) - 快速查找已知的技能名称 - Sonnet 出现理解错误时(极少见) --- ### 更新记录 - 2026-01-25:首次调研,覆盖 Anthropic - 建议:2026-07 重新调研(6 个月后) --- ### 来源链接 **官方文档**: - [Claude Tool Use Documentation](https://platform.claude.com/docs/en/agents-and-tools/tool-use/overview) - [Choosing the right model](https://platform.claude.com/docs/en/about-claude/models/choosing-a-model) - [Claude Haiku 4.5 System Card](https://www.anthropic.com/claude-haiku-4-5-system-card) **社区讨论**: - [Sonnet 4.5 vs Haiku 4.5 vs Opus 4.1](https://medium.com/@ayaanhaider.dev/sonnet-4-5-vs-haiku-4-5-vs-opus-4-1-which-claude-model-actually-works-best-in-real-projects-7183c0dc2249) - [Claude Opus 4.5 is insane (Reddit)](https://www.reddit.com/r/ClaudeAI/comments/1por062/claude_opus_45_is_insane_and_it_ruined_other/) **技术博客**: - [Top Use Cases for Claude Haiku 4.5](https://chatlyai.app/blog/claude-haiku-4-5-use-cases) - [Claude Haiku 4.5 matches Sonnet's coding skills at 80% less cost](https://medium.com/@cognidownunder/claude-haiku-4-5-matches-sonnets-coding-skills-at-80-less-cost-changes-everything-297f4b163d4e) -
SKILL.md 12.3 KB
--- name: find-best-skill description: 当用户明确要求搜索、寻找、查找或推荐某个领域的 Agent Skill 时使用。对候选 Skill 进行多来源检索与比较后给出推荐。⚠️ 不适用:只想查看已有技能列表,或没有明确搜索/推荐意图。 metadata: author: Bensz Conan keywords: - find-best-skill --- # Find Best Skill ## 目标 当用户明确要求"搜索技能"、"寻找 Agent Skill"、"查找某个领域的 skill"、"推荐最佳 skill"时使用。支持多平台搜索(GitHub、SkillsMP、Reddit)和社区/AI 双维度评价,推荐数量可根据用户指令动态调整(默认 5-10 个,支持 3-20 个)。⚠️ 不适用:用户只是询问"有没有某个技能"(应直接回答)、只是想了解技能列表(应直接列举)、没有明确"搜索/寻找/查找/推荐"意图。 ## 流程 ### 输入 #### 使用场景 当用户需要: - 寻找特定功能的 Agent Skill - 了解社区中某个领域的最佳实践方案 - 对比不同技能的优劣 - 发现已有技能的替代方案 #### 依赖关系 **可选依赖**: - **get-review-theme** skill:用于需求解构(第 1 步) - 如果用户未安装该 skill,可直接分析用户需求提取主题和关键词 ### 执行步骤 #### 核心工作流 ##### 1. 需求解构 分析用户需求,提取核心主题和关键词: **优先使用** **get-review-theme** skill(如已安装): ```bash /skill get-review-theme "用户原始需求描述" ``` **如未安装**:直接分析用户需求,从用户输入中提取核心主题、关键词、具体问题。 ##### 2. 缓存查询 **优先检查本地缓存**,快速匹配历史技能: ```bash # 使用缓存管理器搜索匹配技能 python scripts/cache_manager.py --search "关键词1" "关键词2" --limit 10 ``` 说明: - 默认缓存参数来自 `config.yaml:cache`(单一真相来源) - CLI 参数(如 `--cache-dir`)会覆盖 `config.yaml` **命中策略**: | 情况 | 处理方式 | |------|----------| | **有命中** | 展示本地结果 → 询问用户"是否联网扩展?" → 用户选择 | | **无命中** | 直接进入联网搜索(第 3 步) | **用户交互话术**: ```markdown 基于本地缓存,我找到 {N} 个相关技能: {展示本地结果} 💡 发现 {N} 个候选,是否联网扩展搜索以获取更多最新结果? - 回复"是"或"联网"进行在线搜索 - 回复"否"或"直接使用"直接输出以上结果 ``` ##### 3. 社区调研 基于解构结果,使用 **WebSearch 类工具**或**搜索类 MCP 工具**(如 SearXNG、Tavily)进行多平台搜索。 **搜索平台**: | 平台 | 搜索语法示例 | 搜索重点 | |------|-------------|----------| | **GitHub** | `site:github.com "SKILL.md" {关键词}` | 开源项目、Stars、Forks | | **SkillsMP** | `site:skillsmp.com {关键词} skill` | 技能市场、人气排序 | | **awesome-claude-skills** | 直接访问 `github.com/VoltAgent/awesome-claude-skills` | 社区精选 | | **Reddit** | `site:reddit.com/r/ClaudeCode {关键词}` | 用户讨论、真实反馈 | **搜索关键词组合**(见 `config.yaml:search_keywords`): - `{topic} claude skill`(如 `TDD claude skill`) - `{topic} agent skill` - `{topic} claude code` **搜索示例**: ``` # GitHub 搜索 TDD 相关技能 site:github.com "SKILL.md" TDD claude # 搜索测试驱动开发技能 "test driven development" agent skill github # Reddit 社区讨论 site:reddit.com/r/ClaudeCode TDD skill ``` **辅助脚本**(可选): ```bash # 生成研究检查清单模板 python scripts/get_skill_info.py "repo1,repo2,repo3" ``` ##### 4. 结果合并与缓存更新 **如果联网搜索**:将本地缓存结果与联网搜索结果合并: | 操作 | 说明 | |------|------| | **去重** | 基于 skill_name 或 GitHub URL 去重 | | **数据源标记** | 本地/联网分别标记(`source: local/online`) | | **排序优化** | 联网结果优先(最新数据),本地结果补充 | **缓存更新**:将联网搜索到的新技能写入缓存 ```python from scripts.cache_manager import CacheManager manager = CacheManager() manager.add_skill( skill_name="skill-name", meta={ "url": "https://github.com/xxx/skill", "description": "技能描述", "stars": 1234, "last_updated": "2026-01-18", "source": "online" }, keywords=["tdd", "testing"], tags=["official", "workflow"] ) ``` ##### 5. 社区舆情分析 对每个候选 skill,收集以下信息: **社区评价维度**: - GitHub Stars 数量 - 最近更新时间 - Issue 响应速度 - Fork/Watch 比例 - 社区讨论热度 **质量信号**: - 是否有官方支持(Anthropic、OpenAI) - 是否被知名团队使用(Sentry、Vercel) - 文档完整性 - 代码质量 ##### 6. AI 评价 从 AI 视角评估每个 skill: **技术维度**: - 工作流设计的合理性 - YAML frontmatter 质量 - Progressive Disclosure 实现程度 - 与现有生态的兼容性 **实用性维度**: - 使用场景覆盖度 - 配置灵活性 - 扩展性 - 维护活跃度 ##### 7. 生成推荐报告 按最合适至最不合适排序,推荐 skills。 **推荐数量规则**(详细参数见 `config.yaml:recommendation`): 1. **优先级1:用户明确指定** - 解析用户指令中的数量关键词(如"推荐 3 个"、"给我 15 个候选") - 示例:`"找 5 个最好的 TDD skill"` → 推荐数量 = 5 2. **优先级2:使用默认范围** - 默认目标数量:见 `config.yaml:recommendation.target_count` - 可调整范围:见 `config.yaml:recommendation.default_min/default_max` 3. **边界约束**: - 最少:见 `config.yaml:recommendation.absolute_min` - 最多:见 `config.yaml:recommendation.absolute_max` 每个 skill 包含: ```markdown ## N. {Skill Name} **GitHub**: [项目地址](https://github.com/xxx/xxx) ### 推荐理由 **社区评价**: - ⭐ {Stars} | 🍴 {Forks} | 📅 {最后更新} - {社区使用情况、知名团队引用等} **AI 评价**: - {技术优势} - {工作流设计亮点} - {与需求匹配度} ### 局限性 - {潜在短板} - {适用场景限制} - {依赖或平台要求} ``` #### 辅助脚本 ##### 缓存管理 ```bash # 查看缓存统计 python scripts/cache_manager.py --stats # 搜索缓存中的技能 python scripts/cache_manager.py --search "关键词1" "关键词2" --limit 10 # 清理特定技能缓存 python scripts/cache_manager.py --clear "skill-name" # 清理所有缓存 python scripts/cache_manager.py --clear ``` ##### 批量获取技能信息 ```bash # 生成研究检查清单模板 python scripts/get_skill_info.py "repo1,repo2,repo3" ``` #### 参考资源 - [Agent Skills 调研报告](references/agent-skills-research.md) - [SkillsMP 搜索指南](references/skillsmp-guide.md) #### 示例 **用户输入**:`找一个能做 TDD 的 skill` **输出示例**: ```markdown 基于您的需求 "测试驱动开发(TDD)",我为您推荐以下 skills: ## 1. test-driven-development **GitHub**: [obra/test-driven-development](https://github.com/VoltAgent/awesome-claude-skills) ### 推荐理由 **社区评价**: - ⭐ 1.2k+ | 🍴 150+ | 📅 2周前更新 - 被多个团队采用,社区活跃讨论 **AI 评价**: - 强制 Red-Green-Refactor 循环,确保 TDD 严格执行 - 支持多种测试框架 - 渐进式加载设计,性能优秀 ### 局限性 - 对测试框架有预设(可能不支持您使用的框架) - 初次使用需要适应其严格的流程要求 ## 2. tdd-workflow **GitHub**: [anthropics/tdd-workflow](https://github.com/anthropics/skills) ### 推荐理由 **社区评价**: - ⭐ 官方维护 | 📅 持续更新 - Anthropic 官方最佳实践 **AI 评价**: - 与 Claude Code 深度集成 - 简洁的工作流设计 - 灵活的测试适配 ### 局限性 - 功能相对基础,高级特性较少 - 专注于 Claude Code 生态 [... 继续推荐 3-8 个 skills] ``` ### 输出 #### 输出规范 ##### 推荐数量 **动态确定规则**: 1. **优先级 1:用户明确指定** - 解析用户指令中的数量关键词(如"推荐 3 个"、"给我 15 个候选") - 示例:`"找 5 个最好的 TDD skill"` → 推荐数量 = 5 2. **优先级 2:使用默认范围** - 用户未指定时,使用 5-10 个 - 根据候选质量和相关性灵活调整 3. **边界约束**: - **最少**:3 个(确实找不到更多时) - **最多**:20 个(避免信息过载) **排序**:按推荐度降序排列 ##### 筛选标准 **必须满足**: - 有 GitHub 仓库地址 - 有有效的 SKILL.md 文件 - 有明确的功能描述 **优先推荐**: - 官方维护(Anthropic、OpenAI) - 高 Stars(>100) - 最近更新(6个月内) - 有完整文档 **排除条件**: - 没有 GitHub 链接 - 仓库已归档 - 超过 1 年未更新 - 文档严重缺失 ##### 数量解析示例 | 用户指令 | 解析结果 | 说明 | |---------|---------|------| | `"推荐 3 个 TDD skill"` | 3 个 | 明确数字 | | `"给我 15 个候选"` | 15 个 | 超出默认范围但有效 | | `"找一些 debug 技能"` | 5-10 个 | 未指定,使用默认 | | `"只要最好的一个"` | 1 个 | 少于最少边界,但用户意图明确 | | `"列出所有相关的"` | 5-10 个 | 无明确数量,使用默认 | ### 输出管理 #### BenszAPI 任务工作区 ### 校验 #### 质量检查清单 **触发验证**(执行前): - [ ] 用户明确要求"搜索/寻找/查找/推荐"技能 - [ ] 非简单询问"有没有某个技能"(应直接回答) **输出验证**(执行后): - [ ] 每个推荐都有 GitHub 链接 - [ ] 推荐理由包含社区和 AI 双重视角 - [ ] 局限性分析真实客观 - [ ] 排序逻辑清晰可解释 - [ ] 总数符合"输出规范"的约束(见上文"推荐数量规则") ### 失败与恢复 #### 搜索、缓存与候选失败 - `get-review-theme` 未安装时直接从用户需求提取主题和关键词,不把可选依赖故障当作任务失败。 - 本地缓存无命中时进入联网搜索;联网来源不可用或部分失败时,明确标记失败来源并使用仍可验证的缓存/搜索结果,不虚构 Stars、更新时间、链接或社区评价。 - 候选缺少 GitHub 链接、有效 `SKILL.md`、明确功能描述,或命中排除条件时剔除并在数量不足时说明原因,不用低质量结果填充数量。 - 缓存写入、辅助脚本或单个平台失败时保留已收集的结果和错误信息;只有满足来源可追溯、排序和数量约束的候选才进入最终推荐报告。 ## 约束 <!-- BEGIN COMMON CONSTRAINTS --> <!-- Source-Hash: sha256:15120201e9e0c7569517261d57ecefb63ac279c26ed13876f8e95b6dc35854d3 --> <!-- Template-ID: skill-common-constraints; Template-Version: 1; Sync-Policy: exact-block --> ### 公共硬约束 本块由 `docs/templates/skill-common-constraints.md` 统一维护;每个 `SKILL.md` 的 `## 约束` 必须逐字同步本块,不得在副本中改写公共规则。 - 任务需要落盘时,使用唯一的 `./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/` 根目录;共享材料放入 `shared/`,Skill 专属材料放入该 Skill 的 `input/`、`output/`、`log/`。 - 正式交付物、源代码和正式计划按项目约定保存,不写入任务工作区;未经授权不覆盖、删除、迁移或远程写入。 - 项目维护变更检查 BAC 可用性并记录需求、AI 产出、工具结果、文件改动和验证摘要;BAC 只做过程审计,不替代署名、责任或合规判断。 - 不记录 API Key、访问令牌、密码、Cookie、环境/凭据文件、私有 Prompt、身份信息、本地用户名、主机名或不必要的大体积原始数据。 - 文件路径必须规范化并限制在授权项目范围内;外部 URL、子进程和网络访问遵循最小权限,防止路径遍历、SSRF 和命令注入。 - Skill 版本唯一记录在自身 `config.yaml:skill_info.version`;公开 API、协议、目录或配置变更同步文档与 `CHANGELOG.md`。 - `bensz-collect-bugs` 是一个 Agent Skill;仅将 Bensz Agent Skill 或 Bensz 基础设施本身的设计缺陷交给它。先脱敏写入 `~/.bensz-skills/bugs/`,当前任务不中断,只有用户明确要求才公开上报,禁止直接修改用户已安装的 Skill 源码。 <!-- End of canonical common constraints. --> <!-- END COMMON CONSTRAINTS -->
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.