Skip to main content
Glama
██████╗ ██╗    ██████╗ ███████╗██╗     ███████╗ ██████╗  █████╗ ████████╗███████╗
██╔══██╗██║    ██╔══██╗██╔════╝██║     ██╔════╝██╔════╝ ██╔══██╗╚══██╔══╝██╔════╝
██████╔╝██║    ██║  ██║█████╗  ██║     █████╗  ██║  ███╗███████║   ██║   █████╗
██╔═══╝ ██║    ██║  ██║██╔══╝  ██║     ██╔══╝  ██║   ██║██╔══██║   ██║   ██╔══╝
██║     ██║    ██████╔╝███████╗███████╗███████╗╚██████╔╝██║  ██║   ██║   ███████╗
╚═╝     ╚═╝    ╚═════╝ ╚══════╝╚══════╝╚══════╝ ╚═════╝ ╚═╝  ╚═╝   ╚═╝   ╚══════╝
                            ███╗   ███╗ ██████╗██████╗
                            ████╗ ████║██╔════╝██╔══██╗
                            ██╔████╔██║██║     ██████╔╝
                            ██║╚██╔╝██║██║     ██╔═══╝
                            ██║ ╚═╝ ██║╚██████╗██║
                            ╚═╝     ╚═╝ ╚═════╝╚═╝

npm node license

MCP-Server, der den pi Coding-Agent als delegierbaren, steuerbaren Worker bereitstellt.

Richte Claude Code (oder einen beliebigen MCP-Host) darauf aus und delegiere Arbeiten an einen von pis ~38 Providern (DeepSeek, Grok, GLM, Kimi, Qwen, Codex, OpenRouter, lokales llama.cpp) – wobei der Kontext des Sub-Agenten außerhalb deiner Hauptkonversation bleibt.

Wofür es gedacht ist

Dein Haupt-Harness läuft auf einem teuren Modell mit einem Kontextfenster, das dir wichtig ist. Vieles von dem, was er tut, braucht dieses Modell nicht und schadet dem Kontext sogar aktiv: ein Repository nach jeder Aufrufstelle zu durchsuchen, eine 2000-Zeilen-Datei zu lesen, nur um eine Frage zu beantworten, zu prüfen, was ein Refactoring hinterlassen hat.

Übergib diese Arbeit stattdessen einem Delegaten:

  • Kosten. Die Fleißarbeit läuft auf DeepSeek, GLM, Kimi, Qwen oder einem lokalen llama.cpp. Du bezahlst Frontier-Preise nur für das Denken, das sie wirklich braucht.

  • Kontext. Der Delegat liest die Dateien mit seinem eigenen Budget und liefert ein Ergebnis. Die 200 KB, die er gelesen hat, gelangen nie in deine Konversation.

  • Schadensradius. Delegaten sind standardmäßig schreibgeschützt (read, grep, find, ls), durchgesetzt beim Aufbau der Session. Ein günstiges Modell, das Erkundungsarbeit leistet, kann deinen Baum nicht anfassen, wenn du es nicht aktiv erlaubst.

Der Delegat ist immer der pi-Agent. Codex, Grok, DeepSeek und die übrigen liefern das Modell dahinter; dies ist kein Wrapper um ihre CLIs.

Related MCP server: cursor-agents-mcp

Warum pi und nicht opencode oder ein CLI-Wrapper?

Ein Delegat ist nur dann steuerbar, wenn zwei Kanäle offen bleiben: Du musst ihn mitten in der Aufgabe umleiten können, und er muss dir eine Frage stellen und warten können, bis du antwortest. Die meisten Methoden, einen Coding-Agenten aus einem anderen Programm heraus anzusteuern, schließen beide.

pi -p / CLI-Wrapper

opencode SDK

dieser Server

Läuft im Prozess

nein (Subprozess)

nein (HTTP-Client zu opencode serve)

ja (createAgentSession)

Laufenden Turn umleiten

nein

nur abort

steer

Agent kann dich etwas fragen

nein (ctx.hasUI false)

nicht in der Session-API

status → answer *

Modell pro Aufruf

nein

ja

Argument model

pi -p und --mode json setzen ctx.hasUI = false. Ein so gestarteter Delegat ist konstruktionsbedingt Feuer-und-vergessen: Er kann keine Frage stellen, und du kannst ihn nicht umleiten.

Das SDK von opencode ist ein typisierter Client für einen eigenen Serverprozess: createOpencode() startet opencode serve und kommuniziert per HTTP mit ihm. Sauberes Design, aber es bedeutet einen zweiten Prozess, den man überwachen muss, und die Session-Oberfläche, die es bereitstellt (prompt, abort, revert, messages), bietet keine Steuerung während eines Turns und keinen Weg für den Agenten, den Aufrufer etwas zu fragen.

pi liefert createAgentSession als einbettbare Bibliothek. Dieser Server hält das Session-Objekt prozessintern, sodass session.steer() eine Nachricht nach dem aktuellen Tool-Aufruf und vor dem nächsten Modell-Aufruf platzieren kann, und ein synthetischer uiContext fängt die Fragen des Agenten ab und hält sie für answer bereit. Es wird nichts per Shell aufgerufen; nichts muss überwacht werden.

* Fragen stammen aus pi-Erweiterungen, daher ist dieser Kanal nur für Delegaten geöffnet, die mit extensions: true gestartet wurden. Siehe Websuche und andere Erweiterungs-Tools.

(Die Tabelle vergleicht den Delegationskanal, nicht die Sandboxing-Fähigkeiten; opencode hat seine eigene Berechtigungskonfiguration. Siehe Standardmäßig schreibgeschützt dafür, was dieser Server durchsetzt und was nicht.)

Tools

Tool

Zweck

init

Zuerst aufrufen. Meldet erreichbare Modelle, erlaubte Tools und erklärt, wie man einen Delegaten steuert. Jedes andere Tool verweigert, bis es einmal ausgeführt wurde.

spawn

