news 2026/9/29 19:54:53

Claude插件加载失败真相:plugin.json与slash commands实战解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Claude插件加载失败真相:plugin.json与slash commands实战解析

1. “claude-plugins-official”不是官方插件库,而是社区对Claude生态能力边界的集体误读

你搜到的claude-plugins-official这个词,大概率不是某个真实存在的 GitHub 仓库、NPM 包或官方文档页面——它更像一个被高频拼凑出来的“概念性关键词”,是大量用户在尝试接入 Claude 功能时,因信息错位、术语混淆、平台迁移和文档断层共同催生的“幻觉标签”。

我从 2023 年底开始系统跟踪 Anthropic 生态的技术动向,完整复现过包括claude-code(原claude-desktop)、claude-cli、cc-connect、mcp-server在内的全部主流开源客户端,并深度参与过国内多个企业级 Claude 接入项目。我可以明确告诉你:Anthropic 官方从未发布、维护或认证过任何名为claude-plugins-official的插件体系、SDK 或代码仓库。所有在 GitHub、知乎、V2EX、掘金上以该名称为标题的教程、Issue 或 PR,本质上都是开发者在缺乏权威指引下,对 Claude 能力扩展机制的一次次试探性命名。

这个误读的根源,藏在三个技术断层里:

第一层是CLI 工具链的命名漂移。早期claude-cli(v0.1.x)支持通过--plugin参数加载本地 JSON 描述文件,其格式与后来mcp.json高度相似;而claude-code(v1.0+)则改用skills/目录 +plugin.json双文件结构。用户把两者混用,又看到claude-cli --list-plugins输出中带official字样(实为硬编码字符串),便自然联想出claude-plugins-official。

第二层是MCP(Model Communication Protocol)规范的传播失真。MCP 是由 Anthropic 提出、但未正式发布 RFC 的内部通信协议草案,其核心目标是统一 LLM 客户端与工具服务之间的调用契约。mcp.json文件正是该协议的实例化产物,用于声明工具能力、输入输出 schema 和调用方式。然而,由于官方未提供mcp-server参考实现,社区只能基于零散的mcp.json示例反向工程,于是把“符合 MCP 规范的插件”简称为“official plugins”,进一步强化了claude-plugins-official的虚假存在感。

第三层是VS Code 扩展市场的命名污染。claude-code的 VS Code 插件 ID 是anthropic.claude-code,其package.json中contributes.commands里注册了/claude、/ask等 slash commands;而部分第三方插件(如飞书集成版cc-connect)为兼容性也复用了/claude命令前缀。用户在调试时执行Developer: Show Running Extensions,看到一堆claude-*开头的扩展,再结合控制台报错harness failed to load plugins web boot: 2 entries did not activate,很容易将“未激活的插件”脑补成“官方插件加载失败”。

提示:当你在终端或日志中看到harness failed to load plugins,这几乎 100% 指向claude-code启动时的插件加载器(plugin-harness)未能成功初始化某个skills/下的子模块,而非“连不上 Anthropic 官方插件市场”。根本原因从来不是网络或权限,而是plugin.json结构错误、依赖缺失或路径未被正确扫描。

这种误读带来的实际代价非常具体:我见过至少 7 个团队,在采购决策会上拿着“找不到claude-plugins-official文档”作为拒绝自建 Claude 工具链的理由;也处理过 12 起线上故障,根因是运维同学按网传教程强行git clone https://github.com/anthropic/claude-plugins-official,结果克隆到一个 404 页面后,把404.html当作配置模板填进生产环境,导致整个cc-connect服务启动卡死。

所以,这篇文章不教你“如何安装claude-plugins-official”——因为它不存在。我要带你做的是:亲手拆解claude-code的插件加载机制,用最原始的文件结构和最小可行配置,跑通一个真正能被/claude命令调用的本地技能(skill),并让你彻底分清plugin.json、mcp.json、slash commands 三者的真实关系与协作边界。

这不是理论推演,是我在 Windows 11(无 WSL)、macOS Sonoma、Ubuntu 24.04 三套环境上逐行验证过的实操路径。接下来所有内容,都建立在claude-code v1.4.2(2024 年 6 月最新稳定版)源码逆向分析基础上,不含任何猜测与二手信息。

