Skip to Content
Product GuideBudgets & Forecast

Budgets and Forecast

A budget is a dollar amount you plan to spend over a calendar 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.

It is not a limit or a cap. If you need a hard stop, enforce it in your own code or with your model provider.

Create a budget

A budget has:

  • Amount in USD, greater than zero.
  • Period, either weekly or monthly. 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.

Scope, agent, environment and period are fixed when you create the budget. To change any of them, create a new budget. The amount 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

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.

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 are evaluated hourly, not on the 5-minute sweep the other alert types use.

Today you create a budget alert 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, pass extra_config: {"thresholds": [...]} as percentages. The Create Alert dialog on the Reliability page does not offer the budget types yet.

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. Create it through the API with type: "daily_spend", no agent_id, and extra_config: {"scope": "org"}. The Create Alert dialog currently requires an agent.

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 and offers one create action. Morse does not show example rows.
  • 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