v0.8.0
v0.8.0 Release
346 files changed · +13,465 / −8,431 LOC (net +5,034)
New Features
Self-Refining Skill Library
A full skill system that lets Chalie discover, create, and refine reusable playbooks at runtime.
- SearchableAbility base class — common FTS5 + vec search logic extracted into a shared base for all abilities
- find_skills — skill lookup available on every turn without needing
find_toolsfirst (ALWAYS_AVAILABLE) - Layer 2 skill association — after ACT loops, associates touched behavioral patterns with relevant skills for future recall
- 73 curated playbooks — expanded from 5, sourced from open-source repos (incl. 7 bash-using skills);
skills.sqliterebuilt - Skill Builder — create, edit, delete, and list skills via natural language; Brain Skills tab with click-to-expand read-only view
- Proactive skill suggestion — background analysis after complex multi-step tool loops suggests skills to create or invoke; later reworked to run fully subconsciously via a dedicated
SkillManagerAbility - Policies auto-generated from the ability registry — every ability declares its own policy category and labels; the Brain dashboard and REST API derive from this metadata automatically
Safe Execution Pipeline
A layered approach to giving Chalie filesystem and shell access — safer, purpose-built tools land first, with bash as the general-purpose fallback. Every tool is policy-gated per context.
search_files— cross-platform glob + grep, a safe alternative to shellfind/grep. Defaults to the home directory,max_files/context_linesparams, internal time budget returns partial results before timeoutweb_download— stream a URL to a local file path. URL scheme validation (http/https), shared SSRF guard. Policy: confirm in chatfile_write— write or append content to the filesystem, single-path policy. Read-before-write guard: the LLM mustreadan existing target before it can overwrite itfile_permissions—chmodability with before/after auditbash— general shell execution. The LLM self-classifies each command into one of 7 risk categories; heuristic overrides can only escalate (never downgrade) the risk level. Secrets scrubbed from the environment, output capped, destructive commands (e.g.rm -rf) blocked. Denied in background and external contextspre_dispatchhook — abilities can inspect and re-classify params between handler lookup and the policy check
Cooperative ACT Loop Cancellation
The ACT loop no longer has a fixed MAX_ITERATIONS cap — it runs until the task is done or the user stops it.
- Cooperative cancellation via
threading.Event, checked after each LLM call - Stop button in the chat UI; stopping collapses the in-progress ACT trail into a bubble
- Mid-turn redirect — send a new message while Chalie is working to steer it without a full stop (replaces the old
SteerAbility, now deleted) - Subagent panel — list, stop, and directly address running subagents, with a per-action policy matrix
Geo-Tagging & Named Places
Location awareness across conversations and memory.
- Transcript and episode location columns for geo-tagged conversations
- Named places — save, list, and delete named locations (home, office, etc.)
- Departure reminders — reminders triggered by leaving a named place (also supports location-only reminders)
- Location-based pattern learning — learns behavioral patterns tied to specific places
- Location-filtered memory search — episodic recall filtered by place
- Brain UI: location column replaces the key column in the episode memory view
Vault DEK Backup & Recovery
- The vault data-encryption key is backed up to the filesystem on init, with append-forever timestamped backups retained for password-verified recovery
- Login recovery flow tries all backups newest-first and skips a corrupt latest, so a single bad backup can't lock the user out
ACT Trail Tooltips
- Each tool call in the ACT trail now shows a human-readable summary on hover
- Summaries are generated at call time and never persisted — zero storage overhead
find_tools Guard-Rails
- When the LLM discovers certain tools, contextual guidance is injected steering it toward safer or more appropriate alternatives first
- First guard-rail: browser →
read("usereadfor simple page content before reaching for the browser") - Extensible pattern — new tools add an entry to the guard-rail dict
HTML Table Support
- Full HTML table rendering in LLM output (
table,thead,tbody,tfoot,tr,td,th) - System-prompt guidance for when to use tables, CSS theming, and TTS word-break handling
Ubiquiti Network Control (Early Alpha)
Shipping as an early alpha — functional but expect rough edges while it's refined.
- 9-action UniFi capability: manage clients, devices, firewall rules, DNS, VLANs, and more
- Dual authentication: local UniFi controller and UniFi Cloud
- Dedicated Brain UI tab for Ubiquiti setup
Brain Dashboard
- Token usage table below the usage chart, with full time-slot coverage
- Day table shows only today's UTC hours (no longer bleeds yesterday's)
- Provider API-key links are now clickable
- OpenAI-compatible providers now list available models correctly
- Native
confirm()dialogs replaced with themed Radiant modals
Chat UX
- Enter adds a newline — use the send button or Shift+Enter to send
- Timestamps formatted server-side via the locale service — no client-side date parsing
chalie_docsself-reference tool for querying Chalie's own documentation
Infrastructure & Tooling
- Migrated from
requirements.txttopyproject.toml+ uv for dependency management - Runtime dependency management — voice and Playwright dependencies installed on demand rather than upfront
- CI simplified — removed 4 workflows, CodeQL restricted to a weekly run
- Default port changed from
8081to31025; Python auto-install removed from the installer - App identification headers added to all LLM provider clients
- Model context window capped at 200k tokens
Refactoring & Cleanup
FileMapperService
All repository-layout paths now resolve through a single OOP singleton, replacing the procedural paths.py. 15 private constants, 26 classmethod helpers, 53 files migrated.
Interface System Removed (−2,365 LOC)
The interface SDK, protocol layer, and gateway were removed entirely; the extensibility model proved unnecessary. Deno install steps and Docker ENV cleaned up.
PWA Removed (−879 LOC)
Service worker, manifest, install prompts, push-notification subscriptions, and VAPID key handling removed. A self-unregistering service worker ships to clean up stale installs.
Dead Introspection System Removed (−756 LOC)
SelfModelService was inert — returning empty strings on every healthy turn. Removed the service, background worker, thread-health publisher, and associated REST endpoints.
OOP Singletons (−694 LOC)
Personality and heartbeat services converted to proper singletons; the background-process subsystem was ripped out of WorldState.
Tool Tier Centralisation
SEARCH_TOOLTIPfield added to all abilities for a richerfind_toolsindex- Visibility tiers (
ALWAYS_AVAILABLE/DISCOVERABLE/BLOCKED) centralised on theMessageProcessorbase class - Operational prompts slimmed from 9 to 3
Other
- Pre-trained classifier heads relocated from
resources/intobackend/ - Shared data utilities extracted (handle helpers, JSON-column parsing,
Emailclass)
Fixes
- Document pipeline — upload timeout raised 10s → 120s with a named timeout error; uploads now report success only at a terminal
readystate; image OCR extraction wired up (TKT-706/707/708) code_eval— guarantees an actionable result instead of a silent empty success; allowed by default in all channels (TKT-584)- Ability errors surfaced to the LLM — the dispatcher no longer silently drops error messages
- Behavioral patterns — rediscovered patterns now update strength, evidence count, and retrieval weight; patterns surface in memory-recall search; concise behavioral rules enforced over episodic narratives (TKT-581/582/601)
- Theme contrast — dialog and scrollbar contrast fixed in light theme; the theme toggle no longer navigates away from
/brain/(TKT-685/686/687) sub_idpropagation — correctly persisted to thetool_callsrow via the params pipeline- Skills modal fixes and
rm -rfbash classification (TKT-691/692) - Voice stamp migration, installer upgrade check, and
uvPATH export - Test-tier hygiene — moved network-dependent tests to the integration tier, derived concept-LUT counts from source YAML, cleaned dead mocks and stale phase4 invariant allowlists
🤖 Generated with Claude Code