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 pnp/sharepoint-skills --skill team-newsletter-publishergit clone --depth 1 https://github.com/pnp/sharepoint-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/pnp/sharepoint-skills/team-newsletter-publisher)<a href="https://agentmods.dev/skills/pnp/sharepoint-skills/team-newsletter-publisher"><img src="https://agentmods.dev/badge/skills/pnp/sharepoint-skills/team-newsletter-publisher/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/pnp/sharepoint-skills/team-newsletter-publisher"><img src="https://agentmods.dev/badge/skills/pnp/sharepoint-skills/team-newsletter-publisher.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.00111 | $0.01512 |
| Opus 5.5 | $0.00044 | $0.00605 |
| Sonnet 5.5 | $0.00022 | $0.00302 |
| Haiku 4.5 | $0.00011 | $0.00151 |
Grade A, and why
team-newsletter-publisher 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 today.
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 — 55 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Team Newsletter Publisher
Turn one filled Team Newsletter Word file into a finished newsletter that looks exactly like the Team Newsletter design. The content comes only from the Word file; the layout and styling come only from the files beside this SKILL.md.
Files in this skill
newsletter-template.html— the exact layout and CSS with{{Field}}placeholders. Treat it as the design master: keep its structure, class names and styles; only replace placeholders and remove hidden blocks.field-mapping.md— where each Word field goes, its styling, length guidance, the empty-field rules, the hero-image rules, colours, type scale and a checklist.
Inputs
- One Word file (.docx) created from the Team Newsletter form/template. If the user has not selected one, ask which file to use (it normally sits in the same library as the template, e.g. "DUG Newsletter Demo").
- Output format: PDF, HTML or both. If not stated, create both.
Instructions
- Read the Word file. Collect the value of every field in this order:
IssueMonth, IssueSummary, OneSentenceSummary; FeaturedTag, FeaturedDate, FeaturedTitle, FeaturedImage, FeaturedBody, FeaturedAction; News1–3 (_Tag, _Date, _Title, _Body, _Link); Event1–2 (_DateTime, _Type, _Title, _Desc); Spot1_Name, Spot1_Role, Spot1_Story; Tip1–2 (_Title, _Body); ContributeNote, NextDeadline.
Find values by their position under the fixed labels and section headings of the Word layout:
- "DEPARTMENT NEWSLETTER" → the next lines are IssueMonth then IssueSummary.
- "This month in one sentence:" → OneSentenceSummary.
- "1 · Featured story" box → line "Tag · Date", then the title, then the picture, then the body, then "Action for you:" + FeaturedAction.
- "2 · Latest news" → up to three stories, each as "Tag · Date", title, body, link.
- "3 · Upcoming events" table (When | Type / Title | Details) → one row per event; the middle cell has the type on line 1 and the title on line 2.
- "4 · Team spotlight" → "Name — Role", then the story.
- "5 · Quick tips" → title + body, twice.
- "6 · Have something for the next issue?" → ContributeNote, then "Deadline for next issue:" + NextDeadline. Ignore instruction text that is not content: "Hero image (map this field as Image)" and "Three short updates. Leave a slot empty if you have fewer stories."
- Treat a field as empty when it is blank or still shows its placeholder (for example
{{News3_Title}}). - Copy text exactly. Do not rewrite, summarise, shorten, translate or add content. Never invent a value for an empty field. Keep paragraph breaks in FeaturedBody.
- Hero image. Use the picture embedded in the Featured story box of the Word file. Embed it (HTML:
data:URI in<img data-field="FeaturedImage">; PDF: embedded image), full column width, 16:9 cropped to fill (object-fit: cover), max height 70 mm in print, alt text = FeaturedTitle. If there is no picture, remove the whole<figure>— never show the placeholder text, an empty box or a broken image. - Fill the design. Start from
newsletter-template.html. Replace each{{Field}}with its value, escaping HTML special characters. Put the URL from NewsN_Link in{{NewsN_Href}}(the link target) and its link text in{{NewsN_Link}}; if the link is only a URL, show the text "Read more". - Apply the empty-field rules from
field-mapping.md:- News card with no title → remove the card; remaining cards share the row. No news → remove section 2.
- Event row with no title → remove the row. No events → remove section 3.
- No Spot1_Name or Spot1_Story → remove section 4. No role → drop the dash and role.
- Tip with no title → remove it. No tips → remove section 5.
- Empty IssueSummary, OneSentenceSummary, FeaturedAction or NextDeadline → remove that line/box.
- Empty ContributeNote → use "Send your ideas to the newsletter team."
- Renumber the remaining sections 1, 2, 3… with no gaps, and update the contents strip in the masthead to match.
- Create the outputs.
- HTML: one self-contained file (inline CSS, image as data URI, no external scripts or fonts), named
Team-Newsletter-<Month>-<Year>.html. - PDF: A4 portrait, 13 mm side margins, same layout as the HTML print view, running footer "Internal newsletter · Page N", named
Team-Newsletter-<Month>-<Year>.pdf. - Save both in the same folder as the source Word file unless the user names another location.
- HTML: one self-contained file (inline CSS, image as data URI, no external scripts or fonts), named
- Check before you finish (see the checklist in
field-mapping.md): no{{left anywhere; IssueMonth matches in masthead and footer; empty slots removed, not blank; image present and undistorted or removed; no cut-off text; no heading alone at the bottom of a page. - Report back in two or three lines: the file names created, which fields were empty and therefore hidden, and anything that looked unusual in the Word file (for example a missing label or a picture outside the Featured story box).
What ships with it
2 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.
- today First seen · 55 lines · 111 tokens per session scan A 98313573d039
team-newsletter-publisher is a skill published in the GitHub repository pnp/sharepoint-skills (137 stars, last pushed yesterday), licensed MIT. It adds 111 tokens to every session and 1,512 once invoked, about $0.0004 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-17.
Other skills, from other repositories
skill-doc-delivery
Convert markdown to DOCX, PPTX, XLSX, PDF office documents — use when you need exportable deliverables.
liteparse
Provides fast document to markdown extraction. Use this skill when the user asks to parse, perform multi-format document conversion or spatially extract text from an unstructured file (PDF, DOCX, PPTX, XLSX, images, etc.) locally.
opencite
Use this skill for "search for papers", "find citations", "look up a DOI", "get BibTeX", "download PDF", "convert PDF to markdown", "find canonical papers", "convert identifiers", "batch download papers", "configure opencite", "literature review", "find related papers", "what papers cite this", "export references"…
proposal-import
Import an existing proposal (usually PDF) into the standard single-file format — extract text and references, strip personal data, mark gaps. Use when the user has a draft from Word, LaTeX, Overleaf or another tool, pastes the text of an older proposal, or wants to carry existing work over and continue it here.
proposal-publish
Build a PDF (or docx fallback) from a proposal file via pandoc — compact layout, typst-first, with install guidance when tools are missing. Also offers a stripped hand-in export, and hands over to a workspace build script where one exists. Use when the user wants a PDF or something to email, print or hand to their…
document-processing
This skill should be used when the user says "process documents", "extract text from PDF", "OCR this document", "convert PDF to markdown", "extract emails from documents", "parse document", "document conversion", "batch OCR", "extract structured data from PDF", "read PDF", "extract tables from PDF", "convert Word…