pi
Pi Agent Harness — earendil-works(CLI・統一 LLM API・エージェントランタイム・TUI)
pi(GitHub: earendil-works/pi)は、Pi agent harness の TypeScript モノレポ。中心の @earendil-works/pi-coding-agent は対話型コーディングエージェント CLI(read / write / edit / bash)として位置づけられている。
Pi は「ワークフローをツールに合わせる」のではなく、拡張・スキル・プロンプトテンプレート・テーマ・Pi Packages で ユーザー側の運用に合わせて変形する。公式サイトは pi.dev、ドキュメントは pi.dev/docs/latest。
@earendil-works/pi-coding-agent は、read・write・edit・bash を標準ツールとして持つ対話型コーディングエージェント CLI。API キーでも、既存サブスクリプションの /login でも始められる。通常の npm インストールでは依存の lifecycle script は不要なので、--ignore-scripts を付ける。
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
# インストーラ代替
curl -fsSL https://pi.dev/install.sh | sh
# API key で起動
export ANTHROPIC_API_KEY=sk-ant-...
pi
# 既存サブスクリプションで認証
pi
/login
interactive標準 TUI。エディタ、メッセージ、ツール呼び出し、フッターで状態を見ながら作業する。
-p一回だけ応答して終了。標準入力も初期プロンプトに混ぜられる。
--mode jsonイベントを JSON Lines で出す。ログ処理や非対話実行向け。
--mode rpcstdin/stdout の LF 区切り JSONL RPC。Node 以外のプロセス連携向け。
埋め込み向けに SDK もある。実例は openclaw/openclaw。
サブスクリプション
Anthropic Claude Pro/Max、OpenAI ChatGPT Plus/Pro(Codex)、GitHub Copilot を /login で使える。
API キー
Anthropic、Ant Ling、OpenAI、Azure OpenAI、DeepSeek、NVIDIA NIM、Google Gemini / Vertex、Amazon Bedrock、Mistral、Groq、Cerebras、Cloudflare AI Gateway / Workers AI、xAI、OpenRouter、Vercel AI Gateway、ZAI Coding Plan、OpenCode Zen / Go、Hugging Face、Fireworks、Together AI、Kimi For Coding、MiniMax、Xiaomi MiMo などに対応する。詳細は providers.md。
公開パッケージは 0.80.6 系で揃っている(ルート monorepo の package.json は 0.0.3)。責務は統一 LLM API、エージェントランタイム、coding agent CLI、差分レンダリング TUI、実験的 orchestrator に分かれる。旧 pi-web-ui は本リポジトリから外れており、Slack / チャット自動化は別リポ earendil-works/pi-chat を参照する。
| パッケージ | 役割 |
|---|---|
@earendil-works/pi-coding-agent |
Pi CLI 本体。read / bash / edit / write ツール、セッション管理、TUI、JSON / RPC / SDK 連携を提供。 |
@earendil-works/pi-ai |
自動モデル発見、プロバイダー設定、トークン・コスト計測、モデル間ハンドオフを持つ統一 LLM API。 |
@earendil-works/pi-agent-core |
ツール呼び出し、状態管理、添付ファイル対応を持つ汎用エージェント基盤(transport 抽象あり)。 |
@earendil-works/pi-tui |
差分レンダリング付きターミナル UI ライブラリ。 |
@earendil-works/pi-orchestrator |
実験的。CLI / API / 挙動は未安定で、変更・削除の可能性がある。 |
Pi のセッションは JSONL ファイルとして保存され、各エントリが id と parentId を持つ。これにより、別ファイルを増やさずに履歴ツリー上で分岐できる。
/tree過去の任意地点へ移動し、そこから続行。検索、折りたたみ、ラベル付けもできる。
/fork過去のユーザーメッセージから新しいセッションファイルを作る。
/clone現在のアクティブブランチを新しいセッションに複製する。
/compact古いメッセージを要約し、長いセッションのコンテキスト逼迫を回復する。
pi -c # 最新セッションを継続
pi -r # 過去セッションを選択
pi --no-session # 保存しない一時セッション
pi --session <path|id> # 特定セッションを利用
pi --fork <path|id> # 特定セッションから分岐
README は、OSS で Pi や他の coding agent を使った作業セッションの共有を呼びかけている。狙いは、toy benchmark ではなく実作業のツール呼び出し・失敗・修正を集め、モデル・プロンプト・ツール・評価を改善すること。
共有ツールは badlogic/pi-share-hf。作者自身の作業セッションは README の表記どおり Hugging Face: badlogicgames/pi-mono(データセット名は従来の pi-mono のまま)で公開されている。
Pi はサブエージェントや plan mode を標準装備しない。その代わり、TypeScript 拡張と Agent Skills 標準、プロンプトテンプレート、テーマ、Pi Packages で、各チームのワークフローを後付けする。MCP、権限ゲート、サンドボックス、Git チェックポイント、独自 UI も拡張側で組み込める。
Markdown の再利用プロンプト。/name で展開し、変数も使える。
Agent Skills 標準の手順パッケージ。/skill:name または自動ロードで使う。
TypeScript でツール、コマンド、キー、イベント、UI コンポーネント、プロバイダーを追加する。
extensions / skills / prompts / themes を npm または git で配布・インストールする。
pi install npm:@foo/pi-tools
pi install npm:@foo/pi-tools@1.2.3
pi install git:github.com/user/repo
pi install https://github.com/user/repo@v1
pi remove npm:@foo/pi-tools
pi list
pi update
pi config
pi update --extensions
pi update --self
pi update npm:@foo/pi-tools
Pi にはファイルシステム・プロセス・ネットワーク・資格情報を制限する組み込み権限システムはない。起動したユーザーとプロセスの権限で動く。境界が必要ならコンテナ化またはサンドボックスを使う。詳細は containerization.md。
| パターン | 隔離対象 | 向き |
|---|---|---|
| Gondolin extension | 組み込みツールと ! コマンド |
ホストに pi とプロバイダ認証を残し、ツール実行だけをローカル Linux micro-VM へ流す |
| Plain Docker | pi プロセス全体 |
単純なローカル隔離。API キーはコンテナに入る |
| OpenShell | pi プロセス全体 |
ポリシー制御付きサンドボックス(ローカル / リモート) |
pi プロセスが動いている場所で動く。ホスト上の pi にツール転送拡張を付けても、他のカスタム拡張ツールは委譲しない限りホスト側で実行される。
依存の hydrate は lifecycle script を止めて行う。npm run check は Biome、pinned deps、TS import、shrinkwrap、browser smoke、tsgo などをまとめて見る。
npm install --ignore-scripts # lifecycle script なしで依存を入れる
npm run build # 全パッケージのビルド
npm run check # lint / type / shrinkwrap / smoke
./test.sh # API キーなしなら LLM 依存テストはスキップ
./pi-test.sh # ソースから pi を実行(任意の cwd から可)
npm 依存の変更はレビュー対象のコード変更として扱う。
- 外部直依存は exact pin。ワークスペース内部パッケージだけ version range を残す。
.npmrcでsave-exact=trueとmin-release-age=2。package-lock.jsonが依存の正。lockfile の偶然コミットは pre-commit が止め、PI_ALLOW_LOCKFILE_CHANGE=1が必要。- 公開 CLI にはルート lockfile から生成した
packages/coding-agent/npm-shrinkwrap.jsonを同梱する。 - ローカルリリース検証は
npm run release:local。CI はnpm ci --ignore-scripts、定期でnpm audit/ signature 検証。
新規 contributor の Issue / PR はデフォルトで自動クローズされる。メンテナーが日次で見直し、質の高いものだけを reopen または承認する。中長期計画は RFC(keyword: pi) も参照。
- 1短く具体的で、1 画面に収まる Issue を出す。バグや要望と「なぜ重要か」を明確にする。
- 2
lgtmiなら今後の Issue、lgtmなら今後の Issue と PR が承認済み扱いになる。 - 3PR 前に
npm run checkと./test.shを通す。CHANGELOG.mdは直接編集しない。
公式サイト: pi.dev
ドキュメント: pi.dev/docs/latest
リポジトリ: earendil-works/pi(旧 badlogic/pi-mono)
Discord: discord.com/invite/3cU7Bz4UPx
Pi coding agent: @earendil-works/pi-coding-agent
LLM API: @earendil-works/pi-ai
コンテナ化: containerization.md
pi-chat(別リポ): earendil-works/pi-chat
セッション共有ツール: badlogic/pi-share-hf
公開セッション: Hugging Face: badlogicgames/pi-mono
RFC: rfc.earendil.com/keyword/pi
CONTRIBUTING: CONTRIBUTING.md
AGENTS.md: AGENTS.md