Delegat im Hintergrund. Gibt sofort sessionId zurück. Standardmäßig verwenden.

spawn_batch

Verteilt bis zu 10 Delegaten in einem Aufruf. Wird als Stapel validiert, sodass nichts startet, wenn eine Aufgabe schlecht ist.

run

Delegat und blockiere, bis fertig. Nur für schnelle Fragen.

status

Zustand, Turns, verwendete Tools, aktuellster Text und offene Fragen.

steer

Leite einen laufenden Agenten um. Wird nach seinem aktuellen Tool-Aufruf zugestellt.

follow_up

Gib einem fertigen Delegaten einen weiteren Turn. Er behält alles, was er gelesen hat, sodass du die Aufgabe nicht neu erklären musst.

answer

Beantworte eine Frage, die von status angezeigt wird. Nur mit extensions: true erreichbar, da nur Erweiterungen fragen können.

abort

Stoppe eine Session; Teilergebnisse bleiben lesbar.

models

Liste die Modelle auf, die dieser Delegat verwenden darf.

sessions

Liste Sessions, laufende und beendete. Filtere nach state, erweitere mit verbose.

forget

Verwirf eine beendete Session aus dem Verlauf und gib ihre ID frei.

Installation

Erfordert Node.js 22.19+ und eine funktionierende pi-Installation, die einmal angemeldet wurde (pi, dann /login).

Claude Code

claude mcp add pi -e PI_DELEGATE_MODEL=openrouter/stealth/ox-alpha -- npx -y pi-delegate-mcp

Beliebiger MCP-Host, über .mcp.json

{
  "mcpServers": {
    "pi": {
      "command": "npx",
      "args": ["-y", "pi-delegate-mcp"],
      "env": { "PI_DELEGATE_MODEL": "openrouter/stealth/ox-alpha" },
      "timeout": 1800000
    }
  }
}

npx löst das Paket bei jedem Start auf. Um es festzulegen, installiere es global und rufe das Binary direkt auf:

npm install -g pi-delegate-mcp
{ "mcpServers": { "pi": { "command": "pi-delegate-mcp", "timeout": 1800000 } } }

Halte den Server-Schlüssel kurz, da er jedem Tool-Namen vorangestellt wird (mcp__pi__spawn).

Aus dem Quellcode

git clone https://github.com/howznguyen/pi-delegate-mcp && cd pi-delegate-mcp
npm install && npm run build && npm link

Erster Start

Bitte deinen Agenten, etwas zu delegieren. Er ruft einmal init auf, um zu erfahren, was dieser Server erreichen kann, und dann spawn:

{ "id": "audit-01", "label": "who still imports onnxruntime",
  "prompt": "Search this repo for anything still importing onnxruntime and list the files.",
  "cwd": "/path/to/repo" }
{ "sessionId": "audit-01", "state": "running", "model": "opencode-go/deepseek-v4-flash",
  "activeTools": ["read", "grep", "find", "ls"] }

spawn kehrt sofort zurück. Frage mit status nach der geordneten Tool-Spur und der Antwort ab, oder mit sessions, wenn mehrere unterwegs sind. Wenn init fehlschlägt, sagt er genau, was fehlt: pi nicht installiert, kein Provider angemeldet oder ein Modell-Scope, der nichts findet.

Die Modellnamen in den Beispielen unten sind beispielhaft. Führe models aus, um zu sehen, was deine eigene pi-Installation tatsächlich erreichen kann.

Nachvollziehbarkeit

spawn und run akzeptieren beide deine eigene id und ein Freitext-label:

{
  "id": "search-audit-01",
  "label": "what ONNX removal left behind",
  "prompt": "...",
  "model": "opencode-go/deepseek-v4-flash"
}

IDs sind [A-Za-z0-9._:-], 1-64 Zeichen, müssen alphanumerisch beginnen und unter live Sessions eindeutig sein. Weglassen für eine UUID.

Beendete Sessions bleiben über status und sessions lesbar, anstatt zu verschwinden, sodass du zurückgehen und prüfen kannst, was ein Delegat tatsächlich getan hat. Die neuesten PI_DELEGATE_HISTORY (Standard 50) werden aufbewahrt; forget entfernt eine vorzeitig.

status liefert eine geordnete toolCalls-Spur: jedes Tool, das der Delegat ausgeführt hat, mit Argumenten und Zeitangaben. Füge verbose: true hinzu, um Aufruf-IDs und Ergebnisse zu erhalten:

{
  "seq": 1,
  "id": "call_467b4bb4…",
  "name": "bash",
  "state": "ok",
  "ms": 10,
  "args": "{\"command\":\"echo hello-trace\"}",
  "result": "hello-trace\n"
}

Argumente und Ergebnisse werden gekürzt (PI_DELEGATE_TRACE_ARGS, PI_DELEGATE_TRACE_RESULT), wobei die entfernte Länge festgehalten wird, sodass ein einzelnes read einer großen Datei deinen Kontext nicht überfluten kann.

Einem Delegaten einen weiteren Turn geben

Ein fertiger Delegat ist nicht verbraucht. pi behält seine Session im Speicher, sodass follow_up denselben Agenten erneut auffordert, wobei alles, was er bereits gelesen hat, weiterhin im Kontext ist:

{ "sessionId": "search-audit-01", "prompt": "Now check whether the build files reference it too" }
{ "sessionId": "search-audit-01", "state": "running", "turnsSoFar": 1 }

Der Delegat macht dort weiter, wo er aufgehört hat. Er hält immer noch die Dateien, die er im ersten Turn gelesen hat, sodass die zweite Frage einen Modell-Aufruf kostet statt einer neuen Session, die das Repository erneut liest.

Das ist der günstige Weg, eine Konversation mit einem Delegaten zu führen. Einen frischen zu spawnen bedeutet, die Aufgabe neu zu erklären und dafür zu bezahlen, dass er dieselben Dateien erneut liest – und seine Antwort kommt ohne die Überlegungen an, die dorthin geführt haben.

