[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fbg0a04F1e2WF32m0FNcVGpfzB58LeJkJLy6LM6umE8E":3,"$fJU-4tot_gC5fDkujNeoE-cGsdMy5V_KcdUXLuAnTFgw":16,"$fFunJeo-uN_LHJjwWm5HcqkFnhyGdwWvGsLXk2fcVyTs":423},{"slug":4,"title":5,"description":6,"content":7,"content_html":8,"pub_date":9,"tags":10,"draft":15},"anthropics-skills-guide","anthropics\u002Fskills：Anthropic 官方 Agent Skills 仓库解析","Anthropic 官方开源的 Agent Skills 标准仓库，127k stars，解析 SKILL.md 规范、17 个示例 skill 的设计模式，以及如何在 Claude Code \u002F Claude.ai \u002F API 中使用","# anthropics\u002Fskills：Anthropic 官方 Agent Skills 仓库解析\n\nAnthropic 在 GitHub 上维护着一个名为 [anthropics\u002Fskills](https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills) 的仓库，目前已获得 127k stars、14.9k forks。这不是一个普通的工具库，而是一套**让 Claude 具备可扩展能力的标准化规范**。\n\n## 什么是 Agent Skills？\n\n官方给出的定义非常简洁：\n\n> Skills are folders of instructions, scripts, and resources that Claude loads dynamically.\n\nSkills 是文件夹，而不是代码包。里面装的是**指令、脚本和资源**，Claude 在需要的时候动态加载。这个设计理念很重要：不是让 Claude 调用 API，而是让 Claude 读懂\"该怎么做\"的说明书。\n\n这种设计背后有一个深刻的洞察：LLM 的能力瓶颈不在于不会推理，而在于**不知道当前任务应该遵循什么规范、调用什么工具、按照什么流程走**。Skills 就是填补这个空白的机制。\n\n## 仓库结构\n\nanthropics\u002Fskills 仓库分为三个核心部分：\n\n```\nanthropics\u002Fskills\u002F\n├── skills\u002F          # 17 个示例 skill，直接可用\n├── spec\u002F            # SKILL.md 格式规范文档\n└── template\u002F        # 创建新 skill 的起始模板\n```\n\n### skills\u002F 目录：17 个示例\n\n官方提供了以下 17 个示例 skill，覆盖了从创意设计到工程开发的多个场景：\n\n| Skill | 用途 |\n|-------|------|\n| `algorithmic-art` | 算法生成艺术作品 |\n| `brand-guidelines` | 品牌规范管理 |\n| `canvas-design` | Canvas 画布设计 |\n| `claude-api` | Claude API 使用指南 |\n| `doc-coauthoring` | 文档协作写作 |\n| `docx` | Word 文档生成 |\n| `frontend-design` | 前端设计规范 |\n| `internal-comms` | 内部沟通写作 |\n| `mcp-builder` | MCP server 开发 |\n| `pdf` | PDF 文件处理 |\n| `pptx` | PowerPoint 生成 |\n| `skill-creator` | 创建新 skill |\n| `slack-gif-creator` | Slack GIF 制作 |\n| `theme-factory` | 主题设计工厂 |\n| `web-artifacts-builder` | Web 制品构建 |\n| `webapp-testing` | Web 应用测试 |\n| `xlsx` | Excel 文件处理 |\n\n值得注意的是，许可证方面，大多数 skill 采用 **Apache 2.0** 协议开源，但部分文档类 skill 是 **source-available**（可见但有限制），使用前需要确认。\n\n### spec\u002F 目录：规范文档\n\nspec 目录定义了 SKILL.md 的标准格式，是整个 skills 生态系统的\"宪法\"。\n\n### template\u002F 目录：起始模板\n\n提供了一个最小化的 skill 模板，用于快速创建新 skill。\n\n## SKILL.md 格式详解\n\n每个 skill 的核心是一个 `SKILL.md` 文件。格式如下：\n\n```markdown\n---\nname: my-skill-name\ndescription: A clear description of what this skill does and when to use it\n---\n\n# My Skill Name\n\n[具体指令内容]\n\n## Examples\n\n[示例用法]\n\n## Guidelines\n\n[使用规范和限制]\n```\n\n### Frontmatter 字段\n\nYAML frontmatter 中 `name` 和 `description` 是**必填字段**：\n\n- **`name`**：skill 的唯一标识符，用于引用和安装\n- **`description`**：这是最关键的字段——**它是 agent 决定是否调用这个 skill 的唯一依据**\n\n这里有一个微妙但极其重要的设计：description 不是给人看的文档，而是给 Claude 看的**调用判断依据**。当 Claude 面对一个任务时，它会扫描所有已安装 skill 的 description，根据语义匹配决定是否加载某个 skill。\n\n这意味着一个好的 description 需要：\n1. 准确描述 skill 能做什么\n2. 清晰说明在什么情况下应该使用\n3. 也可以说明什么情况下**不**应该使用（negative examples）\n\n### 正文部分\n\nSKILL.md 的正文是给 Claude 的操作指令，通常包含：\n- **核心能力说明**：这个 skill 能做什么\n- **工作流程**：步骤化的操作指南\n- **示例**：具体的输入输出示例\n- **约束条件**：禁止事项和边界情况\n\n## 三个精选 Skill 解析\n\n### 1. webapp-testing：决策树驱动的测试自动化\n\n`webapp-testing` skill 教 Claude 使用 Playwright 进行 Web 应用自动化测试。它的设计亮点是**决策树结构**：\n\n```\n收到测试任务\n├── 有测试框架？\n│   ├── 是 → 集成到现有框架\n│   └── 否 → 初始化 Playwright\n├── 有 spec 文件？\n│   ├── 是 → 读懂再写\n│   └── 否 → 从零创建\n└── 运行后失败？\n    ├── selector 问题 → 用 locator 策略\n    └── 异步问题 → 加 waitFor\n```\n\n这种决策树设计让 Claude 面对任意测试场景时都有清晰的行动路径，而不是\"随机应变\"。\n\n### 2. mcp-builder：MCP Server 开发完整指南\n\n`mcp-builder` skill 是构建 [Model Context Protocol](https:\u002F\u002Fmodelcontextprotocol.io) server 的详细指南。它涵盖：\n\n- MCP 协议基础（Tools、Resources、Prompts 三种能力）\n- TypeScript SDK 使用方式\n- 标准 server 结构模板\n- 常见工具类型的实现模式（文件操作、API 调用、数据库查询）\n- 调试和测试方法\n\n这个 skill 本身就是一个\"教 Claude 教别人\"的设计——它让 Claude 具备了指导开发者构建 MCP 服务的能力。\n\n### 3. skill-creator：用 skill 创建 skill\n\n`skill-creator` 是 anthropics\u002Fskills 中最元级别的 skill——它教 Claude 如何**创建新的 skill**。\n\n它包含：\n- SKILL.md 格式规范的详细说明\n- 好的 description 怎么写（以及常见错误）\n- 指令编写的最佳实践\n- skill 的测试方法\n\n这种递归设计体现了 Anthropic 的一个思路：让 skill 系统能够自我增殖和完善。\n\n## 三种使用方式\n\n### 方式一：Claude Code Plugin（推荐）\n\n如果你在使用 Claude Code（即 claude.ai 的代码模式），可以通过插件市场安装：\n\n```bash\n# 添加 anthropics\u002Fskills 作为插件源\n\u002Fplugin marketplace add anthropics\u002Fskills\n\n# 安装示例 skill 集合\n\u002Fplugin install example-skills@anthropic-agent-skills\n```\n\n安装后，Claude Code 会自动感知这些 skill，并在相关任务时动态加载。\n\n### 方式二：Claude.ai 界面\n\nClaude.ai 已经对付费用户开放了自定义 skill 功能。你可以：\n1. 在 Claude.ai 的设置中找到\"Skills\"选项\n2. 上传你的 SKILL.md 文件\n3. Claude 在对话中会自动检测并使用已安装的 skill\n\n### 方式三：API 集成\n\n通过 Anthropic 的 Skills API，可以在自己的应用中集成 skill：\n\n```python\n# Skills API Quickstart 示例\nimport anthropic\n\nclient = anthropic.Anthropic()\n\n# 在 system prompt 中注入 skill 内容\nwith open('skills\u002Fwebapp-testing\u002FSKILL.md', 'r') as f:\n    skill_content = f.read()\n\nresponse = client.messages.create(\n    model=\"claude-opus-4-5\",\n    max_tokens=4096,\n    system=f\"You have access to the following skill:\\n\\n{skill_content}\",\n    messages=[{\"role\": \"user\", \"content\": \"请帮我写一个登录页面的 E2E 测试\"}]\n)\n```\n\n## 设计洞察\n\n### 1. Description 是 agent 的感知器官\n\n整个 skill 系统中最核心的设计决策是：**description 是 agent 选择 skill 的唯一依据**。\n\n这不是偶然的设计，而是深思熟虑的架构选择：\n- 它迫使 skill 作者写出精准的语义描述\n- 它让 Claude 的 skill 选择过程透明可预测\n- 它与 RAG 系统的\"检索\"逻辑一脉相承\n\n### 2. 黑盒调用脚本\n\nskills 中包含的脚本（Python、Shell 等）是**黑盒调用**的。Claude 不会去读懂脚本的实现细节，它只需要知道\"在什么情况下调用这个脚本，传什么参数，期望什么输出\"。\n\n这是一个重要的设计原则：**把执行逻辑下沉到脚本，把决策逻辑留给 LLM**。\n\n### 3. 明确的禁止事项\n\n优秀的 skill 不只告诉 Claude 能做什么，还明确说明**不能做什么**。比如 `webapp-testing` 中会说明：\n- 不要修改被测试的应用代码\n- 不要在没有确认的情况下删除测试文件\n- 不要假设测试环境的状态\n\n这种负向约束对 LLM 尤其重要——因为 LLM 天然倾向于\"尽力完成任务\"，有时候会越权操作。\n\n## 如何写一个好的 Skill\n\n基于 anthropics\u002Fskills 的设计模式，总结几条写好 skill 的原则：\n\n**1. Description 第一**\ndescription 写好了，skill 成功了一半。要能在 2-3 句话内说清楚：这个 skill 做什么、什么时候用、不适合用在哪里。\n\n**2. 流程要有分支**\n真实任务不是线性的。好的 skill 用决策树覆盖各种情况，而不是假设只有\"happy path\"。\n\n**3. 具体胜于抽象**\n\"用合适的方式处理文件\"不如\"用 Python pathlib 读取文件，encoding 用 utf-8\"。LLM 面对具体指令时表现更稳定。\n\n**4. 约束要明确**\n告诉 Claude 什么不能做，和告诉它什么能做同样重要。\n\n**5. 用示例说话**\n一个好的 input\u002Foutput 示例，胜过三段解释文字。\n\n---\n\nanthropics\u002Fskills 仓库的意义不只在于提供了 17 个现成工具，更在于它定义了一套**可复用、可分发的 agent 能力规范**。随着 Skills 生态的发展，我们可能会看到一个类似 npm 的 skill 市场——任何人都可以发布自己的 skill，任何 Claude 都可以安装使用。\n\n这是 AI 能力模块化的开始。","\u003Ch1>anthropics\u002Fskills：Anthropic 官方 Agent Skills 仓库解析\u003C\u002Fh1>\n\u003Cp>Anthropic 在 GitHub 上维护着一个名为 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills\">anthropics\u002Fskills\u003C\u002Fa> 的仓库，目前已获得 127k stars、14.9k forks。这不是一个普通的工具库，而是一套\u003Cstrong>让 Claude 具备可扩展能力的标准化规范\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Ch2 id=\"什么是-agent-skills\">什么是 Agent Skills？\u003C\u002Fh2>\n\u003Cp>官方给出的定义非常简洁：\u003C\u002Fp>\n\u003Cblockquote>\n\u003Cp>Skills are folders of instructions, scripts, and resources that Claude loads dynamically.\u003C\u002Fp>\n\u003C\u002Fblockquote>\n\u003Cp>Skills 是文件夹，而不是代码包。里面装的是\u003Cstrong>指令、脚本和资源\u003C\u002Fstrong>，Claude 在需要的时候动态加载。这个设计理念很重要：不是让 Claude 调用 API，而是让 Claude 读懂&quot;该怎么做&quot;的说明书。\u003C\u002Fp>\n\u003Cp>这种设计背后有一个深刻的洞察：LLM 的能力瓶颈不在于不会推理，而在于\u003Cstrong>不知道当前任务应该遵循什么规范、调用什么工具、按照什么流程走\u003C\u002Fstrong>。Skills 就是填补这个空白的机制。\u003C\u002Fp>\n\u003Ch2 id=\"仓库结构\">仓库结构\u003C\u002Fh2>\n\u003Cp>anthropics\u002Fskills 仓库分为三个核心部分：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>anthropics\u002Fskills\u002F\n├── skills\u002F          # 17 个示例 skill，直接可用\n├── spec\u002F            # SKILL.md 格式规范文档\n└── template\u002F        # 创建新 skill 的起始模板\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"skills-目录-17-个示例\">skills\u002F 目录：17 个示例\u003C\u002Fh3>\n\u003Cp>官方提供了以下 17 个示例 skill，覆盖了从创意设计到工程开发的多个场景：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Skill\u003C\u002Fth>\n\u003Cth>用途\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode>algorithmic-art\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>算法生成艺术作品\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>brand-guidelines\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>品牌规范管理\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>canvas-design\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Canvas 画布设计\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>claude-api\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Claude API 使用指南\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>doc-coauthoring\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>文档协作写作\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>docx\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Word 文档生成\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>frontend-design\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>前端设计规范\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>internal-comms\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>内部沟通写作\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>mcp-builder\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>MCP server 开发\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pdf\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>PDF 文件处理\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>pptx\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>PowerPoint 生成\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>skill-creator\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>创建新 skill\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>slack-gif-creator\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Slack GIF 制作\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>theme-factory\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>主题设计工厂\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>web-artifacts-builder\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Web 制品构建\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>webapp-testing\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Web 应用测试\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode>xlsx\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Excel 文件处理\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>值得注意的是，许可证方面，大多数 skill 采用 \u003Cstrong>Apache 2.0\u003C\u002Fstrong> 协议开源，但部分文档类 skill 是 \u003Cstrong>source-available\u003C\u002Fstrong>（可见但有限制），使用前需要确认。\u003C\u002Fp>\n\u003Ch3 id=\"spec-目录-规范文档\">spec\u002F 目录：规范文档\u003C\u002Fh3>\n\u003Cp>spec 目录定义了 \u003Ca href=\"http:\u002F\u002FSKILL.md\">SKILL.md\u003C\u002Fa> 的标准格式，是整个 skills 生态系统的&quot;宪法&quot;。\u003C\u002Fp>\n\u003Ch3 id=\"template-目录-起始模板\">template\u002F 目录：起始模板\u003C\u002Fh3>\n\u003Cp>提供了一个最小化的 skill 模板，用于快速创建新 skill。\u003C\u002Fp>\n\u003Ch2 id=\"skill-md-格式详解\">\u003Ca href=\"http:\u002F\u002FSKILL.md\">SKILL.md\u003C\u002Fa> 格式详解\u003C\u002Fh2>\n\u003Cp>每个 skill 的核心是一个 \u003Ccode>SKILL.md\u003C\u002Fcode> 文件。格式如下：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-markdown\">---\nname: my-skill-name\ndescription: A clear description of what this skill does and when to use it\n---\n\n# My Skill Name\n\n[具体指令内容]\n\n## Examples\n\n[示例用法]\n\n## Guidelines\n\n[使用规范和限制]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"frontmatter-字段\">Frontmatter 字段\u003C\u002Fh3>\n\u003Cp>YAML frontmatter 中 \u003Ccode>name\u003C\u002Fcode> 和 \u003Ccode>description\u003C\u002Fcode> 是\u003Cstrong>必填字段\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode>name\u003C\u002Fcode>\u003C\u002Fstrong>：skill 的唯一标识符，用于引用和安装\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode>description\u003C\u002Fcode>\u003C\u002Fstrong>：这是最关键的字段——\u003Cstrong>它是 agent 决定是否调用这个 skill 的唯一依据\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这里有一个微妙但极其重要的设计：description 不是给人看的文档，而是给 Claude 看的\u003Cstrong>调用判断依据\u003C\u002Fstrong>。当 Claude 面对一个任务时，它会扫描所有已安装 skill 的 description，根据语义匹配决定是否加载某个 skill。\u003C\u002Fp>\n\u003Cp>这意味着一个好的 description 需要：\u003C\u002Fp>\n\u003Col>\n\u003Cli>准确描述 skill 能做什么\u003C\u002Fli>\n\u003Cli>清晰说明在什么情况下应该使用\u003C\u002Fli>\n\u003Cli>也可以说明什么情况下\u003Cstrong>不\u003C\u002Fstrong>应该使用（negative examples）\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"正文部分\">正文部分\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"http:\u002F\u002FSKILL.md\">SKILL.md\u003C\u002Fa> 的正文是给 Claude 的操作指令，通常包含：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>核心能力说明\u003C\u002Fstrong>：这个 skill 能做什么\u003C\u002Fli>\n\u003Cli>\u003Cstrong>工作流程\u003C\u002Fstrong>：步骤化的操作指南\u003C\u002Fli>\n\u003Cli>\u003Cstrong>示例\u003C\u002Fstrong>：具体的输入输出示例\u003C\u002Fli>\n\u003Cli>\u003Cstrong>约束条件\u003C\u002Fstrong>：禁止事项和边界情况\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"三个精选-skill-解析\">三个精选 Skill 解析\u003C\u002Fh2>\n\u003Ch3 id=\"1-webapp-testing-决策树驱动的测试自动化\">1. webapp-testing：决策树驱动的测试自动化\u003C\u002Fh3>\n\u003Cp>\u003Ccode>webapp-testing\u003C\u002Fcode> skill 教 Claude 使用 Playwright 进行 Web 应用自动化测试。它的设计亮点是\u003Cstrong>决策树结构\u003C\u002Fstrong>：\u003C\u002Fp>\n\u003Cpre>\u003Ccode>收到测试任务\n├── 有测试框架？\n│   ├── 是 → 集成到现有框架\n│   └── 否 → 初始化 Playwright\n├── 有 spec 文件？\n│   ├── 是 → 读懂再写\n│   └── 否 → 从零创建\n└── 运行后失败？\n    ├── selector 问题 → 用 locator 策略\n    └── 异步问题 → 加 waitFor\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>这种决策树设计让 Claude 面对任意测试场景时都有清晰的行动路径，而不是&quot;随机应变&quot;。\u003C\u002Fp>\n\u003Ch3 id=\"2-mcp-builder-mcp-server-开发完整指南\">2. mcp-builder：MCP Server 开发完整指南\u003C\u002Fh3>\n\u003Cp>\u003Ccode>mcp-builder\u003C\u002Fcode> skill 是构建 \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\">Model Context Protocol\u003C\u002Fa> server 的详细指南。它涵盖：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>MCP 协议基础（Tools、Resources、Prompts 三种能力）\u003C\u002Fli>\n\u003Cli>TypeScript SDK 使用方式\u003C\u002Fli>\n\u003Cli>标准 server 结构模板\u003C\u002Fli>\n\u003Cli>常见工具类型的实现模式（文件操作、API 调用、数据库查询）\u003C\u002Fli>\n\u003Cli>调试和测试方法\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这个 skill 本身就是一个&quot;教 Claude 教别人&quot;的设计——它让 Claude 具备了指导开发者构建 MCP 服务的能力。\u003C\u002Fp>\n\u003Ch3 id=\"3-skill-creator-用-skill-创建-skill\">3. skill-creator：用 skill 创建 skill\u003C\u002Fh3>\n\u003Cp>\u003Ccode>skill-creator\u003C\u002Fcode> 是 anthropics\u002Fskills 中最元级别的 skill——它教 Claude 如何\u003Cstrong>创建新的 skill\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Cp>它包含：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"http:\u002F\u002FSKILL.md\">SKILL.md\u003C\u002Fa> 格式规范的详细说明\u003C\u002Fli>\n\u003Cli>好的 description 怎么写（以及常见错误）\u003C\u002Fli>\n\u003Cli>指令编写的最佳实践\u003C\u002Fli>\n\u003Cli>skill 的测试方法\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这种递归设计体现了 Anthropic 的一个思路：让 skill 系统能够自我增殖和完善。\u003C\u002Fp>\n\u003Ch2 id=\"三种使用方式\">三种使用方式\u003C\u002Fh2>\n\u003Ch3 id=\"方式一-claude-code-plugin-推荐\">方式一：Claude Code Plugin（推荐）\u003C\u002Fh3>\n\u003Cp>如果你在使用 Claude Code（即 \u003Ca href=\"http:\u002F\u002Fclaude.ai\">claude.ai\u003C\u002Fa> 的代码模式），可以通过插件市场安装：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\"># 添加 anthropics\u002Fskills 作为插件源\n\u002Fplugin marketplace add anthropics\u002Fskills\n\n# 安装示例 skill 集合\n\u002Fplugin install example-skills@anthropic-agent-skills\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>安装后，Claude Code 会自动感知这些 skill，并在相关任务时动态加载。\u003C\u002Fp>\n\u003Ch3 id=\"方式二-claude-ai-界面\">方式二：\u003Ca href=\"http:\u002F\u002FClaude.ai\">Claude.ai\u003C\u002Fa> 界面\u003C\u002Fh3>\n\u003Cp>\u003Ca href=\"http:\u002F\u002FClaude.ai\">Claude.ai\u003C\u002Fa> 已经对付费用户开放了自定义 skill 功能。你可以：\u003C\u002Fp>\n\u003Col>\n\u003Cli>在 \u003Ca href=\"http:\u002F\u002FClaude.ai\">Claude.ai\u003C\u002Fa> 的设置中找到&quot;Skills&quot;选项\u003C\u002Fli>\n\u003Cli>上传你的 \u003Ca href=\"http:\u002F\u002FSKILL.md\">SKILL.md\u003C\u002Fa> 文件\u003C\u002Fli>\n\u003Cli>Claude 在对话中会自动检测并使用已安装的 skill\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"方式三-api-集成\">方式三：API 集成\u003C\u002Fh3>\n\u003Cp>通过 Anthropic 的 Skills API，可以在自己的应用中集成 skill：\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-python\"># Skills API Quickstart 示例\nimport anthropic\n\nclient = anthropic.Anthropic()\n\n# 在 system prompt 中注入 skill 内容\nwith open('skills\u002Fwebapp-testing\u002FSKILL.md', 'r') as f:\n    skill_content = f.read()\n\nresponse = client.messages.create(\n    model=&quot;claude-opus-4-5&quot;,\n    max_tokens=4096,\n    system=f&quot;You have access to the following skill:\\n\\n{skill_content}&quot;,\n    messages=[{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;请帮我写一个登录页面的 E2E 测试&quot;}]\n)\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"设计洞察\">设计洞察\u003C\u002Fh2>\n\u003Ch3 id=\"1-description-是-agent-的感知器官\">1. Description 是 agent 的感知器官\u003C\u002Fh3>\n\u003Cp>整个 skill 系统中最核心的设计决策是：\u003Cstrong>description 是 agent 选择 skill 的唯一依据\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Cp>这不是偶然的设计，而是深思熟虑的架构选择：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>它迫使 skill 作者写出精准的语义描述\u003C\u002Fli>\n\u003Cli>它让 Claude 的 skill 选择过程透明可预测\u003C\u002Fli>\n\u003Cli>它与 RAG 系统的&quot;检索&quot;逻辑一脉相承\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"2-黑盒调用脚本\">2. 黑盒调用脚本\u003C\u002Fh3>\n\u003Cp>skills 中包含的脚本（Python、Shell 等）是\u003Cstrong>黑盒调用\u003C\u002Fstrong>的。Claude 不会去读懂脚本的实现细节，它只需要知道&quot;在什么情况下调用这个脚本，传什么参数，期望什么输出&quot;。\u003C\u002Fp>\n\u003Cp>这是一个重要的设计原则：\u003Cstrong>把执行逻辑下沉到脚本，把决策逻辑留给 LLM\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Ch3 id=\"3-明确的禁止事项\">3. 明确的禁止事项\u003C\u002Fh3>\n\u003Cp>优秀的 skill 不只告诉 Claude 能做什么，还明确说明\u003Cstrong>不能做什么\u003C\u002Fstrong>。比如 \u003Ccode>webapp-testing\u003C\u002Fcode> 中会说明：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>不要修改被测试的应用代码\u003C\u002Fli>\n\u003Cli>不要在没有确认的情况下删除测试文件\u003C\u002Fli>\n\u003Cli>不要假设测试环境的状态\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>这种负向约束对 LLM 尤其重要——因为 LLM 天然倾向于&quot;尽力完成任务&quot;，有时候会越权操作。\u003C\u002Fp>\n\u003Ch2 id=\"如何写一个好的-skill\">如何写一个好的 Skill\u003C\u002Fh2>\n\u003Cp>基于 anthropics\u002Fskills 的设计模式，总结几条写好 skill 的原则：\u003C\u002Fp>\n\u003Cp>\u003Cstrong>1. Description 第一\u003C\u002Fstrong>\ndescription 写好了，skill 成功了一半。要能在 2-3 句话内说清楚：这个 skill 做什么、什么时候用、不适合用在哪里。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>2. 流程要有分支\u003C\u002Fstrong>\n真实任务不是线性的。好的 skill 用决策树覆盖各种情况，而不是假设只有&quot;happy path&quot;。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>3. 具体胜于抽象\u003C\u002Fstrong>\n“用合适的方式处理文件&quot;不如&quot;用 Python pathlib 读取文件，encoding 用 utf-8”。LLM 面对具体指令时表现更稳定。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>4. 约束要明确\u003C\u002Fstrong>\n告诉 Claude 什么不能做，和告诉它什么能做同样重要。\u003C\u002Fp>\n\u003Cp>\u003Cstrong>5. 用示例说话\u003C\u002Fstrong>\n一个好的 input\u002Foutput 示例，胜过三段解释文字。\u003C\u002Fp>\n\u003Chr>\n\u003Cp>anthropics\u002Fskills 仓库的意义不只在于提供了 17 个现成工具，更在于它定义了一套\u003Cstrong>可复用、可分发的 agent 能力规范\u003C\u002Fstrong>。随着 Skills 生态的发展，我们可能会看到一个类似 npm 的 skill 市场——任何人都可以发布自己的 skill，任何 Claude 都可以安装使用。\u003C\u002Fp>\n\u003Cp>这是 AI 能力模块化的开始。\u003C\u002Fp>\n","2026-05-03",[11,12,13,14],"ai","Claude","agent","skills",false,[17,28,39,51,59,66,73,80,83,90,100,109,119,128,136,144,153,162,171,181,188,198,204,211,217,226,233,240,248,258,267,276,286,296,306,314,324,335,345,354,362,368,376,384,392,400,408,415],{"slug":18,"title":19,"description":20,"pub_date":21,"tags":22,"draft":15,"word_count":27},"ide-skills-guide","Agent Skills 完全指南：21 款第三方 Skill 深度评测与使用心得","全面评测 21 款第三方 Agent Skills，涵盖 Vue 生态、前端设计、构建工具、实用工具四大分类。从安装配置到实际使用场景，带你了解每个 Skill 的功能特点、最佳实践与使用心得。","2026-06-15",[13,14,23,24,25,26],"AI","效率工具","前端","Vue",4169,{"slug":29,"title":30,"description":31,"pub_date":32,"tags":33,"draft":15,"word_count":38},"linux-kernel-skeleton-struct-funcptr-container_of","Linux 内核骨架：struct、函数指针与 container_of","读懂 Linux 内核源码的三件套：巨大的 struct 组合代替继承、函数指针表实现虚派发、container_of 宏从嵌入成员找回完整对象。","2026-05-09",[34,35,36,37],"linux","kernel","C","container_of",1369,{"slug":40,"title":41,"description":42,"pub_date":43,"tags":44,"draft":15,"word_count":50},"astro-complete-guide-2025","Astro 5 深度剖析：Islands 架构原理、构建优化与 Cloudflare Workers 边缘部署","从编译器视角解析 Astro 5 的 Islands 架构实现原理，Content Layer API 的 Vite 插件机制，Server Islands 的流式渲染，以及如何在 Cloudflare Workers + D1 边缘环境下榨干性能。","2026-05-08",[45,46,47,48,49],"astro","frontend","cloudflare","performance","architecture",3663,{"slug":52,"title":53,"description":54,"pub_date":9,"tags":55,"draft":15,"word_count":58},"llm-prompt-engineering","Prompt Engineering 实战：让 LLM 真正听话的技巧","System prompt 怎么写、Few-shot 怎么设计、Chain-of-Thought 原理，以及常见失败模式和调试方法。",[11,56,57],"llm","工程实践",1723,{"slug":60,"title":61,"description":62,"pub_date":9,"tags":63,"draft":15,"word_count":65},"rag-system-design","RAG 系统设计：从 naive 到 production-ready","Retrieval-Augmented Generation 不只是「向量数据库 + LLM」，分块策略、召回质量、重排序、缓存才是工程核心。",[11,64,56,57],"rag",1613,{"slug":67,"title":68,"description":69,"pub_date":9,"tags":70,"draft":15,"word_count":72},"git-advanced-workflow","Git 进阶工作流：rebase、cherry-pick、bisect 的正确使用","merge 会了，但 rebase 总搞错？bisect 找 bug 提交？interactive rebase 整理历史？这篇一次说清楚。",[71,57],"git",1396,{"slug":74,"title":75,"description":76,"pub_date":9,"tags":77,"draft":15,"word_count":79},"docker-practical-guide","Docker 实战：从会用到用好","会 docker run 不够，Dockerfile 最佳实践、多阶段构建、Compose 编排、镜像瘦身才是日常真正需要的。",[78,34,57],"docker",1268,{"slug":4,"title":5,"description":6,"pub_date":9,"tags":81,"draft":15,"word_count":82},[11,12,13,14],2090,{"slug":84,"title":85,"description":86,"pub_date":9,"tags":87,"draft":15,"word_count":89},"karpathy-claude-code-guidelines","Karpathy 的 LLM 编码批评与 CLAUDE.md 最佳实践","基于 Andrej Karpathy 对 LLM 编程助手的观察，forrestchang 提炼出一个 CLAUDE.md 文件，4 条原则解决 AI 编码的典型失控问题：乱猜假设、过度设计、乱改代码、目标不清",[11,12,88,57],"Claude Code",2699,{"slug":91,"title":92,"description":93,"pub_date":9,"tags":94,"draft":15,"word_count":99},"typescript-advanced-patterns","TypeScript 高级模式：让类型系统为你工作","基础 TS 会了但类型总是 any？条件类型、映射类型、模板字面量类型、infer 关键字才是 TS 的真正威力。",[95,96,97,98],"typescript","类型系统","前端工程","高级模式",1419,{"slug":101,"title":102,"description":103,"pub_date":9,"tags":104,"draft":15,"word_count":108},"linux-performance-tuning","Linux 性能调优实战：从 top 到 perf 的完整工具链","遇到性能问题不知道从哪下手？这篇建立系统化的排查思路，从 CPU\u002F内存\u002FIO\u002F网络逐层分析。",[34,105,106,107],"性能","运维","系统编程",1524,{"slug":110,"title":111,"description":112,"pub_date":9,"tags":113,"draft":15,"word_count":118},"python-functional-programming","Python 函数式编程：map\u002Ffilter\u002Freduce 之外","Python 不是纯函数式语言，但 functools、itertools、偏函数、闭包这些工具用好了能让代码简洁一个量级。",[114,115,116,117],"python","函数式","闭包","装饰器",1867,{"slug":120,"title":121,"description":122,"pub_date":9,"tags":123,"draft":15,"word_count":127},"python-oop-guide","Python 面向对象：__init__ 之外你需要知道的","Python OOP 不只是 class + __init__，魔术方法、描述符、元类才是真正的武器。",[114,124,125,126],"OOP","面向对象","魔术方法",1792,{"slug":129,"title":130,"description":131,"pub_date":9,"tags":132,"draft":15,"word_count":135},"python-data-structures","Python 内置数据结构深度解析","list、dict、set、tuple 不只是数据容器，搞懂它们的底层实现和时间复杂度，才能写出高性能 Python。",[114,133,105,134],"数据结构","算法",1517,{"slug":137,"title":138,"description":139,"pub_date":9,"tags":140,"draft":15,"word_count":143},"python-basics-quick-start","Python 快速上手：写给有编程基础的人","已经会其他语言，想快速掌握 Python 的语法特性和思维方式，这篇是捷径。",[114,141,142],"入门","基础",1607,{"slug":145,"title":146,"description":147,"pub_date":9,"tags":148,"draft":15,"word_count":152},"python-dataclass-pydantic","Python dataclass vs Pydantic：数据类选型指南","dataclass 是标准库的轻量选择，Pydantic v2 是带验证的重武器，什么时候用哪个，这篇说清楚。",[114,149,150,151],"dataclass","pydantic","数据验证",1323,{"slug":154,"title":155,"description":156,"pub_date":9,"tags":157,"draft":15,"word_count":161},"python-asyncio-practical","Python asyncio 实战：从回调地狱到协程优雅","asyncio 是 Python 异步编程的核心，搞懂 event loop、Task、gather 这些概念才能写出真正高效的异步代码。",[114,158,159,160],"asyncio","并发","网络编程",1258,{"slug":163,"title":164,"description":165,"pub_date":9,"tags":166,"draft":15,"word_count":170},"python-type-hints-guide","Python 类型注解完全指南：从入门到实践","Python 3.5+ 引入类型注解，配合 mypy\u002Fpyright 让 Python 也能享受静态类型检查的好处。",[114,167,168,169],"typescript-style","type-hints","工具链",1102,{"slug":172,"title":173,"description":174,"pub_date":175,"tags":176,"draft":15,"word_count":180},"pwa-install-update-button","PWA 踩坑：为什么安装按钮从来不出现","从 beforeinstallprompt 到 Service Worker waiting，把 PWA 的安装与更新提示真正做对","2026-05-02",[177,178,179],"pwa","javascript","web",1683,{"slug":182,"title":183,"description":184,"pub_date":185,"tags":186,"draft":15,"word_count":187},"openclaw-vs-hermes-agent","OpenClaw vs Hermes Agent：两个本地优先 Agent 的设计差异","OpenClaw（Novita AI）和 Hermes Agent（Nous Research）都是本地运行的个人 AI Agent，但在记忆系统、技能学习、运行环境和模型生态上走了不同的路。深入对比两种架构的核心差异。","2026-05-01",[11,13,56],1679,{"slug":189,"title":190,"description":191,"pub_date":185,"tags":192,"draft":15,"word_count":197},"cpp-random-design-patterns","C++ 设计模式实战：RAII、观察者、工厂","用现代 C++（C++17\u002F20）实现三种高频设计模式：RAII 资源管理、观察者模式事件系统、工厂模式插件架构。每种模式给出问题场景、实现代码和真实工程案例。",[193,194,195,196],"cpp","设计模式","c++17","工程",2613,{"slug":199,"title":200,"description":201,"pub_date":185,"tags":202,"draft":15,"word_count":203},"data-structures-fundamentals","数据结构基础：从数组到红黑树","系统梳理常用数据结构的核心原理、时间复杂度和适用场景。数组、链表、栈、队列、哈希表、二叉树、堆、图，每种结构附实现要点和 C++ 代码片段。",[133,134,193,142],3004,{"slug":205,"title":206,"description":207,"pub_date":208,"tags":209,"draft":15,"word_count":210},"ai-agent-what-is","什么是 AI Agent？从 LLM 到自主执行","LLM 本身是无状态问答机，Agent 是什么让它’动’起来的？本文深入解析 Agent 的四个核心能力、ReAct 框架、工具调用原理，以及主流框架横向对比。","2026-04-30",[11,13,56],2116,{"slug":212,"title":213,"description":214,"pub_date":208,"tags":215,"draft":15,"word_count":216},"ai-agent-memory","AI Agent 的记忆系统：从上下文窗口到长期记忆","深入拆解 AI Agent 的四种记忆类型、上下文窗口压缩策略、RAG 向量检索原理，以及三种典型失败模式和工程选型建议。",[11,13,64],2052,{"slug":218,"title":219,"description":220,"pub_date":208,"tags":221,"draft":15,"word_count":225},"network-proxy-vpn-guide","代理与翻墙技术原理：从 HTTP 代理到现代协议","深入解析代理与 VPN 的本质区别，梳理从 SOCKS5 到 Shadowsocks、V2Ray\u002FXray、Hysteria2 的协议演进，以及机场订阅的技术本质。",[222,223,224],"网络","代理","协议",2148,{"slug":227,"title":228,"description":229,"pub_date":208,"tags":230,"draft":15,"word_count":143},"algorithm-binary-search","二分查找：永远写不对？记住这个模板","彻底搞清楚二分查找的边界问题：闭区间和左闭右开两套模板、三道经典 LeetCode 题目完整 C++ 实现，以及二分答案的进阶思路。",[134,231,232,193],"二分查找","leetcode",{"slug":234,"title":235,"description":236,"pub_date":208,"tags":237,"draft":15,"word_count":239},"algorithm-sliding-window","滑动窗口算法：从暴力到 O(n) 的思维跃迁","系统讲解滑动窗口算法的核心模板、适用题型，配合三道经典 LeetCode 题目的完整 C++ 实现，彻底理解双指针收缩思路。",[134,238,232,193],"滑动窗口",1943,{"slug":241,"title":242,"description":243,"pub_date":208,"tags":244,"draft":15,"word_count":247},"network-clash-config","Clash \u002F Mihomo 配置详解：规则、策略组与分流","深入解析 Clash\u002FMihomo 的核心配置结构，包括代理节点、策略组类型、规则优先级、DNS fake-ip 模式，以及一份实用的完整配置模板。",[222,245,223,246],"clash","配置",1292,{"slug":249,"title":250,"description":251,"pub_date":252,"tags":253,"draft":15,"word_count":257},"hid-hotplug","HID 设备热插拔检测：从 udev 到 node-hid","在 Linux 上用 node-hid + usb 库实现可靠的 USB HID 设备热插拔检测，踩坑记录","2026-04-28",[193,254,34,255,256],"hid","nodejs","electron",2039,{"slug":259,"title":260,"description":261,"pub_date":262,"tags":263,"draft":15,"word_count":266},"electron-ipc-types","Electron IPC 类型安全：从 any 到完全类型化","用 TypeScript 泛型封装 Electron IPC，彻底消灭 any，preload 契约集中管理","2026-04-25",[256,95,264,265],"ipc","vue",1446,{"slug":268,"title":269,"description":270,"pub_date":271,"tags":272,"draft":15,"word_count":275},"element-plus-popover-hide","手动关闭多个 el-popover（不用 v-model:visible）","通过 ref + Reflect.get 调用 hide() 方法手动关闭 Element Plus Popover，解释 Vue3 Proxy 导致无法直接调用实例方法的原因。","2024-10-25",[265,273,274],"element-plus","vue3",1321,{"slug":277,"title":278,"description":279,"pub_date":280,"tags":281,"draft":15,"word_count":285},"vite-vue3-ts-elementplus-pinia","用 Vite+（vp）从零搭建 Vue3 + TypeScript + Element Plus + Pinia + Vue Router","使用 Vite+ 统一工具链（vp）一条命令搭建 Vue3 全家桶，涵盖按需导入、Pinia store、路由配置，以及常见坑的解决方案。","2024-08-27",[265,282,95,273,283,284],"vite","pinia","vite-plus",1960,{"slug":287,"title":288,"description":289,"pub_date":290,"tags":291,"draft":15,"word_count":295},"cef-lnk2038-iterator-debug-level","CEF LNK2038：解决 _ITERATOR_DEBUG_LEVEL 不匹配错误","分析 CEF（Chromium Embedded Framework）集成时出现的 LNK2038 _ITERATOR_DEBUG_LEVEL 链接错误，从根本原因到解决方案的完整指南。","2024-05-07",[193,292,293,294],"CEF","Visual Studio","链接错误",1509,{"slug":297,"title":298,"description":299,"pub_date":300,"tags":301,"draft":15,"word_count":305},"npm-electron-install-fix","彻底解决 npm 安装 Electron 失败的问题","分析 npm install electron 失败的根本原因（下载二进制超时\u002F被墙），通过国内镜像（npmmirror）彻底解决，并介绍多种备选方案和常见错误排查。","2024-03-01",[256,302,303,304],"npm","前端工具链","国内镜像",1494,{"slug":307,"title":308,"description":309,"pub_date":310,"tags":311,"draft":15,"word_count":313},"git-out-of-memory","解决 git 报错：Fatal: Out of memory, malloc failed","分析 git 大仓库操作时出现 Out of memory malloc failed 的根本原因，通过调整 pack.windowMemory、http.postBuffer 和 git repack 彻底解决。","2024-01-31",[71,34,312],"工具",2244,{"slug":315,"title":316,"description":317,"pub_date":318,"tags":319,"draft":15,"word_count":323},"vmware-tools-install","在 VMware 虚拟机中安装 open-vm-tools 完整指南","详解 VMware Tools 的作用、open-vm-tools 与官方 VMware Tools 的区别，以及在 Ubuntu 虚拟机中安装并生效的完整步骤和常见问题排查。","2023-11-21",[320,34,321,322],"VMware","Ubuntu","虚拟机",2523,{"slug":325,"title":326,"description":327,"pub_date":328,"tags":329,"draft":15,"word_count":334},"load-balancing-algorithms","负载均衡算法完全指南：从轮询到一致性哈希","系统梳理静态与动态负载均衡算法，涵盖轮询、随机、权重、IP Hash、一致性 Hash、最少连接、最快响应等，并对比 Nginx、Dubbo、Spring Cloud LoadBalancer 的实现差异。","2023-11-15",[330,331,332,333],"分布式","负载均衡","Nginx","微服务",1764,{"slug":336,"title":337,"description":338,"pub_date":339,"tags":340,"draft":15,"word_count":344},"win-cw2a-ca2w","ATL 字符串转换：CW2A 与 CA2W 完全指南","详解 ATL 宏 CW2A\u002FCA2W 在 Unicode 与 ANSI 之间的字符串转换用法、头文件依赖、USES_CONVERSION 宏的作用与常见陷阱。","2023-06-09",[193,341,342,343],"windows","ATL","字符串",1665,{"slug":346,"title":347,"description":348,"pub_date":339,"tags":349,"draft":15,"word_count":353},"csharp-sendmessage-cpp","C# 通过 SendMessage 向 C++ 窗口发送消息与字符串","使用 P\u002FInvoke 调用 user32.dll 的 SendMessage，从 C# 发送自定义 WM_USER 消息及字符串指针给 C++ 原生窗口，并在 C++ 侧正确接收和转换。",[350,193,341,351,352],"C#","互操作","PInvoke",1554,{"slug":355,"title":356,"description":357,"pub_date":358,"tags":359,"draft":15,"word_count":361},"win-postmessage-vector","Windows PostMessage 跨线程传递 std::vector 指针","通过 PostMessage 在 Windows 消息队列中传递 std::vector 指针，使用 reinterpret_cast 将指针装入 LPARAM，并在接收方正确释放内存。","2023-05-26",[193,341,360],"WinAPI",1823,{"slug":363,"title":364,"description":365,"pub_date":358,"tags":366,"draft":15,"word_count":367},"exe-dll-single-package","将 EXE 和 DLL 打包成单一可执行文件","介绍两种将 exe 和依赖 dll 打包成单文件的方案：Enigma Virtual Box 和 WinRAR 自解压，适合发布 Windows 桌面程序时简化分发流程。",[341,193,312],1619,{"slug":369,"title":370,"description":371,"pub_date":358,"tags":372,"draft":15,"word_count":375},"cpp-random-mt19937","C++ 现代随机数生成：用 mt19937 彻底告别 rand()","深入讲解为什么 rand() 不够用，以及如何用 C++11 的 \u003Crandom> 库正确生成高质量随机数，涵盖 mt19937、各种分布和线程安全。",[193,373,374],"c++11","random",1549,{"slug":377,"title":378,"description":379,"pub_date":380,"tags":381,"draft":15,"word_count":383},"win-startup-registry","C++ 实现程序开机自启动：注册表方式详解","通过操作 Windows 注册表 Run 键实现程序开机自启动，包括 HKCU 与 HKLM 区别、完整封装代码、工作目录问题和 UAC 权限处理。","2022-12-26",[341,193,382],"registry",1201,{"slug":385,"title":386,"description":387,"pub_date":388,"tags":389,"draft":15,"word_count":391},"mfc-cstring-wparam","MFC 中 CString 与 WPARAM 之间的转换","详解 MFC 消息传递中 CString 无法直接强转为 WPARAM 的原因，以及两种正确的转换方案，并介绍结构体指针传递的正确姿势。","2022-11-25",[390,193,341],"mfc",1546,{"slug":393,"title":394,"description":395,"pub_date":396,"tags":397,"draft":15,"word_count":399},"duilib-static-build","正确编译 Duilib 静态库：避免 ATL 依赖和链接错误","详解如何用 DuiLib_Static.vcxproj 编译 Duilib 静态库，解决 VARIANT 未定义、Unicode 配置不匹配和 ATL 依赖等常见问题。","2022-08-24",[193,398,341,390],"duilib",2639,{"slug":401,"title":402,"description":403,"pub_date":404,"tags":405,"draft":15,"word_count":407},"mfc-dpi-adaptive","MFC 界面自适应不同分辨率","MFC 对话框程序实现控件和字体随分辨率自动缩放的完整方案，附 DPI Awareness 配置说明","2022-08-17",[390,193,341,406],"dpi",1414,{"slug":409,"title":410,"description":411,"pub_date":412,"tags":413,"draft":15,"word_count":414},"mfc-drag-window","MFC 无标题栏窗口客户区拖动：三种方法对比","MFC 对话框去掉标题栏后如何实现拖动移动窗口，三种方案完整实现与适用场景分析","2022-08-16",[390,193,341],1633,{"slug":416,"title":417,"description":418,"pub_date":419,"tags":420,"draft":15,"word_count":422},"algorithm-number-complement","整数的补数：位运算掩码解法","LeetCode 476 题，用掩码 XOR 实现整数补数，附 C++\u002FPython\u002FJava 三种实现及补数与补码的区别","2021-03-08",[134,421,232],"位运算",1374,[]]