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 codecast-sh/codecast --skill cast-modgit clone --depth 1 https://github.com/codecast-sh/codecastWrote 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/codecast-sh/codecast/cast-mod)<a href="https://agentmods.dev/skills/codecast-sh/codecast/cast-mod"><img src="https://agentmods.dev/badge/skills/codecast-sh/codecast/cast-mod/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/codecast-sh/codecast/cast-mod"><img src="https://agentmods.dev/badge/skills/codecast-sh/codecast/cast-mod.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.00092 | $0.01776 |
| Opus 5.5 | $0.00037 | $0.00710 |
| Sonnet 5.5 | $0.00018 | $0.00355 |
| Haiku 4.5 | $0.00009 | $0.00178 |
Grade A, and why
cast-mod 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 today.
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 — 113 lines — stays where its author put it; the contents beside it link to each section on GitHub.
A mod is a folder: codecast-mod.json (what it adds and what it may touch) and
ui.tsx exporting register(on). It runs in a sandboxed frame inside the
person's codecast app on every device, reads codecast's data from their local
store, and returns element trees that codecast draws with its own components.
The whole API, every event and every element is typed in codecast-mod.d.ts,
which cast mod new writes beside the code: read it before writing, it is the
reference.
The loop: build it with the person watching
cast mod new <name> # a working scaffold: a pane, a command and a fence
cd <name>
cast mod build # bundle, typecheck, check the code against the grants
cast mod push # live in their app within seconds; prints the pane's link
cast mod logs <name> # what it printed and threw while drawing
cast browser open "$(cast mod open <name>)" # look at it yourself
Put the pane's link alone on its own line in your reply. It renders as the
running pane inside the conversation, and each later push redraws it there
(the header's rev ticks), so the person watches the mod take shape in the
thread instead of switching windows. A fence shows the same way: write an
example block in your reply. Work in small pushes: get something real on
screen first, then ask what to change. Look before you claim it works: a
render that throws shows its error in place of the surface and in
cast mod logs, so a blank or broken pane always has a reason you can read.
cast mod publish -m "<note>" makes a numbered version with its source once
it is right.
Writing it well
- Ask for the least the mod needs.
permissions.readlists the collections it reads,permissions.writethe writes it makes,permissions.fetchthe origins it calls.cast mod buildrefuses code that reaches past its grants and names the grant. - See the rows a mod would get before writing against them:
cast browser eval "__modHost.query('sessions', { limit: 3 })"on any open codecast page answers exactly what$.data.listanswers. - Read with
$.data.list(collection, { where, sort, limit, fields }). It answers from the local store instantly, and the surface redraws by itself when those answers change, so a pane is live with no polling. Session rows carry a derivedstate(working, needs_input, done, dormant, idle) andproject. - Draw with the elements, not raw HTML: they follow the person's theme, draw on
every device and keep codecast's look.
Refturns any codecast id into the live pill messages use;Table,Stat,Chart,MarkdownandCardcarry most views. - Keep a mod's own values in
$.state(they survive reloads and redraw the mod), not in module variables. - Start from the nouns. When the mod is about things the person names and
follows (contacts, bugs, incidents, experiments, customers), make them an
object kind under
objects: a prefix, statuses and typed fields, before any view. Every object gets a<prefix>-<n>short id that reads as a live reference wherever codecast renders text, the same way a task does: its title inline, a hover card built from its status and fields, and a caret that opens its page right under the line. It also gets a list at/objects/<prefix>, a page at/o/<id>andcast objverbs, with no code of yours. Put the rich view on that page (on("ui.render", { object: "<prefix>" })), so it shows wherever the object is expanded. Choose fields that make a useful preview: the hover card shows the first few filled ones. Read them with$.data.list("objects", { where: { prefix } })and write with$.objects. AGENTS.mdbeside the manifest is the mod's surface for agents, the way a pane is its surface for people: every session the mod applies to starts with it (a team's mod in that team's projects, a personal mod everywhere), and it ships, versions and publishes with the rest. Write it for an agent that has never seen the mod: what the mod adds, and when to reach for each part. For an object kind, that means mentioning an object by its short id in prose (and filing one withcast obj createwhen a conversation turns up a new one), not drawing a card for it. Keep it current as the mod grows.- A fence is for a view that is not one object: a comparison, a live query, a
chart of many. Declare it, draw it in
on("ui.render", { fence }), and any agent's ``` block renders that way for everyone who has the mod. - The elements already look like codecast, and a fence already sits in the
frame every rich block in a message wears (a title strip, copy, fullscreen,
a fold for tall blocks). Compose plainly and leave out colors, sizes and
spacing unless the view needs them. A fence that returns one
Cardis the block: its title and actions move into the strip.e.surfacesays where a render lands (fence, pane, object, sidebar) when one tree should adapt. - When the props fall short, every layout element,
Card,TextandHeadingtakesstyle: box and type properties freely, colors only from the theme's--sol-*variables. For a view the elements cannot express,Canvastakes your own HTML and stays interactive throughdata-pressanddata-changenames wired to itsonhandlers. - To restyle the app, declare
themes: an id, a title, and alightand/ordarkpalette of hex values per token (bg,bg-alt,card,border,text,text-muted,text-dim,link, the nine accents) plusfont-uiandfont-monostacks. The person picks it in Settings > Appearance, and it recolors every surface, Tailwind's color scales included. A theme is data only: there is no CSS hook, so it survives every change to the app.
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.
- today Changed · +4 lines 738d02aba5dc
- 2d ago Changed · +27 lines · +3 tokens per session 7f9f2313b3bc
- 10d ago First seen · 82 lines · 89 tokens per session scan A 6e3473747358
cast-mod is a skill published in the GitHub repository codecast-sh/codecast (40 stars, last pushed today), licensed MIT. It adds 92 tokens to every session and 1,776 once invoked, about $0.0004 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-10-06.
Other skills, from other repositories
google-agents-cli-scaffold
This skill should be used when the user wants to "create an agent project", "start a new ADK project", "build me a new agent", "add CI/CD to my project", "add deployment", "enhance my project", or "upgrade my project". Part of the agents-cli skills suite. Covers agents-cli scaffold create, scaffold enhance, and…
adk-go-self-review
Review an ADK Go change the way a maintainer will — a fresh-context pass over the whole diff, five lenses (correctness and tests, scope, simplicity, style, adk-python parity), and the mutation check that proves your tests pin the change. Use before opening a PR, before any later push that changes code, and when asked…
grocery-prices
A skill to calculate grocery prices with country-specific taxes.
honey-px
Read huge read-only text as PNG pages; big input cut.
honey-memory
Per-project persistent memory files indexed in MEMORY.md.
debate
Weigh one risky change against a named alternative through an advocate, a skeptic, and a neutral investigator, then recommend.