---
title: Pre-send spend warning
---

# Pre-send spend warning

## What it is

**Pre-send spend warning** warns you *before* you send a prompt that is estimated to cost
more than a threshold you set — a guardrail against firing off an expensive turn by
accident. Where [AI spend alerts](ai-spend-alerts.md) tell you about money **after** it has
been spent, this catches a pricey turn **before** it is sent.

The threshold you set depends on how you pay for AI:

- **API-key users** set a **per-model dollar cap** — if the estimated cost of the turn
  exceeds that dollar amount, you get a warning before it sends.
- **Subscription users** set a **5-hour rate-limit percentage** — if the turn is estimated
  to consume more than that share of your rolling 5-hour rate-limit window, you get the
  warning.

## Where to find it

Everything you set lives in **Cost Control** (sidebar). The "Pre-send warning" section appears
below "Sessions & daily limits", and it holds three fields:

- **Default cost threshold (USD)** — the dollar amount that triggers a warning for any model.
  Leave empty to disable the dollar warning.
- **Per-model overrides** — click "Add model override" to set a different threshold for a
  specific model (e.g. `claude-opus-4-6` at $2, `claude-haiku-4-5` at $10).
- **Rate-limit warning (%)** — the 5-hour utilization percentage that triggers a warning.
  Leave empty to disable the rate-limit warning.

The warning itself then appears as a confirmation dialog in front of the send.

## How it behaves

There is **no Lab toggle to turn on** — the feature is shipped and live for everyone; it simply
stays inert until you set a threshold.

1. **Set your thresholds** in the "Pre-send warning" section of Cost Control, as described above.
2. **Send as normal.** If a prompt would exceed your threshold, a confirmation dialog appears
   with the estimated cost, your threshold, and a "Send anyway" / "Cancel" choice. It fires on
   all three send paths: normal send, aside, and send-later (snooze).

A turn under the threshold sends with no interruption. **In practice nothing warns until you set a
threshold** — because the threshold starts unset, not because of the on/off toggle.

## For agents

Setting key: `promptSpendWarningEnabled` (now **shipped**), plus the threshold values (the
per-model dollar cap for API-key billing, and the 5-hour rate-limit percentage for
subscription billing).

> **Careful — the toggle does not gate the send path.** All three send paths
> ([useSessionSend.ts](../../src/renderer/src/features/sessions/useSessionPanel/useSessionSend.ts),
> `useSessionPanel.ts`, `SnoozePalette.tsx`) — and the Cost Control threshold section
> (`CostControlView.tsx`) — gate on `isUnreleasedFeatureVisibleInRenderer('prompt-spend-warning',
> settings)`, i.e. on **visibility**, not on `promptSpendWarningEnabled`. Because the registry entry
> is `status: 'shipped'`, `computeVisibility` returns `true` unconditionally, so
> `promptSpendWarningEnabled` is **inert on those paths**. Concretely: a user who sets a threshold
> but leaves the toggle OFF still gets warning dialogs on every send. This is exactly the
> shipped-flag/visibility conflation the registry's own comment warns about ("Conflating the two is
> what made the shipped Cross-Device Sync toggle inert") — so if the toggle is meant to gate
> behaviour, the send paths must read the setting, not the visibility helper.

## Related

The page that covers what happens after the money is spent is [ai-spend-alerts.md](ai-spend-alerts.md)
— after-the-fact spend cards and the daily spend digest — and
[api-keys.md](api-keys.md) explains how API-key billing and provider keys are managed, which is
what decides whether you set a dollar cap or a rate-limit percentage.
[cost-control.md](cost-control.md) is the panel both this warning and the daily limits are
configured in, so read it if you are setting the thresholds for the first time.