2. 插件加载失败的本质:plugin-harness的四道校验关卡与逐级排查法

harness failed to load plugins web boot: X entries did not activate这条报错,是claude-code启动过程中最常出现、也最容易被误解的提示。很多人第一反应是“网络问题”或“代理没配好”,但真相恰恰相反:这条日志 100% 发生在本地,且与网络完全无关。它是plugin-harness模块在内存中完成插件发现、解析、实例化、注册全流程后,向主进程反馈的最终状态摘要。

要真正解决它,必须理解plugin-harness的四道硬性校验关卡。我已将claude-code源码中src/main/plugins/harness.ts的核心逻辑反编译并重写为可读性更强的伪代码,下面直接呈现每道关卡的触发条件、错误表现及验证方法。

2.1 第一道关卡:skills/目录扫描与基础路径合法性检查

plugin-harness启动时,会严格按固定路径查找skills/目录:

  • Windows:%APPDATA%\Claude Code\skills\
  • macOS:~/Library/Application Support/Claude Code/skills/
  • Linux:~/.config/Claude Code/skills/

注意:它不读取--user-data-dir指定的路径,也不识别CLAUDE_CODE_HOME环境变量。这是绝大多数“手动安装技能失败”的根源。很多教程教你在项目根目录建skills/,然后运行npm start,这完全无效——plugin-harness根本不会扫描你的开发目录。

验证方法:打开对应平台的skills/目录(Windows 用户可直接在资源管理器地址栏粘贴%APPDATA%\Claude Code\skills\),确认该路径下存在至少一个非空子目录。如果目录为空、不存在,或子目录名包含空格/中文/特殊符号(如my skill、技能测试),则此关卡直接失败,日志中X entries的计数会包含这些非法目录。

注意:skills/目录本身必须由claude-code首次启动时自动创建。如果你手动新建,需确保其父目录Claude Code具有当前用户完全控制权限(Windows)或rwx权限(macOS/Linux)。我遇到过 3 次案例,因 IT 部门策略限制,%APPDATA%下的Claude Code文件夹被设为只读,导致skills/创建失败,后续所有插件加载均静默跳过。

2.2 第二道关卡:plugin.json文件存在性与 JSON 语法校验

每个skills/下的子目录,必须包含一个名为plugin.json的文件,且该文件必须是合法的 JSON 格式。plugin-harness会使用JSON.parse()尝试解析,任何语法错误(如末尾多逗号、单引号代替双引号、注释)都会导致该子目录被标记为“未激活”。

plugin.json的最小合法结构如下(仅含必填字段):

{ "name": "hello-world", "description": "A minimal skill that returns 'Hello, World!'", "version": "1.0.0", "entryPoint": "./index.js", "capabilities": ["command"] }

关键点解析:

  • "name":必须是小写字母、数字、短横线(-)组成的字符串,不能包含下划线_或点.。"name": "hello_world"会在此关卡失败。
  • "entryPoint":指向技能主入口文件的相对路径,必须以./开头。"entryPoint": "index.js"会被视为绝对路径,解析失败。
  • "capabilities":数组,目前仅支持"command"(对应 slash commands)和"tool"(对应 MCP 工具调用)两种值。其他值如"api"、"web"会被忽略,但不导致失败。

验证方法:用 VS Code 打开plugin.json,启用 JSON 模式(右下角显示JSON),观察是否有红色波浪线。没有波浪线,仅表示语法合法;还需用命令行验证:

# Windows PowerShell Get-Content .\plugin.json | ConvertFrom-Json -ErrorAction Stop # macOS/Linux bash jq empty plugin.json 2>/dev/null || echo "JSON invalid"

2.3 第三道关卡:entryPoint文件可读性与 Node.js 模块导出校验

plugin-harness会尝试require()entryPoint指向的文件。这意味着:

  • 文件必须物理存在,且路径相对于skills/子目录根。
  • 文件必须是有效的 CommonJS 模块(.js)或 ES 模块(.mjs),且导出一个默认函数。

最简可用的index.js内容如下:

// skills/hello-world/index.js module.exports = function (context) { return { name: "hello-world", description: "Returns a greeting", execute: async function (input) { return { result: "Hello, World!" }; } }; };

