@fantasticit/sumi

中文文档
0.14.5发布于 2026/11/13TypeScriptES Module近 30 天下载 5637

sumi 命令行

原始使用文档
文档目录6 节
  1. 命令
  2. AI 工具适配
  3. hook
  4. 指令主题
  5. 离线打包
  6. 导出

@sumi/cli(发布名 @fantasticit/sumi)

本页说明当前仓库的 0.9.2 CLI 源码;本仓库 control 使用的已发布 0.10.3 依赖入口见根目录 README。

sumi 命令的入口:解析参数、调用内核运行流程、分发插件注册的命令、为 AI 工具生成适配(skills、commands 与 hook),并提供 init、doctor、context 等内置命令。五个插件包随 CLI 一起安装,内核从 CLI 自身的安装位置解析它们。

命令

项目根由当前目录向上查找含 control/config.yaml(或旧的 sumi.config.yaml)的目录确定。受管项目统一以 node ./control/bin/sumi.cjs 作为命令前缀;下表为省略此前缀后的子命令。首次接入使用 npm exec --offline --package <tgz> -- sumi init。大多数内置命令支持 --json 输出结构化结果。

命令说明
sumi --version输出 CLI 版本
sumi run <flow>运行流程:--tier <档位>、--all、--base <ref>、--label k=v(可重复);--commit <oid> [--base <oid>] 为固定提交模式,供插件在独立检出中验收指定提交。输出简报,退出码即结论
sumi instructions <主题> [--json]输出某个主题的操作指令
sumi fix <step-id>以当前工作树最近一次包含该步骤的运行范围执行插件声明的 fix;运行后内容又变化时拒绝
sumi update [--check]重新生成 AI 工具适配与 hook;--check 只报告漂移,有漂移时退出码 1
sumi hint会话结束提示:最近一次 check 运行未通过时输出 systemMessage,从不阻止结束
sumi doctor诊断:配置、版本、配置位置、各流程能否加载、适配漂移、工具能力缺口;hook 能否被加载(Codex 信任记录、本工作区 hook 配置是否落后上游、worktree 是否装了 Sumi);外来接线只报告
init [目录]--tools claude,codex,cursor(别名 --agents)。空目录或不存在的目录:生成模板项目并 git init;已有仓库:写入骨架、去掉 needs 不满足的步骤、生成适配与 hook、全量运行 check、执行插件的 afterInit
sumi add plugin <name>在 control/plugins/<name>/ 生成 plugin.yaml、index.mjs、index.test.mjs(id 为 local/<name>),并把 control/plugins 加进配置的 plugins
sumi context <路径...>写代码前查约束:check 流程中命中这些路径的检查、插件约束查询命令给出的条目、去重后的规则位置。默认摘要最多 6,000 字符,--full 输出原文,--json 保留完整结构
sumi task "<意图>" / sumi task --select <id,...>先取得有界任务目录,由宿主代理选择相关 ID,再按 ID 取得有界摘要;--full 强制原文。Sumi 不做关键词分类。
sumi task --eval <golden.jsonl>对冻结样本中宿主代理独立给出的 selected 与 expected ID 集合离线计算命中率、精确率和召回率,不调用模型自评。两者均为空的样本算命中;精确率或召回率分母为零时记 0。
sumi visualize [--port N]启动仅监听 127.0.0.1 的 HTML 服务,按会话查看送达了什么上下文、为什么送、为什么没送,并从宿主会话记录回读确认;也可查看提示词、宿主 Read 工具返回的项目文件、Sumi 命令与文档读取;Shell、MCP 和自动加载的读取不在当前观测范围内。事件持续保存在被忽略的 .sumi/visualize/events.jsonl,即使页面未启动;按 Ctrl+C 只关闭页面服务。
sumi vendor <sumi-cli-版本.tgz>校验离线安装包的完整构建身份,放进 control/vendor/(删除旧版本,必要时为 .gitignore 追加例外),在配置中写入 install、精确 sumi 版本与 sumiBuild,然后运行 sumi update
sumi vendor --dependency [包名]使用已作为 devDependency 安装的 CLI(缺省 @fantasticit/sumi):校验 node_modules 中的构建身份,清单改为记录包名、版本与身份,删除 control/vendor/ 下的离线安装包,然后运行 sumi update

