Skip to content

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 07 Sep 01:53
· 30 commits to main since this release

Smith v0.2.1

Smith 0.2.1 makes 0.2.0's installed coding agents work where they were
advertised: as delegated children, on a Gemini binding, and with what they did
visible in the transcript.

Fixed: a child runs on the agent its profile names

Spawning a child on a profile whose model id is cli/claude-code/sonnet failed
on its first turn, reporting that a provider had rejected the request — naming
a provider the profile only borrows a model identity from.

The child had been composed against exactly that provider. Only the root path
installed an external agent backend, so a child profile that named an installed
agent resolved its provider for identity and limits, as it should, and was then
asked to produce the turn with cli/… as the model id. What the user saw was
an HTTP provider refusing a model it had never heard of.

A preflighted child route now carries what executes its turns, and three things
follow:

  • A child on an installed-agent profile runs its turns on that agent, and a
    child that inherits its parent's profile runs wherever its parent's turns do.
  • The backend runs in the child's own workspace, not its parent's, and the
    CLI's own tools are narrowed to the same decision the child's tool view
    already makes. A read-only spawn does not get write-capable tools back
    through the agent it happens to run on, and no caller can grant tools the
    owner did not configure.
  • An agent whose program is not installed is named. The root refuses to start
    with the program and the [harness.<kind>] key that would fix it; a child
    route reports it at spawn, so one uninstallable child profile cannot stop a
    session that may never spawn it.

Fixed: child results are delivered on Gemini

Every completed child on a Gemini binding failed to reach its parent, moments
after finishing, as Config: Gemini provider rejected the request — and the
result was lost with it.

Gemini's Interactions API refuses a request whose conversation ends with a
model turn, and that is the shape every attributed internal turn plans: the
turn adds no message of its own, because its instruction rides in the turn's
context, so the conversation still ends where the assistant last spoke.
Delivering a completed child is one such turn. Smith now closes that ending
with one explicit continuation turn on this adapter, and only on it.

Installed agents show their work

A harness turn's tool rows read Read(run by the agent) — the tool's name and
nothing else — while the CLI's own stream was carrying what it had actually
done all along.

Those rows are now projected the way Smith's own calls are: Read(src/lib.rs · agent), Bash(cargo test · agent), with the agent's reported outcome as the
row's bounded result preview. The vocabulary is the vendors' — Claude Code's
Read, Bash, Edit, Grep, Task; Codex's commands, file changes, and MCP
calls — but the rule is Smith's: every displayed field is named beside the tool
that gives it meaning, then normalized and bounded, and a shape this build has
no reviewed projection for keeps the value-free row rather than a generic
rendering of JSON. agent stays as the last qualifier, because Smith still did
not dispatch these calls and cannot vouch for them.

Codex reports a command when it starts as well as when it finishes. Smith
ignored the start, so a slow command appeared only once it was over; its row
now opens when the command does.

Fixed: SMITH_LOG no longer refuses to start Smith

SMITH_LOG is the tracing level Smith documents and reads, but setting it
aborted configuration resolution as an unknown SMITH_* setting — exactly when
someone reaches for it. Host-process variables are now skipped rather than
matched against the setting table; any other unknown SMITH_* name is still
refused.

Upgrading

The macOS and Linux archives, the curl installer, and
@forgeailab/smith@0.2.1 all carry this version. Existing
~/.smith/config.toml files, sessions, and protected checkpoints are read
unchanged, and the pinned Agent Runtime revision is unchanged from 0.2.0.

One deliberate exception: a child route's policy fingerprint now records what
executes its turns, so a durable child persisted by an earlier version is
restored reporting child reconstruction policy changed, and one interrupted
mid-task is not resumable across the upgrade. Its record and result are intact;
spawn the task again rather than resuming it.

Full Changelog: v0.2.0...v0.2.1