Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.chartcastr.com/llms.txt

Use this file to discover all available pages before exploring further.

A briefing has three layers of AI text. Each layer is intentionally narrow in scope so prompt cost stays predictable and the results are easy to reason about.

The three AI layers

LayerWhere it livesInputsCost shape
AI titlesBriefing.aiTitle + BriefingRow.aiTitleBriefing description, row items, item summariesSingle batched Haiku call, ~500–1,000 input / ~150 output tokens.
Row commentaryBriefingRowContent.aiCommentaryShort/Long + aiHighlightsJust the items inside that row + their latest Pulse summaryOne call per row, bounded concurrency (3 in flight).
Overall reviewBriefingContent.aiSummaryShort/Long + aiHighlightsThe completed row commentaries + each item’s short summaryOne call per save, after all rows are done.

Overall review (the “big picture”)

The Overall Review sits at the top of the composer and on Page 2 of the PDF. It synthesises across rows — calling out themes that show up in multiple places, contradictions between rows, and what the user should pay attention to. It is regenerated on every save — there is no skip path. Even if every row was reused from cache, the overall summary still runs because (a) it depends on the row outputs, which may have shifted in tone, and (b) it’s a single small call, so the savings would be marginal. The model gets:
  • The briefing name and description
  • For each row: title, the long commentary, the highlights
  • For each item across all rows: the short summary
It produces:
  • aiSummaryShort — a 2-sentence executive summary
  • aiSummaryLong — the body of the “Big Picture” page (4–8 sentences)
  • aiHighlights — 2–4 bullet points
The overall review is text-in / text-out — no images. Row commentary is also text-only in v1. The only place chart images are read by the AI is at the per-source Pulse layer, before the briefing ever sees them.

Row commentary

Each row’s aiCommentaryLong is the analyst-style text shown on that row’s card in the composer and under each row’s “Cross-analysis” heading in the PDF. It synthesises just the items inside that row — there’s no leakage from other rows. Row commentary uses a hash-based skip: if the row’s items, their Pulse content IDs, and the row title haven’t changed since the last successful run, the prior commentary is reused without an LLM call. See Save & commit for the full hash logic.

AI titles

Both Briefing.aiTitle and every BriefingRow.aiTitle regenerate in a single batched call to Haiku. The call is skipped entirely when:
  • A aiTitleInputsHash matches the freshly computed hash, AND
  • Both the briefing and every row already have a user-set title (nothing to fill in).
The title prompt is told which titles are locked (nameLockedByUser / titleLockedByUser) and emits null for those — the composer keeps your typed title and never overwrites it.

Reset to AI title

If you typed a title and later want the AI version back, the row card and briefing header both expose a Reset to AI title action. This clears nameLockedByUser (or titleLockedByUser), and the next save regenerates the AI title.

What you see in the composer

┌───────────────────────────────────────────────────────────┐
│  Briefing name (yours, or AI)        [Save] [Send]        │
│  description                                               │
├───────────────────────────────────────────────────────────┤
│  Overall review (read-only AI text + highlights)          │
│   "Regenerating…" while a save is in flight                │
├───────────────────────────────────────────────────────────┤
│  Row 1 — "Acquisition" (your title, or AI)                │
│  [item] [item] [item]                       [+ Add item]   │
│  Cross-analysis: row commentary + highlights              │
├───────────────────────────────────────────────────────────┤
│  Row 2 — …                                                │
└───────────────────────────────────────────────────────────┘
The overall review and per-row commentary are read-only — there’s no human override on AI commentary text. If you want to steer the analysis, the lever is the briefing description: a one-paragraph framing that the AI receives at every layer and uses to prioritise what to call out.