2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Piのシステムプロンプトを測ったら1866文字、Claude Codeの1/5だった

2
Posted at

はじめに

libGDX の作者 Mario Zechner が開発し、Flask・Jinja2 の作者 Armin Ronacher が長年愛用してきたミニマル設計のコーディングエージェント CLI「Pi」(@earendil-works/pi-coding-agent)を実際にインストールし、公式パッケージのソースコードから システムプロンプト生成関数を直接実行して実測 しました。

この記事で学べること

  • Pi の実際のインストール手順と基本的な使い方
  • システムプロンプトのサイズを自分の手元で再現・実測する方法
  • 「ミニマルなシステムプロンプト」が実際どこまで小さいのか、他ツールとの比較
  • Pi のツール構成が公開後どう進化したか

対象読者

  • Claude Code / Cline / OpenCode などのコーディングエージェントを使っている方
  • システムプロンプトの設計・トークンコストに興味がある方
  • 新しい CLI エージェントを試してみたい方

前提環境

  • Node.js 22.19 以降(今回は v22.22.2 で検証)
  • npm / bash / git

TL;DR

  • Pi は GitHub で 67,000 スター・8,200 フォークearendil-works/pi、検証時点)を集めるミニマル設計のコーディングエージェント CLI
  • npm install -g --ignore-scripts @earendil-works/pi-coding-agent で実際にインストールし、公式配布パッケージ内の buildSystemPrompt() 関数をそのまま Node で呼び出したところ、デフォルト4ツール構成のシステムプロンプトは 1,866文字・238語(英語ベースで概算470トークン前後)だった
  • 他エージェントの推定トークン数(Tensorlake の技術ブログ調べ)は Claude Code / OpenCode が約10,000トークン、Cline が約7,000トークンとされており、Pi はその 1/5〜1/10未満 の規模
  • 基本ツールは read bash edit write の4つだが、実際に配布されているパッケージには grep find ls が追加され、現在は7ツール構成になっている

Pi とは何か

Pi は npm パッケージ @earendil-works/pi-coding-agent として配布されているターミナル向けコーディングエージェントです。もともとは Zechner 個人の badlogic/pi-mono リポジトリで開発されていましたが、2026年4月に Zechner が Ronacher 共同創業のスタートアップ Earendil への合流を発表し1、これに伴い2026年5月7日にリポジトリは earendil-works/pi へ移管されました2

設計思想は「ツールを絞り、システムプロンプトを極小に保つ」ことです。Pi の熱心な利用者でもある Ronacher は、自身のブログで初期設計についてこう説明しています。

It has the shortest system prompt of any agent that I'm aware of and it only has four tools: Read, Write, Edit, Bash.
Pi: The Minimal Agent Within OpenClaw(2026-01-31)

技術ブログ Tensorlake の分析では、Pi のシステムプロンプトは 1,000トークン未満 で、Claude Code・OpenCode は約1万トークン、Cline は約7千トークンと比較されています3。この「10倍近い差」という主張が本当かどうか、自分の手元で確かめてみました。

実際にインストールして動かしてみた

インストール

npm install -g --ignore-scripts @earendil-works/pi-coding-agent

--ignore-scripts を付けているのは、postinstall スクリプトを実行させないためです(公式 README でもこの形が案内されています)。curl 経由のワンライナーも用意されています。

curl -fsSL https://pi.dev/install.sh | sh

インストール後、実際に確認できたバージョンとヘルプは以下の通りです。

$ pi --version
0.80.3

$ pi --help
pi - AI coding assistant with read, bash, edit, write tools

Usage:
  pi [options] [@files...] [messages...]
...
Options:
  --provider <name>              Provider name (default: google)
  --model <pattern>              Model pattern or ID
  --print, -p                    Non-interactive mode: process prompt and exit
  --continue, -c                 Continue previous session
  --no-tools, -nt                Disable all tools by default
  --tools, -t <tools>            Comma-separated allowlist of tool names
  ...

意外だったのは --providerデフォルトが google になっている点です。Anthropic 製ではなく、マルチプロバイダー対応であることが最初のヘルプ表示だけで伝わってきます。Anthropic の Claude を使いたい場合は pi --provider anthropic --api-key <key> のように明示する必要があります。

基本的な使い方

pi -p "このディレクトリのTypeScriptファイルを一覧して"   # 非対話・一回きり
pi -c                                                  # 直前のセッションを継続
pi --provider openai --model gpt-4o                    # プロバイダを切り替え
cat README.md | pi -p "この内容を要約して"              # パイプ入力

-p の非対話モードは CI やスクリプトに組み込みやすく、--mode json を付ければ構造化出力も得られます。

システムプロンプトを実測してみた

Pi のシステムプロンプトは固定テキストではなく、dist/core/system-prompt.jsbuildSystemPrompt() 関数が実行時に動的生成しています。ソースを読むと、有効なツール一覧・ガイドライン・ドキュメントへのパス・現在日時などを組み立てて1つの文字列にしていることが分かりました。

そこで、インストール済みパッケージのこの関数を Node から直接呼び出し、公式のデフォルトツール構成(read bash edit write)でシステムプロンプトを生成してみました。

import { buildSystemPrompt } from "@earendil-works/pi-coding-agent/dist/core/system-prompt.js";

