Community寫作與編輯github.com

ank

ank 是一個協調工具,將任務與架構決策存放在你的儲存庫中的 .ank/ 目錄下,任何程式碼代理都能透過單一 CLI 呼叫。

ank 是什麼?

ank 是一個專為 AI 代理設計的協調工具,能將任務與架構決策記錄(ADR)以檔案形式存放在專案中的 `.ank/` 目錄,這些檔案會與其約束的程式碼緊密結合。它支援兩種主要操作模式:執行任務與規劃任務,且皆從 `context` 命令開始。主要功能包括工作生命周期管理(claim、show、log、done)、離線任務查詢(find、new、release),以及規劃決策(new adr、amend、review、graph、check)。ank 透過不變性(例如完成標準在 claim 時凍結)與權威分離(ADR 必須由人類簽署接受)來確保協調的完整性。它支援 macOS、Linux 與 Windows,並可透過 `npx skills add haksolot/ank` 安裝。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add haksolot/ank

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

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] — 總是第一個執行。若無持有 claim,它會引導你: 此範圍內有何限制、哪些任務可領取。若持有 claim,它會切換至執行模式, 並完整呈現判定標準與所有約束。約束絕不會被截斷;如有省略,它會明確指出。

ank claim <id> — 領取任務並根據 hash 凍結其 done_criteria。 當任務已被持有、封鎖、在其他分支完成、沒有可衡量的標準,或你已在其他任務上持有有效 claim 時, 它會拒絕並附上原因與下一步指令。

ank show <id> — 顯示完整實體,包括 frontmatter 與內文,一字不漏。 context 提供判定標準與約束;而內文才是推理所在,也是其他指令無法提供的唯一內容。

ank log "<message>" — 記錄你學到的事、嘗試過的方法、放棄的方案。 這會更新 claim 的有效期限。當你發現新事物時就記錄,而不是等到完成時。

ank done — 執行宣告的驗證器,並記錄實際運行的內容與其 hash。 請勿手動編輯 status: 欄位,也別自行回報結果:自我評分的代理可能產生錯誤結果。

離線

ank new task --title "<t>" --scope "<glob>" — scope 為必填; 未附加於任何範圍的實體無法被看見。發現的子任務應該建立新任務並加上 blocked_by, 而非放寬既有標準。

ank find <query> — 搜尋標題、範圍與標準。ank find --status open 列出所有未完成的任務, 無需構思查詢條件。

ank release --reason "<why>" — 卡關了,或方法錯了。說出原因並歸還任務, 而不是讓 claim 在無聲中過期。

規劃

決定哪些任務該存在、順序為何、在哪些約束之下。 這會產生其他所有人將在其上循環的工作,因此一個設計不良的待辦清單, 所耗費的成本遠超過任何單一任務。

ank new adr --title "<t>" --scope "<glob>" --constraint "<rule>" — 一個決策,而非任務。 當你遇到日後整個程式碼庫都應遵守的事項時就寫下,而不是那些你只是必須立即完成的事。 它會以 proposed 狀態落地,在接受之前不約束任何人。

ank amend <id> — 規劃中實際上會更改的欄位:blocked_by、scope 與 --criteria。 它會明確地新增與移除,絕不接受替換清單,因此不會因遺忘而刪除任何內容。 它不會觸及已被有效 claim 凍結的 done_criteria — 在 claim 下,那屬於 release --reason。

ank review — 檢視接受佇列與整個程式碼庫的健康狀態:哪些是提議中且等待中的, 哪些範圍已過期且需要關閉。

ank graph — 以文字呈現 blocked_by 的有向無環圖(DAG),每個項目縮排在它所封鎖的項目之下。 顯示哪些是真正的根節點,而哪些在扁平清單中看似根節點。

ank check — 機械性不變性檢查:解析、往返一致性、參照、凍結欄位、孤立 claim。 退出碼 8 代表有發現,而這些發現是供人閱讀的,不是用來壓制的。

accept 不是你該執行的指令。 它負責將提議中的 ADR 轉為具約束力的狀態, 且這是人類行為:必須簽署、在預設分支上執行、且無法繞過。提出決策,然後說明它在等待批准。 了解自己的權限邊界是良好規劃的一部分。

不可協商的規則

  • 判定標準在 claim 時凍結。 編輯它以解鎖自己並不會真的解鎖:hash 存在你無法觸及的地方, 而 check 會回報差異。如果標準有誤,請用 release --reason 並說明原因。

  • ADR 中的 constraint 具有約束力,而非建議。請閱讀涵蓋你即將觸碰檔案的約束, 這就是 context 交給你的內容。

  • .ank/ 目錄是 opaque(不透明)的,如同 .git/。 請勿直接讀取或寫入那些檔案。 ank show <id> 顯示完整實體,ank find 列出項目,ank context 建立關聯 — CLI 了解紀錄預算、凍結狀態與誰持有哪些 claim;檔案本身不知道這些。

  • 一個代理、一個工作目錄、一個身份。 一般情況是每個代理一個工作目錄 — 一個 clone 或一個 git worktree — 各自位於自己的分支。ANK_AGENT 命名該工作階段, 若未設定則回退為 <user>@<hostname>,因此同一個目錄中的兩個工作階段, 對參照而言是同一個代理:它們會共享 claim 而非協調,結果第二個工作階段會拒絕它本該得到的工作。 請於每個工作階段設定此變數。多個代理在同一個目錄中運作是可行的, 但這屬於降級模式,而非設計目標。

  • 你讀取的內容永不包含樣式。 顏色僅在人類使用終端機時輸出, 絕不會在 pipe、檔案或 --json 中出現,因此你接收到的位元組是純文字: 無需任何設定,也沒有第二種輸出格式需要偏好。

退出碼具有意義:4 表示不可用,6 表示凍結欄位不一致,8 表示發現問題,9 表示環境問題。 錯誤訊息總會明確指出下一個應執行的指令。

以上未提及的旗標請參閱 ank help,需要時再載入。

安裝

npx skills add haksolot/ank

此 skill 說明如何使用 ank;它不會安裝二進位檔。 每個發行版都附有適用於 Linux、macOS 和 Windows 的二進位檔。

相關技能