Repository navigation
v0.1.4 — the Stop-hook loop fix
volens keeps a project's documentation in step with its decisions: an append-only decision log, a design snapshot derived from it, and a hook that refreshes the snapshot automatically — no hand-maintenance.
/plugin marketplace add https://github.com/funcpn/volens.git
/plugin install volens@volens
This is the fifth release and the first one published. The four before it were tagged retroactively, so the version history is complete — what each of them fixed is below.
0.1.4 — the Stop-hook loop (fixed)
The most serious bug so far. When the DESIGN.md write never landed, the hook re-injected the same delta on every Stop — 98 injections over 240 seconds, burning tokens with nothing to show for it. Two defects underneath:
- the script never read its hook input, so it could not see
stop_hook_active - the injected instruction said only "never skip the write", which gave the model no way out
Both fixed. The guard is scoped to Stop only, since that field is not sent to SessionStart. A write that gets refused is now reported instead of failing silently.
Reproduced end to end after the fix: 2 hook executions, 18 seconds, normal exit — and the second Stop produced no output at all, which is the guard firing.
0.1.3 — escape hook output
Hook output was being concatenated into JSON rather than escaped.
0.1.2 — the skill no longer asks the model to judge whether the hook is live
The skill told the model to hand-update DESIGN.md when it found no hook installed. To evaluate that condition the model inspected ~/.claude/plugins/installed_plugins.json — which is correct and expected to be empty there, because that file tracks marketplace installs only. A skills-directory install never appears in it. So the model concluded the hook was missing and took over a job the hook was already doing.
Both conditionals deleted. The always-loaded CLAUDE.md contract module already carries the governing rule.
0.1.1 — the notice was invisible
systemMessage was nested inside hookSpecificOutput, where Claude Code silently ignores it. It has to be top-level.
0.1.0 — first release as a plugin
The documentation model ships as a plugin: the sync hook now lives in the plugin's hooks/ instead of being written into your project.