世界を動かす技術を、日本語で。

意見を持ち、ミニマルなコーディングエージェントを構築して学んだこと

概要

  • pi-aipi-agent-core の開発背景と設計思想の解説
  • 複数LLMプロバイダ対応の 統一API を実現するための課題と工夫
  • コンテキスト管理ツール呼び出し の具体的な実装例
  • TUI(ターミナルUI) や最小限のコーディングエージェントCLIの開発
  • 商用製品との比較や、個人開発ならではのシンプルさの追求

2025年のコーディングエージェント進化と「pi」シリーズ開発記

  • ここ3年間、 LLMを活用したコーディング支援 を模索
    • ChatGPTへのコピペから始まり、Copilot、Cursor、Claude Code、Codex、Amp、Droid、opencodeなどを試用
  • Claude Code 初期バージョンの シンプルさ が好み
    • 機能追加で複雑化し、 ワークフロー崩壊やUIのちらつき に不満
  • 独自エージェント(例:Sitegeist)も複数開発
    • コンテキスト設計の重要性 を痛感
  • 既存ハーネスの ブラックボックス化セッション記録の不透明さ に課題
  • 自分用に必要最小限 のコーディングエージェント「pi」シリーズを開発決意

pi-aiとpi-agent-coreの設計哲学

  • pi-ai :複数LLMプロバイダ対応の 統一API を実現
    • Anthropic, OpenAI, Google, xAI, Groq, Cerebras, OpenRouterなどをサポート
    • ストリーミング・ツール呼び出し・コスト管理 などに対応
  • pi-agent-core :ツール実行・バリデーション・イベントストリーミングを管理
  • pi-tui :最小限のターミナルUIフレームワーク
    • 差分レンダリング・ちらつきの少ない出力・エディタやMarkdown表示など
  • pi-coding-agent :CLIで一連の機能を統合
    • セッション管理・カスタムツール・テーマ・プロジェクトコンテキスト対応
  • 「不要なものは作らない」 というミニマリズム重視

LLM API統一の現実と課題

  • 実質 4種類のAPI で主要LLMプロバイダを網羅可能
    • OpenAI Completions/Responses, Anthropic Messages, Google Generative AI
  • 各プロバイダの 細かな仕様差 に個別対応が必要
    • 例:max_tokensのパラメータ名やシステムプロンプト対応の違い
  • テストスイート で多様な入力やツール呼び出しを網羅的に検証
  • トークン管理・コスト計算 はプロバイダごとにバラバラで完全な精度は困難
  • Googleは ツールコールのストリーミング未対応

コンテキストハンドオフの実装

  • セッション中に 異なるLLMプロバイダへ切り替え可能
    • 例:Anthropic→OpenAI→Googleと順に切り替え
    • 各プロバイダの「思考トレース」や特殊イベントを ベストエフォートで変換
  • シリアライズ/デシリアライズ によるセッション保存・再開
  • クロスプロバイダでの一貫性維持 に苦労しつつも、実用レベルで動作

マルチモデル世界への対応

  • モデル情報を TypeScript型 として管理
    • OpenRouterやmodels.devから情報を自動生成
    • 自己ホスト型モデルや新規プロバイダ も簡単に追加可能
  • リクエスト中断(abort)や部分的結果取得 に最初から対応
    • 生産環境統合やUIフィードバックに必須

ツール出力の構造化分割

  • ツール実行結果を LLM用(テキスト/JSON)UI表示用 に分割
    • UIでの表示最適化が容易
  • 画像などの添付ファイル にも対応
  • バリデーションやエラー処理 も自動化

まとめ

  • 既存コーディングエージェント の複雑化・ブラックボックス化へのアンチテーゼ
  • 個人用途に最適化 したシンプル・拡張性重視の設計
  • pi-aiシリーズ は「自分が欲しい機能だけ」を徹底追求
  • 開発者体験・透明性・UI拡張性 のバランス重視

このように、「pi」シリーズは 複数LLMプロバイダの統一的活用個人開発者向けのシンプルな体験 を両立するための独自アプローチを実現しています。

Hackerたちの意見

Piは多分、最高のアーキテクチャを持ってるし、JavaScriptで書かれてるから、AIエージェントの未来にぴったりなブラウザのサンドボックスアーキテクチャを活かせると思う。著者がベンダー拡張についてのスタンスを変えてくれたらいいんだけど。 https://github.com/badlogic/pi-mono/discussions/254