follow_up verweigert einen Delegaten, der noch arbeitet, denn einen mitten in der Aufgabe umzuleiten, ist das, wofür steer gedacht ist. Die beiden sind nicht austauschbar: steer landet zwischen Tool-Aufrufen bei einem laufenden Agenten, follow_up startet einen neuen Turn bei einem beendeten.

Fan-out

spawn_batch startet einen ganzen Stapel in einem Aufruf. Aufgaben erben die Stapel-Ebene von model, cwd, tools und extensions und überschreiben sie einzeln dort, wo es nötig ist:

{
  "idPrefix": "audit",
  "model": "opencode-go/deepseek-v4-flash",
  "cwd": "/repo",
  "tools": ["ls"],
  "tasks": [
    { "prompt": "What still imports onnxruntime?", "label": "imports" },
    { "prompt": "Which build files still reference ONNX?", "label": "build" },
    {
      "prompt": "Any ONNX model files left on disk?",
      "label": "artifacts",
      "model": "opencode-go/ox-alpha-free"
    }
  ]
}

Das benennt sie audit-01, audit-02, audit-03 und kehrt in wenigen Millisekunden zurück, da das Starten eines Delegaten nicht darauf wartet, dass er denkt.

Der Stapel wird validiert, bevor irgendetwas startet: ID-Format, innerhalb des Stapels doppelte IDs, bereits laufende IDs, blockierte Tools und jeder Modellname. Eine einzige schlechte Aufgabe lässt den Aufruf fehlschlagen und startet nichts. Ein halber Fan-out ist das schlechteste Ergebnis, denn du zahlst für die Delegaten, die gestartet sind, und musst trotzdem herausfinden, welche es nicht sind.

Frage den gesamten Stapel mit einem einzigen sessions-Aufruf ab, statt eines status pro Delegat. Wechsle nur für den Delegaten, den du tatsächlich lesen willst, zu status. steer und abort bleiben pro Session.

Modell pro Aufruf wählen

model überschreibt bei jedem Aufruf PI_DELEGATE_MODEL. Ein nicht auflösbarer Name ist ein harter Fehler, niemals ein stiller Rückfall auf das Standardmodell, denn ein stiller Rückfall ist der Weg, auf dem du am Ende ein Modell abrechnest, das du nie angefragt hast.

Welche Namen aufgelöst werden, entscheidet pis eigener enabledModels-Scope, den dieser Server durchsetzt und nicht nur anzeigt:

opencode-go/deepseek-v4-flash  -> ok      (listed in enabledModels)
opencode-go/glm-5.3            -> refused (out of scope)
knowns-hub/claude-opus         -> ok      (custom provider, see below)

Eigene Provider umgehen den Scope. Jedes Modell, das von einem Provider bedient wird, der in ~/.pi/agent/models.json deklariert ist, wird angeboten, selbst wenn enabledModels es nicht nennt – mit der Begründung, dass das manuelle Deklarieren eines Providers bereits eine Absicht ist, ihn zu nutzen. Deshalb kann die Liste viel länger sein als enabledModels: Drei Einträge im Scope plus zwei eigene Provider können leicht fünfzehn angebotene Modelle bedeuten. init sagt das explizit in models.scopeNote, wenn es zutrifft.

Zwei Schalter ändern das:

Wirkung

PI_DELEGATE_STRICT_SCOPE=1

enabledModels exakt einhalten. Die Umgehung durch eigene Provider entfällt.

PI_DELEGATE_IGNORE_SCOPE=1

Scoping komplett aufheben. Jedes authentifizierte Modell ist nutzbar.

Rufe models auf, um zu sehen, was unter der jeweils geltenden Einstellung tatsächlich erreichbar ist.

Statuszeile

Claude Code erlaubt genau einen statusLine-Befehl, daher umschließt pi-delegate-statusline das, was du bereits ausführst, und fügt ein Segment hinzu, das die Delegaten dieses Workspace anzeigt:

{
  "statusLine": {
    "type": "command",
    "command": "PI_DELEGATE_STATUSLINE_WRAP=ccstatusline pi-delegate-statusline",
    "refreshInterval": 10
  }
}

Entferne PI_DELEGATE_STATUSLINE_WRAP, um nur das pi-Segment auszugeben.

π ▸ audit engine·t1·12s audit index·t2·8s   running, with turn counts and elapsed time
π ▸ migrate·t7·3m04s ?1 waiting             one delegate is blocked on a question
π ✓2                                        finished, nothing running

Welche Delegaten zu welcher Session gehören

Nur nach Verzeichnis zu filtern reicht nicht: Zwei Claude-Code-Sessions, die im selben Repository geöffnet sind, würden die Delegaten der jeweils anderen zeigen. Die Zuordnung verwendet stattdessen die Prozess-Abstammung.

Der MCP-Host startet einen Server pro Session, also zeichnet der Server process.ppid auf, die PID des Hosts. Die Statuszeile, die von demselben Host gestartet wurde, läuft durch ihre eigene Abstammung und behält nur die Zustandsdateien, deren hostPid sie dort findet. Gleiches Repo, zwei Sessions, kein Übersprechen. Der Verzeichnisfilter bleibt als Fallback für Zustandsdateien, die geschrieben wurden, bevor es das gab.

Der Zustand liegt in $XDG_STATE_HOME/pi-delegate-mcp/<pid>.json (PI_DELEGATE_STATE_DIR zum Verschieben). Dateien werden nur bei ESRCH entfernt, also wenn ihr Prozess nicht mehr existiert; EPERM bedeutet nämlich, dass der Prozess unter einem anderen Benutzer läuft. Server beenden sich außerdem von selbst, wenn stdin geschlossen wird oder die Host-PID verschwindet, sodass ein Host, der stirbt, ohne den Transport zu schließen, nichts hinterlässt.

Standardmäßig schreibgeschützt

Tools sind bei der Sitzungserstellung auf read, grep, find, ls beschränkt. Alles andere wird abgelehnt, bevor überhaupt eine Sitzung erstellt wird.

