Files
fusion/packages/pi-claude-cli
gsxdsm c1a2b6edd7 fix(pi-claude-cli): unblock parameterless MCP tool calls in triage
Triage with claude-sonnet-4-6 via pi-claude-cli kept looping on
fn_review_spec calls that were rejected by pi's validator with
"root: must be object". Parameterless MCP tools (schema
{type:"object", properties:{}}) emit zero input_json_delta events,
so partialJson stayed "" and the catch fell through to
finalArgs = "" — a string, which TypeBox's Type.Object({}) rightly
refuses. Default empty partialJson to {} so the call lands.

Also:
- Add a 2-step reminder loop in triage before swapping to the
  fallback planning model — primary models that wrote PROMPT.md
  but forgot fn_review_spec recover from a nudge, no need to pay
  the cold-start tax of a new triage on a different model.
- Inject @runfusion/fusion's own pi extension into dashboard/
  daemon/serve sessions and propagate the path to createFnAgent
  via setHostExtensionPaths so fn_* tools register globally
  without requiring `pi install npm:@runfusion/fusion`.
- Drop the "historical" qualifier from replayed tool labels —
  Claude was reading "TOOL RESULT (historical Read):" as
  "previous session, ignore" and looping on verification.
- Remove subprocess-lifecycle stderr debug logs that landed for
  hang diagnosis — root cause is fixed, the noise can go.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:00:49 -07:00
..
2026-04-25 11:38:48 -07:00
2026-04-25 11:38:48 -07:00

pi-claude-cli

A pi extension that routes LLM calls through the Claude Code CLI as a subprocess. Use your Claude Pro/Max subscription as the LLM backend — no API key, no separate billing.

How it works

The extension registers as a custom pi provider exposing all Claude models. Each request spawns a claude -p subprocess using the stream-json wire protocol, with --resume on follow-up turns to reuse the CLI's session state instead of replaying full history. Claude proposes tool calls, pi executes them natively. Custom pi tools are exposed to Claude via a schema-only MCP server.

Requirements

  • Claude Code CLI installed and authenticated (claude on PATH)
  • A Claude Pro or Max subscription
  • pi or GSD

Installation

Add to ~/.gsd/agent/settings.json:

{
  "packages": ["npm:pi-claude-cli"]
}

Then select a Claude model via /model in the interactive UI. All Claude models appear under the pi-claude-cli provider.

Features

  • Streams text, thinking, and tool call tokens in real-time
  • Maps tool names and arguments bidirectionally between Claude and pi
  • Exposes custom pi tools to Claude via MCP (schema-only, no execution)
  • Break-early pattern prevents Claude CLI from auto-executing tools
  • Session resume via --resume eliminates history replay on follow-up turns
  • Configurable thinking effort with elevated budgets for Opus models
  • Cross-platform subprocess management (Windows, macOS, Linux)
  • Inactivity timeout and process registry for cleanup

License

MIT