---
title: "Daily Market Brief"
description: "The markets-specific daily AI brief — stanced thematic items with source attribution, analytical framework awareness, and freshness context."
---

The **Daily Market Brief** panel (internal id `daily-market-brief`) is the markets-focused sibling of the [Latest Brief](/panels/latest-brief) panel. Instead of a world-intelligence digest, it produces a stanced, thematic take on today's markets — each item labelled `Bullish`, `Defensive`, or `Neutral`, with source attribution and framework context.

## What the panel shows

A list of brief items grouped by theme. Each item shows:

- **Stance label** — `Bullish` / `Defensive` / `Neutral` (from `stanceLabel()` in `src/components/DailyMarketBriefPanel.ts`).
- **Narrative** — the brief's commentary on that theme.
- **Source chips** — attribution for the signals that fed the item.
- **Freshness** — top-of-panel footer using `describeFreshness()` to show how recent the underlying brief is, and whether the render came from a `live` fetch or the `cached` path (typed `BriefSource = 'live' | 'cached'`).

A **Framework selector** at the top lets PRO users re-generate the brief under a different analytical framework (client-generated analysis only; the note string spells this out).

Panel id is `daily-market-brief`; canonical component is `src/components/DailyMarketBriefPanel.ts`. Title per `src/config/panels.ts:51`.

## How you reach it

- **Cmd+K**: type *brief* or *market brief*.
- **Availability by variant**: registered and enabled by default in the **full/geopolitical** and **finance** variants, both as `premium: 'locked'`. Not present in the tech, commodity, or happy variants.

## Data sources

Generated by the forecast pipeline and read through `@/services/daily-market-brief`. The underlying feed is composed from today's market signals (quotes, commodity prices, macro signals, sector moves, prediction markets). Issue timestamps are rendered in the panel owner's timezone via `formatGeneratedTime()`.

## Refresh cadence

Daily cadence, refreshed as part of the forecast cron. The panel surfaces `describeFreshness()` so the reader can see the age of the current brief directly; a stale fetch paints the source badge as `cached`.

## Tier & gating

**PRO (hard-locked).** `premium: 'locked'` in `src/config/panels.ts:51`. `isPanelEntitled` unlocks it when **either** a valid `WORLDMONITOR_API_KEY` is present **or** `isPro` is true (`daily-market-brief` is in the `apiKeyPanels` allowlist at `src/config/panels.ts:973`).

## API reference

- [Intelligence service](/api/IntelligenceService.openapi.yaml) — the backing family for LLM-composed daily content.
- Related: [Latest Brief](/panels/latest-brief) — world-intelligence equivalent; same PRO gating semantics, different domain.
