LobeHub CLIlh skill与lh plugin命令详解从命令行管理智能体技能与插件【免费下载链接】lobehub LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.项目地址: https://gitcode.com/GitHub_Trending/lo/lobehub本文基于 LobeHub 仓库的 CLI 命令参考文档 skills-plugins.md完整覆盖lh skill智能体技能管理与lh plugin外部工具插件管理两组子命令的参数、示例与底层实现。读完后你可以熟练使用lh skill list / view / create / edit / delete / search / install / resources / read-resource和lh plugin list / install / uninstall / update完成技能与插件的全生命周期管理并理解这些命令在后端 tRPC 路由与SkillImporter服务中的真实调用链。前置条件CLI 如何与 LobeHub 服务端通信所有lh命令都通过 CLI 的 tRPC 客户端 访问服务端的/trpc/lambda端点。从 getAuthAndServer() 的实现看认证按以下优先级解析环境变量LOBEHUB_JWT供服务端沙箱场景使用以Oidc-Auth头传递CLI API Key 环境变量以X-API-Key头传递本地 OAuth 令牌需先执行lh login未登录时命令会以No authentication found. Run lh login ... first报错退出。因此在执行下述任何 skill / plugin 命令前请确认已完成lh login或配置了对应环境变量。涉及工作区Workspace的操作时客户端会通过withWorkspaceHeader自动附加工作区头服务端按 RBAC 权限校验写操作要求agent:update权限见 agentSkills.ts。技能管理lh skill技能Skill是赋予智能体自定义指令与能力的载体本质是一份SKILL.md提示词内容加上可选的附带资源文件。CLI 入口注册于 registerSkillCommand()所有子命令最终都调用client.agentSkills.*对应的 tRPC 过程。lh skill list— 列出技能lh skill list [--source source] [--json [fields]]选项说明--source source按来源过滤builtin内置、market市场、user自建三者之外取值会直接报错退出--json [fields]以 JSON 输出可选字段名逗号分隔做投影默认以表格输出列为ID、NAME、DESCRIPTION、SOURCE、IDENTIFIER其中 NAME/DESCRIPTION 会按终端显示宽度截断实现见 truncate()对 CJK 全角字符按 2 列宽度计算中文技能名不会把表格撑乱。源码中 NAME 截断上限 30 字符、DESCRIPTION 40 字符skill.ts。lh skill view id— 查看技能详情lh skill view id [--json [fields]]展示技能名称、描述、来源Source、标识符ID: identifier以及完整的Content技能提示词正文。技能不存在时报错Skill not found: id并以非零码退出。lh skill create— 创建用户技能lh skill create -n name -d desc -c content [-i identifier]选项说明必填-n, --name name技能名称是-d, --description desc技能描述是-c, --content content技能内容提示词/指令是-i, --identifier id自定义标识符否服务端的 createUserSkill() 会做两重唯一性校验同名技能报CONFLICTSkill with name ... already exists不提供--identifier时自动生成为user.nanoid(12)形式。创建成功后终端打印✓ Created skill id。lh skill edit id— 更新技能lh skill edit id [-n name] [-d desc] [-c content]三个参数至少提供一个否则报错No changes specified.。从源码实现看skill.ts-c直接更新content字段而-n / -d会被打包进manifest对象传递——这与服务端 updateSkillSchema 的设计一致“所有元数据都应通过 manifest 传递”服务端再把manifest.name / manifest.description同步回顶层字段。lh skill delete id— 删除技能lh skill delete id [--yes]不加--yes时会交互式确认Are you sure you want to delete this skill?输入拒绝则打印Cancelled.。服务端删除逻辑是幂等的目标行不存在时直接返回不触发权限断言agentSkills.ts。lh skill search query— 搜索技能lh skill search query [--json [fields]]表格列为ID、NAME、DESCRIPTION对应服务端的agentSkills.search过程agentSkills.ts底层为AgentSkillModel.search的模糊匹配。lh skill install source别名lh skill i— 安装技能这是功能最复杂的子命令会根据输入自动识别来源类型# GitHubURL 或 owner/repo 简写 lh skill install lobehub/skill-repo lh skill install https://github.com/lobehub/skill-repo lh skill install lobehub/skill-repo --branch dev # ZIP 直链 lh skill install https://example.com/skill.zip # 市场标识符 lh skill install my-cool-skill lh skill i my-cool-skill选项说明备注--branch branch分支名仅 GitHub 来源有效可选类型检测规则由 detectSourceType() 实现优先级如下https://github.com/...或 http 前缀开头 →GitHub匹配正则^[\w-]\/[\w.-]$即owner/repo简写→GitHub其他https://.../http://...URL →ZIP URL其余一律视为市场标识符。三种类型分别路由到不同的 tRPC 过程skill.ts检测类型tRPC 过程服务端行为GitHubagentSkills.importFromGitHub拉取仓库 ZIP 并解析SKILL.md可指定branchZIP URLagentSkills.importFromUrl下载并解析 ZIP 包市场标识符agentSkills.importFromMarket先经MarketService.getSkillDownloadUrl()换取下载地址再走 URL 导入并标记source: market服务端的SkillImporterimporter.ts有几个值得了解的实现细节GitHub 导入支持子目录importFromGitHub解析时可传basePath只保留技能目录文件并重新打包repackSkillZipmanifest 中会写入repository与sourceUrl字段基于 zipHash 的去重与增量更新若已有技能的zipFileHash与新包一致且内容非空直接返回unchanged状态不做写入内容变化时更新原记录updated并仅允许创建者或工作区 owner 覆盖他人技能assertCanOverwriteSSRF 防护URL 导入使用ssrfSafeFetch而非原生 fetch在连接时拦截内网/link-local 地址并逐跳校验重定向importer.ts并带 30 秒超时标识符生成URL 导入时按url.host.path 中的斜杠转点号生成标识符市场导入时优先使用传入的 identifier导入结果状态created/updated/unchangedCLI 端统一打印✓ Installed skill ...。注意GitHub 来源导入的技能在数据库中source字段被标记为marketimporter.tslh skill list --source market即可看到它们。资源文件子命令技能可携带额外资源文件脚本、参考文档等由resources哈希表引用文件按内容哈希全局去重存储。lh skill resources id— 列出技能资源lh skill resources id [--json [fields]]表格列为PATH、TYPE、SIZE大小以 KB 展示Math.round(size / 1024)。服务端先校验技能存在再经SkillResourceService.listResources返回资源清单agentSkills.ts。lh skill read-resource id path— 读取资源文件内容lh skill read-resource skillId path返回文件内容或 JSON 元数据。实现上skill.ts若结果含content字段则原样写入 stdout可直接重定向保存文件否则输出格式化 JSON路径不存在时报Resource not found: path。插件管理lh plugin插件Plugin是外部工具集成通过 manifest 声明能力。CLI 入口注册于 registerPluginCommand()服务端路由为 plugin.ts。lh plugin list— 列出已安装插件lh plugin list [--json [fields]]表格列为ID、IDENTIFIER、TYPE、TITLE其中 TITLE 取自manifest.meta.title回退到manifest.identifierplugin.ts。无插件时打印No plugins installed.。lh plugin install— 安装插件lh plugin install -i identifier --manifest json [--type type] [--settings json]选项说明必填-i, --identifier id插件标识符是--manifest json插件 manifest JSON 字符串是--type typeplugin或customPlugin否默认plugin--settings json插件设置 JSON 字符串否--manifest与--settings都会被客户端JSON.parse解析失败直接报Invalid manifest JSON./Invalid settings JSON.退出。底层调用的是幂等的plugin.createOrInstallPluginplugin.ts按 identifier 查不到记录时新建已存在时仅更新 manifest且只有创建者或工作区 owner 能覆盖他人插件行assertWorkspaceRowManageable。这意味着重复执行同一条 install 命令不会报错只会刷新 manifest。lh plugin uninstall id— 卸载插件lh plugin uninstall id [--yes]同样带交互确认--yes跳过。服务端删除同样幂等记录不存在时静默返回。lh plugin update id— 更新插件lh plugin update id [--manifest json] [--settings json]--manifest与--settings至少提供一个否则报错No changes specified.。两个参数可同时提供一次请求内完成 manifest 与 settings 的联合更新。源码补充lh plugin create命令参考文档未收录、但源码中实际注册的还有一个 plugin create 子命令无 settings 的纯创建对应plugin.createPluginlh plugin create -i id --manifest json [--type type] [--custom-params json]与install的区别在于它走createPlugin过程总是创建新记录identifier 冲突会由数据层报错并额外支持--custom-params传入自定义参数。输出约定与脚本化建议两组命令共享统一的输出协议utils/format.ts--json输出纯 JSON不带表格装饰可直接| jq处理--json fields字段投影如lh skill list --json id,name,source只输出指定字段适合在 Agent 工作流中做轻量数据提取表格输出列宽按 CJK 显示宽度对齐全角字符按 2 列计算长文本以…截断退出码not found、参数校验失败、JSON 解析失败等场景均process.exit(1)可被脚本捕获判断成败。小结与延伸阅读客户端实现apps/cli/src/commands/skill.ts、apps/cli/src/commands/plugin.ts服务端路由apps/server/src/routers/lambda/agentSkills.ts、apps/server/src/routers/lambda/plugin.ts导入核心服务apps/server/src/services/skill/importer.ts同目录下的 importer.test.ts 覆盖了 ZIP 解析、GitHub 导入与 URL 导入的行为验证可作为回归行为的参考依据集成测试apps/server/src/routers/lambda/tests/integration/agentSkills.integration.test.ts。理解“CLI 命令 → tRPC 过程 → 服务端服务”这条调用链后你可以把lh skill installlh plugin install组合进 CI 或 Agent 编排脚本实现技能与插件的可版本化、可重复安装。【免费下载链接】lobehub LobeHub is your Chief Agent Operator, organizing your agents into 7×24 operations by hiring, scheduling, and reporting on your entire AI team.项目地址: https://gitcode.com/GitHub_Trending/lo/lobehub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考