v0.2.1
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