March 17, 2026
Interface Layer and System Decoupling
Introduced a new interface pairing protocol, bridged telemetry signals to the world state, and removed Docker-based tool execution for a leaner architecture.
The Interface Layer
Today marks a significant milestone in Chalie’s ability to interact with the outside world. We’ve implemented a formal Interface Layer, complete with a Bluetooth-style pairing protocol. This uses a one-time key with a 10-minute TTL to authorize external daemons. These interfaces are now registered in the ToolRegistryService under a new interface source type.
To keep the system robust, we added a health monitoring worker that checks these interfaces every 30 seconds. If an interface fails three consecutive checks, the system attempts auto-recovery or marks it as offline. This allows remote tools—like a weather station or a home automation server—to act as first-class citizens in the Chalie ecosystem.
Telemetry and Signal Bridging
A critical piece of the telemetry pipeline was bridged today. Previously, user context (location, device state, behavioral data) was primarily updated via POST /health. However, frontends often communicate via signals. We’ve updated WorldStateService to detect context_update signals and bridge them directly into ClientContextService.save().
This ensures that ambient inference and learning services always have the freshest data, regardless of which pipe the telemetry arrived through. Furthermore, external signals now bypass the reasoning loop entirely. They are written to specific slots in the WorldStateService memory store with a temporal decay logic (6-hour half-life), preventing noisy sources from dominating the agent’s attention. The reasoning loop simply discovers these signals during idle cycles.
Architectural Cleanup: Docker Removal
We made the decision to strip out the Docker-based tool execution environment. While ambitious, managing container lifecycles for every tool was adding unnecessary latency and complexity. All tools have been migrated to either the new Interface Layer or local subprocess execution. This allowed us to delete tool_container_service.py and execution_environment.py, and drop the docker dependency from our requirements. The frontend now reflects this change, moving away from “Building container” language to a simpler “Installing” state.
Finally, a small but necessary fix: the VERSION file is now correctly copied into the Docker image, ensuring the deployment version displays accurately in the UI.