Deep Keep

Dev blog — Building a game with an AI coding agent, part 6

← All posts

Directing the agent: what the human actually does all day

If the agent writes most of the code, the constitution holds the rules, the docs hold the memory, and the gates decide what's correct, a fair question is what the human is for.

More than I expected, and it's a different job than programming. The work that stayed mine was direction — deciding what to build, and, more subtly, reshaping what got asked for into the form that actually fit the project. The reshaping turned out to be the highest-leverage thing I did.

Intent, not specs

I never wrote specs. I wrote intent, usually a sentence or two: "difficulty rises but the player has no way to catch their breath — give them one, without undoing the climb." The agent, given that plus the constitution and the design log, came back with an implementation and often a sharper design than the sentence implied.

That works because the guardrails absorb the ambiguity. I don't have to pre-specify every edge case, because the rules the agent operates under already rule out the bad resolutions of it. Loose intent is safe when the constraints are tight. It's only dangerous when the agent is improvising in a vacuum, and by this point it never was.

The real job: reshaping the dangerous ask

Here's the move I made dozens of times, and the one I'd most want anyone building this way to internalise. A request comes in — often from a player, sometimes from me — that is reasonable on its face and corrosive if taken literally. The human's job is to catch that and turn it into the version that gives the person what they actually wanted without breaking the game.

Three real cases from this project:

In each case the literal request was wrong and the want behind it was legitimate. Finding the version that honours the want and obeys the rules is judgement the agent doesn't have and a gate can't supply. It's taste, and taste stayed human.

Knowing when to change the rules

The other call that couldn't be delegated was knowing when the rules themselves had to give. The clearest instance: the design eventually wanted permanent equipment carried between runs, which cut against the "options, not power" rule.

An agent won't, and shouldn't, unilaterally overturn a core principle — that's an owner's call. So I made it deliberately: not "ignore the rule this once," but "the rule is amended, and here are the exact conditions under which persistent power is allowed" — conditional, bounded, self-countering, folded into the existing guarantees. The amendment went into the constitution, so every later task is measured against the new rule, and the agent then executed faithfully inside that envelope. Changing the constitution is the human's job; obeying it is the agent's. An agent that edits its own core constraints on a whim is an agent with no constraints.

What it felt like

Less like programming, more like editing a fast, tireless, literal-minded writer. I set direction, caught the requests that would quietly rot the thing, made the calls that were mine to make, and let the agent — bounded by the rules, checked by the gates — do the bulk of the construction. My hands were off the keyboard most of the time and my judgement was engaged all of it. The next post pulls back to the shape of the whole effort: why it came out as a hundred and forty-five small pull requests rather than a few large ones.

▶ Play Deep Keep