LevelUpWith

Explore / Architecting for Coding Agents: Prescribe vs Delegate / Lesson 1

Lesson 1: The Prescription Spectrum

Learn the range of ways to direct a coding agent, from fully prescribed (you fix the design and the agent types it) to fully delegated (you state a goal and the agent decides everything else), and why most real decisions belong somewhere in between.

Free to read, no account needed. Part of Architecting for Coding Agents: Prescribe vs Delegate.

By the end of this level you'll be able to

  • Place five real architecture decisions from your own codebase on a prescribed-to-delegated scale and say what the agent is free to decide at each point
  • Tell apart prescribing an outcome, prescribing a structure and prescribing an implementation in a task brief
  • Rewrite one vague agent prompt so it states clearly which decisions are fixed and which are left to the agent

Why start with a spectrum?

Every time you hand a task to a coding agent, you make a decision you may not notice: who gets to decide what. Write "add caching to the product API" and the agent picks where the cache sits, which library to use, how long entries live, how they get invalidated and how the code is laid out. Write out the function signatures, the Redis key format and the TTL, and the agent is mostly typing.

Neither extreme is right by default. Think of a contractor. With some you hand over stamped drawings. With others you say "I need a kitchen that seats six" and let them design it. Most jobs sit in between: the wall stays, the plumbing goes here, pick whatever cabinets fit. This level gives you the vocabulary for that middle ground. Later levels cover how to choose a position. Here we only map the ground.

The scale, end to end

Position What you fix What the agent decides Typical brief
Fully prescribed Design, structure, names, algorithm Keystrokes "Create RateLimiter in limits/token_bucket.py with these methods, using this algorithm..."
Structure prescribed Modules, interfaces, data shapes Internals of each piece "Implement RateLimiter.allow(key) -> bool behind the existing Limiter protocol."
Constraints prescribed Rules the result must obey The design inside those rules "No new infrastructure; must work across 4 app instances; p99 overhead under 2 ms."
Outcome prescribed Observable behaviour and a check Almost everything else "Clients over 100 req/min get HTTP 429; test_rate_limit.py must pass."
Fully delegated A goal Everything "Stop clients hammering the API."

Note that the positions are not about how long the prompt is. A one-line brief can be tightly prescriptive ("use functools.lru_cache(maxsize=512) on get_price"), and a page of background can still leave every real decision open.

Three things you can prescribe

When you read a brief, sort each sentence into one of three bins:

  1. Outcome: what must be true when the work is done. Behaviour, performance, a passing check. "Returns 429 after 100 requests per minute per API key."
  2. Structure: the shape of the solution. Which module owns it, which interface it implements, what crosses a boundary. "Lives in middleware/, implements Limiter, stores state only through CacheClient."
  3. Implementation: how the inside works. Algorithm, library, loop, variable names. "Use a sliding-window log in a Redis sorted set with ZREMRANGEBYSCORE."

A brief usually mixes all three. Problems start when you don't notice which bin a sentence is in. If you fix implementation details you don't care about, you get your guess instead of a possibly better one, and you spend review time on trivia. If you leave out an outcome you do care about, the agent fills the gap with something plausible that you discover later.

Gotcha: "Use best practices" and "keep it clean" belong in none of the three bins. They prescribe nothing, and the agent will read them however it already intended to.

Worked example: rewriting a vague brief

Here is a real-looking prompt from a team chat:

Add rate limiting to the public API. Make it robust.

Everything is delegated, including things the team has firm views on. Here is the same task with the decisions sorted:

## Task: rate-limit the public API

### Fixed (do not change)          <- structure + constraints
- Implement the existing `Limiter` protocol in `app/middleware/limits.py`.
- State goes through `CacheClient` only; no new services or dependencies.
- Must behave correctly with 4 app instances behind the load balancer.

### Outcome (how we judge it)        <- outcome
- More than 100 requests/min per API key -> HTTP 429 with a `Retry-After` header.
- `pytest tests/test_rate_limit.py` passes; add cases for the boundary (100th vs 101st).

### Yours to decide                  <- explicitly delegated
- Algorithm (fixed window, sliding window, token bucket): say which and why.
- Internal function names and file layout inside `limits.py`.

### Ask before                        <- escalation point
- Changing the `Limiter` protocol or any public response format.

