見出し画像

CLI(シェル)になじむコーディングエージェント pi, pi-mono

Claude Code、Codex  ―― ターミナルで動くコーディングエージェントが出揃ってきて、もう「どっち使う?」みたいな話が日常になってきました。

で、最近ふと目に留まったのが、Pi というプロジェクトです。
libGDX(Javaのゲームフレームワーク)を作った Mario Zechner 氏が個人で開発しているオープンソースのコーディングエージェントのツールキットだそう。MIT ライセンス。

最初は「Claude Code のOSS版か?」くらいの軽い気持ちで触り始めたんですが、まったく思想が違いました。

これ、Claude Code のような全部おまかせじゃなくて、シェルの住人として設計されたエージェントハーネス のように感じました。でも Claude Code っぽいコーディングエージェントの便利さもちゃんとある。そのバランスが面白かったので記事を書こうと思いました。


grep や awk の隣に置ける LLMハーネス

Pi のコアツールは4つだけです。read, write, edit, bash。以上。
MCP サーバーも、サブエージェントも、デフォルトでは入っていません。必要ならパッケージで足す。この割り切りのおかげで、Pi はシェルの中に自然に溶け込みます。

# パイプに流せる
cat data.csv | pi -p "このデータを要約して"

# リダイレクトで書き出せる
pi -p --no-tools "テストケースを生成して" > tests.py

# cron で毎朝回せる
0 9 * * 1-5 cd /app && ./run.sh >> /var/log/report.log

Claude Code も Codex CLI も -p 相当の機能はあるんですが、Pi の場合は「スクリプタブルであること」が設計の 中心 にある。端っこのオプションじゃなくて、真ん中にある。

-p で非対話実行、@file でファイルを渡す、--no-tools でツールを封じる、--thinking medium で思考の深さを制御する。これらのフラグの組み合わせだけで、用途特化のエージェントのシステムがシェルスクリプトで作れます。

#!/bin/bash
# review-agent.sh — コードレビュー専用エージェント
pi --provider ollama --model "qwen3.6:35b-a3b-q4_K_M" \
  --tools read,grep,find,ls \
  --thinking medium \
  -p @"$1" "このコードをレビューして"

この感覚、伝わるでしょうか。LLM を「別世界のツール」じゃなくて、grep や awk と同列のコマンドとして使う感じ。なんか懐かしい。

でも、ちゃんと「今どきのエージェント」でもある

シェルになじむだけなら、ただのCLIラッパーですよね。Pi が面白いのは、Claude Code 的な「賢いエージェント」の便利さもちゃんと持っているところ。

セッション管理

対話の続きがちゃんとできます。-c で前回のセッションを再開、-r でセッション一覧から選択。Claude Code の /resume と同じ感覚。

pi -c    # 昨日の続きから
pi -r    # セッション一覧から選ぶ

プロジェクトルール(AGENTS.md / SYSTEM.md)

Claude Code を使っている人なら CLAUDE.md でおなじみの、プロジェクトルール設定。Pi にも同じ仕組みがあります。

  • AGENTS.md ―― プロジェクト固有のルールを定義。Claude Code の CLAUDE.md に相当

  • .pi/SYSTEM.md ―― システムプロンプトをまるごと差し替える。この機能は Claude Code でいうところの、グローバル設定のCLAUDE.mdよりも、もう少し低レイヤーよりの指示もする感じでしょうか。

思考モード

--thinking off / minimal / low / medium / high / xhigh で推論の深さを6段階で制御。簡単な質問は off 、複雑な分析は medium 以上で丁寧に。CLIフラグで切り替えられるのがシェル向き。

@file でコンテキスト注入

pi -p @data.csv @config.json "この設定でデータを分析して"

ファイルの中身をプロンプトの一部として渡せる。Claude Code のファイル参照と同じ。でもこれがCLIフラグなので、シェルスクリプトの変数展開と組み合わせやすそうかも。

実際に作ってみた:トレーディング分析エージェントもどき

仮想通貨のデイリーレポート自動生成システムみたいなのを作ってみました。
設計方針はシンプル:「計算」は Python 、「解釈」はLLMに

CoinGecko API → fetch_market.py → 価格データ CSV
                                      ↓
                calc_indicators.py → テクニカル指標 CSV
                                      ↓
                  pi (SYSTEM.md + @file) → レポート.md

