portfolio-review
You hand over positions + book value. The skill runs the full 7-tool
review chain in the right order, threads the shared context (tickers,
weights, lookback windows), skips ETFs on the equities-only tools
(earnings, 8-K), and stitches the outputs into a single briefing.
The headline block is the read-first summary: regime, rotation theme,
next earnings, next macro event, top corporate action, and the
rebalance verdict in six lines. Full per-section detail follows.
When to invoke
- The operator says "review my portfolio", "run the full workflow",
"portfolio check", "what should I do with my book"
- Weekly / monthly portfolio hygiene
- After a material market move to sanity-check the book
- Before a large trade to see whether the new sizing survives the
variance-share cap
What you need
MASSIVE_API_KEY (Stocks Starter minimum). One skill in the chain
(corporate-actions-scanner) also hits SEC EDGAR, which is free.
- Positions in the shape
TICKER=WEIGHT,TICKER=WEIGHT,... where
weights sum to ~1.0.
- Book value in dollars for the rebalancer's trade-ticket sizing.
What you get back
Layer 1 canonical JSON with a sections map keyed by the sub-
skill name, each holding the full sub-payload. The headline block
distills one fact from each. errors array captures per-section
failures without aborting the run.
Layer 2 rendered briefing. Header, headline block (7 lines), then
each section rendered by its own render() helper under a titled
divider. See references/rendering.md.
How it works
- Parse positions, split into equities vs ETFs (ETFs skipped for
earnings + 8-K scanners).
- Run the 7 sub-skills in sequence, sharing a single MassiveClient
for connection reuse:
market-regime
sector-rotation-signal
risk-report
earnings-blackout (equities only)
macro-event-calendar
corporate-actions-scanner (equities only)
portfolio-rebalancer (skippable via include_rebalance=False)
- Build the headline by pulling the top-fact from each sub-payload.
- Emit the composite payload with per-section detail and errors.
Foundations used
- All 7 sub-skills. This is a pure composition — no new data pulls
beyond what the sub-skills already fetch.
Endpoints used
- Aggregate of every sub-skill's endpoints. Chain sharing a
MassiveClient means daily-aggs fetches are cached per ticker
across sub-skills where the cache applies.
Doesn't handle (yet)
- Fixed income context. No rates/credit read yet (waiting on
fixed-income-context, Part 3 #4).
- Historical analogs. Not included in the default chain because
regime-conditional forecasting is thesis-driven, not portfolio
review. Callers who want it can invoke historical-analog-finder
directly.
- Options context. Neither options-flow nor options-structure-
analyzer are part of the default chain; they're view-dependent,
not review-dependent.
- No changed-since-last-run diff. Every review is stateless. A
future version could take a prior review payload and highlight
what moved.
1---2name: portfolio-review3description: Composite skill that chains market-regime, sector-rotation-signal, risk-report, earnings-blackout, macro-event-calendar, corporate-actions-scanner, and portfolio-rebalancer into one call. Turns the manual 6-command portfolio-review workflow into a single invocation. Emits a headline summary that pulls the most decision-relevant fact from each section plus the full per-section detail below. Use when the operator asks "review my portfolio" or "run the full workflow on my book."4---56# portfolio-review78You hand over positions + book value. The skill runs the full 7-tool9review chain in the right order, threads the shared context (tickers,10weights, lookback windows), skips ETFs on the equities-only tools11(earnings, 8-K), and stitches the outputs into a single briefing.1213The headline block is the read-first summary: regime, rotation theme,14next earnings, next macro event, top corporate action, and the15rebalance verdict in six lines. Full per-section detail follows.1617## When to invoke1819- The operator says "review my portfolio", "run the full workflow",20 "portfolio check", "what should I do with my book"21- Weekly / monthly portfolio hygiene22- After a material market move to sanity-check the book23- Before a large trade to see whether the new sizing survives the24 variance-share cap2526## What you need2728- `MASSIVE_API_KEY` (Stocks Starter minimum). One skill in the chain29 (corporate-actions-scanner) also hits SEC EDGAR, which is free.30- Positions in the shape `TICKER=WEIGHT,TICKER=WEIGHT,...` where31 weights sum to ~1.0.32- Book value in dollars for the rebalancer's trade-ticket sizing.3334## What you get back3536**Layer 1 canonical JSON** with a `sections` map keyed by the sub-37skill name, each holding the full sub-payload. The `headline` block38distills one fact from each. `errors` array captures per-section39failures without aborting the run.4041**Layer 2 rendered briefing**. Header, headline block (7 lines), then42each section rendered by its own `render()` helper under a titled43divider. See [`references/rendering.md`](./references/rendering.md).4445## How it works46471. Parse positions, split into equities vs ETFs (ETFs skipped for48 earnings + 8-K scanners).492. Run the 7 sub-skills in sequence, sharing a single MassiveClient50 for connection reuse:51 1. `market-regime`52 2. `sector-rotation-signal`53 3. `risk-report`54 4. `earnings-blackout` (equities only)55 5. `macro-event-calendar`56 6. `corporate-actions-scanner` (equities only)57 7. `portfolio-rebalancer` (skippable via `include_rebalance=False`)583. Build the headline by pulling the top-fact from each sub-payload.594. Emit the composite payload with per-section detail and errors.6061## Foundations used6263- All 7 sub-skills. This is a pure composition — no new data pulls64 beyond what the sub-skills already fetch.6566## Endpoints used6768- Aggregate of every sub-skill's endpoints. Chain sharing a69 MassiveClient means daily-aggs fetches are cached per ticker70 across sub-skills where the cache applies.7172## Doesn't handle (yet)7374- **Fixed income context.** No rates/credit read yet (waiting on75 fixed-income-context, Part 3 #4).76- **Historical analogs.** Not included in the default chain because77 regime-conditional forecasting is thesis-driven, not portfolio78 review. Callers who want it can invoke historical-analog-finder79 directly.80- **Options context.** Neither options-flow nor options-structure-81 analyzer are part of the default chain; they're view-dependent,82 not review-dependent.83- **No changed-since-last-run diff.** Every review is stateless. A84 future version could take a prior review payload and highlight85 what moved.