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.
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.
A readout carries its bounds, basis, and freshness. “No data”, “below k”, and “not yet sufficient” are answers — never rendered as zero.
API, CLI, and MCP are generated from the same capability map as the UI. Anything irreversible, sensitive, or spending passes through policy and approval.
Assignment runs locally from signed, cached bundles and fails open to control. No Torno network call sits in your customer's request path.
Ingest, listening, analytics, experiments, revenue, ads, briefs, governance — the instruments the Loop needs, in one account.
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.
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.
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.
Trials stall at plan selection; plan-difference questions dominate recent voice.
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.
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.
human approval — shipped default for ad publishing
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.
not yet sufficient — the readout says so
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.
Corrections are new records, not edits. The next proposal reads this log —
torno context makes proposing without it impossible.
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.
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 stackTorno's whole premise is that numbers should never say more than their evidence. The same rule applies to this website.
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.
Seed to Series B, where every experiment must count. Shared Metric definitions, pre-registered evidence, and a decision log the whole team compounds on.
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.
Bring a Property, wire the SDK, define one Metric — and let the Loop start listening. Every turn after that comes back with more.