Agent skill

Visual Output

by Sidiora-Labs in Sidiora-Labs/centra-gideon-agent

Emit rich visual output in chat via <widget tags — styled HTML cards, charts, tables, interactive tools, and drawn SVG/canvas diagrams, illustrations, and animations — theme-aware, centered, and…

Apache-2.0Auto-check passedFrontend & Design

Install Visual Output

skills CLI
$ npx skills add Sidiora-Labs/centra-gideon-agent --skill visual-output -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Sidiora-Labs/centra-gideon-agent visual-output --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Sidiora-Labs/centra-gideon-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/runtime/gideon/extensions/skills/bundled/visual-output .claude/skills/visual-output && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
visual-output
GitHub stars
181
Token cost
~4.2k tokens
SKILL.md length
1,927 words
Files
1
Skills in repo
24
Repo updated
First seen
Licence
Apache-2.0

At a glance

Emit rich visual output in chat via <widget tags — styled HTML cards, charts, tables, interactive tools, and drawn SVG/canvas diagrams, illustrations, and animations — theme-aware, centered, and…

  • Works in 8 steps: Width capped + centered (max-w-*… → Consistent spacing — one card padding +… → Type hierarchy — clear title vs body vs… → …
  • Tasks that involve Diagrams
  • SKILL.md covers Format, Design system — make it look…, Theme variables — use these,… and Allowed scripts (CSP), plus 8 more sections
  • Reaches cdn.tailwindcss.com and cdn.jsdelivr.net

What it does

Visual Output is an agent skill from Sidiora-Labs/centra-gideon-agent. Emit rich visual output in chat via <widget tags — styled HTML cards, charts, tables, interactive tools, and drawn SVG/canvas diagrams, illustrations, and animations — theme-aware, centered, and responsive instead of clashing or cramped.

Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Diagrams. The repository describes itself as: The companion AI agent that learns, adapts and gets the work done no matter the task. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Diagrams

Example prompts

  • “/visual-output”

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Width capped + centered (max-w-* mx-auto, or max-width wrapper for SVG)
  2. Consistent spacing — one card padding + one gap size, on the 4px scale?
  3. Type hierarchy — clear title vs body vs caption via size/weight/color, ≤2
  4. Aligned — multi-item layouts on a grid with equal gaps, one alignment spine?
  5. Zero hardcoded colors — every color a theme var, looks right light + dark?
  6. One elevation — no cards nested 3 deep; hairline borders over heavy shadows?
  7. Motion (if any) — eased, 150–300ms (or 2–6s ambient), purposeful,
  8. Drawing a figure? Responsive viewBox + width="100%" (no fixed px),

What it can do on your machine

Read from SKILL.md and the folder at commit 2176d5b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are html and css).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • cdn.tailwindcss.com
    • cdn.jsdelivr.net
    • cdnjs.cloudflare.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Visual Output loads about 4.2k tokens when it runs. Until then it costs about 63 tokens; SKILL.md has 1,927 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~63
When it runs · the whole SKILL.md, loaded when a task matches
~4.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Sidiora-Labs/centra-gideon-agent at commit 2176d5b, republished under its Apache-2.0 licence (© Sidiora-Labs). 1,927 words, ~4,205 tokens.

