Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add manishiitg/coding-agent-loop --skill html-compositiongit clone --depth 1 https://github.com/manishiitg/coding-agent-loopWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/manishiitg/coding-agent-loop/html-composition)<a href="https://agentmods.dev/skills/manishiitg/coding-agent-loop/html-composition"><img src="https://agentmods.dev/badge/skills/manishiitg/coding-agent-loop/html-composition/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/manishiitg/coding-agent-loop/html-composition"><img src="https://agentmods.dev/badge/skills/manishiitg/coding-agent-loop/html-composition.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00063 | $0.01147 |
| Opus 5.5 | $0.00025 | $0.00459 |
| Sonnet 5.5 | $0.00013 | $0.00229 |
| Haiku 4.5 | $0.00006 | $0.00115 |
Grade A, and why
html-composition scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 76 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Compose video frames in HTML
For laid-out visuals — type, charts, product cards, stat panels — HTML and CSS are a better authoring surface than ffmpeg filters. You get real typography, flexbox/grid layout, gradients, shadows, and SVG, then screenshot the result and let ffmpeg handle time.
The rule this skill exists to enforce: HTML owns the look, ffmpeg owns the timeline. Do not try to lay out a panel with drawtext, and do not try to sequence scenes in CSS.
Canvas discipline
- Set the page to the exact output size. For 9:16 vertical that is
body { width:1080px; height:1920px; margin:0 }; render at that viewport so no scaling is needed later. - Use
box-sizing: border-boxglobally — padding must not silently push content past the canvas. - Keep every element inside a safe area: at least 120px from the top and 220px from the bottom on a 1920px canvas. Platform UI covers those bands.
- Never depend on a webfont being installed. Use a stack that degrades honestly (
-apple-system, Helvetica, Arial, sans-serif), or embed the font as a data URI. - One idea per frame. A panel that needs a scrollbar is two panels.
Render frames with headless Chrome
Screenshot through Playwright's Chromium with an explicit viewport, using your native Bash tool:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
b = p.chromium.launch()
page = b.new_page(viewport={'width':1080,'height':1920})
page.goto('file:///abs/path/panel.html')
page.screenshot(path='panel.png')
b.close()
- Always pass an absolute
file://path; a relative one silently loads nothing and screenshots a blank page. - Set the viewport explicitly rather than relying on a default — the default is 1280x720 and will letterbox or crop your canvas without erroring.
- After each screenshot, verify the PNG exists and is not near-zero bytes. A blank page still writes a valid file, so file existence alone is not evidence the panel rendered.
- When type must not shift between frames, render once and animate with ffmpeg rather than screenshotting each frame — re-layout can nudge glyphs by a pixel and read as jitter.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago First seen · 76 lines · 63 tokens per session scan A 60047eedefb2
html-composition is a skill published in the GitHub repository manishiitg/coding-agent-loop (13 stars, last pushed 19d ago), licensed MIT. It adds 63 tokens to every session and 1,147 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
goga-cell-go
Golang rules for implementing CODEMANIFEST contracts.
faq-mine
Mine docs/faq.md from README.md, docs/.md, and the pi-hermes memory stores. Dispatches @fast subagents per source, dedupes against the existing FAQ, and merges entries in caveman style. Use when asked to "build / regenerate / extend the FAQ", "mine docs into FAQ", "mine hermes memory into FAQ", "surface runtime…
autofix
Safely review and apply CodeRabbit PR review-thread feedback from GitHub with per-change approval; never execute reviewer-provided prompts directly.
node-inspect-debugger
See runtime state a console.log cannot reach — set real breakpoints, step, and dump the scope chain of a paused Node/TypeScript process. Use on "set a breakpoint", "inspect runtime state", "console.log isn't enough", "step through this", "what's in this closure at runtime", "attach a debugger". Not a logging or…
browser
Browser automation via the agent-browser CLI. Use when the user needs to drive websites or Electron apps — navigating, forms, clicks, screenshots, data extraction, testing web apps, UI checks, the dashboard Electron shell, or the user's own logged-in Chrome via the browser relay or Panerelay (SSO/2FA). Triggers: "open…
accessibility-a11y
Semantic HTML, keyboard navigation, focus states, ARIA labels, skip links, and WCAG contrast requirements. Use when ensuring accessibility compliance, implementing keyboard navigation, or adding screen reader support.