Catalyst Dev — Change Log
9.3.0 (2026-05-15)
HUD Overhaul & Broker Observability
This release is a substantial rework of the orchestration monitor HUD — raw event names in their own column, a unified Claude Code-style prompt input, sortable Workers/Orchestrators tabs, a new Runs tab showing the full orchestrator → worker hierarchy, and progressive Escape to undo one filter layer at a time. On the broker side, workers in wait states are now visible (with countdown timers in the HUD), stale-heartbeat wakes are batched per interest instead of flooding per session, and duplicate wakes are suppressed when CI conclusion hasn’t changed. Every catalyst-* CLI now accepts --version to show the build SHA and source path, and catalyst-broker probe gives a fast O(1) daemon health check.
Features
- dev: —version flag on every catalyst-* CLI + commit hash (CTL-390) (#667) (e6c85a1)
- dev: add reason field to agent.checkout payload (CTL-402) (#725) (dab0fac)
- dev: add SESSION column to HUD Interests dashboard (CTL-422) (#739) (bd0a61f)
- dev: add wake-extract CLI + document wake payload schema (CTL-408) (#726) (939550e)
- dev: add WORKER column to HUD interests table (CTL-427) (#743) (cd8b811)
- dev: broker wait-loop visibility — worker.waiting/resumed events (CTL-403) (#717) (fa030f5)
- dev: broker_claim_pr as easy path — probe command + fallback telemetry (CTL-409) (#744) (16cc5dc)
- dev: emit orchestrator.status events for self-status announcements (CTL-405) (#738) (c1679bb)
- dev: expand REPO column coverage across canonical event emitters (CTL-385) (#665) (baf2d7d)
- dev: HUD — relocate EVENT-ID from row to detail pane (CTL-393) (#684) (13af477)
- dev: HUD — show raw event.name in EVENT column; split icon into its own 1-char column (CTL-391) (#668) (eb7e70d)
- dev: HUD — unified Claude-Code-style prompt input box (CTL-386) (#688) (4d569e3)
- dev: HUD :since — first-class filter (overlay, ESC, footer chip) (CTL-387) (#663) (3e71819)
- dev: HUD broker/worker dashboard view (CTL-392) (#678) (917ebdb)
- dev: HUD Claude Code-style full-width input bar with separate status line (CTL-417) (#736) (e641ea4)
- dev: HUD Escape progressively undoes state — scope reset + live-tail resume (CTL-423) (#740) (3321ace)
- dev: HUD Runs tab showing orchestrator → tickets/workers hierarchy (CTL-426) (#742) (f3c85e6)
- dev: HUD unified active-filter indicator in footer (CTL-389) (#685) (bb74832)
- dev: HUD user-configurable column display and order (CTL-394) (#691) (77ae454)
- dev: HUD Workers/Orchestrators tabs — sortable columns (CTL-425) (#741) (165d7a7)
- dev: HUD wrap-mode toggle — ‘w’ key to flip truncate/wrap (CTL-384) (#683) (b8584e1)
- dev: per-event-class DETAILS formatting for GitHub and Linear events (CTL-418) (#732) (db3f111)
- dev: populate vcs.pr.number + vcs.ref.name on check_suite/workflow_run (CTL-396) (#687) (efdae78)
- dev: surface prose interest disabled status in HUD (CTL-421) (#720) (e38636e)
- dev: wire SubagentStop/Stop hooks as agent.checkout fallback (CTL-404) (#714) (5d313e7)
Bug Fixes
- dev: add 1-character left margin to HUD root container (CTL-430) (#734) (37777c9)
- dev: add retry loop to broker_claim_pr and broker_register_comms (CTL-429) (#731) (3c87905)
- dev: apply wrap=truncate to all HUD columns to eliminate ghost chars (CTL-416) (#730) (d34c71f)
- dev: batch stale-heartbeat wakes + HUD wake recipient visibility (CTL-419) (#722) (c2ebc63)
- dev: build-orchestrator-filter drops github.pr.merged when PR not yet in signal files (CTL-398) (#737) (b493715)
- dev: dedupe filter.wake emissions by (source_event_id, interest_id) (CTL-406) (#712) (985e62e)
- dev: drop comms.message.posted from Groq queue when no deterministic match (CTL-397) (#718) (8f3780b)
- dev: enrich filter.wake reasons for check_suite non-success/failure conclusions (CTL-399) (#728) (cfb499a)
- dev: HUD — eliminate ghost chars in DETAILS via explicit width (CTL-395) (#686) (73c058e)
- dev: HUD — truncate long orchestrator IDs in ORCH column (CTL-383) (#662) (4b869fc)
- dev: HUD detail pane no longer pins selected event at list top (CTL-420) (#733) (795b2f7)
- dev: HUD pivot keys o/t pause live mode before scoping (CTL-388) (#664) (9604fb7)
- dev: orchestrate-verify.sh false-positive on post-merge branch lookup (CTL-400) (#735) (ef3f8e1)
- dev: populate REPO column for linear.* and filter.wake events (CTL-412) (#724) (8b928eb)
- dev: reject range operators on wrong-typed fields in NLQ DSL (CTL-415) (#729) (c150a6b)
- dev: remove stale filter-input.test.ts after FilterInput.tsx deletion (#689) (6b871d7)
- dev: remove unnecessary type assertions left by CTL-394 worker (#694) (e6dee50)
- dev: remove unused ink-text-input dependency from orch-monitor (#690) (0fa7777)
- dev: route bare durations to since-filter in HUD query input (CTL-414) (#727) (2f0126c)
- dev: route session.heartbeat to broker watchdog liveness map (CTL-401) (#711) (f5d7649)
- dev: suppress redundant broker wakes when downstream state unchanged (CTL-407) (#719) (2a5293e)
- dev: surface toState, actorName, and scalar fields in Linear webhook canonical payload (CTL-424) (#721) (9e6e494)
- dev: use Date.getTime() for since-filter comparison in HUD (CTL-413) (#723) (81f0e34)
9.2.0 (2026-05-14)
Claude Code Session Metadata & HUD Overhaul
Session context is now tracked and surfaced throughout the toolchain: catalyst-statusline.sh emits session.context events with model, context %, token count, cost, and turn number on every status bar render, and the HUD and web UI display them inline per worker. The monitor HUD also gets a round of focused improvements — the SOURCE and EVENT columns are merged into a single responsive column, the / filter now substring-matches across every field in the raw event JSON (with AND semantics for multi-token queries), the footer compacts to two lines with width-responsive hotkey hints, and the scroll anchor bug that hid filter matches above the viewport is fixed. Run catalyst-db.sh init after updating to apply the new claude_session_id and last_context_pct columns.
Features
- dev: broaden HUD
/filter to substring-match across all event fields (CTL-367) (#644) (f900348) - dev: enrich session events with Claude Code metadata (CTL-374) (#638) (d1f78e2)
- dev: HUD — merge SOURCE + EVENT columns into single wider EVENT column (CTL-364) (#645) (2ad9d26)
- dev: HUD footer cleanup — right-align event count, separator, width hints (CTL-363) (#627) (65cb93b)
- dev: lift cicd.pipeline.run.status to typed canonical attribute (CTL-366) (#632) (3608818)
- dev: orchestrator-id short form
o-<repo>-<tickets>(CTL-373) (#637) (3353d8c) - dev: vcs.repository.name enrichment for linear/orchestrator/broker events (CTL-362) (#628) (c6e6138)
Bug Fixes
- dev: canonical worker-event allowlist + schema-drift cleanup (CTL-370) (#635) (94ea15d)
- dev: HUD DETAILS column truncates instead of wrapping (CTL-361) (#626) (0e4e267)
- dev: HUD filtered viewport — autoFollow UP scroll anchor (CTL-368) (#630) (681f351)
- dev: NL query — refresh prompt schema, add events catalog, inject current time (CTL-365) (#631) (506eb4f)
- dev: orchestrate dispatch prompt teaches broker Pattern 3 preference (CTL-371) (#634) (ce2e0f2)
- dev: reconcile orchestrate Phase 4 grep pipe with monitor-events prohibition (CTL-372) (#636) (4aeae33)
- dev: require wake narration line per Monitor wake (CTL-369) (#633) (1bd684d)
9.1.0 (2026-05-13)
Broker Reliability & HUD Observability Overhaul
This release fixes a cascade of broker routing failures where canonical OTel event envelopes were being misread at multiple sites — filter.register events were silently ignored, deterministic PR routes never fired, and the Groq prose classifier was generating ~95% false positives (now gated off by default via CATALYST_BROKER_PROSE_ENABLED=0). The HUD gets substantial polish alongside: wake rows now show the target orchestrator and wake reason in context, SOURCE icons pick up Nerd Font glyphs, column widths adapt to terminal size, and a broker health chip surfaces interest count and API key status at a glance. Run plugins/dev/scripts/clean-prose-interests.sh && catalyst-monitor restart after updating to clear any stale test-residue interests from ~/catalyst/broker-interests.json.
Features
- dev: broker comms_lifecycle + env-gate Groq prose path (CTL-357) (#607) (39adb7a)
- dev: per-event UUID (event.id) across canonical emitters (CTL-344) (#580) (2b9acc9)
Bug Fixes
- dev: API key health — startup warning, probe, status surface, gateway (CTL-343) (#579) (543449f)
- dev: broker interests integrity + empty-state observability (CTL-352) (#602) (fd09601)
- dev: broker prose-match suppression gate uses Groq intent (CTL-340) (#585) (6e864be)
- dev: broker reads canonical filter.register events (CTL-336) (#567) (8abc0d5)
- dev: broker skips self-emitted filter.wake/broker.daemon events (CTL-346) (#586) (33859e7)
- dev: broker tryDeterministicRoute canonical-envelope read (CTL-359) (#609) (523b6fe)
- dev: correct filter.wake predicate in skill docs (CTL-354) (#599) (b7193a4)
- dev: delete retired filter-daemon directory (CTL-349) (#590) (d553c7e)
- dev: HUD + broker observability rework (CTL-350) (#592) (3d9a02b)
- dev: HUD filter row display — DETAILS, REF, and SOURCE (CTL-337) (#569) (944410e)
- dev: HUD glyph fixes — NF v3 codepoint move + PR space (CTL-358) (#606) (17d30f4)
- dev: HUD glyph polish — SOURCE icon prefix, PR symbol, REF/ORCH dedup (CTL-355) (#601) (3dfc153)
- dev: HUD highlight uses inverse video for readable contrast (CTL-342) (#578) (a257e65)
- dev: HUD in-progress glyph uses Nerd Font when available, else ellipsis (CTL-353) (#598) (8baceda)
- dev: HUD polish + broker.daemon.shutdown event (CTL-351) (#595) (dd99679)
- dev: install-cli.sh owns ~/.catalyst/bin + auto PATH bootstrap (CTL-339) (#571) (3284f5a)
- dev: orchestrate-dispatch-next leaks parent stdin into worker (CTL-334) (#577) (8dfb293)
- dev: pr_lifecycle interest refresh + auto-correlate at PR open (CTL-341) (#588) (eadab91)
- dev: surface wake target + reason in HUD rows (CTL-348) (#587) (f1bfbb1)
9.0.0
May 11, 2026
Catalyst HUD Bottom-Anchored Panels
Detail panes and help overlays now anchor to the bottom of your terminal with the event list expanding to fill all remaining space above. Event rows are self-explanatory — comms events show sender/recipient/type, filter events display as “wake”/“filter reg” instead of truncated names, and all text is cleaned of HTML/Markdown markup. Column headers stay pinned when detail panes are open, and the core catalyst-pm plugin now focuses on 12 essential strategy/PRD skills with ops features moved to dedicated sibling plugins.
PRs
- pm: shrink catalyst-pm to 12 strategy/PRD skills (CTL-322) (#543)
- pm: shrink catalyst-pm to 12 strategy/PRD skills (CTL-322) (#543) (43b1c89)
- dev: bottom-anchor catalyst-hud detail pane (CTL-324) (#553) (9de7767)
- dev: bottom-anchor catalyst-hud help panel (CTL-325) (#554) (474702d)
- dev: broker writes canonical filter.wake events + HUD shows filter.* labels (CTL-331) (#558) (6a28db7)
- dev: catalyst-hud — make comms rows self-explanatory (CTL-330) (#559) (37cdf68)
- dev: catalyst-hud detail header — 24h datetime, prevent timestamp wrap (CTL-327) (#552) (8440c9b)
- dev: catalyst-hud sticky column header (CTL-332) (#560) (8f4447a)
- dev: catalyst-hud UI polish — live tail, scrollable panes, redesigned detail (#529) (b6fac3f)
- dev: make catalyst-hud and install-cli resilient to plugin upgrades (#538) (3a07708)
- dev: strip HTML and Markdown markup from catalyst-hud event details (CTL-326) (#551) (80870da)
8.4.0
May 09, 2026
Event Log Analysis CLI
Query your event logs using either technical filters or plain English — get phase timing breakdowns, identify orchestration stalls, and analyze CI funnels from JSONL logs. Natural language queries like “show errors in the last hour” are translated to structured filters via Claude and work in both the CLI and live TUI. Legacy event formats are now handled gracefully to prevent the catalyst-hud loading hang.
PRs
- dev: event log analysis CLI — phase-time, stalls, ci-funnel (CTL-307) (#523) (1f7158a)
- dev: natural-language event query for catalyst-events + TUI (CTL-313) (#524) (0a8b235)
- dev: guard against legacy events crashing catalyst-hud (#528) (f0bcf34)
- dev: orchestrate-verify uses
bun run testnotbun test(CTL-317) (#531) (76fcbf8)
8.3.0
May 08, 2026
AI Activity Brief and Broker Evolution
The Catalyst plugin ecosystem now includes an AI-powered Activity Brief panel that generates
executive summaries of the last 30m/1h/6h of development activity, plus a new /god skill for
cross-project omniscient status monitoring. The core event filtering system has evolved into
catalyst-broker with structured agent identity, automatic PR correlation, and deterministic
routing for Linear ticket events. Run catalyst-monitor.sh forward-start to enable the new
OTLP/PostHog/Cloudflare Analytics Engine telemetry forwarder that ships canonical events to external
observability platforms.
PRs
- dev: Activity Brief panel — AI summary of recent event activity (CTL-282) (#470) (e76bed7)
- dev: add /god skill — cross-project omniscient status view (CTL-193) (#466) (0daed35)
- dev: add color-coded source chips to activity feed (CTL-276) (#464) (01565e5)
- dev: canonical OTel-shaped event envelope (CTL-300) (#501) (f2402c4)
- dev: canonical SVC/SEV/TRACE columns in catalyst-hud (CTL-308) (#504) (1a50efb)
- dev: catalyst-hud TUI — Ink-based terminal with scrollback, filter, detail pane, trace pivot (CTL-312) (#514) (db1e346)
- dev: CTL-306 tail-and-forward daemon (canonical events → OTLP / PostHog / Cloudflare AE) (#516) (ecb71c7)
- dev: deterministic event routing for PR lifecycle (CTL-284) (#496) (675cd81)
- dev: enrich Linear issue events with human-readable descriptions (CTL-281) (#469) (5d1988c)
- dev: evolve filter daemon into broker — structured agent identity, auto-correlation, ticket_lifecycle routing (CTL-303) (#515) (c0e5417)
- dev: generalize filter.register to all agent types (CTL-269) (#441) (ddd493b)
- dev: include message body in comms.message.posted events (CTL-279) (#468) (ad20724)
- dev: multi-team webhook support + Layer 2 config alignment (CTL-273) (f6e1eee)
- dev: per-repo color config for HUD scope chips (CTL-277) (#471) (f952bfa)
- dev: per-team Linear webhook secrets + fix pre-existing bugs (CTL-285) (#474) (bbdb60f)
- dev: populate traceId on webhook-emitted canonical events (CTL-310) (#509) (74e4150)
- dev: rename catalyst-filter → catalyst-broker as primary CLI (CTL-315) (#521) (6e94290)
- dev: replace console.* with pino structured logging in broker + forwarder (CTL-314) (#520) (8200ca8)
- dev: webhook teardown script + auto-startup docs (CTL-219) (#513) (33b7b79)
- dev: wire Linear webhook events into HUD activity feed (CTL-275) (#463) (510e6a7)
- dev: align Linear webhook URL key with consumers (CTL-274) (#450) (bf6ba0c)
- dev: catalyst-hud column alignment + event-name truncation (CTL-311) (#511) (f34af09)
- dev: event filter bugs — Codex reviews silently dropped (CTL-270) (#443) (82b1d3f)
- dev: keyed-format fallback for linearSmeeChannel (CTL-301) (#493) (332e8e3)
- dev: read groq.apiKey from config.json when GROQ_API_KEY env var is absent (#445) (ec5c84e)
- dev: read Linear webhookId from cross-project Layer 2 (CTL-272) (#449) (5ceb79e)
- dev: replace polling with fs.watch reactive tailing in filter daemon (CTL-283) (#461) (c1cca6e)
- dev: resolve symlink before deriving SCRIPT_DIR in catalyst-hud (#517) (de226e9)
- dev: show repo chip on non-PR GitHub events (CTL-278) (#467) (d5b704e)
8.2.0
May 06, 2026
Groq-Powered Semantic Event Routing
The catalyst-filter daemon now routes GitHub webhook and Linear events through Groq Llama 3.1 8B,
letting orchestrators register natural-language intents instead of writing complex jq filters.
Bidirectional comms enable mid-flight orchestrator messages to workers, and heartbeat watchdog
detection catches stalled workers without LLM calls. Install the new CLIs with
catalyst-filter start and setup-webhooks.sh --register-github-hooks.
PRs
- dev: add catalyst-filter to plugin install scripts (CTL-259) (#423) (20b7807)
- dev: bidirectional comms — workers read inbound messages at phase boundaries (CTL-249) (#403) (79aa258)
- dev: catalyst-filter daemon — Groq-powered semantic event routing (CTL-256) (#421) (ceeb0ee)
- dev: event-schema reference doc — derive from TypeScript types so agents don’t guess field names (#430) (e0b0821)
- dev: expose webhookTunnel state in catalyst-monitor status —json (CTL-244) (#398) (643055d)
- dev: heartbeat watchdog in filter daemon — detect stalled workers without LLM (CTL-261) (#428) (c8e337b)
- dev: Linear issue events → filter daemon wake via bot-skip suppression (CTL-263) (#426) (a2bd391)
- dev: orch-monitor activity feed for global event stream (CTL-225) (#358) (db72cf7)
- dev: orch-monitor daemon liveness check as skill prerequisite (CTL-223) (#356) (7e906ce)
- dev: orch-monitor version drift self-check on startup (CTL-237) (#381) (ab2edcf)
- dev: orchestrate Phase 4 — event-driven Monitor + catalyst-events tail (CTL-243) (#378) (7f3e728)
- dev: orchestrator DIRTY merge auto-recovery (CTL-232) (#386) (59222b6)
- dev: persist Linear webhook registration to Layer 2 (CTL-238) (#382) (a730499)
- dev: persistent interests + explicit deregistration in filter daemon (CTL-262) (#425) (d0ac7d9)
- dev: reactive multi-event PR lifecycle subscription (CTL-228) (#379) (e407c24)
- dev: SKILL.md for catalyst-filter — protocol docs for orchestrators (CTL-258) (#422) (e42a4ac)
- dev: wait-for-github diagnostic checkpoint — update callers to two-phase pattern (CTL-251) (#404) (e03f455)
- dev: wait-for-github skill — two-phase event wait with diagnostic checkpoint (CTL-247) (7738683)
- dev: wire catalyst-filter into orchestrate Phase 4 (CTL-257) (#424) (43e36ff)
- dev: wire Linear webhook delivery via smee.io end-to-end (CTL-242) (#396) (e58ae5f)
- dev: worker-status-change emitter — severity tiers, coalesce, PR enrichment (CTL-229) (#387) (682e817)
- dev: add monitor.* to config templates + verify GitHub webhook registration (CTL-254) (#409) (e09d077)
- dev: add wait-for-github and catalyst-filter to CLAUDE_SNIPPET.md (CTL-268) (0b1adc4)
- dev: add worker done comms hook to oneshot Phase 5 (CTL-236) (#388) (a8d4030)
- dev: correct webhookTunnel field and add smee-client dependency (#435) (10edb77)
- dev: install-cli.sh adds catalyst-events + defaults to ~/.local/bin (CTL-227) (#357) (5dfa3ac)
- dev: make orchestrate-roll-usage.sh observable (CTL-233) (#380) (b61941d)
- dev: orchestrate-fixup/followup WORKER_DIR fallback (CTL-231) (#377) (9386849)
- dev: render DASHBOARD.md every Phase 4 cycle (CTL-230) (#385) (a618055)
- dev: replace polling loops in merge-pr and create-pr with wait-for-github (CTL-250) (#402) (96ab764)
- dev: scope-aware Monitor filter + no-awk-pipe warning (CTL-240) (#390) (7efc119)
- dev: stamp orchestrator on github.* webhook events (CTL-234) (#391) (56083c9)
- dev: update fixup/followup templates to CTL-133 exit-at-merging contract (CTL-248) (#401) (2454b19)
- dev: upgrade setup prereq checks for event-driven pipeline (CTL-253) (#408) (2d7b8bf)
8.1.0
May 04, 2026
Webhook Auto-Registration & Verification Fixes
The setup-webhooks.sh script now auto-registers Linear webhooks with
--linear-register --webhook-url <url>, eliminating the manual GraphQL mutation step that
previously blocked event-driven workflows. Fixed four critical bugs in orchestrate-verify.sh that
caused verification failures on merged PRs and produced malformed output with integer comparison
errors. Existing GitHub webhook subscriptions automatically upgrade to include release and
workflow_run events on daemon restart.
PRs
- dev: Linear webhook auto-registration in setup-webhooks.sh (CTL-224) (#353) (8cf4807)
- dev: repair orchestrate-verify.sh — broken on merged PRs + integer-cmp errors (CTL-222) (#352) (e98ffea)
- dev: webhook event mapper — missing release/workflow_run + bogus pr.merged on label changes (CTL-226) (#351) (0668d38)
8.0.0
May 04, 2026
Orchestrator-Driven Deploy Lifecycle
Worker definition-of-done now extends through production deploy success, with orchestrator managing
the merging → merged → deploying → done state machine after workers exit at “merging”. Event-driven
GitHub deployment monitoring replaces polling across skills like merge-pr and orchestrate. New
catalyst-events CLI provides tail and wait-for primitives over the unified GitHub/Linear/comms
activity log, while Linear webhooks join GitHub webhooks for comprehensive event ingestion.
PRs
- dev: orchestrator-driven deploy lifecycle for workers (CTL-211) (#344)
- dev: auto-pull main in primary worktree after PR merge (CTL-198) (#304) (d6ae3ba)
- dev: catalyst-events CLI + Linear webhooks + event-driven skill migration (CTL-210) (#343) (d70f7ee)
- dev: config-driven webhook watch list (CTL-216) (#342) (854a85e)
- dev: orchestrator-driven deploy lifecycle for workers (CTL-211) (#344) (fff5513)
- dev: canonicalize workerCommand + close orchestrator scope leak (CTL-208) (#325) (8139771)
- dev: move smee channel URL to per-machine Layer 2 config (CTL-217) (#341) (2970e6c)
- dev: replace orch-monitor poll-everything with webhook-driven event ingestion (CTL-209) (#330) (39e9d13)
- dev: unstick Orch Monitor Quality Gates CI workflow (CTL-215) (#335) (2801770)
7.14.0
May 03, 2026
Linear UUID Caching
New resolve-linear-ids.sh script fetches and caches Linear team and workflow state UUIDs to reduce
API rate limiting during issue transitions. The linear-transition.sh command now reads cached
UUIDs from .catalyst/config.json instead of making repeated API calls, with full backward
compatibility when cache is absent.