--- name: a2ui-embed description: Write HTML visualizations to the A2UI panel or embed running apps --- # A2UI Visualization Skill Write custom HTML visualizations or embed running web apps in the TriClaude A2UI panel. ## Trigger Phrases - "open in a2ui", "show in a2ui", "embed", "a2ui" - "visualize", "show me", "display", "chart", "render" ## How A2UI Works ``` ┌─────────────────────────────────────────────────────────────┐ │ Claude writes HTML Sidecar watches UI displays │ │ to a2ui_input.log → log file and → via WebSocket │ │ broadcasts │ └─────────────────────────────────────────────────────────────┘ ``` **Components:** 1. **Log file**: `runtime/terminals//a2ui_input.log` 2. **Sidecar**: Python WebSocket server that watches the log 3. **UI**: React connects to sidecar WebSocket, renders HTML in iframe ## Step 1: Get Terminal Info The A2UI log path is in your terminal startup message: ``` A2UI VISUALIZATION: Write HTML to /home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals//a2ui_input.log ``` To find terminal config (including sidecarPort): ```bash cat /home/yousuf/GoogleDrive/PROJECTS/.triclaude/projects.json | python3 -m json.tool ``` Look for your terminal ID and note the `sidecarPort`. ## Step 2: Ensure Sidecar is Running **Check if sidecar is running:** ```bash ss -tlnp | grep ``` **If NOT running, start it:** ```bash python3 /home/yousuf/GoogleDrive/PROJECTS/APPS/TriClaude/scripts/a2ui_sidecar.py \ --port \ --log /home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals//a2ui_input.log & ``` Example: ```bash python3 /home/yousuf/GoogleDrive/PROJECTS/APPS/TriClaude/scripts/a2ui_sidecar.py \ --port 7867 \ --log /home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals/term_1768665093_0ve1c1/a2ui_input.log & ``` ## Step 3: Write HTML to A2UI ### Custom Visualization ```bash cat << 'A2UI_EOF' >> $A2UI_LOG A2UI_EOF ``` ### Embed Running App (iframe) ```bash cat << 'A2UI_EOF' >> $A2UI_LOG A2UI_EOF ``` ## Critical Requirements 1. **Markers required**: `` and `` 2. **Append to log**: Use `>>` not `>` 3. **Sidecar must be running** on the terminal's sidecarPort 4. **A2UI panel must be open** in the UI (purple button) 5. **Terminal must be visible/selected** in UI For iframes: - `sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-modals"` - `allow="*"` - No padding/margin on html/body - `overflow: hidden` on body ## Project Registry (for embedding apps) | Project | Path | Port | |---------|------|------| | tesseract | `/home/yousuf/local_workspaces/tesseract` | 3000 | | triclaude | `/home/yousuf/local_workspaces/triclaude` | 3001 | ## Troubleshooting **Panel shows nothing:** 1. Check sidecar is running: `ss -tlnp | grep ` 2. Start sidecar if not running (see Step 2) 3. Toggle A2UI panel off/on to force WebSocket reconnect 4. Check log file has content: `tail -20 $A2UI_LOG` **Find terminal's sidecar port:** ```bash cat /home/yousuf/GoogleDrive/PROJECTS/.triclaude/projects.json | grep -A5 "" ``` **Quick diagnostic:** ```bash # 1. Get terminal ID from startup message # 2. Find sidecar port cat /home/yousuf/GoogleDrive/PROJECTS/.triclaude/projects.json | python3 -m json.tool | grep -A10 "term_XXXXX" # 3. Check if sidecar running ss -tlnp | grep 786 # 4. Start sidecar if needed python3 /path/to/a2ui_sidecar.py --port PORT --log /path/to/a2ui_input.log & ``` ## Example: Full Flow ```bash # 1. Note terminal ID from startup: term_1768665093_0ve1c1 # 2. Check config - sidecarPort is 7867 # 3. Check sidecar: ss -tlnp | grep 7867 → not running # 4. Start sidecar: python3 /home/yousuf/GoogleDrive/PROJECTS/APPS/TriClaude/scripts/a2ui_sidecar.py \ --port 7867 \ --log /home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals/term_1768665093_0ve1c1/a2ui_input.log & # 5. Write visualization: cat << 'A2UI_EOF' >> /home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals/term_1768665093_0ve1c1/a2ui_input.log

Hello A2UI!

A2UI_EOF ```