tn-financial-data 0.4.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # tn-financial-data
2
2
 
3
- Hosted US equity financial data and SEC filings for agents.
3
+ Hosted US equity, macro, SEC filings, and earnings transcript coverage for agents.
4
4
 
5
5
  `tn-financial-data` is the published agent-facing surface for the hosted API:
6
6
 
@@ -25,10 +25,11 @@ This package is the hosted agent-facing surface only. The repo's website, local
25
25
 
26
26
  ## Features
27
27
 
28
- - Company facts, financials, prices, news, insider trades, ownership, earnings transcript structure, stored macro history, and raw SEC filings through one hosted API
28
+ - Company facts, financials, prices, canonical issuer news, insider trades, ownership, earnings transcript structure and coverage, stored macro history, and raw SEC filings through one hosted API
29
29
  - Multi-ticker resolve and snapshot reads for lower-latency agent workflows
30
30
  - Earnings calendar, dividends, and stock splits through the same hosted read contract
31
- - Cross-ticker news search over article title, summary, and body text with ticker, provider, publisher, and date filters
31
+ - Canonical issuer-scoped `news` plus cross-ticker `news-search` over article title, summary, and body text with ticker, publisher, and date filters
32
+ - `news` and `news-search` responses include `body_text` when stored article content is available
32
33
  - Agent-friendly CLI with clean error output, scoped subcommand help, and self-description via `tn-financial-data describe opencli`
33
34
  - Packaged skill bundle for Claude and OpenCode installs
34
35
  - Typed TypeScript client from the root package export
@@ -57,6 +58,7 @@ Optional base URL override:
57
58
  The published CLI reads those values from the current process environment only.
58
59
  Use `resolve-ticker` to map company or brand input to supported symbols.
59
60
  Treat `available-tickers` as the authoritative support list for exact symbols; do not silently swap an unsupported exact ticker to a different share class.
61
+ `available-tickers` is the equity-symbol snapshot only; covered macro series are queried through `global-rates`, `us-rates`, and `us-economic-indicators`.
60
62
 
61
63
  Production default:
62
64
 
@@ -90,6 +92,11 @@ Ownership semantics:
90
92
  - `institutional-ownership` is issuer-centric: ticker to holders
91
93
  - `investor-portfolio` is investor-centric: filer to holdings via SEC 13F
92
94
 
95
+ Macro note:
96
+
97
+ - `us_cpi` is the raw CPI index level, not a precomputed inflation transform
98
+ - For MoM or YoY CPI prompts, derive the percentage change from adjacent observations returned by `us-economic-indicators`
99
+
93
100
  ## Commands
94
101
 
95
102
  | Command | Description |
@@ -118,7 +125,7 @@ tn-financial-data query filings --ticker AAPL --filing-type 10-K,10-Q,8-K --limi
118
125
  tn-financial-data query filing-items --ticker AAPL --accession-number 0000320193-26-000005 --item 2.02 --include-exhibits
119
126
  tn-financial-data query prices --ticker AAPL --interval day --start-date 2025-01-01 --end-date 2025-01-31
120
127
  tn-financial-data query news --ticker AAPL --limit 10
121
- tn-financial-data query news-search --query "AI data center" --provider alpaca --limit 10
128
+ tn-financial-data query news-search --query "AI data center" --publisher Reuters --limit 10
122
129
  tn-financial-data query institutional-ownership --ticker AAPL --limit 20
123
130
  tn-financial-data query investor-portfolio --investor vanguard --limit 20
124
131
  tn-financial-data query global-rates --series ecb_refi,boe_sonia --limit 10
