← All AI Engineer talks

AI Engineer Summit 2025

How Coding Agents Change Software Development Forever - Hailong Zhang

Read the talk

Coding Agents as Contributors to the Software Workflow

Hailong Zhang’s Gru case study shows how an asynchronous agent can turn code changes into tested pull requests, and what evaluation, context, and shared infrastructure make that workflow possible.

From a talk by Hailong Zhang

Before you start: Familiarity with Git pull requests and basic unit testing is helpful; no prior agent-building experience is required.

Which work should an agent take on?

If an AI agent takes over routine coding, debugging, testing, and operations, what remains the developer’s responsibility? Hailong Zhang begins with this division of work. His forecast leaves product design, architecture, and difficult issues with humans, while agents handle more of the routine implementation. The resulting workflow depends on human–agent collaboration: automating a task still leaves decisions about what to build and whether the result is right.

Workflow from product design and architecture design, labeled creative work handled by humans, to coding, debugging, testing and operating, labeled routine work mostly handled by AI.
Human and AI roles across the software development workflow.
0:320:49
Suggest correction

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

0:32 · section reference included

Live assistance and asynchronous delivery

The first collaboration pattern is familiar from GitHub Copilot and Cursor: an assistant lives inside the IDE and works while the developer types. Zhang places the broader category of synchronous assistance around 2020, with maturation in 2023 and rapid growth in 2024; that chronology is not a launch date for each named product. In the talk’s 2025 setting, he describes this pattern as widely adopted.

The second pattern moves the agent into the surrounding workflow. Zhang dates the emergence of this asynchronous category to 2024. A GitHub-style bot receives a manual or automatic trigger, completes a task without continuous human attention, and returns a deliverable.

CollaborationWhere it worksHuman involvementResult
SynchronousInside the IDEDeveloper and assistant work togetherAssistance during editing
AsynchronousInside a repository workflowDeveloper delegates and later reviewsA completed deliverable

Both patterns remain useful because they serve different moments in development. An engineer may want immediate assistance while editing and separately delegate a task that can run to completion.

At repository scale, this becomes a collection of small agents operating at different stages: writing unit tests, fixing bugs, producing documentation, submitting code reviews, and handling releases. Each agent takes responsibility for a bounded piece of work, freeing human attention for the creative parts of the project.

1:111:29
Suggest correction

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

1:11 · section reference included

Fast generation makes tests more valuable

Unit testing provides a concrete place to start. In Cursor, accepting a suggestion with Tab can generate multiple lines in multiple parts of a file. The developer can move quickly while overlooking individual changes. Zhang’s concern is the gap between generation speed and attention: code arrives faster, but bugs can arrive with it. Tests provide one way to catch those issues.

Slide titled “Unit Tests are More Important in AI Era,” with a unit-test meme beside a code editor overlaid with three Tab labels and text warning about overlooked issues.
Unit testing concerns alongside repeated Tab-based code generation.

Writing those tests still requires effort. Zhang points to developers’ reluctance to do that work as the motivation for Gru, an agent for generating and managing unit tests. The case study concerns the historical Test Gru workflow demonstrated in 2025.

2:553:02
Suggest correction

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

2:55 · section reference included

From a code change to a test pull request

Gru’s unit of work begins with a repository change and ends with a reviewable pull request:

  1. Trigger the agent. Invoke Gru manually or let a developer’s pull request trigger it automatically.
  2. Inspect the change. Determine whether the changed code needs additional tests or changes to existing tests.
  3. Write and run the tests. Generate the test code and execute it to check that it works.
  4. Submit a test pull request. Include a summary of the tests and their coverage improvement.
  5. Ask for a human decision. The reviewer judges the tests and decides whether to merge them.

The screenshot Zhang presents is the deliverable from this process: a test pull request with information a reviewer can use to assess it. Autonomous task execution ends at a human merge decision.

For a small TypeScript/Vitest illustration of that review boundary, suppose a change makes an order eligible for free shipping when its subtotal reaches 50. A proposed test can make the boundary explicit:

typescript

import { describe, expect, it } from 'vitest';
import { qualifiesForFreeShipping } from './shipping';

describe('qualifiesForFreeShipping', () => {
  it.each([
    [49.99, false],
    [50, true],
    [50.01, true],
  ])('returns %s eligibility for subtotal %s', (subtotal, expected) => {
    expect(qualifiesForFreeShipping(subtotal)).toBe(expected);
  });
});

Running this proposed test checks the implementation against the encoded expectations. Reviewing it asks the further question: is 50 actually the intended inclusive threshold? That distinction explains why Gru’s workflow includes both test execution and human judgment before merging.

3:584:21
Suggest correction

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

3:58 · section reference included

What production use shows

Zhang reports that over 50% of Gru’s pull requests in the displayed production GitHub list were accepted and merged by humans. He treats that level of acceptance as useful in practice while acknowledging substantial room for improvement. The talk does not establish a denominator, observation window, or model configuration for the figure, so its scope is the production example he presents.

