Skip to Content
Product GuideCost & Budget › Budgets & Forecast

Budgets and Forecast

A budget is a dollar amount you plan to spend over a calendar day, week or month, for your whole org or for one agent. Morse shows spend against it, projects where the period will end, and alerts you before and when you cross it.

Budgets live on the Cost page, in the Budgets tab.

Budgets are observe-only

A budget never blocks, throttles, delays or drops anything. Your agents keep running and Morse keeps ingesting at the same rate when a budget is exceeded. A budget changes what Morse reports and who it tells; that is all. Every budget row says so under its name: Observe-only: does not stop spending — including a budget set to ask for sign-off on breach, since sign-off records a decision and never holds spending back.

It is not a limit or a cap. If you need a hard stop, enforce it with your model provider, your LLM gateway or your own code. Pair a budget with a provider hard cap shows how.

Pair a budget with a provider hard cap

A provider cap and a Morse budget do different jobs, so use both. The cap stops requests at a ceiling. Morse tells you, within minutes, which agent is spending and where the month will land, well before the cap is reached.

  1. Set a monthly hard cap with your provider. Make it a ceiling you never want to reach, above your Morse budget, so the cap is a backstop rather than your alerting.
    • Anthropic: in the Claude Console, open Billing and set a Spend limit for the organization, or set one per workspace (not the Default workspace). At the limit, requests fail with HTTP 400 invalid_request_error until the month resets or you raise the limit.
    • OpenAI: in the project’s Limits settings, set a budget and turn on Enforce a hard limit. At the limit, requests fail with HTTP 429 and the code project_spend_limit_exceeded. A small amount of spend can land past the limit while it takes effect.
    • LLM gateway: if you route through one (LiteLLM, Cloudflare, Vercel), set its budget on the same keys.
  2. Create a daily org budget in Morse with a budget threshold alert. On the Budgets tab, Set up a daily spend guard opens the form preset to a daily, org-wide budget with its alert on. Threshold alerts are checked every 5 minutes against today’s live spend, so a loop that burns through the day’s plan is reported in minutes, by agent, instead of when the provider cuts you off.
  3. Add a monthly budget with a forecast alert to hear when the month is projected to go over, days before it does.
  4. Treat the cap error as final in your code. Both providers return it with no retry-after header, and SDK auto-retries only repeat the failure. Stop the run and report it.

Provider caps are monthly and per provider. Morse budgets can be daily, scoped to one agent or environment, and cover every provider you trace in one number.

Create a budget

A budget has:

  • Amount in USD, greater than zero.
  • Period: daily, weekly or monthly. A day starts at 00:00 UTC. A week starts Monday 00:00 UTC. A month starts on the 1st at 00:00 UTC. Periods are calendar periods in UTC, never rolling.
  • Scope, either the whole org or one agent in it.
  • Environment (optional), to count only one environment’s spend.
  • On breach: Notify only (the default) or Require sign-off. See Sign-off on breach.
  • Owner (optional): the org member responsible for the budget.
  • Alerts: when you create a budget in the app, it can create its alerts too. Alert at 50%, 80% and 100% is on by default. Alert when the period is projected to go over is off by default and is not offered for daily budgets, which have no forecast. Budget alerts do not count toward your plan’s alert allowance, on any plan. If an alert cannot be created for another reason, the budget is still created and Morse tells you the alert was not.

Scope, agent, environment and period are fixed when you create the budget. To change any of them, create a new budget. The amount, on-breach setting and owner can be edited at any time, and a budget can be turned off and on.

You can have one active budget per scope, environment and period. A second one is rejected.

Only org owners and admins can create, edit or delete a budget. Every member can read budgets and their history.

What counts as spend

Budget spend is the priced cost of your agent traces in the period.

  • Priced spend only. Morse adds up spans that have a price. A span it cannot price is never estimated or scaled up, and never shown as $0. Unpriced spans show up as coverage: the share of spans in the period that were priced.
  • Not included: eval-judge cost, infrastructure cost, and synthetic test traffic. These are the same exclusions the Cost page uses, so a budget and the Cost page agree on the same window.
  • Includes today. Spend to date reads today’s traces live, so a trace from ten minutes ago counts.

