AI Engineer Code 2025

Hard-Won Lessons from Building Effective AI Coding Agents

Nik Pash· Cline14:18

Read the talk

Hard-Won Lessons from Building Effective AI Coding Agents

Effective coding agents need more than a clever wrapper: they need reproducible engineering tasks, outcome-based verifiers, and a path from real failures to model training.

From a talk by Nik Pash

Before you start: Familiarity with coding agents, Git commits, and software tests will help; reinforcement learning concepts are introduced as needed.

How much scaffolding does a stronger model need?

If a stronger model can solve a coding task with terminal access, how much of an elaborate agent stack is still helping? Retrieval-augmented generation, repository indexes, search trees, and tool-calling scaffolds can compensate for model weaknesses. Nik Pash’s opening challenge is that those compensations can become constraints as frontier models improve. The engineering advantage may disappear with the next model release.

Nik Pash beside a slide arguing that models bottleneck agents, scaffolding is a legacy coping mechanism, and model releases erase engineering advantages.Open full source frame
Three claims about model capability overtaking agent scaffolding.

His motivating example is Gemini 3.0, released during the week of the talk. Pash reports that Gemini 3.0 running with Terminus outperformed the vast majority of model–agent combinations on the Terminal-Bench leaderboard shown in the talk. The useful comparison is the amount of machinery involved: Terminus provides a generic terminal-agent harness, rather than the graph search, RAG, or repository indexing he associates with more elaborate systems.

This is a minimal harness, not an absence of one. Pash presents its terminal-first design as evidence that model capability can outweigh sophisticated orchestration. His description of the example as lacking context-engineering features belongs to that historical comparison, rather than a permanent specification of Terminus. The practical challenge is to establish what the model can already do before surrounding it with additional machinery.

0:340:57
Suggest correction

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

0:34 · section reference included

The diminishing returns of model-specific tuning

That observation leads to deliberately restrained advice: simplify. Pash is skeptical of the attention paid to small context tricks and agent hacks, which he considers a increasingly repetitive conversation with little new signal. There is still integration work to do, but he treats it as a familiar playbook rather than a fresh architectural breakthrough for each model.

Cline’s model-agnostic approach makes that repetition especially visible. Supporting successive releases means repeatedly adapting the agent as models change. Pash’s examples are Sonnet 4 to Sonnet 4.5, Gemini 2.5 to Gemini 3, and GPT-5 to GPT-5.1. In his experience, these adjustments have become small and their gains marginal. That judgment sets up the more consequential question: where can agent builders contribute something that improves the model itself?

Slide lists API support, restoring reasoning traces, structured or XML tool calling, model-specific prompt adjustments, and provider routing.Open full source frame
Five practical model-support steps, ending with “Stop overthinking.”
2:032:16
Suggest correction

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

2:03 · section reference included

From a better wrapper to a better model

A cleaner agent can make better use of a model, but changing the wrapper does not itself update the model’s weights. Pash locates the deeper bottleneck in training: models need difficult tasks that force them to acquire useful capabilities. Benchmarks help define which problems matter, while reinforcement learning environments provide opportunities to practice actions, handle failures, and retry.

Pash attributes the advances in reasoning and agent reliability to benchmarks and RL environments. The actionable part of that argument is a set of design questions: how can real coding work become a reproducible training task? What makes a verifier trustworthy? How do we identify genuine difficulty, and ensure that training rewards the engineering outcomes people actually need?

For this purpose, a benchmark task has three essential parts:

  1. An executable environment, such as a Docker container in which the agent can work.
  2. A starting state and prompt, pairing a repository snapshot with the requested change.
  3. A verifier, which checks whether the agent’s final state is correct or acceptable.

The starting snapshot anchors the problem. The prompt tells the agent what to accomplish. The verifier makes the result scoreable.

An RL environment can use the same structure. The distinction is what happens to the score after the agent finishes.

UseWhat the score does
Benchmark evaluationMeasures the model’s performance
Reinforcement learningSupplies reward used to update policy weights

Evaluation measures a model; training changes it. A task need not become a different kind of engineering problem to serve both purposes. Its result must feed a different downstream process.

3:433:59
Suggest correction

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

3:43 · section reference included

Qualify the task before building the environment

Cline’s RL Environments Factory begins by deciding which real coding sessions can become useful training environments. Parallel sub-agents qualify candidate tasks before the system invests in reconstructing and packaging them.

Qualification follows the task from its origin through the developer’s intent to its eventual resolution:

  1. Origins: Confirm that the repository exists, the starting commit is accessible, and the project is open source.
  2. Journey: Read the initial request and follow-up prompts to recover what the user was actually trying to accomplish. The first prompt alone may not capture the full intent.
  3. Outcome: Locate the later commits or pull requests that solved the problem in real life.

This establishes both the problem the agent should face and evidence that an acceptable solution exists.

The factory also looks for reasons to reject a candidate early. Generic requests to build another Next.js application from scratch are not the desired source of difficulty. Trivial tasks add little training value, and tasks without reliable starting or ending states cannot be reconstructed confidently. Real-world origin is necessary, but it does not automatically make a useful benchmark.

6:036:12
Suggest correction

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

6:03 · section reference included

Reconstruct both states, then package the task

