OpenNomosdocs
The growth loop

Experiments

A named channel attempt with a metric, a deadline and an optional stop rule. How due and decision work.

An experiment is a question you ask of one channel: "do helpful Reddit replies lead to conversations within two weeks?" OpenNomos keeps the deadline and counts the metric. You decide what it means.

Create

Through track with an experiment item:

{
  "type": "experiment",
  "experiment": {
    "name": "Reddit helpful replies",
    "hypothesis": "People asking for alternatives will talk if we help first",
    "channel": "reddit",
    "metric": "willing_to_talk",
    "target": 3,
    "days": 14,
    "stop_rule": { "metric": "willing_to_talk", "op": "<", "value": 2 },
    "stop_rule_text": "If fewer than 2 people agree to talk after 14 days, change channel"
  }
}

Give exactly one of days (1–365) or deadline (a future ISO time, {"in_days": n} or {"at": "…"}). target, hypothesis, stop_rule and stop_rule_text are optional.

Metrics

metricCounts, within the experiment window
trackedOpportunities created in this experiment
contacted, replied, willing_to_talk, convertedDistinct opportunities that moved into that stage while attached to the experiment
actionsActions logged against the experiment
clicksHuman (non-bot) clicks on the experiment's short links
outcome:<type>Outcomes of that type that are not unknown

Attach opportunities and actions with experiment_id on track (opportunity) and log_action.

Stop rules

stop_rule is mechanical: { metric, op, value } with op one of <, <=, >, >=, ==, and metric equal to the experiment's metric. stop_rule_text is free text that OpenNomos only shows back to you. It never concludes an experiment.

Due and decision

An experiment becomes due when its deadline passes. This is computed whenever you read, and persisted at the next briefing with the metric frozen at the deadline. A due experiment appears in the briefing with decision_needed: true, overdue_days, and a question built from the evidence, for example:

Stop rule not met (1, rule < 2). Keep going, scale or conclude? Record your decision with track.

If no actions were recorded in the window, the question adds: the result may reflect nothing being done rather than the channel not working.

Record the decision by updating the experiment with its id:

{ "type": "experiment", "id": "exp_7Hn2LpWc0", "experiment": { "decision": "extend", "extend_days": 7, "note": "Only 3 replies seen; give it one more week" } }
decisionResulting status
stopstopped
scalescaled
extend (needs extend_days)extended, deadline moves out
keepconcluded

Nothing reminds you outside the briefing: a due experiment stays at the top of experiments until a decision is recorded, and after 14 days a notices entry of type experiment_overdue is added.

Save the lesson separately

The decision field holds a short note. The lesson (what you learned, what to do differently) belongs in memory, for example memory_add with kind: "decision" and the experiment name as a tag.

On this page