Go back
ARTICLE / READING FRAME

What may an agent do? Separate permissions from the task

“Handle this task” does not grant a tool unrestricted access to every account. Make reading, drafting and external sending separate capabilities with a small, inspectable permission card.

Listen to this articleUsing local device voices

Checking local voices…

What may an agent do? Separate permissions from the task
TL;DR / 01

In brief

“Handle this task” does not grant a tool unrestricted access to every account. Make reading, drafting and external sending separate capabilities with a small, inspectable permission card.

READING / 02
On this page

Imagine an information assistant that reads three sources, prepares a digest and can email the result. Asking it to “prepare the weekly summary” does not require those actions to share one permission. Reading, saving a draft and sending to a real recipient can have different boundaries. This article makes those boundaries visible through a personal-automation example. It is a design approach, not an assessment of a particular product’s security.

Put the task and permission on separate lines

The task describes the desired outcome. A permission card states which operation may be applied to which data. Preparing a summary might authorize reading selected sources and creating an administrator-only draft. Sending may remain outside that card. This prevents a tool’s technical capabilities from being confused with the actions currently authorized.

Include the user, target record, allowed operation and scope validity. Consider a specific folder instead of every file, or a selected destination instead of every recipient. These questions expose ambiguity in your own flow rather than prescribe a universal authorization schema. If you cannot explain why access to a field is necessary, begin with a narrower scope and inspect the result.

Define the default for an unauthorized operation

Before coding, write what happens when explicit permission is absent. A clear denial can replace silently continuing, guessing the scope or trying another tool to achieve the same effect. That response should leave a useful next step: explain the missing scope and a safe way forward. Avoid revealing unnecessary private data or the existence of another account in the denial message.

OWASP’s authorization guidance discusses least privilege, denial by default and checking permissions on every request. Translate those principles into your example: source reading is allowed, draft storage has a separate scope and external sending requires current approval. Choosing a library does not complete the design. Observe whether the resulting behavior actually enforces the intended distinction.

◈ EXPERIMENT LAB / PERMISSIONSLOCAL ONLY ↗

Experiment: What may an agent do? Separate permissions from the task

A safe simulation. No real requests, messages or payments; choices stay on this page.

Allowed in this model. No real operation executed.Deletion is always denied in this example; real authorization must also be enforced server-side.

Your selected settings and server-recomputed result download with the article. Your choices are not saved to the database.

Bind approval to a particular external effect

When requesting approval, show the text, recipient and operation being approved. If the text changes afterward, reconsider whether the earlier approval covers that version. “They said yes before” is not a sufficient operation record. Similarly, saving a draft does not automatically authorize publishing it or sending it to another service.

Keep that distinction visible in the interface. If previewing, saving and sending share the same label, users may struggle to distinguish their effects. Each control should communicate its result. Preserving the text after cancellation or denial matters too: someone should be able to reconsider the scope without losing their work. Approval is more than a prominently colored button.

Enforce the check at the real boundary

Hiding a browser button does not establish that a direct request is blocked. The server must evaluate the user, record ownership and permitted operation as well. Do not trust a client-supplied “approved” flag on its own. Make the approval’s job version, destination and continuing validity inspectable together. Different layers should not silently interpret the same scope differently.

Use a small table to compare the operation shown by the interface, the operation accepted by the API and the effect observed at the external service. Do all three describe the same job? If sending is denied but the draft disappears or the destination changes, only part of the intended boundary may be protected. This comparison connects interface behavior with the actual system outcome.

Exercise a denied example deliberately

Do not include only the correct user and record in the test set. Specify outcomes for another record identifier, expired approval and a recipient changed after approval. In a controlled environment, independently check that no external effect occurred in each denied case. An error message alone does not prove that nothing was sent; a timeout likewise does not establish definite failure.

The experiment matches three permission cards against four operations. Permanent deletion is always denied in this simplified model, and no service is called. Download its result as a PDF and compare it with your own design notes. For the next implementation round, one observed allowed case and one observed denied case provide a more concrete starting point than a broad security claim that has not been tested.

Source

Frequently asked questions

Is granting every permission at once simpler?

It may seem simpler initially, but it enlarges the data and operations affected by a mistake. Begin with access needed for the task. Assess the target and external effect whenever another permission is required; convenience should not be the only criterion.

Does a visible tool imply permission to use it?

No. A tool appearing in a list does not establish authorization for a particular user, record or destination. Evaluate the actual context of each request. Hiding an interface button may help presentation, but it does not replace server enforcement.

What if the recipient changes after approval?

Do not assume the previous approval covers the new recipient. Reconsider approval when content, target or operation scope changes. The record should show exactly which version and destination the person approved rather than retain only a generic approval flag.

Is this permission game a real security test?

No. It explains decision relationships using a few fixed operations. It does not access users, sessions or services. Authentication, record ownership, server checks, concurrent changes and failure paths must be tested separately in your actual system.

Where should I begin?

Choose one flow and write separate rows for reading, draft storage and sending. Identify the user, data scope and expected evidence for each. Test an allowed case, then a wrong user and changed destination using controlled test data.