Why growth work should return — the Loop essay

Growth work
that returns.

Torno is the agent-native system of record for growth: one Loop from signal to shipped change to honest readout. Agents do the operating; you govern what ships, spends, and publishes — and every turn comes back knowing more.

Loop LP-4 · turn 6 bottega · prod
LP-4

Lift trial → paid conversion

  1. listening
  2. diagnosing
  3. proposing
  4. pending approval
  5. live
  6. measuring
  7. decided
trial_to_paid_28d v3
3.4% +0.2pt
28d rolling owned events 2m ago
checkout_completion · ok activation_rate · ok

Honest by construction

A readout carries its bounds, basis, and freshness. “No data”, “below k”, and “not yet sufficient” are answers — never rendered as zero.

Agents operate, humans govern

API, CLI, and MCP are generated from the same capability map as the UI. Anything irreversible, sensitive, or spending passes through policy and approval.

Never in your critical path

Assignment runs locally from signed, cached bundles and fails open to control. No Torno network call sits in your customer's request path.

Batteries included

Ingest, listening, analytics, experiments, revenue, ads, briefs, governance — the instruments the Loop needs, in one account.

Listen

Every observation gets a front door.

Product events, support email, public threads, review feeds, Metric watches — each lands as an immutable Signal carrying provenance, consent, and trust. Nothing the world tells you gets silently lost.

Signal intake bottega · prod
3 subscriptions · 2 Metric watches routing to LP-4
  • SIG-799 behavior Plan-picker step exit rate rose to 61% funnel · owned events owned
  • SIG-812 voice Two customers asked which plan includes custom domains support inbox owned
  • SIG-816 voice “Pricing page didn't tell me what the Studio plan is for” reddit · public web public· quarantined
  • SIG-820 metric Δ trial_to_paid_28d moved −0.4pt week over week Metric watch owned

Signals are immutable — corrections arrive as new Signals. Public-web content stays fenced as data and everything derived from it keeps the untrusted-derived label.

Diagnose

Analysis that shows its work.

Versioned Analyzers read the evidence — language models only ever see fenced, quarantined text — and produce Insights that carry confidence, citations, and freshness. Claims inherit the trust of what they came from.

Analyzer run bottega · prod
  • funnel-decomposition v4 aggregate plan step −11pt vs 8-week base
  • voice-cluster v2 LLM · fenced reading 38 quarantined signals
  • cohort-contrast v1 aggregate
INS-27 confidence 0.82

Trials stall at plan selection; plan-difference questions dominate recent voice.

SIG-799SIG-812SIG-816 untrusted-derived 2h ago
Propose

Proposals that cite their evidence.

A Hypothesis fills a forced grammar: because this evidence, we believe this change, for this audience, will move this Metric, by this much, within this window. No field is optional — vibes don't compile.

Hypothesis bottega · prod
HYP-9
impact High confidence Medium effort S
Because
trials stall at plan selection (INS-27)
we believe
collapsing three plans to two with a comparison row
for
new trials
will move
trial_to_paid_28d
by
+0.5pt
within
21 days
growth-agent

“Exit rate and the voice cluster point at plan confusion; a two-plan picker is the lowest-effort probe.”

reasoning required · stored as a claim
Ship

Ship with a measurability contract.

A Change declares its exposure — tag, goal event, assignment — or is honestly unmeasurable and excluded from causal claims. Policy holds anything irreversible for a human; delivery is signed, sticky, local, and fail-open.

Change · delivery bottega · prod
CHG-31 page_variant Two-plan picker with comparison row
exposure tag
plan-picker
goal event
subscription_started
assignment
50 / 50 · sticky
first exposure
confirmed — measurement started
assignment bundle signed · synced 41s ago 50% · ramp on evidence
change.activate → allow (scope: change_write)
APR-6 ads.publish · Google campaign draft awaiting a human

human approval — shipped default for ad publishing

CHG-28 Maker stories collection no exposure declared — excluded from causal claims
Measure

Readouts that can't overclaim.

Sequential evidence with explicit states: trending is not a win, a guardrail breach can auto-pause, and below-k stays suppressed. Stripe-derived revenue reads through the same semantic layer as everything else.

Experiment readout bottega · prod
EXP-7 plan-picker · control vs two-plan trending
−0.1 … +0.9pt 1,842 exposures sample-ratio check · passing checkout_completion · no breach

not yet sufficient — the readout says so