Zhang also reports that Gru handles around 80% of the unit tests in its own repository, where the team uses it daily. This describes the agent’s share of unit-test work, not a code-coverage percentage or a pull-request acceptance rate.

By commit count, Zhang reports that Gru is the team’s leading contributor. Commit count measures repository activity separately from the quality or acceptance of the resulting tests. From that internal experience, he predicts that more agents will become repository contributors during 2025.

4:495:04
Suggest correction

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

4:49 · section reference included

Start with a task that can be evaluated

Building such an agent begins with defining a clear, concrete, feasible problem. Unit testing gives the team a bounded task; software engineering as a whole is too broad to serve as the same kind of problem definition. The scope determines what the agent should do and what its evaluation must assess.

Zhang’s construction sequence puts evaluation before model and context work:

  1. Define the problem. Choose a task specific enough to solve.
  2. Build evaluation datasets and a harness. Establish the infrastructure for assessing candidate approaches.
  3. Work on models and context. Develop the components that perform the task.
  4. Orchestrate the components. Use a framework or Agent OS to bring them together.

This order gives model and context decisions an evaluation setting instead of leaving success defined only by a plausible-looking output.

5:505:58
Suggest correction

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

5:50 · section reference included

Select models and build context for the task

Gru is designed to work across frontier models from OpenAI, Anthropic, DeepSeek, Google, and other providers. The team evaluates models in different scenarios to choose an appropriate model for each one. That choice can vary between stages of a single job: a job does not have to use one model throughout.

The team also adapts models. Zhang describes fine-tuning GPT-4o with human-labeled unit-test code to improve test generation. Scenario-based selection and fine-tuning address different decisions: which model to use for a stage, and how to adapt a model to the desired output.

Three diagrams show Gru connected to OpenAI, Anthropic and DeepSeek; scenarios paired with different models; and human-labeled unit-test code flowing into GPT-4o.
Gru’s model-agnostic, multi-model and fine-tuning approaches.

Context is also task-specific. For unit testing, Gru builds context around the programming language and testing framework, then gathers information from the repository environment. Relevant sources include GitHub issues, code reviews, commits, pull requests, README material, and the code itself. Gathering is followed by filtering and selection so the information fits into the model’s context. The mechanism is therefore more deliberate than simply passing the entire repository to an LLM.

6:366:53
Suggest correction

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

6:36 · section reference included

Share infrastructure across specialized agents

The next targets extend beyond unit tests to refactoring and end-to-end testing. Building every agent from scratch would repeat much of the same engineering, so the team abstracts common infrastructure into a framework Zhang calls Agent OS. Different tasks can share runtime facilities, tools, and context infrastructure while retaining their own task-specific behavior.

The architecture slide places UnitTest Gru, Refactor Gru, and E2E Test Gru above shared layers. Those layers include runtime and tools; planning, decision making, context building, and environment grounding; and fine-tuning, RAG, and prompt engineering. The intended benefit is faster construction of additional agents within software engineering: each new task can build on an existing foundation instead of recreating the machinery needed to operate in a repository.

Layered diagram places UnitTest Gru, Refactor Gru and E2E Test Gru above runtime and tools; planning, decision making, context building and environment grounding; and fine tuning, RAG and prompt engineering.
Agent OS shares infrastructure across engineering agents.
7:578:10
Suggest correction

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

7:57 · section reference included

Resources

  • Example repository documenting Test Gru's configuration, test execution, and automatic or manual pull-request workflow. Service setup instructions reflect an earlier product.

  • Historical announcement of GPT-4o fine-tuning, now carrying a notice about the platform's 2026 wind-down.

