メインコンテンツまでスキップ

AI エージェントとの協働

Ninka は特定のモデルやベンダーを前提としません。お使いの AI コーディングアシスタントをそのまま使えます。エージェントが 手形 (Tegata) を書き、コンパイラが検査し、あなたが差分を承認します。

1. エージェントのルールを生成する

npx ninka init

init は、エージェントが認可に触れるときに従う AGENTS.md を書き出します(Ninka のセクションがない AGENTS.md が既にあれば追記されます)。

  1. 認可はインラインの if コードではなく手形として表現する。
  2. 手形を変更したら npx ninka compile を実行する。
  3. アプリは lib/authz.tscheck() だけを呼ぶ。
  4. 解釈の仮定を audit.ambiguities に報告する。
  5. 新しい語を使う前に authz/vocabulary.json に語彙を宣言する。
  6. ログ出力する属性を audit: true で印付ける。

2. エージェントが仮定を記録する

要件が曖昧なとき、エージェントはその判断を、コンパイルされない audit ブロックに書き残します。レビューで浮かび上がります。

"audit": {
"source_text": "Members can edit their own documents.",
"ambiguities": [
{
"code": "assumed_interpretation",
"message": "\"their own\" is relationship(subject.user_id = resource.owner_id). Co-owned documents assumed not to exist.",
"related_rules": ["allow-member-access-own-document"]
}
]
}

3. 関所がエージェントを正す

npx ninka compile関所 (Sekisho) を実行し、意味的に危険なポリシーを、修正方法が分かる 1 行のエラーで却下します。エージェントは自分の手形を自分で直して再コンパイルします。多くの場合あなたの介入は要りません。

error: rule "allow-member-access-own-document" is unreachable — deny rule
"deny-locked-document" subsumes it. Narrow the deny or remove the allow.

4. あなたが差分を承認する

レビューするのは手形の差分と曖昧さメモだけです。承認はフィンガープリント(tegata_hash)に紐づきます。同じ手形を同じバージョンの ninka-authz でコンパイルすれば常にバイト単位で同一の出力になるため、フィンガープリントの承認は実行されるコードの承認そのものです。

関連項目