Skip to main content

moody-s-earnings-brief

Produce an Earnings Call Summary HTML report for 2–5 companies using Moody's GenAI MCP tools. Use this skill whenever the user asks to summarize earnings calls, generate an earnings call summary, analyze earnings transcripts across peers, or create an earnings call report. Trigger even if they just name companies and mention "earnings" or "transcript".

설치로 이동

소스 정보

저장소
zhongjingyun/codex-plugins
최근 소스 활동
2026년 7월 6일 07:05
감지된 SKILL.md 언어
영어
스타
16
포크
2

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
4 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
moody-s-earnings-brief
description
Produce an Earnings Call Summary HTML report for 2–5 companies using Moody's GenAI MCP tools. Use this skill whenever the user asks to summarize earnings calls, generate an earnings call summary, analyze earnings transcripts across peers, or create an earnings call report. Trigger even if they just name companies and mention "earnings" or "transcript".
# Earnings Brief Skill Generates a professional HTML report (styled like a Moody's earnings call summary PDF) for 2–5 companies by pulling data from multiple `Moodys MCP server` MCP tools and consolidating 13 structured sections plus a hardcoded table of contents into a single HTML artifact. The workflow is **single-artifact delivery**: gather all data, then write the entire filled HTML document to a single `.html` file in `/mnt/user-data/outputs/` and present it to the user via `present_files`. The rendered HTML artifact is the deliverable. > ## ⚠️ CRITICAL — NON-NEGOTIABLE OUTPUT CONTRACT > > **The LLM MUST deliver the final report as a single standalone HTML artifact file.** This is > the only acceptable form of delivery for this skill. Specifically: > > - The LLM **MUST** write the **complete, standalone HTML document** (`<!doctype html>` → > `</html>`), with every section from the streaming protocol populated inline, to a single > `.html` file in `/mnt/user-data/outputs/` using the `create_file` tool, then surface it > to the user with `present_files`. > - The LLM **MUST NOT** emit the report inline as a fenced ` ```html ` code block, as prose, > Markdown, JSON, attachments, or links. The rendered HTML artifact itself is the answer. > - The LLM **MUST NOT** split the report across multiple files, multiple messages, partial > snippets, or summaries. > - If data gathering fails partially, still produce the single HTML artifact file with the > best-available content. When the earnings call transcript for a company cannot be > located, **note that fact in the Executive Summary and omit the company from every other > section of the report** (no rows, no subtitles, no `"--"` placeholders for that company). > When a transcript exists but does not contain information for a specific section, **omit > that company from that section only** (no subtitle, no bullets, no placeholder). Never > skip the artifact itself. > > Treat any other output shape as a hard failure of the skill. ## Allowed data sources This skill may **only** extract information from the following two sources: 1. `Moodys MCP server` — tools used: `findEntity` and `searchEntityEarningsCall`. These are the only MCP tools that may be called. Do **not** call `getEntityCreditOpinion`, `getEntitySectorOutlook`, `getEntityEsg`, `getEntityPeers`, `searchEntityDocuments`, `searchNews`, or any other MCP tool, regardless of section. 2. `web_search` — used **only as a fallback** when `searchEntityEarningsCall` returns no usable earnings call transcript for a given company, and used **only** to locate and extract the text of that company's earnings call transcript on the web. Do not use `web_search` for credit opinions, sector outlooks, news, peers, ESG, or any other purpose. **Recency requirement (web_search fallback):** if the transcript located via `web_search` is older than **100 days** from today, discard it and treat the transcript as unavailable for that company. Do not fall back to any other source — handle the company per the missing-transcript policy (note in the Executive Summary, omit from every other section). These rules apply to **every** section of the report. No section may be enriched with credit, sector, ESG, peer, filings, or news data. ## Bundled files - `assets/template.html` — self-contained static report shell (CSS + named section placeholders). No embedded data, no inline script. Treat this file as the **read-only structural reference**: read it, fill it in, and write the complete filled document to a new `.html` file in `/mnt/user-data/outputs/`. ## Template (shared) Before emitting the HTML report, **read both**: 1. [`skills/shared/template/SKILL.md`](../shared/template/SKILL.md) — authoring rules (which classes / snippets are owned by the shared layer, allowed per-skill overrides, outlook-badge usage). 2. [`skills/shared/template/assets/template.html`](../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-multi`** variant. Skill-specific overrides retained above the marker region: **none** for ECS (it inherits the canonical `body { font-size: 13px }` and `.page { max-width: 900px }` defaults). Skill-specific CSS that stays local: the ECS `.credit-badge`, the `.yoy-table` / `.ratings-table` rules, and `.ratings-factors`. All outlook-badge usage in this skill must use the canonical pastel variants (`stable` / `positive` / `negative` / `review` / `na`) defined by the shared skill — no solid-fill or inline-color overrides. ## Citations (shared) Before emitting any `[n]` reference inline, any per-section recap block, or the end-of-document Citations block, **read both**: 1. [`skills/shared/citations/SKILL.md`](../shared/citations/SKILL.md) — authoring rules (numbering, hyperlinking, source data shape, carve-outs). 2. [`skills/shared/citations/assets/template.html`](../shared/citations/assets/template.html) — canonical CSS (inside `<style id="shared-citations-css">`) and literal HTML markup snippets (inside `<template>` tags) for inline references, the end-of-document Citations block, and the optional `.section-citations` recap. 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. Skill-specific carve-outs that override or extend the shared rules are listed in the section synthesis rules below — most importantly: **the numeric `.yoy-change` cell stays citation-free** (no `<a class="cite-ref">` or `<span class="cite-ref">` inside it). The prefix used for the end-of-document container in this skill is `ecs`, so the container id is `#ecs-sources`. Optional per-section recap blocks live in `#ecs-cite-a` … `#ecs-cite-l`. --- ## Step 1 — Resolve companies For each company name provided by the user, call `findEntity` to get the canonical entity name and entity ID (use the canonical name throughout the report). Collect 2–5 companies. If the user gives fewer than 2, ask for more. --- ## Step 2 — Read the template Read `assets/template.html` (relative to this skill directory) once. Keep its exact structure — CSS, `<head>`, hardcoded TOC, section order, table skeletons, row labels, and element IDs — as the scaffold for the final artifact. Do **not** copy it to the workspace and do **not** open it. --- ## Step 3 — Gather earnings call transcripts For each company, fire the following calls in a single parallel batch (one message, many tool calls): ### Earnings call transcript (×4 per company) — primary source | Category label | Keywords | | --------------------- | ----------------------------------------------------------------------------------------------------------- | | Revenue & Price | `Revenue, Net Sales, Sales, Volumes, Units sold, Price, Pricing` | | Sector & Market | `Industry, Sector Performance, Demand, Market Condition` | | Supply Chain & Region | `Supply Chain, Materials, Tariffs, Input, Logistics, Regional Performance, Geographic Condition, Geography` | | Guidance & Events | `Business Outlook, Guidance, Revision, Corporate Events, Transaction` | ### Web search fallback (only if `searchEntityEarningsCall` returns nothing usable) If — and only if — `searchEntityEarningsCall` returns no usable transcript content for a given company, run `web_search` to locate that company's most recent earnings call transcript on the web, and extract the transcript text from the result. The web search must be scoped solely to finding the earnings call transcript for that entity — not to news, analyst commentary, credit opinions, or any other content. **Apply the 100-day recency rule:** check the date of the transcript located via `web_search`. If the transcript is older than 100 days from today, discard it and treat the transcript as unavailable for that company. Do not substitute any other source. All synthesis in Step 4 must be derived exclusively from the transcript content gathered in this step (either via `searchEntityEarningsCall` or, where applicable, the web_search fallback). No other tools may be called. ### Missing-tool handling 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 [in touch] with us to learn more. The [in touch] should be the link Link:https://www.moodys.com/web/en/us/capabilities/gen-ai/ai-ready-data.html --- ## Step 4 — Synthesize + emit the complete artifact After data is gathered, write the **entire filled `template.html` document** — with every element from the streaming protocol populated in place — to a single `.html` file in `/mnt/user-data/outputs/` using the `create_file` tool, then call `present_files` on that path. The file is the deliverable; do not also paste the HTML into the chat as a fenced code block. The HTML file **must**: - Be a complete, standalone HTML document (doctype → `</html>`) that renders without external dependencies. - Preserve the template's `<head>` (CSS, fonts), hardcoded TOC, section order, table skeletons, row labels, and element IDs exactly. Only the empty targets defined below are populated. - Be written in a single `create_file` call (no progressive `str_replace` edits, no multi-file split). Render order of content inside the file follows the page top-to-bottom so the artifact is human-readable as well as browser-renderable: cover/TOC fields first, then sections 1 → 13, then sources. Use earnings call transcript content as the **sole** source for every section. Do not enrich with credit, sector outlook, ESG, peer, or news data — those tools are not permitted in this skill. Write in professional financial language. Name specific companies in bullets rather than speaking abstractly. Attribute substantive claims with numbered citation references. The exact inline markup, the URL-less fallback, and the rule that `n` matches the row position of the source inside `#ecs-sources` are defined in [skills/shared/citations/SKILL.md](../shared/citations/SKILL.md). ### Cover / header fields (write first) - `#ecs-report-date` — e.g. `April 4, 2026` (plain text) - `#ecs-footer-date` — same value (plain text) - `#ecs-company-count` — number of companies (plain text) - `#ecs-company-chips` — one `<span class="company-chip">Company Name</span>` per company (space-separated) - `#ecs-cover-img-right`, `#ecs-cover-img-bottom` — optional. If you have image URLs or data URIs to use, set the `src` attributes **and** add the `has-cover-image` class to the corresponding container (`<div class="cover-top has-cover-image">` and/or `<div class="cover-bottom has-cover-image">`). If you do not have images, leave the template as-is — the empty image strips will collapse automatically and the cover will render as a clean navy block with the accent bar. ### Section synthesis rules > **Per-section omit rule (applies to every section a–l).** If a company's earnings call > transcript exists but does not contain information relevant to a given section, **omit > that company from that section entirely** — do not emit a row, subtitle, bullet, or any > "Not disclosed" placeholder for it. The section may legitimately cover fewer companies > than the full set. (Companies whose transcript could not be located at all are handled > per rule **a** and are excluded from every section.) **a. Executive Summary** → `#ecs-executive-summary` **Exactly one combined `<p>` paragraph of 100 words or less** that summarises the entire contents of the newsletter across all covered companies. **Do NOT write one paragraph per company** and do NOT structure it as a per-company recap — it must be a single, general, combined summary of the whole report based solely on the earnings call transcript content. May carry inline `<a class="cite-ref">[n]</a>` hyperlink citations. If the earnings call transcript for any requested company could not be located (neither via `searchEntityEarningsCall` nor a web_search result within the 100-day window), **explicitly note that fact in the Executive Summary** (e.g., "An earnings call transcript for {Company X} could not be located and it is therefore not covered in this report."). That company must then be **omitted from every other section** — no row in the YOY tables, no subtitle, no bullets, no placeholder. **b. Overall Credit Consideration** → `#ecs-credit-badge` + `#ecs-overall-credit` Answer the question: **Are conditions in the industry and macro-environment credit positive, negative, or neutral?** Determine the answer **solely from the earnings call transcript content**, by looking across all covered companies for industry-wide trends and patterns. Write the sentiment badge into `#ecs-credit-badge` (see snippet below). Write one intro `<p>` (≤250 chars) that gives an overview with a **clearly formed opinion** on whether industry/macro conditions are credit positive, negative, or neutral, followed by a `<ul>` of **exactly 5 `<li>` bullets** (≤150 chars each) into `#ecs-overall-credit` that **list the five considerations supporting that view**. The intro paragraph and each bullet may carry inline citations. **The view and every supporting consideration must be derived from trends or patterns observed across the covered companies — i.e., the industry as a whole.** Do **not** extrapolate isolated events that apply to just one company into an industry-level claim. Group companies that share a dynamic into a single bullet (e.g., "Company A and Company B both cite easing input cost pressure …"). Do **not** write one bullet per company. Draw exclusively on the earnings call transcript. Do not consult credit opinions, sector outlooks, or any other tool. **c. Revenue YOY Trend** → `#ecs-tbody-revenue` One `<tr>` per company: company-wide YOY revenue change (`+X.XX%` / `-X.XX%` / `Up` / `Down` / `Flat` / `Not specified`) and a 70–90 char commentary. Not segment-specific. The commentary cell may carry inline citations; the numeric `.yoy-change` cell stays citation-free. **d. Volumes YOY Trend** → `#ecs-tbody-volumes` Same row format as (d) but for sales volumes. The commentary cell may carry inline citations; the numeric `.yoy-change` cell stays citation-free. **e. Selling Price Trend** → `#ecs-tbody-prices` Same row format as (d) but for selling prices. The commentary cell may carry inline citations; the numeric `.yoy-change` cell stays citation-free. **f. Qualitative / Broad Industry Commentary on Revenue, Volumes & Pricing** → `#ecs-qualitative` Exactly three paragraphs in this fixed order: **a. Revenue, b. Volumes, c. Pricing**. Each paragraph **must give a general view of the industry** in which the covered companies operate — i.e., synthesise the cross-company patterns observed in the earnings call transcripts into an industry-level commentary, not a per-company recap. **Each paragraph must be between 200 and 300 characters.** Prefix each paragraph with a `<strong class="subsection-title">Revenue</strong>` (etc.) subheader. Derive macro framing exclusively from cross-company observations in the earnings call transcripts. Each paragraph may carry inline citations. **g. End Market Conditions** → `#ecs-end-markets` Exactly four thematic commentaries describing the market conditions in which the covered companies operate. Each commentary has a `<strong class="subsection-title">…</strong>` subheader (≤70 chars summarising the bullets) + a `<ul>` with **at least 2 `<li>` bullets**. **Combined bullet length per commentary: 250–300 characters.** Derive narratives exclusively from the earnings call transcripts. Each bullet may carry inline citations. **Provide your view on the trends or patterns observed across all covered companies** — these commentaries must reflect cross-company industry dynamics, not isolated single-company facts repackaged. **Each bullet (and every comment) must explicitly name the company or companies it applies to** by stating the company name directly within the sentence. If two or more companies share the dynamic, name all of them in the same bullet. Do not write company-agnostic bullets. **h. Supply Chain Conditions** → `#ecs-supply-chain`
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기