ReAct is a loop.
Fibona is a loop that writes loops.

Typical ReAct

history = [task]while True:step = model(history, tools)if step.is_final:breakout = tools[step.tool](**step.args)history.append(out)
The loop lives in the host: each turn the model picks one tool, and the whole history comes along.

Fibona

# Cell 3, written by the modelpages = [fetch(u) for u in urls]notes = summarize(pages)# Call the model with only the notes;# it calls set_next_cell_code (Cell 4)call_me(input=f"Continue: {notes}")
The host only runs code: when a Cell finishes, it runs the one that Cell registered next.

Simplified; the helper functions are illustrative.

Learn more

Two loops, one difference: who writes the next step.

AspectTypical ReActFibona
Who writes the loopThe developer, in the hostThe model: each Cell writes the next
What a step isOne tool callA complete block of Python
What it can doA pre-registered list of toolsTwo host tools + the whole interpreter
ContextAll history, growing every turnChosen by the code; history on request
On errorThe error goes back as an observationA recovery Cell; stops after three failures in a row
When it endsThe model gives a final answerOnly on quit(), when the user asks