Gradle Is Going Agentic

We're making Gradle work well with coding agents, and that meant not shipping Configuration Cache by default in Gradle 10 this cycle. Here's the tradeoff, and why we think it's the right one.

Table of Contents

Introduction

More and more of the people who run Gradle every day aren’t typing ./gradlew build themselves. They’re asking an agent to run a build, then asking it why the build failed, then asking it to fix whatever failed. Running, understanding, and debugging builds are increasingly mediated by an agent sitting between the developer and the build tool.

And this isn’t unique to Gradle. Every build tool out there is getting driven by the same very new, and very different, users these days. With new usage patterns come new kinds of friction and footguns, and we’re all feeling them. It’s past time we stopped ignoring this and actually did something about it.

So we started a project to change that. We’re calling it Agentic Gradle, and it comes down to two things: skills that teach agents how to use Gradle effectively, and new Gradle features built for agentic environments. Not because Gradle is bad at this, but because agentic environments push builds in ways we never had to support before. Smoothing out those rough spots is a big part of the work.

Picking it up meant we didn’t do something else this cycle. We’ll get to that, because it’s the more interesting part of the story. But first, what we’re actually building.

What this looks like in practice #

Three efforts, roughly in priority order.

Official Gradle skills. A skill is a small, focused set of instructions that teaches an agent how to do something specific with Gradle: read a build failure, run the right task, understand what a Build Scan is telling it. Skills also amplify your intent. Give an agent a loose prompt like “speed up my build” and, left to its own devices, it’ll reach for whatever pattern it saw most often on the internet, which is often years out of date. A focused Gradle performance Skill can steer it toward what actually helps: enabling the configuration cache, reaching for a version catalog, avoiding configuration-time anti-patterns it wouldn’t otherwise think to check.

We’ve been experimenting with these throughout the year, and a few are close to ready. We won’t ship one until we can show it makes an agent measurably better at a real Gradle task, which is exactly what the next piece is about.

Benchmarking what helps. You can’t claim a change or a skill helps if you can’t show it helps. So we’re building the difficult but essential thing: repeatable scenarios that hold the agent and the Gradle version steady, then measure what a new Skill or a change to Gradle actually adds. We’re not benchmarking the agent. The agent and the version it’s driving are the environment; the Skill or the change is what’s under test. This might not rise to the level of a peer-reviewed study, but it will produce a clear, honest signal we’re comfortable putting in front of you.

Removing the friction. Some things about using Gradle with an agent are just annoying today. Builds behave oddly in some agentic workflows. Agents burn tokens on interactions that should be one step. And our documentation is written for people browsing it, not for an agent trying to search and fetch the right answer mid-build. We’re even chewing on what a more agent-friendly command line could look like, since an agent shouldn’t have to reverse-engineer output that was written for a human. Whether that grows into a real feature is a question we’ll let the benchmarks answer. We’re hunting these down and either fixing them or writing up a reproducible case so someone can.

Real talk: what this cost #

Now the tradeoff, and you can watch it play out on our public roadmap.

Every team has a ceiling. Ours has room for about three big projects a quarter, and no amount of wishful planning changes that. So every cycle is a forced-ranking exercise: three major efforts get to move, and the rest of the big-ticket roadmap waits its turn. To be clear, this is only about where the biggest efforts go. The everyday work of fixing bugs and smaller platform improvements keeps running the whole time.

This cycle, two of the three slots were spoken for:

  1. Declarative Gradle stays, because the window to define what a modern, approachable Gradle build looks like is open right now and won’t stay open forever. It pays off for agents too, maybe more than we first realized: a declarative build is a self-describing one. An agent can read how the build is meant to be configured directly, without expensive inference, without crawling through imperative build logic, and without running the build just to find out what it does. A stable, declarative DSL is far easier to reason about than today’s dynamic scripts.
  2. Isolated Projects stays, because it’s central to where Gradle’s performance is headed and we’re committed to making it a stable, first-class feature. It’s already fast, and the isolation constraints it enforces unlock a whole class of optimizations we haven’t finished mining yet, so it’s only getting faster. We intend to carry it from incubating all the way to done.

That left one slot. We gave it to Agentic Gradle instead of the work to make Configuration Cache the default in Gradle 10.

We want to be precise about what that does and doesn’t mean, because “we deprioritized Configuration Cache” is easy to misread as bad news, and it isn’t.

Configuration Cache already exists. It’s shipped, it’s stable, and it’s ready for you to adopt today. For a new project it should be your first choice, and our best practices say exactly that. What we chose not to do this cycle is flip the default in the Gradle codebase, and that’s a bigger job than it sounds. A default has to work all the time, for every existing build, not just the greenfield ones. That’s a backward-compatibility and comprehensiveness problem first: cleanly attributing failures, closing capability gaps, and making sure nobody gets silently wrong results on upgrade. Getting there is a large, careful project in its own right.

That work is still ongoing; we just think supporting agentic development matters more right now. The plan is now to make Configuration Cache the default in Gradle 11 rather than Gradle 10, not to drop it. And in the meantime, the thing most people actually want from “CC by default” is available under one line in gradle.properties:

org.gradle.configuration-cache=true

Our advocacy team is spending real energy helping community projects turn the Configuration Cache on and gain the benefits. If you’ve been waiting for the default to flip before adopting, our strong advice is: don’t wait. The benefits are available now, and the projects that adopt early hit fewer surprises than the ones that wait for a forced migration.

Why agents were worth the slot #

Three slots, and we spent one on this instead of a performance default a lot of people are asking for. That deserves a justification.

The short version: we don’t see the JVM build ecosystem treating agentic engineering as a first-class problem yet. Build tools mostly assume a human at the keyboard. That’s a gap, and gaps like this don’t stay open. The tool that agents find easy to reason about is the tool teams keep reaching for, precisely because so much of the reaching is now done through an agent.

At the same time, the open source projects we respect are leaning into this hard, shipping skills and agent-facing docs and treating “does this work with an agent” as a real question. We should be in that conversation, not watching it.

And the framing that matters most to us internally: we treat this as a feature of Gradle, not a coat of paint on top of it. Making a build tool legible to an agent is the same discipline as making it legible to a human. Clearer failures, fewer hidden footguns, honest signal about what a build is doing. That work pays off whether the thing reading the output is a person or a model.

What’s next #

Over the next few weeks we’ll start releasing the first skills once they clear the benchmark bar, along with the scenarios we used to measure them so you can see our work rather than take our word for it. If you’re already driving Gradle through an agent and hitting friction, that’s exactly the input we want. Come tell us where it hurts in the new #agentic-gradle channel on the Gradle Community Slack.

Configuration Cache by default is still coming. Just not this cycle, and not before we’re ready to make it right. For now, go turn it on yourself. It’s been waiting for you the whole time.

Discuss