Skip to content

Changelog

Every notable change to Minion, newest first. Format follows Keep a Changelog; versions follow semantic versioning — and while Minion is pre-1.0, breaking changes are called out inline rather than saved for a major bump.

  • Fix deleting a run leaving its grandchild sub-runs orphaned — the cascade only followed one level, so runs from a specialist that itself delegated stayed in the database, invisible in the trace list but still counted in analytics
  • Distinguish “this model can’t do structured output” from “this reply couldn’t be parsed”: a model whose provider accepted the request is no longer reported as lacking schema support, and a truncated reply now says so and points at tool-output size instead of re-prompting into a larger context
  • Retry a rejected structured-output request before concluding a model is incapable — groq/openai/gpt-oss-120b intermittently emits a native function call instead of the envelope, and one sample was enough to declare it unsupported
  • Add structured_output to Minion: "auto" (default) uses native JSON-schema enforcement where the provider supports it and the prompted fallback where it doesn’t, "native" never falls back, "prompt" always uses the fallback. The fallback injects the schema into the system prompt, asks for json_object mode, and re-prompts on a malformed reply up to max_parse_retries times (default 2) — this makes previously unusable models such as groq/llama-3.3-70b-versatile work
  • Replace the raw LiteLLM BadRequestError from a model that can’t do structured output with a StructuredOutputError naming the model, explaining the requirement, and listing the ways forward. Errors unrelated to structured output propagate unchanged
  • Reparse retries are charged to the turn that made them, so a run that retried reports the tokens it actually spent
  • Add minion --help / --version; minion serve --help now prints usage instead of silently starting the server
  • Add built-in prices for Groq’s gpt-oss-120b, gpt-oss-20b, llama-3.3-70b-versatile and llama-3.1-8b-instant — their traces showed as unpriced before
  • Add a documentation site (Astro + Starlight) under website/, with a public changelog page generated from this file. docs/ is now a pointer to it
  • Add tests/: offline tests for the structured-output paths (no API calls), and tests/smoke_providers.py, a live Tier 1 provider gate that refuses to run without an explicit flag
  • Add parallel_tools=True to run a turn’s tool calls concurrently; each call is now timed independently so latencies stay accurate under parallelism
  • Show per-turn cost in the trace viewer, computed the same way as the run total so turns sum back to it
  • Breaking: rename the CLI command minion uiminion serve. The old name is removed, not aliased — it named the technology rather than the job, and the dashboard now covers traces, analytics and (soon) evals
  • Breaking: rename the Docker image and compose service minion-uiminion-server. Update image: to shriyansnaik/minion-server (or ghcr.io/shriyansnaik/minion-server); the old minion-ui tags are no longer updated
  • Fix minion serve crashing with UnicodeEncodeError on Windows consoles using the cp1252 codepage
  • Add ROADMAP.md (feature list and release phases) and docs/providers.md (tiered provider support; Minion requires models with native JSON-schema structured output)
  • Trace viewer: path-style URLs (/project/<id>/trace/<id>), model/metadata/date-range filters, ascending/descending sort, keyset-paginated trace list, and batch delete (selected rows or all matching the current filter)
  • Add database indexes on runs and migrate metadata to JSONB+GIN on Postgres for efficient filtering; metadata values are now stored as strings (see Minion.__call__ docstring)
  • Fix date-range filter excluding most of the “to” day when no end time was set; support chaining multiple metadata filters (AND)
  • Add specialist sub_minions and make Minion runs thread-safe
  • Only include the spawn-sub-minion prompt section when allow_sub_agents is set
  • Validate project/token match at init() instead of failing silently
  • Return errors as strings instead of raising in demo_tools
  • Capture and surface errors on failed runs
  • Merge UI extras into core package
  • Add coming soon website
  • Bump workflow actions to Node 24 versions; add release runbook doc
  • docs: add Updating section to hosting guide
  • Add trace observability: local + remote tracing, dashboard, Postgres, Docker
  • Migrate to LiteLLM, rename tools to demo_tools, enhance README
  • Add PyPI publish workflow (Trusted Publishing) and docs
  • Bundle UI build and price table in sdist too (global hatch artifacts)
  • Rename to Minion AI
  • Add minions package, pyproject.toml, and project scaffolding