Skip to content

v0.2.9

Latest

Choose a tag to compare

@github-actions github-actions released this 15 Sep 00:49
· 4 commits to main since this release

Smith v0.2.9

Smith 0.2.9 fixes task_output, which could never run, and stops the
capability budget from killing turns: reference skills now register as an
outline plus one entry per section, skills get a bounded share of the
budget, and the budget itself follows the model instead of being a fixed
count.

Fixed: task_output could never read a background task

Polling a background task failed every single time with prepared filesystem permission requires a filesystem resource. The tool claimed
fs.read over a resource named by task ID, and the executor pairs a
declared permission against the prepared resource before any host is
asked: a filesystem permission requires a filesystem resource, and a task
ID is not one. Nothing about the task or the host mattered — the call was
rejected before it ran.

A background task's spool is a captured stream, not a workspace file, so
it claims stdio.read over the background_task resource and declares
no filesystem effect. Smith's tool authority allows it unattended, bound
to that resource kind so stdio authority cannot be borrowed to read
anything else: polling a build you already started does not raise an
approval prompt, and a model that backgrounded a long build can watch it
again.

Fixed: activating one more capability could kill the turn

A turn died with capability budget exceeded: 12101 tokens of 12000
while its input budget still had 900k tokens free. Three things
compounded.

Mid-turn registry.search staged capabilities as though the session were
empty. The selector consumes its budget from zero — right for the first
selection of a turn, wrong for every later one — so it bound a schema
that fit on its own but not beside what was already active, and the
planner then rejected the whole turn instead of the model getting a
"nothing fit" answer it could act on. Staging now charges the active set
first.

Skills had no ceiling. A tool schema is a few hundred tokens; a skill
carries instruction prose and can be thousands, and activation is
monotonic, so one bound speculatively on the first turn still holds its
tokens on the last. Skills now get a bounded share of the capability
budget — a tenth, floored so one reference section always fits and capped
at half so they can never crowd the tool schemas out.

And the overflow was fatal. The capability budget is resolver
discipline, and by the time the planner sees the fragments the
capabilities are already bound, so refusing the plan sheds nothing — it
only destroys a turn that would have fit the model's window. An overflow
is now recorded on the plan and carried on context_planned as
capability_overflow. What does not fit the input budget is still
rejected exactly as before.

Changed: reference skills load a section, not a document

Each built-in reference embedded a whole shipped document, so activating
smith.security spent 4.3k tokens and smith.configuration about 10k —
and because activation is monotonic, a reference bound on an early turn
held those tokens for the rest of the session. Three of them together
took 10,289 tokens of a 12,000 budget and left almost nothing for tools.

A reference now registers as a cheap outline naming its sections, plus
one activatable skill per ## section. The agent binds the outline to
see what a reference covers, then binds only the section that answers the
question in front of it. The same three references cost 715 tokens
instead of 10,289. The split happens by heading at load time rather than
by splitting the files, so docs/*.md stay whole for human readers and
for the links they carry, and an activated section is still byte-identical
to the shipped document.

Changed: the capability budget follows the model

context.capability_budget was an absolute token count applied to every
model. The input budget it is carved from is derived per model, so the
same number was a comfortable allowance on a million-token window and an
immediate failure on a small one, with nothing in a run to say which you
had.

Left unset, it is now derived from the model's own input budget — 15%,
clamped to 8,192–65,536 — and narrowed to the input budget itself, so a
model too small for the floor is bounded by its own window. Setting the
key explicitly still overrides the derivation.

Upgrading

Existing configuration, sessions, and protected checkpoints remain
compatible. An explicit context.capability_budget keeps working and
still wins over the derived value; removing it lets Smith size the budget
from the model.

Built-in reference skills changed name and shape: smith.configuration,
smith.headless, smith.persistence, and smith.security are now
outlines, and each section is its own entry such as
smith.security.credentials-and-secret-handling. A user, workspace, or
session skill that shadows one of the four by name shadows the outline,
as before.

The pinned Agent Runtime revision moves to 5291844
(smith-baseline-v0.2.9).

Full Changelog: v0.2.8...v0.2.9