<p>Ask a chatbot a question and you get an answer. One turn. You speak, it speaks, the exchange is over. That's a conversation, and conversations are lovely, but they don't build anything.</p><p>An agent is different in exactly one way, and it's a surprisingly deep way: an agent doesn't answer, it <em>loops</em>. And once you see that loop clearly, you understand Elyra completely — because Elyra is that loop, given a body.</p><h2>The smallest big idea in AI</h2><p>Here's the whole concept on a napkin. An agentic loop is a cycle that repeats:</p><pre><code class="language-text">observe  →  reason  →  act  →  observe  →  reason  →  act  →  ...  →  done
</code></pre><ul><li><p><strong>Observe</strong> — look at the situation: the task, the files, the result of the last action.</p></li><li><p><strong>Reason</strong> — decide what to do next.</p></li><li><p><strong>Act</strong> — actually do something in the world: read a file, run a command, edit code.</p></li><li><p>Then look at what happened, and go around again.</p></li></ul><p>That's it. The magic isn't in any single step — it's in the <em>repetition</em>. A chatbot stops after "reason." An agent keeps going, using what it just learned to choose its next move, until the job is genuinely finished.</p><p>Three ingredients make the loop turn: a <strong>model</strong> that can reason, <strong>tools</strong> it can use to act, and a <strong>stopping condition</strong> so it knows when to rest. Take away the tools and you're back to a chatbot — all talk, no hands.</p><h2>Elyra is the loop</h2><p>This is the part worth sitting with. People sometimes describe Elyra as "an AI that writes code." That's true but it undersells it. Elyra isn't the model — you can swap the model out mid-session. Elyra is the <em>loop around</em> the model. The harness. The body.</p><p>When you give Elyra a task, here's what's actually spinning:</p><ol><li><p>It <strong>observes</strong> — reads the relevant files, the error output, your request.</p></li><li><p>It <strong>reasons</strong> — works out the next concrete step.</p></li><li><p>It <strong>acts</strong> — calls a tool: <code>read</code>, <code>grep</code>, <code>edit</code>, <code>write</code>, <code>bash</code>.</p></li><li><p>It <strong>observes the result</strong> — the file contents, the test output, the failure.</p></li><li><p>It <strong>goes around again</strong> — feeding what it learned back into the next turn.</p></li></ol><p>You watch it happen in real time:</p><pre><code class="language-text">&gt; The checkout test is failing. Find out why and fix it.

  Running npm test -- checkout         (act)
  ✗ "applies discount" expected 90, got 100
  Reading src/checkout.ts               (observe)
  Reading src/discounts.ts              (observe)
  ...the discount is calculated but never subtracted (reason)
  Editing src/checkout.ts               (act)
  Running npm test -- checkout          (act)
  ✓ all passing                         (observe → done)

  Fixed. The discount was computed but not applied to the total.
</code></pre><p>Read it again and you'll see the loop breathing: act, observe, reason, act. Nobody told it to read <code>discounts.ts</code> — it decided that, because the first observation pointed there. That decision-in-the-loop is the entire difference between a tool and an agent.</p><h2><code>/goal</code> is the loop in its purest form</h2><p>Most of the time, Elyra's stopping condition is a judgment call: "this looks done." Reasonable, but soft. Sometimes you want the loop to run against something hard and objective.</p><pre><code class="language-text">/goal npm run check
</code></pre><p>Now the stopping condition isn't an opinion — it's an exit code. Keep looping: observe, reason, act, run the check, read the result, fix what broke, run it again. Stop only when the command passes. No "continue." No babysitting. This is the agentic loop stripped to its essence: a goal, a body, and the patience to go around as many times as it takes.</p><p>It's a small command that quietly changes your relationship with the tool. You stop steering every turn and start setting destinations.</p><h2>A loop you can run without fear</h2><p>There's a catch hiding in any loop that touches real files: what if a turn goes wrong? A bad edit, three iterations deep, used to mean cleanup.</p><p>Elyra checkpoints every turn — the conversation <em>and</em> the files, together. So if the loop wanders somewhere you don't like:</p><pre><code class="language-text">/rewind
</code></pre><p>…and you're back. The whole point is psychological as much as technical: when undo is free, you let the loop be bold. And bold loops solve harder problems than timid ones.</p><h2>Tuning the loop</h2><p>Because the loop wraps the model rather than being the model, you can tune it on the fly:</p><ul><li><p><strong>Thinking levels</strong> change how hard it reasons on each pass — <code>minimal</code> for mechanical work, <code>high</code> for the gnarly bug.</p></li><li><p><strong>Switching models</strong> with <code>/model</code> lets you put a cheap, fast brain on the boilerplate iterations and a powerful one on the hard calls — even within the same loop.</p></li></ul><p>Same body, different engine, dialed to the moment.</p><h2>The honest part</h2><p>A loop is powerful precisely because it keeps going — and that's also where it bites. The longer it runs, the more small errors can accumulate, and the more it costs, turn by turn. A loop with a vague stopping condition can grind in circles. A loop with no verification can confidently arrive at the wrong place.</p><p>So the craft isn't "let it run forever." It's giving the loop good bones: a clear goal, real tools, and an objective way to know it's done — a passing test, a green check. The loop amplifies your judgment about <em>what finished looks like</em>. It doesn't supply that judgment for you.</p><h2>Why this is the whole story</h2><p>Strip away the features, the providers, the extensions, and what's left at the center of Elyra is this quiet cycle: look, think, act, look again. It's not flashy. You won't see it on a billboard. But it's the difference between a thing that talks about your code and a thing that <em>changes</em> it and checks its own work.</p><p>Elyra is a loop. Give it a goal, and let it turn.</p><p>Happy building.</p>