pi-subagent
pi-subagent
Convierte la Pi CLI (
@earendil-works/pi-coding-agent) en un subagente de codificación programable al que cualquier host MCP (ZCode, Claude Code, Cursor, …) pueda delegar tareas, hacer seguimiento de sesiones y matar procesos.
pi-subagent es un servidor MCP ligero que envuelve pi -p --mode json en 7 herramientas estructuradas: delegar tareas, recoger resultados, tomar decisiones de planificación, gestionar sesiones con nombre y abortar ejecuciones. Aislamiento de procesos, totalmente basado en sesiones, modo síncrono/asíncrono dual.
Por qué
Pi es un agente de codificación minimalista de terminal. En lugar de enseñar a Pi metodología, este proyecto trata a Pi como un trabajador delegable: un agente host (ZCode / Claude Code) decide cuándo delegar, lanza una tarea autocontenida y recoge el resultado. Un proceso Pi = una ejecución de subagente aislada.
Aislamiento de procesos — cada delegación genera un proceso hijo
pi -p. Un fallo de Pi solo afecta a esa ejecución.Totalmente basado en sesiones — cada tarea se vincula a una sesión con nombre (p. ej.
feat-auth); las llamadas posteriores continúan automáticamente.Síncrono / asíncrono — por defecto
async(evita timeouts en las llamadas de herramientas del host); recoge conpi_statusde sondeo largo.Planificable —
pi_planes una función de decisión pura de 5 etapas (rechazar / capacidad / reutilizar / modificar / modo), totalmente probada por unit tests.MCP universal — cualquier cliente MCP estándar puede cargarlo.
Related MCP server: cursor-agent-bridge
Arquitectura
┌─────────────────────────────────────────────────────────────┐
│ 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+) │
└─────────────────────┘Tres capas con límites claros: Capa de herramientas (esquema MCP + función pura plan()) / Registro de sesiones (estado + persistencia + redacción) / Ejecutor (spawn de pi, parseo de NDJSON, tabla de procesos).
Herramientas
Herramienta | Propósito |
| Decidir: si delegar, síncrono/asíncrono, cuántas sesiones |
| Despachar una tarea (por defecto asíncrono; las nuevas sesiones esperan el handshake) |
| Recoger el resultado de una ejecución (sondeo largo) |
| Listar sesiones (omitir |
| Inspeccionar una sesión |
| Ramificar una sesión para probar otra vía |
| Abortar una ejecución |
| Crear una tarea multi-etapa (el host escribe primero |
| Despachar una revisión de dominio del plan (recoger vía |
| Ejecutar una etapa: síncrono (esperar el resultado) o asíncrono (devuelve runId) |
| Recoger una ejecución de etapa asíncrona; auto-juzga y re-despacha (máx. 3), si no manual |
| Listar tareas (filtrar por taskId / estado) |
Bucle de revisión: después de
pi_task_plan, recoge conpi_status(runId). Cuando la ejecución termina, el servidor detecta que es una ejecución de revisión, parsea_plan-reviewed.mdy almacenaplanVerdict/planReviewedPathen la tarea. Los prompts de etapa incluyen automáticamente el plan revisado y los archivos de salida de las etapas de dependencia superadas.
Etapas asíncronas: pasa
mode: "async"api_task_stage_runpara evitar bloquear una llamada de herramienta durante toda la ejecución (recomendado cuando el host MCP impone un timeout corto de herramienta). Recoge conpi_task_stage_collect(taskId, stageId). Los intentos fallidos se re-despachan bajo un nombre de sesión nuevo para evitar contaminación del historial; después de 3 fallos la etapa pasa amanualcon un panel de decisión (retry_with_new_hintse soporta víapromptHintOverride).
Recuperación tras reinicio: volver a ejecutar
pi_task_createcon el mismotaskIdfusiona en lugar de entrar en conflicto. Las etapas cuyo archivo de salida ya existe y pasa la validación se marcan comopassedautomáticamente, de modo que las tareas interrumpidas se reanudan sin editar manualmentetasks.json.
Modelo de sesión
Cada sesión tiene un nombre legible + el UUID de Pi +
cwd+goal.El primer
pi_delegatecrea la sesión (goales obligatorio); las llamadas posteriores continúan automáticamente.El registro persiste en
~/.pi-subagent/registry.json(escritura atómica; al reiniciar, los registrosrunninginterrumpidos se corrigen aerror).Límite de concurrencia: 4 ejecuciones en curso; una sesión nunca se ejecuta concurrentemente.
Las tareas persisten en
~/.pi-subagent/tasks.json(escritura atómica; las etapas en ejecución se corrigen afailed(interrupted_by_restart)al reiniciar).
Instalación
git clone <this-repo> && cd pi-subagent
npm installRequisito previo: la CLI pi está instalada (npm i -g @earendil-works/pi-coding-agent) y en PATH.
Configurar un host MCP
Añade a la configuración de tu cliente MCP:
{
"mcpServers": {
"pi-subagent": {
"command": "npx",
"args": ["tsx", "/abs/path/to/pi-subagent/src/server.ts"]
}
}
}Variables de entorno opcionales:
PI_SUBAGENT_REGISTRY— ruta del registro (por defecto~/.pi-subagent/registry.json)PI_BIN— anula el ejecutable de pi (usado por los tests)
Test
npm test # full suite (140 tests)
npm run test:fast # dot reporterLos tests usan un pi falso (test/fixtures/fake-pi.sh) y cubren: asíncrono/síncrono, timeout, kill, fallo de creación de sesión, multi-espera, límite de progreso, reglas de planificación (tabla-driven + tests de propiedad de 100 iteraciones), persistencia del registro, redacción, etc.
Estructura del proyecto
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.mdDiseño y proceso
Este proyecto pasó por diseño colaborativo + 4 rondas de revisión externa antes de la implementación. La especificación y el plan están en docs/:
docs/design.md— especificación de diseño completa (arquitectura, contratos de herramientas, manejo de errores, reglas del planificador, estrategia de pruebas). Cada contrato es trazable a una nota de revisión (R1–R4).docs/implementation-plan.md— 19 tareas TDD (escribir test que falla → implementar → pasar → commit).
Decisiones de diseño clave, todas respaldadas por pruebas reales de la salida de pi -p y revisión externa:
cwd≠ almacenamiento de sesión —spawn({ cwd })controla el directorio de trabajo; los archivos de sesión de Pi usan su ubicación por defecto (no contamina el proyecto).async por defecto + handshake — las nuevas sesiones esperan el evento
sessionde Pi antes de devolver (con unsessionStartTimeoutMs), de modo que el host siempre recibe unpiSessionIdreal.Planificador multi-etapa —
plan()es rechazar → capacidad → reutilizar → modificar → modo, donde los modificadores se apilan en lugar de coincidir con el primero (una lección de la ronda de revisión 1).Redacción de progreso — los resultados de las herramientas se truncan y se limpian de tokens/claves antes de almacenarse.
Estado
Implementación funcional, 140 tests pasando. Aún no publicado en npm — ejecutar desde el código fuente vía tsx.
Licencia
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