1实现原理 · 为什么它能做到
实现原理极简:skill 不打包、不镜像任何图标文件,全部能力等于『固定 CDN 路径模板 + 图标名』的字符串拼接,由 agent 现场生成 URL 交给用户。
# PNG https://raw.githubusercontent.com/lobehub/lobe-icons/refs/heads/master/packages/static-png/{light|dark}/{icon-name}.png
默认输出取向是『给链接而非给文件』:除非用户要下载,否则只回 URL;下载才用宿主 Bash 执行 curl。
1. Identify icon name (usually lowercase company/model name, hyphenated if multi-word) 2. Determine format (default: PNG) and theme (default: dark) 3. Construct CDN URL using pattern above 4. Provide URL to user 5. If download requested, use Bash tool with curl 6. Include web viewer link: `https://lobehub.com/icons/{icon-name}`
命名规则是唯一的知识本体:小写 + 连字符,多形态靠后缀(-color 彩色、-text 文字版)区分,中文名需先映射到英文 icon 名。
**Icon naming convention**: Lowercase, hyphenated (e.g., `claude`, `chatglm`, `openai`, `huggingface`)
中文查询靠内建映射表(智谱→chatglm、月之暗面→moonshot),并会主动给出同族相关图标。
**Chinese AI models**: Support Chinese queries (e.g., "智谱" → `chatglm`, "月之暗面" → `moonshot`)
常用图标名录外置到 references/icons-list.md,按 Models / Providers / Applications / Chinese AI 四类分组,SKILL.md 只保留路由。
**Common icons**: See `references/icons-list.md` for comprehensive list organized by category (Models, Providers, Applications, Chinese AI)
404 排障是三步而非重试:试 -color 后缀 → 试别名(company vs product,如 chatgpt/gpt、google/gemini)→ 引导去画廊浏览或搜仓库。
If URL returns 404: 1. Try `-color` suffix variant 2. Check alternate naming (e.g., `chatgpt` vs `gpt`, `google` vs `gemini`) 3. Direct user to https://lobehub.com/icons to browse 4. Search repository: https://github.com/lobehub/lobe-icons
开发者集成路径单列一份 reference:npm 包名(@lobehub/icons 及其 static-svg/png/webp、rn 变体)与 React 组件用法。
Icons can be installed as npm packages:
技能本体没有任何校验/回退代码:URL 是否可用只能靠用户或 agent 事后 curl 发现 404,skill 自身不含探测逻辑。
- Browse https://lobehub.com/icons - Try variations (e.g., company name vs product name: `alibaba` vs `alibabacloud`) - Check for `-color` variants if standard URL fails
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| network | lobe-icons 静态资源 CDN(PNG,实测 200) |
| network | lobe-icons 静态资源 CDN(WEBP,实测 200) |
| network | lobe-icons 静态资源 CDN(SVG;文档写的 {light|dark} 路径实测 404,实际位于 static-svg/icons/) |
| cli | curl(宿主 Bash 执行的下载动作) |
| network | 图标画廊(人工浏览/确认外观) |
| network | 上游仓库(排障检索入口) |
| package | @lobehub/icons(React 组件包;实测 npm registry 200) |
| package | @lobehub/icons-static-svg / @lobehub/icons-static-png / @lobehub/icons-static-webp / @lobehub/icons-rn(实测 4 个包 registry 均 200) |
| network | 开发者文档站(图标库文档) |
4风险提醒 风险提醒:黄色 · 留意使用
- SVG 分支模板已过期(会给出死链) — SKILL.md 写 packages/static-svg/{light|dark}/<name>.svg,实测 404;上游实际是 packages/static-svg/icons/<name>.svg(200)。PNG/WEBP 仍用 light|dark,导致同一文档里两条路径规则不一致,用户按文档取 SVG 必然失败。
- 名录含 4 个失效名字 — chatgpt / gpt / llama / lobechat 实测 404(上游改名为 openai / meta / lobehub);而 SKILL.md 的 404 排障又建议『试 chatgpt vs gpt』,等于把用户引向更失效的分支。agent 若不复核就直接引用会产出死链。
- 行为随上游 master 漂移,无版本锚 — URL 固定走 refs/heads/master 且无 SHA;上游一次目录重构(如本次 SVG 收进 icons/)就让文档失效,且同一 commit 的 skill 在不同时间给出不同结果,难以复现与审计。
- 无校验、无可用性回退代码 — skill 不含任何 catalog 校验或探测脚本,'comprehensive list' 的准确性全靠人工维护;使用方需自行 curl 验证(本侦查即用此法发现 4 个坏名)。
- 少量注入/误导面 — 图标名由 agent 拼进 URL 与 `curl -o <file>` 命令,无消毒措施;若名字来自不可信来源,文件名/路径段可控。另:若 agent 依据过期名录作答,用户会拿到 404 链接而不知情(输出误导)。
5第二遍独立确认
- [ok] PNG / WEBP 端点可用性(skill 的主路径) — curl 实测:packages/static-png/dark/claude.png = 200、packages/static-png/dark/claude-color.png = 200、packages/static-png/light/claude.png = 200、packages/static-webp/dark/claude.webp = 200,不存在的名字(notarealicon123.png)返回 404 —— 主路径与文档模板一致,404 也可正常反映为 404。
- [discrepancy] SVG 路径模板 vs 上游真实布局 — SKILL.md 写 `packages/static-svg/{light|dark}/{icon-name}.svg`,实测 packages/static-svg/dark/claude.svg = 404、.../light/claude.svg = 404、.../dark/claude-color.svg = 404;GitHub Contents API 显示 packages/static-svg 下只有 icons/ 子目录(无 light/dark 段),tree API 中 static-svg 路径 911 条、形如 packages/static-svg/icons/claude.svg,curl 实测 200。即 SVG 分支的模板已过期(PNG/WEBP 仍是 light|dark 布局,两条路径规则已不一致)。
- [discrepancy] icons-list.md 名录逐名验证 — 把名录去重后的 44 个图标名逐个 GET static-png/dark/<name>.png:40 个 200,4 个 404 —— `chatgpt`、`gpt`、`llama`、`lobechat`;这 4 个名字在 static-svg/icons 的仓库树里同样不存在(tree API 过滤结果为空)。可用替代名实测均 200:openai(对应 chatgpt/gpt)、meta(对应 llama)、lobehub(对应 lobechat)。即名录是『上游旧名 + 别名』的混合体,需要 agent 现场纠偏(讽刺的是 SKILL.md 的 404 排障恰恰建议试 chatgpt/gpt 这两个已失效的名字)。
- [ok] npm 包名真实性(developer-info.md) — curl registry.npmjs.org/<pkg>/latest:@lobehub/icons、@lobehub/icons-static-svg、@lobehub/icons-static-png、@lobehub/icons-static-webp、@lobehub/icons-rn 五个均返回 200,包名与用途注释对应无误;这些是给用户在自己项目里安装的指引,skill 运行期不会自动安装。
- [ok] 画廊与仓库入口可达性 — https://lobehub.com/icons 返回 302(跳转,属正常站点行为);https://github.com/lobehub/lobe-icons 为公开仓库且 tree API 可读(master 分支可访问,packages/ 下有 react-native、static-avatar、static-png、static-svg、static-webp 五个包)。文档给的四个外链(画廊/仓库/文档/npm 搜索)均非死链。
- [ok] 功能声明 vs 实际能力(夸大检查) — SKILL.md/README 声称 '100+ icons',实际上游规模远大:单 packages/static-png/dark 目录即含数百个 PNG(含 -color/-text 变体),static-svg/icons 有 911 个 svg 路径,且涵盖名录之外的品牌(如 adobe、aws、cursor、vercel)——声明属保守而非夸大。反面:declared 'Comprehensive' 的名录只 44 名、且含 4 个失效名,'comprehensive' 一词偏乐观。
- [ok] 『支持中文查询』的映射来源 — SKILL.md 的 '智谱 → chatglm、月之暗面 → moonshot' 与 icons-list.md 的中文列表格(| `chatglm` | 智谱清言 | ChatGLM |、| `moonshot` | 月之暗面 | Moonshot (Kimi) | 等 17 行)一致,映射有仓内依据;但『智谱=ChatGLM』这类厂商别名词典属领域知识,仓内无法证真伪,只能确认两侧文本自洽。
- [discrepancy] 下载示例可照抄性 — SKILL.md 的 Multi-icons 示例里 URL 用了省略号:`curl -o openai.svg "https://raw.githubusercontent.com/lobehub/lobe-icons/.../dark/openai.svg"`,and 完整可用的路径需要补 `packages/static-png`(SVG 情况还要改成 static-svg/icons)。照字面复制该示例会得到无效/404 请求;同一文档上方的模板段才是可执行形式。
6结论
8c8f311d4974d206…d5c4678cb5