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 davidteren/hotwire-codex-skills --skill stimulus-patternsgit clone --depth 1 https://github.com/davidteren/hotwire-codex-skillsWrote 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/davidteren/hotwire-codex-skills/stimulus-patterns)<a href="https://agentmods.dev/skills/davidteren/hotwire-codex-skills/stimulus-patterns"><img src="https://agentmods.dev/badge/skills/davidteren/hotwire-codex-skills/stimulus-patterns/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/davidteren/hotwire-codex-skills/stimulus-patterns"><img src="https://agentmods.dev/badge/skills/davidteren/hotwire-codex-skills/stimulus-patterns.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.00090 | $0.00670 |
| Opus 5 | $0.00045 | $0.00335 |
| Sonnet 5 | $0.00018 | $0.00134 |
| Haiku 4.5 | $0.00009 | $0.00067 |
Grade A, and why
stimulus-patterns 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 8d 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 — 56 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Stimulus patterns
Keep controllers small, Turbo-safe, and driven by the server. Full patterns:
references/stimulus-guide.md (grounded in the Piazza controllers).
When to use
- Adding a Stimulus controller.
- Wiring elements that arrive later (Turbo Stream append, frame load) — use the
xTargetConnectedself-wiring callback instead of re-querying. - Passing data/CSS from the server (Values/Classes API).
- Debugging: a controller that never connects, a
this.fooTargetundefined error, or a listener/timer that double-fires after navigation.
The patterns (and their footguns)
- Small, single-purpose controllers — many tiny ones over one big one.
- Self-wiring via
xTargetConnected(target)— fires per element as each connects, including streamed-in ones (templates/self_wiring_controller.js.tmpl). - Values/Classes API — push config + CSS class names from ERB
(
this.fooValue,this.fooClasses); keep styling in the view. - State machine + delegate — controller toggles DOM state; a plain helper does SDK/transport plumbing and calls back.
- Clone a server
<template>— stamp repeated markup instead of building HTML in JS. - Clean up in
disconnect()— undoaddEventListener(window/document),setInterval, observers, or native UI you rendered, or it leaks and double-fires after Turbo navigation.data-actionlisteners are auto-managed; manual ones aren't.
Start a controller
sed 's/__NAME__/your-name/g' templates/controller.js.tmpl > your_name_controller.js
# or templates/self_wiring_controller.js.tmpl for the streamed-in case
Register it (manifest index.js via bin/rails stimulus:manifest:update, or
stimulus-loading) — an unregistered controller never connects.
Lint
scripts/lint_stimulus.sh path/to/rails-app # or a controllers/ dir
Flags: this.xTarget/xValue/xClass used but not declared in static targets/values/classes (runtime errors); connect() that registers a
listener/timer/observer with no disconnect() (leak/double-fire); a controller
file missing from the index.js manifest (never connects). Heuristic regex scan
(needs ruby); names its ceiling. Verified: clean on all 7 Piazza controllers,
flags a synthetic broken one on every check.
What ships with it
4 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- 8d ago First seen · 56 lines · 90 tokens per session scan A 3aec8712dcf0
stimulus-patterns is a skill published in the GitHub repository davidteren/hotwire-codex-skills (3 stars, last pushed 2mo ago), licensed MIT. It adds 90 tokens to every session and 670 once invoked, about $0.0005 per session on Opus 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-31.
Other skills, from other repositories
create-mobile-app
Use when the user wants to start a new Power Apps mobile app (Expo / React Native / TypeScript, targeting iOS and Android) from scratch.
app-builder
(Preview) Builds and edits a model-driven Power Apps app from a natural-language intent — tables, columns, relationships, adaptive forms with sub-grids, views, Choice-column charts, generative page intents for overview/dashboard surfaces (page .tsx generated in generate-pages after plan approval), and an app module +…
create-site
Creates a new Power Pages code site (SPA) using React, Angular, Vue, or Astro. Guides through the full process from initial concept to deployed site: requirements discovery, scaffolding, component planning, design, implementation, validation, and deployment. Use when the user wants to create, build, or scaffold a new…
genpage
Creates, updates, and deploys Power Apps generative pages for model-driven apps using React v17, TypeScript, and Fluent UI V9. Orchestrates specialist agents for planning, entity creation, and code generation. Use it when user asks to build, retrieve, or update a page in an existing Microsoft Power Apps model-driven…
migrate-bootstrap
Migrates a traditional Power Pages site from Bootstrap 3 to Bootstrap 5. Downloads the site, runs the pac pages bootstrap-migrate engine, reviews the change report, applies AI-assisted fixes for the residual hierarchy/CSS changes the engine only flags, uploads the migrated site (which auto-enables the Bootstrap 5…
canvas-app
Creates or edits a Power Apps Canvas App through the Canvas Authoring MCP coauthoring session. Handles new app generation, direct targeted edits, complex multi-screen changes, responsive layout, per-screen self-QA, and compile-error convergence. Trigger on requests to create, build, generate, modify, update, change…