const toolSnippets = {
  read: "Read file contents",
  write: "Create or overwrite files",
  edit: "Make precise file edits with exact text replacement, including multiple disjoint edits in one call",
  bash: "Execute bash commands (ls, grep, find, etc.)",
};

const prompt = buildSystemPrompt({
  cwd: "/home/user/example-project",
  selectedTools: ["read", "bash", "edit", "write"],
  toolSnippets,
  promptGuidelines: [],
});

console.log(prompt.length, "chars");
console.log(prompt.trim().split(/\s+/).length, "words");

実行結果は以下の通りでした。

1866 chars
238 words

生成された実際のプロンプトの冒頭部分はこうなっています(ドキュメントパスなど環境依存部分は一部省略)。

You are an expert coding assistant operating inside pi, a coding agent harness.
You help users by reading files, executing commands, editing code, and writing new files.

Available tools:
- read: Read file contents
- bash: Execute bash commands (ls, grep, find, etc.)
- edit: Make precise file edits with exact text replacement, including multiple disjoint edits in one call
- write: Create or overwrite files

Guidelines:
- Use bash for file operations like ls, rg, find
- Be concise in your responses
- Show file paths clearly when working with files
...

1,866文字は英語テキストとして概算すると470トークン前後(英語は1トークンあたり平均4文字弱が目安)で、Tensorlake が挙げている「1,000トークン未満」という主張と矛盾しない結果でした。プロジェクト固有の AGENTS.md やスキルを読み込ませればこの数値は伸びますが、土台部分がこの薄さ というのは、実際にコードを動かして初めて確認できた発見でした。

他エージェントとの比較

ツール システムプロンプトの目安 出典
Pi(実測) 約470トークン(1,866文字) 自己実測(本記事)
Cline 約7,000トークン Tensorlake調べ3
Claude Code 約10,000トークン Tensorlake調べ3
OpenCode 約10,000トークン以上 Tensorlake調べ3

Pi 以外は Tensorlake による推定値で公式発表ではありませんが、実測できた Pi の数値だけ見ても一桁近い差があるのは確かです。

ツール構成は4つから7つに増えていた

Ronacher の1月のブログ記事では「ツールは4つだけ(Read, Write, Edit, Bash)」と説明されていましたが、現在配布されている @earendil-works/pi-coding-agent のソースを見ると、grep find ls の3つが追加され、組み込みツールは7つ になっていました。各ツールファイルの promptSnippet を1件ずつ抜粋すると以下の通りです。

$ grep -rn "promptSnippet" dist/core/tools/*.js
ファイル promptSnippet
bash.js "Execute bash commands (ls, grep, find, etc.)"
edit.js "Make precise file edits with exact text replacement..."
find.js "Find files by glob pattern (respects .gitignore)"
grep.js "Search file contents for patterns (respects .gitignore)"
ls.js "List directory contents"
read.js "Read file contents"
write.js "Create or overwrite files"

MCP やサブエージェント機能を持たない方針は変わっていませんが、「ファイル探索も bash 1本に押し込む」という最初の割り切りは実運用の中で緩められたようです。ミニマル設計は固定ではなく、使い勝手とのバランスで調整され続けています。

ハマりポイント

  • デフォルトプロバイダが Google: Anthropic の API キーだけ用意していると pi -p "..." はそのままでは動きません。--provider anthropic を明示するか pi config で設定を変更してください。
  • --ignore-scripts の意味: postinstall を無効化してインストールするため、初回起動時の追加セットアップ処理が走りません。トラブル時は README の Quickstart を再確認してください。
  • バージョンの上がり方が速い: 検証時点で 0.80.3 でした。ソース内部のパス等はマイナーバージョンで変わり得るため、コード例は実行時点のものと考えてください。

著者視点の発見ポイント

ブログの「1,000トークン未満」という主張を鵜呑みにせず、実際に npm install してソースのプロンプト生成関数を直接呼び出したところ、1,866文字・238語という再現性のある数値が得られました。あわせてソースを読んだことで、公開当初「4ツールのみ」だった設計が grep find ls を加えた7ツールに増えていることにも気づけました。紹介記事だけでは分からなかった「ミニマル哲学は運用の中で調整され続けている」という実態が、手を動かして初めて見えてきました。

まとめ

  • Pi はシステムプロンプトの薄さを売りにするコーディングエージェントで、実測でも1,866文字(約470トークン)と非常にコンパクトだった
  • Claude Code・OpenCode(約1万トークン)・Cline(約7千トークン)との差は、他ツール側が推定値であることを差し引いても大きい
  • 「4ツールのみ」という初期設計は、実際の配布パッケージでは7ツールに拡張されている
  • システムプロンプトのサイズは buildSystemPrompt() のようなビルド関数を直接呼び出せば、公式ブログの主張に頼らず自分の手元で検証できる

今後は、実際にAPIキーを設定してタスクを解かせた場合の挙動やレイテンシも試してみたいと思います。

参考リンク

  1. Mario and Earendil — Mario Zechner の Earendil 合流発表(2026年4月8日)

  2. Pi Has a New Home at Earendil — リポジトリが badlogic/pi-mono から earendil-works/pi へ移管された経緯(2026年5月7日)

  3. Pi: a coding agent with efficient system prompting(Tensorlake Engineering Blog, 2026-04-29)Claude Code約10,000トークン・OpenCode約10,000トークン以上・Cline約7,000トークンとの比較 2 3 4

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?