Operate and debug the TriClaude sidecar/A2UI visualization pipeline for security-agent sessions. Use when users ask about Pulse visualization being blank, A2UI cards not rendering, sidecar restarts, or when generating visualization HTML that must route to the correct terminal and endpoint.
Resources
1Install
npx skillscat add yousufjoyian/claude-skills/security-agent Install via the SkillsCat registry.
Security Agent Skill
Use this skill to produce reliable A2UI/Pulse visualizations for the security-agent project and to diagnose pipeline failures quickly.
Quick Intent Routing
Decide target behavior from user wording before writing HTML:
- If the user says
Pulse,Visualization section, oragent visualization:
verifyGET /api/a2a/vizit-latest/<terminalId>returns200with HTML. - If the user says
A2UI content,A2UI panel, orsidecar content:
verifyPOST /api/a2ui-contentreturns HTML. - If they only ask for a visualization card:
write toa2ui_input.logand verify both endpoints when possible.
Canonical Workflow
1) Resolve active terminal and log path
Use API, not assumptions.
curl -sS -m 5 http://127.0.0.1:7690/api/projectsFind the security-agent project, then use:
activeTerminalIdsidecarPort- log path:
/home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals/<terminalId>/a2ui_input.log
2) Acquire file checkout lock before edits
Before editing any file, checkout it:
curl -sS -X POST http://127.0.0.1:7690/api/coordination/checkout \
-H "Content-Type: application/json" \
-d '{"terminalId":"<terminalId>","filePath":"<full_file_path>","projectPath":"/home/yousuf/local_workspaces/security-agent"}'If success: false, do not edit.
3) Write A2UI block correctly
Rules:
- Always append with
>>, never overwrite with>. - Always wrap HTML with
<!-- A2UI:START -->and<!-- A2UI:END -->. - Add a timestamp comment to avoid sidecar dedupe.
<!-- A2UI:START -->
<!-- ts: 2026-02-16T20:09:01-05:00 -->
<div>...</div>
<!-- A2UI:END -->4) Verify rendering path
Check both views as needed:
curl -sS -m 5 -X POST http://127.0.0.1:7690/api/a2ui-content \
-H "Content-Type: application/json" \
-d '{"terminalId":"<terminalId>"}'curl -sS -m 5 -w '\nHTTP:%{http_code}\n' \
http://127.0.0.1:7690/api/a2a/vizit-latest/<terminalId>Interpretation:
a2ui-contenthas HTML +vizit-latestis204: sidecar/vizit persistence issue for Pulse.vizit-latestis200with HTML: Pulse has renderable content.
5) Recover when Pulse is blank
Use this sequence:
- Restart sidecar for that terminal:
curl -sS -X POST http://127.0.0.1:7690/api/restart-sidecar \
-H "Content-Type: application/json" \
-d '{"terminalId":"<terminalId>","port":<sidecarPort>}'- Append a fresh A2UI block with a unique timestamp.
- Confirm sidecar created a file in:
/home/yousuf/GoogleDrive/PROJECTS/.triclaude/runtime/terminals/<terminalId>/a2ui/viz_*.html - Recheck
vizit-latestforHTTP 200.
6) Release checkout lock
curl -sS -X POST http://127.0.0.1:7690/api/coordination/checkout \
-H "Content-Type: application/json" \
-d '{"terminalId":"<terminalId>","filePath":"<full_file_path>","release":true}'Style Options
Read references/style-guide.md before generating polished visuals.
Default selection for diagnostics:
RCF Card(Root Cause + Fix)
Other supported options:
Status GridIncident TimelineMinimal Confirm
When the user says they like a prior visualization, reuse the same style family and only update content.
Response Contract
When reporting results to user, always include:
- Terminal ID used.
- Which endpoint was failing (
a2ui-contentorvizit-latest). - Fix steps applied.
- Final verification result with status code.