Skip to content

v0.12.0

Choose a tag to compare

@lvndry lvndry released this 05 Jun 08:54
· 10 commits to main since this release

What's Changed

jazz run grows up: live event streaming and per-run reasoning control

The one-shot jazz run command was already the workhorse for scripts and webhooks, but it was a bit of a black box — you'd fire off a prompt and just... wait. No more. The --events flag now lets you subscribe to live NDJSON event streams on stderr while stdout stays pristine with your final answer. Pick exactly what you want to watch: tools, reasoning, text, usage, or just all if you want the full firehose. Each event is a parseable JSON line, capped at 200 characters per string value so a single rogue tool result won't flood your logs. Meanwhile, --reasoning lets you override the agent's reasoning effort on a per-run basis — crank it to high for gnarly problems, drop it to low for quick lookups, or disable it entirely when you just want straight answers without the internal monologue. (#247, #248)

Ollama reasoning: actually disabled when you say disable

If you've been using Ollama with reasoning-capable models, you might have noticed something unsettling: the agent would go silent, returning empty content and no tool calls. The culprit? Ollama's thinking-enabled models default to reasoning ON when no flag is sent, which shoves all output into a separate reasoning field that Jazz wasn't reading. Now, when reasoning is set to disable, Jazz explicitly sends think: false to Ollama, making the model behave like a normal chatty assistant again. Your tools work. Your content appears. Your sanity is preserved. (#248)

Per-agent API key overrides with graceful fallback

You can now configure API keys at the individual agent level — perfect for when one agent needs a different OpenAI org, or you want to route specific agents through different provider accounts. If an agent doesn't have its own key configured, Jazz falls back to the global config seamlessly. No more "but I thought I set that key" moments. (#242)

ask_user_question always accepts free-form input

The ask_user_question tool now always enables free-form text input alongside the selectable options. Previously, users were sometimes trapped in a multiple-choice-only mode with no way to type a custom response. Now you get the best of both worlds: quick-select suggestions when they fit, and the freedom to type whatever you want when they don't. (#239)


Commits

  • 0408b91 0.12.0 by @github-actions[bot]
  • f9c34e1 fix(llm): ollama reasoning 'disable' now sends think:false; add --reasoning flag to run (#248) by @lvndry
  • ec651f2 feat(cli): add --events NDJSON stream flag to jazz run (#247) by @lvndry
  • 115f9d2 chore(ci): switch CI agents to openrouter/owl-alpha (#246) by @lvndry
  • 82f1739 feat(cli): add jazz run one-shot command and --max-iterations flag (#245) by @lvndry
  • 3edea82 fix(user-interaction): always enable free-form ask_user_question input by @lvndry
  • 9c3a616 fix(llm): support per-agent API key overrides with fallback (#242) by @lvndry
  • c1a8b62 feat(web-search): add Linkup as a search provider (#241) by @lvndry
  • eaa05af feat(agent): surface llm retry and slow-call status (#240) by @lvndry
  • 3fa7c53 chore(notifications): replace node-notifier with native commands + feat(shift-tab): add mode toggle shortcut (#239) by @lvndry
  • 65815f4 chore(web-search): [exa] return text content by @lvndry
  • ad2bcca feat: per-agent search provider, budget pressure, meltdown detection (#238) by @lvndry
  • 5aabc71 fix(llm): clean up retry design — scoped fallback, unified schedule, 15 min timeout (#237) by @lvndry
  • e28bd61 fix(llm): suppress AI SDK system-in-messages warning (#235) by @lvndry
  • 9f1091f feat(tools): add tool alias support + prompt improvements for blocked interpreter flags (#233) by @lvndry
  • b4c5a5b docs: README (#234) by @lvndry
  • 6631b4e chore(deps): update all dependencies (#232) by @lvndry
  • e7a1565 fix(agent): raise LLM request timeout floor to 10 min by @lvndry
  • c0eacf8 fix(agent): bump DEFAULT_MAX_LLM_RETRIES from 3 to 8 (#231) by @lvndry
  • 2d4a909 feat(openrouter): native web_search and web_fetch server tool support (#230) by @lvndry
  • bb13960 feat(web-search): overhaul all providers to return content and follow latest best practices (#229) by @lvndry
  • 34548bd fix(security): eliminate shell injection via spawn argument array (#227) by @lvndry
  • 2ababe7 feat(config): make LLM retry count configurable via jazz.config.json (#228) by @lvndry
  • 0824c3b ci(release): skip release if no commits since last tag by @lvndry
  • 050e88a chore(cost): more precise calculation by @lvndry
  • 8a29a3c feat(workflow): expose per-run cost and token usage in AgentResponse (#226) by @lvndry
  • 62d0053 feat(web-search): auto-detect provider API keys from environment variables (#225) by @lvndry
  • 01c645d fix(auto-update): replace changelog with releases link (#224) by @lvndry
  • fa3286b chore: improve vscode config (#223) by @lvndry
  • d250540 chore: remove TODO.md and README.proposed.md (#222) by @lvndry
  • fa069c0 feat(history): session storage and conversation history (#221) by @lvndry
  • ad57363 feat(chat): stack queued messages, one entry per line (#220) by @lvndry
  • 9ba9840 feat(cli): bounded live panels for reasoning and subagents (#213) by @lvndry
  • b674518 fix(chat): echo "You: " when draining the queued message (#217) by @lvndry
  • fb4f804 chore: prune dead files and unused dependencies (#219) by @lvndry
  • 17fdcec perf(cli): adaptive buffering for tables and code blocks (#218) by @lvndry
  • d1150b4 feat(chat): queue messages typed while agent is busy (#212) by @lvndry
  • 91972f7 fix(workflow): record failed scheduled runs and surface them on startup (#215) by @lvndry
  • 861bcf2 perf(cli): buffer streaming deltas to ~80ms cadence (#216) by @lvndry
  • 859929c fix(cli): rendering polish — blank line before metrics + reasoning delimiter (#211) by @lvndry

Full diff

v0.11.0...v0.12.0