Release notes — v1.2.0 (Learning, Trust & Clients)
Date: 2026-07-23
Scope: everything merged since v1.1.2 — 26 commits across four feature programs, all live-E2E validated on the local daemon
Summary
daari now learns from your usage (feedback loop, routing tuner, LoRA
fine-tune pipeline), measures its own cache trustworthiness (shadow-sampled
false-hit rate — a metric none of the compared commercial routers ship),
connects to more clients in one click (Claude Code with full agent tool
passthrough, JetBrains/Zed/Continue via an Ollama-compatible facade), and
secures public tunnel exposure with gateway API-key auth.
Highlights by program
Phase D — Local learning (#56–#66)
| Feature |
Detail |
| Outcome store (D1a) |
Implicit capture of category/tier/confidence/escalation per request; explicit accept/reject via POST /v1/daari/feedback |
| Evidence-based recommendations (D1b) |
daari learn stats + daari learn recommend emit a ready-to-paste routing.category_policies block |
| Routing tuner (D1c) |
Per-category confidence thresholds adjusted from outcomes (learning.auto_tune) |
| Example capture (D2a) |
Opt-in full (prompt, completion) capture; rejects are deleted |
| Dataset export (D2b) |
daari learn export-dataset → mlx-lm chat-format train/valid JSONL |
| LoRA runner (D2c) |
daari learn finetune plans + runs mlx_lm lora --train with auditable run.json |
Trust & Efficiency trains (#70, #75, #79)
| Train |
Detail |
| Cache trust |
Embedding-input normalization; per-category answer-diversity monitor; shadow sampling of L1 hits → measured false-hit rate that auto-raises the similarity threshold |
| Token savings |
Anthropic cache_control prompt-cache hint on L6; conversation compaction (old history summarized by L3); sentence-level relevance compression before L6 |
| Latency-aware routing |
daari profile hardware benchmarks; routing.latency_budget_ms + per-category + X-Daari-Latency-Budget; warm-model preference via /api/ps |
| Learned routing |
daari learn train-router centroid classifier; overrides heuristics when confident |
| Budget & client UX |
Monthly + soft budgets with frontier_budget_warning; per-client ledger attribution + daari report --by-client; opt-in pre-L6 PII scrub |
One-click clients (#82, #85, #89)
| Feature |
Detail |
| Claude Code one-click |
daari setup claude-code merges the env block into ~/.claude/settings.json; undo restores backup or strips daari keys |
| Anthropic tool passthrough |
Full agent E2E: tools/tool_use/tool_result flow through the router; streamed tool_use blocks with stop_reason: "tool_use" |
| Ollama-compatible facade |
/api/tags, /api/chat (NDJSON stream), /api/version, /api/show, /api/ps — JetBrains AI Assistant, Zed, Continue connect by pasting http://127.0.0.1:11435 |
| Live-session fixes |
Ollama 400 bodies preserved in logs; num_ctx sized from prompt (4096–32768) so large agent system prompts stop truncating; tool-call args JSON-string→object |
Security & routing controls (#87, #92)
| Feature |
Detail |
| Gateway API-key auth |
server.api_key + middleware (Bearer / x-api-key); daari setup cursor --tunnel auto-generates and wires the key |
| Per-project profiles |
.daari.yaml at repo root (max_tier_for_chat, no_frontier, latency_budget_ms, client_id) + X-Daari-Project header; daari project init/show |
Streaming L1 semantic cache + draft injection, request-log rotation, embedding
LRU memoization, and the web-UI usage/savings/traces dashboard.
Testing
- Suite: 489 pytest (162 at v1.1.2) + ruff, plus browser-extension and
web-ui DOM suites — all green in CI (test/lint/sanity/extension required
checks on
main).
- Live E2E battery (2026-07-22, running daemon): 11/11 — OpenAI fresh→L3,
repeat→L0, SSE stream, Anthropic
system + streamed tool_use, facade
tags/chat, stats/report/traces/diversity endpoints.
- Per-project profile cap live-verified A/B: same long prompt L4 without
header, L3 with
X-Daari-Project.
Upgrade notes
- All new behaviors are default-safe: normalization + shadow sampling are on
(read-only additions); compaction, compression, learned router, PII scrub,
example capture, and budgets are opt-in via
~/.daari/config.yaml.
- If you expose daari through a tunnel, re-run
daari setup cursor --tunnel
once to generate server.api_key, then restart the daemon.
- Claude Code users:
daari setup claude-code is now fully agent-capable;
expect reduced quality vs Claude on complex multi-step work (local models),
not missing functionality.