コーディングエージェント pi は、ユーザーが打ったテキストを
5つの層を通してから LLM に渡している。
その「層」が何で、なぜ偉いのかを1枚にしてみた。
ユーザー入力から LLM への送信まで。順番に意味がある。
/cmd を直接実行。LLM を呼ばずに自前処理で完結できる。
拡張がユーザーの発話そのものを書き換える。画面にも書き換え後が残る。
/skill:name や /template を本文に展開。画面はクリーン、LLM にはフル本文。
LLM に渡す直前に system prompt や追加 message を裏で注入。画面は無風。
組み立てたものを送信。全部 session.jsonl に残る。
普通のチャット UI と pi の決定的な差を、3点だけ。
/skill:name は画面 1 行、LLM には数百行before_agent_start が system prompt を注入「フックがいっぱい」じゃない。重複がないのが偉い。やりたいことごとに、最適な差し込み口がひとつだけ決まる。 しかも早い層は後段をスキップできる = 軽い処理は手前で吸って、LLM コストをかけない階段構造。
そして全部、本体をフォークせずに拡張用ディレクトリへ 10〜20 行の TypeScript を置くだけで割り込める。 「ちょっと不便だな」が「明日には拡張で直してる」になる。
read で取りに行くこれだけで、画面に何が出るかを毎回正しく予測できる。
npm から1行。気に入ったら、自分用の拡張を1個書いてみてほしい。