Vorno 0.16.0
August 15, 2026
Features
- Automation refusals are now visible in run history. v0.15.0's loop protection was correct but silent: an action stopped by a guard produced a log line and nothing else, so a rule that worked and then quietly stopped was indistinguishable from one that never matched. Every refusal now writes a history record in the same envelope as an executed action —
skipped:self-trigger,skipped:depth-exceeded,skipped:rate-limited, orskipped:unknown-action— rendered as blocked in the Automations timeline, with the reason and the target session. The last one covers a rule that fires normally while one of its actions names a type nothing dispatches; its healthy actions still run. - New
apply-contextautomation action: activate a named context profile on a session. One action type for session context, not one per knob. A profile incontext-profiles/config.jsoncarries a working directory, sources, and permission mode, reviewed once and reused by id — so a label can become a declarative context activator. Raising the permission mode requiresallowEscalationon the profile itself (lowering is always free), and a profile structurally cannot close a session. Skills are deliberately not a profile field — they aren't session state; that knob is tracked separately as PLAN-032.
Improvements
- Session-action rows in the Automations run history now render a real summary — action, target, and outcome — where the timeline previously showed an em-dash for all of them, leaving a refused action indistinguishable from a successful one except by a red dot.
- The outcome vocabulary operators grep for (
set-status:…,rejected:…,deferred:…,skipped:…) now has a single producer shared by all three executors, so the strings in your history can no longer drift apart by host. - An action type a host doesn't implement is recorded as
skipped:unhandled-action:<type>instead of reporting a clean success with no trace.
Bug Fixes
- Mistyped action names that suggest a context change (
addWorkingDirectory,enableSkill,enableSource,applyContext) now get a "did you meanapply-context" suggestion in config validation instead of dead-ending.