---
title: Daily Spend Report (plugin)
---

# Daily Spend Report (plugin)

## What it is

**Daily Spend Report** posts one card to your Inbox each day summarizing your AI
coding activity: the **value** the agents produced and your **real out-of-pocket
spend**, read from Omniscio's live spend ledger. It's a lightweight daily pulse on
what you're spending and getting back — no dashboard to open.

### It is a plugin

Daily Spend Report is a **first-party, sandboxed plugin** at
`src/plugins/daily-spend-report/`, bundled with the app as a built-in and also
published to the Marketplace. It declares the `spend`, `inbox`, and `storage`
permissions and talks to the host only through the plugin SDK context (`ctx`).

## Where to find it

Daily Spend Report has no screen of its own to open: once it is enabled the card simply arrives in your **Inbox**, so day to day there is nothing to visit. Its one setting — the hour the card is posted — is changed from the plugin's own settings rather than from a general Settings page. The plugin ships bundled with the app, and is also published to the Marketplace, so it may already be present on your install.

## How it behaves

### How it works

- **A daily cron.** On load the plugin registers a cron (`ctx.cron.register`) for your
  chosen report time; changing the time re-registers it.
- **Reads the host ledger, never spends.** At fire time it calls
  `ctx.spend.getBreakdown()` to read your existing AI-spend rollup — it makes **no**
  Anthropic call of its own, so the report itself costs nothing.
- **Posts one deduped card.** It builds a markdown card (value + real out-of-pocket
  spend) and posts it via `ctx.inbox.postAlert` with a stable `dedupKey`, so you get
  exactly one card per day, not a pile.
- **Catch-up self-heal.** If the app was closed at the scheduled time, the report is
  posted once on next app-ready — but only once per local day (a stored date stamp is
  the guard) and only after today's report hour has already passed.
- **Never throws.** A failure is logged, not surfaced as an opaque worker error.

### Settings

One setting — **Report time** (`reportTime`, default `09:00` local) — picks the hour
the card is posted. Change it in the plugin's settings and the cron re-registers to
match.

### Cost & privacy

The report is **free**: it only reads the host's existing ledger (`ctx.spend`), makes
no direct model call, and sends nothing off-device. That is why it needs no cost
tracking of its own — it produces no Anthropic spend.

## For agents

### How the pieces fit

| Concern  | Where                                                       |
| -------- | ----------------------------------------------------------- |
| Manifest | `src/plugins/daily-spend-report/manifest.json`              |
| Backend  | `backend/backend.ts` → `dist/backend.js` (the cron + card)  |
| UI       | `ui/index.html`, `ui/plugin.js`, `ui/styles.css`            |

### Changing it

Backend logic lives in `backend/backend.ts` and is built to `dist/backend.js`. Keep the
report free (read the ledger, never call a model), keep the `dedupKey` stable (so a day
never double-posts), and keep the catch-up guarded by the per-day storage stamp.

## Related

The full spend picture — the live figures plus every budget cap you can edit — is on the [Cost Control](cost-control.md) page, and the numbers both surfaces read from are explained on [Statistics](stats.md). If you would rather be told when spend crosses a threshold than read a daily summary, see [AI spend alerts](ai-spend-alerts.md). The plugin system the report rides on — permissions, sandboxing, and installing from the Marketplace — is covered on the [Plugin Marketplace](plugin-marketplace.md) page.
