v0.9.0 — The Convergence Release
Note: This release is tagged
v0.9.0-rcdue to a GitHub immutable releases mishap during the release process. This is the v0.9.0 release — the tag name is just a scar from learning that GitHub won't let you delete and recreate a release once assets have been uploaded.
v0.9.0 is the first Thane release that represents a deliberate pause for architecture, documentation, and process rather than feature velocity. 540 commits since v0.8.4, focused on making the system explain itself as clearly as it operates.
Architectural Convergence
Loops-ng runtime. Every execution path — conversations, delegations, background watchers, email polling, Signal bridge, metacognitive reflection — now runs through a single universal loop primitive. One registry tracks all active loops. One shutdown path drains them all. One dashboard shows them all. The separate bespoke subsystems that accumulated through v0.6-v0.8 have been replaced by three loop modes: request/reply, background task, and autonomous loop.
Autonomous loops. Persistent loops where the agent controls its own pacing via set_next_sleep — deciding after each iteration how long until it looks again. Jitter breaks periodicity. Self-paced and event-driven flavors. This is where Thane's agency lives: the ability to direct its own attention.
Dynamic model registry. The static config-driven model list gave way to a live registry that merges configured models with runtime inventory from providers. LM Studio joins Ollama and Anthropic as a first-class local runner. Virtual models (thane:latest, thane:premium, thane:ops, etc.) surface in the HA model selector, each backed by intent-based routing rather than hardcoded model names.
Prompt and tool pruning. The always-on system prompt shrank as domain-specific doctrine moved behind capability tags. Entry-point talents route knowledge loading by semantic domain. The agent's context window stays lean until it needs depth.
Database consolidation. Six separate SQLite databases consolidated into a single thane.db. Contacts retain their own contacts.db.
Anticipations removed. The v0.6-era anticipation engine was fully replaced by the autonomous loop system — a better-conceived design for the same problem.
New Capabilities
- LM Studio provider with idle TTL support and context expansion
- Anthropic prompt caching for system prompt efficiency
- Native HA automation tools for creating and managing automations
- Platform provider WebSocket for real-time multi-account HA connections
- Behavioral lenses — persistent global context modes across all conversations
- MQTT wake subscriptions — event-driven agent wakes from any MQTT topic
- Notification history awareness in system prompt context
- Tag context providers — live-computed context per capability tag
- Owner-scoped capability tags for per-operator tool isolation
- Release automation with cross-platform binary publishing
Documentation Overhaul
The entire documentation suite was restructured for v0.9.0:
- README scoped to front page with badges (CI, Go Reference, Go Report Card, Go Version, License, Release)
- docs/ reorganized into
understanding/,operating/,reference/hierarchy - New philosophy.md with "Why Home Assistant" and "Privacy by Architecture"
- New architecture.md rewritten around design decisions, not component lists
- New glossary with 27 canonical terms
- New hardware requirements based on production observations
- New project history from first commit through v0.9.0
- AGENTS.md rewritten as the front door for AI visitors
- CLAUDE.md slimmed to Claude-specific concerns only
- Issue templates, PR template, CODEOWNERS, dependabot configuration
- Home Assistant and MQTT documented as required infrastructure throughout
CI Improvements
- godoclint enabled — catches duplicate package comments, wrong package names, missing docs
- lychee link checking — offline verification of all internal markdown links
- 12 GoDoc violations fixed, duplicate package comments eliminated across 12 packages
- Go 1.25 minimum (required by updated dependencies)
- GitHub Actions bumped: checkout v6, setup-go v6, setup-just v4, codecov v6
Infrastructure
- Architecture guardrail recipes track package count, interface count, and other metrics with baselines
- Config example generated from Go struct tags via
go generate— cannot drift from code - Unified iteration engine (
internal/iterate) shared by agent loop and delegates - Content retention infrastructure for request tracing and dashboard inspection
Breaking Changes
- Go minimum version is now 1.25 (was 1.24)
- Six SQLite databases consolidated into
thane.db— existing installations will migrate automatically - Anticipation engine removed — use autonomous loops or MQTT wake subscriptions
- Several capability tool names changed (
request_capability→activate_capability)
Upgrade Notes
If upgrading from v0.8.x:
- Back up your existing config and databases
- Build from source:
just build - Database migration happens automatically on first start
- Review
examples/config.example.yamlfor new configuration options - The
anticipationconfig section is no longer used and can be removed
Full Changelog: v0.8.4...v0.9.0-rc