ank 是做什么的?
任务与架构决策以文件形式存放在 .ank/ 目录中,与它们所约束的代码紧密关联。该工具提供两种模式:执行任务,以及塑造现有工作。context 命令是两种模式的起点。
循环: ank context -> ank claim <id> -> ank show <id> -> ank log "<msg>" -> ank done
非循环: ank new,ank find,ank release --reason "<r>"
规划: ank new adr,ank amend,ank review,ank graph,ank check
循环
ank context [path] — 始终第一个运行。当没有持有任务时,它会为你提供方位:当前范围的约束是什么,哪些任务可以被认领。当持有任务时,它会切换到执行模式,并提供完整的标准和约束。约束永远不会被截断;如果某些内容被截断,它会明确说明。
ank claim <id> — 认领任务,并通过哈希冻结其 done_criteria。如果任务已被持有、阻塞、在另一个分支上完成、没有可衡量的标准,或者你已在另一任务上持有有效认领,则命令会拒绝,并给出原因和下一步命令。
ank show <id> — 完整展示实体,包括前置元数据和正文,字节逐字节。context 提供标准和约束;正文则承载推理过程,是其他任何命令都无法替代的唯一内容。
ank log "<message>" — 记录你学到了什么、尝试了什么、拒绝了什么。同时续期认领。在发现新信息时记录,而不是在完成时记录。
ank done — 运行声明过的验证器,并记录实际运行的内容(已哈希)。切勿手动编辑 status: 字段,也切勿自行报告结果:一个自我评分的智能体可能出错。
非循环
ank new task --title "<t>" --scope "<glob>" — 范围是必填项;没有范围关联的实体不可见。发现的子任务应创建为带有 blocked_by 的新任务,而不是放宽标准。
ank find <query> — 搜索标题、范围和标准。ank find --status open 列出剩余待办事项,无需编造查询词。
ank release --reason "<why>" — 遇到阻碍或方法错误时,说明原因并将任务交回,而非让认领悄然失效。
规划
决定哪些任务应该存在,以什么顺序,在什么约束下。这是产生其他人所循环执行的工作的基础,因此一个糟糕的待办列表在后续环节造成的成本比单个任务要高得多。
ank new adr --title "<t>" --scope "<glob>" --constraint "<rule>" — 这是一个决策,而非一个任务。当遇到后续整个代码库都应遵守的规则时编写,而不是仅仅为了完成当前工作。初始状态为 proposed,在获得批准前对任何人都没有约束力。
ank amend <id> — 修改规划中实际会变更的字段:blocked_by、scope 和 --criteria。它通过显式添加和删除的方式来操作,从不接受替换列表,因此不会因遗忘而丢失任何内容。对于已被有效认领冻结的 done_criteria,命令不会触碰——在此情况下,应使用 release --reason。
ank review — 查看批准队列和整个代码库的健康状况:哪些提案正在等待批准,以及哪些范围已失效并应关闭。
ank graph — 以文本形式展示 blocked_by 依赖关系图,每个任务缩进显示在其阻塞项之下。从而清楚显示哪些是真正的根任务,而非仅在一个扁平列表中看似根任务的任务。
ank check — 检查机械不变量:解析、往返序列化、引用、冻结字段、孤立认领。退出码 8 表示存在问题,这些问题供人类阅读,而非用以压制。
accept 并非由你执行。 它是将提案中的 ADR 转变为具有约束力的决策的命令,且仅由人类执行:在默认分支上签名,且无法绕过。提出决策,然后说明其正在等待。了解你的权限边界是良好规划的一部分。
不可协商的规则
-
标准在认领时被冻结。 通过编辑标准来解封自己是徒劳的:哈希值存储在你无法触及的地方,
check命令会报告差异。如果标准有误,请使用release --reason并说明原因。 -
ADR 中的
constraint具有约束力,而非建议。阅读与你即将修改的文件相关的所有约束——这正是context命令为你提供的。 -
.ank/目录是不透明的,类似于.git/。 永远不要直接读取或写入该目录中的文件。ank show <id>提供完整实体,ank find列出内容,ank context绑定上下文——CLI 知晓预算、冻结状态以及谁持有认领;而文件本身并不包含这些信息。 -
一个智能体,一个工作树,一个身份。 标准情况是每个智能体使用一个工作树——可以是一个克隆或一个
git worktree——每个都在自己的分支上。ANK_AGENT环境变量命名会话,默认回退为<user>@<hostname>。因此,在一个工作树中的两个会话对于引用来说是同一个智能体:它们共享一个认领而不是仲裁,第二个会话将拒绝本应分配给它的工作。请在每个会话中设置此变量。多个智能体共享一个工作树虽然可以运行,但这是降级模式,而非设计初衷。 -
你所读取的内容永远不会被样式化。 仅当人类在终端中时才输出颜色,绝不会通过管道、文件或
--json输出。因此,传递给智能体的字节是纯文本:无需配置任何内容,也没有可偏爱的第二种格式。
退出码具有特定含义:4 表示不可用,6 表示冻结字段不一致,8 表示存在发现问题,9 表示环境问题。错误信息始终准确指出应执行的下一步命令。
超出本文档范围的标志可通过 ank help 查看,按需加载。
安装
npx skills add haksolot/ank
该技能介绍了如何使用 ank;它并不安装二进制文件。发布版包含适用于 Linux、macOS 和 Windows 的二进制文件。