问题概述
lark-cli install(安装向导)和 lark-cli update 会强制把 28 个官方 lark-* skills 全局安装到 ~/.agents/skills/,并软链到所有检测到的 agent skills 目录(~/.claude/skills、~/.grok/skills、~/.commandcode/skills 等)。整个过程没有任何跳过/关闭选项:
scripts/install-wizard.js 第 2 步硬编码 npx -y skills add <SKILLS_REPO> -y -g(-g 全局安装、-y 非交互),唯一的跳过条件是 npx skills ls -g 输出里已存在 lark- 行;
lark-cli update 内部固定执行 skills 同步(cmd/update.runSkillsAndState / internal/selfupdate.FetchSkillsIndex),没有"只更新 CLI 本体"的模式;
- 环境变量
LARKSUITE_CLI_NO_SKILLS_NOTIFIER 只关闭 "skills 有更新" 的提醒文案(与 NO_UPDATE_NOTIFIER 同组),不阻止安装本身;
update --check / doctor 会提示 run: lark-cli update,日常使用中很容易顺手执行 → 手动删除的 skills 被完整装回。
对不需要全局 skills 的用户(例如只想在某个项目里偶尔用飞书能力、或由 agent 按需读 lark-cli skills read 内嵌内容)来说,这是持续的侵扰:不希望这些 skill 出现在全局 skill 列表里,但只要升级就又回来了。
复现
- 执行
lark-cli install 或 lark-cli update
- 观察:
~/.agents/skills/ 出现 28 个 lark-* 目录;各 agent skills 目录出现 28 个同名软链(我机器上 3 个 agent 目录共 84 个)
rm -rf ~/.agents/skills/lark-* 并删掉对应软链
- 再执行
lark-cli update → 28 个 skills 及全部软链原样装回
已验证普通命令不会触发安装(--help、doctor、skills list/read、config show、update --check、只读 api 调用均无写入),触发点仅 install 与 update;postinstall(scripts/install.js)只下载二进制、不碰 skills。但 update 是日常命令(版本提示不断引导执行),所以感知上就是"经常性地被装回来"。
(环境:lark-cli 1.0.95,pnpm 全局安装,Linux;update --check 当前提示 1.0.96 可用)
附带问题:手动清理后的残留
用户手动删除后,安装链路不会清理关联状态,留下孤儿数据:
~/.agents/.skill-lock.json 中 28 条 lark-* 记录仍在(安装时经外部 skills CLI 写入),与磁盘状态不一致
- 各 agent skills 目录中 28×N 个悬空软链,指向已删除的
~/.agents/skills/lark-*
期望的卸载路径应一并处理:目录 + 软链 + lock/state 条目。
期望(按实现成本排序)
- 跳过开关:
lark-cli update --skip-skills(或 --cli-only),和/或环境变量 LARKSUITE_CLI_NO_SKILLS_INSTALL=1,和/或 ~/.lark-cli/config.json 配置项
- update 时尊重用户已删除的 skills:不静默重装(当前
skills-state.json 只记录版本快照,没有"用户已移除"标记)
- 提供
lark-cli skills uninstall(或类似命令)做完整清理:skill 目录 + agent 软链 + skills-state.json / .skill-lock.json 条目,而不是让用户手动 rm
- 安装位置可选:不要硬编码
-g,允许全局 / 项目级安装二选一(至少在向导里询问)
相关 issue
谢谢!CLI 本身(typed commands / skills read 内嵌文档 / --jq)非常好用,skills 自动安装这块希望能给用户选择权。
问题概述
lark-cli install(安装向导)和lark-cli update会强制把 28 个官方lark-*skills 全局安装到~/.agents/skills/,并软链到所有检测到的 agent skills 目录(~/.claude/skills、~/.grok/skills、~/.commandcode/skills等)。整个过程没有任何跳过/关闭选项:scripts/install-wizard.js第 2 步硬编码npx -y skills add <SKILLS_REPO> -y -g(-g全局安装、-y非交互),唯一的跳过条件是npx skills ls -g输出里已存在lark-行;lark-cli update内部固定执行 skills 同步(cmd/update.runSkillsAndState/internal/selfupdate.FetchSkillsIndex),没有"只更新 CLI 本体"的模式;LARKSUITE_CLI_NO_SKILLS_NOTIFIER只关闭 "skills 有更新" 的提醒文案(与NO_UPDATE_NOTIFIER同组),不阻止安装本身;update --check/doctor会提示run: lark-cli update,日常使用中很容易顺手执行 → 手动删除的 skills 被完整装回。对不需要全局 skills 的用户(例如只想在某个项目里偶尔用飞书能力、或由 agent 按需读
lark-cli skills read内嵌内容)来说,这是持续的侵扰:不希望这些 skill 出现在全局 skill 列表里,但只要升级就又回来了。复现
lark-cli install或lark-cli update~/.agents/skills/出现 28 个lark-*目录;各 agent skills 目录出现 28 个同名软链(我机器上 3 个 agent 目录共 84 个)rm -rf ~/.agents/skills/lark-*并删掉对应软链lark-cli update→ 28 个 skills 及全部软链原样装回已验证普通命令不会触发安装(
--help、doctor、skills list/read、config show、update --check、只读api调用均无写入),触发点仅install与update;postinstall(scripts/install.js)只下载二进制、不碰 skills。但update是日常命令(版本提示不断引导执行),所以感知上就是"经常性地被装回来"。(环境:lark-cli 1.0.95,pnpm 全局安装,Linux;
update --check当前提示 1.0.96 可用)附带问题:手动清理后的残留
用户手动删除后,安装链路不会清理关联状态,留下孤儿数据:
~/.agents/.skill-lock.json中 28 条lark-*记录仍在(安装时经外部skillsCLI 写入),与磁盘状态不一致~/.agents/skills/lark-*期望的卸载路径应一并处理:目录 + 软链 + lock/state 条目。
期望(按实现成本排序)
lark-cli update --skip-skills(或--cli-only),和/或环境变量LARKSUITE_CLI_NO_SKILLS_INSTALL=1,和/或~/.lark-cli/config.json配置项skills-state.json只记录版本快照,没有"用户已移除"标记)lark-cli skills uninstall(或类似命令)做完整清理:skill 目录 + agent 软链 +skills-state.json/.skill-lock.json条目,而不是让用户手动rm-g,允许全局 / 项目级安装二选一(至少在向导里询问)相关 issue
lark-cli update自定义更新模式:仅更新 CLI 本体,或同时更新 CLI 与 skills #1145(update可选择只更新 CLI 本体)— 与本 issue 期望 1 重叠;本 issue 更聚焦"无法跳过全局安装 + 删除后被重装 + 残留清理"谢谢!CLI 本身(typed commands /
skills read内嵌文档 /--jq)非常好用,skills 自动安装这块希望能给用户选择权。