| name | env-check |
| description | 检查本地开发环境(node / pnpm / lark-cli / figma-to-code / Figma MCP / npm registry / glab / 代理 等 15 项)是否就绪。新会话开始时由主 Agent 调用一次;只检测 + 给安装命令,不自动跑。如有 ERR 级缺失 -> 告知用户并停止后续动作;只有 WARN/INFO -> 简短提示后继续。glab 缺失 → 用 `glab-setup` skill 引导。 |
env-check
每次新会话先检测一遍开发环境,按级别决定是否阻断后续工作。
1. 跑 helper 脚本
node .claude/hooks/env-check.mjs 2>/dev/null
输出 stdout 一行 JSON:
{
"checkedAt": "...",
"cwd": "...",
"findings": [
{ "level": "ERR" | "WARN" | "INFO", "name": "node", "ok": true|false, "message": "...", "fix": "..." }
]
}
副作用:写 ~/.imagi/env-check.json 缓存(与 SessionStart hook 后台刷新共用同一份)。
为什么不直接 npm view / which 一通:env-check.mjs 内部对每个命令带 3s 超时,避免 lark-cli 之类交互式命令卡死。统一走脚本能拿到一致的 JSON 结果。
2. 解析 JSON 决定动作
把 findings 按 level 分桶:
| level | 含义 | 行动 |
|---|
| ERR | 阻断性缺失(node 版本不够 / npm 全局 bin 不可写) | 告知用户 + 给 fix 命令 + 停止后续工作,等用户处理 |
| WARN | 影响功能但不致命(lark-cli 没装、figma-context 没初始化) | 一行简短提示 + 给 fix 命令;不阻断,继续主任务 |
| INFO | 仅提示(代理设置情况、pnpm 不需要等) | 不输出,除非用户特意问 |
3. 输出格式
全部通过:完全不提,直接进入用户的真实任务。
只有 WARN/INFO:用一段话总结:
环境检查:N 项 WARN(lark-cli 未装 / figma-context 未初始化 / ...)。先回答你的问题,遇到具体场景需要这些工具时再装。
有 ERR:
环境检查发现阻断项:
- [ERR] node 20.18 不满足 >= 20.19 -> brew upgrade node
- [ERR] npm 全局 bin 不可写 -> 改用 nvm 安装 node
修完再继续。
4. 不要做的事
- ❌ 不自动跑 fix 命令。所有安装命令交给用户决策(
npm i -g @larksuite/cli 这种命令带网络副作用,不能擅自跑)。
- ❌ 不反复调用本 skill。每个 session 一次足够。如果用户后续手动装了某个工具,让用户重开 session 触发 SessionStart hook 后台刷新即可。
- ❌ 不把 13 项全部输出给用户。用户只要看 ERR 和"有几项 WARN",详情按需展开。
- ❌ 不装"自动安装工具"逻辑。env-check 是探针,不是 installer。
5. 频率
- SessionStart hook 已在后台 detached 跑过一次,缓存写在
~/.imagi/env-check.json
- 主 Agent 调本 skill 时,优先读缓存(如果 < 5 分钟内的);只有缓存太旧或不存在才重跑脚本
- 同 session 内不重复检查