agentcore-cli 0.31.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. agentcore/__init__.py +1 -0
  2. agentcore/agent_inspector/NOTICE +9 -0
  3. agentcore/agent_inspector/favicon.svg +60 -0
  4. agentcore/agent_inspector/index.css +1 -0
  5. agentcore/agent_inspector/index.html +14 -0
  6. agentcore/agent_inspector/index.js +289 -0
  7. agentcore/assets/AGENTS.md +60 -0
  8. agentcore/assets/README.md +108 -0
  9. agentcore/assets/agents/AGENTS.md +218 -0
  10. agentcore/assets/cdk/.prettierrc +8 -0
  11. agentcore/assets/cdk/README.md +26 -0
  12. agentcore/assets/cdk/bin/cdk.ts +216 -0
  13. agentcore/assets/cdk/cdk.json +88 -0
  14. agentcore/assets/cdk/gitignore.template +9 -0
  15. agentcore/assets/cdk/jest.config.js +9 -0
  16. agentcore/assets/cdk/lib/cdk-stack.ts +291 -0
  17. agentcore/assets/cdk/npmignore.template +6 -0
  18. agentcore/assets/cdk/package.json +30 -0
  19. agentcore/assets/cdk/test/cdk.test.ts +31 -0
  20. agentcore/assets/cdk/tsconfig.json +28 -0
  21. agentcore/assets/container/python/Dockerfile +47 -0
  22. agentcore/assets/container/python/dockerignore.template +27 -0
  23. agentcore/assets/container/typescript/Dockerfile +25 -0
  24. agentcore/assets/container/typescript/dockerignore.template +24 -0
  25. agentcore/assets/datasets/predefined-v1.jsonl +3 -0
  26. agentcore/assets/datasets/simulated-v1.jsonl +3 -0
  27. agentcore/assets/evaluators/autoevals-lambda/execution-role-policy.json +15 -0
  28. agentcore/assets/evaluators/autoevals-lambda/lambda_function.py +37 -0
  29. agentcore/assets/evaluators/autoevals-lambda/pyproject.toml +22 -0
  30. agentcore/assets/evaluators/deepeval-lambda/execution-role-policy.json +15 -0
  31. agentcore/assets/evaluators/deepeval-lambda/lambda_function.py +29 -0
  32. agentcore/assets/evaluators/deepeval-lambda/pyproject.toml +19 -0
  33. agentcore/assets/evaluators/python-lambda/execution-role-policy.json +10 -0
  34. agentcore/assets/evaluators/python-lambda/lambda_function.py +19 -0
  35. agentcore/assets/evaluators/python-lambda/pyproject.toml +15 -0
  36. agentcore/assets/harness/invoke.py.template +74 -0
  37. agentcore/assets/mcp/python/README.md +27 -0
  38. agentcore/assets/mcp/python/pyproject.toml +22 -0
  39. agentcore/assets/mcp/python/server.py +117 -0
  40. agentcore/assets/mcp/python-lambda/README.md +22 -0
  41. agentcore/assets/mcp/python-lambda/handler.py +144 -0
  42. agentcore/assets/mcp/python-lambda/pyproject.toml +15 -0
  43. agentcore/assets/python/a2a/googleadk/base/README.md +22 -0
  44. agentcore/assets/python/a2a/googleadk/base/gitignore.template +41 -0
  45. agentcore/assets/python/a2a/googleadk/base/main.py +124 -0
  46. agentcore/assets/python/a2a/googleadk/base/model/__init__.py +1 -0
  47. agentcore/assets/python/a2a/googleadk/base/model/load.py +41 -0
  48. agentcore/assets/python/a2a/googleadk/base/pyproject.toml +22 -0
  49. agentcore/assets/python/a2a/langchain_langgraph/base/README.md +22 -0
  50. agentcore/assets/python/a2a/langchain_langgraph/base/gitignore.template +41 -0
  51. agentcore/assets/python/a2a/langchain_langgraph/base/main.py +144 -0
  52. agentcore/assets/python/a2a/langchain_langgraph/base/model/__init__.py +1 -0
  53. agentcore/assets/python/a2a/langchain_langgraph/base/model/load.py +123 -0
  54. agentcore/assets/python/a2a/langchain_langgraph/base/pyproject.toml +26 -0
  55. agentcore/assets/python/a2a/strands/base/README.md +22 -0
  56. agentcore/assets/python/a2a/strands/base/gitignore.template +41 -0
  57. agentcore/assets/python/a2a/strands/base/main.py +113 -0
  58. agentcore/assets/python/a2a/strands/base/model/__init__.py +1 -0
  59. agentcore/assets/python/a2a/strands/base/model/load.py +123 -0
  60. agentcore/assets/python/a2a/strands/base/pyproject.toml +23 -0
  61. agentcore/assets/python/a2a/strands/capabilities/memory/__init__.py +1 -0
  62. agentcore/assets/python/a2a/strands/capabilities/memory/session.py +46 -0
  63. agentcore/assets/python/agui/googleadk/base/README.md +30 -0
  64. agentcore/assets/python/agui/googleadk/base/gitignore.template +41 -0
  65. agentcore/assets/python/agui/googleadk/base/main.py +91 -0
  66. agentcore/assets/python/agui/googleadk/base/model/__init__.py +1 -0
  67. agentcore/assets/python/agui/googleadk/base/model/load.py +41 -0
  68. agentcore/assets/python/agui/googleadk/base/pyproject.toml +25 -0
  69. agentcore/assets/python/agui/langchain_langgraph/base/README.md +22 -0
  70. agentcore/assets/python/agui/langchain_langgraph/base/gitignore.template +41 -0
  71. agentcore/assets/python/agui/langchain_langgraph/base/main.py +130 -0
  72. agentcore/assets/python/agui/langchain_langgraph/base/model/__init__.py +1 -0
  73. agentcore/assets/python/agui/langchain_langgraph/base/model/load.py +123 -0
  74. agentcore/assets/python/agui/langchain_langgraph/base/pyproject.toml +31 -0
  75. agentcore/assets/python/agui/strands/base/README.md +22 -0
  76. agentcore/assets/python/agui/strands/base/gitignore.template +41 -0
  77. agentcore/assets/python/agui/strands/base/main.py +105 -0
  78. agentcore/assets/python/agui/strands/base/model/__init__.py +1 -0
  79. agentcore/assets/python/agui/strands/base/model/load.py +123 -0
  80. agentcore/assets/python/agui/strands/base/pyproject.toml +27 -0
  81. agentcore/assets/python/agui/strands/capabilities/memory/__init__.py +1 -0
  82. agentcore/assets/python/agui/strands/capabilities/memory/session.py +46 -0
  83. agentcore/assets/python/http/autogen/base/README.md +45 -0
  84. agentcore/assets/python/http/autogen/base/gitignore.template +41 -0
  85. agentcore/assets/python/http/autogen/base/main.py +145 -0
  86. agentcore/assets/python/http/autogen/base/mcp_client/__init__.py +1 -0
  87. agentcore/assets/python/http/autogen/base/mcp_client/client.py +28 -0
  88. agentcore/assets/python/http/autogen/base/model/__init__.py +1 -0
  89. agentcore/assets/python/http/autogen/base/model/load.py +136 -0
  90. agentcore/assets/python/http/autogen/base/pyproject.toml +34 -0
  91. agentcore/assets/python/http/bma/base/Dockerfile +41 -0
  92. agentcore/assets/python/http/bma/base/README.md +178 -0
  93. agentcore/assets/python/http/bma/base/client.py +200 -0
  94. agentcore/assets/python/http/bma/base/lifecycle/server.py +641 -0
  95. agentcore/assets/python/http/bma/base/otel/collector.yaml +69 -0
  96. agentcore/assets/python/http/bma/base/plugins/acr-report/.codex-plugin/plugin.json +6 -0
  97. agentcore/assets/python/http/bma/base/plugins/acr-report/skills/acr-report/SKILL.md +16 -0
  98. agentcore/assets/python/http/bma/base/policies/bma-acr-policy.json +11 -0
  99. agentcore/assets/python/http/bma/base/policies/bma-session-policy.json +35 -0
  100. agentcore/assets/python/http/bma/base/policies/bma-session-trust.json +20 -0
  101. agentcore/assets/python/http/bma/base/pyproject.toml +21 -0
  102. agentcore/assets/python/http/googleadk/base/README.md +45 -0
  103. agentcore/assets/python/http/googleadk/base/gitignore.template +41 -0
  104. agentcore/assets/python/http/googleadk/base/main.py +207 -0
  105. agentcore/assets/python/http/googleadk/base/mcp_client/__init__.py +1 -0
  106. agentcore/assets/python/http/googleadk/base/mcp_client/client.py +75 -0
  107. agentcore/assets/python/http/googleadk/base/model/__init__.py +1 -0
  108. agentcore/assets/python/http/googleadk/base/model/load.py +41 -0
  109. agentcore/assets/python/http/googleadk/base/pyproject.toml +24 -0
  110. agentcore/assets/python/http/langchain_langgraph/base/README.md +45 -0
  111. agentcore/assets/python/http/langchain_langgraph/base/gitignore.template +41 -0
  112. agentcore/assets/python/http/langchain_langgraph/base/main.py +227 -0
  113. agentcore/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +1 -0
  114. agentcore/assets/python/http/langchain_langgraph/base/mcp_client/client.py +79 -0
  115. agentcore/assets/python/http/langchain_langgraph/base/model/__init__.py +1 -0
  116. agentcore/assets/python/http/langchain_langgraph/base/model/load.py +123 -0
  117. agentcore/assets/python/http/langchain_langgraph/base/pyproject.toml +38 -0
  118. agentcore/assets/python/http/openaiagents/base/README.md +45 -0
  119. agentcore/assets/python/http/openaiagents/base/gitignore.template +41 -0
  120. agentcore/assets/python/http/openaiagents/base/main.py +200 -0
  121. agentcore/assets/python/http/openaiagents/base/mcp_client/__init__.py +1 -0
  122. agentcore/assets/python/http/openaiagents/base/mcp_client/client.py +74 -0
  123. agentcore/assets/python/http/openaiagents/base/model/__init__.py +1 -0
  124. agentcore/assets/python/http/openaiagents/base/model/load.py +37 -0
  125. agentcore/assets/python/http/openaiagents/base/pyproject.toml +21 -0
  126. agentcore/assets/python/http/strands/base/README.md +46 -0
  127. agentcore/assets/python/http/strands/base/gitignore.template +41 -0
  128. agentcore/assets/python/http/strands/base/main.py +714 -0
  129. agentcore/assets/python/http/strands/base/mcp_client/__init__.py +1 -0
  130. agentcore/assets/python/http/strands/base/mcp_client/client.py +116 -0
  131. agentcore/assets/python/http/strands/base/model/__init__.py +1 -0
  132. agentcore/assets/python/http/strands/base/model/load.py +239 -0
  133. agentcore/assets/python/http/strands/base/model/mantle_compat.py +21 -0
  134. agentcore/assets/python/http/strands/base/pyproject.toml +31 -0
  135. agentcore/assets/python/http/strands/base/skills/fetcher.py +279 -0
  136. agentcore/assets/python/http/strands/capabilities/execution-limits/hooks/execution_limits.py +54 -0
  137. agentcore/assets/python/http/strands/capabilities/memory/__init__.py +1 -0
  138. agentcore/assets/python/http/strands/capabilities/memory/session.py +47 -0
  139. agentcore/assets/python/http/strands/capabilities/payments/__init__.py +4 -0
  140. agentcore/assets/python/http/strands/capabilities/payments/payments.py +142 -0
  141. agentcore/assets/python/mcp/standalone/base/README.md +36 -0
  142. agentcore/assets/python/mcp/standalone/base/gitignore.template +41 -0
  143. agentcore/assets/python/mcp/standalone/base/main.py +83 -0
  144. agentcore/assets/python/mcp/standalone/base/pyproject.toml +16 -0
  145. agentcore/assets/typescript/.gitkeep +0 -0
  146. agentcore/assets/typescript/http/strands/base/README.md +42 -0
  147. agentcore/assets/typescript/http/strands/base/gitignore.template +22 -0
  148. agentcore/assets/typescript/http/strands/base/main.ts +149 -0
  149. agentcore/assets/typescript/http/strands/base/mcp_client/client.ts +11 -0
  150. agentcore/assets/typescript/http/strands/base/model/load.ts +102 -0
  151. agentcore/assets/typescript/http/strands/base/package.json +38 -0
  152. agentcore/assets/typescript/http/strands/base/tsconfig.json +19 -0
  153. agentcore/assets/typescript/http/strands/capabilities/memory/memory.ts +52 -0
  154. agentcore/assets/typescript/http/vercelai/base/README.md +42 -0
  155. agentcore/assets/typescript/http/vercelai/base/gitignore.template +22 -0
  156. agentcore/assets/typescript/http/vercelai/base/main.ts +70 -0
  157. agentcore/assets/typescript/http/vercelai/base/model/load.ts +121 -0
  158. agentcore/assets/typescript/http/vercelai/base/package.json +35 -0
  159. agentcore/assets/typescript/http/vercelai/base/tsconfig.json +19 -0
  160. agentcore/aws/__init__.py +263 -0
  161. agentcore/aws/_aws_errors.py +72 -0
  162. agentcore/aws/_http.py +176 -0
  163. agentcore/aws/_util.py +37 -0
  164. agentcore/aws/account.py +165 -0
  165. agentcore/aws/agentcore.py +971 -0
  166. agentcore/aws/agentcore_ab_tests.py +230 -0
  167. agentcore/aws/agentcore_batch_evaluation.py +227 -0
  168. agentcore/aws/agentcore_config_bundles.py +220 -0
  169. agentcore/aws/agentcore_control.py +994 -0
  170. agentcore/aws/agentcore_datasets.py +222 -0
  171. agentcore/aws/agentcore_harness.py +330 -0
  172. agentcore/aws/agentcore_payments.py +430 -0
  173. agentcore/aws/agentcore_recommendation.py +140 -0
  174. agentcore/aws/agui_parser.py +131 -0
  175. agentcore/aws/agui_types.py +342 -0
  176. agentcore/aws/api_client.py +87 -0
  177. agentcore/aws/arn.py +18 -0
  178. agentcore/aws/aws_context.py +23 -0
  179. agentcore/aws/bedrock.py +44 -0
  180. agentcore/aws/bedrock_agent.py +129 -0
  181. agentcore/aws/bedrock_import.py +252 -0
  182. agentcore/aws/bedrock_import_types.py +111 -0
  183. agentcore/aws/cloudwatch.py +136 -0
  184. agentcore/aws/connect_shell.py +266 -0
  185. agentcore/aws/iam.py +41 -0
  186. agentcore/aws/partition.py +58 -0
  187. agentcore/aws/policy_generation.py +116 -0
  188. agentcore/aws/region.py +54 -0
  189. agentcore/aws/retry.py +27 -0
  190. agentcore/aws/shell_framer.py +136 -0
  191. agentcore/aws/stage_endpoint.py +39 -0
  192. agentcore/aws/target_region.py +54 -0
  193. agentcore/aws/transaction_search.py +97 -0
  194. agentcore/cdk/__init__.py +10 -0
  195. agentcore/cdk/constants.py +13 -0
  196. agentcore/cdk/local_cdk_project.py +48 -0
  197. agentcore/cdk/toolkit.py +706 -0
  198. agentcore/cli/__init__.py +0 -0
  199. agentcore/cli/commands/__init__.py +0 -0
  200. agentcore/cli/commands/_jobs_common.py +39 -0
  201. agentcore/cli/commands/_run_wizards.py +639 -0
  202. agentcore/cli/commands/add/__init__.py +37 -0
  203. agentcore/cli/commands/add/_commander.py +52 -0
  204. agentcore/cli/commands/add/_common.py +47 -0
  205. agentcore/cli/commands/add/agent_wizard.py +528 -0
  206. agentcore/cli/commands/add/auth_options.py +154 -0
  207. agentcore/cli/commands/add/skill_action.py +105 -0
  208. agentcore/cli/commands/add/skill_command.py +87 -0
  209. agentcore/cli/commands/add/tool_action.py +160 -0
  210. agentcore/cli/commands/add/tool_command.py +117 -0
  211. agentcore/cli/commands/add/validate.py +333 -0
  212. agentcore/cli/commands/capacity_provider/__init__.py +86 -0
  213. agentcore/cli/commands/capacity_provider/action.py +114 -0
  214. agentcore/cli/commands/capacity_provider/constants.py +22 -0
  215. agentcore/cli/commands/config.py +91 -0
  216. agentcore/cli/commands/config_bundle.py +251 -0
  217. agentcore/cli/commands/create/__init__.py +643 -0
  218. agentcore/cli/commands/create/action.py +406 -0
  219. agentcore/cli/commands/create/dependencies.py +91 -0
  220. agentcore/cli/commands/create/harness_validate.py +82 -0
  221. agentcore/cli/commands/create/validate.py +195 -0
  222. agentcore/cli/commands/create/wizard.py +127 -0
  223. agentcore/cli/commands/dataset.py +119 -0
  224. agentcore/cli/commands/deploy/__init__.py +31 -0
  225. agentcore/cli/commands/deploy/_guards.py +25 -0
  226. agentcore/cli/commands/deploy/actions.py +840 -0
  227. agentcore/cli/commands/deploy/command.py +349 -0
  228. agentcore/cli/commands/deploy/progress.py +115 -0
  229. agentcore/cli/commands/deploy/types.py +68 -0
  230. agentcore/cli/commands/deploy/utils.py +43 -0
  231. agentcore/cli/commands/deploy/validate.py +21 -0
  232. agentcore/cli/commands/dev/__init__.py +5 -0
  233. agentcore/cli/commands/dev/_deps.py +50 -0
  234. agentcore/cli/commands/dev/browser_mode.py +270 -0
  235. agentcore/cli/commands/dev/command.py +450 -0
  236. agentcore/cli/commands/dev/terminal_mode.py +379 -0
  237. agentcore/cli/commands/exec/__init__.py +29 -0
  238. agentcore/cli/commands/exec/action.py +442 -0
  239. agentcore/cli/commands/exec/command.py +206 -0
  240. agentcore/cli/commands/exec/types.py +35 -0
  241. agentcore/cli/commands/export/__init__.py +114 -0
  242. agentcore/cli/commands/export/constants.py +21 -0
  243. agentcore/cli/commands/export/fetch_harness_spec.py +234 -0
  244. agentcore/cli/commands/export/harness_action.py +385 -0
  245. agentcore/cli/commands/export/harness_mapper.py +868 -0
  246. agentcore/cli/commands/export/harness_resolver.py +95 -0
  247. agentcore/cli/commands/export/types.py +90 -0
  248. agentcore/cli/commands/export/wizard.py +97 -0
  249. agentcore/cli/commands/feedback/__init__.py +69 -0
  250. agentcore/cli/commands/feedback/action.py +30 -0
  251. agentcore/cli/commands/feedback/consent_prompt.py +35 -0
  252. agentcore/cli/commands/feedback/wizard.py +49 -0
  253. agentcore/cli/commands/fetch/__init__.py +69 -0
  254. agentcore/cli/commands/fetch/action.py +62 -0
  255. agentcore/cli/commands/help.py +65 -0
  256. agentcore/cli/commands/import_/__init__.py +167 -0
  257. agentcore/cli/commands/import_/_js.py +72 -0
  258. agentcore/cli/commands/import_/actions.py +457 -0
  259. agentcore/cli/commands/import_/constants.py +45 -0
  260. agentcore/cli/commands/import_/import_evaluator.py +140 -0
  261. agentcore/cli/commands/import_/import_gateway.py +520 -0
  262. agentcore/cli/commands/import_/import_memory.py +128 -0
  263. agentcore/cli/commands/import_/import_online_eval.py +165 -0
  264. agentcore/cli/commands/import_/import_pipeline.py +145 -0
  265. agentcore/cli/commands/import_/import_runtime.py +214 -0
  266. agentcore/cli/commands/import_/import_utils.py +410 -0
  267. agentcore/cli/commands/import_/phase1_update.py +110 -0
  268. agentcore/cli/commands/import_/phase2_import.py +206 -0
  269. agentcore/cli/commands/import_/resource_import.py +228 -0
  270. agentcore/cli/commands/import_/template_utils.py +148 -0
  271. agentcore/cli/commands/import_/types.py +150 -0
  272. agentcore/cli/commands/import_/yaml_parser.py +265 -0
  273. agentcore/cli/commands/init.py +196 -0
  274. agentcore/cli/commands/invoke/__init__.py +32 -0
  275. agentcore/cli/commands/invoke/_deps.py +73 -0
  276. agentcore/cli/commands/invoke/action.py +840 -0
  277. agentcore/cli/commands/invoke/command.py +490 -0
  278. agentcore/cli/commands/invoke/constants.py +40 -0
  279. agentcore/cli/commands/invoke/guards.py +23 -0
  280. agentcore/cli/commands/invoke/interactive.py +604 -0
  281. agentcore/cli/commands/invoke/resolve.py +149 -0
  282. agentcore/cli/commands/invoke/resolve_prompt.py +60 -0
  283. agentcore/cli/commands/invoke/types.py +61 -0
  284. agentcore/cli/commands/invoke/validate.py +33 -0
  285. agentcore/cli/commands/job_actions.py +239 -0
  286. agentcore/cli/commands/job_history.py +380 -0
  287. agentcore/cli/commands/logs/__init__.py +53 -0
  288. agentcore/cli/commands/logs/action.py +159 -0
  289. agentcore/cli/commands/logs/filter_pattern.py +17 -0
  290. agentcore/cli/commands/logs/guards.py +51 -0
  291. agentcore/cli/commands/logs_evals.py +42 -0
  292. agentcore/cli/commands/package.py +118 -0
  293. agentcore/cli/commands/remove/__init__.py +172 -0
  294. agentcore/cli/commands/remove/skill_command.py +131 -0
  295. agentcore/cli/commands/remove/tool_command.py +59 -0
  296. agentcore/cli/commands/run.py +808 -0
  297. agentcore/cli/commands/run_ingest.py +97 -0
  298. agentcore/cli/commands/shared/__init__.py +0 -0
  299. agentcore/cli/commands/shared/arn_utils.py +9 -0
  300. agentcore/cli/commands/shared/filesystem_utils.py +421 -0
  301. agentcore/cli/commands/shared/header_utils.py +87 -0
  302. agentcore/cli/commands/shared/indexed_key_parser.py +76 -0
  303. agentcore/cli/commands/shared/lifecycle_utils.py +72 -0
  304. agentcore/cli/commands/shared/region_utils.py +20 -0
  305. agentcore/cli/commands/shared/vpc_utils.py +99 -0
  306. agentcore/cli/commands/status/__init__.py +30 -0
  307. agentcore/cli/commands/status/_guards.py +25 -0
  308. agentcore/cli/commands/status/action.py +741 -0
  309. agentcore/cli/commands/status/command.py +321 -0
  310. agentcore/cli/commands/status/constants.py +36 -0
  311. agentcore/cli/commands/status/format_knowledge_base.py +111 -0
  312. agentcore/cli/commands/telemetry.py +79 -0
  313. agentcore/cli/commands/traces/__init__.py +155 -0
  314. agentcore/cli/commands/traces/action.py +123 -0
  315. agentcore/cli/commands/update/__init__.py +63 -0
  316. agentcore/cli/commands/update/action.py +164 -0
  317. agentcore/cli/commands/validate.py +165 -0
  318. agentcore/cli/constants.py +96 -0
  319. agentcore/cli/errors.py +118 -0
  320. agentcore/cli/external_requirements/__init__.py +67 -0
  321. agentcore/cli/external_requirements/checks.py +280 -0
  322. agentcore/cli/external_requirements/detect.py +55 -0
  323. agentcore/cli/external_requirements/versions.py +57 -0
  324. agentcore/cli/groups.py +23 -0
  325. agentcore/cli/interactive.py +85 -0
  326. agentcore/cli/main.py +137 -0
  327. agentcore/cli/naming.py +11 -0
  328. agentcore/cli/notices.py +42 -0
  329. agentcore/cli/project.py +34 -0
  330. agentcore/cli/run_command.py +27 -0
  331. agentcore/cli/tree.py +135 -0
  332. agentcore/cli/update_notifier.py +123 -0
  333. agentcore/cli/variadic.py +50 -0
  334. agentcore/cloudformation/__init__.py +84 -0
  335. agentcore/cloudformation/bootstrap.py +64 -0
  336. agentcore/cloudformation/logical_ids.py +37 -0
  337. agentcore/cloudformation/outputs.py +566 -0
  338. agentcore/cloudformation/stack_discovery.py +75 -0
  339. agentcore/cloudformation/stack_events.py +107 -0
  340. agentcore/cloudformation/stack_status.py +98 -0
  341. agentcore/cloudformation/types.py +44 -0
  342. agentcore/lib/__init__.py +68 -0
  343. agentcore/lib/constants.py +77 -0
  344. agentcore/lib/dependency_management/__init__.py +23 -0
  345. agentcore/lib/dependency_management/messages.py +92 -0
  346. agentcore/lib/dependency_management/plan.py +98 -0
  347. agentcore/lib/dependency_management/semver.py +137 -0
  348. agentcore/lib/dependency_management/sync.py +139 -0
  349. agentcore/lib/dependency_management/types.py +56 -0
  350. agentcore/lib/errors/__init__.py +5 -0
  351. agentcore/lib/errors/types.py +352 -0
  352. agentcore/lib/errors/validation.py +121 -0
  353. agentcore/lib/packaging/__init__.py +81 -0
  354. agentcore/lib/packaging/build_args.py +23 -0
  355. agentcore/lib/packaging/build_context.py +26 -0
  356. agentcore/lib/packaging/build_context_dockerignore.py +45 -0
  357. agentcore/lib/packaging/container.py +95 -0
  358. agentcore/lib/packaging/helpers.py +289 -0
  359. agentcore/lib/packaging/node.py +153 -0
  360. agentcore/lib/packaging/python.py +135 -0
  361. agentcore/lib/packaging/types.py +69 -0
  362. agentcore/lib/packaging/uv.py +45 -0
  363. agentcore/lib/result.py +104 -0
  364. agentcore/lib/schemas/__init__.py +1 -0
  365. agentcore/lib/schemas/io/__init__.py +27 -0
  366. agentcore/lib/schemas/io/config_io.py +458 -0
  367. agentcore/lib/schemas/io/global_config.py +239 -0
  368. agentcore/lib/schemas/io/path_resolver.py +132 -0
  369. agentcore/lib/secrets/__init__.py +18 -0
  370. agentcore/lib/secrets/cipher.py +70 -0
  371. agentcore/lib/secrets/key_provider.py +163 -0
  372. agentcore/lib/secrets/sensitive_keys.py +55 -0
  373. agentcore/lib/time_constants.py +4 -0
  374. agentcore/lib/utils/__init__.py +47 -0
  375. agentcore/lib/utils/aws_account.py +15 -0
  376. agentcore/lib/utils/credentials.py +68 -0
  377. agentcore/lib/utils/dotenv.py +32 -0
  378. agentcore/lib/utils/env.py +105 -0
  379. agentcore/lib/utils/json_format.py +29 -0
  380. agentcore/lib/utils/json_rpc.py +22 -0
  381. agentcore/lib/utils/platform.py +33 -0
  382. agentcore/lib/utils/polling.py +86 -0
  383. agentcore/lib/utils/subprocess.py +135 -0
  384. agentcore/lib/utils/time_parser.py +48 -0
  385. agentcore/lib/utils/validation.py +106 -0
  386. agentcore/logging/__init__.py +10 -0
  387. agentcore/logging/_common.py +77 -0
  388. agentcore/logging/cdk_io_host.py +36 -0
  389. agentcore/logging/create_logger.py +107 -0
  390. agentcore/logging/dev_logger.py +63 -0
  391. agentcore/logging/exec_logger.py +159 -0
  392. agentcore/logging/invoke_logger.py +154 -0
  393. agentcore/logging/remove_logger.py +95 -0
  394. agentcore/operations/__init__.py +0 -0
  395. agentcore/operations/agent/__init__.py +0 -0
  396. agentcore/operations/agent/config_bundle_defaults.py +31 -0
  397. agentcore/operations/agent/generate/__init__.py +28 -0
  398. agentcore/operations/agent/generate/schema_mapper.py +319 -0
  399. agentcore/operations/agent/generate/types.py +172 -0
  400. agentcore/operations/agent/generate/write_agent_to_project.py +67 -0
  401. agentcore/operations/agent/import_/__init__.py +31 -0
  402. agentcore/operations/agent/import_/base_translator.py +449 -0
  403. agentcore/operations/agent/import_/constants.py +23 -0
  404. agentcore/operations/agent/import_/execute.py +127 -0
  405. agentcore/operations/agent/import_/langgraph_translator.py +294 -0
  406. agentcore/operations/agent/import_/pyproject_generator.py +73 -0
  407. agentcore/operations/agent/import_/strands_translator.py +289 -0
  408. agentcore/operations/config_bundle/__init__.py +1 -0
  409. agentcore/operations/config_bundle/bundle_name_variants.py +9 -0
  410. agentcore/operations/config_bundle/diff_versions.py +52 -0
  411. agentcore/operations/config_bundle/resolve_bundle.py +65 -0
  412. agentcore/operations/connectors/__init__.py +3 -0
  413. agentcore/operations/connectors/translators.py +63 -0
  414. agentcore/operations/dataset/__init__.py +21 -0
  415. agentcore/operations/dataset/delete.py +7 -0
  416. agentcore/operations/dataset/publish.py +16 -0
  417. agentcore/operations/dataset/pull.py +21 -0
  418. agentcore/operations/dataset/push.py +201 -0
  419. agentcore/operations/dataset/resolve_dataset.py +65 -0
  420. agentcore/operations/dataset/status.py +18 -0
  421. agentcore/operations/dataset/wait.py +25 -0
  422. agentcore/operations/deploy/__init__.py +152 -0
  423. agentcore/operations/deploy/backfill_vpc_id.py +90 -0
  424. agentcore/operations/deploy/change_detection.py +84 -0
  425. agentcore/operations/deploy/constants.py +58 -0
  426. agentcore/operations/deploy/dependency_sync.py +105 -0
  427. agentcore/operations/deploy/ensure_target.py +30 -0
  428. agentcore/operations/deploy/gateway_status.py +44 -0
  429. agentcore/operations/deploy/managed_memory_notice.py +36 -0
  430. agentcore/operations/deploy/payment_connector_authorization.py +106 -0
  431. agentcore/operations/deploy/post_deploy_datasets.py +96 -0
  432. agentcore/operations/deploy/post_deploy_knowledge_bases.py +104 -0
  433. agentcore/operations/deploy/post_deploy_observability.py +28 -0
  434. agentcore/operations/deploy/post_deploy_online_evals.py +60 -0
  435. agentcore/operations/deploy/pre_deploy_identity.py +505 -0
  436. agentcore/operations/deploy/preflight.py +385 -0
  437. agentcore/operations/deploy/region_override.py +45 -0
  438. agentcore/operations/deploy/teardown.py +153 -0
  439. agentcore/operations/dev/__init__.py +61 -0
  440. agentcore/operations/dev/_http.py +79 -0
  441. agentcore/operations/dev/_server.py +165 -0
  442. agentcore/operations/dev/codezip_dev_server.py +151 -0
  443. agentcore/operations/dev/config.py +128 -0
  444. agentcore/operations/dev/constants.py +9 -0
  445. agentcore/operations/dev/container_dev_server.py +237 -0
  446. agentcore/operations/dev/container_runtime.py +37 -0
  447. agentcore/operations/dev/dev_server.py +244 -0
  448. agentcore/operations/dev/gateway_env.py +25 -0
  449. agentcore/operations/dev/invoke.py +214 -0
  450. agentcore/operations/dev/invoke_a2a.py +204 -0
  451. agentcore/operations/dev/invoke_agui.py +88 -0
  452. agentcore/operations/dev/invoke_mcp.py +145 -0
  453. agentcore/operations/dev/invoke_types.py +30 -0
  454. agentcore/operations/dev/load_dev_env.py +26 -0
  455. agentcore/operations/dev/memory_env.py +19 -0
  456. agentcore/operations/dev/otel/__init__.py +5 -0
  457. agentcore/operations/dev/otel/collector.py +234 -0
  458. agentcore/operations/dev/otel/transforms.py +331 -0
  459. agentcore/operations/dev/payment_env.py +50 -0
  460. agentcore/operations/dev/server.py +28 -0
  461. agentcore/operations/dev/sse_transform.py +30 -0
  462. agentcore/operations/dev/utils.py +152 -0
  463. agentcore/operations/dev/web_ui/__init__.py +31 -0
  464. agentcore/operations/dev/web_ui/constants.py +25 -0
  465. agentcore/operations/dev/web_ui/handlers/__init__.py +36 -0
  466. agentcore/operations/dev/web_ui/handlers/_common.py +36 -0
  467. agentcore/operations/dev/web_ui/handlers/_deployed.py +37 -0
  468. agentcore/operations/dev/web_ui/handlers/a2a_proxy.py +37 -0
  469. agentcore/operations/dev/web_ui/handlers/cloudwatch_traces.py +71 -0
  470. agentcore/operations/dev/web_ui/handlers/harness_invocation.py +89 -0
  471. agentcore/operations/dev/web_ui/handlers/harness_utils.py +95 -0
  472. agentcore/operations/dev/web_ui/handlers/invocations.py +327 -0
  473. agentcore/operations/dev/web_ui/handlers/mcp_proxy.py +119 -0
  474. agentcore/operations/dev/web_ui/handlers/memory.py +84 -0
  475. agentcore/operations/dev/web_ui/handlers/resources.py +351 -0
  476. agentcore/operations/dev/web_ui/handlers/start.py +182 -0
  477. agentcore/operations/dev/web_ui/handlers/status.py +25 -0
  478. agentcore/operations/dev/web_ui/handlers/traces.py +50 -0
  479. agentcore/operations/dev/web_ui/run_web_ui.py +60 -0
  480. agentcore/operations/dev/web_ui/web_server.py +297 -0
  481. agentcore/operations/eval/__init__.py +8 -0
  482. agentcore/operations/eval/list_eval_runs.py +18 -0
  483. agentcore/operations/eval/logs_eval.py +119 -0
  484. agentcore/operations/eval/pause_resume.py +90 -0
  485. agentcore/operations/eval/run_eval.py +354 -0
  486. agentcore/operations/eval/shared/__init__.py +0 -0
  487. agentcore/operations/eval/shared/dataset_loader.py +68 -0
  488. agentcore/operations/eval/shared/dataset_session_provider.py +122 -0
  489. agentcore/operations/eval/shared/evaluator_runner.py +89 -0
  490. agentcore/operations/eval/shared/scenario_executor.py +71 -0
  491. agentcore/operations/eval/shared/span_collector.py +255 -0
  492. agentcore/operations/eval/storage.py +67 -0
  493. agentcore/operations/feedback/__init__.py +21 -0
  494. agentcore/operations/feedback/aperture_client.py +98 -0
  495. agentcore/operations/feedback/build_payload.py +97 -0
  496. agentcore/operations/feedback/constants.py +26 -0
  497. agentcore/operations/feedback/submit_feedback.py +150 -0
  498. agentcore/operations/fetch_access/__init__.py +36 -0
  499. agentcore/operations/fetch_access/_target.py +17 -0
  500. agentcore/operations/fetch_access/fetch_gateway_token.py +75 -0
  501. agentcore/operations/fetch_access/fetch_harness_token.py +72 -0
  502. agentcore/operations/fetch_access/fetch_runtime_token.py +76 -0
  503. agentcore/operations/fetch_access/list_agents.py +18 -0
  504. agentcore/operations/fetch_access/list_gateways.py +26 -0
  505. agentcore/operations/fetch_access/list_harnesses.py +23 -0
  506. agentcore/operations/fetch_access/oauth_token.py +162 -0
  507. agentcore/operations/fetch_access/types.py +34 -0
  508. agentcore/operations/harness/__init__.py +1 -0
  509. agentcore/operations/harness/orphan.py +84 -0
  510. agentcore/operations/harness/skill_utils.py +56 -0
  511. agentcore/operations/identity/__init__.py +33 -0
  512. agentcore/operations/identity/api_key_credential_provider.py +68 -0
  513. agentcore/operations/identity/oauth2_credential_provider.py +95 -0
  514. agentcore/operations/ingest/__init__.py +184 -0
  515. agentcore/operations/init/__init__.py +3 -0
  516. agentcore/operations/init/files.py +59 -0
  517. agentcore/operations/insights/__init__.py +21 -0
  518. agentcore/operations/insights/insights_storage.py +67 -0
  519. agentcore/operations/insights/run_insights.py +148 -0
  520. agentcore/operations/invoke/__init__.py +5 -0
  521. agentcore/operations/invoke/resolve_agent_context.py +85 -0
  522. agentcore/operations/jobs/__init__.py +38 -0
  523. agentcore/operations/jobs/ab_test/__init__.py +0 -0
  524. agentcore/operations/jobs/ab_test/build_options.py +126 -0
  525. agentcore/operations/jobs/ab_test/format.py +121 -0
  526. agentcore/operations/jobs/ab_test/handler.py +412 -0
  527. agentcore/operations/jobs/ab_test/promote.py +142 -0
  528. agentcore/operations/jobs/ab_test/resolve.py +221 -0
  529. agentcore/operations/jobs/batch_evaluation/__init__.py +0 -0
  530. agentcore/operations/jobs/batch_evaluation/build_source.py +68 -0
  531. agentcore/operations/jobs/batch_evaluation/dataset_phase1.py +95 -0
  532. agentcore/operations/jobs/batch_evaluation/format.py +58 -0
  533. agentcore/operations/jobs/batch_evaluation/handler.py +203 -0
  534. agentcore/operations/jobs/insights/__init__.py +0 -0
  535. agentcore/operations/jobs/insights/format.py +65 -0
  536. agentcore/operations/jobs/insights/handler.py +178 -0
  537. agentcore/operations/jobs/recommendation/__init__.py +0 -0
  538. agentcore/operations/jobs/recommendation/apply_to_bundle.py +76 -0
  539. agentcore/operations/jobs/recommendation/build_config.py +271 -0
  540. agentcore/operations/jobs/recommendation/fetch_session_spans.py +93 -0
  541. agentcore/operations/jobs/recommendation/format.py +77 -0
  542. agentcore/operations/jobs/recommendation/handler.py +331 -0
  543. agentcore/operations/jobs/shared/__init__.py +0 -0
  544. agentcore/operations/jobs/shared/constants.py +85 -0
  545. agentcore/operations/jobs/shared/engine.py +187 -0
  546. agentcore/operations/jobs/shared/format.py +104 -0
  547. agentcore/operations/jobs/shared/region.py +34 -0
  548. agentcore/operations/jobs/shared/resolve_agent_state.py +30 -0
  549. agentcore/operations/jobs/shared/storage.py +117 -0
  550. agentcore/operations/jobs/shared/wait.py +30 -0
  551. agentcore/operations/knowledge_base/__init__.py +33 -0
  552. agentcore/operations/knowledge_base/connector_config.py +105 -0
  553. agentcore/operations/knowledge_base/hydrate_data_sources.py +59 -0
  554. agentcore/operations/mcp/__init__.py +4 -0
  555. agentcore/operations/memory/__init__.py +13 -0
  556. agentcore/operations/memory/_records.py +72 -0
  557. agentcore/operations/memory/list_memory_records.py +45 -0
  558. agentcore/operations/memory/retrieve_memory_records.py +52 -0
  559. agentcore/operations/node/__init__.py +15 -0
  560. agentcore/operations/node/setup.py +36 -0
  561. agentcore/operations/python/__init__.py +17 -0
  562. agentcore/operations/python/setup.py +47 -0
  563. agentcore/operations/resolve_agent.py +159 -0
  564. agentcore/operations/session/__init__.py +86 -0
  565. agentcore/operations/traces/__init__.py +29 -0
  566. agentcore/operations/traces/get_trace.py +202 -0
  567. agentcore/operations/traces/insights_query.py +74 -0
  568. agentcore/operations/traces/list_traces.py +46 -0
  569. agentcore/operations/traces/trace_url.py +25 -0
  570. agentcore/operations/traces/types.py +55 -0
  571. agentcore/primitives/__init__.py +0 -0
  572. agentcore/primitives/_gateway_target_wizard.py +293 -0
  573. agentcore/primitives/_gateway_validation.py +442 -0
  574. agentcore/primitives/_harness_cli.py +557 -0
  575. agentcore/primitives/_harness_validation.py +163 -0
  576. agentcore/primitives/_harness_wizard.py +726 -0
  577. agentcore/primitives/_knowledge_base_wizard.py +259 -0
  578. agentcore/primitives/_payment_wizard.py +331 -0
  579. agentcore/primitives/_policy_form.py +160 -0
  580. agentcore/primitives/agent.py +817 -0
  581. agentcore/primitives/auth_utils.py +77 -0
  582. agentcore/primitives/base.py +178 -0
  583. agentcore/primitives/capacity_provider.py +501 -0
  584. agentcore/primitives/config_bundle.py +329 -0
  585. agentcore/primitives/credential.py +387 -0
  586. agentcore/primitives/credential_utils.py +45 -0
  587. agentcore/primitives/dataset.py +211 -0
  588. agentcore/primitives/deployed_gateways.py +34 -0
  589. agentcore/primitives/evaluator.py +909 -0
  590. agentcore/primitives/gateway.py +496 -0
  591. agentcore/primitives/gateway_target.py +988 -0
  592. agentcore/primitives/harness.py +706 -0
  593. agentcore/primitives/knowledge_base.py +477 -0
  594. agentcore/primitives/memory.py +387 -0
  595. agentcore/primitives/online_eval_config.py +365 -0
  596. agentcore/primitives/online_insights.py +275 -0
  597. agentcore/primitives/payment_connector.py +427 -0
  598. agentcore/primitives/payment_eligible.py +20 -0
  599. agentcore/primitives/payment_manager.py +605 -0
  600. agentcore/primitives/payment_validation.py +68 -0
  601. agentcore/primitives/policy.py +622 -0
  602. agentcore/primitives/policy_engine.py +358 -0
  603. agentcore/primitives/registry.py +56 -0
  604. agentcore/primitives/runtime_endpoint.py +361 -0
  605. agentcore/primitives/secret_flag_warning.py +17 -0
  606. agentcore/schema/__init__.py +14 -0
  607. agentcore/schema/_zod.py +395 -0
  608. agentcore/schema/constants.py +306 -0
  609. agentcore/schema/schemas/__init__.py +40 -0
  610. agentcore/schema/schemas/agent_env.py +545 -0
  611. agentcore/schema/schemas/agentcore_project.py +530 -0
  612. agentcore/schema/schemas/auth.py +286 -0
  613. agentcore/schema/schemas/aws_targets.py +72 -0
  614. agentcore/schema/schemas/connections.py +187 -0
  615. agentcore/schema/schemas/deployed_state.py +322 -0
  616. agentcore/schema/schemas/mcp.py +650 -0
  617. agentcore/schema/schemas/mcp_defs.py +54 -0
  618. agentcore/schema/schemas/primitives/__init__.py +52 -0
  619. agentcore/schema/schemas/primitives/ab_test.py +162 -0
  620. agentcore/schema/schemas/primitives/capacity_provider.py +214 -0
  621. agentcore/schema/schemas/primitives/config_bundle.py +48 -0
  622. agentcore/schema/schemas/primitives/dataset.py +55 -0
  623. agentcore/schema/schemas/primitives/evaluator.py +171 -0
  624. agentcore/schema/schemas/primitives/harness.py +710 -0
  625. agentcore/schema/schemas/primitives/knowledge_base.py +90 -0
  626. agentcore/schema/schemas/primitives/memory.py +113 -0
  627. agentcore/schema/schemas/primitives/online_eval_config.py +77 -0
  628. agentcore/schema/schemas/primitives/payment.py +114 -0
  629. agentcore/schema/schemas/primitives/policy.py +83 -0
  630. agentcore/schema/schemas/primitives/tags.py +50 -0
  631. agentcore/schema/schemas/zod_util.py +5 -0
  632. agentcore/schema/types/__init__.py +3 -0
  633. agentcore/schema/types/path.py +16 -0
  634. agentcore/templates/__init__.py +115 -0
  635. agentcore/templates/_handlebars.py +782 -0
  636. agentcore/templates/_js.py +164 -0
  637. agentcore/templates/base_renderer.py +107 -0
  638. agentcore/templates/cdk_renderer.py +129 -0
  639. agentcore/templates/evaluator_renderer.py +39 -0
  640. agentcore/templates/gateway_target_renderer.py +69 -0
  641. agentcore/templates/llm_context/README.md +16 -0
  642. agentcore/templates/llm_context/agentcore.ts +685 -0
  643. agentcore/templates/llm_context/aws-targets.ts +51 -0
  644. agentcore/templates/profiles.py +151 -0
  645. agentcore/templates/render.py +92 -0
  646. agentcore/templates/renderers.py +83 -0
  647. agentcore/templates/schema_assets.py +23 -0
  648. agentcore/templates/template_root.py +28 -0
  649. agentcore/templates/types.py +192 -0
  650. agentcore_cli-0.31.1.dist-info/METADATA +84 -0
  651. agentcore_cli-0.31.1.dist-info/RECORD +655 -0
  652. agentcore_cli-0.31.1.dist-info/WHEEL +4 -0
  653. agentcore_cli-0.31.1.dist-info/entry_points.txt +2 -0
  654. agentcore_cli-0.31.1.dist-info/licenses/LICENSE +175 -0
  655. agentcore_cli-0.31.1.dist-info/licenses/NOTICE +88 -0
