Tools · browser checklist

Agent design check

19 questions about a system that acts. Answer the ones you can, leave the rest, and get back what is still open and what to do about it — in the order the decisions are worth making.

Worked out in this page. No sign-in, no score, and nothing you type is sent anywhere.

From The Living Craft, practical learning and consulting with Sunil Mathew. Explore the programmes

Before you start

What this does, and what it will not do

  1. 01Every next step below is written in the rubric, next to the question it belongs to. Nothing is generated, ranked or summarised by a model, and you can read the whole rubric before answering anything.
  2. 02Steps are ordered by two things only. First, whether the question is about an action that leaves the system — one you cannot take back. Then the order the questions appear in, which is the order these decisions are worth making.
  3. 03A reported gap and a not-yet-defined answer are not ranked against each other. They are different kinds of work: a gap already has a decision behind it and needs a design change, while an undefined answer means nobody has decided and the first step is to find out.
  4. 04Answering yes closes nothing. It asks for the artefact that would show it.
  5. 05There is no score, no percentage and no grade, and no set of answers produces a readiness verdict. Nineteen yeses produce nineteen requests for evidence.

Your answers are held in this page and nowhere else. They are not saved to your browser, not sent to a server, and not recoverable by anybody, including us, once you close the tab. The text file and the print copy ask for your name, role and email address first; your answers still do not leave this page.

The example throughout

A returns assistant that can pay

Imagine a returns assistant. A customer writes in about a return. The assistant finds the relevant policy, looks up the order, and recommends a refund. The conversation reads well. You can follow the reasoning, and you can see how it would save somebody a lot of repetitive work.

Then someone asks a perfectly reasonable question: can it issue the refund as well?

On a diagram that is one more connection. In the world, the system can now move money — and that changes which questions are worth asking about it.

Every question below continues this one example, so you can answer for your own system without having to describe it to anybody, and without a new scenario to learn each time.

An illustrative example. It is not an account of a real customer system, and no incident is being described.

The three answers

“No” and “not yet defined” are different facts

Addressed
You are saying the design has an answer here. That is a claim, and the result asks what would show it.
Reported gap
You know the answer and the answer is no. Somebody looked; there is a hole you can already name, so the next step is a design change.
Not yet defined
Nobody has decided. What the system does here today is unknown to the people who own it, so the next step is finding out, not building.
Not answered here
You did not answer this one. Nothing has been assumed about it, and it is reported as still open rather than as a gap.

The 7 areas

  1. 01Purpose and boundary3questions
  2. 02Evidence3questions
  3. 03Tool permissions3questions
  4. 04External actions3questions
  5. 05Evaluation2questions
  6. 06Uncertainty and recovery3questions
  7. 07Ownership2questions

01 Area

Purpose and boundary

What the system is for, where it stops, and whether it needed to be an agent at all.

The open part and the closed part

You can say which part of this work genuinely needs a decision made at run time, and which part is a fixed sequence.

Why it mattersAn agent is a decision about control flow, not about capability. If the steps are knowable before the request arrives, a workflow does the same job and can be reviewed before it runs. Reaching for an agent because there is a model in the design moves decisions from review time to run time and gets nothing back for it.

In the exampleReading an unstructured message and working out which policy applies is open — the next step depends on what the assistant finds. Issuing a refund against an identified order, a policy version and an amount is closed: a fixed sequence, and calling it from a model does not make it anything else.

A purpose somebody can check

The purpose is written as a task and a boundary, in one sentence somebody outside the team could check.

Why it matters"Handle returns" cannot be checked by anyone. A purpose written as a task with a boundary can be held against the behaviour, and it is what a reviewer measures scope creep against a year later. A goal is only worth writing if it is testable: "safer" is not a goal, "no order is refunded twice" is, because you can go and look.

In the example"Reads a customer’s return request, identifies the order, applies the published returns policy, and recommends or issues a refund within the window that policy defines."

Non-goals, written down

The non-goals are written down, and each one is something somebody could plausibly have asked for.

Why it mattersGoals tell a reviewer what you were trying to build, which they can usually infer. Non-goals tell them what you decided against, which they cannot — and a non-goal nobody can quite justify is very often the seam where the design is unresolved.

In the exampleIt does not amend an order. It does not cancel a subscription. It does not contact a bank. It does not act on an order it could not identify.

02 Area

Evidence

What must be established before it acts, and whether that can be checked afterwards.

An evidence list per action