Download SKILL.mdSave it as .claude/skills/visual-output/SKILL.md (or your agent's skills folder).
name
visual-output
description
Emit rich visual output in chat via <widget> tags — styled HTML cards, charts, tables, interactive tools, and drawn SVG/canvas diagrams, illustrations, and animations — theme-aware, centered, and responsive instead of clashing or cramped.
triggers
widget, widget iframe, chart, table, visual, dashboard, render widget, illustration, diagram, draw, svg, animation, animate, graph, schematic, visualize…
context_tier
heavy

Visual Output

Gideon renders rich HTML inline in chat via <widget> tags. The HTML runs in a sandboxed iframe that inherits the dashboard's active theme through CSS variables. Get the styling contract right and a widget looks native on every theme — light, dark, or custom. Get it wrong (hardcoded colors, fixed pixel sizes) and it clashes or renders tiny in a corner.

This skill covers both halves of visual output:

  • The widget container — format, theme variables, CSP, interactivity, and the card design system (layout, spacing, type, surface, motion).
  • Drawn visuals — SVG/canvas diagrams, schematics, charts, and animations, and the craft of making them centered, proportioned, labelled, and legible.

Format

html
<widget title="Sales by Region">
  <div class="p-4 rounded-lg" style="background: var(--card); color: var(--card-fg);">
    …content…
  </div>
</widget>
  • One widget per payload, self-contained.
  • Tailwind CSS is available inside the iframe.
  • For large HTML (long dashboards, big tables), save it to a file or an Artifact (see the artifacts skill) and reference it — don't inline hundreds of lines into the chat.

Design system — make it look intentional

The difference between a widget that looks native and one that looks slapped together is consistent layout, spacing, type, and alignment. Follow these.

Layout & alignment
  • Cap the width and center it. Wrap content in max-w-md/max-w-xl/max-w-2xl (pick by density) with mx-auto. A widget that sprawls full-width in a wide chat reads as broken. Dashboards: max-w-3xl; a single stat/card: max-w-sm.
  • One alignment spine. Left-align text content; center only standalone figures (charts, single big numbers, illustrations). Don't mix center + left in one card.
  • Use a grid for multi-item layouts — grid grid-cols-2 gap-3 (or gap-4), not floats or ad-hoc margins. Equal gaps everywhere; let the grid do alignment.
  • Group related, separate unrelated with whitespace + hairline dividers (border-t border-[var(--border)]), not boxes-within-boxes.
Spacing rhythm (4px scale)

Stick to a consistent scale so spacing feels deliberate: gap-2(8) gap-3(12) gap-4(16); padding p-4/p-5 for cards, p-3 for compact rows. Pick ONE card padding and one gap size per widget and reuse them. Avoid arbitrary mt-[7px].

Typography hierarchy
  • Title of the widget content: text-base font-semibold (or text-lg for a hero), var(--text-strong).
  • Body: text-sm, var(--text). Captions/labels: text-xs, var(--muted). Big stat numbers: text-2xl/text-3xl font-semibold tabular-nums.
  • Max ~2 type sizes per card beyond the title. Use weight + color for hierarchy, not many sizes. tabular-nums for any aligned numbers/tables.
Surface & depth
  • Cards: rounded-lg (or rounded-xl for hero), bg-[var(--card)], border border-[var(--border)]. One elevation level — don't nest cards 3 deep.
  • Subtle, not heavy: prefer a hairline border + tint over big shadows.
Motion
  • Use CSS transition/@keyframes (no JS needed for most). Easing cubic-bezier(0.2,0,0,1) (or ease-in-out); 150–300ms for UI transitions, 2–6s for ambient loops. Animate opacity/transform only (cheap, smooth).
  • Reveal-on-load is fine once; avoid perpetual motion unless it's the point (a live pulse/orbit). Always honor reduced-motion:
    css
    @media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}

Theme variables — use these, never hardcoded colors

The iframe injects the active theme's palette as CSS custom properties. Style everything with them (directly via style="…: var(--x)" or Tailwind arbitrary values like bg-[var(--card)]) so the widget tracks the theme:

VariableUse for
var(--bg)page / outermost background
var(--text)default body text
var(--card) / var(--card-fg)panel surface / text on it
var(--border)hairlines, dividers, input borders
var(--accent) / var(--accent-hover)primary actions, links, highlights
var(--muted) / var(--muted-strong)secondary / tertiary text
var(--text-strong)emphasized headings
var(--bg-elevated) / var(--bg-hover)raised surfaces / hover states
var(--border-strong)stronger separators
var(--ok) / var(--warn) / var(--danger) / var(--info)status colors
var(--accent-subtle) / var(--ok-subtle) / var(--warn-subtle) / var(--danger-subtle)tinted fills/badges

Never use bg-gray-900, text-white, #fff, or any hardcoded hex — they break on the opposite theme. Zero hardcoded colors.

Allowed scripts (CSP)

The iframe's Content-Security-Policy restricts script-src to inline scripts plus these CDNs only:

  • Tailwind — https://cdn.tailwindcss.com (preloaded; classes work out of the box)
  • https://cdn.jsdelivr.net
  • https://cdnjs.cloudflare.com

