「シェルの住人」としてのLLM:コーディングエージェント pi / pi-mono の設計思想を探る

昨今の開発現場ではターミナル完結型のAIエージェントが普及しつつありますが、今回 CLI(シェル)になじむコーディングエージェント pi, pi-mono という記事を読み、従来のエージェントとは一線を画す「スクリプタブル(自動化しやすさ)」という側面に惹かれたので、その特徴を整理してみました。

これ良いですね。APIベースで使われるからコストの点が気になるけど、古参プログラマにとっては馴染みやすい。


LLM を「コマンド」として扱うという発想

Claude Code や Codex CLI など、対話型のコーディングエージェントはすでにいくつか存在します。しかし、今回紹介する pi(および pi-mono)は、それらとは少し毛色が異なります。

最大の特徴は、LLM を「高度な AI アプリケーション」としてではなく、grep や awk と同じような「Unix パイプラインの一部」として再定義している点にあります。開発者の Mario Zechner 氏は、これを「シェルの住人として設計されたエージェントハーネス」のように位置づけているようです。

まずは、pi がどのように動作するのか、その基本的な処理フローを可視化してみます。

(※ 図はブログ記事をご参照ください)

パイプとリダイレクトへの適応

多くのコーディングエージェントは、専用のチャット画面や独自の REPL 環境にユーザーを閉じ込めがちです。一方で pi は、標準入出力を活用したシェルらしい使い方が中心に据えられています。

たとえば、以下のような操作が自然に行えます。

# ファイルの中身をパイプで渡して要約させる
cat logs.txt (※ 表はブログ記事をご参照ください)

# 生成結果を直接ファイルへ書き出す
pi -p --no-tools "TypeScript のインターフェース定義を作って" > types.ts

# cron などのジョブ管理ツールと組み合わせて定期実行する
0 9 * * 1-5 cd /project && ./daily-check.sh >> /var/log/ai-report.log

このように、非対話形式での実行がオプションではなく「設計の核心」にある点が、自動化を好む開発者にとって使い勝手の良い部分かと思います。

最小限のツールセットと拡張性

pi のコアツールは非常にシンプルで、read, write, edit, bash の4つに絞られています。MCP(Model Context Protocol)サーバーなどはデフォルトでは含まれておらず、必要に応じて追加するスタイルです。

このシンプルさが、結果としてシェルスクリプトへの組み込みを容易にしています。以下は、特定のファイルを読み込んでレビューを行う専用エージェントを自作するイメージです。

#!/bin/bash
# review-agent.sh — 特定のモデルと設定を使ったカスタムエージェント
pi --provider ollama --model "qwen3.6:35b" \
  --tools read,grep,find,ls \
  --thinking medium \
  -p @"$1" "このコードの可読性とバグの可能性をチェックしてください"

このように、LLM の「思考の深さ(thinking)」や「使用ツール」をコマンドライン引数で制御できるため、用途に特化した小さなエージェントを量産するような使い方が向いているかもしれません。

既存ツールとの比較

一般的なコーディングエージェントと pi の違いをまとめると、以下のようになります。

(※ 表はブログ記事をご参照ください)

「今どき」の利便性も兼ね備える

一方で、単なる CLI ラッパーで終わらないのが pi の面白いところです。対話の続きを再開できるセッション管理機能や、プロジェクトごとの振る舞いを規定する AGENTS.md や SYSTEM.md といった仕組みも備えています。

たとえば、pi -c と打てば前回の作業の続きからエージェントと会話を始められます。これは Claude Code の /resume コマンドに近い感覚で利用できるため、手軽なコード修正にも十分対応可能です。

まとめ

pi や pi-mono は、LLM を「特別な魔法」としてではなく、既存の Unix ツールボックスに加わる「新しい道具」として捉え直そうとしているように感じます。

全部をお任せにするのではなく、必要な時だけパイプで繋いで LLM の知恵を借りる。そんな、開発者の手に馴染む距離感がこのツールの魅力ではないでしょうか。大規模な開発から日々の小さな自動化まで、活用の幅は意外と広いかもしれません。

まずは使い慣れたシェル環境に、一つのコマンドとして迎え入れてみることから始めてみてはいかがでしょうか。

参照記事


詳しくはこちらをご覧ください。

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