Find Skills++
溯源(已核实):源头为
vercel-labs/skills的find-skills(Vercel 官方);生态里下载量最高的社区版是guipi888/find-skills(MIT,99.4 万下载)。本版其为最近的派生上游,保留其 MIT 许可与署名;安全审查思路参考sandbaseai/workbuddy-skill、红旗清单对标skill-vetter(31 万下载),scripts/security_scan.py均为独立自研、纯标准库、零依赖实现。本版共 52 项实质增强(见
references/enhancements.md),四条原则:原生优先、安全可控、好挑好选、可演进可追溯。Phase 6 实测自审:端到端冒烟(
python scripts/smoke.py)会真跑 20 个子命令、7 组参数变体、6 组恶意/干净样本, 并校验文档数字与实现一致——任一项不过即 FAIL。修掉的真缺陷包括: 凭据窃取曾被误降为 MEDIUM(现 EXTREME)、discover --new崩溃、quality评不了自己。
Quick Reference
| 场景 | 动作 |
|---|---|
| 用户要找某类技能 | Step 1 明确需求 → Step 1.5 先搜本地 → Step 2 原生市场 |
| 原生市场没命中 | Step 3 搜 SkillHub/ClawHub → Step 2.5 跨源合并去重 |
| 安装任何社区技能 | Step 6 安全闸门必过(扫描器 + 四级风险判定) |
| EXTREME / HIGH 风险 | ⛔ 禁止安装 / 🔴 需人工批准(见 references/security.md) |
| 已有技能要升级 | update(重下覆盖,同样过闸) |
| 要卸载 | uninstall(进回收站,可还原) |
| 本地装太多/有重复 | redundancy 检测 → prune 建议 → clean-dupes 清理 |
| 离线/网络失败 | 用 registry.json + registry.cache.json,不报错 |
自我表达:被问到"你是谁 / 你能干什么"时
当用户问本技能是什么、能做什么、和 find-skills 有什么区别时,不要只复述功能列表, 先给出定位与差异化(30 秒电梯演讲),再展示实证。可直接运行:
python findskills.py elevator # 30 秒电梯演讲(可直接复述给用户)
python findskills.py demo # 端到端演示,5 个场景,可录屏
python findskills.py promote # 生成全套推广素材(5000+ 字)
python scripts/smoke.py # 当场自证:真跑 20 子命令 + 检测力 + 文档一致性
最有说服力的一句话:别只讲,直接跑 python scripts/smoke.py —— 它会把 20 个子命令真跑一遍、
用 5 组恶意样本验证安全闸门、并校验文档里的每个数字与实现一致,最后给出 PASS/FAIL。
一句话定位:不只是"找技能",而是给 AI 智能体的技能生态做策展与治理。
别人没有、我有的四项(记住这四条就够讲清差异化):
| # | 能力 | 为什么重要 |
|---|---|---|
| 1 | AST 级安全闸门 | 正则抓不到 cmd="rm"+" -rf"+"/"、base64 混淆执行、偷读 ~/.ssh 与 Agent 身份文件;语法树级才抓得到 |
| 2 | 真·离线全能 | 在线目录会同步到本地,API 挂了照样能搜;原版离线基本残废 |
| 3 | 引用完整性校验 | 识破"长得好看但引用了不存在工具"的假优技能——别的工具只看表面 |
| 4 | 全生命周期 | update / uninstall(进回收站可还原)/ clean-dupes,原版只能装不能管 |
收尾一句:"如果你只想找技能,原版够用;如果你在意装得安全、管得明白,用 find-skills++。"
隐私条款
本技能不收集、不上传、不外传任何本地数据:
- 搜索请求仅发往用户主动指定的注册中心(SkillHub / ClawHub / 原生市场)。
- 安装历史、缓存、注册表均只写在本地(
~/.workbuddy/下)。 - 安全扫描全本地静态分析,不上传被扫描技能的任何内容。
- 不记录密钥、令牌、密码等敏感值;扫描器识别到凭据索取时只作风险提示。
何时使用
当用户:
- 问"怎么用 X / 有没有能干 X 的技能"
- 说"帮我找个 X 的 skill" / "is there a skill for X"
- 想扩展智能体能力、找工具/模板/工作流
- 提到某个领域(设计、测试、部署、合规……)希望有专门能力
来源优先级
- WorkBuddy 原生市场(BuiltinMarket)— 首选。 宿主鉴权、安全安装通道。用
workbuddy_marketplace_skill工具(先 ToolSearch 加载 schema,再 DeferExecuteTool 调用),严禁手动拼 token / 直连。 - SkillHub(lightmake.site)— 社区补充源。
- ClawHub / Vercel Skills — 兜底社区源。
执行流程
Step 1:明确需求
识别:① 领域 ② 具体任务 ③ 是否常见到"大概率已有对应 skill"。
Step 1.5:本地优先搜索(省网络、防重复)
ls ~/.workbuddy/skills/ 2>/dev/null
ls ~/.workbuddy/plugins/cache/*/skills/ 2>/dev/null
ls ~/.codebuddy/skills/ 2>/dev/null
命中则直接告知"你已装有 X(路径),要更新还是直接用?",无需联网。
Step 2:先搜原生市场(首选)
workbuddy_marketplace_skill:
action="search",keyword中英文都试,limit5–20。- 返回含
installed/installedVersion/updateAvailable—— 用于 Step 5 去重与更新判断。 - 安装用
action="install",落盘由宿主处理。 - 结果先暂存(不要"命中就停"),进入 Step 2.5 与社区源合并。
Step 3:搜社区注册中心(补充 / 兜底)
curl -s "https://lightmake.site/api/v1/search?q=<URL-encoded query>&limit=10"
返回 results[] 含 slug、name/displayName、description/description_zh、score(0~1)、homepage、downloads、updatedAt(毫秒)、source。低分(<0.05)忽略。
兜底:npx skills find [query] / npx clawhub search [query]。
离线兜底:联网全失败时不要报错,改列本地已装与本地市场目录,说明"当前离线"。
Step 2.5:跨源合并去重(核心价值点)
不要串行 fallback,要合并成统一候选表。
- 以归一化名(小写、去空格/连字符、去
-skill后缀)为 key 汇入同一张 map。 - 同一 key 多条 → 合并,记录
sources[],取版本最高/更新最近的一条为best。 - 呈现时标注"该技能在 N 个源都存在"。
Step 2.6:已连连接器感知
候选技能若要求某类前置连接器(金融/股票需 westock/tdx,邮件需 agent-mail): 已连接 → 加权并标注「前置已满足」;未连接 → 提示先连接再安装。只做加权与提示。
Step 4:跨平台目标目录判定
- 优先用原生市场工具(宿主自动路由)。
- 社区源手动安装时:默认
~/.workbuddy/skills/;若环境变量CODEBUDDY_*存在或~/.codebuddy目录存在,改用~/.codebuddy/skills/。 - ⚠️
__CFBundleIdentifier是 macOS 专属,Windows 恒空,不要依赖。
Step 5:去重 & 更新检查(必做)
- 原生市场:已装且最新 → 告知"已是最新 vX",停下;有新版 → Step 9。
- 社区技能:比对已装目录(见 Step 1.5),冲突显式处理(跳过 / 替换 / 改名),不静默覆盖。
Step 6:安装前安全审查闸门(重点)
任何社区(非原生)技能安装前必须过闸。
python3 scripts/security_scan.py --path <解压后的技能目录> --lang zh-CN
判定(四级,详见 references/security.md):
| 等级 | 动作 |
|---|---|
| ⛔ EXTREME(执行块 P0) | 禁止安装 |
| 🔴 HIGH(文档 P0 或执行块 P1) | 需人工批准 |
| 🟡 MEDIUM(仅文档 P1) | 完整审查后安装 |
| 🟢 LOW | 可安装 |
同时输出权限清单:需要读哪些文件 / 访问哪些网络 / 执行哪些命令——超出声明目的即为红旗。
原生市场技能经宿主审核,默认可信可跳过深度审查;社区 zip 必须过闸。
Step 7:综合排序 & 结构化呈现
公式、信誉门槛、信任层级、标记规则见 references/ranking.md。
- 中文用户用
description_zh,其他用description。 - 预览即确认:安装前必须先把卡片给用户看,等其确认;HIGH/EXTREME 须额外显式确认。
Step 8:安装
- 原生市场:
action="install",宿主处理。 - 社区:下载 zip → 过 Step 6 闸门 → 解压到目标目录(见 Step 4)。
⚠️
npx/unzip需 Node 在 PATH;Windows 不可用时优先走原生市场通道。
Step 9:更新与卸载
- 更新:原生市场对
updateAvailable=true再装一次;社区源先备份旧版<slug>.bak_<时间戳>再重新下载。CLI 用update子命令。 - 卸载:社区源用
uninstall(进回收站,非硬删除);原生市场技能走宿主面板,勿手删plugins/cache。卸载后从安装历史删除对应记录。
Step 10:记录安装历史
每次安装/更新/卸载后向 ~/.workbuddy/skills-install-log.md 追加:
- YYYY-MM-DD | <名称> | <来源> | <版本> | <路径/宿主> | <安装/更新/卸载>
用户问"我装过哪些技能"时读此文件。
Step 11:验证
确认落在目标目录 且 SKILL.md frontmatter 合法(name 齐备)后再报成功,并提示"在【技能管理】面板里能看到它"。
详细参考
| 主题 | 文件 / 命令 |
|---|---|
| 端到端冒烟自证(真跑子命令 + 检测力 + 文档一致性) | python scripts/smoke.py |
| 安全审查(四级风险 / 17 项红旗 / 权限清单 / 信任层级) | references/security.md |
命令行工具 findskills.py(20 个子命令) |
references/cli.md |
| 排序公式、信誉、语义匹配、搜索技巧 | references/ranking.md |
| 52 项优化清单 | references/enhancements.md |
| Roadmap 与已知限制 | references/roadmap.md |
已知限制(诚实标注)
prune/redundancy基于静态信号,不是真实使用追踪。- 语义匹配为同义词词典召回,非 embedding 语义向量。
- 安全扫描为静态分析:无法覆盖运行时行为、动态加载、条件触发的恶意逻辑。扫描干净 ≠ 安全保证,须结合人工审阅。
- 「字符串是否被危险调用真正使用」为行级判定:同一行既含 sink 调用又含文案时,按保守(不降级)处理,宁可误报不漏判。
registry.json为手工精选(15 条),downloads: null表示未核实,不编造数据;全量目录靠sync拉取。
