# Budgets and alerts

> A monthly limit for each source of spend, and an email before one is crossed.

**Settings → Budgets** sets a monthly limit for any of: all engineering spend, GitHub seats, Copilot, GitHub Actions and coding agents (Claude Code, Cursor and OpenAI together). Leave a field blank for no budget.

## How alerts work

After every audit opsen prices the month so far and compares each source with its budget.

- At the alert level (80% by default, set from 10% to 100%), owners are emailed once that month.
- Over the budget, owners are emailed once more.
- The overview shows every budget with its share used, green, amber or red.

Budgets do not block anything in GitHub or in any tool. They are an early warning, checked weekly and whenever an audit runs.

## Spend jumps

A budget catches spend that crosses a line you drew. A jump catches spend that moved fast, wherever it sits. After every audit, opsen compares each source's monthly figure with the median of the audits before it (up to four), so one odd week neither sets off an alert nor hides the next one.

A rise counts when it clears both thresholds: at least 25% and at least $100 a month by default, both set under **Settings, Budgets, Spend jumps**. Owners get one email, plus a Slack message if Slack is connected, and the jump shows at the top of Overview and Spend. The same jump is not told again for 30 days unless it grows by another quarter. A source connected this week has no baseline yet and is never flagged. Each alert is in the audit log, and `report.json` lists the jumps under `anomalies`.

## Renewals

Under **Settings, Renewals**, enter when each contract renews: GitHub seats, Copilot, and every connected platform. Add the seats it commits you to (opsen fills in what it counts for GitHub and Copilot), the yearly cost if you know it, and the notice period, the days before renewal by which a change must be made.

Owners are emailed 90, 30 and 7 days before the **last day to change** each contract, which is the renewal date less the notice period. That is the date that matters for an auto-renewing contract. Each email gives the seats committed, the seats idle in the latest audit, the count to renew at, and roughly what that saves a year: the yearly cost divided by seats, or the audit's own price per seat. Kept people are not counted as idle. When the next renewal is within 120 days, Overview shows it. A reminder missed while opsen was not running is skipped rather than sent late, and a new renewal date starts the reminders again.
