2026.7.3
The trust release. One theme: prove it, don't claim it — the taste hit-rate score, measured cost before you spend, evidence drill-downs, governed out-of-workspace access with a hard floor for secrets, upgrades that verify themselves and roll back, and Windows joining as a supported (degraded) platform.
Security
- Same-origin gate on the console: cross-origin browser requests are rejected on both HTTP and the
WebSocket handshake (closes cross-site WebSocket hijacking and file-endpoint CSRF; non-browser clients
and the console's own frontend are unaffected). Applies even on loopback. - Skill integrity lock enforced on the production paths: a tampered
trust: untrustedskill is refused
at the recall index, at every disk-scan fallback, and again before sandbox execution. - Deterministic context ceiling at the LLM gateway choke-point: a request whose assembled context
(messages + system + tools schema, CJK-aware estimate) exceeds the model's window is refused fail-loud
instead of being sent to fail.
Fixed
- H2A decision cards: every proposal kind now lands in the decision column (reject button + payload intact);
multiple pending cards no longer overwrite each other; pending cards (incl. deferred) survive restart. - Domain deontic rules (
forbid/oblige/permit) now reach the runtime guardrail (previously only
value.mddid — and it was dropped entirely whenvalue.mdwas blank); no double-injection with compiled
per-role prompts. - Decisions made over REST now feed the preference flywheel and the decision log exactly like WebSocket ones.
- Task terminal states (done/error) are recorded into Trace, so the async evaluators see task-level outcomes.
- Backend Chinese reason/detail strings are translated in the English UI (contract-tested: a new backend
reason without a translation fails the suite).
Added
-
Taste hit-rate — "more you", proven: before you decide a card, the system quietly predicts your
call from your crystallized preferences; after you decide, it settles the bet. The decision-prefs
panel now shows "it predicts your calls N% of the time (last 20; previous period M%)". Honesty
built in: only bets placed before your decision count, failed predictions aren't counted, and
below 10 samples it says "still learning you" instead of a fake percentage. -
Cost before you spend: execution-type decision cards (delegate / rerun / roundtable) show what
recent similar tasks actually cost ("~12.4k tokens each, range 8k–18k, last 10") — measured from
per-task token attribution, never guessed; hidden until there are at least 3 real samples. -
One-click MCP channel presets — the Coding capability card now has a "Connect a channel" section:
pick a well-known MCP server (filesystem scoped to a folder — defaults to the workspace, web fetch,
GitHub, memory, time, SQLite), fill in a folder/token where needed, and it's written into
config.yaml'smcp.servers(secrets stay in config.yaml, never echoed back). The UI states honestly
that MCP servers connect at startup, so a restart is required to load the new tools. -
The decision flow is now phone-friendly — open the LAN token link (
karvyloop url) on your phone
and approve/reject/edit decision cards comfortably: on small screens the cockpit stacks into a single
column with the decision column first, ACCEPT/DEFER/REJECT become thumb-sized full-width targets, the
edit-then-accept textarea no longer triggers focus-zoom, and chat opens as a full-screen sheet. Purely
additive CSS (one media query) — the desktop layout is untouched by construction. -
Out-of-workspace access, governed: roles are confined to the workspace by default; when one needs
a path outside it, the denial surfaces as a decision card ("grant this folder?") — approve once and
the grants ledger opens exactly that path (tool boundary + capability chain + sandbox mounts all honor
it; revocable in the Capability overview). Sensitive paths (API keys, ssh, credential stores) are a
hard floor: never grantable, immune even to bypass mode. -
Open a company (starter templates): five staffed, working domains — personal research, finance
research, job hunt, content studio, home ops — each with values, hard deontic rules, and roles with
souls; one click in the Domains panel, yours from the first use. -
Upgrades now snapshot state, verify the install, and auto-roll back on failure (one click back on
the console): before switching versions the updater records the current commit
(~/.karvyloop/update_rollback.json) and backs up your instance state files
(~/.karvyloop/backups/, last 3 kept, honest scope in eachmanifest.json); after install it
smoke-checks that the new code actually imports, and a broken build is rolled back to the previous
known-good commit automatically — with the reason stated out loud, never a silent broken restart.
POST /api/update/rollback+rollback_available/prev_versionin the update status payload. -
karvyloop export— your instance is a folder, now with a button: packs~/.karvyloop
(skills, knowledge, preferences, history) into one portable archive with a self-explaining
MANIFEST.txt; secrets (config.yamlwith your API keys,console.runtime.json,*.lock)
are deliberately left behind. Unpack on the new machine, add your key,karvyloop console— home. -
Idle = 0 LLM calls is now a tested contract (
tests/test_idle_zero_llm.py): when nothing
changed, the daily slow side burns nothing — knowledge consolidation and skill tagging hit their
watermarks without touching the gateway, and the daily loop's idle path provably exits before any
LLM work. No overnight heartbeat bills. -
Windows is now a supported (degraded) platform: the runtime, console and your own crystallized
(knowledge-only) skills run fully on Windows; only third-party skill scripts are refused — fail-closed,
with a clear message explaining the degraded mode (no sandbox on Windows yet; Linux/macOS keep the full
sandbox). Ships a one-line PowerShell installer mirroringinstall.sh
(irm https://raw.githubusercontent.com/Caprista/KarvyLoop/main/scripts/install.ps1 | iex): dedicated
venv under%LOCALAPPDATA%\karvyloop, akarvyloop.cmdshim on the user PATH, Python 3.11+ guard with
py -3.11fallback. -
Edit, then accept on decision cards: kinds with an actionable text field let you fix the proposal
in place and approve your version — the original→edited contrast feeds decision-preference
crystallization (the richest taste signal there is), and an edit counts as real judgment for the
high-stakes gate. -
Under-the-hood drill-down on task details: expand any task to see the real actions beneath the
narration (tool calls and outcomes, projected from the Trace). -
Kinder first-run: model-connection failures now say what's actually wrong (bad key / wrong
endpoint / unreachable) before the raw error, and a local Ollama install is auto-detected and
offered as a one-click, no-API-key path. -
Semantic tag layer for skill recall (
tags:in SKILL.md, matched alongside token overlap — no vectors),
with a daily slow-side backfill that tags untagged own skills once (untrusted skills untouched). -
Capability overview (
/api/capability/overview+ a card in the Skills panel): one table for
tools × mode floors and skills × trust/network/integrity-lock.
Changed
- Internal restructuring, no behavior change: the workflow / distill / roundtable engines moved out of
console/routes.pyinto their own console modules, and the core loop moved fromcli/main_loop.py
to the newkarvyloop/runtime/package (karvyloop.cli.main_loopremains as a compatibility shim).
Removed
- Six unreachable packages from an earlier architecture cycle (
ethos,syntonos,instance,
onboarding,l0,bus, ~2.6k lines): superseded by the current design (verify gate + evaluators,
per-role paradigm compiler, H2A decision cards,a2a/transport) or parked concepts whose designs
live in the design docs. No live code imported them; recoverable from git history.