Um das zu erweitern, nenne die zusätzlichen Tools auf dem Server:

"env": { "PI_DELEGATE_ALLOW_TOOLS": "bash" }

oder PI_DELEGATE_ALLOW_WRITE=1, um alles zu erlauben.

bash ist kein Mittelweg. pi bringt kein Berechtigungssystem mit, also kann ein Delegate, der bash hält, Dateien schreiben, löschen und das Netzwerk erreichen, unabhängig davon, ob write und edit auf seiner Liste stehen. Diese beiden zu verweigern, während bash erlaubt ist, hält deine Absicht fest; es setzt nichts durch. Die Berechtigungsabfragen und Hooks von Claude Code sehen nie, was pi tut. Wenn du eine echte Grenze brauchst, führe diesen Server in einem Container aus.

Websuche und andere Erweiterungstools

Die eigenen Tools von pi sind read, grep, find, ls, bash, powershell, write, edit. Es gibt weder Suche noch Fetch darunter. Diese kommen von pi-Erweiterungen, die ihre eigenen Tools registrieren, und ein Delegate kann sie verwenden.

Setze extensions: true im Aufruf und erlaube die Toolnamen auf dem Server:

"env": { "PI_DELEGATE_ALLOW_TOOLS": "web_search,fetch_content" }
{ "prompt": "Find the current Node LTS version and tell me just the number",
  "extensions": true, "tools": ["read", "grep", "find", "ls", "web_search"] }
{ "seq": 1, "name": "web_search", "state": "ok", "ms": 2568,
  "args": "{\"query\":\"latest stable Node.js LTS version\",\"numResults\":5}" }

So gibst du einem Delegate Netzwerkzugriff, ohne ihm bash zu geben. web_search kann suchen und sonst nichts, und es durchläuft dieselbe Allowlist wie jedes andere Tool, also bleibt die Schreibschutz-Standardeinstellung für Aufrufe, die nicht darum bitten, unverändert.

Welche Tools existieren, hängt davon ab, was der Benutzer, der den Server ausführt, installiert hat. pi-web-access bietet web_search, fetch_content, source_check und get_search_content. pi-mcp-adapter überbrückt die MCP-Server in ~/.pi/agent/mcp.json und stellt sie als mcp bereit. pi hat keinen eigenen MCP-Client, daher ist diese Erweiterung der einzige Weg zu einem.

extensions: true vertraut jeder installierten Erweiterung, nicht nur der, die du wolltest. Sie werden als ein Set geladen, laufen mit den vollen Rechten des Prozesses dieses Servers, und einige öffnen Sockets und Timer, die die Sitzung überleben. Schalte es pro Aufruf ein, für die Delegates, die es brauchen, statt es standardmäßig anzulassen. Es kostet außerdem echte Startzeit, weshalb es aus ist, solange nicht darum gebeten wird.

Konfiguration

Umgebungsvariable

Standard

Bedeutung

PI_DELEGATE_MODEL

pi-eigener Standard

Modell, das verwendet wird, wenn ein Aufruf model weglässt

PI_DELEGATE_ALLOW_TOOLS

nicht gesetzt

Kommaliste zusätzlicher Tools, die erlaubt werden sollen, z. B. bash

PI_DELEGATE_ALLOW_WRITE

nicht gesetzt

1 erlaubt jedes Tool

PI_DELEGATE_HISTORY

50

Abgeschlossene Sitzungen, die zur Überprüfung aufbewahrt werden

PI_DELEGATE_TRACE_ARGS

400

Maximale Zeichenanzahl der Tool-Argumente, die im Trace aufbewahrt werden

PI_DELEGATE_TRACE_RESULT

600

Maximale Zeichenanzahl der Tool-Ergebnisse, die im Trace aufbewahrt werden

PI_DELEGATE_BATCH_MAX

10

Obergrenze für Aufgaben pro spawn_batch-Aufruf

PI_DELEGATE_LIST_CAP

60

Über diesem Wert fasst init Modelle nach Anbieter zusammen, statt sie aufzulisten

PI_DELEGATE_STATE_DIR

XDG-State-Verzeichnis

Wo der Statuszeilen-Zustand veröffentlicht wird

PI_DELEGATE_STATUSLINE_WRAP

nicht gesetzt

Statuszeilen-Befehl, um den gewickelt und an den angehängt wird

PI_DELEGATE_STATUSLINE_LOG

nicht gesetzt

Datei, der bei jeder Statuszeilen-Darstellung ein Zeitstempel angehängt wird, zum Debugging

PI_DELEGATE_PROGRESS_MS

15000

Intervall für Fortschrittsmeldungen während run

PI_DELEGATE_IGNORE_SCOPE

nicht gesetzt

1 ignoriert den enabledModels-Scope von pi und erlaubt jedes konfigurierte Modell

PI_DELEGATE_STRICT_SCOPE

nicht gesetzt

1 beachtet enabledModels exakt und verwirft den Custom-Provider-Bypass

PI_CODING_AGENT_DIR

~/.pi/agent

Wo auth.json und Konfiguration von pi gelesen werden

Langlaufende Aufgaben

Das MCP TypeScript SDK verwendet standardmäßig ein 60-Sekunden-Request-Timeout, das eine echte Aufgabe sprengen wird. Drei Verteidigungslinien, in der Reihenfolge der Bevorzugung:

  1. Verwende spawn + status. Nichts blockiert, also greift kein Timeout.

  2. run sendet regelmäßig Fortschrittsmeldungen, die das Timeout des Hosts zurücksetzen.

  3. Erhöhe die Obergrenze mit "timeout" in .mcp.json oder MCP_TOOL_TIMEOUT in der Umgebung.

CLAUDE_AUTO_BACKGROUND_TASKS=1 veranlasst Claude Code, lange MCP-Aufrufe nach ~2 Minuten in den Hintergrund zu versetzen. Beachte, dass Fortschrittsmeldungen verworfen werden, sobald ein Aufruf in den Hintergrund verschoben wird, also wähle (1) oder (3), nicht beides.