それぞれ独立したプロセスで、間のデータは CSV。全体を束ねるのはシェルスクリプト。古臭いかもだけど、管理がラクそう。

#!/bin/bash
# run.sh — ワンコマンドでレポート生成
python3 scripts/fetch_market.py
python3 scripts/calc_indicators.py
pi --provider ollama --model "qwen3.6:35b-a3b-q4_K_M" \
  -p --thinking medium --no-tools \
  @data/current_prices.csv @data/indicators.csv \
  "本日の市場レポートを作成してください。" > reports/$(date +%Y-%m-%d).md

SYSTEM.md には「あなたはシニアテクニカルアナリストです」とか書いて、レポートの構成(サマリー → 個別分析 → リスク評価 → 推奨アクション)を定義。AGENTS.md に「日本語で書け」「免責事項をつけろ」と書いてみました。

ローカル LLM(qwen3.6:35b MoE)でこれを回すと、良い感じに動きました。RSI が 70 超えてるから「買われすぎ圏、HOLD 推奨」とか、ゴールデンクロスだから「強気基調継続」とか、テクニカル指標の解釈がそれなりにまともっぽいレポートが出てくる。

商用モデルに切り替えればさらに質が上がるはずで、--provider を変えるだけだから試すハードルも低い気がします。私は仮想通貨も金融取引も素人なので、性能については判断できないけど、システムとして気軽に成立させそうな印象を持ちました。

ポイントは、このパイプラインの最終段を grep や awk から pi に置き換えただけ、ということ。特別なフレームワークもエージェント基盤もいらない。この「シェルスクリプトの延長線上に LLM がいる」感覚が、個人的にはすごくしっくりきました。

最近、全部Claude code, coworkとかに任せちゃえという風潮が、個人的になんかしっくりこない感じもあったので、よい落としどころじゃないかなぁという気がしました。

モデルを選ばない地味にイケてる実装

Claude Code は Claude を、Codex は OpenAI のモデルを前提としています。Pi はどのモデルでも動く。Ollama、Anthropic、OpenAI、Google Gemini、OpenRouter ―― 20以上のプロバイダーに対応しています。
「それ、どうせ OpenAI 互換 API に投げてるだけでしょ?」と思うじゃないですか。自分も最初そう思いました。
でもソースコード(TypeScript)を読んでみたら、ちゃんと作り込まれていて驚きました。

世の中のLLMサービスって、口を揃えて「OpenAI互換!」って言うんですが、実際は非互換だらけなんですよね。developer ロールが使えない、思考モードの指定方法がモデルごとに違う、max_tokens と max_completion_tokens のどっちを使うか、ツール結果に name フィールドが要るか ―― こういう「微妙な差異」が無数にある。
Pi はこれを compat フラグ という仕組みで吸収している。URLやモデル名から特性を自動検出しつつ、足りない部分は設定ファイルで上書きできる。15種類以上のフラグで地雷がだいたい網羅されている印象です。

Agent SDK との違い

ここまで読んで「でもそれ Claude Code の Agent SDK で良くない?」と思った人も多いと思います。

Agent SDK は、Claude Code の内部で使われているエージェントループをライブラリとして切り出したもので、TypeScript / Python からツール定義・サブエージェント・マルチターン会話をプログラム内に組み込めます。

でも並べてみると目指す場所が違う。
Pi は「シェルの中にエージェントを置く」。Agent SDK は「アプリの中にエージェントを埋め込む」。
さっきのトレーディングエージェントで比較すると:

  • Pi: シェルスクリプトが全体を制御。各ステップは独立したプロセス。間のデータは CSV。何がどの順で走るかは run.sh に書いてある。LLM が勝手に手順を変えることはない。

  • Agent SDK: エージェントが全体を自律制御。どのツールをどの順で呼ぶかも LLM が判断。より柔軟だが、動作の予測可能性は下がる。

プロダクション品質のエージェントシステムなら Agent SDK のほうが筋が良いし、Agent SDK は Claude 専用なぶん最適化が効いている。一方で「今日から動く小さなツール」を最短距離で作るなら Pi に分がある気がします。シェルスクリプトを書いて、./run.sh を叩くだけ。