For each action the system can take, the facts that must be established first are named, with where each one comes from.

Why it mattersAn action with no evidence list is an action whose preconditions live in a prompt and in somebody’s memory. Naming them is also what makes it possible for the tool to refuse: a tool cannot check a precondition nobody wrote down.

In the exampleBefore a refund: an identified order; the state of that order; the policy clause that permits it and which version that clause came from; the amount that clause allows; and the absence of a prior refund against the same order.

Evidence as a reference, not a recollection

Evidence is held as a reference that can be checked afterwards — an identifier and a version — rather than a paraphrase carried in the context.

Why it matters"The policy says returns are accepted within the window" is a recollection sitting in a context window. It cannot be checked after the fact, and it cannot be checked by the tool at the moment of the call. A clause identifier and a version can be both. This is also what makes the system explainable: an answer built out of references is an answer, and an answer built out of the model’s summary of its own reasoning is a story about an answer.

In the exampleThe refund carries clause 4.2 of the returns policy at the version in force that day — not a sentence summarising what the policy seemed to say.

The tool re-checks what it was handed

The tool re-checks the evidence it was handed rather than trusting the arguments it was called with.

Why it mattersEvidence gathered a few steps earlier may have been superseded, and may never have been what the caller says it was. The check that matters is the one at the point where the effect happens, because that is the only check an unusual input cannot route around.

In the exampleThe refund tool re-reads the cited clause at the cited version and re-reads the order state, and refuses if either has moved — rather than accepting the amount it was passed.

03 Area

Tool permissions

What each tool may do, and where that limit is actually enforced.

One job, narrowest scope

Each tool has one job and the narrowest scope that lets it do that job.

Why it mattersA broad tool is a permission granted to every path that can reach it, including the paths nobody designed. Narrowness is one of the few properties of a tool that holds regardless of what the model was persuaded to ask for.

In the example"Issue a refund against this order for this amount" rather than "call the payments API".

Limits enforced at the tool

Each tool’s limits are enforced by the tool itself, not stated in the prompt.

Why it mattersAn instruction in a system prompt is a message inside the system. The tool is where the effect happens. Whatever is enforced at the tool holds regardless of what the model was asked to do — and the distinction is structural rather than a claim about how obedient a model is.

In the exampleThe refund tool refuses an amount above what the cited clause permits. The prompt telling the assistant not to exceed the policy is guidance; the refusal is the control.

Its own identity, and a record of every call

Each tool acts under an identity of its own rather than a shared administrative one, and every call is recorded with its arguments and its result.

Why it mattersA shared identity gives every tool the union of every tool’s rights and leaves the log unable to answer who did this. The record is also the only thing that can settle a dispute afterwards — "the system decided to" is not evidence.

In the exampleThe refund tool holds refund rights and nothing else. It cannot amend an order, because that is a different tool acting as somebody else.

04 Area

External actions

What happens when the system does something the world can see and you cannot take back.

Recommending and acting are separate

Recommending an action and taking it are separate steps, with separate permission.

Why it mattersA recommendation is reviewable text. An action moves money, sends a message or changes somebody’s record. Folding them together means one design decision governs both, and the safe version of the first is not the safe version of the second.

In the exampleThe assistant gathers the policy evidence and prepares a recommendation. Issuing the refund is a separate call, with its own controls over what it will allow.

A repeat cannot pay twice

A repeated request cannot produce the effect twice — the action is idempotent against a key that comes from the request.

Why it mattersA retry, a refresh, and a customer writing in twice all look the same to a system that identifies an action only by the fact that it was asked for. The key has to be derived from the request rather than from the attempt, or the second attempt simply carries a second key.

In the exampleThe same customer sends the same request twice. The refund is keyed to the order and the clause, so the second call returns the first refund rather than paying again.

An unknown outcome can be established

When a tool times out or returns an ambiguous result, there is a way to establish what actually happened before deciding whether to repeat it.

Why it mattersAn unknown outcome is not a failure, and treating it as one is how a single action becomes two. Treating it as a success is how somebody is told nothing happened when it did. The design has to be able to go and look.

In the exampleThe refund call times out. Before anything else, the system reads the payment back by its key and finds out whether the money moved.

05 Area

Evaluation

What you can see after a run, and what the system is checked against.

A record of what it used and did

Each run keeps what the system used and what it did — the evidence with its references, every tool call with its arguments and result, the outcome — and not only the transcript.

