The moment that made me look at my setup differently
Last week I needed to ship a post. It needed a cover image with the title rendered into it, plus an audio version for the team channel.
I asked my agent. It gave me a completely reasonable answer: use a design tool for the image, find a TTS service for the voiceover, here are some options you might like.
I had a pile of skills installed at that point. It understood my codebase. It matched my writing style. It could not hand me a single file.
Everything I'd installed was on the input side
If you've been watching GitHub trending, you've seen the same wave I have. In the last week of July, three of the top 20 fastest-growing repos were skills:
- graphify — about +4,900 stars that week. Turns your codebase, docs, and PDFs into a queryable knowledge graph. Code parsing runs locally through tree-sitter AST, nothing leaves your machine.
- hallmark — about +4,800. Exists purely to strip AI-slop out of design and copy.
- i-have-adhd — about +3,270. Stops the agent from burying the answer under three paragraphs of preamble.
Plus find-skills sitting north of 60K subscribers, with half the tutorials now opening with "install this one first."
I lined up what I'd actually installed:
| Skill | What it handles | What it produces |
|---|---|---|
| graphify | Reads code, docs, PDFs | Graph data + analysis |
| hallmark | Governs style | Text |
| i-have-adhd | Governs output structure | Text |
| find-skills | Finds other skills | A list |
Every one either helps the agent understand something, or helps it say things better. Both genuinely useful. Both stop at text.
The moment you need an artifact — a PNG, an MP3, an MP4, text lifted out of a screenshot — there's nothing in the toolset. The agent recommending external tools isn't a cop-out. It has no output path.
The ecosystem has been hot for months and the output side is still close to empty.
Bonus: why some skills never seem to fire
This one bugged me for a while, and the Claude Code docs answer it directly (as of July 2026):
When the agent starts a session, it builds a manifest of every available skill along with its description, then uses the
descriptionfield to decide whether any skill matches the request.
Two things fall out of that:
1. description is a routing key, not a docstring. The agent isn't reading through your skill files inferring intent — it's matching against descriptions. Skills whose descriptions spell out trigger scenarios and keywords get picked far more reliably. If you write your own skills, that field earns more attention than the body.
2. The manifest is built at session start. Anything installed mid-conversation may be invisible for the rest of it. Restart the session after installing — that's not superstition, it's how the manifest works.
Also worth knowing: Claude Code skills follow the Agent Skills open standard, which applies across multiple AI tools. The mental model transfers when you switch harnesses.
Filling the gap
Alibaba's Model Studio team maintains a skills repo (modelstudioai/skills, Apache-2.0) covering exactly the output side — image, speech, video, vision — all on top of one CLI called bl.
Same install motion you already know:
npx skills add modelstudioai/skills
npx skills add modelstudioai/cli --all -g
Node.js 18+, plus an API key (grab one here, or read the CLI install docs). Restart the session afterward — see above.
What changes: you stop memorizing commands. You describe the outcome, the agent assembles the call.
Cover image with the title rendered in
bl image generate --prompt "Clean technical article cover, dark background, crisp title text centered in frame, smaller subtitle beneath, faint geometric lines and terminal window motifs, flat design, no clutter" --size 16:9 --model qwen-image-2.0-pro --watermark false --out-dir ./covers
Both the title and subtitle landed correctly in the composition, and the terminal motifs showed up as asked. Text is part of the image — no second pass to overlay it.
A behavior worth knowing about: --size accepts a ratio (16:9) or pixels joined by an asterisk (1280*720). Write it the habitual way as 1280x720 and the CLI does not complain locally — run --dry-run --output json and you'll see "size": "1280x720" sitting in the request body, forwarded as-is. If you're scripting this, normalize upstream. Also --watermark defaults to true, so clean output needs it set explicitly.
Text to speech
bl speech synthesize --list-voices --model cosyvoice-v3-flash
bl speech synthesize --text-file ./intro.txt --voice longxiaochun_v3 --rate 0.9 --out ./intro.mp3
You can't invent a voice name — run --list-voices first. The default model returns a couple dozen voices as IDs plus a one-line style note (longxiaochun_v3, longcheng_v3, longtian_v3, …), all bilingual EN/ZH.
Speech rate is --rate (0.5–2.0), not --speed — which is the flag everyone reaches for first, myself included.
Reading a screenshot
bl vision describe --image ./error-screenshot.png --prompt "Transcribe the error message and key stack frames verbatim"
The command is bl vision describe — vision is the group, describe is the subcommand. Local paths work directly; upload happens inside the command.
Video, and one gotcha
bl video generate is async. Pair it with bl video task get and bl video download --task-id <id> --out <path>. Note that --poll-interval defaults differ per command — 5 seconds for video generate, 15 for video edit and video ref. Don't copy one polling value across all of them.
The money part
Output-side calls cost money, and here's the part worth sitting with: the agent decides how many calls to make. Ask for three candidate covers and that's three billable calls. That's a different mental model from text-only skills.
Set the guardrail before you start playing:
bl usage freetier --all # auto-stop when free quota runs out
bl usage free --expiring 30 # console command — run `bl auth login --console` first
bl usage stats --days 30
Two things to verify rather than assume:
- Free tier is not permanent. Validity windows, per-model allocation, and regional eligibility all have specific rules — check the official quota page for your account's region. Third-party "free tier roundup" posts get this wrong often enough that they're not worth trusting.
- Quota does not fail over. When one model's allocation is exhausted, nothing routes you to a model that still has budget. You change the model parameter yourself.
Who this is for
Worth it if you're already installing skills and regularly need the agent to produce files — covers, voiceovers, demo clips, text out of screenshots. The flow stays in one place, no shuttling assets between tools.
Skip it if your work lives entirely in code and prose. It'll sit unused and still consume manifest context.
Different tool if you need precise composition control or batch-consistent style — a local ComfyUI node graph wins there, at the cost of a GPU and a workflow to maintain. Not the same problem.
One genuinely useful side note: that repo also maintains a curated index of third-party skills tracked from Anthropic, Vercel, Google Labs and others, flagged for whether the team actually verified them working, grouped into skill management, code, design, docs, video, and testing. If you're in the hunting phase, that list saves time on its own.
Console's here if you want to poke at it.
Closing
The thing this skill wave makes easy to miss: an agent's ceiling is the ceiling of the tools in its hands.
graphify gives it eyes for code structure. hallmark gives it taste. The output side lets it actually hand you the thing. None of them compete — you fill whichever gap is costing you.
Asking for a cover and a voiceover no longer gets me a list of tool recommendations.
Anyone else run into the "installed but never fires" thing? Curious whether the description-matching explanation matches what you've seen.
Top comments (0)