Load charting/visualization libs (e.g. Chart.js) from jsDelivr or cdnjs. Scripts from any other origin are blocked. connect-src is 'none' — widgets can't make network calls; render data you already have.

Interactive widgets

Widgets send events back to the agent. Add data-action (and optional data-payload, a JSON string) to any clickable element:

html
<button data-action="approve" data-payload='{"id":"123"}'>Approve</button>

On click, the dashboard auto-submits a user message: [UI] approve: {"id":"123"}. You receive it as the next turn and can respond with text, a new widget, or both.

Forms: inputs with a name attribute are auto-collected on click and merged into the payload as formData. Use this for creation forms — render pre-filled inputs, the user adjusts values, clicks submit, and you receive every field:

html
<input name="title" value="Untitled" class="px-2.5 py-2 rounded-md"
       style="background: var(--bg-elevated); color: var(--text); border: 1px solid var(--border);" />
<button data-action="create_task">Create</button>

Living views (auto-refresh). A widget can be a living dashboard that pulls fresh data on demand instead of freezing a snapshot at creation. Give it a refresh button:

html
<button data-action="refresh">Refresh</button>

When the widget has been saved as an artifact (it has a stable slug), the dashboard appends (refresh artifact "<slug>" in place) to the [UI] refresh message it sends you. On that turn: re-fetch the current data (call the tools/searches that produced it), then artifact_update("<slug>", ...) with the freshly-rendered HTML — the SAME artifact updates in place (versioned), so the open view re-renders with live data rather than spawning a new artifact. This is how you build a "my open items" / "current status" dashboard that stays current. (If the widget isn't a saved artifact yet, save it first so it has a slug to refresh.)

Tunable parameters (EDITMODE) — let the user restyle without asking you

A widget can declare its own tunables. The dashboard turns them into typed controls beside the render, and dragging one restyles the widget instantly — no turn, no request, no cost to you. This is how a user gets "a bit more rounded, slightly warmer accent" without spending a message on it.

Declare them ONCE, as a marker-fenced JSON object inside the widget's own script:

html
<widget title="Sales">
  <style>
    #card { background: var(--card); border-radius: var(--radius); border: 1px solid var(--accent) }
  </style>
  <div id="card">…</div>
  <script>
  /*EDITMODE-BEGIN*/{
    "radius": {"label": "Corners", "type": "range", "value": "12px",
               "min": 0, "max": 32, "step": 2, "unit": "px"},
    "accent": {"label": "Accent",  "type": "color", "value": "#3b82f6"}
  }/*EDITMODE-END*/
  </script>
</widget>
  • Each key is a :root CSS custom property, minus the --. "radius" drives var(--radius). Reference every tunable through var(--key) in your CSS — a value the stylesheet doesn't read is a control that appears to do nothing.

  • The markers are exact: /*EDITMODE-BEGIN*/ … /*EDITMODE-END*/, one block per widget, JSON object between them. Put it inside a <script> so it never renders.

  • ≤ 8 parameters. More than eight means the widget should be using theme variables rather than inventing its own, and a rail nobody can scan. Extras are dropped, visibly.

  • Four types, each with the fields it needs:

    typefieldscontrol
    colorvalue (#rrggbb)swatch + native picker
    rangevalue, min, max, step?, unit?slider
    selectvalue, options (≥2 CSS strings)dropdown
    togglevalue, on, off (CSS strings)switch
  • Values are CSS strings and are validated: no semicolons, braces, quotes, or url(). A descriptor that fails validation loses its control; the widget still renders.

  • You author the block; the dashboard owns it afterwards. When the user saves their tweaks, the dashboard rewrites the value fields in place and cuts a new artifact version. Everything outside the markers is untouched, and your other fields survive. So when you REGENERATE a widget that already had tunables, keep the same keys and carry the current values across — otherwise you throw away choices the user already made.

Show full SKILL.md (816 more words)Show less

Marked-up corrections you will receive

On a rendered widget the user can switch on Mark elements, click the parts that are wrong, and write one short note per element. You receive ONE turn:

text
[UI] correction: 2 elements marked — regenerate the artifact applying every change
below, and change nothing else
```corrections
1. selector: [data-testid="cta"]
   within: section[id="hero"]
   element: <button data-testid="cta">Buy</button>
   change: make this green
2. selector: p.price
   within: section[id="hero"]
   element: <p class="price">$9</p>
   change: bigger
```

Treat it literally: apply every listed change, change nothing else, and if the widget is a saved artifact (the message ends with refresh artifact "<slug>" in place) write the result back to THAT slug with artifact_update. Giving elements a data-testid makes these anchors stable and unambiguous — worth doing on the handful of elements a user is likely to want changed.

Sizing conventions

  • Buttons: text-xs py-1.5 px-3.5 rounded-md
  • Labels: text-[11px]
  • Inputs: text-sm px-2.5 py-2 rounded-md

Render bare URLs as anchors. Always open external links safely and style them with the accent color:

html
<a href="https://example.com" target="_blank" rel="noopener noreferrer"
   style="color: var(--accent);">example.com</a>

Drawn visuals — SVG, diagrams, illustrations, animations

Drawn visuals are emitted inside a <widget> (same container, theme vars, and CSP as above). The container is easy; the craft is making the drawing itself centered, correctly proportioned, theme-aware, labelled, and legible rather than cramped, clipped, or off-canvas.

The #1 failure is a fixed-size <svg width="350" height="200"> that renders tiny in a corner. Always make the SVG responsive and centered (below).

The responsive-SVG contract (use every time)
html
<widget title="…">
  <div style="max-width: 640px; margin: 0 auto;">
    <svg viewBox="0 0 640 360" width="100%" height="auto"
         preserveAspectRatio="xMidYMid meet" role="img" aria-label="…describe it…"
         style="display:block">
      …
    </svg>
  </div>
</widget>
  • viewBox defines the coordinate space; width="100%" makes it scale. Never set a fixed pixel width/height on the <svg> — it won't be responsive.
  • preserveAspectRatio="xMidYMid meet" centers + fits without distortion.
  • display:block + margin:0 auto on a max-width wrapper centers it and caps it so it doesn't sprawl edge-to-edge in a wide chat.
  • Pick a viewBox aspect that fits the content: 16:9 (640 360) for scenes, 1:1 (400 400) for cycles/radial, 3:1 (720 240) for timelines/flows.
  • Leave internal padding — keep real content within ~6–8% of each edge so strokes and labels never touch the frame.
Theme-aware drawing — no hardcoded colors

Style strokes/fills with the theme vars (injected into the iframe, same as above):

  • structural lines / axes / grids → var(--border) (thin, 0.5–1px)
  • primary subject / data → var(--accent)
  • secondary / supporting → var(--muted)
  • emphasis / alert → var(--danger); positive → var(--ok)
  • text labels → var(--text), secondary labels → var(--muted)
  • filled regions → var(--accent-subtle) / tinted fills, never opaque black/white

Put shared style in one <style> block with classes (.axis{stroke:var(--border)}) rather than repeating stroke= on every element — easier to keep consistent.

Alignment & composition
  • Establish a grid mentally: align elements to consistent x/y coordinates; don't eyeball. Equal gaps read as intentional; ragged gaps read as broken.
  • Center the focal point in the viewBox; balance mass around it.
  • Label directly where possible (label next to the thing) over distant legends; when a legend is needed, align it to a consistent edge with even rows.
  • Text: font: 14px/1.4 -apple-system, sans-serif; for body labels, ~12px for captions; use text-anchor="middle" for centered labels under a node and dominant-baseline="middle" for vertical centering. Never rely on the default baseline for centered text.
  • Round coordinates to whole/half pixels for crisp strokes.
Animating a drawing
  • Prefer CSS animations / transitions (in the <style> block) or SMIL (<animate>, <animateTransform>) — both run in the sandbox without extra libs.
  • Easing + duration: ease-in-out, 200–600ms for transitions, 2–6s loops for ambient motion. Avoid linear unless it's a steady cycle (rotation, orbit).
  • Loop with intent: animation-iteration-count: infinite only for genuinely ambient visuals (waves, pulses, orbits). One-shot reveals should play once.
  • Layer rhythms: when animating multiple elements, offset their delays/durations slightly so motion feels organic, not mechanically synchronized.
  • Respect reduced-motion (same media query as the card motion section above).
  • Keep it subtle — motion should clarify (show flow, change, cause→effect), not distract. If the still image already communicates, don't animate.
Charts
  • For data charts prefer Chart.js (load from jsDelivr — see CSP above) over hand-drawn SVG bars; pass theme-var colors into the dataset config so it tracks the theme. Give the canvas a fixed-aspect wrapper (position:relative; height:0; padding-bottom:56.25%) so it's responsive.
  • Always title the axes + the chart; never render a chart with unlabelled axes.

Cost discipline

Prefer plain markdown by default. Promote to a widget only when styled HTML communicates clearly better — charts, color-coded tables, styled cards, visual summaries, diagrams, or simple interactive tools. Don't wrap a paragraph in a widget.

The dashboard's widget_density setting (more / less, default more) signals how freely to reach for widgets; on less, use them only when markdown is plainly insufficient.

Quality checklist (before emitting)

  1. Width capped + centered (max-w-* mx-auto, or max-width wrapper for SVG) — not sprawling full-width?
  2. Consistent spacing — one card padding + one gap size, on the 4px scale?
  3. Type hierarchy — clear title vs body vs caption via size/weight/color, ≤2 extra sizes? Numbers tabular-nums?
  4. Aligned — multi-item layouts on a grid with equal gaps, one alignment spine?
  5. Zero hardcoded colors — every color a theme var, looks right light + dark?
  6. One elevation — no cards nested 3 deep; hairline borders over heavy shadows?
  7. Motion (if any) — eased, 150–300ms (or 2–6s ambient), purposeful, reduced-motion-safe?
  8. Drawing a figure? Responsive viewBox + width="100%" (no fixed px), centered, content inside the frame with breathing room, labels legible and correctly centered? Reads clearly at half size on both themes?

© Sidiora-Labs, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in runtime/gideon/extensions/skills/bundled/visual-output of Sidiora-Labs/centra-gideon-agent.

Open the folder on GitHubat commit 2176d5b

Compare with similar skills

Visual Output next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Visual Output compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Visual Output this skillSidiora-Labs/centra-gideon-agent181—~4.2kAutomated safety check: PassApache-2.0
Architecture Mapalmendili/skills3821 repos~2.3kAutomated safety check: PassNone
Previewhanamizuki/solopreneur152—~5.2kAutomated safety check: PassMIT
Show Metellahq/opensession392—~1.6kAutomated safety check: PassMIT
Update Web Assetsgarfiec/Librechat-Mobile112—~1.8kAutomated safety check: NotesMIT
Generative UIhimself65/finance-skills3.4k—~3.1kAutomated safety check: PassMIT

Similar skills

  • Architecture Map

    almendili/skills

    Build or update an interactive isometric map of a repository's architecture — buildings sized by real measurements, neighborhoods by subsystem, animated flows tracing actual call paths, and a drift…

    382 GitHub starsUsed in 1 repo~2.3k tokens
    Frontend & DesignAuto-check passed
  • Preview

    hanamizuki/solopreneur

    Create an interactive HTML preview of any proposal, plan, idea, doc, brief, or spec and land it in the browsable local Preview Library by default (opens under file:// with a catalog sidebar and…

    152 GitHub stars~5.2k tokensUpdated 12 days ago
    Frontend & DesignAuto-check passed
  • Show Me

    tellahq/opensession

    Help the user understand the current topic visually with concise diagrams, code-shape sketches, and focused HTML artifacts.

    392 GitHub stars~1.6k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Update Web Assets

    garfiec/Librechat-Mobile

    Update the third-party JavaScript vendored into the app for the artifact, diagram, and math WebViews (KaTeX, mermaid, marked, highlight.js, Tailwind, Babel, React).

    112 GitHub stars~1.8k tokensUpdated today
    Frontend & DesignAuto-check: notes
  • Generative UI

    himself65/finance-skills

    Design system and templates for Claude's built-in generative UI — the showwidget tool that renders interactive HTML/SVG widgets inline in claude.ai conversations.

    3.4k GitHub stars~3.1k tokensUpdated 3 days ago
    Frontend & DesignAuto-check passed
  • Show Me

    mirumee/nimara-ecommerce

    Help the user understand the current topic visually with concise diagrams, code-shape sketches, and focused HTML artifacts.

    129 GitHub starsUsed in 7 repos~809 tokens
    Frontend & DesignAuto-check passed

More from Sidiora-Labs/centra-gideon-agent

All 24 skills in this repo
  • Artifacts

    Sidiora-Labs/centra-gideon-agent

    Persist, version, and iterate on LLM-generated UI (widgets, HTML, markdown).

    181 GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Best Of N

    Sidiora-Labs/centra-gideon-agent

    Sample several candidate answers in parallel, judge them against stated criteria, and present the winner with the runners-up kept one click away.

    181 GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Document Authoring

    Sidiora-Labs/centra-gideon-agent

    Author a real document — a report, proposal, slide deck, spec, or paper — by settling audience, claim, and structure before drafting prose, then writing to that structure.

    181 GitHub stars~970 tokensUpdated today
    Auto-check passed
  • Editorial Document

    Sidiora-Labs/centra-gideon-agent

    Write long-form editorial documents as clean, semantic HTML saved as an artifact (kind=document) — reports, briefs, explainers, proposals, write-ups.

    181 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Gideon API

    Sidiora-Labs/centra-gideon-agent

    The operator's manual for DRIVING Gideon's API and tools — how to find an exact tool/route signature, the mandatory verify-after-mutate loop, and what NOT to hand-roll.

    181 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Infographic Syntax

    Sidiora-Labs/centra-gideon-agent

    Author infographics with the AntV declarative DSL — pick a template, fill a small indented data tree, and save as an artifact (kind=infographic) that renders to crisp SVG and streams as you write it.

    181 GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Questions about Visual Output

What does Visual Output do?

Emit rich visual output in chat via <widget tags — styled HTML cards, charts, tables, interactive tools, and drawn SVG/canvas diagrams, illustrations, and animations — theme-aware, centered, and…. Visual Output is an agent skill from Sidiora-Labs/centra-gideon-agent. Emit rich visual output in chat via <widget tags — styled HTML cards, charts, tables, interactive tools, and drawn SVG/canvas diagrams, illustrations, and animations — theme-aware, centered, and responsive instead of clashing or cramped.

When should I use Visual Output?

Visual Output fits situations like: tasks that involve Diagrams.

How do I install Visual Output in Claude Code?

Run `npx skills add Sidiora-Labs/centra-gideon-agent --skill visual-output -a claude-code`. Or copy the skill folder (runtime/gideon/extensions/skills/bundled/visual-output in Sidiora-Labs/centra-gideon-agent) into .claude/skills/visual-output in your project. Claude Code loads it when a task matches its description.

How do I install Visual Output in Codex?

Run `npx skills add Sidiora-Labs/centra-gideon-agent --skill visual-output -a codex`. Or copy the skill folder (runtime/gideon/extensions/skills/bundled/visual-output in Sidiora-Labs/centra-gideon-agent) into .agents/skills/visual-output in your project. Codex loads it when a task matches its description.

Can I use Visual Output in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Sidiora-Labs/centra-gideon-agent --skill visual-output -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/visual-output, .gemini/skills/visual-output, .github/skills/visual-output and .opencode/skills/visual-output in your project.

What does Visual Output need to run?

SKILL.md names no scripts, command-line tools or credentials: Visual Output is instructions for the agent only.

Does Visual Output access the network?

SKILL.md names 3 domains. In commands or code: cdn.tailwindcss.com, cdn.jsdelivr.net and cdnjs.cloudflare.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Visual Output safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Visual Output use?

Visual Output is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Visual Output use?

About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Visual Output?

Skills that share tags, products or a category with Visual Output: Architecture Map (almendili/skills, 382 stars), Preview (hanamizuki/solopreneur, 152 stars), Show Me (tellahq/opensession, 392 stars) and Update Web Assets (garfiec/Librechat-Mobile, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Visual Output?

Sidiora-Labs (a GitHub organization) maintains it in Sidiora-Labs/centra-gideon-agent, which has 181 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 8, 2026.

Source: Sidiora-Labs/centra-gideon-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.