Skip to content

Daily pulse

In plain terms. The other three skills react to things that happen. This one wakes up on its own — every morning by default — reads the day's data, and writes the CFO a short brief: how much runway is left in the worst case, which currency corridors are unusually expensive right now, where vendor spend is concentrating, which duplicate charges look like leaks, and what would happen to cash if upcoming bills were delayed by a week. All of the numbers are computed by plain arithmetic. A language model can be turned on to rewrite the result in a more natural voice, but it is not allowed to change any of the numbers. The brief itself is saved as a decision on the same log as the other three skills, so every recommendation links back to a specific row the controller can drill into.

Why this skill is here even though it is not in the brief

The take-home asks for three workflows. The Daily Pulse is a fourth, deliberately added one. It exists because the most interesting product unlock for Reap is not a single-purpose tagging agent — it is a proactive control surface that uses Reap's privileged view across card spend, stablecoin corridors, balance sleeves, and bill schedules to speak first instead of waiting for an operator question. The pulse is the smallest convincing demonstration of that layer, on the same decision log and autonomy model as the three brief skills. If a reviewer wants to skip it, the W1–W3 skills stand on their own; the pulse is additive.

The brief shows up in two places in the product: the dashboard, which doubles as a read model for the day's signals, and the operator command palette, where any of the brief's recommendations can be opened, drilled into, or actioned without leaving the keyboard.

Dashboard with finance-agent summary metrics and decision register.
Dashboard read model: the brief points back into the same decision system.
Command palette for artificial-intelligence chief-financial-officer operator actions.
Operator command surface: the pulse is an entry point, not a detached report.

The dashboard is the screen the CFO opens with their morning coffee; the command palette is the one they reach for the moment they want to act on something the dashboard showed them. Both of them are reading from the same decision row this skill wrote — there is no separate "brief generation" pipeline.

What it produces

Every pulse is one object with six fields. Reading them as a list is the fastest way to see what the brief is actually claiming: a time window, a cash forecast, a corridor scan, a list of leaks, a ranked set of recommendations, and one counterfactual scenario number.

ts
{
  period: { cadence: "daily" | "weekly" | "manual", windowStart, windowEnd },
  cash: { p50TroughUsdMinor, p90TroughUsdMinor, p90RunwayDays, breachWithinDays },
  corridors: [{ corridor: "United States dollar→Indonesian rupiah", spreadBps, routeHint }],
  leaks: [{ kind, vendorId, magnitudeUsdMinor, severity, evidenceHref }],
  recommendations: [{ title, action, why, tone, evidenceHref }],
  scenario: { lostDiscountUsdMinor }
}

The recommendations array is the only field a CFO actually reads on a calm day. The other five exist so that when a recommendation looks surprising — "why are you telling me to defer this bill?" — the controller can drill into the cash forecast, the corridor signal, or the scenario math that produced it.

Signal board

Behind those six fields, the analyzer is watching four signals. Each one is computed independently and contributes to the tone of the brief. Cash floor is the only one that can flip the brief from suggest to escalate on its own; the other three colour the recommendation list.

Cash floorNinetieth-percentile trough versus working-capital floor decides whether the pulse is calm or urgent.
Corridor spreadReap Pay / United States Dollar Coin corridors are ranked by deterministic spread deltas.
Leak magnitudeVendor concentration, duplicate charges, and recurring waste compete on dollar impact.
Scenario reliefAccounts-payable deferral trade-offs include lost discount and cash runway relief.

The bar widths are not a ranking — they reflect roughly how often each signal carries the day in the test corpus. Cash floor is the most decisive because a breach is binary; scenario relief is the slowest-moving because deferral economics rarely flip from one morning to the next.

Decision flow

Here is what happens between the scheduler firing and the brief landing on the dashboard. Five steps; the arithmetic step is the load-bearing one. The narration step is the only place where a language model can run, and even then it is a translator, not an analyst.

CRON
scheduled_pulse eventA cron, command-line interface, seed, or operator trigger writes the windowed pulse event.
CTX
Load contextJoins decisions, bills, corridors, vendors, balances, and recent events for the tenant's pulse window.
$
Analyze deterministicallyCash band, corridor spread, leakage, anomaly, and accounts-payable-deferral scenario are arithmetic.
Text
NarrateTemplate strings turn computed facts into readable chief-financial-officer copy; optional model narration sits on top of the numbers.
BRF
Suggest → decision log → /briefThe morning brief is itself an auditable decision row with evidence links back into operator surfaces.

The last step is the one that distinguishes this from a "send a daily email" cron job. Because the brief is a decision row on the same log every other skill writes to, the queue, the bills page, and the forecast can all link into a recommendation — and the eval harness can replay an old pulse against today's analyzer to see whether the recommendations would have changed.

Key design choices

The single most important choice on this skill is what it does not look like. The reflexive way to build a "morning brief from an LLM" is a chatbot wrapper around a long prompt. I deliberately did not build that.

The proactive layer is still auditableThe pulse is another skill on the same decision log — not a separate chatbot. Every recommendation links back into /queue, /bills, /treasury, and /forecast.

Testing & evals

A deterministic analyzer means the eval question is "same signals on the same window two days in a row?" — 15 golden cases across six signal families plus two malformed-window refusals, replayable against today's analyzer to catch threshold drift. Moved to its own page so the replay property has room to breathe.

The worked example walks a single scheduled pulse — window 8 to 15 May 2026 — from the cron firing all the way to the three recommendations a CFO sees in /brief. It includes the concrete numbers the analyzer surfaced (90th-percentile runway of 43 days, Halborn at 76% of window spend, HKD→IDR spread drift 44 basis points above benchmark), what the eval golden set covers, and the four design patterns that keep narration honest.

That is the last skill in this section. From here, the most useful next stops are the eval harness (which scores all four skills together) and the cross-cutting decisions page (which explains why the four skills share a decision log, an autonomy gate, and a refusal taxonomy):

Submission pack — Reap Chief Financial Officer Agent take-home