The structure is the point here, not these exact headings. Every decision now has an owner, and the "Yours to decide" section matters as much as the "Fixed" one: it tells the agent where to use its judgement instead of hedging or asking. It also tells you what not to argue about in review.

Exercise: place five decisions from your codebase

Pick five recent decisions and give each one a position. For example:

Decision                                  Position              Agent free to decide
----------------------------------------  --------------------  -------------------------------
Public REST response format               Structure prescribed  Serializer internals
Auth token validation                     Fully prescribed      Nothing beyond typing it out
Admin dashboard CSS layout                Outcome prescribed    Components, styling approach
DB migration for new column               Constraints           Migration steps, within
                                                                "no downtime, reversible"
Internal CSV export script                Fully delegated       Everything

Write the third column every time. If you can't say what the agent may decide, you haven't placed the decision yet.

Where instruction files fit

Decisions you prescribe on every task belong in a standing instruction file rather than in each prompt. AGENTS.md is an open Markdown format for this. Its site reports use in over 60,000 open-source projects and support from more than 30 agents and tools, and it is now stewarded by the Agentic AI Foundation under the Linux Foundation. Some agents have their own equivalents, such as Claude Code's CLAUDE.md. Anthropic's current Claude Code guidance puts the job neatly: tell the agent what it can't see, give it a check to run, and enforce the rules that can't have exceptions. That works as a short test of what deserves prescribing at all.

Honest note on evidence (late 2026): Very little measured research compares levels of prescription directly. Most advice, including this lesson's framing, is practitioner opinion. One measured result is worth keeping in mind: METR's 2025 randomised trial found experienced open-source developers took 19% longer with AI tools while believing they were about 20% faster. Treat your gut feel about "what works" with agents as a hypothesis to test.

Key takeaways

  • Directing an agent is a spectrum: fully prescribed, structure, constraints, outcome, fully delegated. Most real decisions sit in the middle.
  • Sort every line of a brief into outcome, structure or implementation. Unsorted lines are where surprises come from.
  • Prompt length isn't prescription level. What counts is which decisions you fix.
  • Good briefs name what is fixed, what is yours to decide, how the work is judged, and when to ask first.
  • Prescriptions you repeat on every task belong in an instruction file such as AGENTS.md.
  • The evidence base is thin and mostly opinion. Hold any rule here loosely.

A 6-question knowledge check follows this lesson in the app, free and without an account.

More like this

  • Google Cloud Generative AI Leader Certification Exam Prep

    Master all four sections of the current Generative AI Leader exam guide at business level, with no coding, from first principles to confident scenario "best an…

    Exam prep · Google · AI & Agents · Expert · 42 levels · 4 free · Professionally curated by levelupwith.com

  • AI Coder: Claude Code & Coding Agents

    Master vibe coding and autonomous workflows using Claude Code, Cursor, MCP servers, and modern AI coding agent frameworks.

    Beyond the Obvious · AI & Agents · Capable · 18 levels · 4 free · Professionally curated by levelupwith.com

  • Introduction to Generative AI

    Learn who invented generative AI, how it works, where the technology stands today, and where it's headed — all in a quick, beginner-friendly course.

    Course · AI & Agents · AI & Agents · Curious · 7 levels · 4 free · Professionally curated by levelupwith.com

  • Agent-Ready Products: CLI, MCP Server or Skill

    Learn how to make an existing product or API something AI agents can find, call and recover with. You'll choose between a CLI, an MCP server and a Skill and de…

    Beyond the Docs · AI & Agents · Expert · 40 levels · 4 free · Professionally curated by levelupwith.com

  • AI Agents for Non-Developers: Understand, Try, Oversee

    Learn how AI agents differ from the chat assistants you already use, try research and browser agents safely without writing any code, and delegate tasks with c…

    Course · AI & Agents · AI & Agents · Capable · 18 levels · 4 free · Professionally curated by levelupwith.com

  • AI Proficiency: From Occasional User to Power User

    Get dependable, high-quality results from AI assistants such as ChatGPT, Gemini, Claude and Copilot. You will learn to give rich context, run multistep workflo…

    Course · AI & Agents · AI & Agents · Capable · 18 levels · 4 free · Professionally curated by levelupwith.com