feat: add policy engine and policy support#579
Merged
jesseturner21 merged 17 commits intoaws:mainfrom Mar 23, 2026
Merged
Conversation
Contributor
Author
📦 Package Tarballaws-agentcore-0.3.0-preview.6.0.tgz How to installnpm install https://github.com/jesseturner21/agentcore-cli/releases/download/pr-579-tarball/aws-agentcore-0.3.0-preview.6.0.tgz
|
Hweinstock
reviewed
Mar 23, 2026
aidandaly24
requested changes
Mar 23, 2026
Contributor
aidandaly24
left a comment
There was a problem hiding this comment.
Have some comments many are nit/suggestions
Add Cedar authorization policy support to AgentCore CLI: - Schema: PolicyEngine and Policy schemas with Zod validation - TUI: Full add/remove wizards for policy engines and policies - Source methods: Cedar file, inline statement, or AI generation - Gateway selection for generation flow - Expandable text input for generation prompts - CLI: Non-interactive add/remove commands with all flags - agentcore add policy-engine --name <name> - agentcore add policy --name <name> --engine <engine> --source/--statement/--generate - agentcore remove policy-engine/policy --name <name> - Deploy: CDK construct integration, CloudFormation output parsing, deployed state tracking with composite engine/policy keys - Status: Policy engines and policies shown in status command and ResourceGraph TUI with correct deployment state diffing - Generation: StartPolicyGeneration + waiter integration with deployed engine ID and gateway ARN resolution - Validation: Schema validation for names, statements, validation modes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…e collisions Policies are nested under engines, so the same policy name can exist in multiple engines. Switch getRemovable/remove/previewRemove to use an "engineName/policyName" composite key so the generic TUI remove flow can uniquely identify policies with a single string. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Regenerate lock file with npm@10 to resolve missing yaml@2.8.2 dependency entry that caused `npm ci` failures on Node 20.x and 22.x. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Merge duplicate imports in policy-generation.ts - Use dot notation instead of bracket notation in outputs test - Replace Array<T> with T[] in outputs.ts and useDeployFlow.ts - Add void operator for floating promises in AddPolicyFlow - Wrap async handlers with void for no-misused-promises - Escape quotes in JSX text in AddPolicyScreen - Fix prettier formatting across all changed files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… policy Previously, passing multiple source flags (e.g. --statement + --source) was silently accepted with an implicit precedence order. Now the command returns a clear error if more than one is provided. Also fix pre-existing type errors in dev config tests by adding the required policyEngines field to test fixtures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add interactive TUI support for removing policy engines and policies, including menu entries, selection screens, confirmation, and success states. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…h credentials The createManagedOAuthCredential method was only writing the client secret with an incorrect env var name. Now correctly writes both _CLIENT_ID and _CLIENT_SECRET suffixed env vars, matching the pattern used by CredentialPrimitive. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The "Generate a Cedar policy" option's disabled description was too long
("Requires deployed engine — run `deploy` first") and got cut off in
narrow terminals. Shortened to "Deploy engine first".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…error When the policy generation API returned an error, pressing Escape on the review step would loop back to the loading step and re-trigger the API call, creating an infinite loop. The root cause was the double goBack() pattern (one immediate, one via setTimeout) suffering from stale closures — both calls saw the same step, so the second never reached the description step, while the first landed on loading and re-fired the useEffect. The fix uses a skipGeneration ref: when navigating back from review, the ref is set to true and a single goBack() moves to the loading step. The useEffect detects the ref, resets it, and calls goBack() again (now with the correct step in scope) to reach the description step — without ever starting generation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The CDK constructs renamed McpGateway to Gateway in PR #65. No deployed stacks use the old prefix since this is pre-GA. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…usivity Cover all pairwise combinations and the triple-flag case to ensure the CLI rejects conflicting policy source flags. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The sourceFile field is metadata tracking where a policy statement originated. The statement itself is persisted in agentcore.json, so the original .cedar file is not needed after add. Failing validation when the source file is cleaned up is incorrect. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The remove action always output JSON regardless of whether --json was passed. Now matches the add command behavior: plain text by default, JSON only when --json is specified. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Validate --validation-mode CLI flag with ValidationModeSchema.parse() instead of unsafe cast (PolicyPrimitive) - Add ambiguity check in remove/previewRemove when policy exists in multiple engines without --engine specified (PolicyPrimitive) - Gate JSON output behind --json flag in policy engine remove (PolicyEnginePrimitive) - Add uniqueBy validation on policies array to prevent duplicate names (policy schema) - Narrow validationModeItems type to remove unnecessary cast (AddPolicyScreen) - Disable reviewNav when generation error is shown (AddPolicyScreen) - Add expandable to inline Cedar statement TextInput (AddPolicyScreen) - Check waiter result state before proceeding (policy-generation) - Revert SelectList wrap from truncate back to wrap Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
aidandaly24
approved these changes
Mar 23, 2026
This was referenced Mar 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds full policy engine and policy primitive support to the AgentCore CLI, including schema definitions, CLI commands, TUI wizards, deploy pipeline integration, and removal flows.
Key changes:
PolicyEnginePrimitiveandPolicyPrimitivewith full add/remove lifecycleadd policy-engine,add policy(with--statement,--source,--generatemutually exclusive flags),remove policy-engine,remove policyPolicyEngineConfigurationwiring to associate policy engines with gatewaysRelated Issue
N/A
Documentation PR
Type of Change
Testing
How have you tested the change?
npm run test:unitandnpm run test:integnpm run typechecknpm run lintsrc/assets/, I rannpm run test:update-snapshotsand committed the updated snapshotsChecklist
Note: This PR depends on the corresponding agentcore-l3-cdk-constructs PR for the CDK PolicyEngine/Policy constructs.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the
terms of your choice.