August 7, 2026 · 7 min read
AWS Dogwood: Trajectory-Aware
Agent Authorization

Key Definitions
Temporal Policy A stateful authorization rule that decides whether the current request is permitted by evaluating the sequence of prior events in an agent's session trajectory, not just the individual tool call in isolation.
Dogwood An open-source policy language AWS extended from Cedar (Apache 2.0) that expresses temporal constraints such as approvals, ordering, and running limits, with built-in support for Amazon Bedrock AgentCore.
AI agents behave fundamentally differently from traditional applications: they decide at runtime which tools to call, with which arguments, and in what order. That flexibility makes agents both capable and hard to control — one tool call may be safe in isolation but harmful in the context of the preceding call, such as after reading from an untrusted source. AWS open-sources Dogwood to move authorization from stateless to trajectory-aware.
Why Static Access Control Falls Short
Before AI agents, it was generally sufficient for access controls to treat each action as an independent event; applications relied on deterministic business logic to enforce ordering and data freshness. Agents break that assumption. Their runtime flexibility means: an agent calls a lookup_customer tool, hallucinates a different account number than returned, and passes it to transfer_funds which moves money to the wrong account; a runaway agent executes dozens of trades in a loop because nothing tracks cumulative exposure over the limit; an agent both approves and denies the same insurance claim within seconds.
Each individual tool call in these scenarios passes a stateless policy check. The problem only becomes apparent when you look at the agent's trajectory — the ordered sequence of actions in a session. That is the core gap static controls cannot catch.
Dogwood and Cedar: Extension, Not Replacement
Dogwood builds on Cedar. Cedar is the open-source authorization language AWS contributed to the CNCF as a sandbox project in late 2025; it already powers AgentCore Policy for stateless checks: deciding whether a user or agent may call a refund tool with a given set of arguments. Dogwood takes this a step further — it can also account for earlier events: whether somebody approved the refund, how much the agent has refunded in the past hour, or whether it previously called a given tool.
Critically, Dogwood does not replace Cedar but extends it. Any existing Cedar policy is also a valid Dogwood policy, so teams do not have to rewrite their current rules. For temporal policies, Dogwood translates the history-dependent condition into a Cedar context field; in the reference implementation, Dogwood fills that field from the event history before Cedar makes the authorization decision.
Tamper-Proof Enforcement at the Gateway Perimeter
Temporal policies run at the AgentCore Gateway perimeter, outside the agent's own code. Because the agent cannot intercept or manipulate the policy logic on the gateway, these protections cannot be bypassed regardless of model behavior, prompts, or bugs in the agent code. AgentCore Gateway routes MCP tool calls, agent-to-agent calls, and model inference calls through a single endpoint, giving temporal policies one consistent place to reason about an agent's behavior over time across all three call types.
The policy engine works as follows: when the gateway receives a tool call, it queries the trajectory state for actions, inputs, and outputs relevant to the policies being evaluated; evaluates each temporal policy against the current request in the context of prior events in the customer-defined trajectory; then returns a deterministic ALLOW or DENY decision and logs the full context. Temporal policies deny by default and forbid wins over permit — consistent with existing AgentCore Policy security defaults.
Seven Typical Policy Patterns
AWS's private-banking portfolio agent example demonstrates seven temporal policy patterns:
Workflow sequencing — require one tool to be called before another to verify standard operating procedure adherence. Output-to-input integrity — require that the current call's argument exactly matches a prior tool's output, preventing hallucination or substitution between steps. Data freshness — require a data lookup within a time window to prevent decisions based on stale information.
Cumulative budget caps — track cumulative financial exposure in a session and reject once it exceeds the risk limit. Human approval before privileged actions — block destructive or sensitive tool calls until an explicit human approval event is recorded in the trajectory. Mutual exclusion — prevent an agent from both approving and denying the same matter within seconds. Progressive trust decay — automatically tighten permissions when an agent operates without human engagement.
Adoption Challenges: The Cost of Statefulness
Dogwood is more expensive to run than Cedar because it is stateful: it must retain and search event records, and evaluation time can depend on the length of that history. The included open-source reference interpreter is meant for exploring and testing the language, not for use as a production authorization engine.
For teams who want to adopt the open-source project immediately, AWS notes a series of engineering requirements: provide trusted timestamps, authenticate events, keep field and action names consistent, store traces durably, log authorization decisions, isolate histories between tenants, and establish a retention policy because tool-call histories can contain sensitive data. For the open-source release, the harder question is whether the event history is complete and trustworthy enough to use for authorization.
References:
Frequently Asked Questions
What is Dogwood, and how does it relate to Cedar?+
Dogwood is an open-source policy language AWS built on top of Cedar, released under Apache 2.0. It preserves all of Cedar's syntax, so any existing Cedar policy is also a valid Dogwood policy and teams do not need to rewrite current rules. Dogwood's addition is that it can factor an agent's prior event history into authorization decisions, whereas Cedar itself only performs stateless, per-request checks. AWS has added Dogwood support to Amazon Bedrock AgentCore Policy, its managed service.
Why do agents need temporal policies beyond static access control?+
Existing AgentCore Policy enforces stateless, deterministic rules: who can call which tool under what conditions. This misses critical cases — for example, an agent calls a lookup_customer tool, hallucinates a different account number than what was returned, and passes it to transfer_funds, moving money to the wrong account; or a runaway agent executes dozens of trades in a loop because nothing tracks cumulative exposure already exceeding the risk limit. Each individual tool call passes a stateless check; the problem only appears when you look at the ordered sequence of actions in the session.
Where are temporal policies enforced?+
Temporal policies run at the AgentCore Gateway perimeter, outside the agent's own code. Because the agent cannot intercept or manipulate the policy logic on the gateway, these protections cannot be bypassed regardless of model behavior, prompting, or bugs in the agent code. AgentCore Gateway routes an agent's MCP tool calls, agent-to-agent calls, and model inference calls through a single endpoint, so a temporal policy can govern all three.
What are typical use cases for temporal policies?+
AWS's example covers seven patterns: workflow sequencing (require one tool before another to verify SOP adherence), output-to-input integrity (require the current call's argument to exactly match a prior tool's output, preventing hallucination or substitution), data freshness (require a lookup within a time window), cumulative budget caps, human approval before privileged actions, mutual exclusion, and progressive trust decay (tighten permissions when an agent operates without human engagement).
What are the adoption challenges for Dogwood?+
Dogwood is stateful, so it is more expensive to run than Cedar — it must retain and search event records, and evaluation time can depend on the length of history. The current open-source reference interpreter is meant for exploring and testing the language, not as a production authorization engine. Teams adopting the open-source project must provide trusted timestamps, authenticate events, keep field and action names consistent, store traces durably, log authorization decisions, isolate histories between tenants, and set a retention policy because tool-call histories can contain sensitive data.