Trials · last 28d n = 214
Studio-plan trials · NL below k (k = 25) · suppressed
The Needle bottega · prod
MRR $8,420 +$310 this month
leading pair: trials_started / wk
new +$540
expansion +$120
contraction −$150
churn −$200
live Changes aimed at this target
  • CHG-31 trending
  • CHG-28 insufficient evidence unmeasurable
Decide

Decisions become memory.

Ship, kill, iterate, or extend — recorded with rationale and evidence snapshots in an append-only log. The next proposal starts from everything this turn learned. That is what returning means.

Decision log · append-only bottega · prod
  1. DEC-12 ship Annual-first pricing page (CHG-24)
    significant win +0.3pt Lia · turn 5
  2. DEC-11 kill Exit-intent coupon (CHG-22)
    guardrail breach checkout_completion Lia · turn 4
  3. DEC-10 iterate Onboarding email pair (CHG-19)
    insufficient evidence growth-agent · turn 3

Corrections are new records, not edits. The next proposal reads this log — torno context makes proposing without it impossible.

web bottega · prod
LP-4 Lift trial → paid conversion measuring
target trial_to_paid_28d 3.4% · 28d rolling
live CHG-31 · 1,842 exposures trending
pending APR-6 · ads.publish · Google campaign draft
last decision DEC-12 ship · Annual-first pricing page (CHG-24)
torno context LP-4
$ torno context LP-4
state measuring · turn 6
target trial_to_paid_28d 3.4% · 28d · owned events
live CHG-31 · 1,842 exposures · trending
guardrails checkout_completion ok · activation_rate ok
pending APR-6 ads.publish · awaiting a human
last decision DEC-12 ship · annual-first pricing
Agent-native

Your agents get the whole product.

Every registered capability generates its web, API, CLI, and MCP bindings from one map — an agent is never boxed into a reduced surface. Mutations require reasoning, which is stored as a claim and never treated as instruction. And when an action needs a human, the agent waits at the approval — it does not route around it.

registered capability change.activate
  • Web Activate change
  • API POST /api/v1/changes/CHG-31/activate
  • CLI torno change activate CHG-31
  • MCP tool: change_activate
torno · act with reasoning
$ torno change activate CHG-31 --reasoning \
"two-plan probe per HYP-9; exposure declared"
policy change.activate → allow
bundle signed · rollout 50% · sticky
measure starts at first confirmed exposure
The bundle

Batteries included. Sprawl not.

Growth work usually dies in the gaps between six tools. Torno bundles the instruments the Loop needs — collection, listening, analytics, experiments, revenue, ads, briefs, governance — behind one semantic layer, so every number means the same thing everywhere it appears.

The boundary is deliberate: payment rails and ad auctions stay with their providers. Torno bundles what the Loop needs — not everything with a dashboard.

Compare with the assembled stack
  • Event ingest first-party collect + dictionary
  • Listening Reddit, HN, RSS, reviews, Search Console, support mail
  • Analytics funnels, retention, paths
  • Experiments sequential evidence, layers, guardrails
  • Revenue Stripe-derived MRR + the Needle
  • Ads Google & Meta drafts, approval-gated publish
  • Briefs structured handoff to humans or coding agents
  • Policy scopes, approvals, spend ceilings, audit
  • Agent surfaces API, CLI, MCP — one capability map
Status

Where Torno is today, honestly.

Torno's whole premise is that numbers should never say more than their evidence. The same rule applies to this website.

  • Implemented Every product vertical — Loops, ingest, identity, analytics, experiments, revenue, ads, briefs, policy, agent surfaces — has production code behind it.
  • Locally tested 1,496 behavior scenarios covered by local test suites, 38 explicitly exempted, 0 unmapped — snapshot of 2026-07-22.
  • In progress Live provider verification: Stripe, Google and Meta ads, listening connectors, imports, WorkOS sign-in, deployed SDK middleware. Each connection shows its verification state in the product.
  • Opening Early access, in small turns. Join the list and we'll return — that's rather the point.
Who it's for

Built for small teams with real stakes.

Founders and solo builders

Growth work that never happens because it lives across six tabs. One account, one Loop, agents doing the legwork — and you approving the parts that matter.

Growth and product teams

Seed to Series B, where every experiment must count. Shared Metric definitions, pre-registered evidence, and a decision log the whole team compounds on.

Coding and marketing agents

First-class principals with scopes, budgets, and required reasoning. The same capabilities as the UI — through API, CLI, and MCP — with policy holding the line.

torno — Italian: “I return.” From tornare, to turn on a lathe.

Start the first turn.

Bring a Property, wire the SDK, define one Metric — and let the Loop start listening. Every turn after that comes back with more.