Why it mattersThe transcript is what the system said. A review holding only the final answer can tell you the answer was wrong, but not whether the cause was missing evidence, an over-broad permission or a tool returning something unexpected — and those are three different changes. This is the decision that makes the other five improvable.

In the exampleWhy was this refund issued? An answer built from the clause, the version and the tool’s response is an answer. An answer built from the model’s account of its own reasoning is not.

Cases, and failures that become cases

There is a set of cases the system is checked against, and a real failure becomes one of them.

Why it mattersWithout cases, a change is judged by whether the demo still looks right — which it usually does, because that is the path the demo takes. A failure that does not become a case is a failure you have agreed to have again.

In the exampleThe partially shipped order that was refunded in full is now a case, carrying the evidence the system should have required before acting.

06 Area

Uncertainty and recovery

What it does when it cannot establish what it needs, and how a person takes over.

A third outcome besides act and fail

There is a third outcome besides acting and failing: handing over with the specific gap named.

Why it mattersThe honest output when evidence is missing is not a lower-confidence version of the normal output. It is a different output, and it has to be designed as one — otherwise the system’s only way of expressing doubt is to do the usual thing slightly less well.

In the exampleThe request falls outside any policy the assistant holds. It stops short of the refund and says which fact it could not establish, rather than recommending its best guess.

Kinds of uncertainty routed differently

Different kinds of uncertainty are routed differently, rather than collapsed into one confidence number.

Why it mattersA missing policy, an ambiguous order state and two policy versions that disagree are three situations calling for three different next steps. One threshold throws away exactly the information that would have said which — and a number below a threshold tells the person who receives it nothing about what to do.

In the example"No clause covers this" goes to whoever can decide policy. "Two clauses disagree" goes to whoever owns the policy. "The order state is unclear" is a lookup, not a judgement.

A person can take over, and is handed something

A person can take over a run in progress, and what they are handed is defined.

Why it matters"A human is in the loop" is not a design until you can say who, how they are reached, what they see, and what happens to the run while they decide. An intervention path that exists in principle is a queue nobody is watching.

In the exampleThe assistant hands over the request, the order, the clauses it found and the reason it stopped — rather than a conversation for somebody to read from the top.

07 Area

Ownership

Who is answerable for the behaviour, and what happens when it changes.

A named owner, and one per tool

A named person or team owns the system’s behaviour, and each tool it calls has a named owner too.

Why it mattersMost of the permission work happens on the far side of the tool boundary, which often means a different team, a different repository and a different review. A permission model that lives only in the agent’s codebase is one integration away from being bypassed, and the first sign of that is nobody being able to name who owns the tool.

In the exampleThe assistant has an owner. So does the refund tool, and it is not the same team.

Prompt, model and scope changes get reviewed

A change to the prompt, the model or a tool’s scope goes through a review that records what changed and why.

Why it mattersThose three change behaviour without changing anything a test was written against. A prompt edit that widens what the system will attempt is a change to the design, and it should leave the same trace a code change does — otherwise the record of why the system behaves as it does has a hole in it exactly where the behaviour was decided.

In the exampleWidening the refund tool from "within the policy window" to "within the window, or where a manager has approved" is a design change with a record, not a configuration tweak.

Work out what to do next

Leaving questions alone is fine. They come back as still open, never as a gap.

Answered 0 of 19 questions.

If a question here landed

Nothing you answered was sent anywhere. If you downloaded a file, we hold the name, role and email address you gave for it, and nothing else; if you did not, no record of you exists. The page view is counted, as it is on every page here. So are two moments with no answers in them: starting the check and showing the result. None of these counts can be joined to a person or to anything above. If you want to take one of these questions further, these are the routes that exist.

Take your unanswered design questions into practical work and review. Explore Architecting Agentic AI Systems: 30 live hours with Sunil Mathew; confirm complete setup and pre-session preparation before joining.

Take your unanswered design questions into practical work and review. Explore Architecting Agentic AI Systems: 30 live hours with Sunil Mathew; confirm complete setup and pre-session preparation before joining. Request a fit call at https://learning.thelivingcraft.ai/programmes/agentic-systems/architecting-agentic-ai-systems/#discuss-architecting-agentic-ai-systems

File Download

Get the file

The questions are the check itself, blank: all nineteen, with what each answer leads to. The text file is the summary of your nineteen answers, built in your browser; your answers are not sent. It is built against a name, a role and an email address.

This file is the same for everyone. Nothing you typed goes into it. Your address is used to send you this resource once. It does not start any other email.