Skip to content

v0.11.0

Choose a tag to compare

@lvndry lvndry released this 02 Jun 12:37
· 13 commits to main since this release

What's Changed

πŸƒ One-Shot Agent Runs with jazz run

Tired of firing up a full interactive session just to ask Jazz a quick question? Say hello to jazz run β€” a brand-new one-shot command that takes a prompt, runs the agent once, and spits out a clean answer on stdout. It's perfect for scripts, CI/CD pipelines, and webhook handlers. Pipe stdin for untrusted input, add --max-iterations to cap the agent's reasoning loop, or use --json to get a structured envelope with cost and token usage. Think of it as jazz chat's no-nonsense cousin who doesn't stick around for small talk. (#245)

πŸ” Web Search Gets a Major Upgrade

Jazz's web search just leveled up in a big way. Linkup joins the search party as a new provider, giving you another powerful way to find what you're looking for on the internet. But the real magic is in the overhaul: all search providers now return actual content, not just URLs and snippets. Exa now delivers full text in results, Brave pulls extra snippets, and Tavily serves richer content. Less "here's a link, go figure it out" β€” more "here's the answer, you're welcome." (#241, #229, #238)

And if you're on OpenRouter, Jazz now supports native server-side web_search and web_fetch tools β€” meaning the LLM can search and fetch pages directly through OpenRouter's infrastructure, no round-trip required. (#230)

🧠 Smarter, More Resilient Agents

Agents that give up easily are the worst. That's why Jazz now defaults to 10 LLM retries (up from 3) with exponential backoff, a 15-minute total timeout covering all retries, and a 45-second slow-call hint that tells you when the model is taking its sweet time. Streaming failures gracefully fall back to non-streaming mode with their own full retry budget β€” because one bad connection shouldn't torpedo your entire run. (#231, #237, #235)

But wait, there's more. Say hello to budget pressure and meltdown detection. As an agent approaches its iteration limit, it gets increasingly urgent nudges to wrap things up and produce output instead of spiraling into infinite research. And if the agent starts repeating the same tool calls over and over (we've all been there), meltdown detection kicks in, clears the slate, and tells the agent to try something β€” anything β€” different. (#238)

πŸ”‘ Per-Agent API Key Overrides

Running multiple agents that need different API keys? Now you can configure per-agent API key overrides that fall back to global config and then environment variables. Agent A uses one OpenAI key, Agent B uses another β€” everybody's happy, nobody's fighting over credentials. (#242)

πŸ’¬ A Chat Experience That Actually Feels Good

The interactive chat got a serious polish pass. You can now type messages while the agent is still thinking β€” they'll be queued up and sent automatically when the agent finishes, so you never have to stare at a frozen cursor again. Bounded live panels show the last few lines of reasoning and subagent output in real-time, then collapse to a one-line summary when done. Press Shift+Tab to toggle between "safe" mode (all tools need approval) and "yolo" mode (full auto-pilot) β€” because sometimes you just want to let it rip. (#212, #220, #213, #239)

Under the hood, streaming is buttery smooth with 80ms buffered deltas (~12 fps), coalesced updates, and adaptive buffering that defers rendering when you're inside an unclosed code block or table β€” no more watching column widths dance around as the output streams in. (#216, #218, #211, #209)

πŸ“œ Session History & Cost Tracking

Every conversation is now logged to disk with timestamps and roles, so you can look back at what happened. And workflow runs now track per-run cost and token usage right in the run history β€” because knowing how much your agent spent is the first step to not being surprised by the bill. (#221, #226)

πŸ›‘οΈ Security Hardening

The shell tool got a serious security audit. Commands are now executed via spawn with an argument array instead of string interpolation, and a defense-in-depth denylist blocks dangerous operations like rm -rf /, privilege escalation, reverse shells, fork bombs, and curl-piped-to-bash shenanigans. A dedicated regression test suite covers 80+ block-and-allow cases. Your agent should be helpful, not a liability. (#227)

πŸ”§ Quality-of-Life Improvements

  • ask_user_question now always allows free-form text input, even when suggested responses are provided β€” because sometimes the best answer isn't in the list.
  • Failed scheduled workflow runs are now properly recorded and surfaced on startup, so you'll know exactly what went wrong instead of wondering why your cron job silently died.
  • Tool aliases let you register alternative names for tools, so the LLM has more ways to find what it needs.
  • The auto-update checker now links to the releases page instead of a stale changelog.
  • CI agents have been switched to openrouter/owl-alpha for faster, more cost-effective reviews.

Commits

  • 115f9d23 chore(ci): switch CI agents to openrouter/owl-alpha by @lvndry
  • 82f17396 feat(cli): add jazz run one-shot command and --max-iterations flag by @lvndry
  • 3edea825 fix(user-interaction): always enable free-form ask_user_question input by @lvndry
  • 9c3a616c fix(llm): support per-agent API key overrides with fallback by @lvndry
  • c1a8b629 feat(web-search): add Linkup as a search provider by @lvndry
  • eaa05af5 feat(agent): surface llm retry and slow-call status by @lvndry
  • 3fa7c53a chore(notifications): replace node-notifier with native commands + feat(shift-tab): add mode toggle shortcut by @lvndry
  • 65815f4a chore(web-search): [exa] return text content by @lvndry
  • ad2bcca5 feat: per-agent search provider, budget pressure, meltdown detection by @lvndry
  • 5aabc714 fix(llm): clean up retry design β€” scoped fallback, unified schedule, 15 min timeout by @lvndry
  • e28bd614 fix(llm): suppress AI SDK system-in-messages warning by @lvndry
  • 9f1091fb feat(tools): add tool alias support + prompt improvements for blocked interpreter flags by @lvndry
  • b4c5a5be docs: README by @lvndry
  • 6631b4e2 chore(deps): update all dependencies by @lvndry
  • e7a1565b fix(agent): raise LLM request timeout floor to 10 min by @lvndry
  • c0eacf8b fix(agent): bump DEFAULT_MAX_LLM_RETRIES from 3 to 8 by @lvndry
  • 2d4a9094 feat(openrouter): native web_search and web_fetch server tool support by @lvndry
  • bb139601 feat(web-search): overhaul all providers to return content and follow latest best practices by @lvndry
  • 34548bd0 fix(security): eliminate shell injection via spawn argument array by @lvndry
  • 2ababe71 feat(config): make LLM retry count configurable via jazz.config.json by @lvndry
  • 0824c3b3 ci(release): skip release if no commits since last tag by @lvndry
  • 050e88ae chore(cost): more precise calculation by @lvndry
  • 8a29a3ca feat(workflow): expose per-run cost and token usage in AgentResponse by @lvndry
  • 62d00530 feat(web-search): auto-detect provider API keys from environment variables by @lvndry
  • 01c645d7 fix(auto-update): replace changelog with releases link by @lvndry
  • fa3286ba chore: improve vscode config by @lvndry
  • d2505409 chore: remove TODO.md and README.proposed.md by @lvndry
  • fa069c0f feat(history): session storage and conversation history by @lvndry
  • ad57363f feat(chat): stack queued messages, one entry per line by @lvndry
  • 9ba9840d feat(cli): bounded live panels for reasoning and subagents by @lvndry
  • b674518f fix(chat): echo "You: " when draining the queued message by @lvndry
  • fb4f804c chore: prune dead files and unused dependencies by @lvndry
  • 17fdcec7 perf(cli): adaptive buffering for tables and code blocks by @lvndry
  • d1150b41 feat(chat): queue messages typed while agent is busy by @lvndry
  • 91972f78 fix(workflow): record failed scheduled runs and surface them on startup by @lvndry
  • 861bcf20 perf(cli): buffer streaming deltas to ~80ms cadence by @lvndry
  • 859929c5 fix(cli): rendering polish β€” blank line before metrics + reasoning delimiter by @lvndry
  • e480f06b fix(cli): polish input flows β€” optional agent description + mask API key echo by @lvndry
  • da1f4cc2 fix(cli): rebuild streaming pipeline on single-pending-buffer model by @lvndry

Full diff

v0.10.10...v0.11.0