Skip to content

v2026.7.9

Choose a tag to compare

@github-actions github-actions released this 09 Jul 17:38
0cb1297

Added

  • Added MCP skills-carry support: a skill can ship MCP servers via an mcp.json sidecar or SKILL.md mcp: frontmatter; their tools stay hidden (zero payload cost) until the skill loads.

  • Added the opt-in MCP proxy exposure tier (exposure:"proxy"): one mcp_<server> gateway tool with search/describe/call ops.

  • Added MCP resources: mcp_list_resources/mcp_read_resource utility 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, logLevel filtering, burst capping) and user documentation at docs/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, and tool_result pipeline.

  • Added senpi app-server mode 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: mcpServers config (global, project, and imported Claude
    Desktop configs) with TypeBox validation and env interpolation, stdio and streamable http transports, 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 /mcp command 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,
    and logout, with OAuth completion delivered via auth_login_url / auth_login_end session 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 via neoDaemon.idleShutdownMs). Gated OFF by default behind SENPI_ENABLE_NEO=1: until the
    per-platform neo binary packages ship, the flags are absent from --help and 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 terminal extension): the bash tool is now PTY-backed with run_in_background, cols, and rows, plus companion tools bash_output (with wait_for/filter/view:"screen"), bash_input (stdin + named keys), bash_resize, and kill_bash. Backed by @earendil-works/pi-pty (native ConPTY on Windows, child_process pipe fallback otherwise). Adds SENPI_GIT_BASH_PATH + shell-kind resolution (cmd /c, PowerShell -NoProfile -Command), terminal.* settings, idle-guarded async completion wake, and permission-gates bash_input in the bash class. See docs/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-pty loader read its version eagerly via require("../package.json"), which does not exist in the embedded Bun filesystem. It now falls back to the package.json shipped beside the executable (lockstep-versioned), so the Bun binary starts.
  • Fixed the native @earendil-works/pi-pty prebuild 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-fast can auto-compact and retry when the provider reports the wire model gpt-5.5.
  • Fixed the built-in todowrite tool 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, 0 disables; retry.provider.timeoutMs overrides), so a silently dead connection fails with a retryable idle-timeout error and auto-retry recovers the turn. Previously the guard was off unless retry.provider.timeoutMs was set, which left the Bun binary (no undici dispatcher protection) hanging indefinitely.

Removed

  • Removed the never-functional pi-codex-app-server extension and flags; earlier Unreleased entries described unwired scaffolding rather than a usable integration surface.