wire-tui-blocking-flyout

Wire core wire events into blocking modal flyouts in the Go TUI.

10|1|Updated Jul 7, 2026
One-click install
npx skills add https://github.com/catalystctl/catcode --skill wire-tui-blocking-flyout-catalystctl
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: wire-tui-blocking-flyout
Source: https://github.com/catalystctl/catcode/tree/main/.catalyst-code/skills/wire-tui-blocking-flyout
Command: npx skills add https://github.com/catalystctl/catcode --skill wire-tui-blocking-flyout-catalystctl

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? When the Rust core emits a blocking-prompt event (ask, approval, or intercom), the Go TUI must render a modal flyout and capture user input until the core unblocks. Missing any of the three integration points (event handler, key dispatch, render overlay) leaves the feature as dead code, and subtle pitfalls like the rawKey-vs-get unmarshalling bug silently break it. ## Core Features & Use Cases - Three-point wiring checklist: Add the event case in handleCoreEvent, intercept keys in handleKey, and apply the overlay at the end of View() so the flyout actually receives input. - Gotcha prevention: Covers the rawKey-vs-get JSON unmarshalling failure, keybind action-name mismatches, hardcoded arrow-key fallbacks, and inline validation errors instead of transcript spam. - Use Case: The core adds a new approval-style event that blocks on a Notify until the user replies. Use this Skill to add the TUI case, key handler, and render overlay, then verify with go build, go vet, and event-path tests. ## Quick Start Wire the new core blocking event into the Go TUI as a modal flyout following the three integration points and add a handleCoreEvent test.

Frequently Asked Questions about wire-tui-blocking-flyout

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I add a blocking modal to a Go Bubble Tea TUI?

Add three integration points: an event case in handleCoreEvent that sets pending prompt state, a key intercept in handleKey before scroll and global keys, and an overlay applied at the end of View(). Missing any one leaves the modal as dead code.

Why does my TUI flyout never open when the core event fires?

The most common cause is using ev.get(key) on a structured JSON field. get unmarshals into a string and fails for arrays or objects, returning empty. Use ev.rawKey(key) to obtain json.RawMessage for array or object payloads.

Why do keybinds not work inside my modal prompt?

The keybind helper silently returns false for unregistered action names, so invented names never match. Grep the keybind registry for exact action strings, and add hardcoded msg.String() arrow fallbacks so navigation works even if users rebound keys.

How should validation errors display inside a blocking flyout?

Set an errMsg field on the prompt struct and render it inside the flyout box, clearing it on the next non-submit keypress. Logging to the transcript appends a permanent error line on every Enter press and spams the log.

When should I not use a blocking flyout in the TUI?

Do not use it for passive transcript rendering of tool output, which belongs in a tool renderer, or for web-only event surfacing. Blocking flyouts are only for events where the core waits on a reply command from the user.