Priced spend can only understate what you really spent. That shapes the states below.

States

Each budget is in exactly one state.

StateMeaning
TrackingNot over, and no forecast yet. Morse shows spend and percent only.
On trackA forecast is ready and the projected total is at or under the amount.
Projected overA forecast is ready and the projected total is above the amount. Spend has not reached it yet.
OverPriced spend has reached or passed the amount.

Why “over” is certain and “on track” is not. Because priced spend is a lower bound, spend that has already reached the amount is over no matter how many spans are unpriced. Under the amount, the true number could be higher. When coverage in the period is below 95%, the summary for tracking, on track and projected over says some spend is unpriced and actual spend may be higher.

Every budget row carries a one-line summary written by Morse, such as “$820.00 of the $1,000.00 monthly budget spent (82.0%).” The summary states spend against plan with its figures. It does not say anything about how well the agent is performing.

Forecast

The forecast projects where the period will end. It is arithmetic you can check, not a model.

  1. Morse takes up to the last 28 complete UTC days, starting from the scope’s first day with spend.
  2. For each weekday, the expected spend is the mean of that weekday in the window. If a weekday has fewer than 2 samples, Morse uses the mean of all days in the window instead.
  3. The projected total is spend on the period’s closed days, plus today (the larger of what has been spent today and today’s expected value), plus the expected value for each remaining day.

The same inputs always give the same projection. No model call and no randomness are involved.

When the forecast appears

Daily budgets have no forecast. A daily budget is Tracking until it is Over.

A forecast needs at least 14 days of history, counted from the first day with spend. Until then the budget stays in Tracking and shows how many days remain. Days with zero spend after the first spend day count as history. Days before it do not. The window grows to 28 days and then slides.

If recent days have not finished processing, Morse shows “data pending” instead of a projection. It does not treat missing data as an idle day.

The typical range

Next to the projected total Morse draws a typical range: a low and a high figure. It is based on how far daily spend has landed from its weekday expectation (the standard deviation of those differences, σ) and on how many days are left, counting the part of today still ahead.

Half-width = 1.28 × σ × √(days left). The low figure never goes below what you have already spent.

The range carries no percentage. Morse does not claim “80% of the time” until it has checked that claim against its own results. Every day Morse stores each ready forecast. When a period closes, it grades each stored forecast against the settled result: the percentage error (relative to what was forecast) and whether the actual landed inside the range. After three settled periods for a scope, Morse reports the measured share of periods where the range held. Until then it is just a typical range.

Check the derivation

The forecast shows the numbers it used: window length, the weekday profile, σ, days remaining and spend to date. You can recompute the projection by hand.

Worked example. A monthly scope with these inputs:

  • Closed days so far total $400.
  • Today is at $12 and today’s expected value is $40, so today contributes $40.
  • Expected values for the remaining days sum to $800.
  • σ = $9, with 20 whole days left after today and 12 hours left in today.

Projected total: 400 + 40 + 800 = $1,240.00.

Days left, counting what remains of today: 20 + 12/24 = 20.5. Half-width: 1.28 × 9 × √20.5 = $52.16. Typical range: 1,240 − 52.16 = $1,187.84 to 1,240 + 52.16 = $1,292.16.

The forecast never says why spend changed. It describes arithmetic over observed spend.

Forecast without a budget

A forecast does not require a budget. You can request the current-period forecast for your org, or for one agent, with an optional environment filter.

Sign-off on breach

A budget set to Require sign-off asks a person to record a decision when spend reaches 100% of the amount. It still never blocks anything: agents keep running whether the sign-off is pending, approved or rejected.

When spend reaches the amount, Morse opens one pending sign-off for that period. It opens at most once per period, on the budget check that runs every 5 minutes. The budget row shows Sign-off needed, and the sign-off goes to the top of the dashboard’s attention list until someone resolves it.

