APIコールへの課金をやめて、自分のAIチャットを構築した理由
2つのシステム問題
2週間前にShawnOSの構築を始めた。リポジトリだ。3つのNext.jsサイト、エージェントスキル、コンテンツパイプライン、RPGプログレッションを持つモノレポ。1人でGTMエンジンを回すためのオペレーティングシステム。
1週間前にNioをOpenClaw上に立ち上げた。OpenClawはGPTベースだ。アイデアはAIエージェント用の独立したチャットシステム。NioがCronジョブを実行し、ブログ記事を書き、コンテンツパイプラインを管理し、ダッシュボードを更新する。おもちゃではなく、本物のインフラ。
うまく動いた。しかしAPIコストが急速に膨らんだ。日常のオペレーションにSonnet。本格的な思考が必要なものにはOpus。1日50ドルから100ドル。どれだけ開発するかで変わる。そして常に開発していた。完全に狂気だった。
高頻度のCronをローカルのOllamaモデル(Qwen 2.5 14B)に回した。無料、高速、コミット追跡やステータス更新には十分。しかし、本当の知性が必要なものには...Claudeが要る。
そして本質的なインサイトが訪れた。
リポジトリこそが魔法
2つの別々のシステムを動かしていた。チャットにOpenClaw。それ以外にリポジトリ。しかし私が本当に依存しているモデル、OpusとSonnetは、すでに私のリポジトリと対話している。GPTにはできない方法で私の声とDNAを増幅する。ソウルファイル、コミット履歴、コンテンツパイプラインを読む。単に応答するのではない。複利で効いてくる。
別の世界では、OpenClawはGPTではなくAnthropicで構築されていただろう。しかしそうではなかった。そのギャップが答えを明白にした。2つの別々のシステムは要らない。リポジトリこそがシステムだ。
Claude Code Max。月額200ドルの定額。claude -p経由の無制限CLIアクセス。すでに課金していた。毎日リポジトリの構築に使っていた。コーディングワークフローを動かしているのと同じCLIが、チャットインターフェースを動かせるとは思いもしなかった。
claude -pはプロンプトの送信、レスポンスの取得、JSONストリームの出力、セッションの再開ができる。すべてターミナルから。すべてサブスクリプションに含まれている。APIキーなし。トークン単位の課金なし。使用量の上限なし。
再帰的な性質こそが機能する理由だ。Claudeが動かすシステムをClaude自身が構築する。コードを書くモデルが、その中で動くモデルだ。コスト最適化ではない。フライホイールだ。
構築
Next.jsアプリ。1つのAPIルート。claude -pを子プロセスとしてスポーンする。JSONストリームをServer-Sent Eventsとしてブラウザに返す。
それだけだ。バックエンドのすべて。
クライアントはiMessageスタイルのPWAだ。ダークテーマ、等幅フォント、タイピングインジケーター。メッセージを送信し、ストリーミングレスポンスを受け取る。セッションIDが会話をまたいで永続するので、Nioがコンテキストを覚えている。
Cloudflare TunnelをMac Miniに向ける。これで、スマートフォンからどこにいてもAIにテキストできる。APIコストゼロ。トンネル以外のインフラコストゼロ(無料ティア)。
アイデアから動作するPWAまでの所要時間...午後1回分。
ソウルファイルパターン
アーキテクチャの観点からここが面白い。Claude CLIには--append-system-prompt-fileというフラグがある。マークダウンファイルを指定すれば、そのファイルがシステムプロンプトの一部になる。
nio-soul.mdを書いた。Nioのパーソナリティ、能力、アンチスロップルール、意思決定フレームワークを定義する。NioをNioたらしめるすべて。チャットボットではない。意見を持つインフラだ。
つまり、新しいエージェントの追加は新しいマークダウンファイルを書くだけだ。
マルチエージェント拡張
1つのCLI。異なるソウルファイル。異なるパーソナリティ。独立したセッション。
それがShawnOS Chatが向かっている先だ。各エージェントが独自のパーソナリティファイル、アクセントカラー、バブルカラー、分離されたセッション状態を持つマルチエージェントプラットフォーム。UIでエージェントを切り替える。それぞれが前回の続きから始まる。
Nioがオペレーションとインフラを担当する。Architectエージェントがシステム設計を担当する。Writerエージェントが私の声でコンテンツを担当する。その下は同じClaude CLI。同じゼロ限界コスト。
エージェントごとの状態はクライアントのlocalStorageとサーバーのファイルベースメモリに保存される。各エージェントが独自のMEMORY.md、独自のハートビートファイル、独自のデイリースナップショットを持つ。軽量、ポータブル、データベース不要。
IPはコードではない
誰でもCLIプロセスをスポーンできる。重要なのはパターンだ。
パーソナルAIインフラのバックエンドとしてのCLI。エージェントごとのセッション分離。パーソナリティ注入用のソウルファイル。ファイルベースのメモリシステム。使用量ではなくサブスクリプションに応じてスケールするゼロ限界コストアーキテクチャ。
これはかつて、カスタムAPIインテグレーション、データベース、認証ミドルウェア、月次のクラウド請求書が必要だった類のものだ。今はマークダウンファイルとNext.jsルートで実現できる。
ビルダーにとっての意味
パーソナルAIツーリングにトークン単位で課金していて、Claude Code Maxサブスクリプションを持っているなら...お金をテーブルの上に残している。
CLIがAPIだ。サブスクリプションがインフラ予算だ。あとはただの配管だ。
しかしそれ以上に - コードベースと対話しないプラットフォームでAIを動かしているなら、1つで済むところを2つのシステムを構築している。インフラを構築するモデルが、それを動かすモデルであるべきだ。近道ではない。アーキテクチャだ。
これはShawnOSの一部だ。1人でGTMエンジンを回すために公開で構築しているオペレーティングシステム。2週間前にリポジトリの構築を始めた。すでに複利が効いている。
自分のを作ろう。