
echos
Your personal AI knowledge system. Self-hosted, agent-driven, and always private.
This release addresses a critical issue where the categorize_note tool could silently overwrite external edits to markdown files with stale, cached content. We’ve updated the tool to prioritize the on-disk file as the single source of truth, ensuring that any changes made via tools like Obsidian are properly preserved during categorization. This update prevents unintentional content loss and keeps your local file system and database in sync. 
Resolved a critical data loss issue where the categorize_note tool was silently overwriting external markdown edits with stale SQLite data. By updating the logic to prefer reading from the disk as the source of truth, we ensure that changes made in external editors like Obsidian are correctly preserved during categorization and vector embedding. Includes new unit tests covering update, fallback, and category-change paths to prevent future regressions.

The EchOS MCP documentation was previously inaccessible because the /mcp route collided with Mintlify's built-in MCP server endpoint. By renaming mcp.mdx to mcp-server.mdx and updating the navigation config, we've successfully restored visibility to the documentation. Users can now access the guide at the new /mcp-server path. 
This release significantly upgrades the search engine with new hybrid search scoring methods, including temporal decay and hotness-based ranking, alongside a new cross-encoder reranking stage for improved precision. We also added full support for the Model Context Protocol (MCP), allowing easy integration of your knowledge base into LLM-powered agents as tools and resources. These enhancements, verified by a newly added search benchmark suite, provide a more accurate and extensible search experience. 
This update introduces three new MCP resource providers—notes://, tags://, and categories://—enabling MCP-compliant clients to interact directly with the knowledge base. By supporting resource listing and reading, external agents can now programmatically browse, filter, or fetch documents with proper frontmatter handling. This significantly improves interoperability and accessibility of your notes content. 
We've added a dedicated documentation page for EchOS search quality metrics, detailing our testing methodology and current performance results. This covers comparative analysis across configurations and query types, while providing clear instructions for engineers to reproduce these benchmarks locally using pnpm bench:search. Transparency in our search performance helps better align expectations for hybrid and reranking capabilities.
We've added an optional MCP server to the EchOS daemon, allowing AI clients like Claude Code and Cursor to directly interact with our core knowledge tools. This integration exposes seven key functions—such as search_knowledge, create_note, and find_similar—enabling deeper agentic context, with configurable security options like bearer token authentication and request body size limits. Now your favorite AI coding assistants can natively navigate your knowledge base.

We've added a comprehensive benchmark suite to evaluate search performance, covering various corpus sizes, pipeline configurations, and query types including keyword, semantic, and temporal. By using deterministic pseudo-embeddings, the tests are fully reproducible without requiring external API keys. This allows for precise measurement of Precision@5, Recall@10, and MRR, and we've already confirmed that our hybrid search pipeline significantly outperforms keyword-only approaches across all scales. 
This update introduces a new persistence layer for tracking note access patterns, enabling a content-aware 'hotness' boost in search results. By applying a sigmoid-based frequency-recency formula to search scores, frequently accessed notes naturally rise to the surface, while those that become stale experience automatic temporal decay. The feature is seamlessly integrated into the hybrid search pipeline and supports per-query opt-out for full flexibility. 
We've added an optional cross-encoder reranking stage to our hybrid search pipeline, using Claude Haiku to refine the sorting of top-N search candidates. The implementation includes robust graceful degradation, ensuring that the original RRF-fused order is preserved if the reranking call fails or if an API key is missing. This update enhances retrieval precision while maintaining search reliability. 
Updated the implementation plan by shifting entity extraction tasks to Phase 14 and aligning their internal dependencies to reflect the new structure. This clarifies the roadmap for implementing structured entity storage, automated extraction, graph-based retrieval, and contradiction detection.
Updated the implementation documentation to explicitly label the 'Knowledge Graph & Auto-Curation' phase as a future objective. This clarifies that while these capabilities are envisioned for large-scale knowledge bases, the project is currently focused on optimizing smaller, personal-scale toolsets.
We've added a new hotness scoring layer to the hybrid search pipeline to prioritize frequently accessed and recently used notes. The implementation tracks retrieval counts and timestamps in a new SQLite table and applies a sigmoid-based boost during search, which includes a temporal decay factor to ensure relevance stays current. This feature is enabled by default but can be toggled off via SearchOptions if needed.

Hybrid search results now incorporate exponential temporal decay, ensuring that more recent notes are ranked higher by default. We've introduced a configurable 90-day half-life, with the flexibility to disable decay or adjust the half-life parameter directly through the search tool interface for more tailored retrieval. This refinement ensures your most relevant and up-to-date knowledge stays at the top of your search results. 
We've significantly upgraded the search retrieval pipeline, moving beyond simple vector similarity to implement a robust multi-stage ranking system. This includes temporal decay and hotness scoring for recency/relevance, followed by a cross-encoder reranker for high-precision final sorting. To ensure ongoing quality, we've also introduced a full benchmark suite to track search performance. 
This release introduces several key enhancements, including one-time reminders by default with optional recurrence and improved media handling for Twitter articles. Additionally, you can now upload documents directly from Telegram and toggle emoji reactions via the new TELEGRAM_REACTIONS configuration. These updates streamline integration workflows and offer more flexibility in how you manage your notifications and content. 
We have officially cut the v0.18.0 release for the Echos knowledge management system! This version update covers a broad range of internal packages and plugins, signaling a new stable milestone for the agent-driven architecture project. Check the latest tag for the full breakdown of features and enhancements included in this release.
This bundle update bumps several key packages, most notably including significant breaking API changes in @mariozechner/pi-agent-core and @mariozechner/pi-ai (v0.65.2). To accommodate this, we refactored the imperative agent methods (e.g., setModel, setSystemPrompt) in favor of direct state property mutation and handled the renaming of error to errorMessage across our web and telegram modules. While dependency updates are usually routine, this one required explicit code adjustments to maintain compatibility. 
This update aligns the codebase with the recent breaking API changes in 'pi-agent-core' 0.65.x, replacing imperative setter methods with direct state property mutations and updating the error state naming convention. These changes ensure full compatibility with the newer core version and keep our internal logic consistent with the upstream agent architecture. Everything has been verified with a full build and test suite run. 
Resolved startup and file-watching crashes caused by js-yaml silently parsing unquoted ISO timestamps into Date objects, which are incompatible with SQLite bindings. Added robust normalization helpers—toIsoString, toStringArray, and toStringOrUndefined—to ensure consistent metadata handling across the system. Regression tests were added to cover YAML sequence and non-scalar frontmatter inputs. 

