v0.12.1
What's Changed
Ollama: Tools, reasoning, and actually talking to models correctly 🛠️🧠
Two bugs, one mission: making Ollama models do what they're advertised to do.
The tools fix (#249): Ollama models like gemma4 have both thinking and tool-calling capabilities, but Jazz was only checking whether a model could reason — and then assuming that because it was a "thinking model," it couldn't also wield tools. Spoiler: it can. The model fetcher now reads the canonical capabilities array from /api/show (e.g. ["completion", "vision", "tools", "thinking"]) and trusts it as the source of truth. Legacy metadata flags are used only as a fallback. No more reason-capable models getting stripped of their tool belt.
The reasoning fix (#248): When you told Ollama models to disable reasoning (--reasoning disable), Jazz was … not actually sending that instruction. It just omitted the think flag entirely, and Ollama's default behavior for thinking-capable models is to think anyway — meaning you'd get silent reasoning leaking into the response with zero tool calls and empty content. Now disable explicitly sends think: false, and low/medium/high all send think: true. Flip the switch and it actually flips.
Plus, jazz run now accepts --reasoning <effort> so you can override the agent's reasoning level per invocation. Pipelines, scripts, and CI all benefit.
Streaming events from jazz run — pipe-friendly observability 📡
The jazz run one-shot command now supports --events <categories>, which emits selected lifecycle events as NDJSON lines to stderr while stdout stays a clean payload. Pick what you want: tools, reasoning, text, usage, or all. This means you can observe exactly what the agent is doing — tool calls, reasoning traces, token usage — without interfering with the machine-readable output on stdout. Perfect for piping into monitoring tools, log aggregators, or just watching the magic happen in real time.
Commits
08d1adafix(llm): derive ollama tool support from /api/show capabilities by @Landry Mongaf9c34e1fix(llm): ollama reasoning 'disable' now sends think:false; add --reasoning flag to run by @Landry Mongaec651f2feat(cli): add --events NDJSON stream flag to jazz run by @Landry Monga