@@ -0,0 +1,45 @@
1
+ This is a project generated by the agentcore create CLI tool!
2
+
3
+ # Layout
4
+
5
+ The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
6
+ `agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
7
+ commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.
8
+
9
+ ## Agent Root
10
+
11
+ The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
12
+ file defines a Starlette ASGI app with the AutoGen framework running within.
13
+
14
+ `model/load.py` instantiates your chosen model provider.
15
+
16
+ ## Input Validation
17
+
18
+ Validate invocation input before forwarding it to the agent framework. Keep plain prompts typed as strings and pass
19
+ only prompt text to the agent.
20
+
21
+ ## Environment Variables
22
+
23
+ | Variable | Required | Description |
24
+ | --- | --- | --- |
25
+ {{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
26
+ {{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |
27
+
28
+ # Developing locally
29
+
30
+ If installation was successful, a virtual environment is already created with dependencies installed.
31
+
32
+ Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
33
+ Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.
34
+
35
+ `agentcore dev` will start a local server on 0.0.0.0:8080.
36
+
37
+ In a new terminal, you can invoke that server with:
38
+
39
+ `agentcore invoke --dev "What can you do"`
40
+
41
+ # Deployment
42
+
43
+ After providing credentials, `agentcore deploy` will deploy your project into Amazon Bedrock AgentCore.
44
+
45
+ Use `agentcore invoke` to invoke your deployed agent.
@@ -0,0 +1,41 @@
1
+ # Environment variables
2
+ .env
3
+
4
+ # Python
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+ *.so
9
+ .Python
10
+ build/
11
+ develop-eggs/
12
+ dist/
13
+ downloads/
14
+ eggs/
15
+ .eggs/
16
+ lib/
17
+ lib64/
18
+ parts/
19
+ sdist/
20
+ var/
21
+ wheels/
22
+ *.egg-info/
23
+ .installed.cfg
24
+ *.egg
25
+
26
+ # Virtual environments
27
+ .venv/
28
+ venv/
29
+ ENV/
30
+ env/
31
+
32
+ # IDE
33
+ .vscode/
34
+ .idea/
35
+ *.swp
36
+ *.swo
37
+ *~
38
+
39
+ # OS
40
+ .DS_Store
41
+ Thumbs.db
@@ -0,0 +1,145 @@
1
+ {{#if needsOs}}
2
+ import os
3
+ {{/if}}
4
+ from collections import OrderedDict
5
+ from autogen_agentchat.agents import AssistantAgent
6
+ from autogen_core.tools import FunctionTool
7
+ from bedrock_agentcore.runtime import BedrockAgentCoreApp
8
+ from model.load import load_model
9
+ from mcp_client.client import get_streamable_http_mcp_tools
10
+
11
+ app = BedrockAgentCoreApp()
12
+ log = app.logger
13
+
14
+
15
+ # Define a simple function tool
16
+ def add_numbers(a: int, b: int) -> int:
17
+ """Return the sum of two numbers"""
18
+ return a + b
19
+
20
+
21
+ add_numbers_tool = FunctionTool(
22
+ add_numbers, description="Return the sum of two numbers"
23
+ )
24
+
25
+ # Define a collection of tools used by the model
26
+ tools = [add_numbers_tool]
27
+
28
+ {{#if needsOs}}
29
+ _MOUNT_PATHS = [
30
+ {{#if sessionStorageMountPath}}"{{sessionStorageMountPath}}",{{/if}}
31
+ {{#each efsMounts}}"{{mountPath}}",{{/each}}
32
+ {{#each s3Mounts}}"{{mountPath}}",{{/each}}
33
+ ]
34
+
35
+ def _safe_resolve(path: str) -> str:
36
+ resolved = os.path.realpath(path)
37
+ if not any(resolved == os.path.realpath(m) or resolved.startswith(os.path.realpath(m) + os.sep) for m in _MOUNT_PATHS):
38
+ raise ValueError(f"Path '{path}' is not within any configured mount ({', '.join(_MOUNT_PATHS)})")
39
+ return resolved
40
+
41
+ def file_read(path: str) -> str:
42
+ """Read a file from a mounted filesystem. Use the absolute path (e.g. /mnt/tools/data.txt)."""
43
+ try:
44
+ full_path = _safe_resolve(path)
45
+ with open(full_path) as f:
46
+ return f.read()
47
+ except ValueError as e:
48
+ return str(e)
49
+ except OSError as e:
50
+ return f"Error reading '{path}': {e.strerror}"
51
+
52
+ def file_write(path: str, content: str) -> str:
53
+ """Write a file to a mounted filesystem. Use the absolute path (e.g. /mnt/tools/data.txt)."""
54
+ try:
55
+ full_path = _safe_resolve(path)
56
+ parent = os.path.dirname(full_path)
57
+ if parent:
58
+ os.makedirs(parent, exist_ok=True)
59
+ with open(full_path, "w") as f:
60
+ f.write(content)
61
+ return f"Written to {path}"
62
+ except ValueError as e:
63
+ return str(e)
64
+ except OSError as e:
65
+ return f"Error writing '{path}': {e.strerror}"
66
+
67
+ def list_files(path: str) -> str:
68
+ """List files in a mounted filesystem directory. Use the absolute path (e.g. /mnt/tools)."""
69
+ try:
70
+ full_path = _safe_resolve(path)
71
+ entries = os.listdir(full_path)
72
+ return "\n".join(entries) if entries else "(empty directory)"
73
+ except ValueError as e:
74
+ return str(e)
75
+ except OSError as e:
76
+ return f"Error listing '{path}': {e.strerror}"
77
+
78
+ tools.extend([
79
+ FunctionTool(file_read, description="Read a file from a mounted filesystem. Use the absolute path (e.g. /mnt/tools/data.txt)."),
80
+ FunctionTool(file_write, description="Write a file to a mounted filesystem. Use the absolute path (e.g. /mnt/tools/data.txt)."),
81
+ FunctionTool(list_files, description="List files in a mounted filesystem directory. Use the absolute path (e.g. /mnt/tools)."),
82
+ ])
83
+ {{/if}}
84
+
85
+ SYSTEM_MESSAGE = """
86
+ You are a helpful assistant. Use tools when appropriate.
87
+ {{#if needsOs}}
88
+ You have access to the following mounted filesystems. Use file_read, file_write, and list_files with full absolute paths:
89
+ {{#if sessionStorageMountPath}}- {{sessionStorageMountPath}}: ephemeral session storage (lost when session ends)
90
+ {{/if}}{{#each efsMounts}}- {{mountPath}}: EFS persistent storage (persists across sessions and agent restarts)
91
+ {{/each}}{{#each s3Mounts}}- {{mountPath}}: S3 Files persistent storage (durable, backed by S3)
92
+ {{/each}}{{/if}}
93
+ """
94
+
95
+ # Reuses one AssistantAgent per session_id so each session keeps its own
96
+ # in-process conversation history (best-effort; resets on cold start). Caches up
97
+ # to 128 active sessions with LRU eviction (least-recently-used is dropped and
98
+ # its history reset).
99
+ _agents = OrderedDict()
100
+
101
+
102
+ async def get_or_create_agent(session_id):
103
+ if session_id in _agents:
104
+ _agents.move_to_end(session_id)
105
+ return _agents[session_id]
106
+ if len(_agents) >= 128:
107
+ _agents.popitem(last=False)
108
+ # Get MCP Tools
109
+ mcp_tools = await get_streamable_http_mcp_tools()
110
+ # Re-check after the await: a concurrent first-invocation for the same
111
+ # session_id may have built and stored the agent while we were awaiting.
112
+ # Don't overwrite it (that would orphan the agent the other request is using).
113
+ if session_id not in _agents:
114
+ _agents[session_id] = AssistantAgent(
115
+ name="{{ name }}",
116
+ model_client=load_model(),
117
+ tools=tools + mcp_tools,
118
+ system_message=SYSTEM_MESSAGE,
119
+ )
120
+ _agents.move_to_end(session_id)
121
+ return _agents[session_id]
122
+
123
+
124
+ @app.entrypoint
125
+ async def invoke(payload, context):
126
+ log.info("Invoking Agent.....")
127
+
128
+ # Process the user prompt
129
+ prompt = payload.get("prompt", "What can you help me with?")
130
+ if not isinstance(prompt, str):
131
+ raise ValueError("prompt must be a string")
132
+ session_id = getattr(context, "session_id", "default-session")
133
+
134
+ # Reuse the per-session agent (preserves conversation history)
135
+ agent = await get_or_create_agent(session_id)
136
+
137
+ # Run the agent
138
+ result = await agent.run(task=prompt)
139
+
140
+ # Return result
141
+ return {"result": result.messages[-1].content}
142
+
143
+
144
+ if __name__ == "__main__":
145
+ app.run()
@@ -0,0 +1 @@
1
+ # Package marker
@@ -0,0 +1,28 @@
1
+ from typing import List
2
+ {{#if isVpc}}
3
+ # VPC mode: external MCP endpoints are not reachable without a NAT gateway.
4
+ # Add an AgentCore Gateway with `agentcore add gateway`, or configure your own endpoint below.
5
+
6
+
7
+ async def get_streamable_http_mcp_tools() -> List:
8
+ """No MCP server configured. Add a gateway with `agentcore add gateway`."""
9
+ return []
10
+ {{else}}
11
+ from autogen_ext.tools.mcp import (
12
+ StreamableHttpMcpToolAdapter,
13
+ StreamableHttpServerParams,
14
+ mcp_server_tools,
15
+ )
16
+
17
+ # ExaAI provides information about code through web searches, crawling and code context searches through their platform. Requires no authentication
18
+ EXAMPLE_MCP_ENDPOINT = "https://mcp.exa.ai/mcp"
19
+
20
+
21
+ async def get_streamable_http_mcp_tools() -> List[StreamableHttpMcpToolAdapter]:
22
+ """
23
+ Returns MCP Tools compatible with AutoGen.
24
+ """
25
+ # to use an MCP server that supports bearer authentication, add headers={"Authorization": f"Bearer {access_token}"}
26
+ server_params = StreamableHttpServerParams(url=EXAMPLE_MCP_ENDPOINT)
27
+ return await mcp_server_tools(server_params)
28
+ {{/if}}
@@ -0,0 +1 @@
1
+ # Package marker
@@ -0,0 +1,136 @@
1
+ {{#if (eq modelProvider "Bedrock")}}
2
+ import os
3
+ from autogen_ext.models.anthropic import AnthropicBedrockChatCompletionClient
4
+ from autogen_core.models import ModelInfo, ModelFamily
5
+
6
+ # Uses global inference profile for Claude Sonnet 4.5
7
+ # https://docs.aws.amazon.com/bedrock/latest/userguide/inference-profiles-support.html
8
+ MODEL_ID = "global.anthropic.claude-sonnet-4-5-20250929-v1:0"
9
+
10
+
11
+ def load_model() -> AnthropicBedrockChatCompletionClient:
12
+ """Get Bedrock model client using IAM credentials."""
13
+ return AnthropicBedrockChatCompletionClient(
14
+ model=MODEL_ID,
15
+ model_info=ModelInfo(
16
+ vision=False,
17
+ function_calling=True,
18
+ json_output=False,
19
+ family=ModelFamily.CLAUDE_4_SONNET,
20
+ structured_output=True
21
+ ),
22
+ bedrock_info={"aws_region": os.environ.get("AWS_REGION", "us-east-1")}
23
+ )
24
+ {{/if}}
25
+ {{#if (eq modelProvider "Anthropic")}}
26
+ import os
27
+ from autogen_ext.models.anthropic import AnthropicChatCompletionClient
28
+ from bedrock_agentcore.identity.auth import requires_api_key
29
+
30
+ IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
31
+ IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
32
+
33
+
34
+ @requires_api_key(provider_name=IDENTITY_PROVIDER_NAME)
35
+ def _agentcore_identity_api_key_provider(api_key: str) -> str:
36
+ """Fetch API key from AgentCore Identity."""
37
+ return api_key
38
+
39
+
40
+ def _get_api_key() -> str:
41
+ """
42
+ Uses AgentCore Identity for API key management in deployed environments.
43
+ For local development, run via 'agentcore dev' which loads agentcore/.env.
44
+ """
45
+ if os.getenv("LOCAL_DEV") == "1":
46
+ api_key = os.getenv(IDENTITY_ENV_VAR)
47
+ if not api_key:
48
+ raise RuntimeError(
49
+ f"{IDENTITY_ENV_VAR} not found. Add {IDENTITY_ENV_VAR}=your-key to .env.local"
50
+ )
51
+ return api_key
52
+ return _agentcore_identity_api_key_provider()
53
+
54
+
55
+ def load_model() -> AnthropicChatCompletionClient:
56
+ """Get authenticated Anthropic model client."""
57
+ return AnthropicChatCompletionClient(
58
+ model="claude-sonnet-4-5-20250929",
59
+ api_key=_get_api_key()
60
+ )
61
+ {{/if}}
62
+ {{#if (eq modelProvider "OpenAI")}}
63
+ import os
64
+ from autogen_ext.models.openai import OpenAIChatCompletionClient
65
+ from bedrock_agentcore.identity.auth import requires_api_key
66
+
67
+ IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
68
+ IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
69
+
70
+
71
+ @requires_api_key(provider_name=IDENTITY_PROVIDER_NAME)
72
+ def _agentcore_identity_api_key_provider(api_key: str) -> str:
73
+ """Fetch API key from AgentCore Identity."""
74
+ return api_key
75
+
76
+
77
+ def _get_api_key() -> str:
78
+ """
79
+ Uses AgentCore Identity for API key management in deployed environments.
80
+ For local development, run via 'agentcore dev' which loads agentcore/.env.
81
+ """
82
+ if os.getenv("LOCAL_DEV") == "1":
83
+ api_key = os.getenv(IDENTITY_ENV_VAR)
84
+ if not api_key:
85
+ raise RuntimeError(
86
+ f"{IDENTITY_ENV_VAR} not found. Add {IDENTITY_ENV_VAR}=your-key to .env.local"
87
+ )
88
+ return api_key
89
+ return _agentcore_identity_api_key_provider()
90
+
91
+
92
+ def load_model() -> OpenAIChatCompletionClient:
93
+ """Get authenticated OpenAI model client."""
94
+ return OpenAIChatCompletionClient(
95
+ model="gpt-4o",
96
+ api_key=_get_api_key()
97
+ )
98
+ {{/if}}
99
+ {{#if (eq modelProvider "Gemini")}}
100
+ import os
101
+ from autogen_ext.models.openai import OpenAIChatCompletionClient
102
+ from bedrock_agentcore.identity.auth import requires_api_key
103
+
104
+ IDENTITY_PROVIDER_NAME = "{{identityProviders.[0].name}}"
105
+ IDENTITY_ENV_VAR = "{{identityProviders.[0].envVarName}}"
106
+
107
+
108
+ @requires_api_key(provider_name=IDENTITY_PROVIDER_NAME)
109
+ def _agentcore_identity_api_key_provider(api_key: str) -> str:
110
+ """Fetch API key from AgentCore Identity."""
111
+ return api_key
112
+
113
+
114
+ def _get_api_key() -> str:
115
+ """
116
+ Uses AgentCore Identity for API key management in deployed environments.
117
+ For local development, run via 'agentcore dev' which loads agentcore/.env.
118
+ """
119
+ if os.getenv("LOCAL_DEV") == "1":
120
+ api_key = os.getenv(IDENTITY_ENV_VAR)
121
+ if not api_key:
122
+ raise RuntimeError(
123
+ f"{IDENTITY_ENV_VAR} not found. Add {IDENTITY_ENV_VAR}=your-key to .env.local"
124
+ )
125
+ return api_key
126
+ return _agentcore_identity_api_key_provider()
127
+
128
+
129
+ def load_model() -> OpenAIChatCompletionClient:
130
+ """Get authenticated Gemini model client via OpenAI-compatible API."""
131
+ return OpenAIChatCompletionClient(
132
+ model="gemini-2.0-flash",
133
+ api_key=_get_api_key(),
134
+ base_url="https://generativelanguage.googleapis.com/v1beta/openai/"
135
+ )
136
+ {{/if}}
@@ -0,0 +1,34 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "{{ name }}"
7
+ version = "0.1.0"
8
+ description = "AgentCore Runtime Application using AutoGen SDK"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ dependencies = [
12
+ "autogen-agentchat >= 0.7.5",
13
+ "autogen-ext[mcp] >= 0.7.5",
14
+ "opentelemetry-distro",
15
+ "opentelemetry-exporter-otlp",
16
+ "bedrock-agentcore >= 1.18.1",
17
+ "botocore[crt] >= 1.35.0",
18
+ "tiktoken",
19
+ {{#if (eq modelProvider "Bedrock")}}
20
+ "autogen-ext[anthropic] >= 0.7.5",
21
+ {{/if}}
22
+ {{#if (eq modelProvider "Anthropic")}}
23
+ "autogen-ext[anthropic] >= 0.7.5",
24
+ {{/if}}
25
+ {{#if (eq modelProvider "OpenAI")}}
26
+ "autogen-ext[openai] >= 0.7.5",
27
+ {{/if}}
28
+ {{#if (eq modelProvider "Gemini")}}
29
+ "autogen-ext[openai] >= 0.7.5",
30
+ {{/if}}
31
+ ]
32
+
33
+ [tool.hatch.build.targets.wheel]
34
+ packages = ["."]
@@ -0,0 +1,41 @@
1
+ FROM public.ecr.aws/lambda/microvms:al2023-minimal
2
+
3
+ # OS setup
4
+ RUN dnf install -y tar gzip findutils shadow-utils ca-certificates \
5
+ && dnf clean all \
6
+ && useradd -m -u 1000 app
7
+
8
+ # Codex
9
+ RUN curl -fsSL https://chatgpt.com/codex/install.sh -o /tmp/install-codex.sh \
10
+ && CODEX_NON_INTERACTIVE=1 CODEX_INSTALL_DIR=/opt/bma/bin CODEX_HOME=/opt/bma/codex \
11
+ sh /tmp/install-codex.sh \
12
+ && chmod -R a+rX /opt/bma \
13
+ && rm /tmp/install-codex.sh
14
+
15
+ # CloudWatch agent
16
+ RUN arch=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') \
17
+ && curl -fsSL -o /tmp/cwagent.rpm \
18
+ https://amazoncloudwatch-agent.s3.amazonaws.com/amazon_linux/${arch}/latest/amazon-cloudwatch-agent.rpm \
19
+ && rpm -i /tmp/cwagent.rpm \
20
+ && rm /tmp/cwagent.rpm
21
+
22
+ # uv and Python
23
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/
24
+ ARG UV_DEFAULT_INDEX
25
+ ARG UV_INDEX
26
+ ENV UV_PYTHON_INSTALL_DIR=/opt/python UV_PYTHON_BIN_DIR=/usr/local/bin
27
+ RUN uv python install --default
28
+
29
+ # Application. The layout of /opt/bma is the same as the layout of this directory.
30
+ WORKDIR /opt/bma
31
+ ENV UV_COMPILE_BYTECODE=1 UV_NO_PROGRESS=1 \
32
+ UV_DEFAULT_INDEX=${UV_DEFAULT_INDEX} UV_INDEX=${UV_INDEX}
33
+ COPY pyproject.toml uv.lock* ./
34
+ RUN uv sync --no-dev
35
+ COPY lifecycle/ lifecycle/
36
+ COPY otel/ otel/
37
+ COPY plugins/ plugins/
38
+ USER app
39
+
40
+ EXPOSE 8080
41
+ CMD ["uv", "run", "--no-sync", "opentelemetry-instrument", "python", "-u", "lifecycle/server.py"]
@@ -0,0 +1,178 @@
1
+ This is a Bedrock Managed Agents (BMA) environment generated by the AgentCore CLI.
2
+
3
+ # Layout
4
+
5
+ BMA runs the agent loop (Codex) in the Bedrock Managed Agents service. This AgentCore Runtime (ACR) is the customer
6
+ environment where BMA runs commands. The ACR has no model code.
7
+
8
+ | Path | Description |
9
+ | --- | --- |
10
+ | `Dockerfile` | The ACR image. It installs the Codex CLI with OpenAI's installer, the CloudWatch agent, Python with uv, and the dependencies in `pyproject.toml`. It copies `lifecycle/`, `otel/`, and `plugins/` to the same paths under `/opt/bma`, the working directory of the image. |
11
+ | `lifecycle/server.py` | The environment lifecycle server, `bma-acr-lifecycle`. It handles the lifecycle calls from BMA and starts `codex exec-server`. |
12
+ | `otel/collector.yaml` | The configuration of the CloudWatch agent. The agent gets the spans and logs of `codex exec-server`, puts the session ID on them, and sends them to X-Ray and CloudWatch Logs with the ACR role. To turn off observability, add `DISABLE_ADOT_OBSERVABILITY` with the value `true` to `envVars`. |
13
+ | `plugins/acr-report` | A Codex plugin with the `acr-report` skill. The skill saves the Python version, the user ID, and the working directory in `acr-report.txt`. |
14
+ | `policies/bma-acr-policy.json` | Lets the ACR role call `bedrock-mantle:RegisterEnvironment` and `bedrock-mantle:ConnectEnvironment` on every Mantle project. To limit the role to your projects, change `Resource` to `arn:aws:bedrock-mantle:<region>:<account-id>:project/<project-id>`. |
15
+ | `policies/bma-session-trust.json` | The trust policy of the session role. BMA assumes the session role to call the ACR. The conditions let only BMA sessions and projects in the account and the Region of the ACR assume the role. `client.py` changes `${AWS::Partition}`, `${AWS::Region}`, and `${AWS::AccountId}` to the values of the ACR ARN. |
16
+ | `policies/bma-session-policy.json` | The policy of the session role. It lets BMA call the model with `bedrock-mantle:CreateInference`, and call and stop the ACRs and the Gateways in the account and the Region of the ACR. |
17
+ | `pyproject.toml` | The Python dependencies. `aws-opentelemetry-distro` sends a span for each call from BMA and a child span for each step of the call, for example the state load or the exec-server start. `bedrock-agentcore` is the AgentCore SDK. The `dev` group has the dependencies of `client.py`, and the image does not install it. Each image build installs the latest Python and the latest releases. To pin them, run `uv lock` and keep `uv.lock` next to this file. `requires-python` sets only a minimum, 3.12, so that `uv run client.py` does not use an older system Python. |
18
+ | `client.py` | A sample OpenAI SDK client. It creates the session role if necessary, and it creates a session in BMA. BMA sends the session's commands to this ACR. |
19
+
20
+ Do not change `lifecycle/server.py`. It must match the lifecycle calls that BMA makes.
21
+
22
+ The server always sends HTTP 200, because the Runtime changes any other status to 424 and drops the body. If a call
23
+ fails, the body has the HTTP status code of the failure in `status_code` and the reason in `error`, for example
24
+ `{"error": "the exec-server did not start", "status_code": 503}`.
25
+
26
+ # Codex version
27
+
28
+ The image build installs the latest Codex release. The server needs Codex 0.154.0 or newer because it runs
29
+ `codex exec-server`. To pin a release, set `CODEX_RELEASE` next to `CODEX_NON_INTERACTIVE` in the `Dockerfile`. The
30
+ image build downloads Codex and Python from the internet, so a build in VPC mode needs a route to the internet.
31
+
32
+ # ACR settings
33
+
34
+ `agentcore create` writes these settings to `agentcore/agentcore.json`:
35
+
36
+ - `policies/bma-acr-policy.json` in `additionalPolicies`. The ACR role gets this policy.
37
+ - An idle timeout of 1800 seconds (30 minutes) and a maximum lifetime of 28800
38
+ seconds (8 hours).
39
+ - No session storage. Session storage is only for a microVM Runtime, so without it the same settings work on a
40
+ capacity provider.
41
+
42
+ A value that you give to `agentcore create` replaces the value above.
43
+
44
+ The server keeps the connection state in `state.json` in `BMA_STATE_DIR`. The default is `/home/app/.bma`. The client
45
+ sets the workspace in `workspace_directory` when it creates the session. `client.py` uses `/home/app/workspace`. The
46
+ server creates that directory and runs the agent commands in it. If the activate call has no workspace directory, the
47
+ server returns status 400. If the server cannot create the directory, it returns status 503, logs
48
+ `workspace_unavailable`, and does not start the exec-server.
49
+
50
+ Files in the home directory do not stay after an idle stop. On a microVM Runtime, to keep the files and the connection
51
+ state after an idle stop, put the home directory on session storage:
52
+
53
+ 1. Add session storage with `--session-storage-mount-path /mnt/home`.
54
+ 2. Set `BMA_HOME_DIR` to `/mnt/home` in `envVars`. Then `state.json` is in `/mnt/home/.bma`, and `CODEX_HOME` is
55
+ `/mnt/home/.codex`.
56
+ 3. Set `WORKSPACE_DIRECTORY` in `client.py` to `/mnt/home/workspace`.
57
+
58
+ If you set `WORKSPACE_DIRECTORY` to a path on session storage, the Runtime must have session storage. If not, the
59
+ server cannot create the workspace, and the session fails. If `BMA_STATE_DIR` is not on a mounted path, or the server
60
+ cannot create it, the server keeps `state.json` in `.bma` in `BMA_HOME_DIR`.
61
+
62
+ # Environment variables
63
+
64
+ To change a setting of the server, add the variable to `envVars` of the agent in `agentcore/agentcore.json`. Then run
65
+ `agentcore deploy`. For example:
66
+
67
+ ```json
68
+ "envVars": [
69
+ { "name": "BMA_MAX_TURN_LEASE", "value": "600" },
70
+ { "name": "BMA_CODEX_BINARY", "value": "/opt/bma/bin/codex" }
71
+ ]
72
+ ```
73
+
74
+ | Variable | Default | Description |
75
+ | --- | --- | --- |
76
+ | `DISABLE_ADOT_OBSERVABILITY` | Not set | Set to `true` to turn off the traces and the exec-server logs. The server still writes its own logs. |
77
+ | `BMA_STATE_DIR` | `.bma` in `BMA_HOME_DIR` | The directory of `state.json`. |
78
+ | `BMA_HOME_DIR` | The home directory of the image user | `HOME` of the exec-server. |
79
+ | `BMA_CODEX_HOME` | `.codex` in `BMA_HOME_DIR` | `CODEX_HOME` of the exec-server. |
80
+ | `BMA_CODEX_BINARY` | `/opt/bma/bin/codex` | The Codex binary. |
81
+ | `BMA_MAX_TURN_LEASE` | `300` | The longest turn lease, in seconds. The server changes a longer request to this value. |
82
+
83
+
84
+ # Skills and plugins
85
+
86
+ BMA finds skills and plugins in the directories that the client gives in `capability_directories`. A directory can be
87
+ at any absolute path in the ACR. BMA does not need a copy in the workspace.
88
+
89
+ - To add a skill to the image, put a plugin under `plugins/` and add its path under `/opt/bma/plugins` to
90
+ `CAPABILITY_DIRECTORIES` in `client.py`. A plugin has a `.codex-plugin/plugin.json` file and a `skills/` directory
91
+ with one directory for each skill. Each skill directory has a `SKILL.md` file.
92
+ - To share skills from an S3 bucket, mount an S3 Files access point, for example at `/mnt/skills`, and add that
93
+ path to `CAPABILITY_DIRECTORIES`. Add the mount to `filesystemConfigurations` in `agentcore/agentcore.json` as an
94
+ `s3FilesAccessPoint` entry. An S3 Files mount needs VPC network mode.
95
+
96
+ # Deploy
97
+
98
+ ```bash
99
+ agentcore deploy
100
+ ```
101
+
102
+ Give the ACR ARN to BMA when you create the BMA environment.
103
+
104
+ # Session role
105
+
106
+ BMA needs two IAM roles in your account:
107
+
108
+ | Role | Who uses it | Who creates it |
109
+ | --- | --- | --- |
110
+ | The ACR role | The ACR, to connect to BMA. | `agentcore deploy`, with `policies/bma-acr-policy.json`. |
111
+ | The session role | BMA, to call the model and to call and stop this ACR. | `client.py`, with `policies/bma-session-trust.json` and `policies/bma-session-policy.json`. |
112
+
113
+ **`client.py` creates an IAM role in your account.** `agentcore deploy` does not create the session role, and
114
+ `agentcore remove` does not delete it. The client always gives the session role to BMA, so you do not need the role
115
+ `BedrockManagedAgentsPreviewInferenceServiceRole`.
116
+
117
+ When the client creates a session and you do not give `--role-arn`, the client does these steps:
118
+
119
+ 1. It gets the partition, the Region, and the account from the ACR ARN, and it puts them in the two files.
120
+ 2. If the role `BmaSessionRole-<region>` does not exist, the client creates it.
121
+ 3. If the trust policy of the role is not the same as `policies/bma-session-trust.json`, the client writes the file to
122
+ the role.
123
+ 4. If the inline policy `BmaSession` of the role is not the same as `policies/bma-session-policy.json`, the client
124
+ writes the file to the role.
125
+ 5. If it changed the role, the client waits 15 seconds, because IAM needs this time before BMA can use the change.
126
+
127
+ Thus, if you or another person changes the trust policy or the policy `BmaSession`, the next new session puts the
128
+ files back. To change the role, change the files. Then run the client.
129
+
130
+ The client does not change these items:
131
+
132
+ - Other policies on the role. For example, a `Deny` policy that someone adds stays on the role, and the session fails.
133
+ - A role that you give with `--role-arn`.
134
+ - The role, when you give `--session-id` for a session that exists. BMA assumes the role again at each turn. If the role
135
+ is broken, the turn fails until a new session puts the files back.
136
+
137
+ To use a role that you created, add `--role-arn <session role ARN>`. The trust policy must let
138
+ `bedrock-mantle.amazonaws.com` assume the role, and the role needs the permissions in
139
+ `policies/bma-session-policy.json`.
140
+
141
+ To delete the session role:
142
+
143
+ ```bash
144
+ aws iam delete-role-policy --role-name BmaSessionRole-<region> --policy-name BmaSession
145
+ aws iam delete-role --role-name BmaSessionRole-<region>
146
+ ```
147
+
148
+ # Run the client
149
+
150
+ Run the client from this directory with the ACR ARN from `agentcore status`:
151
+
152
+ ```bash
153
+ uv run client.py --runtime <ACR ARN>
154
+ ```
155
+
156
+ The identity that runs the client needs these permissions:
157
+
158
+ - `bedrock-mantle` permissions for the BMA sessions, for example `bedrock-mantle:CreateAgentSession`.
159
+ - `bedrock-mantle:CallWithBearerToken`, because the client signs in with a bearer token.
160
+ - `iam:PassRole` on the session role, with the condition `iam:PassedToService` set to `bedrock-mantle.amazonaws.com`.
161
+ - `iam:GetRole`, `iam:CreateRole`, `iam:UpdateAssumeRolePolicy`, `iam:GetRolePolicy`, and `iam:PutRolePolicy` on
162
+ `arn:aws:iam::<account-id>:role/BmaSessionRole-*`. The client does not need these permissions if you give
163
+ `--role-arn`. Without them, the client stops and tells you to give `--role-arn`.
164
+
165
+ `uv run` installs the dependencies and the `dev` group from `pyproject.toml` in `.venv`. The client creates a BMA
166
+ session and prints the session ID, each command with its output, and the answer of the agent as it streams.
167
+
168
+ To send another input to the same session, add the BMA session ID. If the session does not exist, the client creates a
169
+ new session and prints its ID.
170
+
171
+ ```bash
172
+ uv run client.py --runtime <ACR ARN> --session-id <BMA session ID> --input "List the files in the workspace."
173
+ ```
174
+
175
+ If you add a Gateway, add `--gateway <Gateway MCP URL>` with the URL from the output of `agentcore deploy`. BMA adds
176
+ the Gateway tools when it creates the session, so the flag has no effect on a session that exists.
177
+
178
+ To delete the session after the turn, add `--delete`. To print each stream event as JSON, add `--raw`.