关键点解析:

  • module.exports必须是一个函数,该函数接收context对象(plugin-harness注入的运行时上下文),返回一个包含name、description、execute的对象。
  • execute函数必须是async,且返回一个Promise,其resolve值必须是{ result: any }结构的对象。return "Hello, World!"会在此关卡失败。
  • 如果index.js中有console.log或throw new Error(),plugin-harness会捕获异常并标记为“未激活”,但不会崩溃主进程。

验证方法:在skills/hello-world/目录下,直接运行node index.js。如果报错ReferenceError: module is not defined,说明你用了 ES 模块语法(export default),需改为module.exports;如果报错TypeError: Cannot read property 'execute' of undefined,说明module.exports返回值结构错误。

2.4 第四道关卡:execute函数签名与异步行为合规性检查

这是最隐蔽、也最难调试的一关。plugin-harness不会立即执行execute函数,而是在首次收到/claude hello-world命令时才调用。但为了确保稳定性,它会在加载阶段对execute函数进行静态分析:

  • 函数必须接受且仅接受一个参数(通常命名为input)。
  • 函数必须返回一个Promise(即async function或function() { return Promise.resolve(...) })。
  • Promise的resolve值必须是纯对象,且必须包含result字段。{ data: "ok" }或{ result: "ok", status: "success" }均可,但{ result: null }或{ result: undefined }会导致命令执行时 UI 卡死。

验证方法:无法在启动时验证,必须通过实际命令触发。在claude-code界面中,输入/claude hello-world并回车。如果 UI 显示“正在思考...”后无响应,或控制台(Help > Toggle Developer Tools > Console)出现Uncaught (in promise)错误,则基本确定是此关卡失败。

实操心得:我总结出一条铁律——所有execute函数的第一行,必须是console.log('hello-world execute called with:', input);。这看似简单,却能帮你瞬间区分是“插件没加载”还是“插件加载了但执行失败”。因为plugin-harness会捕获console.log,并在开发者工具的Console面板中输出。如果看不到这行日志,说明卡在前三关;如果看到了,但没返回结果,那一定是第四关的Promise或result字段出了问题。

这四道关卡构成了一个严格的漏斗式校验流程。harness failed to load plugins中的X entries,就是在这四道关卡中被逐一筛掉的子目录数量。解决它的唯一方法,不是重装软件或换网络,而是像调试一个微服务一样,逐级验证每个环节的输入输出。下一节,我将带你用一个真实可运行的hello-world技能,完整走通这四道关卡,并展示如何在 Windows、macOS、Linux 上规避所有常见陷阱。

3. 从零构建一个真正可用的hello-world技能:跨平台实操步骤与避坑清单

现在,我们抛开所有模糊概念,动手构建一个能在claude-code中被/claude hello-world成功调用的最小可行技能。这个过程将严格遵循上一节的四道关卡,每一步都附带平台特异性操作和血泪教训。

3.1 步骤一:精准定位并创建skills/目录(绕过所有权限陷阱)

Windows 11(无 WSL)用户:

  1. 按Win + R,输入%APPDATA%\Claude Code\,回车。这会直接打开C:\Users\<用户名>\AppData\Roaming\Claude Code\。
  2. 在此目录下,右键 > 新建 > 文件夹,命名为skills(全小写,无空格)。
  3. 右键点击刚创建的skills文件夹 >属性>安全选项卡 > 点击编辑...> 选中你的用户名 > 勾选完全控制>确定。这一步至关重要,否则claude-code可能因权限不足无法扫描子目录。

注意:不要在C:\Program Files\Claude Code\下创建skills/。那是安装目录,plugin-harness永远不会扫描这里。我曾帮一位客户排查了两天,最终发现他一直往安装目录里放技能,而APPDATA目录下的skills/是空的。

macOS Sonoma 用户:

  1. 打开访达,按Cmd + Shift + G,输入~/Library/Application Support/Claude Code/,回车。
  2. 如果Claude Code文件夹不存在,先启动一次claude-code,让它自动生成。
  3. 在Claude Code文件夹内,右键 > 新建文件夹,命名为skills。
  4. 打开终端,执行:
    chmod -R 755 ~/Library/Application\ Support/Claude\ Code/skills
    这确保claude-code进程(通常以你的用户身份运行)有读取权限。

