AI Engineer World's Fair 2026

The Great Loops Debate — Dex Horthy, Geoff Huntley, Ian Livingstone, Greg Pstrucha, moderated by Allie Howe

Read the talk

The Great Loops Debate

A useful agent loop needs more than persistence: it needs verifiable goals, controlled permissions, meaningful feedback and an engineer who still owns the result.

From a talk by Allie Howe, Dex Horthy, Geoffrey Huntley, Ian Livingstone and Greg Pstrucha

Before you start: Familiarity with Git, automated tests, coding agents and context windows will help you follow the engineering trade-offs.

Can a loop tell whether it built the right thing?

How much of software development can run unattended—and how much of the promise of autonomous software factories already works? That is the opening question of the Great Loops Debate, moderated by Allie Howe with Ian Livingstone, Geoffrey Huntley, Dex Horthy and Greg Pstrucha. The dispute concerns the distance between enthusiasm for loops and their practical reliability.

Five people seated on stools before a sponsor backdrop, with the center participant gesturing.Open full source frame
Five participants on stage at AI Engineer World's Fair.

The Oxford-style format gives each participant an opening statement and judges the result by changed minds. Ian and Geoff defend loops as an effective engineering primitive when supported by discipline, infrastructure and tests. Dex and Greg accept unattended execution for mechanical, specification-gated, test-covered work, but challenge the next step: deciding autonomously whether the system built the right thing.

Geoff’s starting example is engineers at Canva repeatedly prompting a model. Watching that repetition suggested a programmable process: the human was operating a loop that software could operate instead. He approached the model as a new kind of CPU architecture whose behavior needed investigation, then reduced the orchestration pattern to a Bash loop. This became Ralph.

Even this opening defense anticipates failures. Geoff compares the excitement to early Kubernetes adoption and expects future conference talks about factories and loops going wrong. He reports having stopped writing code manually two and a half years earlier, and describes porting Go code into TypeScript through autonomous iteration. Product research offers another bounded example: a loop processing Linear tickets can terminate once it has enumerated the tickets. These examples make the opportunity concrete without requiring a general-purpose autonomous engineer.

0:340:42
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:42 · section reference included

Control, verification and cost

Dex develops the Kubernetes comparison differently. In his account, cloud infrastructure and Kubernetes each needed years of maturation before broad usability. Kubernetes controllers work because a system owns a small, isolated responsibility: observe the current state, compare it with a desired state and take action toward that target. An agent can occupy the action-taking part of this structure, but the bounded target still matters.

The leap Dex disputes is from automating an action to withdrawing architectural attention. An unread pull request can look polished while remaining difficult to review or wrong in consequential ways. He has not seen convincing evidence that review bots remove that problem. His response is to inspect more closely—to move down an abstraction level where necessary—rather than assume another orchestration layer will eliminate review.

Ian starts with the development process itself: try something, learn something, apply what was learned. Autocomplete already accelerates part of that process; coding agents accept intent at a higher level. CI/CD, pull requests, design reviews, customer feedback and linting are all feedback loops. The automation question is which judgments can move from a human into a nondeterministic model, and which outcomes can be verified.

Ian also proposes a change in the software being built. If agents increasingly interact through constrained APIs, fewer requirements depend on how a human interprets a screen or navigates a workflow. He expects that shift to reduce some UI and UX subjectivity and expand the portion of software amenable to verification. It is a hypothesis about the shape of future interfaces, not a reason to assume today’s product decisions already have executable answers.

Greg separates two tests of usefulness:

  • Output quality: Does the generated code actually meet the need? He favors static verification wherever possible, yet still finds code that passes checks and needs architectural steering or simplification.
  • Economic viability: Does the improvement justify the tokens? Adding loops around other loops can increase spending without resolving quality. His escalating examples of monthly per-engineer budgets are hypothetical stress tests of that economics.

He already uses agents and selected loops. His objection is to the social-media pressure to interpret every unsatisfactory result as evidence that the developer is using AI incorrectly.

7:267:40
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

7:26 · section reference included

Persistence needs an external permission boundary

