March 19, 2026
The Great Card Purge
Refactored the ACT pipeline to remove rigid card-based UI in favor of tool-agnostic outputs and dynamic tool discovery.
Decoupling UI from Logic
Today was a massive cleanup day. We realized that our card-rendering infrastructure—while visually polished—was becoming a significant architectural bottleneck. By requiring specific services for document cards, list cards, and scheduler cards, we were violating the core tool-agnostic principle of the project. The backend was spending too much effort worrying about frontend layout.
I’ve stripped out the card_renderer_service and its associated skills. Instead of these rigid UI structures, tools now return plain text or HTML via a simplified output_service. This moves the responsibility of presentation back to the client and keeps the intelligence layer focused on intent and data.
Dynamic Tool Discovery
To replace the hardcoded card logic, I introduced the find_tools innate skill. This allows the ACT (Action-Context-Task) loop to dynamically discover tools based on the current goal rather than relying on pre-defined UI triggers. This makes the agent much more flexible; it can now search for the right capability on the fly.
Streamlining the Pipeline
I also took the opportunity to simplify the task state machine. I ran a migration to remove the ‘proposed’ state from the persistent_task_service. We found that the friction of a proposal phase often got in the way of execution; if the intent is clear, Chalie should just move to act.
Related updates include:
- Thread Management: Enhanced
thread_servicewith better context management to ensure the agent doesn’t lose the plot during long-running tasks. - Voice API: Improved audio handling to support the new output flow.
- Orchestration: Cleaned up the
act_orchestratorandgoal_inference_serviceto reduce latency between thought and action.