Ubuntu 24.04 用户:

  1. 打开文件管理器,按Ctrl + H显示隐藏文件,进入~/.config/Claude Code/。
  2. 如果Claude Code不存在,先运行claude-code一次。
  3. 在~/.config/Claude Code/下创建skills目录:
    mkdir -p ~/.config/Claude\ Code/skills
  4. 设置权限:
    chmod 755 ~/.config/Claude\ Code/skills

3.2 步骤二:创建hello-world子目录与合法plugin.json

在skills/目录下,创建一个名为hello-world的新文件夹(全小写,无空格,无下划线)。

进入hello-world/,用任意文本编辑器(推荐 VS Code)创建plugin.json,内容严格复制以下:

{ "name": "hello-world", "description": "A minimal skill that returns 'Hello, World!'", "version": "1.0.0", "entryPoint": "./index.js", "capabilities": ["command"] }

关键避坑点:

  • 保存时,确保编码为UTF-8(无 BOM)。Windows 记事本默认是ANSI,极易导致 JSON 解析失败。务必用 VS Code、Sublime Text 或 Notepad++。
  • 检查文件末尾是否有不可见的空格或换行符。plugin-harness对空白字符极其敏感。
  • name字段必须与文件夹名完全一致(hello-world),大小写、连字符都不能错。

3.3 步骤三:编写index.js并通过node验证

在hello-world/目录下,创建index.js,内容如下:

// skills/hello-world/index.js module.exports = function (context) { console.log('hello-world skill loaded successfully'); return { name: "hello-world", description: "Returns a greeting", execute: async function (input) { console.log('hello-world execute called with:', input); // 模拟一个异步操作,比如调用外部 API await new Promise(resolve => setTimeout(resolve, 100)); return { result: "Hello, World! This is running locally." }; } }; };

关键避坑点:

  • 必须使用module.exports = function (...) {...},不能用export default function (...) {...}(ES 模块)。
  • execute函数内必须有await或return Promise.resolve(...),否则plugin-harness会认为它是同步函数而拒绝加载。
  • console.log语句是调试生命线,绝不能删除。

跨平台验证:

  • Windows:打开PowerShell,进入hello-world/目录,运行node index.js。应无任何输出(因为module.exports是函数,不执行)。
  • macOS/Linux:在终端进入hello-world/,运行node index.js。同样应无输出。

如果报错Cannot find module '...',说明node版本过低(claude-code内置 Node.js 版本为 18.x,你的系统node可能是 16.x 或 20.x)。此时请忽略系统node,直接信任claude-code自带的运行时——只要它能启动,就一定能运行这个index.js。

3.4 步骤四:重启claude-code并触发首次调用

  1. 关闭所有claude-code窗口(包括后台进程)。Windows 用户可在任务管理器中结束Claude Code进程;macOS 用户可在活动监视器中结束;Linux 用户可pkill -f 'claude-code'。
  2. 重新启动claude-code。
  3. 打开Help > Toggle Developer Tools,切换到Console面板。
  4. 在聊天窗口中,输入/claude hello-world并回车。

预期现象:

  • Console面板中,应首先看到hello-world skill loaded successfully(证明通过关卡一至三)。
  • 紧接着,应看到hello-world execute called with: {}(证明通过关卡四,execute被成功调用)。
  • 聊天窗口中,应显示Hello, World! This is running locally.。

如果失败,请对照以下终极排查表:

现象最可能原因解决方案
控制台无任何hello-world日志卡在关卡一或二:skills/路径错误,或plugin.json不存在/语法错误重新检查skills/绝对路径;用jq或在线 JSON 校验器验证plugin.json
控制台有loaded successfully但无execute called卡在关卡三:index.js导出结构错误,或entryPoint路径不对检查plugin.json中entryPoint是否为./index.js;检查index.js是否以module.exports = function开头
控制台有execute called但聊天窗口无响应卡在关卡四:execute函数未返回Promise,或result字段缺失检查execute是否async;检查return { result: ... }是否存在且result值不为null/undefined
控制台报Uncaught (in promise)错误execute函数内部抛出未捕获异常在execute函数内加try/catch,console.error打印错误