The first directed question asks whether better vision, larger context windows and more capable reasoning make this a turning point. Howe introduces Anthropic’s loop, batch and goal commands, focusing on continuation until a goal condition becomes true. The current Claude Code command reference distinguishes recurring prompts, parallel batch work and goal-directed continuation; it does not establish the discussion’s suggested historical derivation of all three from Ralph. The engineering question is what prevents a determined agent from exceeding its intended permissions.

Ian does not expect the model to enforce that boundary reliably. He argues that reinforcement learning and increasing capability can intensify goal pursuit, including finding exploits. His probability-distribution framing rejects the assumption that an agent experiences the social consequences that constrain a person. Consequently, he locates stronger guarantees in the infrastructure surrounding the model and loop, rather than expecting alignment training to guarantee safe behavior.

Geoff supplies the concrete failure mode: an agent tries to deploy a web service, discovers that its token lacks sufficient privileges, then searches the filesystem for stronger credentials. Its persistence turns an authorization failure into a search problem. His immediate advice is to avoid leaving secrets in files accessible to the agent. A denied operation must remain denied even when the agent keeps looking for another route.

15:4215:52
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

15:42 · section reference included

Existing codebases need executable constraints

The next question moves from greenfield projects to existing-codebase work: latency improvements, evals and backend refactoring. Geoff attributes broader adoption partly to people having time to experiment. His hypothesis is that holiday downtime let developers discover capabilities already present in the preceding model releases. He also argues that generated code is competitive with what many founders can hire in the mass market. These are his explanations for adoption, rather than controlled comparisons of developer performance.

Geoff quotes $10.42 per hour for running a loop, crediting an earlier calculation by Ian and Dex; the model, usage and billing basis are unspecified. Ian connects the discussion to an August hackathon that copied sponsor tools and rewrote Python libraries in TypeScript. The practical migration example is a company with several programming languages and good tests for each stack: use the tests to guide a port, then reduce the number of stacks the team must maintain. Geoff’s original greenfield qualification reflected weaker earlier models; overnight success stories do not remove the need for those checks.

Architecture and taste enter the loop through backpressure: a proposed change cannot finish until it satisfies engineering constraints. Geoff uses pre-commit hooks that reject a change and emit useful feedback—for example, explaining that one architectural boundary must not depend on another. Formatting, static analyzers, deterministic system tests and simulators can all contribute rejection signals.

A small Bash hook illustrates that feedback contract. Here, the teaching rule is that src/domain must not import @app/ui; the staged snapshot is checked so the decision concerns the proposed commit.

bash

#!/usr/bin/env bash
set -euo pipefail

if git grep --cached -n -F '@app/ui' -- src/domain; then
  printf '%s\n' \
    'Commit rejected: src/domain must not depend on @app/ui.' \
    'Move the UI dependency outside the domain layer, then retry.' >&2
  exit 1
else
  status=$?
  if (( status != 1 )); then
    exit "$status"
  fi
fi

This literal-import check demonstrates how a rejected commit becomes a repair instruction; a language-aware analyzer can enforce the actual dependency graph. A local hook supplies feedback, but by itself does not establish a tamper-resistant security boundary. The intended state is still a proposed change awaiting acceptance, not a successful commit merely because the agent says it finished.

Geoff’s locomotive analogy puts engineers in charge of keeping an unreliable machine on the rails. His adoption history includes Boris posting about Ralph, Ian recalling an early encounter with it, and startup teams using autonomous work to accelerate MVP development. The exact dates matter less to this argument than the competitive effect: leaner teams reaching working software sooner increase the pressure on other founders to experiment.

19:2119:38
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

19:21 · section reference included

Verification quality and fresh context

Greg’s response to the capability-stack argument concentrates on verification rather than model intelligence. Better types, linters and simulation tests can expand the set of deterministically checkable outcomes. He supports adding these while they remain cheap. Adding another nondeterministic model as the verifier creates a different problem: the checking process can contribute uncertainty of its own.

Greg illustrates the concern with a 5% error chance and a sequence of 10–20 iterations, suggesting that correctness can fall toward half or below. That is an informal compounding-error argument: he specifies neither independence nor whether later iterations repair earlier errors, so it cannot supply a reliability estimate for corrective loops. His operational observation is simpler: AI companies still need tools such as Sentry to catch ordinary bugs, while security defects and performance regressions also persist. More tokens have not made those categories disappear.