Authentifizierung

Der Server verarbeitet keine Anmeldedaten. pi authentifiziert sich aus ~/.pi/agent/auth.json, danach aus Umgebungsvariablen. MCP-Hosts starten Server oft mit einer abgespeckten Umgebung, daher bevorzuge auth.json (führe pi einmal aus und /login) gegenüber dem Exportieren von Schlüsseln in einem Shell-Profil.

Entwicklung

npm install
npm run build       # tsc, src/*.ts -> dist/
npm run typecheck   # tsc --noEmit, strict
npm run test:ci     # offline: boots the server over stdio and lists its tools
npm test            # full suite: needs a logged-in pi, makes real model calls

test:ci ist das, was CI ausführt und woran prepublishOnly gekoppelt ist, weil es keine Anmeldedaten und kein Netzwerk benötigt. npm test lässt echte Delegates gegen echte Anbieter laufen, kostet also Geld und funktioniert nur dort, wo pi angemeldet wurde.

Pfad

Was sich dort befindet

src/config.ts

Jede Umgebungsvariable, an einer Stelle gelesen

src/permissions.ts

Die Tool-Allowlist und das Gate, das sie durchsetzt

src/registry.ts

Sitzungs-Map, ID-Beanspruchung, Verdrängung aus der Historie

src/tools/

Ein Modul pro Gruppe von MCP-Tools

src/pi/

Alles, was das pi SDK berührt

src/statusline/

Veröffentlichung der Zustandsdatei und die Statuszeilen-Binärdatei

Releases werden über Tags gesteuert. npm version patch && git push --follow-tags führt den Build und die Tests aus und veröffentlicht dann über OIDC Trusted Publishing, sodass kein npm-Token irgendwo im Repository gespeichert wird.

Issues und Pull Requests sind willkommen. Wenn du einen Delegate meldest, der sich fehlverhalten hat, ist der toolCalls-Trace von status mit verbose: true das, was du anhängen solltest.

Verwandte Arbeiten

abatilo/pi-mcp-bridge schlägt den einfacheren Weg ein: starte pi --mode json -p --session-id <uuid> und lass pi die Sitzungen auf der Platte speichern, sodass die Bridge überhaupt keinen Zustand hält. Elegant und lesenswert. Dafür gibt sie Steuerung, Fragen und Tool-Kontrolle auf.

Lizenz

MIT

Available Tools

12 tools
abortA

Stop a running pi session. Partial output stays readable via status.

NameRequiredDescriptionDefault
sessionIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that partial output remains readable after abort, which is a useful behavioral detail beyond the simple action. It does not detail other side effects, but for a simple abort tool this is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one clear sentence with an additional clause. It is front-loaded with the main action and adds a relevant detail. No wasted words, though it could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one param, no output schema), the description covers the core action and a key consequence. However, it lacks details on error conditions, idempotency, or what 'running' means precisely. Acceptable but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the sessionId parameter at all. The agent must infer that sessionId refers to the ID of the session to abort. With low coverage, the description should compensate, but it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the specific action 'Stop a running pi session' with a clear resource (pi session). It distinguishes from siblings like run, status, and spawn by focusing on termination. The verb 'abort' is reinforced by the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies when to use (to stop a running session) but does not explicitly contrast with alternatives. However, it does mention that 'Partial output stays readable via status', which hints at using status afterwards. No explicit when-not to use, but the mention of status provides some context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

answerA

Answer a question raised by a pi agent. Get requestId from status. Only pi extensions can ask, so questions appear only for delegates spawned with extensions: true; the MCP adapter's tool-approval and elicitation prompts are the usual source. A delegate waiting on one is blocked until you answer it.

NameRequiredDescriptionDefault
valueYesChosen option, text, or boolean for a confirm
requestIdYes
sessionIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose a critical behavioral trait: 'A delegate waiting on one is blocked until you answer it,' i.e. this call has a real unblocking side effect. It also explains the origin of requests (MCP adapter tool-approval and elicitation prompts), which helps an agent recognize legitimate questions. It omits permission/auth requirements for the caller and what a successful answer returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core purpose and immediately followed by the operational detail (where to get requestId). No filler or restatement of the tool name. Slightly dense mid-sentence clause, but nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-required-param, no-output-schema tool with no annotations, the description covers purpose, prerequisite lookup, source of requests, and the blocking consequence. The main remaining gap is that `sessionId` is never explained and there is no statement of what a valid answer looks like beyond the schema's `value` types.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only `value` is described), so the description must compensate. It does add genuine meaning for `requestId` by pointing to `status` as its source. However, `sessionId` is left entirely unexplained in both schema and description, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Answer a question raised by a pi agent') that is clearly distinct from siblings like status, spawn, or steer. It scopes the tool to a narrow case (questions from pi extensions), so an agent can tell it apart from generic session tools. It stops just short of 5 because it never characterizes what an 'answer' does downstream beyond unblocking the caller.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear prerequisite chain: get `requestId` from `status`, and questions only exist for delegates spawned with `extensions: true`. That effectively tells the agent the condition under which this tool is callable. It doesn't state a when-not-to-use or name a fallback tool if no question is pending, so it falls short of explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

follow_upA

Send another prompt to a delegate that has already finished, keeping everything it read and said. Use this instead of spawning a fresh delegate and re-explaining the task: the session still holds its own context, which yours never had to absorb. Returns immediately; poll with status as usual. For a delegate that is still working, use steer instead.

