github badlogic/pi-mono v0.24.0

latest releases: v0.64.0, v0.63.2, v0.63.1...
3 months ago

Added

  • Subagent orchestration example: Added comprehensive custom tool example for spawning and orchestrating sub-agents with isolated context windows. Includes scout/planner/reviewer/worker agents and workflow commands for multi-agent pipelines. (#215 by @nicobailon)

  • getMarkdownTheme() export: Custom tools can now import getMarkdownTheme() from @mariozechner/pi-coding-agent to use the same markdown styling as the main UI.

  • pi.exec() signal and timeout support: Custom tools and hooks can now pass { signal, timeout } options to pi.exec() for cancellation and timeout handling. The result includes a killed flag when the process was terminated.

  • Kitty keyboard protocol support: Shift+Enter, Alt+Enter, Shift+Tab, Ctrl+D, and all Ctrl+key combinations now work in Ghostty, Kitty, WezTerm, and other modern terminals. (#225 by @kim0)

  • Dynamic API key refresh: OAuth tokens (GitHub Copilot, Anthropic OAuth) are now refreshed before each LLM call, preventing failures in long-running agent loops where tokens expire mid-session. (#223 by @kim0)

  • /hotkeys command: Shows all keyboard shortcuts in a formatted table.

  • Markdown table borders: Tables now render with proper top and bottom borders.

Changed

  • Subagent example improvements: Parallel mode now streams updates from all tasks. Chain mode shows all completed steps during streaming. Expanded view uses proper markdown rendering with syntax highlighting. Usage footer shows turn count.

  • Skills standard compliance: Skills now adhere to the Agent Skills standard. Validates name (must match parent directory, lowercase, max 64 chars), description (required, max 1024 chars), and frontmatter fields. Warns on violations but remains lenient. Prompt format changed to XML structure. Removed {baseDir} placeholder in favor of relative paths. (#231)

Fixed

  • JSON mode stdout flush: Fixed race condition where pi --mode json could exit before all output was written to stdout, causing consumers to miss final events.

  • Symlinked tools, hooks, and slash commands: Discovery now correctly follows symlinks when scanning for custom tools, hooks, and slash commands. (#219, #232 by @aliou)

Breaking Changes

  • Custom tools now require index.ts entry point: Auto-discovered custom tools must be in a subdirectory with an index.ts file. The old pattern ~/.pi/agent/tools/mytool.ts must become ~/.pi/agent/tools/mytool/index.ts. This allows multi-file tools to import helper modules. Explicit paths via --tool or settings.json still work with any .ts file.

  • Hook tool_result event restructured: The ToolResultEvent now exposes full tool result data instead of just text. (#233)

    • Removed: result: string field
    • Added: content: (TextContent | ImageContent)[] - full content array
    • Added: details: unknown - tool-specific details (typed per tool via discriminated union on toolName)
    • ToolResultEventResult.result renamed to ToolResultEventResult.text (removed), use content instead
    • Hook handlers returning { result: "..." } must change to { content: [{ type: "text", text: "..." }] }
    • Built-in tool details types exported: BashToolDetails, ReadToolDetails, GrepToolDetails, FindToolDetails, LsToolDetails, TruncationResult
    • Type guards exported for narrowing: isBashToolResult, isReadToolResult, isEditToolResult, isWriteToolResult, isGrepToolResult, isFindToolResult, isLsToolResult

Don't miss a new pi-mono release

NewReleases is sending notifications on new releases.