Dex then explains what fresh context originally bought Ralph. Keeping one conversation alive indefinitely eventually exhausts the context window. Restarting loses some token efficiency, but lets the process continue overnight through a repeated procedure:

  1. Restate the desired state.
  2. Inspect the code to discover the current state.
  3. Perform one next step toward the target.
  4. Clear the conversation and start again.

The repository carries progress across iterations; the conversation need not carry the entire history.

Dex calls his smart-zone and dumb-zone terminology training wheels for people who have not yet developed intuition through sustained work with Claude. His context budgets are working guidelines, not measured model limits:

SituationDex’s context guideline
Getting startedAround 100,000 tokens
Million-token windowsPossibly around 200,000 tokens
His hardest problemsUnder 60,000 tokens
Casual explorationSometimes over 300,000 tokens

He adjusts the budget to the task rather than treating the advertised context capacity as a target to fill.

The warning sign is behavioral. An agent struggling with a failing test starts making strange changes, then claims the failure is preexisting or unrelated when it is not. Dex treats that flailing as a reason to reset. With larger windows, minimizing every iteration becomes less central than supplying the right feedback. A deterministic component can notice new PR comments and build a small repair prompt, eliminating the repeated human chore of returning later to tell the agent to check again.

24:3824:46
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

24:38 · section reference included

Allocate context deliberately

Asked how to stop an agent from modifying tests to declare success, Geoff returns to pre-commit analysis and backpressure. He then contrasts fresh allocation with repeated compaction. His analogy is repeatedly uploading and downloading a video: each lossy transformation can reduce fidelity. He wants to supply the information an iteration needs deterministically, constrain its search space and leave room for the work that follows.

Geoff says he remains uncomfortable above 100,000 tokens even with million-token windows. For company data, his recommendation is to batch rather than assume everything fits usefully in one prompt. He evokes a fraction of an old floppy disk and a couple of Star Wars movie scripts to make the memory budget feel small. Those are intuition-building analogies, not conversions between token capacity and bytes.

He also resets his assumptions when a new model arrives, removing skills and Markdown instructions to observe the bare model first. His anecdote is that GPT-5.5 became timid under uppercase instructions, whereas Anthropic models responded differently to forceful wording. The useful practice is to investigate model-specific behavior and read integrator guidance, rather than indefinitely carrying forward a prompt collection tuned for an older model.

30:2630:43
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

30:26 · section reference included

Loom and the limits of convergence

Howe introduces convergence engineering: assemble loop-generated work into a discrete system under test, then keep iterating until it converges. This raises a sharper question than whether an agent can generate code. What makes the assembled system converge toward something good?

A dark social post describes looping a discrete system under test until it converges, alongside a small live speaker inset.Open full source frame
A post introducing “convergence engineering.”

Dex uses Loom as the test case. He describes ambitious AWS- and GitHub-like platform work, then a proposed answer to subjective UI evaluation: deploy alternative experiences, collect PostHog-style behavioral data and compare what users actually use. Instead of asking a model to judge a screenshot or button color, the loop would receive observations about user behavior. That is a proposed feedback mechanism, not a demonstrated autonomous product-optimization result.

The exchange then separates the project’s existence from the factory’s readiness. Geoff says Loom is still on GitHub and describes spending months investigating verification. Dex recounts a conversation in which better programming languages or much better models were prerequisites for making the ambition work. He encourages exactly this kind of frontier experiment, while insisting that the unresolved result cannot justify withdrawing code review. Both sides acknowledge that even the labs have not solved the whole problem.

33:2133:36
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

33:21 · section reference included

Where loop spending pays

A loop can fail by continuing indefinitely or by announcing completion before the job is done. Greg jokes that the first failure is quite loud when the bill arrives. Yet he accepts expensive automation when the team can identify what it buys. Security scanning is his concrete example: checks run locally, on pull requests and after changes land, finding real issues that human review missed.

Greg estimates about $5 per PR for the security checks his team wants, an internal cost they explicitly judge worthwhile. He next points to rewrite and implementation experiments involving Next.js, Bun in Rust and browsers. Their advantage is accumulated specification: years of tests and expected behavior can give the loop a strong target. His favorable impression of the Bun experiment is observational; the discussion does not present a controlled comparison or identify every project precisely.