The budget owner, or any org owner or admin, can resolve it with Review:

  • Approve with a reason. You can also set a new amount for the rest of the period. It must be higher than spend so far. Raising the amount never re-sends a threshold alert that already fired.
  • Reject with a reason. Every org owner and admin is notified.

A resolved sign-off cannot be changed. Each one is kept on the budget as an approval record: the decision, the reason, who made it, when, and any new amount. Other members can read the records but cannot resolve them.

When a sign-off opens, Morse notifies the budget owner, or every org owner and admin if the budget has no owner, by email or in the app, following their notification settings. Someone with no settings gets an email.

History

When a period ends, Morse writes its result: the amount, the spend, coverage, and whether it ended over or under.

A result is provisional for 3 days after the period ends, because late traces and cost corrections can still land. Provisional results update as new data arrives. After the 3 days, once all the daily data is in, the result is settled and does not change again, even if the period’s traces are later deleted by retention. Editing a budget’s amount does not rewrite past periods.

Alerts

Budget alerts are created per budget. Each budget can have one threshold alert and one forecast alert. Budget alerts never count toward your plan’s alert allowance. Budget threshold alerts and sign-offs are checked every 5 minutes, against today’s live spend, so a sudden spike is reported within minutes. Budget forecast alerts are evaluated once an hour and sent on the next 5-minute check.

To create one, open Create Alert on the Reliability page, choose Budget Threshold or Budget Forecast, and pick the budget (the agent picker is replaced by a budget picker). A budget threshold alert also takes the percentages to alert at, 50, 80, 100 by default. The same thing is available through the API: POST /api/v1/alerts with type set to budget_threshold or budget_forecast and budget_id set to the budget. The alert takes its scope from the budget, so it takes no agent_id. To use thresholds other than the defaults over the API, pass extra_config: {"thresholds": [...]} as percentages.

Budget threshold alert. Fires when spend reaches a percentage of the budget. The defaults are 50%, 80% and 100%. Each threshold fires once per period. Editing the amount, or turning a budget off and on again, never re-arms a threshold that already fired. For example, if the 80% alert fired at $800 of $1,000 and you raise the budget to $2,000, there is no second 80% alert this period. The 100% threshold still fires at the new amount. The next period starts with all thresholds armed. If spend jumps across several thresholds between checks, Morse records all of them and notifies for the highest only.

Budget forecast alert. Fires when a budget becomes projected over, at most once per period. It includes the projected total, the typical range, and the date the budget is projected to be reached. It does not fire while the forecast is not ready, or when the budget is already over, since the 100% threshold covers that.

Org-wide daily spend alert. A daily spend alert can cover your whole org instead of one agent. It looks at total spend over the last 24 hours, against an absolute amount or relative to a baseline, and counts only your own org’s spend. In Reliability, create a Daily Spend alert and choose Whole organization in the agent picker. Through the API it is type: "daily_spend", no agent_id, and extra_config: {"scope": "org"}.

Each budget notification names the scope, the period, spend, the amount and coverage, and links to the Cost page filtered to that scope and period. For example: “Budget 80% reached — All agents, October 2026”, followed by the figures and “Coverage: 96% of spans priced.”

Who gets notified

Budget alerts and org-wide spend alerts have no single owning agent, so they go to org members. Every member who has notifications turned on for that severity and channel receives one. If no member has any turned on, Morse emails the org owner.

A delivery that fails is retried against the same alert event. It does not create a second one.

Before you have data

  • No budgets: the Budgets tab explains that budgets are observe-only, links to the provider hard-cap recipe, and offers Create budget and Set up a daily spend guard. Morse does not show example rows.
  • Budgets but no daily org budget: a line above the list suggests a daily spend guard, because a daily org budget is what reports a runaway loop within minutes.
  • Fewer than 14 days of spend: the budget shows spend and percent, and the number of days until a forecast is available.
  • Recent days still processing: the budget shows that data is pending and draws no projection.
  • Cost — spend by workflow and segment, and how pricing coverage is scored.
  • Notifications — choose where alerts reach you.
Last updated on