Read the complete timestamped transcript
  1. 0:01

    Hi, everyone. In this presentation, I'm going to talk about coding agents and how to work with coding agents.

  2. 0:09

    This is my agenda. First, I'm going to talk about the future of software development workflow, and then I'm going to show you example of coding agent, and this agent will boost the unit test.

  3. 0:21

    And finally, I'm going to dive deeper into how we solved real-life problems with agents, how we build the agents.

  4. 0:32

    Generative AI has shifted a lot of things, and the people believe AI coding is going to be the future. And we believe a lot of the routine works will be handled by AI, including entry-level coding tasks, debugging, testing, and operating.

  5. 0:49

    But still, I think the creative works, including product design, architecture design, and the difficult issues, still need to be handled by humans. So it must be a human and AI agents collaborate together to solve problems in same workflow in the future.

  6. 1:11

    The collaboration has two types. First one is synchronous and another one is asynchronous. I think people may pretty familiar with the synchronous one, GitHub Copilot or Cursor. This is AI live inside your IDE, and this AI works simultaneously with human.

  7. 1:29

    When you are typing, it's working, right? So

  8. 1:33

    we have already had this kind of product for a long time, since twenty twenty, and it's getting mature since twenty twenty-three, and the rapidly grows twenty twenty-four, and it's widely adopted today.

  9. 1:47

    But the asynchronous one is pretty new, and it just started twenty twenty-four. The asynchronized one is more like a bot inside your workflow. For example, GitHub bot, and this bot can be triggered either manually or automatically.

  10. 2:02

    And this bot will complete the task without human's attention, fully autonomous, and will submit a deliverable once it's done. So it's totally different experience, and these two types of agents are all important.

  11. 2:17

    And I think people need all these kind of agents to solve the real-life problems.

  12. 2:26

    Imagine this is your workflow in the future,

  13. 2:29

    and the workflow will have a lot of AI agents, small agents live inside your repos, workflows in different stages to solve different problems, including unit test, including fixing bugs, writing documents, submit code reviews, and releasing from these kind of tasks, and so human can focus on more creative part.

  14. 2:55

    Next, I'm going to show you a detailed coding agent, which will boost unit test.

  15. 3:02

    I think a unit test is more important today than before because in the AI era, a lot of code are generated by AI. As we just talked, if you are using Cursor, you must be familiar with tab.

  16. 3:15

    For each of the tab, multiple lines of code in multiple parts of the file will be generated, and it's very hard to... for you to focus on every generation, and you may overlook something.

  17. 3:26

    The coding speed is really, really fast, but it also easy to generate bugs. So one of the way to solve the issue or prevent the issue is to write a unit test.

  18. 3:38

    People talk about unit test. People think unit test is important. But when writing unit test, people hates it. Yeah, developers, every developers hates to write unit test. So we build a Guru, an AI agent to help developers to write a unit test and managing unit test.

  19. 3:58

    This is a screenshot that pull request of unit test generated by Guru. And the process is triggered either manually or automatically by a pull request. When human submit a pull request, Guru will detect the change of the code and determine if this change needs more unit test or change existing unit test.

  20. 4:21

    And the Guru will do the coding work, writing the test, and to run the test to make sure everything works, and then prepare and submit a pull request, including all the information showing in this screenshot, the summary of the test and the coverage improvement of the test.

  21. 4:37

    Now, human need to review this pull request and determine if this unit test is good or not, uh, to merge into the, to the repo.

  22. 4:49

    Let's look at the, uh, performance of Guru in production. This is also a screenshot from GitHub. It's a list of pull requests. And, uh, as you can see, over fifty percent of the pull requests are merged and accepted by humans.

  23. 5:04

    So fifty percent is not a very large figure, and there are a lot of rooms to... for improvement. But I think in real life, fifty percent is already meaningful in production and help solve a lot of problems.

  24. 5:19

    And also, Guru handles around eighty percent of the unit test itself in its own repo. We are using Guru every day, and then most of our tests are generated by Guru.

  25. 5:33

    From the commits, you can see Guru is already in, in the counts of commits, Guru is already the first contributor in our team, and we believe more and more agents will become contributors in people's repo this year, twenty twenty-five.

  26. 5:50

    Next, I'm going to dive a little deeper into how we build Guru to solve real-life problems.

  27. 5:58

    To build an agent, I think the first and the most important thing is to define the problem itself. A clear, concrete, and a doable problem is crucial For example, unit test is a problem, but software engineering is not a problem.

  28. 6:16

    And once we have the problem, we need to build the datasets for the evaluation purpose and also the evaluation harness. And then we work on LLMs, building context. And the last, we need Agent OS or framework to orchestrate everything together.

  29. 6:36

    As we all know, agents work on top of LLMs and Gru work on all frontier models, either it's from OpenAI, Anthropic, DeepSeek, Google, et cetera. And we evaluate the models on the different scenarios, try to find the best model for each of the scenario.

  30. 6:53

    That means even within the same job, Gru may use different LLMs for different stages. And also, we fine-tune models to improve the performance. For example, we fine-tune GPT-4o with human-labeled unit-test code to improve the generation of the test code.

  31. 7:18

    Building context in agents is really important, and, uh, we think it's, it's necessary to build the context for specific tasks. For example, here in unit test, we build the context for each of the languages and the frameworks, and we also gather all the information from environment.

  32. 7:39

    For example, the GitHub issues, uh, code reviews, commits, pull requests, README code itself, and all this information need to be gathered together and to be filtered and to be selected to fit into the context.

  33. 7:57

    We talk about unit test a lot, but our vision is not only unit test. We want to build agents for different software engineering tasks. For example, the, the refactor task, the E2E test task.

  34. 8:10

    It is almost import... impossible for us to build every of the agents from scratch, so we build the framework, or we can call it agent operating system, Agent OS.

  35. 8:22

    Different tasks may share similar runtime, similar tools, similar context, so we abstract the common infrastructure, and this operating system will enable us to build the agents in this domain in a really fast pace.

  36. 8:42

    The agent era is coming. Let's embrace agents in workflow. Thanks for watching.