Repository navigation
Releases
Releases · phuryn/mini-harness
mini 1.0.5
read: a damaged PNG (a chunk that fails its CRC check, or no IEND chunk) is refused with the reason, before it reaches the transcript. It was sent, the API refused it, and since the transcript is never edited, every later request in the session failed toobash: when a job's shell has ended but what it started still runs (nohup make &inside a call), the "ended" note says so and how to stop it; it read as if everything had finished- On Linux, a finished process that was never reaped (in a container whose init doesn't reap) no longer counts as running, so mini doesn't report it or wait a second for it at exit
bashdescription: output piped intotail,greporlessappears only when the command ends, so a long command should write to a file- The wait hint in the still-running note says to give that call a long enough timeout
Update: uv tool upgrade mini
mini 1.0.4
- A run the API refuses exits with code 1 in headless mode, like any run that didn't finish; it exited 0, so a script read a refusal as done
bash: a command killed by signal N reports[exit 128+N], as bash and its job log do; it reported[exit -N]bash: the command reaches the shell through the environment, not its command line, so the model's ownpkill -f <pattern>no longer matches the shell running itbash: every result ends with what earlier calls left running (pid and log, how to stop or wait for it), and says once when one of them has ended. A job counts while anything it started is alive, so a plainkillof its shell doesn't hide a server that's still up, and mini still stops it at exit- DeepSeek requests outside its peak hours (01:00–04:00 and 06:00–10:00 UTC on weekdays) are priced at half, set by
peak_utcandoff_peakinmodels.json
Update: uv tool upgrade mini
mini 1.0.3
bashon macOS and Linux: a command still running at its timeout isn't killed. It goes on in the background, and the model gets its pid, the output so far, a log under~/.mini/jobs/(ending with[exit N]) and a stop command that needs no approval. What a timeout left running stops when mini exits, including on SIGTERM or SIGHUP (it gets SIGTERM first, then SIGKILL a second later). On Windows the timeout still stops the commandbashwaits for the command, not its output, so a job started with&no longer holds the call; stdout and stderr come back together- Output cap per model (
max_outputinmodels.json): 128,000 tokens for the listed Claude models, up from 64,000 - A reply that fails partway through streaming (overloaded, rate-limited, a server or network error, a cut-off stream) is tried again up to three times; failures before the stream starts get only the SDK's own retries
~/.mini/models.jsonentries now change only the fields they name- Fix: output-limit recovery counted per turn, so a headless run stopped at its third cut-off anywhere; it now counts cut-offs in a row
- Fix: the goal's verify command no longer leaves behind what it started with
& - README: about 1,400 lines of Python
Update: uv tool upgrade mini
mini 1.0.2
readshows images: PNG, JPEG, GIF and WebP up to 3000 px a side, and up to 20 MB of images per conversation- The model is told who approves in your permission mode, and again when you change it with
/permissions; tool descriptions no longer say commands can be denied when they can't - A reply that hits the output limit continues (up to twice) instead of ending the run; a goal pauses after that, and headless
--goalexits 1 unless the goal is done bashcan start long jobs in the background (servers, long builds), with output in a log under~/.mini/jobs/- On Linux the
bashtool runs bash, not dash - Headless runs no longer offer
ask_user, since nobody can answer - Web search no longer brings Anthropic's server-side code sandbox along
- Fix: a
~wordin a command no longer fails the call; one bash expands but Python can't (~+,~-) counts as outside the project and asks - README: about 1,300 lines of Python; headless exit codes explained
Update: uv tool upgrade mini
mini 1.0.1
/sessionsmarks the session you are in (*), shows when each was last updated, and uses the first prompt as a short title- README: built for teaching up front; interactive and unattended (
-p) runs explained apart;--modeland the other flags work in both - README: Terminal-Bench 2.0 results (Claude Haiku 5.5, five runs, eight harnesses) and a row for Claude's server-side compaction in the comparison
Update: uv tool upgrade mini
mini 1.0.0
First release of mini: a minimal agent harness for Claude (and models that speak Anthropic's message format), about 1,200 lines of Python.
- Tool loop with read, write, edit, bash, find, web search, subagents and ask_user
- Append-only sessions you can resume, server-side compaction,
/context - Agent Skills, MCP servers over stdio (OAuth via mcp-remote)
/goalmode with an independent reviewer- Permission gate: asks outside the project, for secrets and for files that run later; optional Jev judge (default when
OPENROUTER_API_KEYis set) - Models, prices and windows in
models.json; Claude and DeepSeek V4.1 Flash out of the box - macOS, Linux and Windows (Git Bash); tests run on all three in CI
Install: uv tool install git+https://github.com/phuryn/mini-harness