NameRequiredDescriptionDefault
promptYesThe next turn for this delegate
sessionIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, the description carries the full burden. It discloses context preservation, immediate return (non-blocking), and the need to poll with `status`. It also states the pre‑condition (delegate finished). It doesn't cover error cases or side effects explicitly, but for this tool the key behaviors are well communicated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences pack purpose, usage, alternatives, and behavior with zero filler. The primary instruction (use for finished delegates) is front-loaded, and each clause serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter tool without an output schema, the description covers the essential workflow: when to use, what it does, and how to obtain results (poll via `status`). Minor gaps like error handling or repeated follow‑ups are not critical for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents the `prompt` parameter, but `sessionId` is left undocumented. The description does not add explicit meaning for `sessionId` beyond the name and context. With 50% schema coverage, this is borderline; the description could have compensated by explaining that `sessionId` identifies the finished delegate session.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear action (send another prompt) targeted at a specific resource (a finished delegate) while preserving context. Explicitly distinguishes from spawn and steer, making the tool's purpose unambiguous even among many siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides direct guidance to use this instead of spawning a fresh delegate, and explicitly directs to `steer` for a working delegate. The when-to-use and when-not-to-use conditions are spelled out, leaving no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

forgetA

Drop a finished session from the review history, freeing its id for reuse.

NameRequiredDescriptionDefault
sessionIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It clearly discloses the destructive effect ('Drop'), the target ('review history'), and the side effect ('freeing its id for reuse'). It does not mention irreversibility or error behavior, but the core behavior is transparent and specific.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. Every word contributes meaning, and the most important action ('Drop') comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema, the description states the operation, the constraint (finished session), and the outcome (id reuse). It could have pointed to sessions for finding sessionId or to abort for running sessions, but nothing critical is missing for selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema gives no description for sessionId, so the description adds meaning by tying it to a finished session's id and explaining the reuse consequence. It does not explicitly name the parameter or explain where to find sessionId, but the parameter name plus the description make the intent clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Drop') and resource ('finished session from the review history'), and clarifies the consequence ('freeing its id for reuse'). It also distinguishes itself from abort by specifying the session must be finished.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for finished sessions only, which separates it from running-session tools like abort. However, it never explicitly names an alternative or states when not to use this tool, leaving some routing inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

initA

READ THIS FIRST. Reports what this server can reach and how to drive it: permitted tools, the default model, models available per provider, and the recipes for delegating. Every other tool refuses until this has been called once.

NameRequiredDescriptionDefault
cwdNoRepository you intend to delegate in; picks up its project-local pi model scope
modelsNoSubstring to filter the model list, e.g. "deepseek"

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it discloses the most important behavior: all other tools refuse until init runs. It also makes clear this is a reporting/discovery call, implying read-only use, though it does not explicitly address repeated-call safety or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences front-load the critical directive and include the refusal behavior without any filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a discovery tool with two optional parameters and no output schema, the description sufficiently lists what the agent will learn (reachable tools, default model, provider models, delegation recipes) and the prerequisite behavior, making it complete enough to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema's existing explanations for cwd and models, though its mention of model listing aligns with the models parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Reports') and names concrete resources: permitted tools, default model, provider models, and delegation recipes. It clearly positions init as the mandatory discovery/entry-point tool, distinguishing it from siblings like models, which only list models.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit ordering guidance: 'READ THIS FIRST' and 'Every other tool refuses until this has been called once.' This tells an agent exactly when to call init and that no sibling can substitute for it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modelsA

List models this delegate may use: pi's own scoped set plus any custom provider. Use to pick a model value.

