agentsclimarketplace

Compare

Skill ternary-ai/skills/skills/basic/compare

A collection of agent skills for investment finance

Install
npx -y skills add ternary-ai/skills --skill compare

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Compare two or more tickers, segments, or time periods across one or more metrics. Fetches data for every comparison target via tools, builds a summary table, and optionally embeds it in the Thesis. Use whenever the user asks to compare, benchmark, rank, or contrast — e.g. "compare MVIS vs peers", "how does MVIS revenue compare to LAZR?", "benchmark margins across sector".

SKILL.md

6.4 KB, as published. Nobody here has run it

Compare

Overview

Four-step workflow: frame → fetch → table → return. Act on defaults immediately. Do NOT ask before producing the first result. The user will revise if needed.


DEFAULTS — apply these unless the user states otherwise

DimensionDefault
MetricsRevenue, Gross Margin, Net Income (3-row quick table)
PeriodLatest single quarter (quarterlyReports[0])
Unit$M — auto-upgrade to $B if all values exceed 1 000
TargetsTickers named in the message; if "vs peers" → use peers list from <stock_context>
Section heading## Peer Comparison — {Metrics} (Latest Quarter, $M)

Only deviate from a default when the user explicitly names something different. Never ask about defaults.


Step 1 — Frame (thought only, no tool call)

In your reasoning state:

  1. Targets list (from message or peers in stock_context).
  2. Metric(s) — apply default if not specified.
  3. Period — apply default if not specified.
  4. Which tool each metric requires (see Data Source Map in Step 2).

Only call request_user_input when targets cannot be determined at all (e.g. user says "compare" with no tickers and no peers in context).


Step 2 — Collect Data for Every Target

Fetch sequentially: one tool call per target. Check <stock_context> / <acquired_data> first — skip the call if the value is already there.

Critical: Use the exact tool specified in the data source map below for each metric family. The defaults (Revenue, Gross Margin, Net Income) ALL require INCOME_STATEMENT, not OVERVIEW.

Data Source Map

Metric familyPrimary toolKey field(s)
Revenue, Gross Profit, Operating Income, Net Income, EBITDAINCOME_STATEMENT(symbol=…)totalRevenue, grossProfit, operatingIncome, netIncome
Free Cash Flow, Operating Cash Flow, CapExCASH_FLOW(symbol=…)operatingCashflow, capitalExpenditures
EPS (actual + estimate), beat/missEARNINGS(symbol=…)reportedEPS, estimatedEPS, surprise
Total Debt, Cash, Book Value, Current RatioBALANCE_SHEET(symbol=…)totalDebt, cashAndCashEquivalentsAtCarryingValue, totalShareholderEquity
Market price, P/E, Market Cap, BetaOVERVIEW(symbol=…)MarketCapitalization, PERatio, Beta, 52WeekHigh, 52WeekLow
Latest price / daily returnGLOBAL_QUOTE(symbol=…)price, changePercent

Fallback chain

  1. <stock_context> / <acquired_data> — use if present.
  2. Primary tool from the map above.
  3. On failure: CASH_FLOW for FCF-adjacent; OVERVIEW for market metrics.
  4. All tools fail for a target → cell = N/A. Never abort the whole comparison.

Rules

  • One tool call at a time, no preamble.
  • quarterlyReports for quarterly; annualReports for annual.
  • Normalise all values to the same unit before building the table.

Step 3 — Build the Summary Table

Construct a clean markdown comparison table.

Table format

| Metric | {Target A} | {Target B} | {Target C} | Notes |
|---|---|---|---|---|
| Revenue (TTM, $M) | 123.4 | 456.7 | 89.0 | |
| Gross Margin | 42% | 61% | 38% | |
| Net Income (TTM, $M) | (12.1) | 34.5 | (5.6) | Losses in () |
| EPS (last Q) | (0.08) | 0.22 | (0.15) | |

Formatting rules

  • One row per metric, one column per target.
  • Use the same period for every target in a given row. If a target has no data for that period, show N/A.
  • Losses and negatives in parentheses: (12.1).
  • Percentages to one decimal place: 42.3%.
  • Dollar values in $M (or $B if all values > 1000) to one decimal place.
  • Multiples to one decimal place: 18.4x.
  • Add a Notes column only when a cell needs qualification (e.g. "FY estimate", "TTM").
  • Do NOT add a prose paragraph restating the numbers — the table is self-contained.
  • Add a single bold callout line below the table identifying the standout finding: **Standout:** {Target X} leads on {metric} by {magnitude} vs peers.

Section heading

Place the table under:

## Peer Comparison — {Metric(s)} ({Period})

Optional: add a multi-series line chart

If the comparison is time-series (multiple periods, not a single snapshot), append a chart-line multi-series block immediately after the table using the format from chart-writeup Step 5 → Multi-series. Use null for missing periods.

Example for quarterly revenue across 4 peers:

{
  "title": "Quarterly Revenue — Peer Comparison ($M)",
  "unit": "$M",
  "labels": ["2024-Q1", "2024-Q2", "2024-Q3", "2024-Q4"],
  "series": [
    { "label": "LAZR", "values": [20.97, 16.45, 15.49, 22.48] },
    { "label": "INVZ", "values": [null,  null,  null,  6.03]  },
    { "label": "OUST", "values": [null,  null,  null,  30.09] }
  ]
}

Step 4 — Return Results

Populate the output JSON:

  • thesis: include the full updated thesis with the new ## Peer Comparison section appended. Preserve all prior content.
  • chat: one sentence stating what was compared, how many targets, and the key takeaway.
  • assessment: one sentence describing what was just done.
  • skill: "compare"

When data is missing for a target

  • Mark that cell N/A — do NOT omit the row or the target column.
  • Mention missing targets briefly in chat only: "AEVA data unavailable from API."
  • Never add disclaimers, caveats, or "Note:" blocks inside the thesis table.

Quick Reference — Common Comparison Patterns

User asksTargetsMetricTool
"compare revenue"named tickerstotalRevenue quarterlyINCOME_STATEMENT × N
"benchmark margins"named tickersgrossProfit / totalRevenueINCOME_STATEMENT × N
"how does EPS compare"named tickersreportedEPSEARNINGS × N
"compare FCF"named tickersoperatingCashflow − capitalExpendituresCASH_FLOW × N
"vs peers"ticker + FMP peers from <stock_context>as specifiedappropriate tool × N
"sector comparison"tickers from <stock_context> peers listas specifiedappropriate tool × N

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.