v0.7.0 — 2026-08-25
Release Notes
The first-run and cold-start paths, which had the least test coverage and the
worst failure modes: every bug below ended in a wrong answer delivered
confidently — an empty transcript, a silent CPU run, a poisoned cache — rather
than in an error.
- New subcommand:
harken warm [--model X]— downloads the model into the
cache and exits. Retires the "pre-warm with any CLI run" workaround. - MCP mode no longer stalls on the first call. The server downloads an
uncached model on a warm-up thread while it already answers
initialize/server/discover/tools/list; a tool call arriving mid-download
waits on that download instead of starting a second one. A failed warm-up is
logged and the call is let through to retry inline, so a transient network
failure at startup never wedges or kills the server. Measured on a fresh
cache:initializeat 0 ms andtools/listat 17 ms while 77 MB streamed. - New MCP tool:
transcribe_status— reports model, cache state (path and
size), language, device and whether the whisper context is loaded, without
transcribing. It reads the cache with a pure stat, so it can never itself
trigger a download. - Fixed: a file whose every packet failed to decode (valid headers, garbage
payload) produced an empty transcript with exit 0 — over MCP,isError: false
with empty text, so an agent reasoned over a transcript that did not exist.
Undecodable packets are still skipped, but now counted: all of them failing is
an error, a partial skip warns about gaps, andResetRequiredtruncation
warns instead of passing silently. "Silence" and "nothing decoded" are no
longer the same outcome. - Fixed: a malformed glob (
harken '[bad') reported0 doneand exit 0,
indistinguishable from a valid pattern matching nothing. A pattern that cannot
compile is now an input error naming the pattern, with exit 2. A valid
glob matching zero files stays exit 0 — that distinction is pinned by a test. - Fixed: a truncated download was renamed into the cache and read as a cache
hit forever, failing context init on every later run with no hint. The written
byte count is now checked againstContent-Length, the.partialfile
carries a PID+counter nonce so concurrent cold starts cannot interleave into
one file, and a guard removes it on any error path. The context-init error
also names the model path and says to delete it if corrupt. - Downloads are verified against HuggingFace's SHA-256 (
X-Linked-Etag,
read off the redirect response — the CDN's plainETagis a different hash).
A mismatch refuses to cache. This is a corruption and mirror guard, not
provenance: the server states its own file's hash. - Fixed:
--device cudaran at CPU speed reporting nothing. No shipped
binary compiles a GPU backend, so the flag found none to bind and ggml quietly
proceeded on CPU. It now warns on stderr and runs on CPU — a warning rather
than an error, so scripts passing--deviceoptimistically keep working.
README anddocs/ARCHITECTURE.mdno longer imply GPU offload is available. - Dependencies:
ureq2 → 3 (the migration Dependabot could not do), which
drops theurl/idna/icu_*chain —Cargo.lockwent 172 → 150 crates
beforesha2was added for the hash check. That chain was half the reason for
the 1.88 MSRV; the floor is now let-chains alone, sorust-versionis
unchanged. src/model.rssplit intocached_path(pure stat),ensure_downloaded
(filesystem + ureq, henceSend) andresolve_model(the CLI wrapper), with
progress behind a newProgressSinktrait —BarSinkkeeps indicatif for the
CLI,StderrSinkprints one plain line per 10% in MCP mode, where a drawn bar
in a piped stderr is escape-code noise.Transcribergainedis_loaded(), defaulted tofalseso existing
implementors need no change.mcp::serve()keeps its signature;main()uses
the newserve_with_info().- Tests: 137 → 158, including the first coverage of
src/audio.rsand
src/model.rs. All still offline.
Install harken 0.7.0
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/montezuma-p/harken/releases/download/v0.7.0/harken-installer.sh | shInstall prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/montezuma-p/harken/releases/download/v0.7.0/harken-installer.ps1 | iex"Download harken 0.7.0
| File | Platform | Checksum |
|---|---|---|
| harken-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
| harken-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
| harken-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
| harken-aarch64-unknown-linux-gnu.tar.xz | ARM64 Linux | checksum |
| harken-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |