- Added in-memory session storage abstraction with SessionStorage interface and MemorySessionStorage implementation.
- Added configurable bash interceptor rules with pattern-based command interception settings.
- Added AbortSignal support to 80+ web scrapers for request cancellation.
- Changed task tool to require explicit task `id` field and single `agent` parameter at top level.
- Removed `submit_review` tool - reviewers now use `complete` tool with structured output.
- Replaced Date.now() and crypto.randomUUID() with nanoid() for unique ID generation throughout codebase.
- Added webSearchProvider, imageProvider, and git.enabled settings for configurable provider selection and feature toggles.
- Added offset and limit parameters to Output tool for paginated reading of large outputs.
- Added provider fallback chain for web search with WebSearchProviderError class for graceful degradation.
- Changed generate_image tool to save images to temp files instead of inline base64 to reduce context bloat.
- Changed web search default model from claude-sonnet-4-5-20250514 to claude-haiku-4-5.
- Added git command interception in bash to redirect to dedicated git tool when enabled.
- Added ImageMagick fallback for image processing when sharp is unavailable.
- Added image-magick utility module with detection, conversion, and resize functions.
- Changed web_fetch tool label from 'web_fetch' to 'Web Fetch'.
- Updated image-convert and image-resize to use ImageMagick fallback instead of failing or returning original.
Branch summary prompts when navigating away from a branch are now
controlled by a setting (disabled by default). Enable in Settings →
Config → "Branch summaries" to restore the previous prompting behavior.
- Windows uses cmd /c start instead of raw start (shell builtin)
- macOS uses open, Linux uses xdg-open
- Wrapped in try-catch to fail silently when unavailable
- Added VoiceSupervisor and VoiceController classes for realtime voice mode using OpenAI Realtime API.
- Added echo suppression, noise floor filtering, and fallback transcript handling for voice input.
- Changed voice mode toggle from Caps Lock to Ctrl+Y with auto-send on silence behavior.
- Changed default TTS model from gpt-4o-mini-tts to tts-1.
- Added kwaipilot/kat-coder-pro model and removed deprecated OpenRouter models.
- Added voice mode with Caps Lock push-to-talk for speech-to-text and text-to-speech using OpenAI APIs.
- Added voice settings configuration for transcription model, TTS model, voice selection, and audio format.
- Added description field to task tool for user-facing progress summaries in subagent spawning.
- Added isCapsLock helper function to tui package for Kitty protocol key detection.
- Added getApiKeyForProvider() method to ModelRegistry for retrieving API keys by provider name.
- Added terminal cursor mode support to Editor component with setUseTerminalCursor() and getCursorPosition() methods.
- Added getCursorPosition() method to Component interface and Container class for cursor position aggregation.
- Added hardware cursor positioning and visibility management to TUI class with change detection.
- Enabled terminal cursor mode in HookEditorComponent and CustomEditor for proper cursor blinking.
- Added 30+ built-in color themes and comprehensive symbol customization via theme presets and overrides.
- Added status line segment editor with presets, separators, and customizable left/right segments.
- Added Biome CLI-based linter client as alternative to LSP for diagnostics and formatting.
- Added 20MB file size limit for image files to prevent memory issues during serialization.
- Replaced hardcoded Unicode symbols throughout codebase with theme-configurable symbol system.
- Replaced FooterComponent with new StatusLineComponent featuring powerline-style segments and Nerd Font icons.
- Added git branch detection with file watching and status tracking with 1-second TTL cache.
- Added setTopBorder() method to Editor component for custom status content in top border.
- Changed Editor component to use rounded box-drawing characters for borders.
- Renamed footer theme properties to statusLine prefix across dark and light themes.
- Added automatic browser opening after exporting session to HTML.
- Added automatic browser opening after sharing session as a Gist.
- Extracted browser-opening logic into reusable openInBrowser method.
- Added createLspWritethrough factory for unified LSP-aware file write operations with formatting and diagnostics.
- Added syncContent and notifySaved LSP client methods for in-memory content synchronization.
- Added EditMatchError class and utils module with once and untilAborted helper functions.
- Changed FileDiagnosticsResult interface: renamed diagnostics->messages, hasErrors->errored, serverName->server.
- Changed session title generation to trigger before first message instead of after agent work begins.
- Simplified edit and write tools by delegating to writethrough callback and removing manual abort handling.
- Redesigned Extension Control Center from 3-column layout to tabbed interface with provider tabs.
- Replaced sidebar tree navigation with horizontal tab bar supporting TAB/Shift+TAB cycling.
- Added session header/footer output in text mode showing version, model, provider, and thinking level.
- Removed HolyGrailLayout and SidebarTree components in favor of TwoColumnBody with tabs.
- Added Extension Control Center dashboard with three-column layout, fuzzy search, and keyboard navigation.
- Added extension enable/disable functionality with persistent settings via SettingsManager.
- Renamed /status command to /extensions with /status as alias.
- Removed dynamic discovery settings from settings selector in favor of new extension dashboard.
- Fixed title generation flag reset when starting new sessions.
- Added localhost URL detection for OpenAI-compatible provider auto-configuration.
- Changed terminal title prefix from 'pi:' to 'omp:'.
- Added debug logging for title generation model lookup, API key retrieval, and request/response handling.
- Removed title length validation that rejected titles over 60 characters.
- Added Time Traveling Streamed Rules (TTSR) feature for real-time pattern matching and rule injection during streaming.
- Added TtsrManager with configurable settings for context mode, repeat mode, and repeat gap.
- Added TTSR trigger support across all rule discovery sources (builtin, cline, cursor, windsurf).
- Added abort signal handling in agent loop to support stream interruption for TTSR.
- Added TtsrNotificationComponent for displaying rule violation notifications in interactive mode.
- Fixed /status command output to use consistent column alignment across all sections.
- Refactored status rendering to collect all line sections before calculating max width.
- Renamed dev:install script to install:dev for consistency.
- Renamed CLI command references from 'pi' to 'omp' throughout documentation.
- Updated version update notification to suggest 'omp update' instead of npm install.
- Updated SDK and extension loading documentation with new command naming.
- Added unified capability-based discovery system for loading configuration from 8 AI coding tools (Cursor, Windsurf, Cline, GitHub Copilot, Gemini, Codex, Claude, VS Code).
- Added Discovery settings tab in interactive mode for enabling/disabling configuration providers.
- Added provider source attribution showing which tool contributed each configuration item.
- Added support for tool-specific rule formats including Cursor MDC, Windsurf global_rules, and Cline .clinerules.
- Changed MCP tool name parsing to use last underscore separator for improved server name handling.
- Refactored core loaders (skills, hooks, custom tools, slash commands) to use capability API instead of manual directory scanning.
- Renamed CLI binary and package from 'pi' to 'omp' across all platforms and installers.
- Changed environment variable prefix from PI_* to OMP_* with automatic migration support.
- Changed configuration directory from ~/.pi/ to ~/.omp/ with multi-path fallback discovery.
- Added getConfigDirPaths(), findConfigFile(), and readConfigFile() functions for config resolution across .omp, .pi, and .claude directories.
- Added `pi update` command for checking and installing CLI updates from GitHub releases or bun.
- Added cross-platform installer scripts (shell and PowerShell) with automatic PATH configuration.
- Changed HTML export to use compile-time bundled templates via Bun macros.
- Changed `exportToHtml` and `exportFromFile` functions to async operations.
Files referenced with @path/to/file.ext syntax are automatically read
and injected as synthetic Read tool calls before the agent responds,
eliminating the need for manual file reads.
- Added custom TypeScript slash commands loaded from ~/.pi/commands/ and .pi/commands/ directories.
- Added support for loading markdown slash commands from Claude's ~/.claude/commands/ and .claude/commands/ directories.
- Added commands.enableClaudeUser and commands.enableClaudeProject settings to control Claude command directory loading.
- Implemented CustomCommandAPI with exec, typebox, and pi module injection for command execution context.
- Integrated custom commands into autocomplete provider for interactive mode discovery.
- Added interruptMode option to control when queued messages interrupt tool execution.
- Implemented "immediate" mode (default) to check queue after each tool and interrupt remaining tools.
- Implemented "wait" mode to defer queue processing until the entire turn completes.
- Exposed interruptMode configuration in interactive settings UI with immediate/wait options.
- Wired interrupt mode through AgentSession and SDK to enable runtime configuration and persistence.
- Renamed SMALL_MODEL_PRIORITY to SMOL_MODEL_PRIORITY
- Renamed findSmallModel to findSmolModel
- Updated all role strings from 'small' to 'smol'
- Updated UI labels and comments
- Settings now use modelRoles map (e.g., { default: 'anthropic/claude-sonnet-4-5', small: 'anthropic/claude-haiku-4-5' })
- Session persistence uses 'provider/modelId' string format with optional role field
- Model selector: Enter sets default, S sets small, Escape closes
- Added role markers in selector: checkmark for default, lightning bolt for small
- Task tool supports pi/<role> aliases (e.g., model: pi/small, haiku, flash, mini)
- Title generation uses configured small model with auto-discovery fallback
- Explore agent now uses pi/small as primary model preference
- Added automatic session title generation using small models (Haiku/GPT-4o-mini/Flash) to improve session identification.
- Implemented terminal window title updates to display current session context.
- Updated session selector to show title with dimmed first message preview for better session browsing.
- Extended SessionInfo and SessionHeader interfaces to persist and display generated titles.
- Added title model preference hierarchy with fallback to any available model for reliability.
- Added LSP format on write to automatically format code files using language server formatters after writing.
- Implemented LSP server warmup at startup to avoid cold-start delays when first writing files.
- Added LSP server status display in welcome banner to show which language servers are active and ready.
- Fixed recent sessions display in welcome banner which was never wired up.
- Improved grep tool description to document pagination options and clarify recursive search behavior.
- Replaced vendored highlight.js with CDN-hosted version to reduce bundle size by ~1200 lines.
- Added CSS, JS, and HTML minification functions to reduce exported file size.
- Implemented caching for minified template and JS assets to avoid redundant processing.
- Updated share preview URL to use gistpreview.github.io for session sharing.
- Introduced declarative settings definitions to eliminate duplicated setting logic across UI and handlers.
- Extracted settings configuration into settings-defs.ts for single-source-of-truth maintenance.
- Simplified SettingsSelectorComponent to generate UI from definitions rather than hardcoded items.
- Added bash interceptor toggle to allow users to control shell command interception behavior.
- Updated CLI help text to reflect all available tools with accurate default states.
- Consolidated settings change handling into unified handler dispatching by setting ID.
- Replaced process group kill with descendant-aware tree traversal to handle non-leader processes.
- Added pgrep-based child discovery with /proc fallback for broader Linux compatibility.
- Introduced optional grace period parameter to allow SIGTERM before SIGKILL for graceful shutdown.
- Simplified focus return value in interactive mode for consistency.
- Added specialized Exa web search tools for deep search, code context, URL crawling, LinkedIn, and company research.
- Implemented settings UI for granular control over Exa tool availability with per-feature toggles.
- Changed Exa addon defaults to disabled to prevent unexpected API usage for LinkedIn, company, researcher, and websets features.
- Added settings manager methods to persist individual Exa feature preferences.
- Renamed npm package scope from @mariozechner to @oh-my-pi across all packages for consistent branding.
- Removed packages/pods directory and all related pod management functionality.
- Updated import paths and module declarations throughout codebase to reflect new package names.
- Reformatted code with consistent trailing comma removal and ternary operator alignment.
- Added MCP (Model Context Protocol) support with stdio and HTTP transports for external tool integration.
- Implemented plugin system with install, enable, configure, and doctor commands for extensibility.
- Added 22 Exa MCP tools for web search, LinkedIn, company research, and websets operations.
- Introduced LSP tool with rust-analyzer support for code intelligence (diagnostics, hover, references, code actions).
- Added task tool for delegating work to specialized subagents with parallel execution support.
- Implemented web_search and web_fetch tools with Anthropic and Perplexity provider support.