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 mcasillas17/mexican-mom --skill ya-te-lavaste-las-manosgit clone --depth 1 https://github.com/mcasillas17/mexican-momWrote 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/mcasillas17/mexican-mom/ya-te-lavaste-las-manos)<a href="https://agentmods.dev/skills/mcasillas17/mexican-mom/ya-te-lavaste-las-manos"><img src="https://agentmods.dev/badge/skills/mcasillas17/mexican-mom/ya-te-lavaste-las-manos/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/mcasillas17/mexican-mom/ya-te-lavaste-las-manos"><img src="https://agentmods.dev/badge/skills/mcasillas17/mexican-mom/ya-te-lavaste-las-manos.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.00077 | $0.01427 |
| Opus 5 | $0.00039 | $0.00714 |
| Sonnet 5 | $0.00015 | $0.00285 |
| Haiku 4.5 | $0.00008 | $0.00143 |
Grade A, and why
ya-te-lavaste-las-manos 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 12d 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 — 96 lines — stays where its author put it; the contents beside it link to each section on GitHub.
¿Ya te lavaste las manos?
It does not matter that the data looks fine. You do not know where it has been.
Rule
Data from outside this process is dirty until it is validated at the trust boundary, and it stays dangerous at every sink it reaches. So you do both, always: validate at the boundary — allowlist shape, type, range, length — and encode or parameterize at the sink. Never build SQL, shell commands, HTML, templates, or filesystem paths by string interpolation. "It was validated upstream" is not a defense; upstream is not this line.
Procedure
Run steps 1–6 in order for the change in front of you.
- List every untrusted entry point it touches. HTTP body, query string, path segment, header, cookie; CLI argument; environment variable; file or upload contents; message-queue or webhook payload; third-party API response; LLM output; any deserialized blob. If a value did not originate in this codebase, it is on the list.
- Trace each entry point to every sink it reaches. Follow it through helpers, framework middleware, and stored state — data written to a database today is untrusted again when it is read back and rendered tomorrow. Name the sinks; do not assume the path is short.
- Validate at the boundary. Parse into a typed value once, against an allowlist: permitted shape, type, enum members, numeric range, maximum length. Reject what does not match — do not strip, escape, or "clean" it into acceptance. Rejection is loud and specific; the error names the field, never the value.
- Neutralize at the sink. Find each sink in the table and apply its row.
| Sink | Required form |
|---|---|
| SQL / any query language | Parameterized query with bound placeholders. Never concatenation, f-strings, or format. Identifiers and sort columns come from an allowlist map, not from input |
| Shell, subprocess, exec | Argument array with the shell disabled (shell=False, execFile). Never a composed command string, never shell=True "just for the pipe" |
| HTML, attributes, JS, CSS, URLs | Context-correct escaping by the templating layer, autoescape on. Never innerHTML, dangerouslySetInnerHTML, or |safe on untrusted data |
| Template engine | Render a fixed template with data passed as parameters. Never build the template string from input — that is code execution, not rendering |
| Filesystem path | Join, resolve to an absolute path, then confirm the result is still inside the intended root. Reject .., absolute inputs, and symlinks that escape |
| Deserializer | JSON parsed against a strict schema. Never pickle, never yaml.load without a safe loader, never eval, never a reviver that instantiates types named by input |
| Outbound HTTP (SSRF) | Allowlist scheme and host, resolve the name and reject loopback, link-local, and private ranges, and do not follow redirects blindly |
| LLM output | Treat as data, always. Validate against a schema, then send it through this same table before it reaches any other sink. Never exec, never eval, never a query |
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.
- 12d ago First seen · 96 lines · 77 tokens per session scan A 535cd2fe5448
ya-te-lavaste-las-manos is a skill published in the GitHub repository mcasillas17/mexican-mom (2 stars, last pushed 1mo ago), licensed MIT. It adds 77 tokens to every session and 1,427 once invoked, about $0.0004 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
cco-tools
Show what tools actually cost in tokens — learned per-tool averages from observed results, replacing the hardcoded MCP/Agent guesses.
cco-clean
Clean up old tracking data and reset statistics.
stuck
Diagnoses a broken course setup by reading the folder, so the student never has to describe the problem in English. Takes no argument. Reports which class they are on and which files are filled, then names one blocker and one fix: Claude Code opened at the wrong level, .claude/skills/ missing, skills not loading…
magic-compact
Compact this Claude Code session.
sre-bot
Answer questions about production health and investigate incidents using live Kubernetes and observability data. Invoke whenever someone asks whether something is broken, slow, erroring, or down; asks what happened during an outage or time window; asks about alerts, logs, metrics, traces, or error rates; asks why a…
weather
Look up a location's weather forecast using a live web search. Invoke whenever the user asks about the weather, whether to expect rain, temperature, or what to wear or plan for outdoor activities.