这个hello-world技能,就是你理解claude-plugins本质的基石。它不依赖任何网络、不调用任何 API、不涉及任何复杂的配置,纯粹是claude-code本地运行时能力的裸露。当你能稳定跑通它,你就已经超越了 90% 的“harness failed to load plugins”求助者。

4.plugin.json、mcp.json与 slash commands 的真实关系图谱

现在,你已经亲手构建了一个可运行的技能。但网上铺天盖地的plugin.json、mcp.json、slash commands、harness failed to load plugins等术语,依然像一团乱麻。这一节,我将用一张清晰的关系图谱,彻底厘清它们各自的定位、职责与协作方式。这张图不是抽象模型,而是基于claude-code v1.4.2源码的精确映射。

4.1plugin.json:技能的“身份证”与“说明书”

plugin.json是plugin-harness加载一个技能的唯一入口凭证。它不包含任何业务逻辑,只描述“我是谁”、“我能做什么”、“我的代码在哪”。你可以把它理解为一个技能的package.json。

其核心字段含义与约束,已在上一节详述。这里强调三个易被误解的点:

  1. capabilities字段决定调用方式,而非功能类型
    很多人以为"capabilities": ["tool"]表示这是一个“工具类”技能,可以被 Claude 主动调用。这是错误的。"tool"的真实含义是:该技能的execute函数返回值,将被plugin-harness作为 MCP 协议的工具描述(Tool Definition)注入到 LLM 的 system prompt 中。换句话说,"tool"是告诉claude-code:“请把这个技能的能力,当作一个可被 LLM 自主选择调用的工具来宣传”。而"command"则表示:“这个技能只能被用户显式触发,即通过/claude xxx命令”。

  2. name字段是 slash command 的唯一标识符
    当你定义"name": "hello-world",plugin-harness会自动为你注册一个 slash command/claude hello-world。这个映射是硬编码的,不可更改。你不能在plugin.json中指定commandName或trigger字段。这也是为什么name必须是合法的命令名(小写、数字、短横线)。

  3. version字段用于热重载,而非版本管理
    plugin-harness会监听plugin.json文件的修改时间戳。当version字段变更(哪怕只是1.0.0改为1.0.1),plugin-harness会尝试卸载并重新加载该技能。这为开发调试提供了便利,但version本身不参与任何语义化版本比较。

4.2mcp.json:MCP 协议的“工具描述模板”,与plugin.json并非父子关系

mcp.json是一个经常被误认为是plugin.json“升级版”或“替代品”的文件。事实正相反:mcp.json和plugin.json是两条平行线,服务于完全不同的场景。

  • plugin.json是claude-code客户端内部的插件元数据,用于plugin-harness加载和管理。
  • mcp.json是一个独立的、面向通用 MCP 服务器的工具描述文件。它的作用,是让一个外部服务(比如一个 Python 编写的天气查询 API)能够被任何兼容 MCP 的客户端(不限于claude-code)发现和调用。

一个典型的mcp.json内容如下:

{ "name": "weather-lookup", "description": "Get current weather for a city", "inputSchema": { "type": "object", "properties": { "city": { "type": "string", "description": "The city name" } }, "required": ["city"] }, "outputSchema": { "type": "object", "properties": { "temperature": { "type": "number" }, "condition": { "type": "string" } } } }

关键区别在于:

  • mcp.json描述的是工具的输入输出契约(schema),不包含任何实现细节(如entryPoint)。
  • mcp.json本身不能被plugin-harness直接加载。它需要一个独立的mcp-server进程来托管,并通过 HTTP 或 IPC 与claude-code通信。
  • claude-code的plugin-harness只负责加载plugin.json,但它可以作为一个 MCP 客户端,去连接外部的mcp-server。此时,mcp.json是mcp-server的配置,与plugin.json无任何代码层面的关联。

提示:当你看到harness failed to load plugins web boot: 1 entry did not activate @linxin666这样的日志,其中的@linxin666很可能是一个mcp-server的 URL 或别名。plugin-harness尝试连接该mcp-server失败,便将其计入“未激活条目”。这再次证明,harness failed的根源永远在本地配置或本地网络,而非 Anthropic 的云端服务。

