ターミナルに 3 行打って、3 秒待ったら、この絵が手元のディスクに落ちてきた。

GUI を 1 回も開いていない。Midjourney に行ってもいないし、ComfyUI のノードグラフを組んでもいないし、ChatGPT のチャット欄に貼り付けてダウンロードボタンを探してもいない。KOTONIA_API_KEY を export して、kotonia-cli を起動して、「可愛い美少女の画像を作って」と日本語で言っただけだ。
ここに辿り着くまでに 1 日かかった。自前の CLI agent をゼロから書いて、自前の /api/v1 の画像生成エンドポイントに結線して、bash 経由で agent に curl を叩かせて、生成された PNG を ./bishoujo.png に保存させた。コミット数 8 本、ユニットテスト 31 本、Rust の行数およそ 2,000 行。
このセットアップが動き出した瞬間に「これは何かのカテゴリ空白を埋めにいってる」という確信が来た。その正体を整理したい、というのがこの記事だ。
1. カテゴリ空白 — code agent と image gen の交差点に誰もいない
2026 年 6 月時点で、開発者向けの agent 系プロダクトを並べると 3 つのクラスタに分かれる。
| クラスタ | 代表プロダクト | できること | できないこと |
|---|---|---|---|
| Code agent (CLI / IDE) | Claude Code、OpenAI Codex CLI、Cursor、Aider | コードを読む / 書く / 走らせる、shell ツール、git 操作 | 画像 / 音声 / 動画の生成。サムネ作成。絵コンテ。 |
| Image / video gen (GUI) | Midjourney、Stable Diffusion WebUI、ComfyUI、Runway | 視覚成果物の生成。コントロール豊富、品質高い | shell も git もコードも触れない。会話エージェントではない |
| Chat with image (App) | ChatGPT desktop、Claude desktop、Gemini app | チャット会話 + 画像生成。GUI 中心 | CLI じゃない、ローカル shell に手が出ない、ファイル直接操作できない |
GPT のオプションのうち macOS 向け Codex なんかは GUI で画像生成も提供してきていて、モデルの絶対品質は (たぶん向こうのほうが) 上だ。だが 「ターミナルで完結 × デフォルトで画像/音声/動画生成 × shell ツールに無制限アクセス」 という組み合わせを 1 個のバイナリでパッケージしているものは、寡聞にして聞いたことがない。
つまり、ここがカテゴリ空白だ。
2. ベン図の真ん中 ─ kotonia-cli が落ちる場所
kotonia-cli が提供している機能を雑に並べる。
- bash 1 ツール、agent が任意のシェルコマンドを発行できる
- 承認モード 3 種 (
all/allowlist/auto) で安全マージン可変 - git worktree デフォルトでサンドボックス、
--in-placeで直接編集 - 双方向 REPL、会話履歴は turn 間で永続
- セッション JSONL を
~/.kotonia/sessions/<id>.jsonlに書き出し、--resume <id>で完全復元 - マルチ provider (V4-Flash local / Gemma 4 26B local / DeepSeek API / 順次拡張)
KOTONIA_API_KEYが export されていれば、自前/api/v1の画像・音声・動画生成エンドポイントを system prompt に自動公開
ここの最後の項目が、上の 3 クラスタ全部から外れる立ち位置を作る。
Code agent としては bash と git に全アクセスして cargo / pytest / npm を回せる。だが Code agent が普通持っていない「画像 / 音声 / 動画生成」のドアもデフォルトで開いている。GUI image gen のような「ノードグラフを組む」コストはなく、自然言語の指示が agent によって curl + JSON body に翻訳される。
追記: 「Claude Code がなぜ画像生成しないのか」を考えると、これは Anthropic にとっては合理だ。彼らの推論コストは GPU 中心で、画像生成サービスを bundling すると価格モデルが歪む。彼らがやらない領域だからこそ、1 人開発の側に空白が落ちてくる。
3. 言語優位 vs 視覚優位 ─ ツールの認知タックスの話
既存の動画編集ツール、画像編集ツール、デザインツールは、当たり前だけど ビジュアルシンカー向けに最適化されている。タイムラインを掴んで、レイヤーを重ねて、ベジェ曲線を引いて、マウスで形を弄る。これは視覚で考える人間にとっては自然なインタラクションだ。
ところが世の中には 「言語で考える」プレイヤー が一定数いる。書く、説明する、議論する、設計する、コーディングする。インプットもアウトプットも基本テキスト。エンジニア、ライター、PM、研究者、編集者、起業家、その他多くの人がここに分類されると思う。
そういう人間が、必要に駆られて視覚成果物を作らないといけない瞬間がある。記事を書いたらサムネが要る。動画生成のために絵コンテを描かないといけない。プレゼン資料に図を入れたい。サービスのロゴを試作したい。
このとき言語優位プレイヤーに何が待っているか。
Adobe Premiere の三層タイムラインを目で追って、トラック数を増やして、フェードイン用のキーフレームを 2 本打って、それを Bezier curve で微調整して、というあのモード。あるいは Unreal Engine の Blueprint や Unity の Visual Scripting のような、線とノードでロジックを組み上げる UI。視覚思考者には自然かもしれないが、言語思考者にとっては「気持ち悪いインターフェースに脳を譲り渡す拷問」みたいな時間だ。
何が起きているかというと、モード切り替え税 がかかっている。コードを書くときの言語モードから、ツールを使うときの視覚モードに、強制的に切り替えさせられる。1 つのタスクの中で何度も切り替わる。脳のリソースが本来の創造ではなく「ツールに合わせること」に溶けていく。
今回作った kotonia-cli は、その税金をゼロに近づける。
- 入力は自然言語: 「猫じゃなくて美少女にして、もう一回」「30 秒の縦長ショートにして、フェードイン入れて、字幕は『試したけどダメだった』」
- 出力は workspace に落ちるファイル:
./bishoujo.png、./short.mp4、./narration.wav - モード切り替えなし: ターミナルから出ない、GUI を開かない、ブラウザにも行かない
ローカル shell に居ながら、言語で発想し、言語で指示し、出来上がりだけが視覚として手元に届く。これは創作者の認知負荷を構造的に下げる。社会的にも意義がでかいと思う。視覚モードに切り替えられず諦めていた人 (たとえば仕様書に図を入れたかった研究者、サムネが要るブロガー、メールに音声添付したかった非エンジニア) が、テキストだけで視覚物を生み出せるようになる。
4. ffmpeg ネイティブの multiplier 効果
画像生成を 1 ツール乗せただけなら他社も追随できる。kotonia-cli の真の差別化は、agent が shell の中で ffmpeg を当たり前にドライブできる ことだ。
たとえば「30 秒の縦長動画にして、頭にフェードイン、字幕『試したけどダメだった』を黄色で焼き込んで」を agent に指示すると、内部的にはこういう連鎖になる:
/api/v1/videos/generationsを curl で叩く (LTX-2、768×512、async ジョブ)- ポーリングで完成待ち
- ダウンロード
ffmpeg -i in.mp4 -vf "fade=in:0:30,drawtext=...:fontcolor=yellow" out.mp4- workspace に
./final.mp4を保存
これを全部 1 ターンで agent が組み立てる。ユーザー側のキーストロークは 1 行のプロンプトだけ。途中の curl も ffmpeg のフィルタ式も agent が書く。気に入らなければ「もう少し速いフェードで」と次のターンで言うだけで、agent は同じファイルを ffmpeg だけ差し替えて再生成する。
これは 「素材生成 + 編集」が連続体になる ということだ。普通は素材生成 (DALL-E / Midjourney) と編集 (Premiere / DaVinci) は別ツールで、間にダウンロード → アップロード → タイムライン配置という移動がある。kotonia-cli はそれを全部 shell の中の 1 つの会話に圧縮する。
ffmpeg は世界中の動画 / 音声処理のスイスアーミーナイフで、コマンド体系はテキスト 100%、agent と相性が圧倒的に良い。「agent が ffmpeg を自然言語からドライブする」体験を default で乗せた CLI は (繰り返しになるが) 他で見たことがない。
5. どう作ったか
中身は (Rust で書いた CLI agent としては) シンプルだ。infrastructure/execution/host.rs が bash 実行を扱い、application/kotonia_agent/ 配下に agent loop / 承認 / worktree / parser / history / provider が並ぶ。
- エージェント・ループ: delimiter ベース。LLM が
<<<BASH>>>...<<<END_BASH>>>か<<<FINAL_ANSWER>>>...<<<END_FINAL_ANSWER>>>を吐く。native tool calling は将来対応 (V4-Flash 側 chat_template 整備待ち、V4-Flash を自宅で動かす経緯は 16 コアが久しぶりに全力で唸った日 に書いた) だが、delimiter のほうが任意の OpenAI 互換 backend に動作する。 - 承認モデル: 3 段階セレクタブル。
autoは無人運転、allowlistは read-only / build / test 系を自動許可・destructive (rm -rf / git push --force) は承認待ち、allは全コマンド承認。卵層 (技術者の卵層 = 専門学校生 / 副業エンジニア / 駆け出し) にはall、本人にはautoといった具合に幅を広げる。 - Worktree デフォルト:
git worktree add /tmp/kotonia-agent-<uuid>で隔離。事故っても元の checkout は無傷。--in-placeで素直に cwd 編集も可。 - Session JSONL:
~/.kotonia/sessions/<id>.jsonlにメタデータ + 全メッセージ + bash 観測 + turn マーカーを書き出し。--resume <id>で完全復元。長時間セッションでコンテキストが context cap に当たる前に、別プロセスで再開できる。
そして本記事の主役パート、/api/v1 の B1 統合:
# 鍵を export するだけで、agent の system prompt にこの 4 endpoint が
# 自動公開される。zero code change for the user.
export KOTONIA_API_KEY=kotonia_xxxx
kotonia-cli "可愛い美少女の画像を作って ./bishoujo.png に保存して"
実装は 30 行。kotonia 側の /api/v1/{images,audio,videos}/generations への curl 呼び出しの shape を、system prompt の末尾にカリキュラム的に追記しているだけ。tool calling の native 化 (B2 案) は 200 行コースだったが、bash 経由なら 30 行で同じ capability density に届く。agent が jq | base64 -d > ./out.png を組み立てるのは LLM の標準レパートリーで、その能力を信じるとこの軽さで済む。
画像生成の中身 (HiDream-O1-Image を 8bit fp で resident、写実系 LoRA + 3-stage caption で品質を引き上げた経緯) は 3-stage caption で under-fit 天井を破った話 に書いた。冒頭の bishoujo.png の品質はここの基盤が効いている。
(リポジトリは現状クローズドだが、CLI 部分だけ独立 OSS として切り出す予定。準備が整ったら別途案内する)
6. 戦略的含意 ─ 1 人開発が Anthropic / OpenAI に勝てる領域はここしかない
最初に書いた通り、Code agent の市場は Claude Code / OpenAI Codex が圧倒している。モデル性能で勝負したら 1 人開発に勝ち目はない。インフラ規模での価格勝負も無理 (DeepSeek API は $0.27/M tokens 級、ローカル GPU で個人ホストすると同じ呼び出しが 200 倍のコストになる)。「ローカルで V4-Flash を動かせたから自前 API を出せばいい」というのは罠で、Fable 5 reviewer に同じ戦略を敵対的にレビューさせて 4 つの穴を突かれた話を別記事 (AI に「技術記事を書くな」と言われた話) に書いた。
では何で戦うか。「言語優位ユーザーへのロスレス UX」 は、フロンティアラボが構造的に優先度を上げにくい領域だ。理由は単純で、彼らの主要な収入源 (B2B 開発者 API) は 既存のコード IDE / GUI を使っている前提のユーザー に向いている。Cursor 経由で Claude を使う、VSCode 拡張経由で GPT を使う、ブラウザの ChatGPT で画像を使う。GUI が外側にある前提だから、CLI で言語完結する体験を磨くインセンティブが薄い。
逆に 1 人開発の側からは、ここを 「CLI で完結する creative agent」 として磨き込める。差別化軸は:
- CLI completeness: GUI を 1 度も開かなくていい
- Generative tool bundle: 画像 / 音声 / 動画が default、追加のサインアップ不要 (1 鍵で全部)
- ffmpeg multiplier: 素材生成 + 編集が同じ shell 内の連続体
- 言語優位プレイヤー fit: 視覚モードに脳を譲り渡さない、テキストだけで完結
- ローカル shell の自由: agent は cargo build / git fetch / curl / ffmpeg / 何でも触れる、E2B 系の隔離サンドボックスにない自由度
このセットを 1 個の CLI として届ければ、Claude Code を使っている言語優位の人 (= ターミナルから出ない設計を選んでいる人 ≒ 母集団のかなりの割合) が、サムネや絵コンテのためにわざわざ別ツールを開く必要がなくなる。
社会的にも意義がでかい、と本気で思っている。視覚モードに切り替えられず諦めていた多くの人の創造性が、テキストだけで視覚物に変換可能になる。
ちなみにこの「1 人開発が compound knowledge で立ち上がる」感覚は最近別の文脈でも記事にした (memory と git が agent 経由で初めて使われる側になった日)。今日 1 日で kotonia-cli が完成したのも、過去数ヶ月の memory / 設計判断 / 既存 /api/v1 の積み上げが agent 経由で初めて全部レバレッジされた、という同じ構造の続編だ。
7. 次にやること
/api/v1/chat/completionsを kotonia 側に追加 — DeepSeek API 鍵を別途要求しなくても、kotonia 鍵 1 個で agent loop の LLM も含めて全部完結する。Gemma 4 26B Uncensored (爆速 + 高並列、Agentic Index は 11 と中庸だが汎用効率タスクは余裕でこなす) を OpenAI 互換多重化する想定。- ffmpeg のツール例を system prompt に追加 — agent が「動画にフェード入れて」「字幕焼いて」「BGM ミックスして」を 1 行プロンプトで通せる prompt example を pre-load。
- 配布フォーム — 今はリポからビルドだけ、
cargo install経路と GitHub Releases のバイナリ配布は順次。Linux x86_64 から開始、macOS / Windows は CI を整えてから。 /chat/studioへの逆輸入 — CLI で磨いた agent ループを Web 側にも反映、ターミナル派 / Web 派どちらの言語優位プレイヤーにも届ける。Web 側で同じ「ロスレス UX」を実装する経験は、以前音声 LLM レイテンシを 600ms → 22ms に圧縮した時 (voice-first-local-llm) の延長で考えている。「X-first」を選んだら全ての画面 / 階層をそれに合わせて削る、という設計原則は creative-cli にも同じく当てはまる。
bishoujo.png を 1 枚生成しただけの記事のように見えるかもしれないが、ここから先の半年は 「言語と視覚の相互変換コストをどこまでゼロに近づけられるか」 がそのまま 1 人開発のプロダクト戦略になる、という確信を今日 1 日で得た。
それを残しておきたかった。
