What problem does it solve? AI chat interfaces feel unresponsive when users see no feedback during long LLM operations, and race conditions occur when the UI stays interactive while a response streams. This Skill provides the patterns to wire response lifecycle handlers, progress indicators, client effects, and client tools into ChatKit applications. ## Core Features & Use Cases - Response Lifecycle Handlers: Lock and unlock UI with onResponseStart/onResponseEnd/onError to prevent race conditions during streaming. - Client Effects and Progress Updates: Emit fire-and-forget ClientEffectEvent and ProgressUpdateEvent from Python backends to show "Searching..." states and update UI without round trips. - Client Tools: Let the AI query browser-side state (selections, viewport, form values) via onClientTool handlers. - Use Case: While building a support chat with a map canvas, use onResponseStart to lock the canvas, stream ProgressUpdateEvent messages from a search tool, and fire an add_marker effect to place results on the map. ## Quick Start Add streaming lifecycle handlers, progress updates, and client effects to my ChatKit chat component using this skill.