@@ -209,12 +216,15 @@ const calendar = await client.getEarningsCalendar({
209
216
 
210
217
  console.log(calendar.events.map((row) => `${row.ticker}:${row.event_date_start}`));
211
218
 
212
- const transcripts = await client.getEarningsTranscripts({
213
- ticker: "NVDA",
219
+ const transcripts = await client.getEarningsTranscripts("NVDA", {
214
220
  limit: 1,
215
221
  });
216
222
 
217
- console.log(transcripts.transcripts[0]?.quarter_label, transcripts.transcripts[0]?.question_count);
223
+ console.log(
224
+ transcripts.transcript_coverage.status,
225
+ transcripts.transcripts[0]?.quarter_label,
226
+ transcripts.transcripts[0]?.question_count,
227
+ );
218
228
 
219
229
  const usRates = await client.getUsInterestRates({
220
230
  series: ["us_treasury_10y", "fed_funds_rate"],
@@ -234,7 +244,7 @@ console.log(filings.filings[0]?.accession_number);
234
244
 
235
245
  const news = await client.searchNews("AI data center", {
236
246
  ticker: "NVDA",
237
- provider: "alpaca",
247
+ publisher: "Reuters",
238
248
  limit: 5,
239
249
  });
240
250
 
package/dist/cli.js CHANGED
@@ -336,7 +336,6 @@ var TnFinancialData = class {
336
336
  const params = new URLSearchParams({ q: query });
337
337
  if (opts?.ticker) params.set("ticker", opts.ticker);
338
338
  if (opts?.offset !== void 0) params.set("offset", String(opts.offset));
339
- if (opts?.provider) params.set("provider", opts.provider);
340
339
  return this.request(`/news/search?${this.buildNewsParams(params, opts)}`);
341
340
  }
342
341
  async getDividends(ticker, opts) {
@@ -753,7 +752,7 @@ function queryHelp() {
753
752
  " tn-financial-data query dividends --ticker <symbol> [--start-date <date>] [--end-date <date>] [--limit <n>] [--api-key <key>] [--base-url <url>]",
754
753
  " tn-financial-data query splits --ticker <symbol> [--start-date <date>] [--end-date <date>] [--limit <n>] [--api-key <key>] [--base-url <url>]",
755
754
  " tn-financial-data query news --ticker <symbol> [--start-date <date>] [--end-date <date>] [--publisher <name>] [--limit <n>] [--api-key <key>] [--base-url <url>]",
756
- " tn-financial-data query news-search --query <text> [--ticker <symbol>] [--start-date <date>] [--end-date <date>] [--publisher <name>] [--provider <id>] [--limit <n>] [--offset <n>] [--api-key <key>] [--base-url <url>]",
755
+ " tn-financial-data query news-search --query <text> [--ticker <symbol>] [--start-date <date>] [--end-date <date>] [--publisher <name>] [--limit <n>] [--offset <n>] [--api-key <key>] [--base-url <url>]",
757
756
  " tn-financial-data query insider-trades --ticker <symbol> [--start-date <date>] [--end-date <date>] [--reporting-owner-cik <cik>] [--transaction-code <csv>] [--security-type <all|non_derivative|derivative>] [--limit <n>] [--api-key <key>] [--base-url <url>]",
758
757
  " tn-financial-data query institutional-ownership --ticker <symbol> [--limit <n>] [--api-key <key>] [--base-url <url>]",
759
758
  " tn-financial-data query investor-portfolio (--cik <cik> | --investor <alias>) [--limit <n>] [--api-key <key>] [--base-url <url>]",
@@ -929,7 +928,7 @@ function buildOpenCliDocument() {
929
928
  commands: [
930
929
  {
931
930
  name: "available-tickers",
932
- description: "Fetch the current supported ticker snapshot with financial and news freshness timestamps."
931
+ description: "Fetch the current supported ticker snapshot for the equity universe with financial and news freshness timestamps."
933
932
  },
934
933
  {
935
934
  name: "resolve-ticker",
@@ -1385,7 +1384,7 @@ function buildOpenCliDocument() {
1385
1384
  },
1386
1385
  {
1387
1386
  name: "earnings-transcripts",
1388
- description: "Fetch normalized earnings call transcript metadata, participants, and speaker-turn structure for a single ticker.",
1387
+ description: "Fetch normalized earnings call transcript metadata, participants, speaker-turn structure, and latest transcript coverage status for a single ticker.",
1389
1388
  options: [
1390
1389
  {
1391
1390
  name: "ticker",
@@ -1637,7 +1636,7 @@ function buildOpenCliDocument() {
1637
1636
  },
1638
1637
  {
1639
1638
  name: "us-economic-indicators",
1640
- description: "Fetch US CPI, GDP, and unemployment series with historical observations.",
1639
+ description: "Fetch US CPI, GDP, and unemployment series with historical observations. Returns raw series levels for client-side MoM or YoY transforms when needed.",
1641
1640
  options: [
1642
1641
  {
1643
1642
  name: "series",
@@ -1754,7 +1753,7 @@ function buildOpenCliDocument() {
1754
1753
  },
1755
1754
  {
1756
1755
  name: "news",
1757
- description: "Fetch news articles for a single ticker.",
1756
+ description: "Fetch canonical news articles for a single ticker, including body_text when available.",
1758
1757
  options: [
1759
1758
  {
1760
1759
  name: "ticker",
@@ -1790,7 +1789,7 @@ function buildOpenCliDocument() {
1790
1789
  },
1791
1790
  {
1792
1791
  name: "news-search",
1793
- description: "Search canonical news articles across the covered ticker universe.",
1792
+ description: "Search canonical news articles across the covered ticker universe, including body_text when available.",
1794
1793
  options: [
1795
1794
  {
1796
1795
  name: "query",
@@ -1820,13 +1819,6 @@ function buildOpenCliDocument() {
1820
1819
  ],
1821
1820
  description: "Filter by publisher name."
1822
1821
  },
1823
- {
1824
- name: "provider",
1825
- arguments: [
1826
- { name: "provider", required: true, description: "Provider id filter." }
1827
- ],
1828
- description: "Filter by provider id, for example alpaca."
1829
- },
1830
1822
  {
1831
1823
  name: "limit",
1832
1824
  arguments: [
@@ -2180,7 +2172,10 @@ function renderHelp(command, description, options, example) {
2180
2172
  var QUERY_SUBCOMMAND_HELP = {
2181
2173
  "available-tickers": renderHelp(
2182
2174
  "available-tickers",
2183
- ["List tickers currently supported by the hosted read API."],
2175
+ [
2176
+ "List stock tickers currently supported by the hosted read API.",
2177
+ "This is the equity support snapshot only; covered macro series live under global-rates, us-rates, and us-economic-indicators."
2178
+ ],
2184
2179
  [
2185
2180
  "--api-key <key> API key. Overrides TN_FINANCIAL_DATA_API_KEY.",
2186
2181
  "--base-url <url> API base URL override."
@@ -2323,7 +2318,8 @@ var QUERY_SUBCOMMAND_HELP = {
2323
2318
  "earnings-transcripts": renderHelp(
2324
2319
  "earnings-transcripts",
2325
2320
  [
2326
- "Fetch normalized earnings call transcript metadata, participants, and speaker-turn structure for a single ticker."
2321
+ "Fetch normalized earnings call transcript metadata, participants, speaker-turn structure, and latest transcript coverage status for a single ticker.",
2322
+ "This surface does not return full transcript prose; use it for structure and coverage, not direct quotes or management-language analysis."
2327
2323
  ],
2328
2324
  [
2329
2325
  "--ticker <symbol> Required. Stock ticker symbol.",
@@ -2425,7 +2421,9 @@ var QUERY_SUBCOMMAND_HELP = {
2425
2421
  ),
2426
2422
  news: renderHelp(
2427
2423
  "news",
2428
- ["Fetch curated issuer news for a single ticker."],
2424
+ [
2425
+ "Fetch canonical news articles for a single ticker. Returns `body_text` when article content is available."
2426
+ ],
2429
2427
  [
2430
2428
  "--ticker <symbol> Required. Stock ticker symbol.",
2431
2429
  "--start-date <date> Optional start date (YYYY-MM-DD).",
@@ -2439,14 +2437,15 @@ var QUERY_SUBCOMMAND_HELP = {
2439
2437
  ),
2440
2438
  "news-search": renderHelp(
2441
2439
  "news-search",
2442
- ["Search canonical news articles across the covered ticker universe."],
2440
+ [
2441
+ "Search canonical news articles across the covered ticker universe. Returns `body_text` when article content is available."
2442
+ ],
2443
2443
  [
2444
2444
  "--query <text> Required. Plain-text search query.",
2445
2445
  "--ticker <symbol> Optional covered ticker filter.",
2446
2446
  "--start-date <date> Optional start date (YYYY-MM-DD).",
2447
2447
  "--end-date <date> Optional end date (YYYY-MM-DD).",
2448
2448
  "--publisher <name> Optional publisher filter.",
2449
- "--provider <id> Optional provider filter, for example alpaca.",
2450
2449
  "--limit <n> Number of articles to return. Max 100.",
2451
2450
  "--offset <n> Optional zero-based pagination offset.",
2452
2451
  "--api-key <key> API key. Overrides TN_FINANCIAL_DATA_API_KEY.",
@@ -2521,7 +2520,10 @@ var QUERY_SUBCOMMAND_HELP = {
2521
2520
  ),
2522
2521
  "us-economic-indicators": renderHelp(
2523
2522
  "us-economic-indicators",
2524
- ["Fetch stored US CPI, GDP, and unemployment history from the hosted API."],
2523
+ [
2524
+ "Fetch stored US CPI, GDP, and unemployment history from the hosted API.",
2525
+ "Returns raw series levels; derive MoM or YoY percentage changes from adjacent observations when needed."
2526
+ ],
2525
2527
  [
2526
2528
  "--series <csv> Optional comma-separated US economic indicator keys.",
2527
2529
  "--start-date <date> Optional start date (YYYY-MM-DD).",
@@ -3039,8 +3041,7 @@ async function handleQuery(parsed, runtime, deps) {
3039
3041
  ticker: getOption(parsed, "ticker"),
3040
3042
  startDate: getOption(parsed, "start-date"),
3041
3043
  endDate: getOption(parsed, "end-date"),
3042
- publisher: getOption(parsed, "publisher"),
3043
- provider: getOption(parsed, "provider")
3044
+ publisher: getOption(parsed, "publisher")
3044
3045
  };
3045
3046
  if (limit) {
3046
3047
  options.limit = parsePositiveInt(limit, "limit");
@@ -386,10 +386,10 @@ interface NewsArticle {
386
386
  type: string | null;
387
387
  link: string | null;
388
388
  summary: string | null;
389
+ body_text: string | null;
389
390
  refreshed_at: string;
390
391
  }
391
392
  interface NewsSearchArticle extends NewsArticle {
392
- provider: string | null;
393
393
  relevance: number | null;
394
394
  }
395
395
  interface ReadMetadata {
@@ -438,7 +438,6 @@ interface NewsSearchOpts {
438
438
  startDate?: string;
439
439
  endDate?: string;
440
440
  publisher?: string;
441
- provider?: string;
442
441
  }
443
442
  interface CorporateActionsOpts {
444
443
  limit?: number;
@@ -580,7 +579,18 @@ interface EarningsTranscript {
580
579
  participants: EarningsTranscriptParticipant[];
581
580
  speaker_turns: EarningsTranscriptSpeakerTurn[];
582
581
  }
582
+ interface EarningsTranscriptCoverage {
583
+ status: "current" | "lagging" | "none" | "unknown";
584
+ latest_earnings_report_period: string | null;
585
+ latest_earnings_quarter_label: string | null;
586
+ latest_earnings_release_at: string | null;
587
+ latest_earnings_call_at: string | null;
588
+ latest_transcript_report_period: string | null;
589
+ latest_transcript_quarter_label: string | null;
590
+ latest_transcript_call_date: string | null;
591
+ }
583
592
  interface EarningsTranscriptsResponse extends ReadMetadata {
593
+ transcript_coverage: EarningsTranscriptCoverage;
584
594
  transcripts: EarningsTranscript[];
585
595
  }
586
596
  interface EarningsCalendarEvent extends SnakeCasedProperties<Omit<EarningsCalendarEventData, "refreshedAt">> {
@@ -1068,4 +1078,4 @@ declare class TnFinancialData {
1068
1078
  screen(request: ScreenerRequest): Promise<ApiResponse<ScreenerResponse>>;
1069
1079
  }
1070
1080
 
1071
- export { type AnalystEstimate, type AnalystEstimatesResponse, type AnalystPriceTarget, ApiError, type ApiResponse, type AvailableTicker, type AvailableTickersResponse, type BalanceSheet, type BalanceSheetsResponse, type BatchFinancialMetricsSnapshotEntry, type BatchFinancialMetricsSnapshotsResponse, type BatchNotFoundEntry, type BatchPriceSnapshotEntry, type BatchPriceSnapshotsResponse, type BatchTickerResolutionResponse, type CashFlowStatement, type CashFlowStatementsResponse, type ClientOptions, type CompanyFacts, type ConsensusSurprise, type CorporateActionsOpts, DEFAULT_API_BASE_URL, type DataAvailability, type DividendEvent, type DividendsResponse, type EarningsCalendarEvent, type EarningsCalendarOpts, type EarningsCalendarResponse, type EarningsOpts, type EarningsResponse, type EarningsRow, type EarningsTranscript, type EarningsTranscriptParticipant, type EarningsTranscriptSpeakerTurn, type EarningsTranscriptsOpts, type EarningsTranscriptsResponse, type FilingExhibit, type FilingItemSection, type FilingItemsOpts, type FilingItemsResponse, type FilingMetadata, type FilingsOpts, type FilingsResponse, type FinancialMetric, type FinancialMetricsOpts, type FinancialMetricsResponse, type FinancialMetricsSnapshotResponse, type FinancialOpts, type FinancialsResponse, type GeneralOverviewFinancials, type GeneralOverviewNews, type GeneralOverviewOpts, type GeneralOverviewPriceSnapshot, type GeneralOverviewResponse, type GlobalInterestRateObservation, type GlobalInterestRateSeries, type GlobalInterestRatesOpts, type GlobalInterestRatesResponse, type IncomeStatement, type IncomeStatementsResponse, type InsiderTrade, type InsiderTradesOpts, type InsiderTradesResponse, type InstitutionalOwnershipEntry, type InstitutionalOwnershipOpts, type InstitutionalOwnershipResponse, type InvestorPortfolioHolding, type InvestorPortfolioInvestor, type InvestorPortfolioOpts, type InvestorPortfolioResponse, type InvestorPortfolioSummary, type KeyStatistics, type KeyStatisticsResponse, type NewsArticle, type NewsOpts, type NewsResponse, type NewsSearchArticle, type NewsSearchOpts, type NewsSearchResponse, type OptionalFinancialQueryOpts, type PriceBar, type PriceHistoryResponse, type PriceOpts, type PriceSnapshot, type PriceSnapshotResponse, type QuarterlyHighlightsMetric, type QuarterlyHighlightsOpts, type QuarterlyHighlightsPayload, type QuarterlyHighlightsResponse, type RateLimitAnnotatedResponse, type RateLimitInfo, type ReadMetadata, type ReportPeriodFilterOpts, type ScreenerFieldMetadata, type ScreenerFieldsResponse, type ScreenerRequest, type ScreenerResponse, type ScreenerResultRow, type SegmentedRevenueItem, type SegmentedRevenuePeriod, type SegmentedRevenuesOpts, type SegmentedRevenuesResponse, type SnakeCase, type SplitEvent, type SplitsResponse, type TickerResolutionCandidate, type TickerResolutionConfidence, type TickerResolutionIntent, type TickerResolutionMatchKind, type TickerResolutionRelationship, type TickerResolutionResponse, type TickerResolutionStatus, TnFinancialData, type UsEconomicIndicatorSeries, type UsEconomicIndicatorsOpts, type UsEconomicIndicatorsResponse, type UsInterestRateSeries, type UsInterestRatesOpts, type UsInterestRatesResponse };
1081
+ export { type AnalystEstimate, type AnalystEstimatesResponse, type AnalystPriceTarget, ApiError, type ApiResponse, type AvailableTicker, type AvailableTickersResponse, type BalanceSheet, type BalanceSheetsResponse, type BatchFinancialMetricsSnapshotEntry, type BatchFinancialMetricsSnapshotsResponse, type BatchNotFoundEntry, type BatchPriceSnapshotEntry, type BatchPriceSnapshotsResponse, type BatchTickerResolutionResponse, type CashFlowStatement, type CashFlowStatementsResponse, type ClientOptions, type CompanyFacts, type ConsensusSurprise, type CorporateActionsOpts, DEFAULT_API_BASE_URL, type DataAvailability, type DividendEvent, type DividendsResponse, type EarningsCalendarEvent, type EarningsCalendarOpts, type EarningsCalendarResponse, type EarningsOpts, type EarningsResponse, type EarningsRow, type EarningsTranscript, type EarningsTranscriptCoverage, type EarningsTranscriptParticipant, type EarningsTranscriptSpeakerTurn, type EarningsTranscriptsOpts, type EarningsTranscriptsResponse, type FilingExhibit, type FilingItemSection, type FilingItemsOpts, type FilingItemsResponse, type FilingMetadata, type FilingsOpts, type FilingsResponse, type FinancialMetric, type FinancialMetricsOpts, type FinancialMetricsResponse, type FinancialMetricsSnapshotResponse, type FinancialOpts, type FinancialsResponse, type GeneralOverviewFinancials, type GeneralOverviewNews, type GeneralOverviewOpts, type GeneralOverviewPriceSnapshot, type GeneralOverviewResponse, type GlobalInterestRateObservation, type GlobalInterestRateSeries, type GlobalInterestRatesOpts, type GlobalInterestRatesResponse, type IncomeStatement, type IncomeStatementsResponse, type InsiderTrade, type InsiderTradesOpts, type InsiderTradesResponse, type InstitutionalOwnershipEntry, type InstitutionalOwnershipOpts, type InstitutionalOwnershipResponse, type InvestorPortfolioHolding, type InvestorPortfolioInvestor, type InvestorPortfolioOpts, type InvestorPortfolioResponse, type InvestorPortfolioSummary, type KeyStatistics, type KeyStatisticsResponse, type NewsArticle, type NewsOpts, type NewsResponse, type NewsSearchArticle, type NewsSearchOpts, type NewsSearchResponse, type OptionalFinancialQueryOpts, type PriceBar, type PriceHistoryResponse, type PriceOpts, type PriceSnapshot, type PriceSnapshotResponse, type QuarterlyHighlightsMetric, type QuarterlyHighlightsOpts, type QuarterlyHighlightsPayload, type QuarterlyHighlightsResponse, type RateLimitAnnotatedResponse, type RateLimitInfo, type ReadMetadata, type ReportPeriodFilterOpts, type ScreenerFieldMetadata, type ScreenerFieldsResponse, type ScreenerRequest, type ScreenerResponse, type ScreenerResultRow, type SegmentedRevenueItem, type SegmentedRevenuePeriod, type SegmentedRevenuesOpts, type SegmentedRevenuesResponse, type SnakeCase, type SplitEvent, type SplitsResponse, type TickerResolutionCandidate, type TickerResolutionConfidence, type TickerResolutionIntent, type TickerResolutionMatchKind, type TickerResolutionRelationship, type TickerResolutionResponse, type TickerResolutionStatus, TnFinancialData, type UsEconomicIndicatorSeries, type UsEconomicIndicatorsOpts, type UsEconomicIndicatorsResponse, type UsInterestRateSeries, type UsInterestRatesOpts, type UsInterestRatesResponse };
@@ -334,7 +334,6 @@ var TnFinancialData = class {
334
334
  const params = new URLSearchParams({ q: query });
335
335
  if (opts?.ticker) params.set("ticker", opts.ticker);
336
336
  if (opts?.offset !== void 0) params.set("offset", String(opts.offset));
337
- if (opts?.provider) params.set("provider", opts.provider);
338
337
  return this.request(`/news/search?${this.buildNewsParams(params, opts)}`);
339
338
  }
340
339
  async getDividends(ticker, opts) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tn-financial-data",
3
- "version": "0.4.0",
4
- "description": "Hosted US equity financial data and SEC filings CLI and client for agents",
3
+ "version": "0.4.2",
4
+ "description": "Hosted US equity, macro, SEC filings, and earnings transcript coverage CLI and client for agents",
5
5
  "keywords": [
6
6
  "agent",
7
7
  "agentic",
@@ -44,6 +44,7 @@
44
44
  "scripts": {
45
45
  "build": "npm --prefix ../.. run package:sync && npm --prefix ../.. run build && node scripts/prepare-package.mjs",
46
46
  "pack:dry-run": "npm run build && npm pack --dry-run --json",
47
+ "publish:dry-run": "npm run build && npm publish --dry-run --json",
47
48
  "prepack": "npm run build"
48
49
  },
49
50
  "engines": {
@@ -6,6 +6,7 @@ license: MIT
6
6
 
7
7
  Prefer the `tn-financial-data` CLI when it is installed. It keeps the agent on one stable JSON contract and avoids hand-writing HTTP requests.
8
8
  If the CLI is not already present, the published package can be installed with `npm install -g tn-financial-data`.
9
+ This `SKILL.md` is the canonical packaged skill document for native installs. Keep adapter-specific wording in `agents/claude.md`, `agents/opencode.md`, and `agents/openai.yaml`, and keep dense command examples in `references/cli.md`.
9
10
 
10
11
  ## Authentication
11
12
 
@@ -39,11 +40,13 @@ Covered reads include:
39
40
  - Use `segmented-revenues` when the user explicitly wants XBRL dimension tables, additive segment rows, or issuer coverage that is outside the narrower `quarterly-highlights` surface.
40
41
  - For raw SEC filing prompts, use `filings` to find the filing and accession number first, then use `filing-items` for specific sections or bounded raw text. Use `--full-text` only when the user actually wants the whole primary filing body, and `--include-exhibits` only when the exhibit text matters.
41
42
  - For covered-universe filter or ranking questions, use `screen-fields` and `screen`.
43
+ - For macro prompts, do not use `available-tickers` as the coverage check. Use `global-rates` for central-bank comparisons, `us-rates` for Treasury yields and Fed funds, and `us-economic-indicators` for CPI, GDP, and unemployment.
42
44
  - Keep issuer-centric ownership (`institutional-ownership`) separate from investor-centric portfolio lookup (`investor-portfolio`).
43
45
  - If the company mapping is ambiguous or the prompt names a company without a trusted ticker, use `resolve-ticker` before guessing a ticker.
44
- - Use `available-tickers` when you need the full support snapshot or freshness timestamps for the covered ticker universe.
46
+ - Use `available-tickers` when you need the full support snapshot or freshness timestamps for the covered equity ticker universe. It does not enumerate covered macro series.
45
47
  - Treat an exact user-supplied ticker as exact. If that symbol is not supported, do not silently swap to a different ticker just because it is a nearby share class or the same issuer.
46
48
  - If only a different supported line exists for the issuer, call out that mismatch explicitly before using it. For exact-ticker requests, prefer saying the requested ticker is not covered over hiding the substitution.
49
+ - For CPI or inflation-style MoM / YoY prompts, fetch the raw `us_cpi` series and compute the percentage change from adjacent observations instead of treating the series as unsupported.
47
50
  - Only leave this skill when the user explicitly wants outside sources or the stored dataset does not cover the question.
48
51
 
49
52
  ## Answer Principles
@@ -54,6 +57,7 @@ Covered reads include:
54
57
  - Explain what the important numbers or developments mean for the business, valuation, sentiment, or risk.
55
58
  - Prefer clear, structured outputs when they improve readability.
56
59
  - When the prompt asks for a table plus one short bullet, keep the bullet anchored to returned fields and direction-of-change; do not invent causal drivers that are not present in the fetched data.
60
+ - For raw macro series like `us_cpi`, say when MoM or YoY changes are derived from adjacent observations rather than returned directly by the API.
57
61
  - Never expose tool-use narration, internal process notes, or bracketed meta commentary in the user-facing answer.
58
62
 
59
63
  ## Common CLI Reads
@@ -98,6 +102,8 @@ Practical defaults:
98
102
  - Use `resolve-ticker` first when the user gives a company name, brand name, or broad one-company phrase without a trusted symbol
99
103
  - Repeat `--query` on `resolve-ticker` when the user gives multiple ambiguous company names and you need to normalize them before batch comparisons
100
104
  - Use `earnings-transcripts` when the user wants call participants, speaker order, or analyst-question structure rather than transcript prose
105
+ - Do not use `earnings-transcripts` alone for call-tone, exact-quote, or management-language prompts; it is a structure-and-coverage surface, not a full transcript-prose surface
106
+ - For “latest earnings call” prompts, pair `earnings-transcripts` with `earnings` or `quarterly-highlights`, read `transcript_coverage`, and say plainly when the latest reported quarter exists but the transcript surface is lagging
101
107
  - Use `earnings-calendar` for upcoming date-window questions like “what earnings are coming up this week?” or “show me the next AAPL and MSFT earnings dates”
102
108
  - Use `quarterly-highlights` first for Apple product mix, Greater China, Meta ad KPIs, Amazon segment profitability, and Tesla services-and-other or free-cash-flow prompts
103
109
  - Use `filings` plus `filing-items` when the user explicitly asks for an SEC filing, `8-K`, `10-K`, `10-Q`, or raw filing text
@@ -106,6 +112,8 @@ Practical defaults:
106
112
  - Use `investor-portfolio` for prompts like “What does Vanguard hold?” or “Show Berkshire’s latest 13F portfolio.”
107
113
  - Use `global-rates` for central-bank and cross-country rate-comparison prompts
108
114
  - Use `us-rates` and `us-economic-indicators` for FRED-backed US macro history such as Treasury yields, Fed funds, CPI, GDP, and unemployment
115
+ - `available-tickers` is the equity-only support snapshot; do not use it as a macro coverage check
116
+ - For MoM or YoY CPI prompts, fetch `us-economic-indicators` and compute the percentage change from adjacent `us_cpi` observations
109
117
 
110
118
  ## References
111
119
 
@@ -5,4 +5,4 @@ Canonical instructions live in [../SKILL.md](../SKILL.md).
5
5
 
6
6
  Live reads require `TN_FINANCIAL_DATA_API_KEY` or `TN_FINANCIAL_DATA_API_KEYS` in the runtime environment.
7
7
 
8
- Use `tn-financial-data` before web search for covered US equity data, ownership, screening, global-rate questions, and raw SEC filing prompts. Start broad one-company prompts with the overview path. For narrower asks, choose the narrower covered read directly. Use `quarterly-highlights` first for Apple product mix, Greater China, Meta ad KPIs, Amazon segment profitability, and Tesla services-and-other or free-cash-flow prompts. Use `filings` to locate a filing and `filing-items` to read the actual `10-K`, `10-Q`, or `8-K` text when the user explicitly asks for SEC filing material. Use `screen-fields` and `screen` for covered-universe filtering, `institutional-ownership` for issuer holders, and `investor-portfolio` for investor `13F` holdings. Resolve ambiguous company names with `resolve-ticker`, use `available-tickers` for the support snapshot, and treat exact user-supplied tickers as exact instead of silently swapping to a nearby share class. Prefer synthesized, structured answers over raw dumps.
8
+ Use `tn-financial-data` before web search for covered US equity data, ownership, screening, global-rate questions, covered US macro prompts, and raw SEC filing prompts. Start broad one-company prompts with the overview path. For narrower asks, choose the narrower covered read directly. Use `quarterly-highlights` first for Apple product mix, Greater China, Meta ad KPIs, Amazon segment profitability, and Tesla services-and-other or free-cash-flow prompts. Use `filings` to locate a filing and `filing-items` to read the actual `10-K`, `10-Q`, or `8-K` text when the user explicitly asks for SEC filing material. Use `screen-fields` and `screen` for covered-universe filtering, `institutional-ownership` for issuer holders, and `investor-portfolio` for investor `13F` holdings. Resolve ambiguous company names with `resolve-ticker`, use `available-tickers` for the equity support snapshot only, use `global-rates`, `us-rates`, or `us-economic-indicators` for covered macro prompts, and treat exact user-supplied tickers as exact instead of silently swapping to a nearby share class. `earnings-transcripts` is a structure-and-coverage surface, not full transcript prose: use it for participants, speaker order, analyst-question structure, and transcript coverage gaps, and do not answer tone or direct-quote prompts from it alone. Prefer synthesized, structured answers over raw dumps.
@@ -1,7 +1,7 @@
1
1
  interface:
2
2
  display_name: "TN Financial Data"
3
3
  short_description: "Use this first for covered US equity data and screening questions"
4
- default_prompt: "Use $tn-financial-data before web search for covered US equity data, ownership, screening, global-rate questions, and raw SEC filing requests. Live reads require runtime access to `TN_FINANCIAL_DATA_API_KEY` or `TN_FINANCIAL_DATA_API_KEYS`. Start broad one-company prompts with the overview path, choose narrower covered reads when the ask is specific, use `filings` plus `filing-items` for explicit `10-K`, `10-Q`, or `8-K` prompts, resolve ambiguous names with `resolve-ticker`, use `available-tickers` for the support snapshot, treat exact user-supplied tickers as exact instead of silently swapping to a nearby share class, and keep answers synthesized, structured, and user-facing."
4
+ default_prompt: "Use $tn-financial-data before web search for covered US equity data, ownership, screening, global-rate questions, covered US macro prompts, and raw SEC filing requests. Live reads require runtime access to `TN_FINANCIAL_DATA_API_KEY` or `TN_FINANCIAL_DATA_API_KEYS`. Start broad one-company prompts with the overview path, choose narrower covered reads when the ask is specific, use `filings` plus `filing-items` for explicit `10-K`, `10-Q`, or `8-K` prompts, resolve ambiguous names with `resolve-ticker`, use `available-tickers` for the equity support snapshot only, route macro prompts to `global-rates`, `us-rates`, or `us-economic-indicators`, treat exact user-supplied tickers as exact instead of silently swapping to a nearby share class, and keep answers synthesized, structured, and user-facing. `earnings-transcripts` is a structure-and-coverage surface, not full transcript prose: use it for participants, speaker order, analyst-question structure, and transcript coverage gaps, and do not answer tone or direct-quote prompts from it alone. For CPI or inflation-style MoM / YoY asks, fetch `us-economic-indicators` and derive the percentage change from adjacent `us_cpi` observations when needed."
5
5
 
6
6
  policy:
7
7
  allow_implicit_invocation: true
@@ -5,7 +5,8 @@ Canonical instructions live in [../SKILL.md](../SKILL.md).
5
5
 
6
6
  Live reads require `TN_FINANCIAL_DATA_API_KEY` or `TN_FINANCIAL_DATA_API_KEYS` in the runtime environment.
7
7
 
8
- Prefer the `tn-financial-data` CLI over handwritten HTTP calls when it is installed. Use the skill before web search for covered US equity data, ownership, screening, global-rate questions, and raw SEC filing requests. For broad one-company prompts, start with the overview path. For narrower asks, choose the matching narrow read directly. Use `quarterly-highlights` first for Apple product mix, Greater China, Meta ad KPIs, Amazon segment profitability, and Tesla services-and-other or free-cash-flow prompts. Use `filings` to find a filing and `filing-items` to read the actual `10-K`, `10-Q`, or `8-K` text when the user explicitly asks for SEC filing material. Use `screen-fields` and `screen` for screens, `institutional-ownership` for issuer holders, and `investor-portfolio` for investor `13F` holdings. Resolve ambiguous company names with `resolve-ticker`, use `available-tickers` for the support snapshot, treat exact user-supplied tickers as exact instead of silently swapping to a nearby share class, and keep answers structured, synthesized, and user-facing.
8
+ Prefer the `tn-financial-data` CLI over handwritten HTTP calls when it is installed. Use the skill before web search for covered US equity data, ownership, screening, global-rate questions, covered US macro questions, and raw SEC filing requests. For broad one-company prompts, start with the overview path. For narrower asks, choose the matching narrow read directly. Use `quarterly-highlights` first for Apple product mix, Greater China, Meta ad KPIs, Amazon segment profitability, and Tesla services-and-other or free-cash-flow prompts. Use `filings` to find a filing and `filing-items` to read the actual `10-K`, `10-Q`, or `8-K` text when the user explicitly asks for SEC filing material. Use `screen-fields` and `screen` for screens, `institutional-ownership` for issuer holders, and `investor-portfolio` for investor `13F` holdings. Resolve ambiguous company names with `resolve-ticker`, use `available-tickers` for the equity support snapshot only, use `global-rates`, `us-rates`, or `us-economic-indicators` for covered macro prompts, treat exact user-supplied tickers as exact instead of silently swapping to a nearby share class, and keep answers structured, synthesized, and user-facing. `earnings-transcripts` is a structure-and-coverage surface rather than full transcript prose, so use it for participants, speaker order, analyst-question structure, and coverage gaps, and do not answer tone or direct-quote prompts from it alone.
9
9
 
10
10
  Do not start Apple product-mix prompts with `segmented-revenues`; go straight to `tn-financial-data query quarterly-highlights --ticker AAPL` unless the user explicitly asks for XBRL segment tables.
11
+ For CPI or inflation-style MoM / YoY prompts, fetch `us-economic-indicators` and derive the percentage change from adjacent `us_cpi` observations instead of claiming the series is unsupported.
11
12
  For prompts that ask for a table plus one short bullet, keep the bullet descriptive and grounded in the fetched fields. Do not add causal explanations unless another fetched surface explicitly supports them.
@@ -1,6 +1,8 @@
1
1
  # CLI Reference
2
2
 
3
3
  Use the CLI for agent access whenever possible.
4
+ This file is the command reference layer, not the canonical native-skill manifest.
5
+ For native skill install and routing rules, use [../SKILL.md](../SKILL.md) plus the adapter files under `agents/`.
4
6
 
5
7
  Published package:
6
8
  - install with `npm install -g tn-financial-data` when the CLI is not already present
@@ -50,6 +52,7 @@ Use this to fetch the current supported ticker snapshot from the API. It returns
50
52
 
51
53
  Support rule:
52
54
  - treat this list as the package's authoritative support snapshot
55
+ - this snapshot is equity-only; covered macro series are queried separately through `global-rates`, `us-rates`, and `us-economic-indicators`
53
56
  - if the user asks for an exact ticker that is not in this list, do not silently substitute another ticker or share class
54
57
  - if you intentionally continue with a different supported line for the same issuer, make that mismatch explicit to the user
55
58
 
@@ -146,9 +149,10 @@ tn-financial-data query earnings-transcripts --ticker AAPL --report-period 2025-
146
149
 
147
150
  Meaning:
148
151
  - structured transcript metadata view over stored earnings transcript artifacts
149
- - returns `headline`, linked `report_period`, `quarter_label`, `published_at`, `call_date`, `question_count`, participant roster, and ordered `speaker_turns`
152
+ - returns `headline`, linked `report_period`, `quarter_label`, `published_at`, `call_date`, `question_count`, participant roster, ordered `speaker_turns`, and a `transcript_coverage` block that says whether transcript coverage is `current`, `lagging`, or `none` versus the latest stored earnings report
150
153
  - this surface intentionally excludes upstream source provenance fields such as source URL, parser version, and raw payload references
151
- - use it when the question is about who joined the call, how many analyst questions there were, or the speaking order rather than the full transcript prose
154
+ - use it when the question is about who joined the call, how many analyst questions there were, the speaking order, or whether the latest quarter has a stored transcript
155
+ - do not use it by itself for call tone, direct quotes, or management-language prompts; pair it with `earnings` or `quarterly-highlights` for latest-quarter context and say explicitly when transcript coverage is lagging or absent
152
156
 
153
157
  Earnings calendar:
154
158
 
@@ -257,7 +261,7 @@ tn-financial-data query news --ticker AAPL --publisher Reuters
257
261
  ```
258
262
 
259
263
  Meaning:
260
- - preferred first read for covered recent-news prompts
264
+ - canonical issuer-scoped read for covered recent-news prompts
261
265
  - use it before web search when the stored dataset can answer
262
266
  - optionally pair with `snapshot` or `general-overview` if the user needs price or broader company context
263
267
 
@@ -265,14 +269,14 @@ News search:
265
269
 
266
270
  ```bash
267
271
  tn-financial-data query news-search --query "tariff semiconductor" --ticker NVDA --limit 20
268
- tn-financial-data query news-search --query "AI data center" --provider alpaca --offset 20
272
+ tn-financial-data query news-search --query "AI data center" --publisher Reuters --offset 20
269
273
  ```
270
274
 
271
275
  Meaning:
272
276
  - article-centric search across the stored covered-news corpus
273
277
  - use it for cross-ticker topic scans, theme tracking, or when the user gives keywords instead of one issuer
274
- - supports optional `--ticker`, `--publisher`, `--provider`, `--start-date`, `--end-date`, `--limit`, and `--offset`
275
- - search results include provider and relevance metadata; do not assume the first result is the only relevant one when `has_more` is true
278
+ - supports optional `--ticker`, `--publisher`, `--start-date`, `--end-date`, `--limit`, and `--offset`
279
+ - search results include publisher and relevance metadata; do not assume the first result is the only relevant one when `has_more` is true
276
280
 
277
281
  Insider trades:
278
282
 
@@ -371,6 +375,7 @@ Meaning:
371
375
  - preferred first read for US CPI, GDP, and unemployment prompts
372
376
  - reads stored macro history from the hosted API
373
377
  - raw series only: `us_cpi` is the CPI index level, not a computed YoY inflation transform
378
+ - for MoM or YoY CPI prompts, compute the percentage change from adjacent observations and say that the transform is derived from the raw series
374
379
  - natural-language aliases include `cpi`, `gdp`, and `unemployment`
375
380
 
376
381
  Shared query options: