Skip to main content
Promotion is a decision, not a default. This guide walks the gates and says what to look at before passing each one.

Prerequisites

1

Confirm the dry-run evidence

Ask the outcome question, not the execution question. Not “did every story complete?” but “would this have produced the right result?”Look for stories that completed but produced nothing, or produced something subtly wrong. A dry run that finishes green while identifying the wrong payments is a failure that looks like a success.
2

Check readiness once more

Dry Run holds side effects back, so it can pass with credentials that would fail against the real service. Readiness checks the dependencies themselves.For an extra check against the live service:
3

Promote to Pilot

Pilot runs with real side effects. The agent will post to Slack and read live Stripe data. The command asks for confirmation.
To build and stage in one step, or to pin an exact version:
Pilot is deliberately limited — restricted scope, access, volume, or audience. Point it at a test channel, or a single account, before pointing it at everything.
4

Run under pilot and watch

With the agent staged at Pilot, a plain run with no --mode runs as pilot. You don’t have to repeat the mode.Watch this one. A pilot run is the first time the agent changes something outside JoyStream.
5

Review pilot evidence

Give it enough pilot runs to see variation — a day with no failed payments, a day with an unusual one, a day when Stripe is slow. The interesting evidence is in the edge cases, not the happy path.Check the tickets for exceptions and escalations. A pilot that never escalated may mean the agent handles everything well, or that it hasn’t yet met anything hard.
6

Promote to Live

This also confirms before proceeding. Add --yes to skip the prompt in a script — but only where the decision has already been made by a person.
7

Set it running

Production agents usually run on a schedule or a trigger rather than by hand.
--env defaults to dry_run on every set. If you later change only the expression, repeat --env live or the schedule silently reverts to dry runs.
See Schedule an agent and Trigger an agent.

Gating promotion in a script

jstm agent readiness exits non-zero when there are blockers, so it composes:

Rolling back

Promotion is a stage change, not a one-way door. To pull an agent out of production, stage it back down:
--no-run stages without firing a run. To stop scheduled execution as well:
To pin a known-good earlier package while you fix a problem:

See also