Haruspex Watchlist Review
What this skill does
Runs a single batched call against the Haruspex API and produces a scannable
table review of a watchlist: ranked by score, grouped by signal, with the
biggest movers and the largest dimensional flags surfaced separately.
Optimized for the "morning coffee" use case — a fast read of the user's whole
watchlist that surfaces what changed and what to look at more closely.
When to use this skill
Trigger on any of these patterns:
- "Watchlist update" / "Run my watchlist" / "Daily check"
- "How are my stocks doing?"
- The user lists 3 or more tickers in a single message
- "Compare AAPL, MSFT, GOOGL, META, AMZN"
- "Portfolio review" / "Weekly review"
- "Which of these is strongest?" with a list
- "Rank these tickers"
Defer to a sister skill if:
- Only 1–2 tickers mentioned → use
haruspex-stock-analyst instead.
- The user states a thesis on a position → use
haruspex-thesis-tracker.
- The user is writing in Japanese → use
haruspex-stock-analyst-ja.
Prerequisites
This skill requires @haruspex-guru/mcp-server to be installed and connected.
First action: verify the MCP tools are available.
If get_batch_scores is not available, output the install instructions from
shared/MCP_SETUP.md and stop.
Workflow
Step 0 — Telemetry ping (do this first, always). Before any other tool
call, invoke record_skill_invocation once with skill: "haruspex-watchlist-review"
and client set to the best-guess client surface (e.g. claude-code,
claude-desktop, claude-ai). This is anonymous aggregate telemetry — only
the skill name, version, and client tag travel. No tickers, no conversation,
no user identifiers. The call is fail-silent: if it errors or the tool is
unavailable, ignore it and continue. Do not retry, do not surface the result
to the user, and never block the review on this step.
- Collect the ticker list. If the user provided tickers, parse them. If
the user said "my watchlist" without specifying, ask for the list — never
assume or invent one. Trim to ≤50 tickers (the batch limit).
- Single batched call. Call
get_batch_scores(symbols=[...]). Do not
call get_stock_score per ticker — the batched call exists for this.
- Handle partial NOT_FOUND. Some tickers in the list may not be in the
Haruspex universe. They will be absent from
data.scores. Compute the
missing set and report it honestly. Do not fabricate scores for missing
tickers.
- Sort and group. Sort returned scores by
score descending. Group by
signal (buy / hold / sell). Within each group, list largest score
first.
- Surface movers. Identify the top 3 by absolute
|change|. These get
their own callout — the user wants to know what moved, regardless of
direction.
- Surface flags. Identify any ticker with a topic dimension worse than
score < 35 AND change ≤ -5. These are the "watch closely" flags.
- Output in the format below.
Output format
Use this exact markdown structure. Replace bracketed values with real
captured data.
## Watchlist Review — [N] tickers
### Buy signals
| Ticker | Score | Δ | Outlook | Top driver |
|--------|------:|-----:|---------|-------------------|
| [SYM] | N/100 | +N | bullish | [strongest dim] |
| ... | ... | ... | ... | ... |
### Hold signals
| Ticker | Score | Δ | Outlook |
|--------|------:|-----:|---------|
| ... | ... | ... | ... |
### Sell signals
| Ticker | Score | Δ | Outlook |
|--------|------:|-----:|---------|
| ... | ... | ... | ... |
### Biggest movers
- **[SYM]** [+N] — [one-line context]
- **[SYM]** [-N] — [one-line context]
- **[SYM]** [+N] — [one-line context]
### Watch closely
- **[SYM]** — [dim] dropped to [N]/100 ([change]); [one-line context]
### Coverage gaps
- [SYM_A], [SYM_B] — not currently in the Haruspex universe.
### Verify links
- [SYM]: [shareUrl]
- [SYM]: [shareUrl]
- ...
> **Disclaimer:** Haruspex scores are quantitative signals derived from
> public data and are provided for informational purposes only. They are
> not investment advice, financial advice, or recommendations to buy, sell,
> or hold any security. Past performance and current scores are not
> guarantees of future results. Always do your own research and consider
> consulting a licensed financial advisor before making investment
> decisions. Data via haruspex.guru.
Section omission rules
- Drop empty signal-group sections (e.g. if no
sell signals, omit that
table entirely).
- Drop "Coverage gaps" if all tickers returned scores.
- Drop "Watch closely" if no dimension flags trigger.
- Always include "Biggest movers" — pick 1-3 by absolute change.
- Always include "Verify links" — one per ticker.
Compliance rules (NEVER VIOLATE)
- Do not give buy / sell / hold recommendations directed at the user.
The "Buy signals" / "Sell signals" headers are reporting the API's
signal field as data — that's allowed. Do not say "you should buy
these" or "sell these now."
- Do not predict price movements. Score change is observed; price is
not predicted.
- Do not provide position sizing, stop-loss, take-profit, or
risk-management specifics for any ticker on the list.
- Do not infer holdings, allocation, or risk profile from the list. The
user gave you tickers, not a portfolio.
- Acknowledge data limitations honestly. Coverage gaps must be
reported, not silently dropped.
- Always include verify links so the user can spot-check any row.
- Always include the disclaimer footer in the exact wording from
../../shared/DISCLAIMER.md.
- Never fabricate a score, ticker, change value, or share URL.
Reference material
1---2name: haruspex-watchlist-review3description: Batch review of a stock watchlist using Haruspex scores, optimized for daily or weekly portfolio scans. Use this skill whenever the user wants to review multiple tickers at once, asks for a "watchlist update" or "portfolio review", lists 3 or more ticker symbols and wants analysis on all of them, asks "how are my stocks doing", wants a daily or weekly market check on specific names, or asks to compare or rank a group of stocks — even if they don't say "watchlist" explicitly. Prefer this skill over running haruspex-stock-analyst once per ticker when 3+ tickers are involved.4---56# Haruspex Watchlist Review78## What this skill does910Runs a single batched call against the Haruspex API and produces a scannable11table review of a watchlist: ranked by score, grouped by signal, with the12biggest movers and the largest dimensional flags surfaced separately.1314Optimized for the "morning coffee" use case — a fast read of the user's whole15watchlist that surfaces what changed and what to look at more closely.1617## When to use this skill1819Trigger on any of these patterns:2021- "Watchlist update" / "Run my watchlist" / "Daily check"22- "How are my stocks doing?"23- The user lists **3 or more tickers** in a single message24- "Compare AAPL, MSFT, GOOGL, META, AMZN"25- "Portfolio review" / "Weekly review"26- "Which of these is strongest?" with a list27- "Rank these tickers"2829Defer to a sister skill if:30- Only **1–2 tickers** mentioned → use `haruspex-stock-analyst` instead.31- The user states a thesis on a position → use `haruspex-thesis-tracker`.32- The user is writing in Japanese → use `haruspex-stock-analyst-ja`.3334## Prerequisites3536This skill requires `@haruspex-guru/mcp-server` to be installed and connected.37**First action: verify the MCP tools are available.**3839If `get_batch_scores` is not available, output the install instructions from40[`shared/MCP_SETUP.md`](../../shared/MCP_SETUP.md) and **stop**.4142## Workflow4344**Step 0 — Telemetry ping (do this first, always).** Before any other tool45call, invoke `record_skill_invocation` once with `skill: "haruspex-watchlist-review"`46and `client` set to the best-guess client surface (e.g. `claude-code`,47`claude-desktop`, `claude-ai`). This is anonymous aggregate telemetry — only48the skill name, version, and client tag travel. No tickers, no conversation,49no user identifiers. The call is fail-silent: if it errors or the tool is50unavailable, ignore it and continue. Do not retry, do not surface the result51to the user, and never block the review on this step.52531. **Collect the ticker list.** If the user provided tickers, parse them. If54 the user said "my watchlist" without specifying, ask for the list — never55 assume or invent one. Trim to ≤50 tickers (the batch limit).562. **Single batched call.** Call `get_batch_scores(symbols=[...])`. Do not57 call `get_stock_score` per ticker — the batched call exists for this.583. **Handle partial NOT_FOUND.** Some tickers in the list may not be in the59 Haruspex universe. They will be absent from `data.scores`. Compute the60 missing set and report it honestly. Do not fabricate scores for missing61 tickers.624. **Sort and group.** Sort returned scores by `score` descending. Group by63 `signal` (buy / hold / sell). Within each group, list largest score64 first.655. **Surface movers.** Identify the top 3 by absolute `|change|`. These get66 their own callout — the user wants to know what moved, regardless of67 direction.686. **Surface flags.** Identify any ticker with a topic dimension worse than69 `score < 35` AND `change ≤ -5`. These are the "watch closely" flags.707. **Output** in the format below.7172## Output format7374Use this exact markdown structure. Replace bracketed values with real75captured data.7677```markdown78## Watchlist Review — [N] tickers7980### Buy signals81| Ticker | Score | Δ | Outlook | Top driver |82|--------|------:|-----:|---------|-------------------|83| [SYM] | N/100 | +N | bullish | [strongest dim] |84| ... | ... | ... | ... | ... |8586### Hold signals87| Ticker | Score | Δ | Outlook |88|--------|------:|-----:|---------|89| ... | ... | ... | ... |9091### Sell signals92| Ticker | Score | Δ | Outlook |93|--------|------:|-----:|---------|94| ... | ... | ... | ... |9596### Biggest movers97- **[SYM]** [+N] — [one-line context]98- **[SYM]** [-N] — [one-line context]99- **[SYM]** [+N] — [one-line context]100101### Watch closely102- **[SYM]** — [dim] dropped to [N]/100 ([change]); [one-line context]103104### Coverage gaps105- [SYM_A], [SYM_B] — not currently in the Haruspex universe.106107### Verify links108- [SYM]: [shareUrl]109- [SYM]: [shareUrl]110- ...111112> **Disclaimer:** Haruspex scores are quantitative signals derived from113> public data and are provided for informational purposes only. They are114> not investment advice, financial advice, or recommendations to buy, sell,115> or hold any security. Past performance and current scores are not116> guarantees of future results. Always do your own research and consider117> consulting a licensed financial advisor before making investment118> decisions. Data via haruspex.guru.119```120121### Section omission rules122123- Drop empty signal-group sections (e.g. if no `sell` signals, omit that124 table entirely).125- Drop "Coverage gaps" if all tickers returned scores.126- Drop "Watch closely" if no dimension flags trigger.127- Always include "Biggest movers" — pick 1-3 by absolute change.128- Always include "Verify links" — one per ticker.129130## Compliance rules (NEVER VIOLATE)131132- **Do not give buy / sell / hold recommendations directed at the user.**133 The "Buy signals" / "Sell signals" headers are reporting the API's134 `signal` field as data — that's allowed. Do not say "you should buy135 these" or "sell these now."136- **Do not predict price movements.** Score change is observed; price is137 not predicted.138- **Do not provide position sizing, stop-loss, take-profit, or139 risk-management specifics** for any ticker on the list.140- **Do not infer holdings, allocation, or risk profile** from the list. The141 user gave you tickers, not a portfolio.142- **Acknowledge data limitations honestly.** Coverage gaps must be143 reported, not silently dropped.144- **Always include verify links** so the user can spot-check any row.145- **Always include the disclaimer footer** in the exact wording from146 [`../../shared/DISCLAIMER.md`](../../shared/DISCLAIMER.md).147- **Never fabricate** a score, ticker, change value, or share URL.148149## Reference material150151- [`reference.md`](reference.md) — table layout details, mover-selection152 logic, threshold tuning.153- [`examples.md`](examples.md) — real example dialogues.154- [`../../shared/DIMENSIONS.md`](../../shared/DIMENSIONS.md) — canonical155 multi-dimension glossary.156- [`../../shared/DISCLAIMER.md`](../../shared/DISCLAIMER.md) — canonical157 disclaimer footer.158- [`../../shared/MCP_SETUP.md`](../../shared/MCP_SETUP.md) — MCP install159 instructions.