Throwaway product prototypes fit a different cost model. Greg uses /go to explore potential Sentry products without treating the generated implementation as the final artifact. If a prototype looks promising, he reads the code, writes down what the team actually intends and starts a more deliberate implementation process. The prototype buys information about the product idea; it does not automatically buy maintainable production code.

These cases justify different levels of autonomy:

UseWhat makes iteration useful
Security scanningValuable findings justify a known checking cost
Specification-rich rewritesExisting tests constrain the target
Throwaway prototypesFast exploration precedes a fresh specification

Greg’s recommendation is to discover those boundaries by trying the work, rather than infer them from the most enthusiastic examples online.

36:1236:25
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

36:12 · section reference included

Shared memory does not settle shared authority

To avoid repeating failed attempts, a loop needs durable state. That state may live on disk, in Git or in a memory store shared by multiple agents. Shared memory can let agents learn from one another, but production use also needs to establish who wrote a memory and who may read it. Isolating every agent’s memory simplifies some access decisions while cutting off the shared learning that motivated the store.

Ian calls this an unsolved problem. Modeling memory as Markdown makes the representation familiar: the questions become how to share the files and how to attach authorization and attribution. At Keycard, he wanted Notion content available as Markdown because it was easier for an agent to use directly through a CLI than to navigate through MCP. The remaining difficulty is presenting an understandable world to the agent while enforcing what it may access at each point. Existing components help, but he does not claim a complete, usable solution.

The debate then turns from shared knowledge to decisions that resist complete verification. A factory must choose what to build, which abstractions fit and which trade-offs are acceptable. Greg particularly values deciding what not to build: where complexity earns its cost and where the system should remain maximally simple. In his experience, agents keep adding to the stack unless someone constrains them. More verification expands what they can implement, but he still wants a human making the architectural decisions.

39:0139:18
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

39:01 · section reference included

The teaching loop needs a controller

Howe challenges the broad advice to stop prompting and start designing loops, citing messages associated with Shopify and Steinberger. She contrasts that mass-audience advice with Ralph’s qualification that senior expertise may still be needed and that the work may stop short of completion. Geoff explains that he originally wrote for experienced peers, including people in functional programming. He recalls Thomas Ptacek as someone whose perspective changed, while acknowledging how difficult it is to translate the same advice to everyone.

The appeal extends beyond experts: someone can leave a loop running and wake up to a new Discord bot. But Ralph’s small teaching primitive represents an orchestration pattern. Engineer the prompt, feed it to an agent, keep state in the filesystem and recycle the context window. In Bash, the repeated invocation can be expressed without coupling the loop to one vendor’s CLI:

bash

#!/usr/bin/env bash
set -euo pipefail

