Releases: webmatze/smith
Release list
v0.4.0
Added
- Chat commands with autocomplete: new built-ins
/help,/clear,/sessions,/resume <session>and/quitjoin/plan,/normal,/rewind,/contextand/rename. In the fullscreen UI, typing/opens a popup that filters built-ins and skills as you type —↑/↓select,Tabcompletes,Enterruns,Escdismisses./resumeswitches sessions inside the running loop;/clearwipes the context and the screen. - MCP over HTTP: entries in
mcp.jsonwith atypeofhttp/sseor a bareurlconnect 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 shown/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 — andsmith sessions prunedrops sessions older than--older-than(30d default) while keeping--keep-lastN; both support--dry-run. The newest session is never pruned, and[sessions] retention_daysprunes at startup (#82). - Cost per session:
smith sessionsshows aCOSTcolumn per row, priced from the index and honouring[pricing]overrides; unknown models and entries predating usage tracking shown/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/uishrank from 2 699 to 1 392 lines.
v0.3.0
[0.3.0] — 2026-09-01
Added
- Bash Sandbox (macOS):
bashis confined to the project viasandbox-exec— writes outside it fail, reads can be denied per path, and confined commands can skip the approval prompt entirely (--yesstays meaningful). Configured via[sandbox]inconfig.toml;smith sandboxshows what is in force (#79). - Image & PDF input, on three paths:
@screenshot.pngattaches 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 claimedmimeType; PDFs go to Anthropic natively. - Raw transcript log: every message is appended to
transcript.jsonlbeside 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).
bashoutput names the git boundary where checkpoints cannot reach, and the git root is recognised when.gitis a file (worktrees) (#75, #77).
Fixed
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
v0.1.0 - Initial Release
⚒️ 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 inwork(full capabilities) orinspect(read-only) mode. - OpenRouter Provider (
Smith::LLM): Default modelqwen/qwen3.8-maxwith exponential backoff retry logic. - Project Context & Skills Catalog: Automatically loads
SMITH.md/AGENTS.mdand expands-nameor/#skill-namereferences at runtime. - Session Persistence (
Smith::Session): Saves local conversation history under~/.smith/sessions/with seamlesssmith listandsmith resumecapabilities.