v2026.7.9
Added
-
Added MCP skills-carry support: a skill can ship MCP servers via an
mcp.jsonsidecar or SKILL.mdmcp:frontmatter; their tools stay hidden (zero payload cost) until the skill loads. -
Added the opt-in MCP proxy exposure tier (
exposure:"proxy"): onemcp_<server>gateway tool with search/describe/call ops. -
Added MCP resources:
mcp_list_resources/mcp_read_resourceutility tools,@mcp:<server>/<uri>prompt mentions, and resource-update subscriptions. -
Added MCP prompts as slash commands (
/mcp:<server>:<prompt>) with argument collection and editor injection. -
Added MCP elicitation (form mode) with sequential input dialogs, clean declines in non-interactive runs, and a bounded cancel timeout.
-
Added MCP server log routing (RFC-5424 levels onto the per-server logger,
logLevelfiltering, burst capping) and user documentation atdocs/mcp.md. -
Added automatic title generation for unnamed sessions from the first meaningful user prompt, using the active model in a cached forked request.
-
Added the
pi.executeTool()extension API so extension code can run active tools through the normal validation, permission,tool_call, andtool_resultpipeline. -
Added
senpi app-servermode for Codex-compatible app-server integrations, including stdio, websocket, and websocket-over-UDS transports, multi-session serving, wire approval requests, daemon subcommands, and protocol documentation. -
Added built-in MCP support as a builtin extension:
mcpServersconfig (global, project, and imported Claude
Desktop configs) with TypeBox validation and env interpolation,stdioand streamablehttptransports, bearer
and OAuth (code / client-credentials) auth, server lifecycles (lazy/eager/keep-alive) with idle shutdown,
spec-correct tool registration with exposure policies (auto/direct/search/proxy) and
include/exclude filtering, server instructions injection into the system prompt, secret-redacting per-server logs,
and the/mcpcommand suite (status,add,enable/disable,test,logs,reconnect). Uses the
exact-pinned official MCP SDK. -
Added auth RPC commands for external UIs:
get_auth_providers,login_start,login_cancel,login_api_key,
andlogout, with OAuth completion delivered viaauth_login_url/auth_login_endsession events. -
Added the neo TUI launch handoff (
--neo,--neo-isolated,--neo-bin) and the shared neo daemon
(--listen <socket>: supervisor with atomic registry, token+version handshake, per-connection worker processes,
and idle shutdown vianeoDaemon.idleShutdownMs). Gated OFF by default behindSENPI_ENABLE_NEO=1: until the
per-platform neo binary packages ship, the flags are absent from--helpand parse as unknown flags so a released
build never exposes a non-functional--neo. The Go daemon supervisor forces the gate on for its own child. -
Added a convention guard that rejects senpi-defined PascalCase tool names in core and builtin extension tool registrations.
-
Added the persistent-terminal tool suite (built-in
terminalextension): thebashtool is now PTY-backed withrun_in_background,cols, androws, plus companion toolsbash_output(withwait_for/filter/view:"screen"),bash_input(stdin + named keys),bash_resize, andkill_bash. Backed by@earendil-works/pi-pty(native ConPTY on Windows,child_processpipe fallback otherwise). AddsSENPI_GIT_BASH_PATH+ shell-kind resolution (cmd/c, PowerShell-NoProfile -Command),terminal.*settings, idle-guarded async completion wake, and permission-gatesbash_inputin thebashclass. Seedocs/terminal-tools.md.
Changed
Fixed
- Fixed the compiled Bun single-file binary crashing on every command (
Cannot find module '../package.json'): the bundled@earendil-works/pi-ptyloader read its version eagerly viarequire("../package.json"), which does not exist in the embedded Bun filesystem. It now falls back to thepackage.jsonshipped beside the executable (lockstep-versioned), so the Bun binary starts. - Fixed the native
@earendil-works/pi-ptyprebuild sentinel being coupled to the CalVer package version, which made every release invalidate the vendored prebuilds (the publish gate failed with a__senpiPtyV<version>sentinel mismatch). The sentinel is now a stable native-ABI tag (__senpiPtyAbi1) that only changes on a backward-incompatible native change, so CalVer releases no longer require rebuilding or re-vendoring the prebuilt binaries. - Fixed context-overflow recovery for configured upstream model aliases, so a selected alias such as
gpt-5.5-fastcan auto-compact and retry when the provider reports the wire modelgpt-5.5. - Fixed the built-in
todowritetool call row to show the actual todo items instead of only an item count. - Fixed sessions going stale forever when the network dropped and reconnected mid-stream: the agent loop's provider stream idle timeout is now enabled by default (follows
httpIdleTimeoutMs, default 5 min,0disables;retry.provider.timeoutMsoverrides), so a silently dead connection fails with a retryable idle-timeout error and auto-retry recovers the turn. Previously the guard was off unlessretry.provider.timeoutMswas set, which left the Bun binary (no undici dispatcher protection) hanging indefinitely.
Removed
- Removed the never-functional
pi-codex-app-serverextension and flags; earlier Unreleased entries described unwired scaffolding rather than a usable integration surface.