New services/ai-agent/runner/: a Node CLI the sidecar launches exactly like
`claude` (-p/--session-id/--resume/--model). It runs pi 0.80.6 headless on
Qwen 3.6 (OpenRouter via vendor-prefixed ids, EVOX2 LM Studio via bare ids,
with WoL wake), persists pi sessions keyed by the viewer's session UUID, and
mirrors the event stream as a Claude-Code-schema transcript under
~/.pi-runner/transcripts so the viewer parses it with zero new code. Ships a
folder-permissions extension (tool_call gate: writes only inside
PI_PERM_SCOPE, read roots, bash path scan, secrets deny-list) — pi itself has
no permission system.
sidecar.py: harness field on /spawn + /resume routes pi sessions to
RUNNER_BIN (claude untouched); pi model ids get their own validation regex.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>