Once a task qualifies, the work becomes repository archaeology. Pull down the code, reconstruct the starting and solved states locally, and build them. Attempt the implementation and confirm that the reported bug and its real-world solution actually exist. A plausible conversation and a later commit are not substitutes for a reproducible problem.

The remaining packaging steps make that reconstruction usable by another agent:

  1. Document obstacles and dependencies encountered while restoring the task.
  2. Containerize the environment with Docker so the task has a portable execution setting.
  3. Remove Git, a measure Pash describes as preventing reward hacking by denying access to solution history.
  4. Define the verifier that will judge the resulting state.

The last step requires particular care: reconstructing the known solution does not mean the verifier should insist on reproducing that solution’s every detail.

Nik Pash beside “Phase 2: Building the RL environment,” with four numbered steps and an Environment Info and Build Notes screenshot.Open full source frame
Phase two: reconstruct states, document dependencies, containerize, and define the verifier.
7:387:47
Suggest correction

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

7:38 · section reference included

The kettle whistle test

Suppose the user’s goal is to boil water. Pash’s verifier analogy is a kettle whistle: it signals the outcome without specifying the method. Gas, induction, and a campfire can all produce the desired result. In the analogy, the whistle answers the question that matters—whether the water has reached boiling—without judging the route taken.

Problems arise when a verifier copies incidental details from a reference solution. A sub-agent might observe that the successful run used high heat and turn that observation into a requirement. But water can boil on a lower setting too.

Proposed checkWhat it actually tests
Kettle whistlesIntended outcome
Burner is set to highOne heating choice
Front-left burner is usedOne location choice
Five minutes have elapsedOne timing assumption

The latter checks can reject a valid solution because it differs from the recorded path. Verify the user’s intended outcome, not the incidental shape of the reference solution.

The finished artifact is a containerized task that can function as either a benchmark or an RL environment. Agent work is recorded as a trace or trajectory, making the attempted solution inspectable alongside its score. Portability, recorded actions, and a reliable verifier turn a one-off engineering session into a reusable experiment.

8:248:36
Suggest correction

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

8:24 · section reference included

Automating the factory—and evaluating the factory itself

The next goal is to automate the conversion from real coding data to training environments. Pash reports that his first manually built RL environment took about sixteen hours of his time, while the later process took less than twenty minutes per task. These are reported workflow timings, not a controlled throughput comparison; he does not specify a task sample or separate human effort from elapsed runtime.

A fully automated factory remains the goal. If environment construction becomes routine, the expected bottleneck shifts toward collecting high-quality tasks: difficult, reproducible engineering problems with recoverable outcomes.

That raises a recursive possibility: build RL environments that test how well agents construct RL environments. Such a meta-benchmark could measure the factory’s agents, provide a target for improving them, and help produce further training environments from real user work. Pash poses this as a direction to explore, not an already completed self-improvement loop.

9:5810:16
Suggest correction

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

9:58 · section reference included

Opening real engineering work to training and evaluation

The factory also creates a question about access. Pash asserts that major agent labs already collect comparable engineering data and build internal systems around it. He criticizes the use of private benchmarks to defend existing agent architectures: when the tasks remain closed, others cannot inspect the evidence or reproduce the comparison.

Agent products occupy a valuable position between engineers and models. They encounter the initial request, the model’s attempts, the user’s corrections, and sometimes the eventual human solution. Pash argues that withholding this data slows frontier research, because improving prompts and tools alone does not train the underlying model. That argument leads to the announcement of ClineBench.

ClineBench is presented as real software development packaged into standardized training and evaluation environments, rather than toy exercises such as writing a Fibonacci-generating server. The announced contract is openness: people should be able to run and inspect the tasks, with environments available for supervised fine-tuning, reinforcement learning, or evaluation. This is the launch commitment, not a claim that every planned artifact was already available during the talk.

The intended resource is a shared collection of meaningful engineering problems on which the ecosystem can both measure and improve models. Its usefulness depends on community contributions: the environment-building machinery still needs a supply of difficult tasks drawn from actual work.

11:0711:19
Suggest correction

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

11:07 · section reference included

A model failure followed by a human fix

The contribution path described at launch starts with ordinary development work:

  1. Work on an open-source project with the Cline provider enabled.
  2. Explicitly opt into the ClineBench initiative.
  3. When a frontier model gets stuck, step in and solve the problem.

That combination—a model struggling and a human subsequently fixing the issue—is a promising signal of task difficulty. It produces a candidate for qualification and environment construction, rather than automatically making every failed session a benchmark.

Three-point slide invites opted-in Cline provider users to help build an open benchmark, join a community-driven benchmark, and contribute training data.Open full source frame
Contribute real-world tasks through the Cline provider while opted in.

The closing commitment is that ClineBench will remain free, fully open source, and freely accessible. The invitation is to make the difficult parts of everyday engineering available for the next round of model training: a failure encountered in useful work can become a task that future models learn to solve.

13:2213:31
Suggest correction

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

13:22 · section reference included

Resources

From the talk

  • Engineering tasks packaged with Docker environments, reference solutions, tests, and instructions for running evaluations with Harbor.

  • Terminus designArticle1:26

    The original design of a model-agnostic terminal agent built around one interactive tmux session.

Updates since the talk

Transcript download
Read the transcript and explore slides

Loading transcript and slides…