ank とほかの選択肢
ank はコードベースの上に載る、人の手で整えた層として最初のものではありません。それぞれの選択肢が得意なこと、ank がどこで違うか、その違いにどんな代償があるかを示します。
ひと目で
| 選択肢 | 得意なこと | ank の違い | ank が払う代償 |
|---|---|---|---|
| 検索(RAG) | 得意なこと誰も整理していないコーパスから、クエリに関連しそうなものを見つける。 | ank の違いパスに何が適用されるかに答えます。ランキングではなく集合の所属判定です。埋め込みも、インデックスサービスもありません。 | ank が払う代償誰かが制約とその scope を書いておく必要があります。 |
| LLM が管理する Wiki | 得意なこと元資料から派生したページで、失われてもモデルが再生成できる。 | ank の違いADR は出典のない選択を記録します。hash で固定され、承認時に署名され、書き換えられることはありません。 | ank が払う代償記録を再生成する手段はありません。決定は一度だけ書かれ、人が承認します。 |
| Open Knowledge Format | 得意なこと組織をまたぐ知識。利用側は、足りない項目を理由に文書を拒否しない。 | ank の違い同じ発想、同じ形で、YAML frontmatter 付きの markdown、サーバーなし。ただし ank は未知のフィールドを拒否します。 | ank が払う代償形式の崩れたファイルは、読まれずに拒否されます。 |
| プロセス系 skills のワークフロー | 得意なこと人へのヒアリングからマージ前のレビューまで、サイクル全体を覆う手厚い方法論。 | ank の違いank も方法論を提供しますが、測るのは結果です。ank done は verifier を実行し、どの方法論を使ったかは読みません。 | ank が払う代償誰も守らない方法論は frontmatter の 1 行にすぎません。作業が終わったかを語るのはツリーだけです。 |
検索との比較
RAG が答えるのは「このクエリに関連しそうなもの」、ank context src/auth/ が答えるのは「このパスに適用されるもの」です。前者は類似度で順位を付け、後者は集合の所属判定です。制約にとってはそこがすべてです。適用されるべきだったのに 7 位に沈んだルールは適用されず、しかも何も知らせてくれません。
埋め込みも、インデックスサービスも、コミットごとの再インデックスもありません。代償は本物です。誰かが制約とその scope を書いておく必要があります。ank は、誰も整理していないコーパスの検索を置き換えるものではありません。置き換えるのは、誰にも見つけられなかった Wiki のページです。
ank context src/auth/
CONSTRAINTS (1 active)
ADR-06d2 Opaque sessions rather than stateless JWT
TASKS (1)
TASK-820d [open] Migrate auth to opaque sessions
> ank claim TASK-820d to start
LLM が管理する Wiki との比較
Karpathy のパターンには 3 つの層(元資料、モデルが持つ Wiki、スキーマファイル)と 3 つの操作(ingest、query、lint)があります。ank も同じ形をしていて、違うのは真ん中の層が何であるかです。
Wiki のページは資料から派生したもので、失われても再生成できます。ADR は出典のない選択を記録します。誰かが JWT ではなく不透明なセッションを選んだなら、その記録が唯一のコピーで、どんな ingest でも取り戻せません。だから書き換えるのではなく hash で固定し、承認時に署名します。lint も、モデルが矛盾を探して読み直すのではなく機械的に行います。
Open Knowledge Format との比較
Google の Open Knowledge Format は、独立にたどり着いた最も近い親戚です。YAML frontmatter 付きの markdown、サーバーなし、SDK なし、パスが識別子、フォーマットそのものが契約。v0.2 の信頼シグナルは ank の proof と同じ発想で、ank はそのうち 2 つをそのまま採用しました。actor の規約と verified です。
1 つの軸だけが、双方とも意図的に分かれています。OKF は利用側に、足りない項目を理由に文書を拒否するなと言います。組織をまたぐ場面では、拒否された文書は失われた知識だからです。ank は未知のフィールドを拒否します。こっそり緩められてはならない基準にとって、受け入れられたが形式の崩れたファイルは、黙って効かなくなったルールだからです。
プロセス系 skills のワークフローとの比較
Matt Pocock の skills はいちばん充実した例です。20 以上のプロンプトがサイクル全体を覆います。spec が正確になるまで人に質問し、チケットに切り分け、テストファーストで実装を進め、マージ前にレビューする。skill が方法論そのもので、エージェントは作業中ずっとそれに従わされます。
ank も方法論を提供します。バイナリには 6 つの skills が入っていて、契約と、plan、drift、loop、tdd、diagnose を受け持つ 5 つの兄弟です。タスクは ank new --method tdd でそのどれかを指定でき、タスクが claim されると ank context がそれを示し、ank skills は指定の数と実際に使われた数を数えます。ただし、それを強制するコマンドはありません。ank done は方法論を読みません。宣言された verifier を自分で実行します。プロセスで評価されるエージェントはプロセスを装うことを覚え、ツリーで評価されるエージェントはツリーを変えるしかないからです。
動かすためのコスト
形容詞ではなく、2 つの数字で。
- 約 280 トークン
- 6 つの skills がセッションごとに使う量です。ハーネスが常に読み込んでおく名前と説明、つまり frontmatter の分で、契約が 38、兄弟がそれぞれ 41〜57、
cl100k_baseで数えた値です。本文は skill が呼ばれたときにだけ読まれます。 - 8000 文字
ank contextが読み手に渡す内容のデフォルトの上限です。
ank ではないもの
はっきり書いておきます。求めているものでなければ、すぐに候補から外せるように。
トラッカーではない。 サイクルも、見積もりも、ベロシティも、ロードマップもありません。
Wiki ではない。 入れるのは、エージェントにとって実行できること、または拘束力のあることだけです。
検索エンジンではない。 誰も整理していないコーパスの検索を置き換えはしません。
プロセスの監視役ではない。 方法論は教えますが、測るのは結果だけです。
セキュリティ境界ではない。 防ぐのはずれであって、攻撃者ではありません。
ank をインストール
コマンドは二つ。Linux、macOS、Windows に対応し、git 2.34 以降が必要です。
npm install -g @haksolot/ank
npx skills add haksolot/ank