From prontonlp-plugin
Generates a Claude live artifact showing the ProntoNLP live feed — Top Movers ordered by sentiment score change, Trending Topics, and recent/upcoming Earnings Call documents. Supports home (market-wide) and company-specific contexts. Triggers on: 'show me a feed', 'open the feed', 'live feed', 'home feed', 'show me the pronto feed', 'what's in the feed', 'show me the [company] feed', 'open [company/ticker] live feed'. Always fetches fresh data when the artifact opens.
How this skill is triggered — by the user, by Claude, or both
Slash command
/prontonlp-plugin:pronto-live-feedThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Generates a live Claude artifact showing the ProntoNLP home feed (or company-scoped feed): Top Movers by sentiment score change, Trending Topics, and recent/upcoming Earnings Call documents. Data is always fetched fresh when the artifact opens.
Generates a live Claude artifact showing the ProntoNLP home feed (or company-scoped feed): Top Movers by sentiment score change, Trending Topics, and recent/upcoming Earnings Call documents. Data is always fetched fresh when the artifact opens.
⛔ TOOL RESTRICTION: Never call
showDocumentMindMapordeepResearchfrom this skill. Use only the tools listed in the steps below.
| User says | Context |
|---|---|
| "show me a feed", "open the feed", "live feed", "home feed", "show me the pronto feed", no company named | Home — market-wide, no company filter |
| "show me the [company/ticker] feed", "open [company] feed", "[company] live feed" | Company — scoped to that entity |
| Range | Value |
|---|---|
| Top Movers current | sinceDay = today − 30 days |
| Top Movers prior | sinceDay = today − 90 days, untilDay = today − 30 days |
| Trends | timeframeDays = 90 |
| Documents | Upcoming (future) + Recent (last 30 days) |
After Step 0, before calling any tools, show a short summary and wait for user confirmation.
Show:
Ask: "Ready to open the Live Feed. Reply yes to continue, or adjust anything above."
Do not call any tools until the user confirms.
Skip this step if context is Home.
Call getCompanies with the company name or ticker to resolve the canonical entity:
getCompanies(companyNameOrTicker: <name or ticker>)
Save:
companyId — used for getTopMovers and getStockPricescompanyName — used for getTrends, document fetches, artifact title, and headerIf the company cannot be resolved, ask the user to clarify before continuing.
Fire all of the following simultaneously.
Top Movers:
getTopMovers(
dateRange: { gte: "<today − 30 days, YYYY-MM-DD>", lte: "now" }
sortBy: ["sentimentScoreChange"]
limit: 10
companiesIds: [<companyId>] # include only for company context
)
Note: The MCP server auto-computes the prior period as
sinceDay − 100 daystosinceDayand returnssentimentScoreChangedirectly. Do not make a separate prior-period call.
Trends:
getTrends(
dateRange: { gte: "now-90d/d", lte: "now" }
documentTypes: ["Earnings Calls"]
limit: 20
sortBy: "score"
companyName: <companyName> # include only for company context
)
Note:
getTrendsdoes not acceptcompanyId. UsecompanyNamefor company context.
Documents:
Home context — 2 calls in parallel:
# Recent (last 30 days, market-wide)
getDocuments(
dateRange: { gte: "<today − 30 days, YYYY-MM-DD>", lte: "now" }
documentTypes: ["Earnings Calls"]
sortOrder: "desc"
excludeFutureDocuments: true
size: 50
)
# Upcoming (future, market-wide)
getDocuments(
dateRange: { gte: "<today + 1 day, YYYY-MM-DD>" }
documentTypes: ["Earnings Calls"]
sortOrder: "asc"
excludeFutureDocuments: false
size: 30
)
After receiving getDocuments results, deduplicate by (companyName, documentDate) — keep one entry per document. Extract: companyName, date, document title. Limit to 30 recent and 20 upcoming.
Company context — 2 calls in parallel:
# Recent (current year/quarter)
getDocuments(
companiesIds: [companyId]
documentTypes: ["Earnings Calls"]
excludeFutureDocuments: true
)
# Upcoming
getDocuments(
companiesIds: [companyId]
documentTypes: ["Earnings Calls"]
excludeFutureDocuments: false
)
After receiving results, filter the upcoming call to keep only future-dated documents.
After Step 2a completes, use id and latestDocDate from each mover in the getTopMovers result.
sentimentScoreChange is returned directly by the tool — use it as-is. If absent for a mover, set to null.
Fire one getStockPrices call per mover, all simultaneously:
# Repeat for each mover (up to 10):
getStockPrices(
companiesIds: [<mover.id>]
dateRange: { gte: "<mover.latestDocDate − 8 days>", lte: "<mover.latestDocDate + 8 days>" }
)
Attach the returned price array to the mover object as stockPrices.
Pre-format marketCap for each mover:
| Raw value | Formatted |
|---|---|
| ≥ 1 trillion | $1.2T |
| ≥ 1 billion | $45B |
| ≥ 1 million | $850M |
Delegate to pronto-live-artifact agent (subagent_type: prontonlp-plugin:pronto-live-artifact). Do not render HTML here.
Pass the following structured payload:
artifact_type: live_feed
title: "ProntoNLP Live Feed" # home context
| "<companyName> Live Feed" # company context
data:
meta:
context: "home" | "company"
companyId?: <string> # company context only
companyName?: <string> # company context only
generatedAt: <ISO 8601 timestamp>
topMovers:
sinceDay: <YYYY-MM-DD> # today − 30 days
trends:
timeframeDays: 90
topMovers: # from current-period getTopMovers, enriched
- id: string
ticker: string
name: string
sector: string
sentimentScore: number # 0–1
sentimentScoreChange: number | null # from tool response; null if absent
stockChange: number # % market cap change
marketCap: string # pre-formatted
latestDocDate: YYYY-MM-DD
stockPrices: # from getStockPrices; omit if call failed
- date: YYYY-MM-DD
price: number
trends: # from getTrends
- name: string
hits: number
score: number
change: number
documents:
upcoming: [ {companyName, title, date, documentType} ] # future events
recent: [ {companyName, title, date, documentType} ] # last 30 days
refresh:
onOpen: true
allowManualRefresh: true
tools: [getTopMovers, getTrends, getDocuments, getCompanies, getStockPrices]
params:
context: "home" | "company"
companyId?: <string>
companyName?: <string>
dateRangeMode: rolling
After the live artifact is ready, summarize in chat:
Do not mention tool names in the summary — describe results, not mechanics.
marketCaps or companyId to getTrends — use companiesIds for company context.getTopMovers company filter uses companiesIds (array). Do not pass a separate prior-period call — the tool computes sentimentScoreChange internally.getStockPrices fails for a mover, omit stockPrices; the artifact skips the sparkline silently.npx claudepluginhub prontonlp/prontonlp-plugin --plugin prontonlp-pluginGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.