Repository navigation
v0.5.0
dmsh v0.5.0 — remote provider, tool calling, working clarifications
Two new capabilities and one bug fix that made multi-step requests unusable.
What's new
Providers: local model or Pollinations
dmsh could only run a local GGUF through llama.cpp. Now the inference
source is a setting:
| Provider | Behaviour |
|---|---|
auto (default) |
local GGUF if one is found, otherwise Pollinations |
local |
local GGUF only; fails with a hint if none is present |
pollinations |
Pollinations API; local models are ignored |
dmsh --provider auto "what's eating my disk?" # local if present
dmsh config set provider pollinations # always remote
dmsh --remote-model mistral "..." # another remote model
dmsh --search-model gemini-search "..." # model behind websearch
dmsh --remote-base-url http://localhost:8080/v1 "..." # any OpenAI-compatible endpoint- Anonymous by design. dmsh sends no tokens and adds no
Authorization
header — Pollinations works without an account. - No silent fallback. The provider is resolved once, at session start.
Withauto, a missing GGUF switches to Pollinations and says so; a local
model that fails to load is never quietly replaced. /modelshows the active provider, model, endpoint, search model and
whether tools are on.- Rate limits are explained instead of dumped raw:
429now reads
"anonymous access allows one request at a time", and402/403points at
--remote-base-url/--remote-modelinstead of showing provider JSON.
Tool calling (function calling)
With a remote provider the model can call tools before answering:
| Tool | What it does |
|---|---|
run_command |
run one shell command, return exit code, stdout and stderr |
read_file |
read a UTF-8 text file (truncated at 8 KB) |
list_dir |
list directory entries with size and mtime |
system_info |
OS, arch, CPU count, shell, cwd |
todo |
keep a checklist of the current task (add / list / done / clear) |
ask |
ask the user one focused question and wait for the answer |
websearch |
search the web through the provider's search model |
Safety is unchanged: the loop is bounded (12 steps) and run_command goes
through exactly the same path as a normal answer — denylist → allowlist →
confirmation (unless --yes) → audit log. In --dry-run tools refuse to
execute commands and the model is told to return the command in its JSON
answer instead. ask never blocks where it cannot: in the TUI, or when
stdin went into the prompt, the model degrades to ask_clarification.
Disable everything with --no-tools or dmsh config set tools false.
Session & UX
/todoshows the checklist the model keeps (up to 50 items, session
scope);/todo cleardrops it.- Clarification answers now go back to the model together with the question
they answer (see below). /modelin the TUI reports the provider as well, not just the file name.- The status line shows
model:pollinations:openaifor remote sessions.
Fixed
- Clarification loop — the follow-up used to be sent as
request\nanswer, so the model never saw the question it had asked and
kept re-asking the same thing forever. Now every exchange is sent back as
an explicit block, a repeated question ends the dialogue with an
explanation instead of a second prompt, and two rounds is the hard limit. - In the TUI the clarification question is written to the transcript (it used
to vanish as soon as the answer was typed), and the answer is echoed while
the model receives the framing block. - Answers like
1. project-namereach the model asproject-name, while
versions such as3.5are left alone.
CI
- Windows CUDA release builds again: MSVC via Ninja, plain
clang(MSVC
ABI) for cgo, short 8.3 paths for-Lflags,-lflags for CUDA import
libs, andlldfor linking. - Added a fast cgo toolchain probe so a broken toolchain fails in ~1 minute
instead of after a long build. - CUDA failures no longer block the CPU release.
Note: v0.4.0 was tagged but never published as a release — skip it and
upgrade straight from v0.3.7.
Full Changelog: v0.3.7...v0.5.0
Full Changelog: v0.4.0...v0.5.0