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 jerryzhang1011/waterlooworks-application-plugins --skill ww-scrape-jobsgit clone --depth 1 https://github.com/jerryzhang1011/waterlooworks-application-pluginsWrote 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/jerryzhang1011/waterlooworks-application-plugins/ww-scrape-jobs)<a href="https://agentmods.dev/skills/jerryzhang1011/waterlooworks-application-plugins/ww-scrape-jobs"><img src="https://agentmods.dev/badge/skills/jerryzhang1011/waterlooworks-application-plugins/ww-scrape-jobs/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/jerryzhang1011/waterlooworks-application-plugins/ww-scrape-jobs"><img src="https://agentmods.dev/badge/skills/jerryzhang1011/waterlooworks-application-plugins/ww-scrape-jobs.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.00129 | $0.00989 |
| Opus 5 | $0.00064 | $0.00495 |
| Sonnet 5 | $0.00026 | $0.00198 |
| Haiku 4.5 | $0.00013 | $0.00099 |
Grade A, and why
ww-scrape-jobs 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 — 47 lines — stays where its author put it; the contents beside it link to each section on GitHub.
WaterlooWorks JD Scraper
Use this project-only skill to scrape WaterlooWorks Full-Cycle Service job postings into a folder under jds/ (a date-named folder by default) as individual Markdown files named <job id> - <job title>.md.
Workflow
- Choose the output folder under
jds/:- Default the folder name to today's date in
YYYY-M-Dformat with no zero-padding (e.g.jds/2026-6-26), matching the existing sibling folders. Read today's date from the session/system context. - If the user names a specific folder or cycle (e.g. "cycle 3" ->
jds/cycle3, or "save to jds/2026-7-01"), use exactly that and do not reinterpret it. - Create the folder if it does not exist; this
<folder>is used in every path below.
- Default the folder name to today's date in
- Inspect existing output format before writing:
- Read one or two files from
jds/cycle1/. - Preserve the same summary table and
##section style.
- Read one or two files from
- Use Chrome for WaterlooWorks because it depends on the user's logged-in session.
- Load the Chrome control skill if available.
- Open
https://waterlooworks.uwaterloo.ca/myAccount/co-op/full/jobs.htm. - Choose the WaterlooWorks filter before scraping:
- If the user did not specify a filter, tell them the default is
For my program/My Programand apply theMy Programquick filter. - If the user requested a different filter, keyword search, or filter combination, apply that instead and do not also force
My Programunless they asked for it. - When reporting progress, name the filter or search criteria being used so the user knows they can request another filter in a future scrape.
- If the user did not specify a filter, tell them the default is
- Read
references/chrome-scrape-workflow.mdbefore scraping.- It contains the current WaterlooWorks selectors, modal extraction flow, pagination checks, and the browser-side snippet that saves a scrape JSON file under
/private/tmp. - That main snippet targets a Playwright / Node REPL (
tab.playwright,node:fs). If you are running in Claude in Chrome (the in-pagejavascript_tool, with no Playwright and no filesystem), follow the reference's## Claude-in-Chrome (in-page) variantsection instead — run the scrape loop in-page and exfiltrate the JSON via a blob download.
- It contains the current WaterlooWorks selectors, modal extraction flow, pagination checks, and the browser-side snippet that saves a scrape JSON file under
- Convert the scrape JSON into Markdown:
- Run
node .codex/skills/ww-scrape-jobs/scripts/write_jds_from_scrape_json.js --input /private/tmp/waterlooworks-<folder>-scrape.json --out jds/<folder>(the--outdirectory can be any folder, including a date-named one).
- Run
- Validate the output:
- Run
node .codex/skills/ww-scrape-jobs/scripts/validate_cycle_folder.js jds/<folder> --expected <count>. - Also sample the first and last generated files with
sed.
- Run
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.
- 12d ago First seen · 47 lines · 129 tokens per session scan A 3d11c78003d3
ww-scrape-jobs is a skill published in the GitHub repository jerryzhang1011/waterlooworks-application-plugins (1 stars, last pushed 2mo ago), licensed MIT. It adds 129 tokens to every session and 989 once invoked, about $0.0006 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
tailor-resume
Choose the best existing resume base/variant for a job, or create a new tailored variant when nothing fits.
tanstack-form-composition
Migrate a React @tanstack/react-form codebase from the prop-drilled useForm + erased-form-type pattern to the official createFormHook composition API (useAppForm / withForm / field.X). Use when a project threads a form object (often cast to an any-erased type like ReactFormExtendedApi ) through field-wrapper…
apply
Apply to a single job (URL or pasted page) with fit review, or score and apply the job links pasted into an apply campaign when no argument is given.
auto-apply
Search a job board and autonomously apply to matching jobs one at a time, until paused, exhausted, or the max-applications cap is hit.
teaser-video
Film, cut, and deliver a short teaser/demo video of any app by driving it with Playwright and editing with ffmpeg - storyboard, authenticated capture, PII review, animated title cards, MP4 + GIF. Use for "make a teaser", "record a demo video", "product launch video", "screen recording for the README".
networking
Find a hiring manager/recruiter for a role (or company) and send a personalized message via cold email or LinkedIn, with per-campaign channels and autonomy.