Pi Coding Agent 拡張サンプル一覧
執筆時のPiバージョン: 0.85.1
Piのインストールフォルダ/examples/extensions/ 以下に公式サンプル拡張が沢山ありますが、ひとつひとつ見る時間がないのでLLMに説明してもらいました。
インストールフォルダはwhich piで確認してください。
使い方:
# 一時的に読み込んで試す
pi -e examples/extensions/notify.ts
# 常用するなら auto-discovery 位置へコピー(/reload 対応)
cp notify.ts ~/.pi/agent/extensions/ # 全プロジェクトで有効
cp notify.ts .pi/extensions/ # そのプロジェクトのみ有効
ライフサイクル & 安全性
| ファイル | 説明 |
|---|---|
permission-gate.ts |
rm -rf、sudo など危険なbashコマンド実行前に確認ダイアログを表示 |
project-trust.ts |
project_trust イベントによるプロジェクト信頼の処理をデモ |
protected-paths.ts |
保護パス(.env、.git/、node_modules/)への書き込みをブロック |
confirm-destructive.ts |
セッション破壊的操作(clear / switch / fork)の前に確認 |
dirty-repo-guard.ts |
未コミットの変更がある場合にセッション操作を防止 |
sandbox/ |
@anthropic-ai/sandbox-runtime によるOSレベルのサンドボックス化(プロジェクト別設定) |
gondolin/ |
組み込みツールと ! コマンドを Gondolin マイクロVMにルーティング |
カスタムツール
| ファイル | 説明 |
|---|---|
todo.ts |
Todoリストツール + /todos コマンド(カスタム描画・状態の永続化) |
hello.ts |
最小構成のカスタムツール例 |
question.ts |
ctx.ui.select() でユーザーに質問するUIをデモ |
questionnaire.ts |
タブバーで移動できる複数質問の入力フォーム |
tool-override.ts |
組み込みツールの上書き(例: read にロギング/アクセス制御を追加) |
dynamic-tools.ts |
起動後や実行時コマンド経由でツールを登録(プロンプト断片・ガイドライン付き) |
kimi-deferred-tools.ts |
Kimiの遅延ツールローディングプロトコル対応(検索→段階的有効化) |
structured-output.ts |
terminate: true を返してエージェントを終了させる構造化出力ツール |
built-in-tool-renderer.ts |
組み込みツール(read / bash / edit / write)のコンパクト表示(挙動は維持) |
minimal-mode.ts |
ツール呼び出しだけ表示し出力を省くミニマル表示への上書き |
truncated-tool.ts |
出力の適切な切り詰め(50KB / 2000行)付きの ripgrep ラッパー |
ssh.ts |
全ツールをSSH経由でリモートマシンに委譲 |
subagent/ |
隔離されたコンテキストを持つ専門サブエージェントにタスクを委譲 |
コマンド & UI
| ファイル | 説明 |
|---|---|
preset.ts |
モデル・thinking レベル・ツール・指示の名前付きプリセット(--preset と /preset) |
plan-mode/ |
Claude Code風プランモード(読み取り専用探索、/plan コマンド、ステップ追跡) |
tools.ts |
ツールの有効/無効を切り替える対話的 /tools コマンド(セッションで永続) |
handoff.ts |
コンテキストを新しい集中セッションに引き継ぐ /handoff <goal>
|
qna.ts |
最終応答から質問を抽出してエディタに流し込む(ctx.ui.setEditorText()) |
status-line.ts |
フッターにターン進捗を表示(ctx.ui.setStatus()) |
github-issue-autocomplete.ts |
#1234 形式のIssue番号オートコンプリート(gh issue list から取得) |
widget-placement.ts |
エディタの上下にウィジェットを配置(ctx.ui.setWidget()) |
hidden-thinking-label.ts |
折りたたみ時のthinkingラベルをカスタマイズ |
working-indicator.ts |
ストリーミング中のworking表示をカスタマイズ |
model-status.ts |
モデル変更をステータスバーに表示(model_select フック) |
send-user-message.ts |
pi.sendUserMessage() で拡張からユーザーメッセージを送信するデモ |
timed-confirm.ts |
AbortSignal による自動消滅する confirm / select ダイアログ |
rpc-demo.ts |
RPC対応の拡張UIメソッドを全て試す(rpc-extension-ui.ts とペア) |
modal-editor.ts |
Vim風モーダルエディタ(ctx.ui.setEditorComponent()) |
rainbow-editor.ts |
虹色アニメーションするカスタムエディタ |
notify.ts |
エージェント完了時にデスクトップ通知(OSC 777 / Ghostty, iTerm2, WezTerm) |
titlebar-spinner.ts |
動作中にターミナルタイトルへ点字スピナーをアニメーション表示 |
summarize.ts |
会話をGPT-5.2で要約して一時UIに表示 |
custom-footer.ts |
ブランチ名とトークン統計を含むカスタムフッター |
custom-header.ts |
カスタムヘッダー(ctx.ui.setHeader()) |
overlay-test.ts |
インライン入力付きオーバーレイ合成のテスト |
overlay-qa-tests.ts |
オーバーレイQAテスト(アンカー・マージン・重なり・オーバーフロー・アニメーション) |
doom-overlay/ |
35FPSで動くDOOM(オーバーレイのリアルタイム描画デモ)🎮 |
shutdown-command.ts |
ctx.shutdown() を使う /quit コマンド |
reload-runtime.ts |
安全なリロードフローを示す /reload-runtime と reload_runtime ツール |
interactive-shell.ts |
user_bash フックで vim、htop など対話コマンドをフル端末で実行 |
inline-bash.ts |
プロンプト中の !{command} を展開(input イベント変換) |
input-transform-streaming.ts |
ストリーミング中のステアリング用に重い前処理をスキップ(streamingBehavior) |
snake.ts |
カスタムUI・キー入力・セッション永続化を持つスネークゲーム |
space-invaders.ts |
Kittyキーボードプロトコル(押下/解放検出)による滑らかな移動のゲーム /invaders
|
tic-tac-toe.ts |
エージェントと対戦する三目並べ(executionMode: "sequential" で競合回避) |
Git 連携
| ファイル | 説明 |
|---|---|
git-checkpoint.ts |
各ターンでstashチェックポイントを作成し、fork時にコード復元可能に |
auto-commit-on-exit.ts |
終了時に最後のアシスタントメッセージをコミットメッセージにして自動コミット |
git-merge-and-resolve.ts |
毎ターン後にfetch & merge。競合時はエージェントに競合ブロック一覧を送り解決させる |
システムプロンプト & コンパクション
| ファイル | 説明 |
|---|---|
pirate.ts |
systemPromptAppend でシステムプロンプトを動的変更(海賊語にするだけのデモ) |
claude-rules.ts |
.claude/rules/ フォルダを走査してルール一覧をシステムプロンプトに載せる |
prompt-customizer.ts |
有効なツール/スキルに応じたガイダンスを systemPromptOptions で追加 |
system-prompt-header.ts |
システムプロンプトの長さをステータスウィジェット表示(ctx.getSystemPrompt()) |
custom-compaction.ts |
会話全体を要約するカスタムコンパクション |
trigger-compact.ts |
コンテキストが100kトークン超えたら自動コンパクト + /trigger-compact コマンド |
システム統合
| ファイル | 説明 |
|---|---|
mac-system-theme.ts |
macOSのダーク/ライトモードとpiテーマを同期 |
bash-spawn-hook.ts |
bash実行前にコマンド・cwd・環境変数を調整するフック |
file-trigger.ts |
トリガーファイルを監視し、内容を会話に注入 |
provider-payload.ts |
プロバイダ送信ペイロードをログ記録(置換も可) |
リソース
| ファイル | 説明 |
|---|---|
dynamic-resources/ |
resources_discover でスキル・プロンプト・テーマを動的ロード |
メッセージ & 通信
| ファイル | 説明 |
|---|---|
message-renderer.ts |
色付き・展開可能詳細付きのカスタムメッセージ描画(registerMessageRenderer) |
entry-renderer.ts |
TUIのみのセッションエントリ描画(appendEntry + registerEntryRenderer) |
event-bus.ts |
pi.events による拡張間通信 |
input-transform.ts |
input イベントでユーザー入力を変換(?quick 接頭辞、ping→pong など) |
セッションメタデータ
| ファイル | 説明 |
|---|---|
session-name.ts |
セッションセレクタ用にセッション名を付ける(setSessionName) |
bookmark.ts |
ラベル付きブックマークで /tree ナビゲーションを補助(setLabel) |
カスタムプロバイダ
| ファイル | 説明 |
|---|---|
custom-provider-anthropic/ |
OAuth対応・カスタムストリーミング実装のAnthropicプロバイダ |
custom-provider-gitlab-duo/ |
pi-ai内蔵のAnthropic/OpenAIストリーミングをプロキシ経由で使うGitLab Duoプロバイダ |
その他
| ファイル | 説明 |
|---|---|
with-deps/ |
独自 package.json と依存を持つ拡張(jitiのモジュール解決のデモ) |
working-message-test.ts |
workingメッセージがターン間で永続するかの検証用テスト |
border-status-editor.ts |
境界付きカスタムエディタコンポーネントの実装例 |
commands.ts |
pi.getCommands() でスラッシュコマンド一覧を表示する /commands
|