March 3, 2026

Consolidating the Architecture

Finalized the migration from external services to a unified internal architecture while improving intent detection and startup reliability.

The Final Cleanse

Today marked the official conclusion of our transition away from external dependencies like Redis, RQ, and PostgreSQL. We’ve completed a massive purge of legacy references across the codebase—renaming redis_client.py to memory_client.py and updating over 70 files to point toward our internal MemoryStore. This wasn’t just a search-and-replace; it involved rewriting SQL queries to move from Postgres-specific syntax (like EXTRACT) to SQLite-compatible logic and ensuring our internal memory service supports Redis-style sorted set operations like zscore and zremrangebyscore for cooldown tracking.

Intent and Performance

We’ve introduced a more robust intent classification system that specifically looks for actionable keywords. This allows the mode router to boost the ‘ACT’ mode score when a user clearly intends to get something done.

On the performance front, the Wikipedia tool was migrated from a sandboxed Docker execution model to a trusted subprocess. By removing the container overhead, we’ve shaved nearly 200ms off the startup latency for search queries without losing functionality. We also addressed several cold-boot issues, including a false 503 error on the PromptQueue and more resilient health checks via MemoryStore.ping().

Environment Reliability

To make the developer and deployment experience more consistent, we introduced a canonical run.sh launcher. This script handles virtual environment syncing and dependency checks automatically, using .deps-installed stamps to skip redundant installs.

We also tackled a frustrating platform-specific bug where the sqlite-vec PyPI wheel for aarch64 was shipping a broken 32-bit binary. The Dockerfile now builds this native extension from source during the image build, ensuring vector search works reliably on ARM-based servers and Apple Silicon.

Refined UX and Stability

Several quality-of-life fixes landed today:

  • WebSockets: The worker now explicitly emits close signals after IGNORE-mode responses, preventing the frontend from timing out while waiting for a message that was never coming.
  • Mobile UI: Provider cards now stack vertically on mobile devices to prevent horizontal overflow.
  • Authentication: Auth failures are now properly propagated to the frontend, clearing intervals and triggering the login flow rather than silently failing in the background.