Skip to content

0.2.0

Latest

Choose a tag to compare

@kxrk0 kxrk0 released this 10 Sep 23:03

Two hundred and twenty commits since v0.1.62. The agent got smaller and more
honest, the transcript got readable, and updates now come from our own feed.

The tool surface: 118 became 16

A long tool list does not sit quietly in the model's context — it competes for
attention, and past about twenty definitions the model starts picking a
plausible wrong one or inventing a name. Thirty-four of ours were shell
wrappers, and a model drives a shell from training rather than from sixteen
descriptions it has to read first.

  • The git, gh, npm, tsc, eslint, format, LSP, snapshot, memory and index tools
    are gone. execute_command replaced all of them.
  • search_code works with no key of anybody's: the embedder now follows the
    keys that exist instead of defaulting to one nobody had.
  • read_file returns a window with a map — 500 lines plus the file's symbol
    outline — instead of a 17,000-token dump.
  • update_plan came back, because the harness could not see a plan written in
    prose. The transcript row is the tool call.
  • sessions lets a chat read and message the app's other chats.
  • A registry test fails above twenty tools, so adding one back is a decision
    rather than a side effect.

The transcript reads like a record of work

  • One line per step, folded into a run with a sentence that says what happened:
    "Ran 3 commands (1 failed), read 2 files".
  • Repeated calls collapse into one row with a count, and a repeat that was
    failing is marked — the loop is the finding.
  • Short thoughts ride as a chip on the step they led to; long reasoning keeps
    its words.
  • A run past eight steps windows down, and Inspect opens the whole truth in
    the rail.
  • The plan docks over the composer; the answer stands before the receipts.

Updates come from our own feed

  • The updater reads updates.vellumcode.com rather than a public GitHub repo,
    which keeps real client IPs in the logs and lets the feed file carry
    no-store while installers stay immutable.
  • Release notes travel inside the feed, so the update modal is never blank.
  • CI dropped macOS — ten times the minutes for an installer Gatekeeper blocks —
    and the Linux checks moved to a self-hosted runner.

The CLI is a real package

npm i -g vellum-code now works: the published package ships a bundle, because
Node refuses to strip types under node_modules. vellum task gained the
subagents it was missing, and background commands work without a terminal
emulator.

The model is told the truth more often

  • One behaviour contract written three ways — terse for Claude, explicit for
    OpenAI, spelled out for open-weights models.
  • The system prompt splits into a cacheable half and a per-turn half, so the
    ~4,100-token prefix stops being re-evaluated every turn.
  • A tool call the model typed in its chat template's syntax now runs as the
    call it is.
  • A SEARCH that matches twice edits nothing and says so; a failed SEARCH says
    where the file actually differs; CRLF checkouts match.
  • A model repeating itself is stopped instead of streamed for an hour.
  • Edit-time diagnostics for every language with a server, not just TypeScript.
  • Compaction prunes on an absolute token floor, not only a fill ratio, and
    hands its casualties to the read-before-edit tracker.

Fixes worth naming

  • A rebuilt agent came back with no memory of the conversation — a model switch
    made it answer as if the chat had just begun.
  • Stopping a background session left its process running, so a dev server kept
    its port after the tool said it was stopped.
  • A search engine's bot challenge was read as an empty web, and the agent gave
    up and guessed a URL.
  • A project folder that is gone says so instead of throwing.
  • Every project-less chat gets its own sandbox instead of sharing one folder.