Releases: mubit-ai/minima
Release list
v0.6.0 — agent core: cost-aware sub-agents, budgets, recovery, persistence
The largest release since the TypeScript harness shipped: the coding agent gains sub-agent orchestration, budget following, failure recovery, and a durable local record — every piece wired into Minima's cost-aware routing — plus server-side routing fixes.
CLI / coding agent
tasktool — sub-agent delegation: the agent can decompose work into subtasks, each cost-routed to its own model via Minima, run in parallel (bounded) withdepends_onordering, per-node budgets, timeouts, and abort propagation.- Budgets:
--budget <usd>(graduated warnings at 50/75/90/100%) and--budget-enforce(refuses runs before any provider spend once exhausted)./budgetcommand + status-bar segment. Cross-session-safe atomic reserve/reconcile. - Recovery ladder: a provider failure or judged-below-threshold turn automatically retries on the server's next-ranked model (failed model excluded, per-rung feedback, max 3 attempts).
--slider N: the cost/quality dial (0 = cheapest acceptable, 10 = quality-first) from the command line.- Persistent runs: every conversation, tool call, and routing decision lands in a local SQLite record —
/resumerestores context and the cost ledger,/namepersists,/costshows quality-per-dollar, savings vs all-premium, and optimal-cost-ratio. - Feedback truth: run-total cost reporting, no fabricated verification flags, unjudged turns tagged — the learning loop only gets honest signal. Optional LLM judge (
MINIMA_LLM_JUDGE=1) with transient-failure retry. - Effort routing (preview,
MINIMA_AUTO_EFFORT=1): server-classified difficulty picks each prompt's thinking level.
Routing service
- Classifier overhaul: feature-vector classification (per-rule profiles, uncertainty, neighbor blending — thanks @404-ammar-not-found, #41/#46) with strongest-signal task-type selection and coding-agent vocabulary — real coding prompts no longer misprice as one-line summaries (benchmark: 73% vs 70% on the labeled set, both live misroutes fixed).
- Savings accounting resilience: decision-log reconciliation now happens before the memory write, so
/v1/savingsrealized figures survive a memory-backend outage.
Docs
docs/agent-core-architecture.md+docs/agent-core-implementation-plan.md— the full design + roadmap behind this release.
Homebrew: brew upgrade minima. PyPI SDK unchanged.
v0.5.2
Fixes
TUI viewport-overflow rendering corruption (#50) — the interactive shell garbled/overlapped content when the conversation exceeded the terminal height. The chat region and outer frame now hard-clip via overflow="hidden", the chat is bottom-aligned so the newest reply + live streaming stay visible, and the message-height estimates were rewritten (extracted to a unit-tested layout.ts) to mirror the real box model (multi-line tool messages, per-turn chrome, streaming newlines, input/overlay budgets). Overflow is now impossible regardless of estimate error.
Homebrew: brew upgrade minima.
v0.5.1
Minima v0.5.1 — harness UX + Mubit memory
Patch release for the TypeScript CLI (the brew binary).
Fixed (from user feedback)
- No more scary red banners for benign routing diagnostics (
no_model_meets_threshold,thompson_pick,no_model_within_*_budget, …) — these are now muted info, not errors. Offline/unrouted is muted too (the turn still ran). - Clear, actionable errors — killed the doubled
Error: Error: …; a missing model-provider key now says exactly which key to set (and thatminima authconfigures routing only).--print/--mode jsonsurface provider failures and exit non-zero. - Routing never picks an unrunnable model — candidates are pre-filtered to providers whose key is present.
Added
- Full model catalog in
/model— populated from Minima/v1/models+ (whenOPENROUTER_API_KEYis set) the full OpenRouter catalog, key-gated to runnable models; the picker is now scrollable + type-to-filter. - Mubit memory in the agent — recall-before-route + outcome write-back (fail-open, no-op unless
MUBIT_API_KEYis set), with a stable per-repo memory session so it learns across runs on the same repo.
Install / upgrade
brew upgrade mubit-ai/minima/minimaPython SDK on PyPI is unchanged (minima-cli stays at 0.5.0).
Binaries + Homebrew formula update via the automated release pipeline.
v0.5.0
Minima v0.5.0 — the TypeScript harness is now the CLI
The Homebrew-installed minima is now the TypeScript/Bun binary (Ink TUI), replacing the Python virtualenv build. brew upgrade swaps it in place; install is a download + extract (seconds) with no Python or runtime deps.
Highlights
- One-click auth —
minima auth//auth: browser login to the Mubit console (loopback + PKCE), auto-provisions a managed project per repo, stores a scoped key, reconnects routing. No manualMUBIT_API_KEYpaste. - Cost-aware routing TUI with per-repo memory isolation,
/goals, model picker, IDE-style tool rendering, and more. - Prebuilt binaries for macOS (arm64 + x64, ad-hoc signed) and Linux (x64 + arm64), attached below.
Install / upgrade
brew upgrade mubit-ai/minima/minima # existing users
brew install mubit-ai/minima/minima # newAlso in this release
- Python
minima-cli0.5.0 publishes to PyPI (theminima_clientSDK + server tooling) — unchanged distribution, version aligned with the tag. minima-prodservice + docs redeployed.
The Homebrew formula updates via an automated tap PR once the binaries finish building.
v0.4.10
Docs + tooling release (CLI/SDK code unchanged vs 0.4.9).
minima-clinow auto-publishes to PyPI on release —pip install minima-cli(bundles theminima_clientSDK). This is the first release to publish via CI.- Docs (API reference) corrected — accurate
GET /v1/healthresponse shape, the realsummary.realizedfield set, and thedaysbound (>0–365); plus a PyPI install link on the Client SDK page.
Full notes in CHANGELOG.md.
v0.4.9
Two fixes.
- Multi-turn conversations with thinking enabled no longer 400 on Anthropic. Anthropic signs each thinking block and requires the signature echoed back when the block is replayed in history — so the second turn of any thinking conversation (and any thinking + tool-use turn) failed with
messages.N.content.0.thinking.signature: Field required. The provider now captures the signature and sends it back; an unsigned thinking block is dropped rather than sent unsigned. - Text selection works again in macOS Terminal.app. Terminal.app doesn't report mouse-motion events (xterm mode 1003) that Textual needs for in-app drag-select, so capturing the mouse there left you unable to select at all. Mouse capture now defaults OFF on Terminal.app (native click-drag select + copy; scroll with PageUp/PageDown) and ON elsewhere (wheel-scroll + in-app drag-select).
--mouse/--no-mouseoverrides;/mousetoggles live.
Full notes in CHANGELOG.md.
v0.4.8
Two fixes from this cycle, combined.
- A provider whose API key is invalid no longer wastes every routed turn. An auth failure (e.g. invalid
ANTHROPIC_API_KEY→401 invalid x-api-key) now blacklists that provider for the session and auto-reroutes the same message onto a provider whose key works — instead of the router re-recommending the dead provider every turn. Auth failures are no longer fed back to Minima as model-quality failures (they can't poison a model's success estimate). Keyless providers are dropped from routing up front;/reconnectclears the blacklist; pins are never auto-rerouted. - Scroll-wheel and text selection/copy both work. Mouse capture is ON by default (wheel scroll + in-app drag-select); the terminal's native selection stays reachable by holding the bypass modifier while dragging (Option on macOS, Shift on Linux); and copy now also pushes to the OS clipboard (
pbcopy/xclip/wl-copy), so it works on macOS Terminal.app (which ignores Textual's OSC-52-only copy). New/mouse [on|off]toggle +--no-mouseflag. /resumepicker shows created + recently-used timestamps, sorted most-recently-used first.
Full notes in CHANGELOG.md.
v0.4.7
Fixes the real cause of "Gemini stopped working" (surfaced by 0.4.6's raw-error feature).
- Gemini calls failed whenever a tool with a nested-model schema was attached — including the
/ledgertaskstool. Pydantic emits$ref/$defsfor nested models, and the google-genai SDK's strictSchemarejects them (ValidationError: extra_forbidden), failing the whole call — and theextra_forbiddentext was misclassified as a403"key lacks permission, or no quota". The Google provider now sends tool schemas viaparameters_json_schema(the SDK's standard-JSON-Schema path, which converts$refper Gemini's rules). Introduced with thetaskstool in 0.4.4; verified live (gemini-2.5-flash now accepts thetaskstool and emits a valid nested call). - Client-side validation errors are no longer misread as provider auth/403 failures.
Full notes in CHANGELOG.md.
v0.4.6
Reliability + diagnostics for the agent loop, found by reproducing against the live API.
- One provider hiccup no longer wedges the session. A failed model call (transient 403/429, bad key, network) was swallowed into an empty assistant left in history, which then made the next request invalid even on a healthy provider (Anthropic
400 "text content blocks must be non-empty"). The loop now never sends a failed call's assistant to a provider, and a failed turn is rolled fully out of context. - Pinning a model not in Minima's catalog no longer 422s / runs the wrong model. Pinning e.g. an OpenRouter id (
google/gemini-2.5-flash) now bypasses Minima and runs exactly the pinned model. - Banner correctness. A failed model call shows an actionable model-error (
… — check GEMINI_API_KEY (/config) or pin another model (/model)) instead of "routing offline / reconnect"; switching models clears stale banners; the 403 message gained a next step. - Raw provider errors surfaced + logged (
└ provider said: …) so an ambiguous 403/429 is self-diagnosing.
Full notes in CHANGELOG.md.
v0.4.5
Routing-auth reliability fix.
- Routing no longer 401s for the whole session when the Mubit key wasn't resolvable at launch. The Minima client's auth header was fixed at startup, so a key added via
/config(or exported after launch) never took effect and every turn showedminima error 401: pass your Mubit API key …./reconnect— and saving a routing key/URL in/config— now rebuild the client in place, so the fix applies immediately, no restart. - Actionable offline banner for an auth/config problem:
no Mubit API key — add MUBIT_API_KEY via /configinstead of the misleading "/reconnect to retry" (transient outages keep the "/reconnect" framing). - No doomed round-trip: a no-key request to a hosted endpoint short-circuits instantly instead of a guaranteed-401 per turn (loopback endpoints still attempt, so keyless local servers are unaffected).
Full notes in CHANGELOG.md.