未匹配内置命令时,CLI 按项目注册表分发插件命令:以仓库根为工作目录执行其 argv 加剩余参数,环境中带 SUMI_ROOT 与 SUMI_BIN,原样返回退出码。插件命令不能与内置命令重名,只在已接入的项目中可用。不带参数或命令未知时列出可用命令,退出码 3;内核错误输出 内核错误:…,退出码 3。

会写文件的内置命令(init、vendor、update、add、fix)遇到 --help/-h 只打印用法、退出码 0;遇到未知参数(含 -x 这类短参数)以内核错误结束、退出码 3;两种情况都不执行写入。插件包中会写文件的命令(adopt、baseline、promote、submit、pr-report)用插件 SDK 的 guardCommandArgs 做同样的检查,未知参数沿用各命令原有的用法错误退出码。

AI 工具适配

AI 工具只加载会话启动目录的 hook。插件声明的写入前与编辑后 hook 运行时,CLI 会先看写入目标属于哪个项目:目标在另一个已接入 Sumi 的项目或 worktree 中,就用同一条命令和同一份负载交给那个项目安装的 Sumi 判定(任一项目拒绝即拒绝写入);那个项目没有安装 Sumi 时拒绝写入并提示安装依赖;目标不属于任何项目(如临时目录)时不处理。

sumi update(以及 init、vendor)按项目配置的 agents 生成适配;未配置时只启用 claude。每个生成文件带 generated-by: sumi update 标记与内容摘要,--check 与 doctor 据此报告手改、缺失和已无对应主题的旧文件;不带标记的项目文件不会被视为生成物。

位置内容
.agents/skills/sumi-<主题>/SKILL.mdskill 完整正文(任一工具启用时生成)
.agents/commands/sumi/<主题>.mdcommand 完整正文
.claude/skills/sumi-<主题>/SKILL.md、.claude/commands/sumi/<主题>.md引用桩:只有一句指向 .agents 对应文件的指令
.cursor/rules/sumi-<主题>.mdc、.cursor/commands/sumi-<主题>.md引用桩(rule 另附 @file <目标>,alwaysApply: false)
Codex不生成桩,直接读取 .agents

所有主题都生成 command;只有 skill 主题生成 skill。

hook

工具写入位置条目
Claude.claude/settings.jsonSessionStart、SubagentStart → hook session-start、hook subagent-start 主动注入;PreToolUse(Bash|Edit|Write|MultiEdit|NotebookEdit)→ 插件的 beforeTool;PostToolUse(编辑与读取工具)→ hook after-tool;UserPromptSubmit → hook user-prompt;Stop → hook stop 汇总检查与提示
Codex.codex/hooks.jsonSessionStart、SubagentStart → 同上;PreToolUse(^(Bash|apply_patch|Edit|Write)$)、PostToolUse(编辑与读取工具)、UserPromptSubmit → 单入口;Stop → hook stop
Cursor.cursor/hooks.jsonsessionStart → 注入规则与任务目录;preToolUse → 单入口守卫;postToolUse → 编辑后上下文;stop → 单入口停止检查

AI 工具以会话当前目录执行 hook,会话可能位于项目子目录,因此命令不依赖当前目录定位 launcher:

工具命令
Claudenode "$CLAUDE_PROJECT_DIR/control/bin/sumi.cjs" <命令>(sh 执行,Windows 上为 Git Bash)
Codexnode "$(git rev-parse --show-toplevel)/control/bin/sumi.cjs" <命令>;Windows(cmd.exe)用 commandWindows:for /f "delims=" %r in ('git rev-parse --show-toplevel') do @node "%r/control/bin/sumi.cjs" <命令>
Cursornode ./control/bin/sumi.cjs <命令>(项目 hook 固定从项目根执行)

前置拦截只有退出码 2 会阻断,因此前置拦截条目追加 || exit 2:找不到 launcher、runtime 无效或命令崩溃时同样拒绝,命令的标准错误即拒绝说明。编辑后与停止检查条目的退出码原样返回。