「交差点を標準化し、ユニオンを公開する」というフレーズ、今まで聞いたことなかったけど、すごくいいね。

他のコーディングエージェントのセキュリティ対策を見てみると、ほとんどがセキュリティシアターだよね。エージェントがコードを書いて実行できるようになったら、ほぼ終わりだよ。少なくともCodexの場合、エージェントはOSが提供するサンドボックス内でコマンドを実行するから(macOSのSeatbeltとか、他のプラットフォームの色々)、あまり「エージェントがほとんど役に立たなくなる」ことはないよ。

私のCodexは、SDKをパスの外でパッチするように頼むと、サンドボックス内でファイルを作成するためにPythonを使ってる。

CodexはClaude Codeみたいにランダムにサンドボックスを無効にするの?

エージェントをコンテナの外で動かすのはマジでやめた方がいいよ。それは基本中の基本。

非読取ツールの呼び出しには承認が必須にすべきだと思う。LLMが何をしようとしているのか、すべて読んで手動で承認するべきだ。「でも、それは面倒で時間がかかる!」そうだね、でも災害的なツール呼び出しから回復するのも時間がかかるよ。

このワークフローを理解しようとしてるんだけど、コーデックスを使い始めたばかりで、まだ2日目なんだ。GitHubのリポジトリに接続して、クラウドで動かしてプルリクエストを作成してる。UIとミドルレイヤーのコードだけ触るようにしてて、データベースの変更は一切なし。モデルには触れないようにいつも指示してるよ。

もう何人かのパワーユーザーがPiに移行してるのを見たし、私も考えてるところ。前提がすごく魅力的だよね。 - 最小限で設定可能なコンテキスト - システムプロンプトを含む [2] - 最小限で拡張可能なツール;例えば、タスク管理の拡張 [3] - 組み込みのMCPサポートはなし;拡張機能は存在する [4]。私はmcporterを使いたいな [5]。コンテキストを完全にコントロールできるのは、高いレバレッジ能力だよ。パフォーマンスに対するコンテキストの多くの制限(インコンテキストリトリーバルの制限 [6]、コンテキストロット [7]、コンテキストドリフト [8] など)を理解していれば、Piが全体のコンテキストを最適なパフォーマンスのために微調整できることを本当に評価できると思う。明らかに誰にでも向いてるわけじゃないけど、その力強さは感じられるよね。 --- [1] https://lucumr.pocoo.org/2026/1/31/pi/ [2] https://github.com/badlogic/pi-mono/tree/main/packages/codin... [3] https://github.com/mitsuhiko/agent-stuff/blob/main/pi-extens... [4] https://github.com/nicobailon/pi-mcp-adapter [5] https://github.com/steipete/mcporter [6] https://github.com/gkamradt/LLMTest_NeedleInAHaystack [7] https://research.trychroma.com/context-rot [8] https://arxiv.org/html/2601.20834v1

PiはmoltXYZの中でバイラルになるべき部分だね。Arminはここでかなり先を行ってる。Claudeのサブが私をClaude Codeに留めてる唯一の理由だよ。前よりはマシになったけど、フックやコンテキスト管理のサポートはまだまだ表面的だね。

コードをChatGPTにコピー&ペーストしたり、Copilotの自動補完を使ったり、Cursorを経て、最後にはClaude CodeやCodex、Amp、Droid、opencodeみたいな新しいタイプのコーディングエージェントが登場してるね。HNを読んでると、なんか置いてけぼりな気分になる。みんなが言うようにClaude Codeに移行しようとしたけど、なんかしっくりこないんだよね… もしかしたら、コードベースの大きさが原因かも。今、独りで開発してるスタートアップを始めて6ヶ月だから、そこまで大きなものはないし、Cursorを使えばすごく早く反復できる。ほとんどがSPAのブラウザでクリックテストしたものだし。比較すると、Claude Codeは何かをするのに永遠にかかる気がする。(とはいえ、CursorのUIは時々イライラする。特に、AIの変更の差分レビュー(赤/緑)がgitに統合されてないのがね。gitに統合されたもの(ステージ済みと未ステージのハンク)を使ってくれた方が良かったな。どの変更が自分のもので、どれがAIのものかを覚えるより、良いコードレビュー体験の方が大事だと思うし。)

あなたにとって理想的な妥協案は、VS Code用の公式Claude Code拡張機能をインストールすることかも。そうすれば、大規模で複雑なコードベースをナビゲートするためのIDEを持ちながら、CCの統合もできるよ。

Hacker Newsで議論の続きを見る