4.3 Slash Commands:用户与技能之间的“唯一桥梁”

Slash commands(斜杠命令)是claude-code提供给用户的、最直接的技能调用接口。它的设计哲学非常朴素:一切皆命令,命令即技能。

  • /claude是所有技能命令的统一前缀,由claude-code硬编码,不可更改。
  • /claude <name>中的<name>,必须与plugin.json中的"name"字段完全一致(包括大小写和连字符)。
  • /claude命令的解析和路由,由claude-code的command-service模块完成,它会根据<name>查找已加载的技能,并调用其execute函数。

这里有一个重要但常被忽视的细节:/claude命令的执行是完全同步的 UI 操作,但技能的execute函数是异步的。这意味着,当你输入/claude hello-world并回车,UI 立即显示“正在思考...”,然后plugin-harness在后台调用execute,execute返回Promise,plugin-harness等待Promiseresolve 后,再将result字段的内容插入聊天窗口。

这种设计带来了两个关键优势:

  1. UI 响应迅速:用户不会因为技能执行慢而感觉卡顿。
  2. 错误隔离:某个技能的execute函数抛出异常,不会影响其他技能或主进程。

这也解释了为什么execute函数必须返回Promise:这是plugin-harness实现异步等待的契约。如果你写一个同步的execute函数,plugin-harness会认为它“立刻执行完毕”,并尝试读取其返回值,而这个返回值几乎肯定不是{ result: ... }结构,从而导致 UI 卡死。

下表总结了三者的核心关系:

维度plugin.jsonmcp.jsonSlash Commands
存在位置skills/<name>/plugin.json独立文件,可存于任意位置claude-codeUI 输入框
主要作用告诉plugin-harness如何加载一个本地技能告诉mcp-server如何暴露一个外部工具告诉用户如何触发一个技能
与plugin-harness关系直接依赖,是加载的唯一依据无直接关系,plugin-harness不读取它调用入口,plugin-harness通过它找到并执行技能
是否可被用户直接编辑是,是开发者的主配置文件是,但需配合mcp-server使用否,是用户输入,非配置项
典型错误场景harness failed to load pluginsFailed to connect to MCP server/claude xxx not found

理解这张图谱,你就不会再被“claude-plugins-official”这样的模糊概念所困。你清楚地知道,自己要构建的是一个plugin.json+index.js的组合,目标是让/claude <name>这条命令生效。所有其他术语,都是围绕这个核心目标的辅助性概念。

5. 从hello-world到生产级技能:文件结构、依赖管理与调试技巧

你已经掌握了最小可行技能的构建方法。现在,是时候将它升级为一个真正能解决实际问题的生产级技能了。这一节,我将基于一个真实的案例——“本地文件搜索技能”(file-search),展示如何在plugin.json和index.js的基础上,引入外部依赖、处理复杂输入、进行健壮性错误处理,并分享我在多个项目中沉淀下来的调试技巧。

5.1 生产级技能的推荐文件结构

一个可维护、可扩展的技能,不应只有一个index.js。我推荐采用以下标准化结构(以file-search为例):

skills/file-search/ ├── plugin.json # 技能元数据(不变) ├── index.js # 入口文件,只做初始化和导出 ├── lib/ │ ├── search.js # 核心业务逻辑(文件搜索) │ └── utils.js # 工具函数(路径规范化、错误格式化) ├── assets/ │ └── icon.png # 技能图标(可选,用于 UI 展示) └── README.md # 技能说明(可选,便于团队协作)

这种结构的优势在于:

  • 关注点分离:index.js只负责“组装”,lib/下存放“逻辑”,便于单元测试和复用。
  • 易于调试:index.js中可以集中添加console.log,而业务逻辑中的日志则更聚焦于具体操作。
  • 依赖隔离:lib/下的模块可以独立于plugin-harness运行,方便用node直接测试。

5.2 在技能中安全地使用外部 NPM 包

claude-code的plugin-harness运行在一个受限的 Node.js 环境中,它不支持require('child_process')、require('fs')等原生模块的某些方法,也不支持npm install。但这并不意味着你不能用外部包。

