Keeping AI Coding Agents Moving on Multi-Step Projects

AI coding agents are impressive in the first hour. Give one a contained change and a clear test, and it can often do useful work with very little supervision. The trouble starts when the work is a real project: several steps, existing decisions, tests, a repository with history, and some things that must not be changed casually.

That is where a lot of agent work slows down. The agent starts re-asking questions that were settled days ago. It finds one ambiguity and waits. It loses the original goal in a long conversation. Or it makes a broad change because nobody gave it a durable boundary.

The answer is not a larger prompt. It is to make the project readable to a fresh contributor, whether that contributor is a person or an agent.

Start with a project entry point

Every project needs one small root file that tells a contributor what to read before touching code. Depending on the tool, that might be AGENTS.md, CLAUDE.md, or another documented convention. The important part is not the filename. It is that the file points to the project specification, architecture notes, test commands, and local rules.

Keep that entry point short. Its job is to route a new session to the right material, not to become a second copy of every design document. A short file is also much more likely to be read again after the agent has been working for a while.

Give each file one job

I have found that a few plain Markdown files cover most of what an agent otherwise has to ask:

  • SPEC.md says what the project must do and how success is measured.
  • ARCHITECTURE.md records the design choices that should not be reopened for every task.
  • RULES.md states the safety boundary: what can be decided autonomously, what requires approval, and what is off limits.
  • TASKS.md breaks the active work into small, independently verifiable pieces.
  • DECISIONS.md records meaningful choices and why they were made.
  • STATE.md is the handoff note for the next work session.

Not every project needs every file. A small script may only need a README and a short task list. A project with infrastructure, tests, and several contributors benefits from more structure. The point is to put answers where a new session can find them instead of hoping an earlier conversation is still in context.

Make autonomy explicit

Agents are usually cautious around ambiguity. That is sensible when a change might be destructive, expand access, or alter a production system. It is less useful when the agent stops over a routine naming choice or a documentation detail that the project rules already cover.

A useful rules file separates those cases. It can say that the agent may make ordinary implementation decisions, must log material decisions, and must stop for missing permissions, a security-sensitive change, a conflict in the documented requirements, or repeated failure to make measurable progress.

That is more useful than telling an agent to “be autonomous.” The boundary is concrete. The agent knows when it should keep moving and when it should ask.

Use verification as the definition of done

A task should end with evidence, not a vague feeling that the work is probably complete. For code, that usually means a focused test, lint command, build, or a behavior that can be exercised against a disposable environment. For documentation, it may mean a link check, a rendered preview, and a source review.

The important thing is to name that evidence before the work starts. “Fix the parser” is a weak task. “Make this input pass the regression test and keep the focused parser suite green” gives the contributor a finish line.

This also keeps changes smaller. One task, one coherent change, one verification result is easier to review and easier to revert than a long sequence of unrelated edits.

Fresh sessions are a feature

Long conversations accumulate tool output, failed experiments, and partial reasoning. Eventually the original goal becomes a summary of a summary. Starting a fresh session for each bounded task is not a limitation. It is a way to force the next contributor to read the current project state instead of relying on stale context.

That only works if the state is written down. Before ending a session, record what changed, what was verified, what remains, and any decision the next session needs to respect. The next session should be able to orient itself from the repository without needing a private recap.

Keep planning and execution separate

For larger work, it helps to separate the person or model that decomposes the project from the one doing the next small task. Planning needs a broad view of the constraints. Execution needs discipline: inspect, make the smallest change, run the named check, and report the result.

The split also makes review simpler. A plan can be questioned before implementation begins. Each implementation slice can be checked against the plan. If the project changes direction, update the written decision rather than relying on someone remembering a discussion.

A practical starting point

If I were preparing an existing project for agent-assisted work, I would start small:

  1. Add a short root instruction file that points to the real documentation and test command.
  2. Write down the current goal and the boundaries that should not be crossed.
  3. Turn the next piece of work into a small task with a specific verification step.
  4. Require a handoff note at the end of each session.
  5. Review decisions and test results, not just a final summary.

The tools will change. The discipline will not. A project that is clear enough for a fresh agent to pick up is also easier for a future teammate, or for you six months later, to understand without guessing.