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".
65
78%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Critical
Do not install without reviewing
Fix and improve this skill with Tessl
tessl review fix ./plugins/moody-s/skills/moody-s-sector-brief/SKILL.mdGenerates 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 deliver the report as a single HTML artifact in the assistant response. Specifically:
- The final message MUST contain exactly one
```htmlfenced code block holding the complete, standalone HTML document (<!doctype html>→</html>), every section populated inline.- The LLM MUST NOT write to disk, split across messages/blocks, or substitute prose, Markdown, JSON, or links for the artifact.
- If data partially fails, emit the artifact with
"Data unavailable"placeholders — never skip it.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.Always check the shared template before inventing any class, token, scaffold, or design element. Do not restyle anything the shared skill owns. At emit time, copy the contents of <style id="shared-template-css"> into the marker region /* BEGIN shared-template-css ... */ … /* END shared-template-css */. Use literal markup from the matching <template> snippets for all HTML chrome.
This skill uses the cover-simple variant with no skill-specific CSS overrides (inherits body { font-size: 13px } and .page { max-width: 900px }). Outlook-badge usage must use canonical pastel variants (stable / positive / negative / review / na) — 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 of <style id="shared-citations-css"> into the marker region /* BEGIN shared-citations-css … */ … /* END shared-citations-css */.
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, compute every value via bash or Python — do not calculate mentally. Record and verify computed values, then substitute into the SVG markup.
If source data for any chart is unavailable, emit a <p>Chart data unavailable</p> placeholder — never omit 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.Use (-X) for ALL negatives: (-9%), (-1.2pp), (-$3.4B), (-250 bps). Never use bare minus (-9%), en-dash (–9%), or parentheses without minus ((9%)). Apply to growth rates, margin changes, YoY deltas, and 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:
11c74d6
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.