Nika 是一个「把意图写成代码」的 AI 工作流工具,核心思路是把用户反复用到的 AI 工作变成一个保存在本地的、可读的 .nika 文件。它的整体形态是:一个文件、四种动词、一个 Rust 二进制程序,本地优先,可使用任意模型,采用 AGPL-3.0 许可。
【用途】 Nika 用来把重复性的 AI 工作固化下来。用户可以像「每周一从我的会议记录里提取行动项」这样用平实语言说出任务,Nika 会把它写成一个可读的 .nika 工作流文件。相比聊天窗口,文件可以保留、阅读、检查、重复运行,并像项目中的其他文件一样被审查和版本管理。
【主要能力】
- 生成与保存工作流:用自然语言描述任务后,Nika 提议一个 .nika 文件,展示它将要做什么、可以触碰哪些资源以及检查结果。在用户明确输入 yes 之前不会写入,也不会运行。
- 运行前检查(nika check):读取文件,报告将执行的操作、可能访问的范围以及预估成本,不调用模型、不花钱。检查可以捕获错误并给出修复建议。
- 成本控制:check 会根据模型目录价格和每步声明的输出上限估算成本。设置低于该上限的预算时,运行会拒绝启动,不调用模型也不产生费用。价格是目录估算值,不是账单。
- 人工审批:步骤可以等待人工确认。在终端会询问;在 CI 等无人应答的场景会安全暂停(退出码 4),并打印可恢复运行的那一行命令。
- 可验证记录:每次运行都会留下哈希链记录,nika trace verify 可以回读验证;即使只有一个字节改变,它也会指出链断裂所在的行。这验证的是记录本身,不是 AI 判断的正确性。
- 本地与云端模型:支持从环境变量读取提供商密钥,也支持本地引擎(Ollama、llama.cpp、LM Studio、vLLM 等),nika catalog 可列出可用项。提供商负责计量和收费,Nika 的成本数字只是目录估算。
- 并行执行:互不依赖的步骤会并行运行,检查会在运行前规划执行波次。
- 失败处理:步骤可以声明回退方案,运行仍会结束,输出会标记为过期,记录会保留失败信息。
- 编译与编辑:nika compile 可列出骨架、预览、通过可重复的 --answer 回答稳定问题;支持保守的常量编辑,未解决的意图会保持不完整而不生成替代工作流。--authoring-model 可显式启用有边界的模型辅助编写。
【使用方式】 安装:Homebrew 使用 brew install supernovae-st/tap/nika;npm 使用 npm install @supernovae-st/nika(nika 命令位于 node_modules/.bin,npm 包可能落后于最新发布,可用 nika --version 核对);也可从最新发布下载归档文件,每个发布附带可验证的 SLSA 溯源;Nix 仓库提供 flake(构建默认分支,可能领先于最新发布);Windows 需使用 WSL2,目前不提供原生二进制。 基本流程:Nika 只在启动它的文件夹内工作。在会话提示符下描述任务,Nika 提出 .nika 文件并显示检查结果;输入 yes 保存,然后运行。out/paid.csv 等文件会得到结果,/proof 显示运行记录证明的内容。会话中 /show 打印提议的精确字节,/meaning 逐条映射请求,no 丢弃,/intelligence 更改模型选择,/restore 用于恢复,Ctrl+T 切换全屏,nika --plain 输出纯文本。 直接使用文件:工作流就是普通文件,命令行可编译、检查、运行和验证。示例 hello 始终使用 mock/echo 回声模型,证明工作流能跑,不证明模型回答了问题。每次运行的 trace 记录在 .nika/traces/ 下,创建文件时该目录会被加入 .gitignore。
【适用场景】 适合需要重复执行、需要可审查文件、需要运行前了解成本与访问范围、需要运行后留痕验证的 AI 工作流,例如从会议记录提取行动项、处理发票并汇总、定期汇总等。也可与编码助手配合:由助手写文件,Nika 负责检查。
【限制】 Nika 处于 pre-1.0 阶段。会话资格说明基于六个合成任务、一个 macOS 安装的特定开发构建,不是发布二进制,也不构成通用可靠性声明。部分请求目前无法表达,Nika 会说明受阻原因且不写文件。干净的检查只描述文件结构与边界,不证明模型输出正确。公开发布不含知识快照,无快照时编写使用内置在二进制中的语言卡片。README 跟随源码树,较旧的已安装版本可能缺少其中描述的功能。Graph 编辑尚未由该 CLI 实现。
【安全提醒】 共享工作流时不要共享凭据或私有数据;检查文件路径和工具访问权限;不要将密钥纳入版本控制。运行日志可能包含工作流处理的数据和输出,.nika/traces/ 是静态数据面,除非有意公开,应从 Git 中排除,并按源数据的敏感级别对待。