Skip to main content
A decision brief is the context a user needs to think about one symbol, with none of the trade advice. The spine is stock_searchstock_overview; add stock_insider, stock_filings, or stock_financials only when the prompt asks for it. This is a context product, not an advisor: report what the data says, never tell the user to buy, sell, hold, or size anything.

The spine

stock_overview is the body of the brief: it returns the latest financials, the valuation block, and growth rates in one call. For a plain “give me a brief,” that is the whole job — stock_financials, stock_insider, and stock_filings are depth you add on request.

Worked example: a brief on Apple

From stock_overview { "symbol": "AAPL" } (trimmed to the fields the brief uses):
stock_overview (trimmed)

The brief this supports

Answer first, then the facts, then a provenance line that separates the two clocks, then the calls used:
Apple grew both revenue and earnings over its last fiscal year and trades at a premium multiple. Revenue rose about 6.4% and net income about 19.5% year over year. It trades at a trailing P/E of roughly 39.5, a free-cash-flow yield near 2.3%, and a dividend yield around 0.35%. Provenance: the growth figures are SEC-filed fundamentals (as_of.sec 2026-06-26). The P/E and yields are computed_from_prices — fundamentals against a market close on 2026-07-01 — so they move with the price, not the filings. Calls used: stock_search, stock_overview. This is context, not advice.
Two things make that a good brief rather than a generated one: it keeps the two clocks separate (the filing-based growth vs. the price-based multiples), and it labels the price-derived multiples as such instead of implying the filing states them.

Adding insider activity

If the prompt asks about insiders, add stock_insider. The response is a faithful transcription of Form 4s (provenance: "sec_filing") plus a summary. Here is a real result for a different company, NVIDIA:
stock_insider symbol=NVDA (trimmed)
Read it faithfully: over the window there were 0 buys and 2 sells across 6 insiders, netting about -877,734 shares. shares is a decimal string; code is the SEC transaction code (resolve it in the stock_reference catalogs). Report the net direction, keep the sign, and do not turn a routine sale into a signal.

When the data says “no answer”

If stock_search returns is_covered: false with ingestion_pending, the symbol is real but not yet ingested — say the fundamentals are not available yet and stop. If a value inside the brief is a refusal (unavailable is present), report the gap; do not fill it with a guess. A brief that admits a gap is more useful than one that invents.

Agent recipes

Reusable prompt-to-call sequences and answer templates.