visuals skill
Make the images that go with content — a feed-accurate preview card of a draft (LinkedIn or X, fold marked) so the user reviews the real thing, a simple chart from the user's own numbers, a PDF carousel for LinkedIn documents, a screenshot of a source, or an image via any image-generation MCP the user has. Use when the user asks "show me how it will look", "make a visual for this", "turn these numbers into a chart", "make a carousel", or when write hands over a draft (a preview is always attached).
- GitHub stars
- 6
- Files
- 1
- Last commit
- Nov 10, 2026
- License
- MIT
- Allowed tools
- —
What does the visuals skill do?
visuals is an agent skill. Make the images that go with content — a feed-accurate preview card of a draft (LinkedIn or X, fold marked) so the user reviews the real thing, a simple chart from the user's own numbers, a PDF carousel for LinkedIn documents, a screenshot of a source, or an image via any image-generation MCP the user has. Use when the user asks "show me how it will look", "make a visual for this", "turn these numbers into a chart", "make a carousel", or when write hands over a draft (a preview is always attached).
How to install the visuals skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the visuals skill in Plugin
/plugin marketplace add Harmix/open-stanley /plugin install open-stanley@open-stanley
Install the visuals skill in Claude Code
~/.claude/skills/visuals/SKILL.md
$ npx degit Harmix/open-stanley/open-stanley/skills/visuals ~/.claude/skills/visualsInstall the visuals skill in Claude Code (project)
.claude/skills/visuals/SKILL.md
$ npx degit Harmix/open-stanley/open-stanley/skills/visuals .claude/skills/visualsInstall the visuals skill in Codex
~/.agents/skills/visuals/SKILL.md
$ npx degit Harmix/open-stanley/open-stanley/skills/visuals ~/.agents/skills/visualsInstall the visuals skill in Gemini CLI
~/.gemini/skills/visuals/SKILL.md
$ npx degit Harmix/open-stanley/open-stanley/skills/visuals ~/.gemini/skills/visualsInstall the visuals skill in Claude.ai
npx degit Harmix/open-stanley/open-stanley/skills/visuals visuals && zip -r visuals.zip visuals # claude.ai → Customize → Skills → + → Create skill → Upload a skill → visuals.zip
SKILL.md
View on GitHubVisuals
What the paid product actually does for visuals, from a month of its messages: it renders every draft as a feed mockup card (that is the "Edit this draft" image), it sends a daily stat card ("Today, 131 saw my content and 2 reacted"), an orbit graph of engagers, and static mascot illustrations for rituals. It does not generate post imagery. Everything it does here is reproducible; a few things can be done better.
1. Preview cards (always)
skills/stanley/scripts/stanley-preview <draft> --platform linkedin|x --out drafts/<slug>.png --name "…" --headline "…" --handle … [--avatar path]
Renders the post as it will appear, with the LinkedIn "…more" fold marked at ~210 characters and per-tweet counts for X threads (over-limit tweets in red). Attach the PNG whenever you hand over a draft; the fold line is what makes people fix the hook. If Playwright isn't available, the script writes the HTML next to the PNG path; open it with a browser tool and screenshot it.
2. Charts from the user's numbers
Only from receipts in stories/ or ledger/. For a chart the reader will see on a phone: one series, a title that states the claim ("Overlap in our top-5 picks: 2.0/5 in the status sync, 3.0/5 in the R&D review"), no legend if one series, axis labels with units, 1200×675 or 1080×1080. Use skills/stanley/scripts/stanley-chart <csv> --kind treemap|bars --title … --unit … --source … for a ranking or a part-to-whole (it renders HTML + PNG, strips metadata, no image model); matplotlib via a scripts/ call for anything else (the dataviz skill in Claude sets palette and marks; follow it when present). Never chart a number the post doesn't state. Fill the frame: title, legend when there are two series, and the bars or lines use the whole 1200×675; a chart with a small plot in a field of white reads as a placeholder on a phone. The user rejected one for exactly that.
3. Documents (LinkedIn carousels)
When a story is a how-to or a list of steps with a result, a native document (PDF, 5–10 pages, one idea per page, 1080×1350) outperforms text on engagement rate. Build with the pdf skill or a headless-browser render of simple HTML pages; the first page is the hook, the last page is the claim, no CTA page. Keep the post text short and let the document carry the steps.
4. Screenshots as evidence
A screenshot of the source (the dashboard number, the email, the paper's abstract with date visible) is the strongest specificity move in the creators studied (Zaremba posts his own inbox). Take it with the browser tool, crop to the fact, redact anything under the user's private line (my-human.md), save to drafts/<slug>.assets/.
5. Generated imagery
Not by default, and only when the user asks for it in this session. Image-model output reads as AI in the 2026 feeds the same way generic AI text does, and LinkedIn labels C2PA-signed generated images. The default image for a post is a real photo the user has (inbox/) or an HTML-rendered card from stanley-preview (a screenshot of a source, a chart from their numbers). Before attaching any image the user did not make themselves this session, check its metadata for a generation marker (C2PA/JUMBF manifest, IPTC DigitalSourceType of trainedAlgorithmicMedia: exiftool -a -G1 <file> | grep -i -E 'c2pa|jumbf|DigitalSourceType') and say so if one is present. Every image the plugin itself renders (preview cards, charts) must go through stanley-vault image-clean before upload when it was rendered anywhere but the user's own machine: cloud sandboxes stamp PNGs with a C2PA manifest and LinkedIn labels the post "Content credentials". stanley-preview strips its own output; charts made with matplotlib or a browser screenshot do not, so clean them.
6. Recap and orbit cards (optional)
For users who like the daily card: stanley-preview HTML templates can be extended (scripts/ accepts a --template in a future version). The plugin's default recap is text; a card is decoration.
Rules
- No stock imagery, no text-heavy quote cards, no image-model output unless the user asked for it this session.
- Every visual maps to a receipt or to the draft itself.
- Save assets next to the draft so
publishattaches the right file.
Files in this skill
1visuals skill questions
How do I install the visuals skill in Claude Code?
Run npx degit Harmix/open-stanley/open-stanley/skills/visuals ~/.claude/skills/visuals. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the visuals skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.