What Should an AI Agent Be Allowed to Do Without Asking You? A developer argues that AI agents need an authorization layer outside the language model to govern which actions they can take autonomously. The proposed design classifies agent actions by risk — such as read_public, write_internal, financial, and destructive — and routes each request through a policy engine that can allow, require approval, or deny it. The developer warns that relying on system prompts for safety amounts to "hopeful wording" rather than real enforcement. Your agent notices a failing deployment. It reads the logs, identifies the bad commit, drafts a rollback, and now wants to apply it. Should it just do it? If it asks for permission at every step, it becomes an expensive autocomplete. If it can do anything it can describe, it becomes a liability. The useful question is not “How smart is the agent?” It is: Which actions are safe to pre-authorize, which actions need explicit approval, and which actions should be impossible? That is not a prompt engineering problem. It is a permission design problem. Most teams start with one of two bad defaults. The first is maximum caution : the agent must ask before everything. That feels safe, but it destroys the value of the agent. If every file read, search query, or draft suggestion requires approval, the human becomes the bottleneck. The second is maximum convenience : the agent gets broad tool access because it is “good at knowing what to do.” That works until the agent misinterprets a request, hits an edge case, follows a poisoned instruction, or performs an action the user never meant. The better approach is to classify actions by risk. An agent can often do these without asking: An agent should usually ask before doing these: The distinction is not whether the agent is confident. The distinction is whether the action is reversible, bounded, private, and expected . Scenario: Your system prompt says, “Only take safe actions. Ask before doing anything destructive.” The agent has a delete repository tool. One day, it decides a repository is no longer needed. Why it matters: Language model behavior is probabilistic. Prompt instructions influence the agent, but they do not guarantee enforcement. If the tool is available and the agent chooses it, the action may happen. A safe agent system needs an authorization layer outside the model. Solution: Treat every agent action as a permissioned API call. The agent can propose an action, but your system decides whether the action is allowed, requires approval, or is denied. type RiskClass = | "read public" | "read sensitive" | "write draft" | "write internal" | "external communication" | "financial" | "destructive" | "privilege change"; interface AgentActionRequest { agentId: string; userId: string; action: string; risk: RiskClass; resource: string; estimatedCost?: number; context: Record