pi-subagent
pi-subagent
Превращает Pi CLI (
@earendil-works/pi-coding-agent) в программируемого суб-агента для написания кода, которому любой MCP-хост (ZCode, Claude Code, Cursor, …) может делегировать задачи, отслеживать сессии и завершать процессы.
pi-subagent — это тонкий MCP-сервер, который оборачивает pi -p --mode json в 7 структурированных инструментов: делегирование задач, сбор результатов, принятие решений о планировании, управление именованными сессиями и прерывание запусков. Изоляция на уровне процессов, полностью сессионная модель, синхронный/асинхронный режимы.
Зачем
Pi — это минималистичный терминальный агент для написания кода. Вместо того чтобы обучать Pi методологии, этот проект относится к Pi как к делегируемому работнику: агент-хост (ZCode / Claude Code) решает, когда делегировать задачу, запускает самодостаточную задачу и собирает результат. Один процесс Pi = один изолированный запуск суб-агента.
Изоляция процессов — каждое делегирование порождает один дочерний процесс
pi -p. Сбой Pi затрагивает только этот запуск.Полностью сессионная модель — каждая задача привязывается к именованной сессии (например,
feat-auth); последующие вызовы автоматически продолжают её.Синхронный / асинхронный — по умолчанию
async(позволяет избежать тайм-аутов вызовов инструментов со стороны хоста); сбор результата через long-pollpi_status.Планируемый —
pi_plan— это чистая функция принятия решений из 5 этапов (reject / capacity / reuse / modify / mode), полностью покрытая модульными тестами.Универсальный MCP — любой стандартный MCP-клиент может его загрузить.
Related MCP server: cursor-agent-bridge
Архитектура
┌─────────────────────────────────────────────────────────────┐
│ MCP Host (ZCode / Claude Code / Pi / Cursor …) │
└───────────────────────────┬─────────────────────────────────┘
│ MCP (JSON-RPC over stdio)
▼
┌─────────────────────────────────────────────────────────────┐
│ pi-subagent-server (Node/TS) │
│ ┌────────────┐ ┌──────────────┐ ┌────────────────────┐ │
│ │ Tool layer │ │ Session │ │ Pi runner │ │
│ │ (7 tools) │─▶│ registry │─▶│ (spawn pi -p) │ │
│ │ + plan() │ │ + persist │ │ parse agent_end │ │
│ └─────┬──────┘ │ + _snapshot │ │ + tool_execution │ │
│ │ └──────────────┘ └─────────┬──────────┘ │
│ │ ┌────────▼─────────┐ │
│ └───────────────────────────│ Run registry │ │
│ (kill) │ + process-table │ │
│ └──────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ child_process.spawn({ cwd })
▼
┌─────────────────────┐
│ pi CLI (0.77+) │
└─────────────────────┘Три уровня с чёткими границами: уровень инструментов (MCP-схема + чистая функция plan()) / реестр сессий (состояние + персистентность + очистка) / исполнитель (spawn pi, разбор NDJSON, таблица процессов).
Инструменты
Инструмент | Назначение |
| Решение: нужно ли делегировать, sync/async, сколько сессий |
| Отправка задачи (по умолчанию async; новые сессии ждут рукопожатия) |
| Сбор результата запуска (long-poll) |
| Список сессий (опустите |
| Просмотр одной сессии |
| Ветвление сессии, чтобы опробовать другой путь |
| Прерывание запуска |
| Создание многоэтапной задачи (хост сначала пишет |
| Отправка предметного рецензирования плана (сбор через |
| Запуск одного этапа: sync (ожидание результата) или async (возвращает runId) |
| Сбор асинхронного запуска этапа; автоматическая оценка и повторная отправка (макс. 3), иначе вручную |
| Список задач (фильтр по taskId / статусу) |
Цикл рецензирования: после
pi_task_planсоберите результат черезpi_status(runId). Когда запуск завершается, сервер определяет, что это рецензионный запуск, разбирает_plan-reviewed.mdи сохраняетplanVerdict/planReviewedPathв задаче. Промпты этапов автоматически включают отрецензированный план и выходные файлы успешно пройденных этапов-зависимостей.
Асинхронные этапы: передайте
mode: "async"вpi_task_stage_run, чтобы не блокировать вызов инструмента на весь запуск (рекомендуется, если MCP-хост ограничивает время вызова инструмента). Сбор результата — черезpi_task_stage_collect(taskId, stageId). Неудачные попытки повторно отправляются под новым именем сессии, чтобы избежать загрязнения истории; после 3 неудач этап переходит вmanualс панелью решений (retry_with_new_hintподдерживается черезpromptHintOverride).
Восстановление после перезапуска: повторный запуск
pi_task_createс тем жеtaskIdвыполняет слияние, а не конфликт. Этапы, чей выходной файл уже существует и проходит валидацию, автоматически помечаются какpassed, поэтому прерванные задачи возобновляются без ручного редактированияtasks.json.
Модель сессий
Каждая сессия имеет человекочитаемое имя + UUID Pi +
cwd+goal.Первый
pi_delegateсоздаёт сессию (обязателенgoal); последующие вызовы автоматически продолжают её.Реестр сохраняется в
~/.pi-subagent/registry.json(атомарная запись; при перезапуске прерванные записи со статусомrunningисправляются наerror).Ограничение параллелизма: 4 одновременных запуска; одна сессия никогда не выполняется параллельно.
Задачи сохраняются в
~/.pi-subagent/tasks.json(атомарная запись; запущенные этапы при перезапуске исправляются наfailed(interrupted_by_restart)).
Установка
git clone <this-repo> && cd pi-subagent
npm installПредварительное требование: установлен CLI pi (npm i -g @earendil-works/pi-coding-agent) и он доступен в PATH.
Настройка MCP-хоста
Добавьте в конфигурацию вашего MCP-клиента:
{
"mcpServers": {
"pi-subagent": {
"command": "npx",
"args": ["tsx", "/abs/path/to/pi-subagent/src/server.ts"]
}
}
}Дополнительные переменные окружения:
PI_SUBAGENT_REGISTRY— путь к реестру (по умолчанию~/.pi-subagent/registry.json)PI_BIN— переопределение исполняемого файла pi (используется в тестах)
Тестирование
npm test # full suite (140 tests)
npm run test:fast # dot reporterВ тестах используется фейковый pi (test/fixtures/fake-pi.sh); покрытие: async/sync, тайм-аут, kill, сбой создания сессии, несколько ожидающих, лимит прогресса, правила планирования (табличные + property-тесты на 100 итераций), персистентность реестра, очистка и т.д.
Структура проекта
src/
├── types.ts # all shared types + error codes
├── errors.ts # ToolError helpers
├── runner/ # parse.ts, argv.ts, spawn.ts, process-table.ts
├── registry/ # session.ts, run.ts, persist.ts, redact.ts
├── scheduler/ # keywords.ts, plan.ts (5-stage pure function)
├── tools/ # delegate, status, plan-tool, session, kill
└── server.ts # MCP entry (stdio)
skills/pi-subagent/ # SKILL.md + delegation-patterns (strategy layer)
test/ # fixtures/ + *.test.ts
docs/ # design.md (spec) + implementation-plan.mdДизайн и процесс
Проект прошёл совместное проектирование + 4 раунда внешнего рецензирования до реализации. Спецификация и план сохранены в docs/:
docs/design.md— полная спецификация дизайна (архитектура, контракты инструментов, обработка ошибок, правила планировщика, стратегия тестирования). Каждый контракт прослеживается до заметки рецензента (R1–R4).docs/implementation-plan.md— 19 TDD-задач (написать падающий тест → реализовать → пройти → закоммитить).
Ключевые проектные решения, все подкреплённые реальным исследованием вывода pi -p и внешним рецензированием:
cwd≠ хранилище сессий —spawn({ cwd })управляет рабочей директорией; файлы сессий Pi используют своё расположение по умолчанию (не засоряет проект).async по умолчанию + рукопожатие — новые сессии ждут события
sessionот Pi перед возвратом (сsessionStartTimeoutMs), поэтому хост всегда получает настоящийpiSessionId.Многоэтапный планировщик —
plan()работает как reject → capacity → reuse → modify → mode, где модификаторы накапливаются, а не выбираются по первому совпадению (урок из раунда рецензирования 1).Очистка вывода — результаты инструментов усекаются и очищаются от токенов/ключей перед сохранением.
Статус
Рабочая реализация, 140 проходящих тестов. Ещё не опубликовано в npm — запуск из исходников через tsx.
Лицензия
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables MCP clients to spawn and control Codex CLI and Claude Code sessions on the host machine, with session management and filesystem access.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients like Claude Code to delegate coding tasks to the local Cursor Agent CLI, with persistent per-workspace sessions that resume across calls.12MIT
- AlicenseNot gradedqualityBmaintenanceDelegates bounded coding tasks from MCP clients to the Pi Coding Agent over stdio. Supports review, verification, implementation, and batch operations with long-running task polling.MIT
- AlicenseNot gradedqualityBmaintenanceEnables ChatGPT (or any MCP client) to delegate coding tasks to a local Hermes-backed agent with async job management, supporting read-only investigation, implementation, and continuation of sessions via secure MCP tunnel.1MIT
Related MCP Connectors
Persistent memory and cross-session learning for AI coding assistants (hosted remote MCP).
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/guyiicn/pi-subagent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server