visuals-skills
INTRO 01 / 12

visuals-skills01

Three skills for turning content into something you can show

A self-contained HTML deck or dashboard, a vertical scroll deck built from a Markdown report, or an Excalidraw architecture diagram. Packaged as a single plugin named visuals.

SKILLS 3

visualize, md-to-scrolldeck, excalidraw-diagram.

HARNESSES 6

Claude Code, Codex, Kimi, Gemini / Antigravity, Hermes, OpenCode.

PLUGIN 1

One flat repo, manifests at the root, skills in ./skills/.

The three skills

What ships02

Three deliverables, three skills

Each one writes exactly one output file per run and reports a file:// path — never the generated markup.

/visuals:visualize visualize

Writes one self-contained HTML file — deck, dashboard, infographic, poster, flowchart, timeline, carousel. Starts from a fixed skeleton and a design system, never from a blank page. The general-purpose default.

/visuals:md-to-scrolldeck md-to-scrolldeck

Compresses one Markdown document into a vertical scroll-snap deck for leadership review: progress bar, phase header, dot rail, arrow-key nav, print-ready. Prints its slide outline before writing anything.

/visuals:excalidraw-diagram excalidraw-diagram

Generates .excalidraw JSON that argues visually rather than labelling boxes, renders it to PNG, looks at the render, and fixes it against a 27-item checklist before delivering.

How to choose

The boundary03

Pick by deliverable, not by topic

The three skills overlap on subject matter and never on output format. That is the whole routing rule.

IF THE OUTPUT IS an .excalidraw file

excalidraw-diagram

IF THE INPUT IS MARKDOWN AND
THE OUTPUT A VERTICAL SCROLL DECK
a scrollytelling deck

md-to-scrolldeck

EVERYTHING ELSE VISUAL anything else

visualize

Each SKILL.md ends with a Related Skills section stating that boundary — all three stay in sync when one changes.
Installing

Install04

Six harnesses, one line each

Antigravity shares ~/.gemini, so it inherits the Gemini install.

CLAUDE CODE /plugin

/plugin marketplace add dEitY719/visuals-skills
/plugin install visuals@visuals-skills

CODEX codex plugin

codex plugin install dEitY719/visuals-skills

KIMI CLI kimi plugin

kimi plugin install dEitY719/visuals-skills

HERMES AGENT hermes plugins

hermes plugins install dEitY719/visuals-skills

GEMINI CLI / ANTIGRAVITY gemini extensions

gemini extensions install https://github.com/dEitY719/visuals-skills

OPENCODE / SHELL npx skills

npx skills add https://github.com/dEitY719/visuals-skills
OpenCode has its own .opencode/INSTALL.md.

What actually works

Harness support05

Written for Claude Code, portable by design

The skills read files, write one output file, and run a shell command. Very little of that is Claude-Code-specific.

Skill Claude Code Codex Kimi Gemini / Antigravity Hermes OpenCode
visualize full full full full full full
md-to-scrolldeck full full full full full full
excalidraw-diagram full image read-back image read-back image read-back image read-back image read-back
The per-harness tool mappings live in the sibling repo dEitY719/harness-skills — one file per harness, not fifteen copies.
The one gap

Degraded, not broken06

When a harness cannot look at its own output

Step 5 of excalidraw-diagram renders the diagram to PNG and then reads the image back to catch overlapping text and misaligned arrows.

STILL PRODUCED The files

A harness without image read-back still writes the .excalidraw and renders the PNG.

MUST BE REPORTED The skipped audit

It reports the visual audit as skipped — never as 27 of 27 quality items passed.

ALSO REQUIRED uv + Playwright

That step needs uv and a Playwright Chromium on the machine.

HEADLESS No auto-open

xdg-open and open are no-ops in a headless session; the skills report the file:// path instead.

Repo layout

Layout07

Manifests at the root, one flat skills tree

Seven harness manifests, all pointing at the same ./skills/ directory.

.
├── skills/{visualize,md-to-scrolldeck,excalidraw-diagram}/
│   ├── SKILL.md
│   ├── references/
│   └── examples/ · evals/
├── docs/                                        GitHub Pages guides + samples
├── .claude-plugin/{marketplace,plugin}.json     Claude Code
├── .codex-plugin/plugin.json                    Codex
├── .kimi-plugin/plugin.json                     Kimi CLI
├── .hermes-plugin/{plugin.yaml,__init__.py}     Hermes Agent
├── .opencode/plugins/visuals.js + INSTALL.md    OpenCode
├── .agents/plugins/marketplace.json             Antigravity
├── gemini-extension.json + GEMINI.md            Gemini CLI
├── package.json
├── CLAUDE.md · AGENTS.md -> CLAUDE.md
└── LICENSE
Why flat

The decision08

Nesting would have made this Claude-Code-only

The repo shipped a nested plugins/<name>/skills/ layout through v0.4.0. It is gone.

Only Claude Code understands the nested layout. The other five harnesses resolve manifests at the repo root and a skills tree at ./skills/ — so nesting would have silently cut this plugin down to one harness.
ENFORCED CI fails if plugins/ exists

The flat layout is a checked invariant, not a convention.

PRE-PROVISIONED .kimi-plugin/

Kimi CLI is not installed on the maintainer's machines yet. Shipping the manifest now costs nothing and saves a migration later.

CI

CI09

The one repo that does not call the shared workflow

Every other dEitY719/*-skills repo validates through harness-skills/.github/workflows/skill-check.yml. This one inlines everything on purpose.

VALIDATE.YML CHECKS Nine invariants

Manifests, skill frontmatter, progressive-disclosure line limits, the Codex description budget, version agreement across all seven version-bearing manifests, plugin-name consistency, the AGENTS.md symlink, the flat layout, and shell scripts.

THE INCOMPATIBILITY No emojis in tracked text

The shared workflow includes that check. This repo's visualize skill ships example HTML — posters, decks, infographics — using emoji as intentional design glyphs in the rendered artwork. Fifteen tracked files carry them.

The way back

Tracked work10

Converting back is gated on one boolean

Until then, a check added to the shared workflow must be mirrored here by hand.

STEP 1 · UPSTREAM Add the input

skill-check.yml grows a check-emojis boolean input (required: false, default: true) guarding its emoji step.

STEP 2 · HERE Become a uses: call

Once that ships on @main, validate.yml collapses to a call passing plugin-name: visuals and check-emojis: false.

TRACKING harness-skills#2

Filed against the sibling repo that owns the shared workflow.

Where these came from

Provenance11

Extracted as a snapshot, credited in the manifest

Lifted from dEitY719/dotfiles (claude/skills/devx-*) as a content snapshot — no history rewriting. The source SHA is recorded in the conversion commit.

ORIGINAL AUTHOR visualize

careerhackeralex

ORIGINAL AUTHOR excalidraw-diagram

coleam00

ORIGINAL AUTHOR md-to-scrolldeck

dEitY719

The devx- prefix is dropped here because the plugin namespace (visuals:) now supplies it. This is Phase 1 of the dotfiles #1410 migration.
Get started

Start12

Add the marketplace, install the plugin

MIT licensed. See LICENSE.

/plugin marketplace add dEitY719/visuals-skills
/plugin install visuals@visuals-skills
Then point any of the three at your content — /visuals:visualize, /visuals:md-to-scrolldeck, or /visuals:excalidraw-diagram.