NameRequiredDescriptionDefault
cwdNoPicks up a project-local pi model scope
filterNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the list scope (pi's scoped set plus custom providers) but does not mention side effects (none expected), output format, or ordering. For a read-only listing tool this is adequate but not rich; it does not contradict any structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two succinct sentences. The main purpose and usage are front-loaded, with no filler or redundant wording. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple listing tool with two parameters and no output schema, this description covers the core purpose and usage. However, the `filter` parameter is left undocumented, and the description does not mention the return format or any caveats, leaving some operational details unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: `cwd` has a description but `filter` does not. The tool description adds no meaning for `filter` or `cwd` beyond the schema, so the undocumented parameter remains unexplained. It fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List models this delegate may use' with a specific verb and resource. It also specifies the scope ('pi's own scoped set plus any custom provider'), which distinguishes it from the sibling command-like tools (init, run, etc.) that perform actions rather than listings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use to pick a `model` value', giving clear context for when to invoke it. It does not mention when not to use it or name alternatives, but given the sibling set are mostly action-oriented commands, the guidance is sufficient for selecting it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

runA

Delegate a task to a pi agent and wait for the final answer. Blocks until done. Prefer spawn for long work; this is for quick questions.

NameRequiredDescriptionDefault
idNoYour own session id for traceability, e.g. "search-audit-01". 1-64 chars of [A-Za-z0-9._:-], must start alphanumeric, must not already be in use. Defaults to a UUID.
cwdNoWorking directory for the agent
labelNoFree-text note shown in `sessions`, e.g. what this delegate is for
modelNoModel as "provider/modelId", e.g. "openrouter/stealth/ox-alpha"
toolsNoTool allowlist for this delegate. [] disables all tools. Omit for defaults: read, grep, find, ls. Permitted on this server: read, grep, find, ls.
promptYesThe task for the pi agent
extensionsNoLoad pi extensions for this delegate. Off by default; they add startup cost and can misbehave.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it discloses the most consequential trait: the call blocks until the delegate finishes, and it returns the final answer. It does not cover failure/timeout behavior, cost, or isolation of the delegate, which leaves some gaps for an unattended blocking call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, zero waste, and the blocking constraint plus the routing guidance are front-loaded. Every sentence conveys a decision-relevant fact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter delegation tool with full schema coverage and no output schema, the description supplies the missing return semantics ('final answer') and the blocking contract, which the schema cannot express. Minor gap: no mention of what happens on delegate failure or timeout.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all seven parameters (including id, tools allowlist, extensions, model) are already documented in the schema. The description adds no syntax or format meaning beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Delegate a task to a pi agent') and clarifies the interaction model ('wait for the final answer'), then explicitly differentiates itself from the `spawn` sibling. An agent can distinguish this from spawn, spawn_batch, and follow_up without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the alternative (`spawn`) and the exact condition that selects it ('long work') versus the condition for this tool ('quick questions'). This is an explicit when/when-not/alternative statement, which is the top of the scale.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sessionsA

List pi sessions held by this server, running and finished. Finished ones stay readable for review until evicted (keeps the newest 50).

NameRequiredDescriptionDefault
stateNoFilter by state: starting, running, done, aborted, error
verboseNoInclude full text and tool calls

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose that finished sessions remain readable until evicted and keeps the newest 50, which is useful behavioral context. However, it does not mention any authentication requirements, rate limits, or the exact return format (e.g., whether it returns summaries or raw session objects). For a non-destructive list operation, this is partial transparency but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences. The first states the core purpose, and the second adds a relevant retention policy. No fluff or redundancy; every word earns its place. It is front-loaded with the primary action and scope, making it easy for an agent to quickly grasp the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (2 optional params, no output schema, no annotations), the description covers the essential aspects: what it lists, the state scope, and retention behavior. It does not explicitly describe the output format, but for a list tool this is often inferable. The lack of an output schema is partially offset by the clear description of the tool's behavior, making it adequately complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'state' and 'verbose' already documented. The description adds no new parameter-specific detail beyond what the schema provides—it references 'running and finished' which maps to a subset of state values, but this is already inferred from the schema's enum-like description. Since the schema carries the parameter semantics, the description's contribution is minimal, aligning with the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'List pi sessions held by this server, running and finished.' It clearly identifies the tool as a listing operation for sessions, and the mention of 'running and finished' distinguishes it from siblings like 'status' which likely targets a single session. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing sessions but does not explicitly contrast it with alternatives such as 'status' or 'forget'. No when-to-use/when-not-to-use guidance is provided, relying on the agent to infer when this tool is appropriate based on the action of listing. The retention note hints at review use cases, but no explicit routing to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawnA

Delegate a task to a pi agent running in the background. Returns a sessionId immediately, so nothing blocks. Poll with status, redirect with steer, answer its questions with answer. Use this for anything that might take more than a minute.

NameRequiredDescriptionDefault
idNoYour own session id for traceability, e.g. "search-audit-01". 1-64 chars of [A-Za-z0-9._:-], must start alphanumeric, must not already be in use. Defaults to a UUID.
cwdNoWorking directory for the agent
labelNoFree-text note shown in `sessions`, e.g. what this delegate is for
modelNoModel as "provider/modelId", e.g. "openrouter/stealth/ox-alpha"
toolsNoTool allowlist for this delegate. [] disables all tools. Omit for defaults: read, grep, find, ls. Permitted on this server: read, grep, find, ls.
promptYesThe task for the pi agent
extensionsNoLoad pi extensions for this delegate. Off by default; they add startup cost and can misbehave.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the burden and delivers the single most important trait: it returns a sessionId immediately and nothing blocks, so the agent knows not to expect an inline result. It omits other behavioral context such as permissions, session lifetime/cleanup (handled by `forget`/`abort`), and failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and followed by the async contract and lifecycle routing. No filler; every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, no-output-schema tool this covers what an agent most needs: the async contract and the follow-up tools for polling, steering and answering. Residual gaps are minor – return payload shape beyond sessionId and failure/timeout behavior are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains id, cwd, label, model, tools and extensions in detail. The description adds no parameter-level meaning beyond that (e.g. it never mentions the tools allowlist or model override), so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Delegate a task to a pi agent running in the background," which is unambiguous. It implicitly separates itself from `run` via the timing heuristic ("more than a minute"), but never names `run` or `spawn_batch` explicitly, so sibling differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-to-use rule ("anything that might take more than a minute") and then routes the agent through the full lifecycle: poll with `status`, redirect with `steer`, answer questions with `answer`. This is exactly the alternative-naming guidance an agent needs to pick and follow this tool correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

spawn_batchA

Fan out several delegates in one call. Each task inherits the batch-level model, cwd, tools and extensions unless it overrides them. The whole batch is validated before any delegate starts, so a bad model name or a duplicate id fails everything instead of leaving half a fan-out running. Poll the result with sessions, which reports all of them at once, rather than one status per delegate.

NameRequiredDescriptionDefault
cwdNoDefault working directory for every task in this batch
modelNoDefault model for every task in this batch
tasksYes1 to 10 delegates to start
toolsNoDefault tool allowlist for every task in this batch
idPrefixNoNames the tasks `<prefix>-01`, `<prefix>-02`, ... e.g. "audit" gives "audit-01"
extensionsNoDefault extensions setting for every task in this batch

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully covers behavioral traits: whole-batch validation before any start, failure semantics for bad model or duplicate id, and inheritance/override rules. It discloses key outcomes and edge-case behavior, though it does not mention async execution or session cleanup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose and key behavior are front-loaded; the polling guidance is a natural close. Every clause serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description covers purpose, validation, inheritance, and polling—enough for correct invocation. Minor gaps like precise return format are covered by the `sessions` reference, so it is nearly complete for the complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 6 parameters, so baseline is 3. The description adds meaningful semantics beyond the schema: it explains how batch-level defaults are overridden per task, clarifies the idPrefix format, and states the validation impact on parameters. This elevates it above the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Fan out several delegates in one call.' It specifies the resource (delegates) and the batch nature, distinguishing it from the single-delegate spawn. The inheritance and validation details further clarify its exact role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises polling with `sessions` instead of per-delegate `status`, giving concrete guidance on expected follow-up. It implies batch use case but does not explicitly contrast with `spawn` for single-delegate scenarios, leaving some room for inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusA

Check a background pi session. Returns state, turn count, tools used, latest text, and any pending questions the agent is waiting on. A non-empty questions array means it is blocked until you call answer. toolCalls traces every tool the delegate ran, in order.

NameRequiredDescriptionDefault
verboseNoInclude tool results and call ids in the trace
sessionIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the return contents (state, turn count, tools, latest text, pending questions) and explains the blocking semantics of the 'questions' array. It also notes that 'toolCalls' traces every tool run in order, adding behavioral depth beyond the tool name. It doesn't mention side effects, but 'check' implies read-only behavior, and the description sufficiently covers operational behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: two sentences plus a note. It front-loads the purpose, then details the return fields and the blocking condition. Every sentence carries useful information with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description adequately explains what the call returns and how to interpret the 'questions' array. It also clarifies the nature of 'toolCalls'. Minor omissions like error behavior for invalid sessions are not critical for a status-checking tool, so it feels complete enough for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: only 'verbose' has a description; 'sessionId' is undocumented. The tool description does not mention either parameter, failing to compensate for the uncovered 'sessionId'. It doesn't explain what constitutes a valid sessionId or how 'verbose' changes the output beyond the schema's minimal hint. With low coverage and no description support, this is a significant gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Check') and a specific resource ('background pi session'), and enumerates exactly what it returns (state, turn count, tools used, latest text, pending questions). This distinguishes it from siblings like 'sessions' (which likely lists sessions) and 'answer' (which handles questions). The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable guidance on how to interpret the result: a non-empty 'questions' array means the agent is blocked and must call 'answer'. However, it does not explicitly state when to use this tool versus alternatives (e.g., 'sessions' for listing all sessions, or 'steer' for modifying a session). The when-to-use context is implied but not contrasted with siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

steerA

Redirect a running pi agent mid-task. The message lands after its current tool call finishes, before the next model call. Use this instead of aborting when the agent is going the wrong way.

NameRequiredDescriptionDefault
messageYes
sessionIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears the full burden of behavioral disclosure. It transparently explains the timing of when the message lands, which is a key behavioral trait. It does not mention error cases or lack of side effects, but for a simple steering action this is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, concise, and front-loaded with the core action and timing. Every word adds value without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with no annotations and no output schema, the description covers the primary use case and timing behavior. It lacks details on error handling or edge cases, but given the low complexity, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain the parameters at all. While 'sessionId' and 'message' are somewhat self-explanatory by name, the description fails to indicate which parameter identifies the agent or what the message content should be. The description should have compensated for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('redirect') on a specific resource ('running pi agent') and adds timing context (after current tool call, before next model call). It explicitly contrasts with the sibling 'abort', making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit guidance: use this instead of aborting when the agent is going the wrong way. This clearly tells the agent when to choose this tool over a direct alternative, leaving no ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.1
    • Changedanswer2 fields changed
      • removedInput schema / properties / value / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "boolean"
        -  }
        -]
      • addedInput schema / properties / value / type
        Added value: +[
        +  "string",
        +  "boolean"
        +]
    • Changedrun1 field changed
      • changedInput schema / properties / tools / description
        Previous value: -"Tool allowlist for this delegate. Default: read, grep, find, ls. Permitted on this server: read, grep, find, ls."New value: +"Tool allowlist for this delegate. [] disables all tools. Omit for defaults: read, grep, find, ls. Permitted on this server: read, grep, find, ls."
    • Changedspawn1 field changed
      • changedInput schema / properties / tools / description
        Previous value: -"Tool allowlist for this delegate. Default: read, grep, find, ls. Permitted on this server: read, grep, find, ls."New value: +"Tool allowlist for this delegate. [] disables all tools. Omit for defaults: read, grep, find, ls. Permitted on this server: read, grep, find, ls."
  2. 12 tool updatesv0.1.0
    • First observedabort
    • First observedanswer
    • First observedfollow_up
    • First observedforget
    • First observedinit
    • First observedmodels
    • First observedrun
    • First observedsessions
    • First observedspawn
    • First observedspawn_batch
    • First observedstatus
    • First observedsteer

