v0.12.2
What's Changed
Headless --events Mode Actually Emits Tool Activity Now 🎉
If you've been using jazz run --events to pipe tool lifecycle events into your own scripts, CI pipelines, or dashboards, you may have noticed something… missing. Yeah, tool events weren't actually firing on the non-streaming (headless one-shot) path. The events were wired up for streaming mode but silently ghosted when you went headless. No tool_execution_start, no tools_detected — just silence.
That's fixed now. The batch executor (executeWithoutStreaming) detects when the presentation service wants tool events routed through a streaming renderer, spins up the appropriate StreamingRenderer, and feeds it to the agent loop so tool lifecycle NDJSON events flow through on stderr just like you'd expect. Visual (CLI/Ink) presentation services are completely unaffected — they keep their existing format* batch-mode behavior untouched.
We also shipped a thorough 245-line test suite (batch-executor.test.ts) that captures stderr, parses the NDJSON stream, and verifies:
- ✅
tools_detected,tool_execution_start, andtool_execution_completeevents appear when--events toolsis active - ✅ The
tool_execution_startevent carries the correct tool name (ls) - ✅ No tool event noise leaks through when no event categories are requested
Your jazz run --events pipeline integrations should start seeing the tool telemetry they deserve. 🔧
Commits
4ccec020.12.2 by @github-actions[bot]f7c49eafix(run): emit tool events on headless one-shot non-streaming path (#250) by @lvndry