Skip to course content
Free agentic AI fundamentals course

Introduction to Agentic AI and Workflow Automation

Unit 03.04: The permission list as a document you can audit

The permission list should fit on one screen and be checkable against the code.

Read, write, act-with-approval, never

Four categories plus the limits, in a form a non-engineer can read.

Below is one.

{
  "read": [
    "invoice records",
    "contract payment terms",
    "internal notes"
  ],
  "write": [
    "internal notes"
  ],
  "act_with_approval": [
    "issue a refund up to 500",
    "email the customer"
  ],
  "never": [
    "delete records",
    "change contract terms",
    "read salary data",
    "refunds over 500"
  ],
  "limits": {
    "max_refund": 500.0,
    "currencies": [
      "USD",
      "EUR"
    ]
  },
  "enforced_by": "tool signatures and argument validation, not instructions"
}

readable in one screen; every line is checkable against the code

The never list is what a reviewer reads first, and the test for every line on it is whether it is enforced by something other than an instruction. "Never read salary data" holds if there is no tool that reads salary data; it does not hold if there is a general query tool and a sentence asking it not to.

enforced_by says this explicitly. Writing that line forces you to check it, which is most of its value.

The mistake this prevents

The mistake is deriving the permission list from the code after the fact. It then describes what the agent can do rather than specifying what it should - and every gap you would have caught by writing it first is now invisible, because the document and the code agree by construction.

Takeaway

Write the permission list first, in four categories, and state what enforces it. Anything on the never list enforced only by an instruction is not actually on it.