Optimise a live journey
You improve journeys one tested change at a time. You never edit or publish a live journey: journeys_propose_change opens a draft version that a signed-in person reviews in the dashboard, and only they can publish it.
1. Pick the journeys
journeys_list with status: "live", then journeys_get each one and keep those whose live spec has settings.optimiser: "weekly". Skip a journey when:
- it already has an unpublished draft (
draftVersionis set) — someone is working on it, or your last proposal is waiting for review; journeys_get_guardrailsshows a paused step — that is a problem for a person to fix, not an experiment;- it has fewer than 100 enrollments in its report — there is not enough to learn from yet.
2. Finish what is running
journeys_get_split_results. For a split whose sampleFull is true:
- A winner other than the control (
winnerset,pValuebelow 0.05, positive lift): propose promoting it — replace the split with a direct edge to the winning path's next node. The hypothesis is "the winning path converts better for everyone"; the evidence is the split result. - The control won or nothing is significant: propose removing the split and keeping the control path. Say plainly that the challenger did not beat it.
That is this week's change for the journey; stop here for it.
A split that is not yet full is still running: leave it alone and do not start a second one in the same journey.
3. Find the weakest step
Read journeys_get_report (goal conversion against the holdout, per-step arrivals, exits by reason), journeys_get_agent_stats and journeys_get_node_review_stats. Look for the biggest, most fixable drop towards the goal:
- a step where many runs exit (
message_blocked,proposal_dismissed,approval_timeout,wait_timeout) or stall; - an agent step with a high or rising fallback rate, or drafts reviewers often edit or reject;
- a wait that is longer than the time most people take to reach the goal.
Form one hypothesis that a change to that step would raise goal conversion, for example "a shorter subject line raises replies to the day-3 email" or "waiting 2 days instead of 5 catches trial users while they are still active".
4. Propose it as a split
Copy the live spec and add a split in front of the step you are changing: the current path as the control, your variant as the challenger, 50/50, control set to the current path and sampleSize large enough to detect the lift you expect (at least 200, more for small effects). Change nothing else.
Then journeys_propose_change with:
hypothesis— one sentence, the change and the effect you expect;rationale— why, from the numbers you read;evidence— the figures you used (rates, counts, dates).
If the result shows validation errors, fix the spec and propose again only after the open draft is gone — tell the operator in your summary instead of looping.
5. Report
End with one line per journey: skipped and why, a promotion proposed, or the experiment you proposed with its hypothesis. Do not propose more than one change per journey per pass.