AI が動かす前提で CLI を設計する

シリーズ・第 4 回(最終回) — 「個人で静的サイト生成ツールを作って配るまで」(全 4 回)。前回はbrew と scoop で配る話でした。一覧は シリーズの記事一覧 から。今回のテーマは「AI が動かす前提の CLI 設計」です。

crofty は端末から打つ素朴な CLI です。ただ前提が少し違っていて、「人が入れて最初の設定をしたら、あとはその人の AI(エージェント)が回す」使い方を想定しています。

狙いははっきりしています。CLI が「何ができて、何をすればいいか」を自分で語れば、AI は使い方を探る往復に頭を使わず、価値のある思考にコストを割けます。その「手前で積もる出費」は、たとえばこういうものです。

エージェントが本題の思考の手前で払うオーバーヘッドと、crofty で省ける窓口の対応図。使えるコマンド・ツールを探す(shell・CLI・内蔵ツールの組合せ)は crofty agent が全体像を一枚で返す。いまの状態を調べるは crofty config が現在地を返す。出力を読み解く・つなぎのスクリプトを書くは --json と安定した出力で要らなくなる。次に何をするか組み立てるは next が次の一手を出す。ユーザーへの質問・確認・承認は、自己記述的で手順が決まっているため往復が減る。どれも本題ではない出費を、出力を窓口にして省く、という図
本題の手前で積もるオーバーヘッドと、それを省ける crofty の窓口

操作する相手に AI を含めると、設計はどう変わるか。最終回はその話です。

画面でなく、出力を窓口にする

人は画面をクリックもできるし、レンダリングされた文書も読めます。エージェントにできるのは、基本コマンドを実行して出力を読むことだけ。両方が確実に使える共通の道は「コマンドを実行して、その出力を読む」ことです。

だから crofty は GUI や管理画面を作らず、出力テキストを人にもエージェントにも読める窓口にしました。柱は次の 3 つです。

① 聞けば分かる ― まず crofty agent

エージェントが最初に知りたいのは「どんなコマンドがあって、どう使うのか」。それを一枚で返すのが crofty agent です。コマンドと引数・使う順番・状態を読む口まで、まとめて出します。AI はこれを最初に読めば、あとは自分で動き出せる。crofty の設計でいちばん大事な一手です。

目的別の窓口もあります。crofty features は「何ができて、どう有効にするか」を返します。

$ crofty features
crofty features — what you can do, and how to turn each thing on.

Out of the box (works in a fresh project):
    rss        an Atom/RSS feed and a 'Follow by RSS' link
               → automatic — nothing to set
    share      reader share buttons, and `crofty share` …
               → automatic on posts; `crofty share <path>` for authors

Restyle (owned, contract-safe):
    looks      ready-made colour/type presets (quiet-paper, terminal, …)
               → crofty theme set <name>

Opt-in (off by default — one config key or a render hook):
    analytics  Cloudflare / GA4 / GTM / AdSense (no trackers by default)
               → crofty add analytics

各行に機能と有効化の方法がセットで出ます。crofty config なら「今どうなっているか」。どれも、ドキュメントを探さずに動き出すための窓口です。

② 毎回「次の一手」を出す

コマンドは、結果だけでなく「次に何をするか」も出力に書きます。ビルドの後はこうです。

$ crofty build
✓ built → ./dist
next:
  crofty preview     # look at it locally first (no account)
  crofty deploy      # put it online (connects a free Cloudflare account)

next: があるので、手順を覚えていなくても、出力をたどれば次に進めます。人には親切なヒント、エージェントには行動の手がかり。共有用の出力に --json を添えるなど、プログラムから読める口も用意しています。

③ 勝手に書き換えず、見せる

crofty は、自分が所有するファイルは書きますが、ユーザーのもの ― たとえば hugo.yaml ― は勝手に書き換えません。代わりに「ここをこう変えてください」と案内します。

これは人にもエージェントにも効きます。何が起きるか・何を変えるべきかが出力に見えるので、ブラックボックスになりません。勝手に状態を変えないツールは、エージェントに任せても暴走しにくい、ということでもあります。

まとめ

操作する相手に AI を含めると、頼れるのは画面操作ではなく「読めて・聞けて・次が分かるテキスト」です。GUI を作らない代わりに、出力そのものを最良の窓口にする——その入口が crofty agent です。

出力がここまで揃っていれば、AI は探り合いに頭を使わず、価値のある思考に集中できます。CLI を作り込む値打ちは、最後はそこにあります。

これで全 4 回は完結です。所有して公開する薄いパイプラインを作り、多言語を設計し、brew と scoop で配り、人と AI の両方が動かせるように整えてきました。小さなツールを作って配る誰かの、どこか一場面で役に立てば、それでじゅうぶんです。


← 前の記事:自作 CLI を brew と scoop で配る | シリーズはこれで完結です。

☕ チップを送る