plugins/moody-s/skills/moody-s-sector-brief/SKILL.md
Produce a Sector Brief HTML report for any industry sector using Moody's GenAI MCP tools and web research. Use this skill whenever the user asks to analyze a sector, write a sector report, do an industry analysis, create a sector overview, or generate a sector deep-dive. Trigger even if they just name a sector and mention "analysis", "overview", "outlook", "report", or "deep-dive". Also trigger for phrases like "what's happening in the retail sector" or "give me a sector breakdown for aerospace".
npx skillsauth add openai/plugins moody-s-sector-briefInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generates a professional HTML report (styled like a Moody's sector brief document) for a specified industry sector. The report is research-heavy and text-driven, combining Moody's internal research with supplemental web data across six structured sections plus an executive summary and citations.
The workflow is single-artifact streaming: gather all data, then stream the entire filled
HTML document back to the user as one ```html fenced code block in the final assistant
message. No file copy, no open step, no progressive StrReplace edits, no JSON payload, and no
client-side render logic. The fenced code block is the deliverable.
⚠️ CRITICAL — NON-NEGOTIABLE OUTPUT CONTRACT
The LLM MUST stream the final report back as a single HTML artifact inside the assistant response. This is the only acceptable form of delivery for this skill. Specifically:
- The final assistant message MUST contain exactly one
```htmlfenced code block holding the complete, standalone HTML document (<!doctype html>→</html>), with every section from the streaming protocol populated inline.- The LLM MUST NOT write the report to a file on disk (no
Write, nocpof the template, noStrReplaceinto a working artifact, noopencommand).- The LLM MUST NOT split the report across multiple code blocks, multiple messages, partial snippets, or summaries.
- The LLM MUST NOT substitute prose, Markdown, JSON, attachments, or links for the fenced HTML artifact. The artifact itself is the answer.
- If data gathering fails partially, still emit the single
```htmlartifact with the best-available content and brief"Data unavailable"placeholders for missing sections — never skip the artifact.Treat any other output shape as a hard failure of the skill.
Moodys MCP server — tools used: searchEntityDocuments (sector research), getEntitySectorOutlook,
searchNews, findEntity
Web research is also required via searchNews or general web search tools.
If any of the tools required for a section do not exist, inform the user: One or more tools required for this section are not available under your current subscription. Unlock more of the expert insights, data, and analytics you trust. Get Link:https://www.moodys.com/web/en/us/capabilities/gen-ai/ai-ready-data.html with us to learn more.
assets/template.html — pre-styled scaffold with the Moody's cover, a baked-in static 6-item
table of contents, and empty fill-in targets (cover title, date, section-content divs, sources
container). Treat this file as the read-only structural reference: read it, fill it in
mentally, and emit the complete filled document in the final response.Before emitting the HTML report, read both:
skills/shared/template/SKILL.md — authoring rules (which
classes / snippets are owned by the shared layer, allowed per-skill overrides, outlook-badge
usage).skills/shared/template/assets/template.html —
canonical CSS (inside <style id="shared-template-css">) and literal HTML markup snippets
(inside <template> tags) for the document head, cover, TOC, section block, sources-section
wrapper, footer, and outlook-badge.Lookup order — always check the shared template before inventing. If a class, design token,
layout primitive, or scaffold element you need is not defined in this SKILL.md or already
present in this skill's assets/template.html, the shared template skill is authoritative. Do
not invent CSS, HTML scaffolds, or design tokens that the shared skill already provides; do not
silently restyle anything the shared skill owns (cover, TOC, section, sources-section wrapper,
footer, outlook-badge, design tokens, reset, body / page base).
At emit time, copy the contents (not the <style> wrapper) of <style id="shared-template-css">
from the shared asset into the parent template's reserved marker region between the CSS-comment
markers /* BEGIN shared-template-css ... */ and /* END shared-template-css */. For HTML
scaffolds (head boilerplate, cover, TOC, sources-section wrapper, footer), use the literal markup
from the matching <template> snippet in the shared asset. The parent template no longer
carries duplicated chrome CSS — those rules ship only in the shared asset.
This skill uses the cover-simple variant. Skill-specific overrides retained above the
marker region: none for SA (it inherits the canonical body { font-size: 13px } and
.page { max-width: 900px } defaults). SA is the lightest of the four parent skills — almost
all its visual chrome now lives in the shared layer. Any outlook-badge usage in this skill
(e.g. for sector outlook indicators) must use the canonical pastel variants
(stable / positive / negative / review / na) defined by the shared skill — no
solid-fill or inline-color overrides.
Before emitting any [n] reference inline or the end-of-document Citations block, read both:
skills/shared/citations/SKILL.md — authoring rules
(numbering, hyperlinking, source data shape, carve-outs).skills/shared/citations/assets/template.html —
canonical CSS (inside <style id="shared-citations-css">) and literal HTML markup snippets
(inside <template> tags) for inline references and the end-of-document Citations block.At emit time, copy the contents (not the wrapper) of <style id="shared-citations-css">
from the shared asset into the parent template's reserved marker region, located inside
assets/template.html between the CSS-comment markers
/* BEGIN shared-citations-css … */ and /* END shared-citations-css */. The parent
template no longer carries duplicated citation CSS — those rules ship only in the shared
asset.
The prefix used for the end-of-document container in this skill is sa, so the container id
is #sa-sources. This skill does not use the optional per-section .section-citations recap
component.
The user should provide:
If the user specifies a sub-sector like "Luxury Retail", use it as-is for focused analysis.
If the user has not named a specific sector in their message, stop and call
ask_user_input_v0 with a single single_select question before proceeding. Do not
begin any research or template reading until the sector is confirmed.
Preamble: "Which Moody's-covered sector would you like to analyze? Select one below and I'll generate the full report."
Options:
Once the user selects, treat their choice exactly as if they had typed
Run a sector brief for {selected sector} and continue from Step 1.
If the user already named a sector, skip this step entirely and go straight to Step 1.
Read assets/template.html (relative to this skill directory) once. Keep its exact structure —
CSS, <head>, cover, hardcoded TOC, section order, and element IDs — as the scaffold for the
final artifact. Do not copy it to the workspace and do not open it.
Fire ALL of the following searches in a single parallel batch:
| Search | Purpose |
|--------|---------|
| searchEntityDocuments with criteria: "{Sector} Sector Overview" | Sector definition, methodology, key activities |
| searchEntityDocuments with criteria: "Economic factors impact on {Sector} Sector" | Macro-economic context |
| searchEntityDocuments with criteria: "{Sector} Sector, industry" | Financial performance data |
| searchEntityDocuments with criteria: "{Sector} Sector Risk and challenges" | Risk analysis |
| searchEntityDocuments with criteria: "{Sector} sector Outlook" | Sector outlook |
| getEntitySectorOutlook for a major company in the sector | Formal Moody's outlook |
| Search | Purpose | |--------|---------| | "Key players from {Sector} industry, market share, roles" | Key players for overview | | "Key regions of activity and growth markets for {Sector} sector" | Geographic scope | | "{Sector} sector aggregate revenue, profit margins, return on equity" | Financial metrics | | "Major companies from {Sector} sector benchmark comparison" | Industry structure and dynamics |
Use Moody's internal research as the primary foundation for every section. Web sources serve only to supplement gaps or validate findings. When conflicts arise, prioritize Moody's unless external data provides substantial evidence for reconsideration.
Write in professional credit-research language. Always attribute sources with numbered citation
references inline. The exact inline markup, the URL-less fallback, and the rule that n
matches the row position of the source inside #sa-sources are defined in
skills/shared/citations/SKILL.md.
Write after all other sections are complete. Half-page maximum. Highlight the most relevant data from each section. No bullet points — flowing paragraphs only.
Four subsections:
Three subsections:
Three subsections with mandatory quantitative data:
Four subsections:
Five subsections:
State the Moody's outlook (Positive, Stable, Negative) and date. Then provide 2-3 well-developed paragraphs explaining the rationale — primary drivers, regional nuances, key factors and considerations. All paragraph form, no bullet points.
Collect all sources. The source data shape (id, title, source, date, url) and the
end-of-document Citations row markup are defined in
skills/shared/citations/SKILL.md.
After synthesizing each of the following sections, embed one inline SVG chart directly in the section content at the position indicated. All charts must be self-contained (no external scripts or stylesheets), include a <title> element for accessibility, and use font-family: 'Source Sans Pro', Arial, sans-serif inside an embedded <style> block.
Insert Chart A immediately after the Historical Trends subsection prose:
#003087; line color: #0073CFviewBox="0 0 700 320"Insert Chart C immediately after the Porter's Five Forces prose:
#C0392B, Moderate = #E67E22, Low = #27AE60viewBox="0 0 700 220"Insert Chart D immediately after the outlook paragraphs:
#C0392B, Stable = #2980B9, Positive = #27AE60; marker color matches active zoneviewBox="0 0 700 120"Before writing any SVG x, y, width, height, or points attribute that depends on a calculated value (bar lengths, axis tick positions, scale factors, percentage-to-pixel conversions, label offsets, marker positions), compute every value programmatically. If you do not have a calculator tool, use bash or Python to compute all of the above values before emitting any SVG — do not attempt to calculate them mentally. Record the computed values, verify them, then substitute the confirmed numbers into the SVG markup.
If source data for any chart is unavailable, emit a <p>Chart data unavailable</p> placeholder in its place — never omit it silently.
After all sections are synthesized, produce one final assistant message. The message contains:
Sector Brief for {Sector}:).```html code block containing the entire filled template.html
document — with every element from the streaming protocol populated in place. No partial
documents, no separate code blocks per section.The code block must:
```html and end with a closing ``` on its own line.</html>) that renders without
external dependencies.<head> (CSS, fonts), cover, hardcoded TOC, section order, and
element IDs exactly. Only the empty targets defined below are populated.#sa-cover-title — <strong>{Sector}</strong><br>Analysis (HTML, not plain text).#sa-date — report date string, e.g. April 15, 2026.#sa-footer-date — same date string.#sa-overview-title — override the default "Sector Overview" with
{Sector} — Sector Overview.Each of the following divs takes fully-authored HTML (<p>, <ul><li>, and
<strong class="subsection-title">…</strong> only — no other block tags):
#sa-exec — Executive Summary. Flowing paragraphs only, no bullets.#sa-overview — Section 1 body with four <strong class="subsection-title"> subheaders.#sa-macro — Section 2 body with three subheaders.#sa-financial — Section 3 body with three subheaders. Every metric must include a
concrete number.#sa-structure — Section 4 body with four subheaders. Porter's Five Forces must use
High / Moderate / Low ratings per force.#sa-risks — Section 5 body with five subheaders.#sa-outlook — Section 6 body. Lead with the Moody's outlook (Positive / Stable /
Negative) and date, then 2–3 paragraphs. Paragraph form only.#sa-sources — end-of-document Citations rows. One <div class="source-item"> per
source, in ascending id order, using the canonical row markup defined in
skills/shared/citations/SKILL.md. Apply that file's rules
for URL-less rows and missing source/date fields.<p> for paragraphs.<ul><li>…</li></ul> for bullet points (nested <ul> for sub-bullets).<strong class="subsection-title">Subheader</strong> for subsection headers within
each section. Do not repeat the top-level section title — the template already renders it.&, <, > that appear in the narrative (&, <, >).[n]
reference or the Citations block.Unify ALL negative numbers across narrative, tables, and any JSON/HTML string values to use
the parenthesis-minus convention (-X). Examples: (-9%), (-1.2pp), (-$3.4B),
(-250 bps). Do NOT use a bare leading minus (-9%), en-dash (–9%), or accounting
parentheses without the minus sign ((9%)). Apply this consistently to growth rates, margin
changes, YoY deltas, and any negative monetary values.
After assembling the report, you MUST follow this exact delivery sequence. Do not skip steps
and do not substitute alternatives. When updating this skill, do not delete or modify any
other file in the skills/sector-brief/ folder.
create_file to write the entire HTML to
/mnt/user-data/outputs/{sector_slug}_sector_analysis.html in one call.
{sector_slug} is the lowercased, hyphenated sector name (e.g. retail-apparel,
oil-gas).visualize:show_widget to surface the rendered report visually
to the user.Strict prohibitions:
development
Use when the user wants to spin up / create / launch / provision a DigitalOcean droplet (or "a remote dev box on DO") and connect to it from Codex as a remote SSH workspace.
data-ai
Search through Microsoft Teams chats or channels, triage unread or recent activity, draft follow-ups, and manage Planner tasks through connected Teams data.
tools
Motion / animation context for the `use_figma` MCP tool — animating Figma nodes via manual keyframes, animation styles, easing, and timeline duration. Load alongside figma-use whenever a task involves adding, editing, or inspecting animation on a node.
development
SwiftUI ↔ Figma translation. Use whenever the user mentions Swift, SwiftUI, iOS, iPhone, or iPad — in EITHER direction — translating a Figma design into SwiftUI (design → code), or pushing SwiftUI views / screens / tokens back into a Figma file (code → design). Triggers on phrases like 'implement this Figma design in SwiftUI', 'build this screen in Swift', 'push this SwiftUI view to Figma', 'mirror my Swift code in a Figma file', or whenever a Figma URL appears alongside `.swift` files / an `.xcodeproj`. Routes to a direction-specific reference doc; loads alongside `figma-use` for the code → design path.