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 jamesyang124/agent-skills --skill ado-pr-teams-notifygit clone --depth 1 https://github.com/jamesyang124/agent-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/jamesyang124/agent-skills/ado-pr-teams-notify)<a href="https://agentmods.dev/skills/jamesyang124/agent-skills/ado-pr-teams-notify"><img src="https://agentmods.dev/badge/skills/jamesyang124/agent-skills/ado-pr-teams-notify/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/jamesyang124/agent-skills/ado-pr-teams-notify"><img src="https://agentmods.dev/badge/skills/jamesyang124/agent-skills/ado-pr-teams-notify.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.00181 | $0.01633 |
| Opus 5.5 | $0.00072 | $0.00653 |
| Sonnet 5.5 | $0.00036 | $0.00327 |
| Haiku 4.5 | $0.00018 | $0.00163 |
Grade A, and why
ado-pr-teams-notify 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 20d 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 — 79 lines — stays where its author put it; the contents beside it link to each section on GitHub.
ADO pull requests → one card per PR in a Teams channel
Azure DevOps Service Hooks (4 per repo) ──HTTP POST──▶ Power Automate flow (Teams "webhook alerts" template, one URL)
created · commented · updated(any type) │ Switch on eventType
├─ created → post root card (skip drafts)
├─ updated → update root card + 1-line reply
└─ commented → update root card + 1-line reply (quote)
Result in Teams: one main card per PR (updated in place) + one short reply per event (bumps the thread to the bottom
of the channel and notifies). The card shows what a reader needs without opening the thread. Layout and exact copy:
references/card-and-copy-spec.md. Architecture and the reasoning behind each choice: references/architecture.md.
What you need before starting (ask the user for anything missing)
| Input | Where it comes from |
|---|---|
ADO org, project, and repo = target branch list |
the user (branch = the PR target; use the repo's default branch unless told otherwise, and say so if it differs from what they stated) |
| Teams team + channel | the user; the channel must be one the flow owner is a member of. Private channel = only its members can see the cards |
| Jira base URL, display timezone | the user (cards link [KEY-123] in PR titles; times shown in that timezone) |
| A browser session logged in to Teams, Power Automate and Azure DevOps | the user (this skill does not log in; an SSO session must already exist) |
| Optional: an ADO personal access token | lets the REST steps run without a browser (ADO_PAT) |
Browser: any of ego-browser, Playwright, Chrome DevTools MCP works; mapping in references/browser-adapters.md.
Phases
- Create the template flow (Teams). In the target channel use Workflows → "Send webhook alerts to a channel". This yields a flow with a
Teams-webhook trigger, a connection, and the webhook URL (HTTP POST URL of the trigger). Record: team id (
groupId), channel id (19:…@thread.tacv2), flow id, webhook URL. (The ids are also visible in the flow's code view / the Teams channel link.) - Export the template (
flows/<id>/export→ name → Export → Download; zip) and unzip it. - Generate the merged flow and import it over the template:
(python3 scripts/gen_flow_definition.py --export-dir <unzipped export> --config config.json --out-dir buildconfig.json: copyscripts/config.example.json.) It writesbuild/andflow-package.zip. Import with My flows → Import → Import Package (Legacy): upload the zip; flow row = Update → pick the existing flow; connection row = Select during import → your Teams connection; Save; Import. After import the flow is Off: open its details page and turn it On. The final Import click may be blocked by an auto-mode safety classifier for agents; if it is, stage everything and ask the human to click Import once. - Create the Service Hooks (4 per repo, all to the same webhook URL):
No PAT? Run the same REST calls inside a logged-in ADO tab (recipe inexport ADO_PAT=…; python3 scripts/ado_hooks.py create --org ORG --project PROJ --webhook-url URL --repo hubs=master --repo infra=mainreferences/ado-rest.md). The comment hook gets the same target-branch filter as the others so comments follow only PRs that were announced. - Verify with a state sequence:
scripts/build_test_payloads.pythenscripts/send_event.sh URL …; read the card text back from the Teams page after each step (test plan and expected values:references/test-plan.md). Report results as text unless the user wants screenshots. - Hand over: tell the user what remains manual (Import click, deleting test posts, anything only a human could verify such as how the
colors render) and give them
references/card-and-copy-spec.mdas the "what RDs will see" description.
What ships with it
13 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.
- references/ado-rest.md 2.9 KB
- references/architecture.md 2.2 KB
- references/browser-adapters.md 2.8 KB
- references/card-and-copy-spec.md 3.9 KB
- references/flow-internals.md 2.3 KB
- references/test-plan.md 2.0 KB
- references/troubleshooting.md 2.3 KB
- scripts/ado_hooks.py 4.3 KB runs code
- scripts/backfill_pr.py 1.6 KB runs code
- scripts/build_test_payloads.py 3.5 KB runs code
- scripts/config.example.json 188 B
- scripts/gen_flow_definition.py 24 KB runs code
- scripts/send_event.sh 305 B runs code
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.
- 20d ago First seen · 79 lines · 181 tokens per session scan A 453625778855
ado-pr-teams-notify is a skill published in the GitHub repository jamesyang124/agent-skills (2 stars, last pushed 7d ago), licensed MIT. It adds 181 tokens to every session and 1,633 once invoked, about $0.0007 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
story-readiness
Checks whether a story is ready to implement: clear acceptance criteria, no open questions, valid ADR and dependencies. Use when the user asks if a story, or the sprint's stories, are ready to start or build.
recipe-create-meet-space
Create a Google Meet meeting space and share the join link.
atmos-config
Atmos root configuration: atmos.yaml discovery, precedence, deep merging, basepath, imports, minimal bootstrap, and routing to narrower Atmos skills.
workthreads
SpecStory Workthreads - a weekly work-thread rollup across a team's repos from SpecStory coding histories (any agent - Claude Code, Codex, Cursor, Gemini, and more). It groups the window's sessions into threads of work per project and labels each new / open / recently closed, so a lead sees what shipped, what is still…
qa-project-bootstrap
Onboard a new QA engineer to an existing codebase, or audit an existing test architecture. Produces a 30-day ramp plan: codebase orientation, framework walkthrough, test architecture audit, mentorship pairing, and first-test guidance. Use when: "QA onboarding," "new tester," "ramp up," "test architecture audit,"…
handle-linkedin-connection-request-signal
Use this skill when someone sends a team member an inbound LinkedIn connection request. An inbound request is a deliberate, ACTIVE first-party intent signal — meaningfully stronger than a passive profile view — and it deserves different scoring rules. The skill resolves and enriches the requester, gates them through…