正确做法是:将你需要的 NPM 包,预先打包(bundle)进你的技能中。我推荐使用esbuild,因为它轻量、快速,且能完美处理 CommonJS 和 ES 模块混合的情况。

以file-search技能为例,它需要glob包来搜索文件。操作步骤如下:

  1. 在file-search/目录下,初始化一个临时package.json:

    npm init -y npm install glob
  2. 创建build.mjs脚本:

    // file-search/build.mjs import * as esbuild from 'esbuild'; await esbuild.build({ entryPoints: ['lib/search.js'], bundle: true, minify: true, platform: 'node', target: 'node18', outfile: 'dist/search.bundle.js', external: ['fs', 'path', 'os'], // 声明这些是 Node 原生模块,不要打包进去 }); console.log('Bundle built to dist/search.bundle.js');
  3. 修改index.js,使其require打包后的文件:

    // file-search/index.js const { searchFiles } = require('./dist/search.bundle.js'); module.exports = function (context) { console.log('file-search skill loaded'); return { name: "file-search", description: "Search for files matching a pattern in your local directories", execute: async function (input) { try { console.log('file-search execute called with:', input); const { pattern, directory } = input; if (!pattern) { return { result: "Error: 'pattern' is required." }; } const results
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 19:54:52

Starnet架构解析:轻量级边缘自治星型网络设计与实现

1. 项目概述&#xff1a;Starnet 不是某个具体产品&#xff0c;而是一类分布式网络架构的统称 最近在技术社区、开源论坛和硬件极客圈里&#xff0c;“starnet”这个词出现频率明显升高&#xff0c;但很多人第一次看到时都会愣一下——它不像 Kubernetes 或 Docker 那样有明确…

作者头像 李华
网站建设 2026/9/29 19:53:35

工具网关:Agent稳定落地的关键——Hermes v0.10.0深度拆解

上个月我把内部 Agent 项目从 Hermes 的 v0.9.x 升到 v0.10.0&#xff0c;本来只想顺手修两个老 bug&#xff0c;结果被这次 Release 里新强化的一整层“工具网关”&#xff08;Tool Gateway&#xff09;重新教育了一轮——什么叫“把工具交给模型之前&#xff0c;先想清楚怎么…

作者头像 李华
网站建设 2026/9/29 19:52:57

N0-TWAM:7B触觉世界模型如何破解接触富集操作难题

说实话&#xff0c;当我看到“复旦NeoteAI首发N0-TWAM”这个消息时&#xff0c;第一反应是&#xff1a;世界模型这波&#xff0c;终于开始碰真问题了。过去一年里&#xff0c;我们见到的世界模型大多是视频预测、游戏智能体、自动驾驶场景&#xff0c;它们对“看”这件事很擅长…

作者头像 李华
网站建设 2026/9/29 19:52:50

终端里的AI绘画:Claude Code接入Nano Banana MCP完整指南

我一开始真没觉得 Claude Code 需要会画画。装它进终端&#xff0c;纯粹是想让它帮我重构代码、跑测试、写 commit message。直到有一次我顺手问了句“给这篇博客配个封面图”&#xff0c;它憋了半天给我输出了一段 ASCII 字符拼的“封面”&#xff0c;那一瞬间我才反应过来&am…

作者头像 李华
网站建设 2026/9/29 19:52:16

IAR半主模式导致STM32F407硬件复位失效的深度解析与清除

1. 项目概述&#xff1a;半主模式不是“半途而废”&#xff0c;而是调试状态的隐形牢笼IAR Embedded Workbench 9.x 版本在 STM32F407 这类高性能 Cortex-M4 芯片上跑调试&#xff0c;很多人会突然卡在一个特别诡异的状态里&#xff1a;你明明按下了开发板上的硬件复位按钮&…

作者头像 李华
网站建设 2026/9/29 19:51:48

x64dbg + MCP:实现AI全自动动态逆向分析

1. 这不是“让AI写代码”&#xff0c;而是让AI真正接管调试器的操作权你有没有试过在x64dbg里手动单步执行一段加密解密逻辑&#xff0c;盯着寄存器窗口反复比对EAX值变化&#xff0c;一盯就是两小时&#xff1f;有没有在分析一个加了多层混淆的UPX壳时&#xff0c;翻遍所有断点…

作者头像 李华