01The ad-hoc question, answered with its query attached
Somebody asks what happened to conversion in week 27. It writes the query, runs it, checks the result against a second cut, and answers with both the number and the SQL. The next person to ask does not need you either.
02The pipeline that failed at 03:00
It reads the failure, reproduces the transformation on its own machine against a sample, finds the row shape that broke it, and opens a change request with the fix and a test that would have caught it.
03Data quality sweeps, on a schedule
Nulls where there should not be, distributions that shifted, joins that started fanning out, a dimension that grew 40% overnight. It reports what moved and what it thinks moved it — and says when it does not know.
04The metric definition audit
It finds every place a metric is computed, diffs the definitions against each other, and reports where they disagree. This is unglamorous, genuinely hard to schedule, and the reason two dashboards show different revenue.
05The exploratory pass before you take over
Profile the dataset, plot the distributions, check for leakage and imbalance, and write the first honest paragraph about what is in the data. You start from a briefed position rather than from an empty cell.
06The recurring analysis nobody wants to own
The weekly cohort cut, the monthly retention curve, the quarterly segment refresh. Same code, new period, run by a trigger, landing as a change request with the chart regenerated.
The output
The query, in a file, on a branch.
A chat answer is unfalsifiable and unrepeatable. So an analysis session commits its work: the query, the script, the notebook, the chart, and the note about what it checked. That is what arrives for review.
analysis/wk27-conversion/query.sqlSource
-- Week 27 conversion, split by first-touch surface.
-- Excludes internal domains: they run the smoke suite hourly and
-- accounted for 4.1% of week-27 signups before this filter.
with first_touch as (
select account_id,
min(occurred_at) as first_seen,
argmin(surface, occurred_at) as surface
from events
where occurred_at >= date '2026-06-29'
and email not like '%@acme-internal.example'
group by account_id
)
select surface,
count(*) as accounts,
countif(converted_at is not null) as converted,
round(countif(converted_at is not null)
/ count(*), 4) as rate
from first_touch join accounts using (account_id)
group by surface
order by accounts desc;
Illustration. The excluded domain is a placeholder — never a real customer or tenant.
It is a real machine, not a tool sandbox
The agent has a shell and a filesystem. It can install a package, pull a sample down, run it, look at the output, and try again — the loop an analyst actually works in, rather than one shot at a fixed set of tools.
Reproducible because the code came with it
The answer and the thing that produced the answer arrive together in the same change request. Re-running it next month is a re-run, not a reconstruction.
It writes down what it excluded
The filters, the date boundaries, the rows it dropped and why. An analysis whose exclusions are undocumented is not an analysis, and a comment in the query is the cheapest possible place to keep them.