Loading the documentation…

Ralph loops

A Ralph loop runs one objective as a chain of fresh rounds: each round starts a new agent with no memory of your chat, works, and reports whether to carry on. DataMind Oda starts a loop only when you ask for one, and the loop holds the turn until a round reports the work done or the rounds run out.

Ask for a Ralph loop

  1. Say what to complete, and ask for a Ralph loop, or a fresh-agent iteration, in your own words. Oda reaches for a loop only on that explicit ask; it never starts one by itself.
  2. Send the message. The loop appears as a card titled ralph that shows your objective, and the turn it runs in does not finish until the whole loop settles.

What a loop call carries

The call supplies data only. The loop itself, the route to the child agents, the shape of the round reports and the handoff checks are fixed by the deployment, and a call cannot change them.

FieldWhat it carries
objectiveRequired. The immutable completion objective for every fresh Ralph round. Every round receives the same one.
maxRoundsOptional. Optional positive safe-integer round cap, bounded by the deployment ceiling.

What happens in each round

How a loop ends

Follow a running loop

The limits behind a loop

Why a loop is refused

The call is checked before any round starts, and a loop that fails a check starts nothing. Each refusal names its reason:

Questions, answered

Does Oda ever start a Ralph loop on its own?

No. Oda starts a loop only when you explicitly ask for one. Everything else stays with its usual tools: goals for long-running objectives, subagents and workflows for delegation and fan-out.

What is the ralph card in my chat?

It is the loop's call, shown as a card. It carries the objective the loop works toward and holds the turn until the whole loop settles.

How do the rounds pass work between them?

Through a bounded handoff and the workspace. Every round starts fresh, with no conversation seed and no history of the chat; only the last round's closing report crosses to the next round, capped at 16,384 characters. The shared workspace is the only other long-term memory the rounds share.

Do I see what each round did?

Not in the chat. The chat shows the loop's card and one closing result; the rounds' inner reports do not appear there. In Activity, the loop is a single Ralph row with each round as a member.

How long can a loop keep going?

The round count bounds a loop, not the clock: no elapsed-time deadline stops it, and 256 rounds is the default and the ceiling for one run. A call can set a smaller maxRounds, but a cap over the ceiling is refused: Ralph maxRounds <value> exceeds the deployment ceiling <ceiling>.

What happens when a round reports a blocker?

The loop stops. The result reads Ralph worker reported a blocker after <n>., and it carries the last report. The loop does not continue on its own.

What does the budget-limited ending mean?

The loop reached its round limit while the last report still had work remaining. The result reads Ralph reached its <n> limit; the worker reported work remaining., and it carries the last bounded report and the rounds that ran.

Can I change the objective while the loop runs?

No. The objective is immutable: every round receives the same one, and there is no way to edit it while the loop runs. Stop the loop and ask again with the new objective.

Can I stop a running Ralph loop?

Yes. The loop holds the turn it runs in, so stopping that turn cancels it (Stopping Oda and queued messages), and the result reads Ralph workflow was cancelled.

Can a Ralph loop run in the background?

No. A loop holds the turn until the whole loop settles, and it has no job id, no background start and no resume. The workflow tool is the tool whose runs can start as background jobs.

Why can't Oda run the loop I asked for?

A check failed before any round started: an empty objective, a round cap that is not a positive whole number or passes the ceiling, or a child-agent route that is not registered, cannot produce structured reports, or would start from the chat's own context. A refused loop starts nothing, and the refusal names its reason (Why a loop is refused).