measure: find out whether the Goal's number moved
After a release, the question is whether the number moved, counted the same way as before. measure computes a
Goal's metric exactly as its baseline was computed, over a new window, and writes the Result into the Goal.
| Field | Value |
|---|---|
| In plain words | Measures a Goal against its baseline, the same way as before, and writes the result into the Goal. |
| Journey stage | Measure and learn |
| Accountable seat | Data & AI Architect (Shuka) |
| Owns the thresholds | Revenue Architect (Kuber) |
| Does the work | Shuka, the Accountable seat's twin, in the spec model lane, with the seat's paired human when it has one |
| Consulted | Product Strategist (Arjun) |
| Informed | Founder (Atri) |
| Layers it can touch | L08 Analytics / reporting |
| Who reasons | no model: it is deterministic |
| Writes as | the bot identity (a GitHub App); without one, your identity, tagged as human fallback |
| Where it runs | the aayu command, a skill in your agent, an MCP tool (only with [mcp] expose_writes on) |
| The skill your agent reads | skills/measure/SKILL.md |
When to use it
- A release went out and the Goal's measurement is due; the
release-measureloop can run it. - You want the weekly AARRR cohorts and the North Star from your exports, without a Goal.
- Someone asks whether a Goal is done, and you need the verdict in writing.
Did your change cause the difference? Plan an experiment before the release.
Run it
The binary computes the number, with no model, so anyone can run it again. Your agent explains the Result:
Use the measure skill to measure Goal issue 12 against its baseline from payments.csv and events.jsonl, then tell me what the Result means and how far it can be trusted.
Needs setup: a billing export (CSV) or an events export from Application Insights, CloudWatch RUM, or GA4 BigQuery (JSON lines). For
--live, connect Azure, AWS, or Google Cloud first. A Goal whose Metric is a PostHog or Sentry baseline needs that integration (PostHog and Sentry).
aayu measure [<issue>]
| Input | Required | What it does |
|---|---|---|
<issue> |
no | Goal or Initiative to measure; without it, only the cohorts and North Star are reported. |
--metric |
no | acquisition, activation, retention, referral, revenue, north_star, aayu:founder_minutes_per_pr (from the actions log on the ledger), or <source>:<metric> [filter]; default the issue's Metric. |
--from |
no | Window start (YYYY-MM-DD, UTC); default 28 days before --to. |
--to |
no | Window end, exclusive (YYYY-MM-DD, UTC); default today. |
--billing |
no | Billing export (CSV). |
--appinsights |
no | Application Insights events export (JSON lines). |
--aws |
no | AWS CloudWatch RUM events export (JSON lines). |
--gcp |
no | Google Analytics 4 / Firebase BigQuery events export (JSON lines). |
--live |
no | Pull the window's events live from configured cloud integrations instead of an export file: azure, aws, gcp, comma-separated. |
--engine |
no | Query engine for the snapshot; duckdb is optional and shelled out. One of: sqlite, duckdb. |
The most common run: aayu measure 12 --billing payments.csv --appinsights events.jsonl.
What you get back
A SQLite snapshot of the window, and a Result on the Goal: the value, baseline, target, verdict, snapshot hash, and
query. The Goal moves to status:done when the target is met, else status:measured.
You should see a Result whose first line starts Target met: or Target not met:. Exit 4 with no Result means
it refused, for example because no cohort is complete yet: rerun with a later --to. See
exit codes.
Gates
It checks these before it acts, and stops when one fails:
- baseline: A reproducible baseline exists before a target is set.
What only a person does
The registry reserves no step of this verb for a person.
A person decides what the Result means. A target is never moved to make it pass: a new target for the next period is
a Decision only a person accepts, through decide.
What's next
- Learn from how the work itself went:
retro. - The whole flow after a release: did it work?
- Every skill.