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 agentmods add skills/saadrahman01/claude-moodle-dev/moodle-amd-javascriptnpx skills add SaadRahman01/claude-moodle-dev --skill moodle-amd-javascriptgit clone --depth 1 https://github.com/SaadRahman01/claude-moodle-devWrote 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/saadrahman01/claude-moodle-dev/moodle-amd-javascript)<a href="https://agentmods.dev/skills/saadrahman01/claude-moodle-dev/moodle-amd-javascript"><img src="https://agentmods.dev/badge/skills/saadrahman01/claude-moodle-dev/moodle-amd-javascript.svg" alt="Measured on agentmods" 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 | $0.00056 | $0.02076 |
| Opus 5 | $0.00028 | $0.01038 |
| Sonnet 5 | $0.00011 | $0.00415 |
| Haiku 4.5 | $0.00006 | $0.00208 |
Grade A, and why
moodle-amd-javascript 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 4d 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 — 252 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Moodle AMD JavaScript
Overview
Moodle uses AMD (RequireJS) for browser JS. Source goes in <plugin>/amd/src/*.js (ES6+), built into minified AMD in amd/build/*.min.js via grunt. Never edit amd/build/ directly. Modules import Moodle core helpers via string IDs (core/ajax, core/str, core/templates).
When to Use
- Adding interactive JS to a plugin
- Calling a web service from the browser (
core/ajax) - Rendering a Mustache template client-side
- Showing a modal, notification, or toast
- Building a custom AMD module + grunt config
- Debugging "module not found" / "build out of date" warnings
Skip when: writing pure backend PHP — use moodle-plugin-development.
File layout
<plugin>/
amd/
src/
foo.js # ES6 source — edit this
bar.js
build/ # generated; commit but never hand-edit
foo.min.js
foo.min.js.map
Module ID at runtime = <component>/<filename> (no extension):
local/example/amd/src/marker.js→local_example/markermod/quiz/amd/src/preflight.js→mod_quiz/preflight
Module skeleton
// amd/src/marker.js
import Ajax from 'core/ajax';
import Notification from 'core/notification';
import {get_string as getString} from 'core/str';
import Templates from 'core/templates';
const SELECTORS = {
BUTTON: '[data-action="mark-present"]',
ROW: '[data-region="attendance-row"]',
};
/**
* Initialise: bind click handlers.
*
* @param {number} sessionid
*/
export const init = (sessionid) => {
document.addEventListener('click', async (e) => {
const btn = e.target.closest(SELECTORS.BUTTON);
if (!btn) {
return;
}
e.preventDefault();
const userid = parseInt(btn.dataset.userid, 10);
try {
const result = await markPresent(sessionid, userid);
const html = await Templates.render('local_example/row', result);
const row = btn.closest(SELECTORS.ROW);
Templates.replaceNode(row, html, '');
} catch (err) {
Notification.exception(err);
}
});
};
const markPresent = (sessionid, userid) => {
const request = Ajax.call([{
methodname: 'local_example_mark_present',
args: {sessionid, userid},
}]);
return request[0];
};
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.
- 4d ago First seen · 252 lines · 56 tokens per session scan A a17c6ed7dc78
moodle-amd-javascript is a skill published in the GitHub repository SaadRahman01/claude-moodle-dev (35 stars, last pushed 2mo ago), licensed MIT. It adds 56 tokens to every session and 2,076 once invoked, about $0.0003 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-30.
Other skills, from other repositories
emil-design-eng
This skill encodes Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great.
humanizer
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague…
apple-design
Apple's approach to interface design and fluid, physical motion, translated for the web. Use when building or reviewing gesture-driven UI, spring animations, drag/swipe/sheet interactions, momentum and interruptible transitions, translucent materials and depth, typography (optical sizing, tracking, leading)…
add-landing-template
Add a new org landing-page template to the ClassroomIO monorepo. Use when the user asks to "create/add a new landing template", "add a new template like X to the org landing pages", "build a new theme for the org landing page", or hands over a design reference (image, URL, prototype) for a new landing visual style.
animation-vocabulary
Reverse-lookup glossary that turns a vague description of a web animation or motion effect into its exact term ("the bouncy thing when a popover opens" → Pop in; "the iOS rubber-band scroll" → Rubber-banding). Use when the user asks "what's it called when…", or describes a motion effect without knowing its name and…
prototype
Build multiple genuinely different versions of a UI piece you describe, rendered behind a visual picker so you can flip through them live and promote the one that feels right. Only runs when explicitly invoked; it does not trigger on its own.