TDQS

A4.1/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct state or action, and the three delegation entry points (spawn/run/spawn_batch) are explicitly differentiated by blocking behavior and fan-out. The message-sending trio (answer/steer/follow_up) is clearly disambiguated by delegate state, and descriptions even cross-reference each other (spawn vs steer vs follow_up).

Naming Consistency4/5

Most names are concise lowercase verbs (spawn, run, steer, abort, forget, init) with a consistent compound pattern for spawn_batch/spawn variants. The deviation is noun-style list tools (sessions, models) and the short 'init', which break a strict verb convention but remain readable and predictable.

Tool Count5/5

12 tools map cleanly onto the delegation lifecycle: launch (spawn/run/spawn_batch), monitor (status/sessions), interact (steer/follow_up/answer), stop (abort), and housekeeping (forget/models/init). Each earns its place with no redundant or filler tools.

Completeness4/5

The surface covers the full delegate lifecycle including batch fan-out, mid-task redirection, post-completion follow-up, Q&A unblocking, and cleanup. Minor gaps exist (e.g. no dedicated blocking wait-for-completion on a spawned session, no explicit per-provider model-filtering view), but agents can work around these via status/run.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    B
    maintenance
    Enables a primary agent in Antigravity IDE to delegate coding tasks to background subagents across multiple model backends, with crash recovery, process cleanup, and human-in-the-loop approval for destructive actions.
    20
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables an orchestrator like Claude Code to hand coding work off to Cursor SDK agents, run as detached background jobs that survive the session and can be listed, inspected, steered, resumed, or stopped. Agents are asynchronous and reusable across follow-up turns, letting expensive frontier models delegate cheaply without blocking or paying to read the results.
    7
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables a coding agent such as Codex or Claude Code to delegate work to a local Pi coding-agent session, including second-opinion reviews, bulk reading kept out of the main context, and follow-up turns that retain context. Operators control what is possible by defining workspace and execution-profile aliases in a local config file, so clients cannot choose directories, models, providers, or permission levels themselves.
    2,808 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables an assistant to run pi coding-agent tasks in the background: dispatching a task, polling its status and tool trace, reading the final result, and cancelling it when no longer needed, all without pulling the delegate's context into its own conversation.
    MIT