更新时只增删 sumi 的条目(命令以上述 launcher 写法、旧版本的 node ./control/bin/sumi.cjs 、sumi 开头),其他条目保留;旧写法的条目被 --check 与 doctor 报告为漂移,由 sumi update 替换。

git hook 固定包含 pre-commit → node ./control/bin/sumi.cjs run check,其余由插件 hooks.git 声明(同一 hook 不能被重复声明)。写入位置取决于 hook 管理器:

管理器识别方式写入
原生未设置 core.hooksPath、没有 lefthook 配置git hooks 目录下由 sumi 独占的脚本
huskycore.hooksPath 指向 .husky.husky/<hook> 中的 sumi 区块,区块之外的内容原样保留
其他其他 hooksPath 或存在 lefthook 配置不写入,doctor 提示手动调用对应的 sumi 命令

hook 只调用项目 launcher;launcher、runtime 清单或 vendored 安装包缺失/无效时拒绝,并提示重新用目标版本安装包执行临时 vendor。依赖方式下已安装的依赖与清单身份不一致(例如刚 pnpm add -D @fantasticit/sumi@<新版本>)时,launcher 只放行 vendor --dependency,用已安装的依赖重新锁定;其他命令拒绝,提示重新安装依赖或运行 vendor --dependency。PATH 中是否存在全局 sumi 不影响项目执行。

指令主题

主题来源形态内容
developCLI 内置skill + command先 sumi task 选择任务范围,再 sumi context 查路径约束、实现并运行 sumi run check;列出项目的区域、档位、流程与其他主题
checkCLI 内置command运行检查流程并按简报中的 next 处理
doctorCLI 内置command运行 sumi doctor 并修复
其他插件包按指令文件插件声明的 instructions(主题名 → Markdown 文件)

插件指令文件的 frontmatter 中 description: 作为说明,skill: false 表示只生成 command。主题重名或文件不存在时报错。

离线打包

脚本说明
scripts/pack.mjs(pnpm pack:cli)构建全部包与单文件 launcher,pnpm deploy 出扁平的 node_modules,改写清单(发布名 @fantasticit/sumi)并产出 dist/sumi-cli-<版本>.tgz,可直接 npm publish。安装包只用于临时 init/vendor 与项目 vendoring;项目工具(ESLint、Prettier、TypeScript 等)不打包
scripts/verify-pack.mjs在隔离 PATH、无全局 Sumi 的环境中临时执行本地 tgz,验证 init、vendor、update、doctor 与项目 launcher 的 run check;runtime 准备过程保持离线

本仓库通过项目插件 repo/pack(control/plugins/pack/)在 full 档运行 verify-pack.mjs。

导出

包入口导出 main(argv, io)、parseArgs、findRoot、registerCommand、requireRoot、emit,以及适配相关的 ADAPTERS、sync、checkDrift、declaredHooks、hookManager、capabilityGaps、enabledAgents 等。导入入口时会注册全部内置命令。

版本与发布记录

@fantasticit/sumi 共发布 30 个版本,首次发布于 2026/10/15;过去 12 个月发布了 30 个版本。

版本发布日期距今
0.14.5latest2026/11/131 天前
0.14.42026/11/113 天前
0.14.32026/11/113 天前
0.14.22026/11/104 天前
0.14.12026/11/104 天前
0.14.02026/11/094 天前

关于 @fantasticit/sumi 的常见问题

@fantasticit/sumi 是什么?

sumi 命令行

如何安装 @fantasticit/sumi?

在项目目录运行 npm install @fantasticit/sumi,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 sumi,可以用 npx sumi 直接运行。

@fantasticit/sumi 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fantasticit/sumi 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fantasticit/sumi 可以商用吗?

@fantasticit/sumi 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@fantasticit/sumi 的下载量有多少?

根据 npm 官方下载统计,@fantasticit/sumi 在 2026/10/15 – 2026/11/13 这 30 天内被下载 5,637 次,日均约 188 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fantasticit/sumi 还在维护吗?

最新版本 0.14.5 发布于 2026/11/13(1 天前);至今共发布 30 个版本,其中过去 12 个月发布了 30 个;首次发布于 2026/10/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。