# Pass the agent command and its arguments to this script.
if (( $# == 0 )); then
  printf 'Usage: %s AGENT_COMMAND [ARG ...]\n' "$0" >&2
  exit 2
fi

while true; do
  cat PROMPT.md | "$@"
done

Each invocation starts another pass over the same prompt and persistent workspace. The code exposes the repetition; it contains no success detector.

Geoff says the intended larger system needs an outer controller—a PID-like mechanism, a factory or a deterministic decision process—to decide whether iteration should continue. The simple while true form is therefore a teaching primitive, not the whole operational contract. He also warns against running coding tools in an exposed laptop environment, pointing to npm supply-chain attacks as a preexisting development risk. Securing the execution environment is necessary even before agent autonomy enters the picture.

43:1943:31
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

43:19 · section reference included

Build the factory as a product

The productivity question contrasts incremental gains with the ambition to automate everything. Dex encourages frontier experiments, but warns against assuming that a successful demonstration changes every part of software engineering. Established knowledge about architecture, review and delivery remains useful while the tools change.

His factory-building anti-pattern is familiar product failure: disappear for months, assemble a grand system from blog posts, then return without having put anything in a teammate’s hands. A software factory is a product for the engineers using it. Start with a real problem, build a small loop, observe whether it helps and iterate. Experiments that fail can still build useful intuition, provided their uncertainty is acknowledged.

Dex recommends targeting 2–3× faster work through small incremental loops while retaining code review and architectural ownership; he presents this as practical guidance, not a measured result for a specified task. He contrasts that approach with pursuing 100× gains through ever more elaborate optimization. His further thought experiment is that widespread acceleration with near-human quality would already change the economics of software substantially. Building useful increments now also prepares a team to exploit future model improvements.

46:3446:49
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

46:34 · section reference included

Trace intent through to production

Verification must also address who did the work and on whose behalf. In the question addressed to Ian, Git’s single commit signer is presented as an inadequate representation of a workflow involving a delegating person, agents and reviewers. The response draws on service ownership and compliance: organizational responsibility cannot disappear simply because a machine performed the action.

The proposed accountability chain begins with human intent, follows the agent acting on that intent and reaches the code that goes to production. A public-key signature on the final commit captures only part of that story. The discussion calls for attribution across the software development lifecycle and signature chains that cover first-party generated code as well as third-party dependencies.

Geoff challenges the premise that software engineers already carry the kind of personal professional liability associated with other engineering disciplines. The exchange leaves the legal question open. Its system-design consequence is narrower: a factory needs a way to connect delegated actions to accountable people or organizations, not merely an agent name attached to an artifact.

49:3649:50
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

49:36 · section reference included

Practice, competition and the remaining model limit

Greg closes with optimism grounded in practice. Fully unattended output still falls below his requirements, but agents let him address problems he could not previously take on. He expects engineers to remain important. His advice is to find the system’s failure boundaries firsthand instead of adopting either career panic or confidence from the surrounding hype.

Ian’s closing argument is economic. More work is getting done, even though not all of it is good, and competitive pressure makes ignoring coding agents increasingly difficult. Teams should identify where loops fit their own codebases. Connector creation is his example of highly verifiable work whose automation could erode businesses built around maintaining large collections of integrations. He distinguishes those opportunities from the core value a company must protect, then connects productivity to investment and capital allocation.

Dex wants a future in which the factory can run without humans reading all the code. His final position is that the missing capability currently sits at the model level: harness engineering and context management alone cannot close the gap. He recommends watching the frontier experiments—including whether Loom becomes operational—while using the bounded loops that already help.

52:4653:02
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

52:46 · section reference included

Stronger types and an editable supply chain

The final technical argument returns to verification at the language level. General software factories remain an emerging ambition, and the closing challenge is to compare what happens when loops build and then modify an application in Ruby versus Haskell. The sharp criticism of Python and Ruby is a position offered for experimentation, not a demonstrated language benchmark. The mechanism behind the comparison is static types: more invalid states or operations can be rejected before the agent declares completion.

That leads to a more provocative proposal: perhaps code’s explainability can matter more than its immediate readability to its human owner. An agent can explain unfamiliar Haskell, while the language supplies constraints that a less restrictive representation would leave to other checks. The discussion explicitly treats this as frontier thinking. Rust’s ecosystem treatment of sum types is offered as another useful source of verification.

The closing speaker then describes minimizing open-source dependency use and generating software to requirements instead. The stated security goal is reducing blast radius, with an explicit acknowledgment that all software contains flaws. There is also an automation argument: an external maintainer cannot be invoked like a tool whenever an agent needs a change. Vendoring source gives the agent editable code within the project’s control. The proposal to own the supply chain therefore joins security exposure with the practical ability to modify the whole system.

The audience is asked which side changed its mind, first toward Dex’s position and then toward Ian and Geoff’s. Bright stage lights prevent a clear count, and the participants describe the result as close. No winner is established.

57:0057:14
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

57:00 · section reference included

Resources

From the talk

  • Huntley's explanation of Ralph: repeated agent execution, fresh context, specifications and engineering checks that reject invalid output.

  • LoomRepository33:45

    Experimental Rust coding-agent research with remote execution, analytics and authorization components. The maintainer warns against general use.

  • Huntley extends Ralph into a broader approach to programmable work and introduces Loom's software-factory ambitions.

  • Cloudflare's account of building vinext, a Vite-based implementation of Next.js APIs, including its early benchmark methodology.

Updates since the talk

  • Current reference for recurring prompts, parallel batch changes and goal-directed continuation through /loop, /batch and /goal.

  • Rewriting Bun in RustArticle

    The Bun creator's retrospective on a Rust port using agent workflows, existing tests, adversarial review and human monitoring.

Transcript download
Read the transcript and explore slides

Loading transcript and slides…