むしろ Claude Code と組み合わせるのが良さそう

ここまで Pi と Claude Code を比較してきましたが、書いているうちに「これ、対立じゃなくて組み合わせだな」と思い始めました。

Pi で作ったシェルスクリプトって、そのまま Claude Code の スキル(カスタムスラッシュコマンド) として登録できるんですよね。
たとえばさっきのトレーディングレポート生成スクリプト。Claude Code の .claude/commands/ にこう置く:

# .claude/commands/market-report.sh
#!/bin/bash
# 市場分析レポートを生成する
cd ~/trading-agent
python3 scripts/fetch_market.py
python3 scripts/calc_indicators.py
pi --provider ollama --model "qwen3.6:35b-a3b-q4_K_M" \
  -p --thinking medium --no-tools \
  @data/current_prices.csv @data/indicators.csv \
  "本日の市場レポートを作成してください。"

これで Claude Code から /market-report と打つだけで、Pi 経由のレポート生成が走る。Skillsで工夫することはもちろんできますが、定型的な作業なら こっちの方が 向いてるタスクもありそうですし、役割の分担 をきれいに成立させることができそうです

  • Claude Code: 全体のオーケストレーション、普段の開発作業、コードリーディング、リファクタリング ―― Claude の能力が活きる仕事

  • Pi スキル: 定型的な分析・生成タスク ―― SYSTEM.md で振る舞いを固定し、シェルスクリプトで制御する仕事

Claude Code が「何でもできる万能エージェント」なら、Pi で作ったスキルは「決まった仕事を確実にこなす専門ツール」。万能ナイフの中に、用途特化の刃を差し込む感じ。

しかも Pi 側は好きなモデルを選べる。コストを抑えたければローカル LLM、品質を求めるなら OpenAI や Anthropic など別の商用モデル、と用途に応じて使い分けられる。Claude Code 本体の API トークンとは独立して制御できるのが地味に嬉しい。

この使い方、けっこう実用的かもしれません。

商用モデルを使ったらどうなるか

今回は Ollama + qwen3.6(ローカルLLM)で試しましたが、Pi は Anthropic(Claude)、OpenAI、Google Gemini など商用モデルにも普通に対応しています。API キーを設定して --provider anthropic --model claude-sonnet-4-6 とするだけ。

ローカルLLMでも「動く」ことは確認できたわけですが、商用モデルに切り替えたらこの設計の良さがさらに活きるんじゃないかと思っています。SYSTEM.md によるペルソナ定義、AGENTS.md によるルール適用、@file でのコンテキスト注入 ―― これらの仕組みは、モデルが賢くなればなるほど効いてきそうな気がしました。

ローカルLLMから商用モデルまで同じスクリプトで横断できるのが強み だと思います。まず手元の qwen3.6 で試して、本番では Claude Sonnet あたりに差し替える、みたいな使い方が気楽にできそうです

まとめ:シェルの延長線上にLLMがいる心地よさ

Pi を一通り触って感じたのは、「LLM を道具として使う」感覚の心地よさ でした。
AI に仕事を丸投げするんじゃなくて、自分のワークフローの中に LLM を部品として組み込む。grep や awk を置くように、pi を置く。しかも、セッション管理やプロジェクトルールや思考モードといった今どきの便利さもちゃんとある。

「シェルになじむ」と「エージェントハーネスとして賢い」。この2つって普通はトレードオフだと思うのですが、Pi はかなり良いバランスで両立させていると思います。
ターミナルが好きで、AI は便利に使いたいけど、自分のワークフローは自分が把握したい。 ―― そういう人には刺さるかも。特にAIをちょっとしたツールとして使うには、いい感じな気がします。

付録:日本語ハンズオンガイド

日本語のドキュメントが少ない気がしたので、勉強がてらハンズオン形式の導入ガイドを書いてみました。Ollama のセットアップから Pi の基本操作、最後にトレーディング分析エージェントもどきを作るところまで、一通り手を動かせる内容になっている……かも。正直、まだ自分も理解しきれていない部分も多いですが、同じように Pi を触ってみたいという方の取っかかりになれば幸いです。

最後までお読みいただき、ありがとうございました。

いいなと思ったら応援しよう!