Pi — это терминальный coding agent harness, который строится вокруг противоположной всем остальным идеи: не «дать как можно больше готовых функций», а «дать как можно меньше примитивов и позволить достроить остальное самому». Автор формулирует это слоганом на главной странице: «There are many agent harnesses, but this one is yours» — «адаптируй Pi под свои рабочие процессы, а не наоборот».1 За проектом стоит Mario Zechner (известный как badlogic, автор игрового фреймворка libGDX), а сам harness распространяется под лицензией MIT и работает целиком в терминале, без какого-либо SaaS-бэкенда.2
Это эссе разбирает Pi как инженерный артефакт: откуда он взялся, как устроено ядро, что именно даёт система расширения, в чём реальные преимущества и слабые места против конкурентов, и какие рекомендации имеют смысл, если вы решаете, брать ли его в работу.
Откуда взялся Pi и почему «примитивы, а не функции»
Pi родился из раздражения создателя инструментом, которым он пользовался каждый день. Zechner прямо пишет, что ушёл от Claude Code, потому что тот «превратился в космический корабль, 80% функциональности которого мне не нужны».3 Второй мотив — потеря контроля над контекстом: «системный промпт и инструменты меняются с каждым релизом, это ломает мои рабочие процессы и меняет поведение модели. Я это ненавижу».3
Из этой боли выросла центральная инженерная гипотеза Pi: context engineering решает всё. Zechner формулирует так: «точный контроль над тем, что попадает в контекст модели, даёт лучший результат, особенно когда она пишет код», а существующие harness’ы делают этот контроль «крайне трудным или невозможным, подсовывая в контекст то, что даже не видно в интерфейсе».3 Отсюда третье требование — полная наблюдаемость: «я хочу инспектировать каждый аспект моего взаимодействия с моделью».3
Философия «primitives, not features» — это не маркетинговая поза, а проектное ограничение. Pi намеренно не имеет MCP, sub-agents, plan mode и встроенных to-do списков. Логика автора: всё это можно собрать из более простых примитивов — файлов, bash, tmux, расширений — не вшивая в ядро.4 Расширение пишет не команда Pi, а сам пользователь — или даже сама модель, которая «очень хорошо умеет писать и запускать код».5 Отсюда самый необычный сюжет вокруг Pi: harness достаточно мал и наблюдаем, чтобы агент дописывал себе инструменты на лету. Zechner показывает, как «Pi строит сам себя», а Pragmatic Engineer разбирает этот класс самомодифицирующегося софта отдельным материалом.67
Архитектура ядра
Четыре инструмента
Дизайн-ядро Pi — четыре инструмента: read, write, edit, bash. Вывод автора категоричен: «этих четырёх инструментов достаточно для эффективного coding-агента».3 К текущей версии к ним добавились три тонких built-in — grep, find, ls,8 — но принцип прежний: всё остальное (запуск тестов, работа с git, прочие утилиты) модель делает через bash, читая при необходимости README нужной CLI. Минимализм даёт короткий системный промпт: вместе с определениями инструментов он укладывается менее чем в 1000 токенов против 7–10 тысяч у зрелых конкурентов.3
Четыре режима работы
Одно и то же агентное ядро доступно через четыре интерфейса:9
- Interactive TUI — обычный терминальный интерфейс для человека.
- Print / JSON — однократный запуск с машиночитаемым выводом, для скриптов и пайплайнов.
- RPC — двусторонний протокол поверх stdin/stdout для встраивания в другой процесс.
- SDK — программное встраивание Pi прямо в TypeScript-приложение.
TUI — лишь один из фасадов; RPC и SDK позволяют использовать Pi без терминала вообще. Это ключевой момент для автоматизации: тот же агент, что отвечает вам в консоли, может работать headless внутри CI или другого сервиса.
Агентный цикл и дерево сессий
Цикл прост: пользователь отправляет промпт через session.prompt() → модель генерирует ответ и вызовы инструментов → инструменты выполняются и возвращают результат → цикл повторяется до завершения хода.9 Поверх этого Pi хранит историю не линейно, а деревом: сессии можно ветвить, переключаться между ветками, форкать и клонировать.10 Сессии автоматически сохраняются в ~/.pi/agent/sessions/, их можно экспортировать в HTML и шарить через GitHub gist.8 Дерево — не косметика, а инструмент для исследовательской отладки: можно увести разговор в сторону, упереться в тупик и вернуться к точке ветвления без потери основного контекста.
Context engineering как первоклассная механика
Управление контекстом в Pi разложено на три независимых механизма, работающих вместе:
- Авто-компакция. Когда
contextTokens > contextWindow − reserveTokens, Pi запускает LLM-суммаризацию старых сообщений, сохраняя последниеkeepRecentTokens(по умолчанию 20 000). Резка идёт только по валидным границам — никогда посреди результата инструмента.11 - Суммаризация веток. При переключении между ветвями дерева контекст брошенной ветки сворачивается в резюме.11
- Progressive disclosure для skills. В системный промпт попадают только имена и описания навыков; полная инструкция подгружается по требованию, когда модель решает навык применить.12
Проектные инструкции Pi читает из файлов AGENTS.md (а также совместимо с CLAUDE.md) — из текущей директории, родительских и глобального конфига.8
Модели и провайдеры
Pi через свой пакет pi-ai (унифицированный LLM API) поддерживает более 30 провайдеров: Anthropic, OpenAI, Google Gemini, Azure OpenAI, AWS Bedrock, Google Vertex AI, Mistral, Groq, Cerebras, DeepSeek, NVIDIA NIM, xAI, OpenRouter, Hugging Face, Fireworks, Together AI и ряд региональных.13 Локальные эндпоинты (Ollama, LM Studio, vLLM) подключаются через models.json.13 Модель можно переключать прямо посреди сессии. Это снимает vendor lock-in на уровне архитектуры, а не отдельной интеграции.
Вместе с моделью настраивается и уровень размышления (thinking level) — off, minimal, low, medium, high, xhigh. Его задают флагом --thinking, в /settings или прямо в имени модели (sonnet:high), а в headless-режиме меняют на лету RPC-командой set_thinking_level.810 Для harness, построенного вокруг точного управления контекстом, это ещё один рычаг: дозировать reasoning под задачу, а не платить за него всегда.
Расширяемость: где Pi раскрывается
Здесь Pi показывает свою настоящую природу. Ядро остаётся маленьким, а вся мощь живёт в системе расширений на TypeScript. Модули грузятся через jiti (JIT-транспайлер), так что компиляция не нужна — правишь файл, расширение перезагружается.14
Extensions API
Расширение — это TypeScript-модуль, который умеет: регистрировать инструменты для модели через pi.registerTool(), подписываться на события жизненного цикла (session_start, tool_call, message_end и другие), перехватывать и блокировать операции, добавлять команды и горячие клавиши через registerCommand() и registerShortcut().15 Минимальный пример из официальных примеров выглядит так:
export default function (pi) {
pi.on("session_start", async (_event, ctx) => {
ctx.ui.notify("Extension loaded!", "info");
});
pi.registerTool({
name: "greet",
description: "Greet someone",
parameters: Type.Object({ name: Type.String() }),
async execute(toolCallId, params, signal, onUpdate, ctx) {
return {
content: [{ type: "text", text: `Hello, ${params.name}!` }],
details: {},
};
},
});
}
Схемы параметров типобезопасны через TypeBox. В репозитории лежит более 50 рабочих примеров расширений — от permission-gate и protected-paths (safety-слой) до делегирования всех инструментов на удалённую машину по SSH и git-воркфлоу.14
SDK
Точка входа для встраивания — фабрика createAgentSession(), которая инициализирует агента с настраиваемыми моделью, инструментами, расширениями, навыками и файлами контекста; AgentSession управляет жизненным циклом разговора — историей, стримингом, подпиской на события.9 В простейшем виде это одна строка:
const { session } = await createAgentSession();
Официальные SDK-примеры идут лесенкой от 01-minimal.ts (минимум) через выбор модели, кастомный промпт, фильтрацию навыков, allowlist инструментов, расширения, файлы контекста до полного контроля (12-full-control.ts) и управления рантаймом сессии (13-session-runtime.ts).16 Именно через SDK Pi встраивают в более крупные продукты: по ряду источников, агентное ядро Pi лежит в основе ассистент-платформы OpenClaw, которая подключает createAgentSession() из @earendil-works/pi-agent-core напрямую.5
RPC
RPC-режим даёт headless-управление через строгий JSONL поверх stdin/stdout (один JSON-объект на строку, разделитель — только LF; клиентам нельзя использовать readline-библиотеки, которые режут по Unicode-сепараторам).10 Команды покрывают промптинг (prompt, steer, follow_up), управление состоянием (get_state, get_messages), управление моделью (set_model, cycle_model) и операции над сессиями (fork, clone, switch_session); события стримятся асинхронно.10
Skills, packages, themes, custom providers
- Skills реализуют стандарт Agent Skills: директория с
SKILL.md(frontmatternameдо 64 символов +descriptionдо 1024 + инструкции) и опциональнымиscripts/,references/,assets/. Обнаруживаются из~/.pi/agent/skills/,.pi/skills/, npm-пакетов и аргументов CLI.12 - Packages упаковывают extensions, skills, prompt-шаблоны и themes для распространения. Манифест описывается в
package.jsonв секцииpi, установка —pi install npm:@foo/bar,pi install git:github.com/user/repoили из локального пути; при конфликте имён приоритет у project-уровня над global.17 - Custom providers регистрируются через
pi.registerProvider()— можно переопределить существующий провайдер (подменитьbaseUrl/заголовки, например для прокси) или добавить новый с полным описанием моделей, аутентификацией (API-ключ, OAuth, кастомные заголовки) и нестандартным стримингом черезstreamSimple().18 - Themes — hot-reloadable JSON-файлы с 51 обязательным цветовым токеном.19
Вот точка, которую стоит осознать: «отсутствующие» функции (MCP, sub-agents, plan mode) — это не дыры, а домашнее задание. Sub-agent собирается делегированием инструментов через расширение; plan mode — внешним файлом плана, который переживает сессии; фоновые процессы — через tmux с полной наблюдаемостью.34 Pi не запрещает эти паттерны — он отказывается принимать за вас решение, как именно они должны работать.
Преимущества перед альтернативами
Если сравнивать Pi с зрелыми конкурентами (Claude Code, opencode, Aider, Codex CLI), его сильные стороны очерчены чётко.
| Свойство | Pi | Типичный конкурент |
|---|---|---|
| Системный промпт | < 1000 токенов3 | 7–10 тысяч токенов |
| Инструменты ядра | 7: read/write/edit/bash + grep/find/ls8 | 10+ встроенных |
| Провайдеры моделей | 30+, переключение в сессии13 | часто привязка к вендору (Claude Code → Anthropic)20 |
| Лицензия / стоимость | MIT, платишь только за токены провайдера2 | подписка (Claude Code — от $20/мес)20 |
| История | дерево с ветвлением10 | линейная |
| Расширение | TypeScript-модули, hot-reload, in-process15 | плагины/конфиг разной глубины |
| Самомодификация | агент может писать себе расширения5 | редко |
Три преимущества заслуживают отдельного акцента.
Контроль над контекстом. Это исходный смысл проекта. Вы видите и можете изменить системный промпт, инжектировать контекст по-турно, перехватить ввод до того, как агент его обработает, манипулировать окном контекста.21 Для задач, где качество вывода критично, точное управление контекстом — рычаг, которого у закрытых harness’ов просто нет.
Свобода провайдеров без lock-in. 30+ провайдеров и локальные модели за унифицированным API означают, что выбор модели — ваше решение в рантайме, а не архитектурное обязательство.13 Это же делает Pi дешёвым для лёгкого использования: нет фиксированной подписки, платите по токенам (на дешёвых моделях это единицы долларов в месяц).20
Программируемость. SDK и RPC превращают Pi из «инструмента» в «библиотеку для сборки агентов». Это редкое свойство в классе терминальных агентов и главная причина, почему Pi выбирают как фундамент для других продуктов.516
Trade-offs и ограничения
Честная оценка требует развернуть и обратную сторону.
Минимализм — это работа, переложенная на вас. Чтобы получить паритет по функциям с opencode или Claude Code, придётся писать расширения на TypeScript.21 Сравнения прямо фиксируют: opencode идёт «из коробки» с LSP, MCP, sub-agents и мультисессиями, тогда как Pi требует ручной достройки.21 Для команды, которой нужны «отполированные дефолты с минимальной конфигурацией», это налог, а не свобода.
Только терминал. Нет IDE-расширений и GUI; это сознательный выбор, но он сужает аудиторию по сравнению с конкурентами, у которых есть интеграция в VS Code.
Экосистема и зрелость. Pi молод (на момент написания — версия v0.79.3 от 13 июня 2026, без релиза 1.0), API и поведение ещё меняются.2 Это значит периодические breaking changes и меньший корпус документации и готовых рецептов, чем у проектов с многолетней историей. В 2026 году проект перешёл под управление Earendil Inc. — Public Benefit Corporation, основанной Armin Ronacher и Colin Daymond Hanna: компания приобрела Pi, Mario Zechner перешёл в неё, а сам harness продолжает развиваться как open source под её управлением.2223 Второй продукт Earendil — Lefos, переосмысляющий электронную почту как «командную строку для вдумчивой работы и коммуникации»; Pi при этом служит минимальным агентом внутри ассистент-платформы OpenClaw.22
Управление доступами провайдеров — на вас. Гибкость 30+ провайдеров оборачивается тем, что аутентификация, лимиты, биллinг по каждому ключу остаются вашей заботой, а не абстрагированы за подпиской.21
Человеческий фактор. Это не специфика Pi, но его минимализм усиливает проблему: по наблюдениям Pragmatic Engineer, команды, активно использующие агентов, рискуют деградацией качества кода — агенты бесконечно расширяют плохую структуру без стимула её упрощать, накапливая технический долг.6 Минимальный harness не подстелет соломки; дисциплину код-ревью придётся держать самому.
Безопасность: YOLO как явная позиция
Это самый важный пункт для тех, кто думает о production. Pi по умолчанию работает в режиме полного доверия. Цитата автора недвусмысленна: «pi работает в полном YOLO-режиме и предполагает, что вы знаете, что делаете. У него неограниченный доступ к файловой системе, и он может выполнить любую команду без проверок и страховочных рельсов».3
Обоснование прагматично: как только агент может писать и запускать код с доступом к сети, «вы играете в whack-a-mole с векторами атак», и security theater даёт лишь ложное чувство комфорта.3 Позиция спорная, но интеллектуально честная. Проблема в том, что она перекладывает изоляцию на пользователя, а многие изоляцию не настроят.
Угрозы реальны и описаны независимо: агент с неограниченным bash может похитить учётные данные, подменить git-хуки и build-скрипты (изменения сработают позже в обычном цикле без немедленного обнаружения), эксфильтровать данные по сети.24 Сообщество ответило обёртками вроде pi-less-yolo, которые запускают Pi в изолированном Docker-контейнере-песочнице; это «осмысленное снижение риска, но не гарантия безопасности».25
Практический вывод: для production-использования Pi нужна явная контейнеризация или permission-слой через расширение, а не опора на дефолты. Permission-gate — один из штатных примеров расширений, так что слой подтверждений собирается, но собирать его придётся вам.14
Рекомендации: что предложить и на что обратить внимание
Кому Pi подходит:
- Терминал-нативным разработчикам, которым важен контроль над контекстом и наблюдаемость.
- Командам, строящим собственного агента поверх Pi SDK/RPC (это, по сути, его сильнейший сценарий).
- DevOps/CI-автоматизации с явно заданными границами в
AGENTS.mdи отслеживанием изменений через git. - Тем, кто хочет уйти от vendor lock-in и гонять разные модели, включая локальные.
Кому стоит выбрать другое:
- Командам, которым нужны отполированные дефолты и фичи «из коробки» без TypeScript-обвязки — посмотрите на opencode или Claude Code.
- Тем, кто работает в shared/недоверенных окружениях без контейнеризации.
- Организациям с требованиями compliance/audit и потребностью в SLA — Pi молод и гарантий не даёт.
На что обратить внимание при внедрении:
- Сначала изоляция. Не запускайте YOLO-Pi на машине с боевыми секретами. Контейнер или выделенная среда — до первого запуска, а не после инцидента.
- Границы в
AGENTS.md. Минимальный промпт означает мало встроенных ограничений; формулируйте правила и инварианты явно в проектных инструкциях. - Версионируйте всё под git. Это и история изменений, и точка отката после неудачного хода агента.
- Закрепите версию Pi. При активном развитии API возможны breaking changes; пинуйте конкретную версию и держите стратегию обновления.
- Относитесь к выводу как к коду джуна. Обязательное senior-ревью, а не «production-ready по умолчанию».6
- Инвестируйте в расширения как в актив. Если вы пишете permission-gate, делегирование на удалённый хост или интеграцию с внутренними CLI — оформляйте это пакетом и переиспользуйте между проектами.17
Что я бы предложил конкретно: начать не с замены повседневного агента, а с встраивания через SDK/RPC в одну узкую автоматизацию (например, генерация и проверка миграций или разбор логов в CI), где ценность точного контроля контекста максимальна, а риск ограничен изолированной средой. Это даёт пощупать сильнейшую сторону Pi без ставки на незрелую экосистему в критичном пути.
Insufficient Evidence
- Бенчмарки. Звучали утверждения о высоком месте Pi на Terminal-Bench, но чистого верифицируемого score для harness’а Pi найти не удалось — есть только самопубликуемый адаптер
badlogic/pi-terminal-benchдля прогона эвалов, а конкретные проценты в обзорах противоречивы и относятся к моделям, а не к harness’у.26 Числовые результаты в эссе сознательно не приводятся. - Метрики adoption. Число звёзд GitHub (~62.7k) подтверждено напрямую,2 но npm-загрузки и точные масштабы потребителей SDK (в частности, звёздные счётчики OpenClaw, расходившиеся между источниками от ~145k до ~378k) не верифицированы и в эссе не используются как факты.
- Лицензионная стратегия после Earendil. Переход репозитория
badlogic/pi-mono→earendil-works/piпод управление Earendil подтверждён первоисточниками.2223 Открытым остаётся другое — будущая лицензионная политика для не-ядровых компонентов: это риск, который стоит мониторить, а не установленный факт.
Quality Metrics
| Метрика | Значение |
|---|---|
| Режим | deep |
| Источников найдено | 36 |
| Источников процитировано | 26 |
| Микс источников | official: 14, blog: 8, industry: 3, news: 1 |
| Покрытие цитатами | ~94% |
| Sub-questions | 4 |
| Раундов исследования | 2 (initial + targeted verification) |
| Adversarial/skeptic-перспектива | да (отдельный sub-agent + первоисточники) |
| Load-bearing факты верифицированы из первоисточников | репозиторий, блог автора, official docs |
| Failure-mode audit | M1 pass, M2 fixed:2, M3 pass, M4 fixed:1 (сняты неверифицированные числа) |
Pi — официальный сайт. https://pi.dev ↩︎
earendil-works/pi (ранее badlogic/pi-mono) — репозиторий, README, метаданные. MIT, v0.79.3 (2026-06-13). https://github.com/earendil-works/pi ↩︎ ↩︎ ↩︎ ↩︎
Mario Zechner. «What I learned building an opinionated and minimal coding agent.» 2025-11-30. https://mariozechner.at/posts/2025-11-30-pi-coding-agent/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Rushi Subramanian. «Pi: The Coding Agent Built Around What It Won’t Do.» 2026. https://www.rushis.com/pi-the-coding-agent-built-around-what-it-wont-do ↩︎ ↩︎
Armin Ronacher. «Pi: The Minimal Agent.» lucumr.pocoo.org, 2026-01-31. https://lucumr.pocoo.org/2026/1/31/pi/ ↩︎ ↩︎ ↩︎ ↩︎
The Pragmatic Engineer. «Building Pi, and what makes self-modifying software so fascinating.» 2026. https://newsletter.pragmaticengineer.com/p/building-pi-and-what-makes-self-modifying ↩︎ ↩︎ ↩︎
Armin Ronacher. «Building Pi With Pi.» lucumr.pocoo.org, 2026-05-24. https://lucumr.pocoo.org/2026/5/24/pi-oss/ ↩︎
Pi docs — Usage / context files. https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/usage.md ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Pi docs — SDK. https://pi.dev/docs/latest/sdk ↩︎ ↩︎ ↩︎
Pi docs — RPC. https://pi.dev/docs/latest/rpc ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Pi docs — Compaction. https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/compaction.md ↩︎ ↩︎
Pi docs — Skills. https://pi.dev/docs/latest/skills ↩︎ ↩︎
Pi docs — Providers. https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/providers.md ↩︎ ↩︎ ↩︎ ↩︎
Pi — примеры расширений. https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/examples/extensions/README.md ↩︎ ↩︎ ↩︎
Pi docs — Extensions. https://raw.githubusercontent.com/badlogic/pi-mono/main/packages/coding-agent/docs/extensions.md ↩︎ ↩︎
Pi — примеры SDK. https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/examples/sdk ↩︎ ↩︎
Pi docs — Packages. https://pi.dev/docs/latest/packages ↩︎ ↩︎
Pi docs — Custom providers. https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/custom-provider.md ↩︎
Pi docs — Themes. https://pi.dev/docs/latest/themes ↩︎
Alex Dunlop. «Pi vs Claude Code: Which AI Coding Agent in 2026?» https://www.alexdunlop.com/writing/pi-vs-claude-code-which-ai-coding-agent-in-2026 ↩︎ ↩︎ ↩︎
«OpenCode vs Pi: Which Terminal AI Coding Agent Actually Fits Your Workflow?» 2026. https://medium.com/@codexpedite/opencode-vs-pi-which-terminal-ai-coding-agent-actually-fits-your-workflow-a9c2ab5fcc2b ↩︎ ↩︎ ↩︎ ↩︎
Earendil. «Announcing Pi & Lefos.» https://earendil.com/posts/announcing-pi-and-lefos/ ↩︎ ↩︎ ↩︎
Armin Ronacher. «Mario and Earendil.» lucumr.pocoo.org, 2026-04-08. https://lucumr.pocoo.org/2026/4/8/mario-and-earendil/ ↩︎ ↩︎
VirtusLab. «Sandboxing LLM coding agents: part 1.» 2026. https://virtuslab.com/blog/ai/sandboxing-llm-coding-agents-part1 ↩︎
pi-less-yolo — обёртка для запуска Pi в Docker-песочнице. https://github.com/cjermain/pi-less-yolo ↩︎
Ry Walker. «Pi Coding Agent — research analysis.» 2026. https://rywalker.com/research/pi ↩︎