Skip to content

v0.2.0 — providers, permissions and a fullscreen UI

Choose a tag to compare

@webmatze webmatze released this 08 Aug 23:28
· 48 commits to main since this release

⚒️ 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 -m is 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-tui falls back to the line renderer. Headless smith run stays 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 rulesallow / ask / deny with path scoping.
  • Plan mode (--plan, or /plan in chat): research first, act only after the plan is approved.
  • Hooks as extension points around the agent loop (PreToolUse, PostToolUse, Stop and 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_fetch and web_search, with an SSRF guard and Brave / Tavily / SearxNG adapters.
  • todo_write for structured multi-step plans.
  • MCP client (stage 1): stdio transport, tools/list and tools/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.toml with a documented precedence chain, instead of hardcoded defaults.
  • Transcript compaction to stay inside the context window.
  • Session ergonomics: names, -c to continue, smith context for a token breakdown, cost reporting and a spend budget, and fork.
  • @-mentions embed files directly in the prompt, with budgets and a path guard.
  • --json for 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.
  • rewind undid the whole session where it should have undone one step.
  • Hook stdin is written directly rather than handed to Process as 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