Vancetope 0.2.0 is out 🎉
Vancetope 0.2.0 is tagged and pushed — 206 commits since 0.1.0.
If 0.1.0 was “it runs, you can install it”, then 0.2.0 has one theme running through almost all of it: the AI’s behaviour got consolidated. Not new surface for the sake of new surface — the same agents, but far more predictable about when they stop, what they can reach, and what happens when a model misbehaves.
Making agents stop at the right moment
The honest problem with a long-running agent isn’t that it can’t do the work. It’s that it declares victory too early, or won’t let go at all.
- Completion guard — a script that runs at the point where an engine wants
to yield, looks at the task and the output, and can inject a follow-up
instead of letting it stop. Configured per recipe, or switched on live with
//guard inline. Fail-open by design: a broken guard never blocks the engine. - Engine commands — a
//verbcontrol channel into a running process. Change the model mid-conversation (//llm), toggle thinking, activate a skill, inspect the guard. It’s a control plane, deliberately separate from the conversation: nothing you type there is rendered into the prompt. - ESC actually works now, mid-loop, in every orchestrator — Arthur, Ford, Marvin, Vogon, Zaphod, research calls, compose runs, image generation.
A tool surface that fits
An agent with 163 tools and an endpoint that accepts 128 doesn’t degrade — it fails, before inference, with an HTTP 400 and no useful message. 0.2.0 fits the turn’s tool manifest to the endpoint’s real limit, drops whole tool families to deferred rather than cutting individual tools at random, and measures actual demand per role so the decision is informed rather than guessed. Nothing disappears: a demoted tool is one round-trip away, not gone.
Secrets that agents can’t read
Settings gained a second encrypted type. HIDDEN is encrypted and resolvable
from scripts, compose files and agents; PASSWORD is encrypted and readable by
compiled server code and connectors, but invisible to anything dynamic — in
both directions, read and write. There’s a vault behind the same reference
syntax, so moving a secret from settings to Infisical doesn’t invalidate a
single reference.
The unglamorous half
Most of the 206 commits are the kind of thing nobody writes a blog post about,
which is exactly why they matter: assistant content:null stripped for the
providers that reject it, reasoning dialects treated as catalog facts instead of
guesses, empty streaming completions retried, timeouts that scale with context,
a bind lease that no longer kills a live connection, WebSocket keep-alive with
stale eviction, foot reconnecting and re-adopting its session. A password policy
with brute-force lockout. A real MongoDB migration framework instead of
@PostConstruct backfills.
Two of those fixes were found on the morning of the release, by the startup smoke test refusing to go green. That’s the system working.
Worth knowing before you upgrade
0.2.0 is a minor bump below 1.0, so it’s allowed to break — and it does, in a
few places. find_tools / describe_tool are now tool_list /
tool_description, the doc_* / file_* / exec_* families use projectId
consistently, _vance is no longer valid as a project id, and generated compose
files require VANCE_ENCRYPTION_PASSWORD. The full list is in the
changelog.
Try it
- Get started — the Docker stack, a couple of commands, a few minutes.
- Bring your own model — Vancetope ships no model; you connect your own.
- Something broken? Discussions or an issue. Still early, still rough, still real.
Onward to 0.3. 🚀