v0.2.0 — providers, permissions and a fullscreen UI
⚒️ Smith v0.2.0 — the release where the harness grew up: it talks to four providers, runs a fullscreen terminal UI, and asks before it changes anything.
46 commits since v0.1.0.
Providers & models
- Native Anthropic Messages API and native OpenAI API providers, alongside OpenRouter and a new Ollama provider for local models.
- Each provider defines its own default model, so
-mis an override rather than a requirement. - Streaming (SSE) for every provider — tokens appear as they are produced.
- Prompt caching for Anthropic: the system prompt and tool definitions are cached across turns.
- Thinking / reasoning blocks are requested, parsed and shown for Anthropic and OpenAI.
- Auto-continue when a response is cut off at the output-token limit, instead of handing back a truncated answer.
- HTTP timeouts on every provider call, and a Ctrl+C that saves the session before it exits.
The fullscreen terminal UI
Interactive sessions on a real terminal now render through a fullscreen interface. The transcript stays in the terminal's scrollback — copyable, searchable, no alternate screen — while the bottom of the screen carries a live region: streaming text, running tools with spinner and elapsed time, a status bar with model, mode, tokens and cost, and the input line.
- Enter submits, Esc clears the input, Up/Down walks prompt history, Ctrl+L redraws from scratch. Resizing the window redraws it too, once the drag has come to rest.
- While the agent works, Esc asks it to stop; a second press within two seconds exits.
- Approval, plan review and the hooks trust prompt are panels answered with a single key — nothing reads from plain stdin any more.
--no-tuifalls back to the line renderer. Headlesssmith runstays plain, so its output remains scriptable.
Deciding what the agent may do
- Approval gate for mutating tools (
bash,write_file,edit_file), with an allowlist for commands you trust. - Fine-grained permission rules —
allow/ask/denywith path scoping. - Plan mode (
--plan, or/planin chat): research first, act only after the plan is approved. - Hooks as extension points around the agent loop (
PreToolUse,PostToolUse,Stopand friends), gated behind a one-time per-project trust decision. - Checkpoints & rewind: undo a run's file changes, one step at a time or back to the start.
Tools
- Background bash jobs — dev servers and long builds keep running, with auto-backgrounding instead of a kill.
web_fetchandweb_search, with an SSRF guard and Brave / Tavily / SearxNG adapters.todo_writefor structured multi-step plans.- MCP client (stage 1): stdio transport,
tools/listandtools/call, so MCP servers register as ordinary smith tools. - Custom agent definitions in
.smith/agents/<name>.md, plus bounded subagent nesting depth and a shared spawn budget.
Sessions & context
~/.smith/config.tomlwith a documented precedence chain, instead of hardcoded defaults.- Transcript compaction to stay inside the context window.
- Session ergonomics: names,
-cto continue,smith contextfor a token breakdown, cost reporting and a spend budget, andfork. @-mentionsembed files directly in the prompt, with budgets and a path guard.--jsonfor machine-readable headless output.
Fixes worth naming
- A background job's exit notification could crash the fiber that reported it.
- An empty model response was swallowed silently instead of being shown.
rewindundid the whole session where it should have undone one step.- Hook stdin is written directly rather than handed to
Processas an IO. - Assistant messages with neither content nor tool calls are never sent.
Install
tar -xzf smith-v0.2.0-darwin-arm64.tar.gz
mv smith ~/.local/bin/
The attached binary is macOS arm64, ad-hoc signed — built with Crystal 1.21. On other platforms, build from source with make release.
Full changelog: v0.1.0...v0.2.0