Skip to content

Releases: webmatze/smith

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 02 Sep 21:03

Added

  • Chat commands with autocomplete: new built-ins /help, /clear, /sessions, /resume <session> and /quit join /plan, /normal, /rewind, /context and /rename. In the fullscreen UI, typing / opens a popup that filters built-ins and skills as you type — / select, Tab completes, Enter runs, Esc dismisses. /resume switches sessions inside the running loop; /clear wipes the context and the screen.
  • MCP over HTTP: entries in mcp.json with a type of http/sse or a bare url connect via Streamable-HTTP POST instead of spawning a subprocess — JSON and SSE answers alike, the session id the server assigns carried on every later request, bearer tokens from the environment via ${VAR} header expansion. Everything the stdio path already had applies unchanged: approval gate, untrusted marking, restart-once, per-call timeout (#84).
  • smith stats: aggregates cost and tokens across all saved sessions from the index alone — a grand total, a prompt/completion/cache split and a per-provider/model breakdown. Unknown rates add tokens but show n/a, never a guess; [pricing] overrides from config apply (#85).
  • Session hygiene: smith sessions delete <ref>… removes sessions by name or id — file, directory and index entry — and smith sessions prune drops sessions older than --older-than (30d default) while keeping --keep-last N; both support --dry-run. The newest session is never pruned, and [sessions] retention_days prunes at startup (#82).
  • Cost per session: smith sessions shows a COST column per row, priced from the index and honouring [pricing] overrides; unknown models and entries predating usage tracking show n/a (#83).

Changed

  • The fullscreen UI now sits on anvil: text, editor and popup layers, the event loop, terminal handling and the live region come from the published anvil and termisu libraries — smith keeps the domain: what keys mean while a popup is open, the status line, the event-stream-to-blocks renderer and the gates. src/smith/ui shrank from 2 699 to 1 392 lines.

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 01 Sep 18:56
16a58b3

[0.3.0] — 2026-09-01

Added

  • Bash Sandbox (macOS): bash is confined to the project via sandbox-exec — writes outside it fail, reads can be denied per path, and confined commands can skip the approval prompt entirely (--yes stays meaningful). Configured via [sandbox] in config.toml; smith sandbox shows what is in force (#79).
  • Image & PDF input, on three paths: @screenshot.png attaches the file itself (#72), a tool result can carry an image (#73), and an MCP server may answer with one (#78). The format is decided from the magic bytes, not the extension or a claimed mimeType; PDFs go to Anthropic natively.
  • Raw transcript log: every message is appended to transcript.jsonl beside the session before compaction can touch it — the untouched record of a run (#58).
  • Context compaction, deeply and rarely: instead of shallowly every turn, compaction now acts in stages — stale thinking, superseded reads and staged caps reclaim context gently (#55, #58).
  • Prompt caching through OpenRouter: caching works on the OpenRouter route to an anthropic/ model too, with two breakpoints instead of three (#70).
  • Releases ship binaries: tags now build signed release binaries for Linux and macOS in CI and attach them to the GitHub release.

Changed

  • Checkpoints are anchored to a message id, not a position in the transcript — rewinding stays correct across compaction (#59).
  • bash output names the git boundary where checkpoints cannot reach, and the git root is recognised when .git is a file (worktrees) (#75, #77).

Fixed

  • read_file refuses binary files instead of inlining their bytes (#67).
  • Headless runs get the checkpoints they already had a session for (#68).
  • Dropped the headless branch bash job logs never took (#71).
  • The Makefile builds on Linux too.

v0.2.0 — providers, permissions and a fullscreen UI

Choose a tag to compare

@webmatze webmatze released this 08 Aug 23:28

⚒️ 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

v0.1.0 - Initial Release

Choose a tag to compare

@webmatze webmatze released this 05 Aug 18:38

⚒️ Smith v0.1.0 - Initial Release of the fast, local-first LLM Agent Harness written in Crystal.

✨ Features

  • Policy-Free Core Loop (): Complete decoupling of agent loop, LLM provider, tools, and CLI.
  • Fiber-Based Parallel Tool Execution (): Concurrent execution of parallel-safe tools (read_file, grep, glob) via Crystal Fibers (spawn & Channel).
  • Subagent Supervision (Smith::Subagents): Parent agent can delegate subtasks to autonomous child subagents running in isolated fibers in work (full capabilities) or inspect (read-only) mode.
  • OpenRouter Provider (Smith::LLM): Default model qwen/qwen3.8-max with exponential backoff retry logic.
  • Project Context & Skills Catalog: Automatically loads SMITH.md / AGENTS.md and expands -name or /#skill-name references at runtime.
  • Session Persistence (Smith::Session): Saves local conversation history under ~/.smith/sessions/ with seamless smith list and smith resume capabilities.