@aws/agentcore 1.0.0-preview.9 → 1.0.0-rc.3

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 (386) hide show
  1. package/README.md +1218 -145
  2. package/dist/assets/agent-inspector/index.css.asset +1 -0
  3. package/dist/assets/agent-inspector/index.js.asset +289 -0
  4. package/dist/assets/cdk/README.md +43 -17
  5. package/dist/assets/cdk/bin/cdk.ts +22 -123
  6. package/dist/assets/cdk/lib/cdk-stack.ts +18 -69
  7. package/dist/assets/cdk/package.json +6 -13
  8. package/dist/assets/cdk/tsconfig.json +1 -1
  9. package/dist/assets/evaluators/python-lambda/README.md +32 -0
  10. package/dist/assets/evaluators/python-lambda/pyproject.toml +1 -1
  11. package/dist/assets/templates/a2a-python-strands/README.md +31 -0
  12. package/dist/assets/templates/a2a-python-strands/main.py +100 -0
  13. package/dist/assets/templates/a2a-python-strands/memory/session.py +35 -0
  14. package/dist/assets/templates/a2a-python-strands/model/load.py +6 -0
  15. package/dist/assets/templates/a2a-python-strands/pyproject.toml +20 -0
  16. package/dist/assets/templates/agent-python-langchain/README.md +56 -0
  17. package/dist/assets/{python/a2a/googleadk/base → templates/agent-python-langchain}/gitignore.template +1 -1
  18. package/dist/assets/templates/agent-python-langchain/main.py +50 -0
  19. package/dist/assets/templates/agent-python-langchain/model/load.py +9 -0
  20. package/dist/assets/templates/agent-python-langchain/pyproject.toml +21 -0
  21. package/dist/assets/templates/agent-python-minimal/README.md +31 -0
  22. package/dist/assets/templates/agent-python-minimal/main.py +13 -0
  23. package/dist/assets/templates/agent-python-minimal/pyproject.toml +18 -0
  24. package/dist/assets/{container/python/Dockerfile → templates/agent-python-strands/Dockerfile.template} +3 -1
  25. package/dist/assets/templates/agent-python-strands/README.md +60 -0
  26. package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-strands}/gitignore.template +1 -1
  27. package/dist/assets/templates/agent-python-strands/main.py +65 -0
  28. package/dist/assets/templates/agent-python-strands/memory/__init__.py +0 -0
  29. package/dist/assets/templates/agent-python-strands/memory/session.py +31 -0
  30. package/dist/assets/{python/http/strands/base → templates/agent-python-strands}/model/load.py +49 -3
  31. package/dist/assets/templates/agent-python-strands/parse.py +41 -0
  32. package/dist/assets/templates/agent-python-strands/pyproject.toml +24 -0
  33. package/dist/assets/templates/agent-typescript-strands/README.md +50 -0
  34. package/dist/assets/templates/agent-typescript-strands/gitignore.template +22 -0
  35. package/dist/assets/templates/agent-typescript-strands/main.ts +77 -0
  36. package/dist/assets/templates/agent-typescript-strands/memory/memory.ts +33 -0
  37. package/dist/assets/templates/agent-typescript-strands/model/load.ts +5 -0
  38. package/dist/assets/templates/agent-typescript-strands/package.json.template +28 -0
  39. package/dist/assets/templates/agent-typescript-strands/tsconfig.json +19 -0
  40. package/dist/assets/templates/agent-typescript-vercel/README.md +22 -0
  41. package/dist/assets/templates/agent-typescript-vercel/gitignore.template +22 -0
  42. package/dist/assets/templates/agent-typescript-vercel/main.ts +35 -0
  43. package/dist/assets/templates/agent-typescript-vercel/package.json.template +24 -0
  44. package/dist/assets/templates/agent-typescript-vercel/tsconfig.json +19 -0
  45. package/dist/assets/templates/agui-python-strands/README.md +39 -0
  46. package/dist/assets/{python/a2a/strands/base → templates/agui-python-strands}/gitignore.template +1 -1
  47. package/dist/assets/{python/agui/strands/base → templates/agui-python-strands}/main.py +11 -14
  48. package/dist/assets/templates/agui-python-strands/memory/__init__.py +0 -0
  49. package/dist/assets/templates/agui-python-strands/memory/session.py +35 -0
  50. package/dist/assets/templates/agui-python-strands/model/load.py +6 -0
  51. package/dist/assets/templates/agui-python-strands/pyproject.toml +22 -0
  52. package/dist/assets/{python/http/strands/base → templates/export-harness-python}/README.md +15 -8
  53. package/dist/assets/templates/export-harness-python/gitignore.template +41 -0
  54. package/dist/assets/templates/export-harness-python/main.py +584 -0
  55. package/dist/assets/templates/export-harness-python/mcp_client/client.py +63 -0
  56. package/dist/assets/templates/export-harness-python/memory/__init__.py +0 -0
  57. package/dist/assets/templates/export-harness-python/memory/session.py +47 -0
  58. package/dist/assets/templates/export-harness-python/model/load.py +249 -0
  59. package/dist/assets/templates/export-harness-python/model/mantle_compat.py +21 -0
  60. package/dist/assets/templates/export-harness-python/pyproject.toml +22 -0
  61. package/dist/assets/templates/export-harness-python/skills/fetcher.py +279 -0
  62. package/dist/assets/templates/harness/harness.yaml +157 -0
  63. package/dist/assets/templates/mcp-python-fastmcp/README.md +32 -0
  64. package/dist/assets/templates/mcp-python-fastmcp/gitignore.template +41 -0
  65. package/dist/assets/templates/mcp-python-fastmcp/main.py +83 -0
  66. package/dist/assets/{python/mcp/standalone/base → templates/mcp-python-fastmcp}/pyproject.toml +3 -2
  67. package/dist/assets/templates/shared/env.local.template +11 -0
  68. package/dist/assets/templates/shared/gitignore.template +19 -0
  69. package/dist/index.js +4 -27
  70. package/dist/main.js +1582 -0
  71. package/package.json +76 -148
  72. package/LICENSE +0 -175
  73. package/dist/agent-inspector/index.css +0 -1
  74. package/dist/agent-inspector/index.js +0 -279
  75. package/dist/assets/README.md +0 -104
  76. package/dist/assets/__tests__/__snapshots__/assets.snapshot.test.ts.snap +0 -5673
  77. package/dist/assets/__tests__/__snapshots__/dockerfile-render.test.ts.snap +0 -77
  78. package/dist/assets/__tests__/assets.snapshot.test.ts +0 -125
  79. package/dist/assets/__tests__/dockerfile-render.test.ts +0 -24
  80. package/dist/assets/agents/AGENTS.md +0 -141
  81. package/dist/assets/cdk/.prettierrc +0 -8
  82. package/dist/assets/cdk/jest.config.js +0 -9
  83. package/dist/assets/cdk/npmignore.template +0 -6
  84. package/dist/assets/cdk/test/cdk.test.ts +0 -28
  85. package/dist/assets/harness/invoke.py.template +0 -74
  86. package/dist/assets/mcp/python/README.md +0 -27
  87. package/dist/assets/mcp/python/pyproject.toml +0 -22
  88. package/dist/assets/mcp/python/server.py +0 -117
  89. package/dist/assets/mcp/python-lambda/README.md +0 -22
  90. package/dist/assets/mcp/python-lambda/handler.py +0 -144
  91. package/dist/assets/mcp/python-lambda/pyproject.toml +0 -15
  92. package/dist/assets/python/a2a/googleadk/base/README.md +0 -22
  93. package/dist/assets/python/a2a/googleadk/base/main.py +0 -110
  94. package/dist/assets/python/a2a/googleadk/base/model/load.py +0 -41
  95. package/dist/assets/python/a2a/googleadk/base/pyproject.toml +0 -20
  96. package/dist/assets/python/a2a/langchain_langgraph/base/README.md +0 -22
  97. package/dist/assets/python/a2a/langchain_langgraph/base/main.py +0 -130
  98. package/dist/assets/python/a2a/langchain_langgraph/base/model/load.py +0 -123
  99. package/dist/assets/python/a2a/langchain_langgraph/base/pyproject.toml +0 -25
  100. package/dist/assets/python/a2a/strands/base/README.md +0 -22
  101. package/dist/assets/python/a2a/strands/base/main.py +0 -107
  102. package/dist/assets/python/a2a/strands/base/model/load.py +0 -123
  103. package/dist/assets/python/a2a/strands/base/pyproject.toml +0 -23
  104. package/dist/assets/python/a2a/strands/capabilities/memory/session.py +0 -43
  105. package/dist/assets/python/agui/googleadk/base/README.md +0 -30
  106. package/dist/assets/python/agui/googleadk/base/gitignore.template +0 -41
  107. package/dist/assets/python/agui/googleadk/base/main.py +0 -31
  108. package/dist/assets/python/agui/googleadk/base/model/load.py +0 -41
  109. package/dist/assets/python/agui/googleadk/base/pyproject.toml +0 -24
  110. package/dist/assets/python/agui/langchain_langgraph/base/README.md +0 -22
  111. package/dist/assets/python/agui/langchain_langgraph/base/gitignore.template +0 -41
  112. package/dist/assets/python/agui/langchain_langgraph/base/main.py +0 -74
  113. package/dist/assets/python/agui/langchain_langgraph/base/model/load.py +0 -123
  114. package/dist/assets/python/agui/langchain_langgraph/base/pyproject.toml +0 -30
  115. package/dist/assets/python/agui/strands/base/README.md +0 -22
  116. package/dist/assets/python/agui/strands/base/gitignore.template +0 -41
  117. package/dist/assets/python/agui/strands/base/model/__init__.py +0 -1
  118. package/dist/assets/python/agui/strands/base/model/load.py +0 -123
  119. package/dist/assets/python/agui/strands/base/pyproject.toml +0 -27
  120. package/dist/assets/python/agui/strands/capabilities/memory/__init__.py +0 -1
  121. package/dist/assets/python/agui/strands/capabilities/memory/session.py +0 -43
  122. package/dist/assets/python/http/autogen/base/README.md +0 -39
  123. package/dist/assets/python/http/autogen/base/gitignore.template +0 -41
  124. package/dist/assets/python/http/autogen/base/main.py +0 -112
  125. package/dist/assets/python/http/autogen/base/mcp_client/__init__.py +0 -1
  126. package/dist/assets/python/http/autogen/base/mcp_client/client.py +0 -28
  127. package/dist/assets/python/http/autogen/base/model/__init__.py +0 -1
  128. package/dist/assets/python/http/autogen/base/model/load.py +0 -136
  129. package/dist/assets/python/http/autogen/base/pyproject.toml +0 -34
  130. package/dist/assets/python/http/googleadk/base/README.md +0 -39
  131. package/dist/assets/python/http/googleadk/base/gitignore.template +0 -41
  132. package/dist/assets/python/http/googleadk/base/main.py +0 -160
  133. package/dist/assets/python/http/googleadk/base/mcp_client/__init__.py +0 -1
  134. package/dist/assets/python/http/googleadk/base/mcp_client/client.py +0 -75
  135. package/dist/assets/python/http/googleadk/base/model/__init__.py +0 -1
  136. package/dist/assets/python/http/googleadk/base/model/load.py +0 -41
  137. package/dist/assets/python/http/googleadk/base/pyproject.toml +0 -22
  138. package/dist/assets/python/http/langchain_langgraph/base/README.md +0 -39
  139. package/dist/assets/python/http/langchain_langgraph/base/gitignore.template +0 -41
  140. package/dist/assets/python/http/langchain_langgraph/base/main.py +0 -176
  141. package/dist/assets/python/http/langchain_langgraph/base/mcp_client/__init__.py +0 -1
  142. package/dist/assets/python/http/langchain_langgraph/base/mcp_client/client.py +0 -77
  143. package/dist/assets/python/http/langchain_langgraph/base/model/__init__.py +0 -1
  144. package/dist/assets/python/http/langchain_langgraph/base/model/load.py +0 -123
  145. package/dist/assets/python/http/langchain_langgraph/base/pyproject.toml +0 -37
  146. package/dist/assets/python/http/openaiagents/base/README.md +0 -39
  147. package/dist/assets/python/http/openaiagents/base/gitignore.template +0 -41
  148. package/dist/assets/python/http/openaiagents/base/main.py +0 -169
  149. package/dist/assets/python/http/openaiagents/base/mcp_client/__init__.py +0 -1
  150. package/dist/assets/python/http/openaiagents/base/mcp_client/client.py +0 -74
  151. package/dist/assets/python/http/openaiagents/base/model/__init__.py +0 -1
  152. package/dist/assets/python/http/openaiagents/base/model/load.py +0 -37
  153. package/dist/assets/python/http/openaiagents/base/pyproject.toml +0 -21
  154. package/dist/assets/python/http/strands/base/main.py +0 -217
  155. package/dist/assets/python/http/strands/base/mcp_client/__init__.py +0 -1
  156. package/dist/assets/python/http/strands/base/mcp_client/client.py +0 -73
  157. package/dist/assets/python/http/strands/base/model/__init__.py +0 -1
  158. package/dist/assets/python/http/strands/base/pyproject.toml +0 -25
  159. package/dist/assets/python/http/strands/capabilities/memory/__init__.py +0 -1
  160. package/dist/assets/python/http/strands/capabilities/memory/session.py +0 -44
  161. package/dist/assets/python/mcp/standalone/base/README.md +0 -36
  162. package/dist/assets/python/mcp/standalone/base/gitignore.template +0 -41
  163. package/dist/assets/python/mcp/standalone/base/main.py +0 -25
  164. package/dist/cli/index.mjs +0 -1718
  165. package/dist/index.d.ts +0 -9
  166. package/dist/index.d.ts.map +0 -1
  167. package/dist/index.js.map +0 -1
  168. package/dist/lib/constants.d.ts +0 -37
  169. package/dist/lib/constants.d.ts.map +0 -1
  170. package/dist/lib/constants.js +0 -69
  171. package/dist/lib/constants.js.map +0 -1
  172. package/dist/lib/errors/config.d.ts +0 -49
  173. package/dist/lib/errors/config.d.ts.map +0 -1
  174. package/dist/lib/errors/config.js +0 -170
  175. package/dist/lib/errors/config.js.map +0 -1
  176. package/dist/lib/errors/index.d.ts +0 -2
  177. package/dist/lib/errors/index.d.ts.map +0 -1
  178. package/dist/lib/errors/index.js +0 -18
  179. package/dist/lib/errors/index.js.map +0 -1
  180. package/dist/lib/index.d.ts +0 -7
  181. package/dist/lib/index.d.ts.map +0 -1
  182. package/dist/lib/index.js +0 -44
  183. package/dist/lib/index.js.map +0 -1
  184. package/dist/lib/packaging/build-args.d.ts +0 -6
  185. package/dist/lib/packaging/build-args.d.ts.map +0 -1
  186. package/dist/lib/packaging/build-args.js +0 -18
  187. package/dist/lib/packaging/build-args.js.map +0 -1
  188. package/dist/lib/packaging/container.d.ts +0 -10
  189. package/dist/lib/packaging/container.d.ts.map +0 -1
  190. package/dist/lib/packaging/container.js +0 -78
  191. package/dist/lib/packaging/container.js.map +0 -1
  192. package/dist/lib/packaging/errors.d.ts +0 -16
  193. package/dist/lib/packaging/errors.d.ts.map +0 -1
  194. package/dist/lib/packaging/errors.js +0 -36
  195. package/dist/lib/packaging/errors.js.map +0 -1
  196. package/dist/lib/packaging/helpers.d.ts +0 -54
  197. package/dist/lib/packaging/helpers.d.ts.map +0 -1
  198. package/dist/lib/packaging/helpers.js +0 -463
  199. package/dist/lib/packaging/helpers.js.map +0 -1
  200. package/dist/lib/packaging/index.d.ts +0 -40
  201. package/dist/lib/packaging/index.d.ts.map +0 -1
  202. package/dist/lib/packaging/index.js +0 -98
  203. package/dist/lib/packaging/index.js.map +0 -1
  204. package/dist/lib/packaging/node.d.ts +0 -22
  205. package/dist/lib/packaging/node.d.ts.map +0 -1
  206. package/dist/lib/packaging/node.js +0 -109
  207. package/dist/lib/packaging/node.js.map +0 -1
  208. package/dist/lib/packaging/python.d.ts +0 -23
  209. package/dist/lib/packaging/python.d.ts.map +0 -1
  210. package/dist/lib/packaging/python.js +0 -165
  211. package/dist/lib/packaging/python.js.map +0 -1
  212. package/dist/lib/packaging/types/index.d.ts +0 -2
  213. package/dist/lib/packaging/types/index.d.ts.map +0 -1
  214. package/dist/lib/packaging/types/index.js +0 -3
  215. package/dist/lib/packaging/types/index.js.map +0 -1
  216. package/dist/lib/packaging/types/packaging.d.ts +0 -57
  217. package/dist/lib/packaging/types/packaging.d.ts.map +0 -1
  218. package/dist/lib/packaging/types/packaging.js +0 -3
  219. package/dist/lib/packaging/types/packaging.js.map +0 -1
  220. package/dist/lib/packaging/uv.d.ts +0 -7
  221. package/dist/lib/packaging/uv.d.ts.map +0 -1
  222. package/dist/lib/packaging/uv.js +0 -40
  223. package/dist/lib/packaging/uv.js.map +0 -1
  224. package/dist/lib/schemas/io/config-io.d.ts +0 -119
  225. package/dist/lib/schemas/io/config-io.d.ts.map +0 -1
  226. package/dist/lib/schemas/io/config-io.js +0 -323
  227. package/dist/lib/schemas/io/config-io.js.map +0 -1
  228. package/dist/lib/schemas/io/global-config.d.ts +0 -33
  229. package/dist/lib/schemas/io/global-config.d.ts.map +0 -1
  230. package/dist/lib/schemas/io/global-config.js +0 -89
  231. package/dist/lib/schemas/io/global-config.js.map +0 -1
  232. package/dist/lib/schemas/io/index.d.ts +0 -3
  233. package/dist/lib/schemas/io/index.d.ts.map +0 -1
  234. package/dist/lib/schemas/io/index.js +0 -18
  235. package/dist/lib/schemas/io/index.js.map +0 -1
  236. package/dist/lib/schemas/io/path-resolver.d.ts +0 -119
  237. package/dist/lib/schemas/io/path-resolver.d.ts.map +0 -1
  238. package/dist/lib/schemas/io/path-resolver.js +0 -207
  239. package/dist/lib/schemas/io/path-resolver.js.map +0 -1
  240. package/dist/lib/utils/aws-account.d.ts +0 -7
  241. package/dist/lib/utils/aws-account.d.ts.map +0 -1
  242. package/dist/lib/utils/aws-account.js +0 -24
  243. package/dist/lib/utils/aws-account.js.map +0 -1
  244. package/dist/lib/utils/credentials.d.ts +0 -86
  245. package/dist/lib/utils/credentials.d.ts.map +0 -1
  246. package/dist/lib/utils/credentials.js +0 -153
  247. package/dist/lib/utils/credentials.js.map +0 -1
  248. package/dist/lib/utils/env.d.ts +0 -22
  249. package/dist/lib/utils/env.d.ts.map +0 -1
  250. package/dist/lib/utils/env.js +0 -65
  251. package/dist/lib/utils/env.js.map +0 -1
  252. package/dist/lib/utils/index.d.ts +0 -9
  253. package/dist/lib/utils/index.d.ts.map +0 -1
  254. package/dist/lib/utils/index.js +0 -27
  255. package/dist/lib/utils/index.js.map +0 -1
  256. package/dist/lib/utils/json-rpc.d.ts +0 -3
  257. package/dist/lib/utils/json-rpc.d.ts.map +0 -1
  258. package/dist/lib/utils/json-rpc.js +0 -27
  259. package/dist/lib/utils/json-rpc.js.map +0 -1
  260. package/dist/lib/utils/platform.d.ts +0 -63
  261. package/dist/lib/utils/platform.d.ts.map +0 -1
  262. package/dist/lib/utils/platform.js +0 -88
  263. package/dist/lib/utils/platform.js.map +0 -1
  264. package/dist/lib/utils/subprocess.d.ts +0 -29
  265. package/dist/lib/utils/subprocess.d.ts.map +0 -1
  266. package/dist/lib/utils/subprocess.js +0 -116
  267. package/dist/lib/utils/subprocess.js.map +0 -1
  268. package/dist/lib/utils/time-parser.d.ts +0 -11
  269. package/dist/lib/utils/time-parser.d.ts.map +0 -1
  270. package/dist/lib/utils/time-parser.js +0 -47
  271. package/dist/lib/utils/time-parser.js.map +0 -1
  272. package/dist/lib/utils/zod.d.ts +0 -14
  273. package/dist/lib/utils/zod.d.ts.map +0 -1
  274. package/dist/lib/utils/zod.js +0 -32
  275. package/dist/lib/utils/zod.js.map +0 -1
  276. package/dist/schema/constants.d.ts +0 -119
  277. package/dist/schema/constants.d.ts.map +0 -1
  278. package/dist/schema/constants.js +0 -170
  279. package/dist/schema/constants.js.map +0 -1
  280. package/dist/schema/index.d.ts +0 -4
  281. package/dist/schema/index.d.ts.map +0 -1
  282. package/dist/schema/index.js +0 -21
  283. package/dist/schema/index.js.map +0 -1
  284. package/dist/schema/schemas/agent-env.d.ts +0 -186
  285. package/dist/schema/schemas/agent-env.d.ts.map +0 -1
  286. package/dist/schema/schemas/agent-env.js +0 -240
  287. package/dist/schema/schemas/agent-env.js.map +0 -1
  288. package/dist/schema/schemas/agentcore-project.d.ts +0 -838
  289. package/dist/schema/schemas/agentcore-project.d.ts.map +0 -1
  290. package/dist/schema/schemas/agentcore-project.js +0 -335
  291. package/dist/schema/schemas/agentcore-project.js.map +0 -1
  292. package/dist/schema/schemas/auth.d.ts +0 -140
  293. package/dist/schema/schemas/auth.d.ts.map +0 -1
  294. package/dist/schema/schemas/auth.js +0 -114
  295. package/dist/schema/schemas/auth.js.map +0 -1
  296. package/dist/schema/schemas/aws-targets.d.ts +0 -71
  297. package/dist/schema/schemas/aws-targets.d.ts.map +0 -1
  298. package/dist/schema/schemas/aws-targets.js +0 -57
  299. package/dist/schema/schemas/aws-targets.js.map +0 -1
  300. package/dist/schema/schemas/deployed-state.d.ts +0 -725
  301. package/dist/schema/schemas/deployed-state.d.ts.map +0 -1
  302. package/dist/schema/schemas/deployed-state.js +0 -218
  303. package/dist/schema/schemas/deployed-state.js.map +0 -1
  304. package/dist/schema/schemas/index.d.ts +0 -9
  305. package/dist/schema/schemas/index.d.ts.map +0 -1
  306. package/dist/schema/schemas/index.js +0 -26
  307. package/dist/schema/schemas/index.js.map +0 -1
  308. package/dist/schema/schemas/mcp-defs.d.ts +0 -52
  309. package/dist/schema/schemas/mcp-defs.d.ts.map +0 -1
  310. package/dist/schema/schemas/mcp-defs.js +0 -50
  311. package/dist/schema/schemas/mcp-defs.js.map +0 -1
  312. package/dist/schema/schemas/mcp.d.ts +0 -820
  313. package/dist/schema/schemas/mcp.d.ts.map +0 -1
  314. package/dist/schema/schemas/mcp.js +0 -564
  315. package/dist/schema/schemas/mcp.js.map +0 -1
  316. package/dist/schema/schemas/primitives/ab-test.d.ts +0 -141
  317. package/dist/schema/schemas/primitives/ab-test.d.ts.map +0 -1
  318. package/dist/schema/schemas/primitives/ab-test.js +0 -97
  319. package/dist/schema/schemas/primitives/ab-test.js.map +0 -1
  320. package/dist/schema/schemas/primitives/config-bundle.d.ts +0 -31
  321. package/dist/schema/schemas/primitives/config-bundle.d.ts.map +0 -1
  322. package/dist/schema/schemas/primitives/config-bundle.js +0 -38
  323. package/dist/schema/schemas/primitives/config-bundle.js.map +0 -1
  324. package/dist/schema/schemas/primitives/evaluator.d.ts +0 -102
  325. package/dist/schema/schemas/primitives/evaluator.d.ts.map +0 -1
  326. package/dist/schema/schemas/primitives/evaluator.js +0 -84
  327. package/dist/schema/schemas/primitives/evaluator.js.map +0 -1
  328. package/dist/schema/schemas/primitives/harness.d.ts +0 -363
  329. package/dist/schema/schemas/primitives/harness.d.ts.map +0 -1
  330. package/dist/schema/schemas/primitives/harness.js +0 -261
  331. package/dist/schema/schemas/primitives/harness.js.map +0 -1
  332. package/dist/schema/schemas/primitives/http-gateway.d.ts +0 -21
  333. package/dist/schema/schemas/primitives/http-gateway.d.ts.map +0 -1
  334. package/dist/schema/schemas/primitives/http-gateway.js +0 -34
  335. package/dist/schema/schemas/primitives/http-gateway.js.map +0 -1
  336. package/dist/schema/schemas/primitives/index.d.ts +0 -15
  337. package/dist/schema/schemas/primitives/index.d.ts.map +0 -1
  338. package/dist/schema/schemas/primitives/index.js +0 -61
  339. package/dist/schema/schemas/primitives/index.js.map +0 -1
  340. package/dist/schema/schemas/primitives/memory.d.ts +0 -51
  341. package/dist/schema/schemas/primitives/memory.d.ts.map +0 -1
  342. package/dist/schema/schemas/primitives/memory.js +0 -73
  343. package/dist/schema/schemas/primitives/memory.js.map +0 -1
  344. package/dist/schema/schemas/primitives/online-eval-config.d.ts +0 -14
  345. package/dist/schema/schemas/primitives/online-eval-config.d.ts.map +0 -1
  346. package/dist/schema/schemas/primitives/online-eval-config.js +0 -30
  347. package/dist/schema/schemas/primitives/online-eval-config.js.map +0 -1
  348. package/dist/schema/schemas/primitives/policy.d.ts +0 -49
  349. package/dist/schema/schemas/primitives/policy.d.ts.map +0 -1
  350. package/dist/schema/schemas/primitives/policy.js +0 -62
  351. package/dist/schema/schemas/primitives/policy.js.map +0 -1
  352. package/dist/schema/schemas/primitives/tags.d.ts +0 -6
  353. package/dist/schema/schemas/primitives/tags.d.ts.map +0 -1
  354. package/dist/schema/schemas/primitives/tags.js +0 -27
  355. package/dist/schema/schemas/primitives/tags.js.map +0 -1
  356. package/dist/schema/schemas/zod-util.d.ts +0 -10
  357. package/dist/schema/schemas/zod-util.d.ts.map +0 -1
  358. package/dist/schema/schemas/zod-util.js +0 -23
  359. package/dist/schema/schemas/zod-util.js.map +0 -1
  360. package/dist/schema/types/index.d.ts +0 -2
  361. package/dist/schema/types/index.d.ts.map +0 -1
  362. package/dist/schema/types/index.js +0 -18
  363. package/dist/schema/types/index.js.map +0 -1
  364. package/dist/schema/types/path.d.ts +0 -27
  365. package/dist/schema/types/path.d.ts.map +0 -1
  366. package/dist/schema/types/path.js +0 -13
  367. package/dist/schema/types/path.js.map +0 -1
  368. package/scripts/bump-version.ts +0 -393
  369. package/scripts/bundle.mjs +0 -219
  370. package/scripts/check-old-cli.lib.mjs +0 -102
  371. package/scripts/check-old-cli.mjs +0 -10
  372. package/scripts/copy-assets.mjs +0 -64
  373. package/scripts/generate-schema.mjs +0 -40
  374. package/scripts/run-e2e-local.sh +0 -112
  375. package/scripts/start-tui-harness.sh +0 -90
  376. /package/dist/{agent-inspector/favicon.svg → assets/agent-inspector/favicon.svg.asset} +0 -0
  377. /package/dist/{agent-inspector/index.html → assets/agent-inspector/index.html.asset} +0 -0
  378. /package/dist/assets/{python/http/strands/base → templates/a2a-python-strands}/gitignore.template +0 -0
  379. /package/dist/assets/{typescript/.gitkeep → templates/a2a-python-strands/memory/__init__.py} +0 -0
  380. /package/dist/assets/{python/a2a/googleadk/base → templates/a2a-python-strands}/model/__init__.py +0 -0
  381. /package/dist/assets/{python/a2a/langchain_langgraph/base → templates/agent-python-langchain}/model/__init__.py +0 -0
  382. /package/dist/assets/{container/python → templates/agent-python-strands}/dockerignore.template +0 -0
  383. /package/dist/assets/{python/a2a/strands/base → templates/agent-python-strands}/model/__init__.py +0 -0
  384. /package/dist/assets/{python/a2a/strands/capabilities/memory → templates/agui-python-strands/model}/__init__.py +0 -0
  385. /package/dist/assets/{python/agui/googleadk/base/model → templates/export-harness-python/mcp_client}/__init__.py +0 -0
  386. /package/dist/assets/{python/agui/langchain_langgraph/base → templates/export-harness-python}/model/__init__.py +0 -0
package/README.md CHANGED
@@ -1,205 +1,1278 @@
1
- <div align="center">
2
- <h1>AgentCore CLI</h1>
3
- <p><strong>Create, develop, and deploy AI agents to Amazon Bedrock AgentCore</strong></p>
1
+ # AgentCore CLI
4
2
 
5
- <p>
6
- <a href="https://github.com/aws/agentcore-cli/actions/workflows/build-and-test.yml"><img src="https://img.shields.io/github/actions/workflow/status/aws/agentcore-cli/build-and-test.yml?branch=main&label=build" alt="Build Status"></a>
7
- <a href="https://www.npmjs.com/package/@aws/agentcore"><img src="https://img.shields.io/npm/v/@aws/agentcore" alt="npm version"></a>
8
- <a href="LICENSE"><img src="https://img.shields.io/github/license/aws/agentcore-cli" alt="License"></a>
9
- </p>
10
- </div>
3
+ `agentcore` is a command-line tool and interactive terminal UI (TUI) for managing
4
+ **[AWS Bedrock AgentCore](https://aws.amazon.com/bedrock/agentcore/)** — Amazon's
5
+ platform for building and running production AI agents.
11
6
 
12
- ## Overview
7
+ It gives you two ways to work, from the same binary:
13
8
 
14
- Amazon Bedrock AgentCore enables you to deploy and operate AI agents securely at scale using any framework and model.
15
- AgentCore provides tools and capabilities to make agents more effective, purpose-built infrastructure to securely scale
16
- agents, and controls to operate trustworthy agents. This CLI helps you create, develop locally, and deploy agents to
17
- AgentCore with minimal configuration.
9
+ - **A scriptable CLI** — every operation is a flag-driven subcommand that emits
10
+ JSON (`--json`), so it can be used by codeing agents and can drop cleanly into
11
+ scripts, CI, and automation.
12
+ - **An interactive TUI** — bare Harness, Runtime, Memory, Identity, and Gateway
13
+ branches and leaves open their corresponding menus and selection flows, and a
14
+ bare `project create` opens a guided create wizard.
18
15
 
19
- ## 🚀 Jump Into AgentCore
16
+ ```bash
17
+ agentcore # launch the interactive TUI
18
+ agentcore harness list --json # scriptable, machine-readable output
19
+ ```
20
+
21
+ ## What problem does it solve?
22
+
23
+ Bedrock AgentCore is administered through several AWS SDK APIs (a control plane,
24
+ a data plane, and IAM for execution roles). Driving those directly means writing
25
+ a lot of boilerplate, hand-managing IAM roles, and stitching together streaming
26
+ responses. `agentcore` wraps all of that behind one ergonomic tool.
27
+
28
+ ## Command surface
29
+
30
+ Commands with operation flags run headlessly. Bare Harness, Runtime, Memory,
31
+ Identity, and Gateway branches and leaves open their interactive flows, as does
32
+ a bare `project create` in a terminal (any flag, `--json`, or a non-TTY stays
33
+ headless). A bare `project status` opens a Linked Resources view that groups
34
+ the project's resources by agent and forwards to each deployed resource's
35
+ detail page. The harness hub (`harness get`) ends with the same kind of Linked
36
+ Resources tree for the Runtime, Memory, Gateway, Browser, Code Interpreter and
37
+ credential providers wired to that harness, each opening in its own region.
38
+
39
+ ```
40
+ agentcore # interactive TUI
41
+ ├── harness # manage agentcore harnesses
42
+ │ ├── create # create a harness (auto-provisions a role if none given)
43
+ │ ├── get # fetch a harness by id
44
+ │ ├── list # list harnesses (server-side paginated)
45
+ │ ├── update # update a harness
46
+ │ ├── delete # delete a harness
47
+ │ ├── invoke # chat with / prompt a harness (streams the reply)
48
+ │ ├── exec # run a shell command in a harness runtime
49
+ │ ├── version
50
+ │ │ ├── list # list a harness's versions
51
+ │ │ └── get # get a specific version
52
+ │ └── endpoint
53
+ │ ├── create
54
+ │ ├── get
55
+ │ ├── list
56
+ │ ├── update
57
+ │ └── delete
58
+ ├── identity # manage AgentCore Identity resources
59
+ │ ├── api-key-credential-provider
60
+ │ │ ├── create # create an API key credential provider
61
+ │ │ ├── get # get an API key credential provider
62
+ │ │ ├── list # list API key credential providers
63
+ │ │ ├── update # update an API key credential provider
64
+ │ │ └── delete # delete an API key credential provider
65
+ │ ├── oauth2-credential-provider
66
+ │ │ ├── create # create an OAuth2 credential provider
67
+ │ │ ├── get # get an OAuth2 credential provider
68
+ │ │ ├── list # list OAuth2 credential providers
69
+ │ │ ├── update # update an OAuth2 credential provider
70
+ │ │ └── delete # delete an OAuth2 credential provider
71
+ │ └── payment-credential-provider
72
+ │ ├── get # get a payment credential provider
73
+ │ └── list # list payment credential providers
74
+ ├── runtime # inspect deployed AgentCore Runtimes
75
+ │ ├── get # fetch a Runtime by id
76
+ │ ├── list # list Runtimes (server-side paginated)
77
+ │ ├── invoke # invoke a Runtime headlessly or in a persistent console
78
+ │ ├── shell # open a persistent interactive terminal in a Runtime
79
+ │ ├── logs # follow a Runtime's logs live, or search a time window
80
+ │ ├── traces
81
+ │ │ ├── list # list a Runtime's recent traces
82
+ │ │ └── get # download a trace's log records to a JSON file
83
+ │ ├── version
84
+ │ │ ├── get # get a specific Runtime version
85
+ │ │ └── list # list a Runtime's versions
86
+ │ └── endpoint
87
+ │ ├── get # get a Runtime endpoint by qualifier
88
+ │ └── list # list a Runtime's endpoints
89
+ ├── memory # inspect AgentCore Memories
90
+ │ ├── get # fetch a Memory by id
91
+ │ ├── list # list Memories (server-side paginated)
92
+ │ ├── event
93
+ │ │ ├── get # get an Event from a Memory session
94
+ │ │ └── list # list Events from a Memory session
95
+ │ └── record
96
+ │ ├── get # get a long-term Memory record
97
+ │ └── list # list long-term Memory records
98
+ ├── gateway # manage AgentCore Gateways
99
+ │ ├── get # get a Gateway by id
100
+ │ ├── list # list Gateways (server-side paginated)
101
+ │ ├── invoke # invoke a Gateway headlessly or in a persistent console
102
+ │ ├── target
103
+ │ │ ├── get # get a Target under a Gateway
104
+ │ │ └── list # list Targets under a Gateway
105
+ │ ├── connector
106
+ │ │ ├── get # get a connector-backed Target
107
+ │ │ └── list # list connector-backed Targets
108
+ │ ├── rule
109
+ │ │ ├── get # get a Rule under a Gateway
110
+ │ │ └── list # list Rules under a Gateway
111
+ │ └── policy
112
+ │ └── generate # generate Cedar for a Gateway from a prompt (TUI when run bare)
113
+ ├── payment # inspect AgentCore Payments (command line only for now)
114
+ │ ├── manager
115
+ │ │ ├── get # get a payment manager by id
116
+ │ │ └── list # list payment managers (server-side paginated)
117
+ │ ├── connector # connectors under a payment manager
118
+ │ │ ├── get # get a connector (shows the Quick Create authorization URL while pending)
119
+ │ │ └── list # list a manager's connectors
120
+ │ ├── session # budget-limited payment contexts (data plane)
121
+ │ │ ├── get
122
+ │ │ └── list
123
+ │ └── instrument # embedded crypto wallets (data plane)
124
+ │ ├── get
125
+ │ ├── list
126
+ │ └── balance # read token balance on an explicit chain (default token: USDC)
127
+ ├── eval # evaluate and optimize AgentCore agents
128
+ │ └── evaluator # manage AgentCore evaluators
129
+ │ ├── llm-as-a-judge # LLM-as-a-Judge evaluators
130
+ │ │ ├── create # create (instructions + rating scale + model)
131
+ │ │ └── update # update (merged over the existing config)
132
+ │ ├── code-based # code-based (Lambda-backed) evaluators
133
+ │ │ ├── create # create (Lambda ARN + optional timeout)
134
+ │ │ └── update # update (merged over the existing config)
135
+ │ ├── get # get an evaluator by id (type-agnostic)
136
+ │ ├── list # list evaluators (server-side paginated)
137
+ │ └── delete # delete an evaluator by id
138
+ ├── project # manage an AgentCore project (scaffold → deploy)
139
+ │ ├── create # create a project: a managed harness by default,
140
+ │ │ # or scaffolded runtime code via --template;
141
+ │ │ # bare `project create` opens an interactive wizard.
142
+ │ │ # agentcore/cdk/ holds a two-file CDK app on
143
+ │ │ # @aws/agentcore-cdk (bin/cdk.ts, lib/cdk-stack.ts)
144
+ │ ├── add # add a resource to the project (runtime, harness, memory, …)
145
+ │ ├── export
146
+ │ │ └── harness # convert a harness into an editable Strands runtime agent
147
+ │ ├── remove # remove a resource from the project spec (spec-level;
148
+ │ │ # code under app/ is kept). Resource types: harness,
149
+ │ │ # runtime, credential, config-bundle, online-eval,
150
+ │ │ # online-insight, memory, gateway, gateway-target,
151
+ │ │ # gateway-connector, policy-engine, policy,
152
+ │ │ # payment-manager, payment-connector — or `all`, which
153
+ │ │ # empties every resource collection (y/N prompt; --yes
154
+ │ │ # skips it for non-interactive use)
155
+ │ ├── dev # run the project locally
156
+ │ ├── deploy # deploy to AWS (auto-provisions the default target)
157
+ │ ├── invoke # invoke a deployed project resource
158
+ │ │ ├── runtime # use the existing Runtime invoke experience
159
+ │ │ └── harness # use the existing Harness invoke experience
160
+ │ ├── status # inspect deployed project resources (TUI when run bare)
161
+ │ ├── build # synthesize the project's CloudFormation templates
162
+ │ ├── log
163
+ │ │ └── runtime # resolve a project Runtime and inspect its logs
164
+ │ └── traces
165
+ │ └── runtime
166
+ └── config # read/write global config values
167
+ ```
168
+
169
+ `project export harness` "ejects" a harness to code you own: it renders a
170
+ Python Strands agent under `app/<target-agent-name>/` mapping the harness spec
171
+ (model, system prompt, tools, skills, memory, execution limits), registers the
172
+ new runtime in `agentcore.json` (the harness entry stays), and writes an
173
+ `EXPORT_NOTES.md` in the agent directory listing anything that could not be
174
+ mapped mechanically. Pass `--name <harness>` for an in-project harness or
175
+ `--arn <harnessArn>` to fetch a deployed one (the fetch uses the region
176
+ embedded in the ARN); `--target-agent-name` overrides the default
177
+ `<harnessName>Agent`. The exported agent is always a `CodeZip` runtime: it
178
+ declares its own dependencies, so it needs no image build. If the harness used a
179
+ pre-built container image or a custom Dockerfile, that is reported in
180
+ `EXPORT_NOTES.md` rather than rebuilt. Path-based skills are not supported,
181
+ since the exported agent has no container filesystem to read them from.
182
+
183
+ ### Harness Project Files
184
+
185
+ `project create` (without `--template`) and `project add harness` share the same
186
+ scaffolding flow. Each harness has `app/<name>/harness.yaml` and
187
+ `app/<name>/system-prompt.md`. YAML is the harness configuration format.
188
+ The YAML contains the supplied settings and
189
+ commented optional examples. Tools are opt-in. Newly scaffolded harnesses
190
+ explicitly use `memory: { mode: managed }` unless another memory configuration
191
+ was supplied. Reading an existing file with no `memory` setting still means
192
+ disabled memory; reading never adds the scaffold default.
193
+
194
+ ```yaml
195
+ name: assistant
196
+ model:
197
+ provider: bedrock
198
+ modelId: global.anthropic.claude-sonnet-4-6
199
+ # Instructions come from system-prompt.md unless systemPrompt is set inline.
200
+ # systemPrompt: You are a helpful assistant.
201
+ memory:
202
+ mode: managed
203
+ ```
204
+
205
+ Both deployment and local export use inline `systemPrompt` text when it is
206
+ provided. Otherwise, instructions come from `system-prompt.md` next to
207
+ `harness.yaml`. Prompt contents are not trimmed, and blank prompts are rejected.
208
+ Prompt settings do not resolve local file references.
209
+
210
+ ```yaml
211
+ systemPrompt: |
212
+ You are a concise assistant.
213
+ truncation:
214
+ strategy: summarization
215
+ config:
216
+ summarization:
217
+ summarizationSystemPrompt: Keep decisions and open questions.
218
+ ```
219
+
220
+ `project add harness --system-prompt "Your instructions"` writes the supplied
221
+ text to `system-prompt.md`, leaving `systemPrompt` out of the generated YAML.
222
+ Summary instructions in
223
+ `truncation.config.summarization.summarizationSystemPrompt` are inline text.
224
+
225
+ Skills are unchanged: skill paths refer to the **runtime/container filesystem**,
226
+ not local files to package. Other fields do not support local includes.
227
+ Malformed YAML, duplicate keys, and existing schema violations fail the read.
228
+ Unknown fields at the harness root and directly inside `model` are stripped
229
+ from the parsed configuration. Nested configurations keep their existing
230
+ validation contracts. Free-form
231
+ maps such as headers, tags, environment variables, `additionalParams`, and
232
+ `inputSchema` still accept arbitrary keys.
233
+ Build, deploy, and export do not rewrite harness YAML or remove its comments.
234
+ `agentcore.json`, deployment targets, JSON CLI flags/output, and service payloads
235
+ are unchanged.
236
+
237
+ Global flags (declared at the root, available on every command):
238
+
239
+ | Flag | Purpose |
240
+ | ---------------- | -------------------------------------------------------------------- |
241
+ | `--region` | AWS region (falls back to `AWS_REGION`, then the shared AWS config). |
242
+ | `--json` | Emit machine-readable JSON instead of launching the TUI. |
243
+ | `--debug` | Debug logging. |
244
+ | `--endpoint-url` | Override the service endpoint URL (e.g. for testing against a stub). |
245
+
246
+ ### Invoke a project resource
247
+
248
+ Run `agentcore project invoke` from inside a project to choose a deployed
249
+ Runtime or Harness interactively. Headless invocation keeps each resource's
250
+ existing input contract:
251
+
252
+ ```bash
253
+ agentcore project invoke runtime \
254
+ --name checkout \
255
+ --payload '{"prompt":"Check order 123."}' \
256
+ --content-type application/json
257
+
258
+ agentcore project invoke harness \
259
+ --name support \
260
+ --prompt "Help with my account."
261
+ ```
262
+
263
+ Use `--target` to select a deployment target. When a project declares exactly
264
+ one resource of the requested type, `--name` may be omitted.
265
+
266
+ ### Inspect project logs
267
+
268
+ Project logging resolves a logical resource name through the selected
269
+ deployment target, so physical IDs and deployment regions do not need to be
270
+ supplied:
271
+
272
+ ```bash
273
+ agentcore project log runtime
274
+ agentcore project log runtime --name checkout --target production
275
+ agentcore project log runtime --name checkout --since 1h --level error
276
+ agentcore project log harness
277
+ agentcore project log harness --name support --target production
278
+ agentcore project log harness --name support --since 1h --level error
279
+ ```
280
+
281
+ When the project declares exactly one resource of the requested type, `--name`
282
+ may be omitted. For Harnesses, the CLI also resolves the managed Harness to its
283
+ underlying Runtime before reading CloudWatch. Use the imperative
284
+ `agentcore runtime logs` or `agentcore harness logs` commands when addressing a
285
+ physical resource directly or working outside a project.
286
+
287
+ ### Inspect project traces
288
+
289
+ Project tracing uses the same logical resource and deployment target
290
+ resolution, then lists or downloads traces from the resolved Runtime's
291
+ deployment region:
292
+
293
+ ```bash
294
+ agentcore project traces runtime list
295
+ agentcore project traces runtime list --name checkout --target production --since 30m
296
+ agentcore project traces runtime get <traceId> --name checkout --output trace.json
297
+ agentcore project traces harness list
298
+ agentcore project traces harness list --name support --target production --since 30m
299
+ agentcore project traces harness get <traceId> --name support --output trace.json
300
+ ```
301
+
302
+ When the project declares exactly one resource of the requested type, `--name`
303
+ may be omitted. For Harnesses, the CLI resolves the underlying Runtime before
304
+ querying its traces. Use the imperative `agentcore runtime traces` or
305
+ `agentcore harness traces` commands when addressing a physical resource
306
+ directly or working outside a project.
307
+
308
+ ### Inspect AgentCore Payments
309
+
310
+ The `payment` commands call the Payments control and data planes directly, with
311
+ no project involved. This command family currently provides read-only inspection
312
+ of existing managers, connectors, sessions, instruments, and payment credential
313
+ providers. It does not create IAM roles or change provider credentials.
314
+
315
+ Choose a manager from `manager list` and use its `paymentManagerId` below:
316
+
317
+ ```bash
318
+ agentcore payment manager list --json
319
+ MANAGER_ID='<paymentManagerId from manager list>'
320
+ agentcore payment manager get --id "$MANAGER_ID"
321
+ agentcore payment connector list --manager-id "$MANAGER_ID"
322
+ ```
323
+
324
+ `--user-id` is the application user ID used when the session or instrument was
325
+ created, not an IAM username or AWS profile. Session and instrument reads require
326
+ it with IAM authentication; their lists return that user's resources, not every
327
+ user's resources under the manager.
328
+
329
+ ```bash
330
+ USER_ID='alice' # Use the application user ID associated with the resources.
331
+ agentcore payment session list --manager-id "$MANAGER_ID" --user-id "$USER_ID"
332
+ agentcore payment instrument list --manager-id "$MANAGER_ID" --user-id "$USER_ID"
333
+
334
+ # Use paymentInstrumentId and paymentConnectorId from the same instrument list item.
335
+ INSTRUMENT_ID='<paymentInstrumentId>'
336
+ CONNECTOR_ID='<paymentConnectorId>'
337
+ agentcore payment instrument get --manager-id "$MANAGER_ID" \
338
+ --instrument-id "$INSTRUMENT_ID" --user-id "$USER_ID"
339
+ agentcore payment instrument balance --manager-id "$MANAGER_ID" \
340
+ --connector-id "$CONNECTOR_ID" --instrument-id "$INSTRUMENT_ID" \
341
+ --user-id "$USER_ID" --chain BASE_SEPOLIA
342
+ ```
343
+
344
+ To inspect connector or credential provider metadata:
345
+
346
+ ```bash
347
+ agentcore payment connector get --manager-id "$MANAGER_ID" --connector-id "$CONNECTOR_ID"
348
+ agentcore identity payment-credential-provider list --json
349
+ agentcore identity payment-credential-provider get --name '<provider name>'
350
+ ```
351
+
352
+ The optional `--agent-name` on session and instrument reads labels the request for
353
+ observability. It does not select an AgentCore agent or filter the results.
354
+
355
+ `instrument get` returns instrument metadata without querying balances. `balance`
356
+ requires an explicit chain and defaults to `--token USDC`; wallet network families
357
+ such as ETHEREUM do not identify whether to query mainnet or a testnet. The JSON
358
+ response retains the raw atomic amount string and decimals. A service error is
359
+ reported as an error, never converted to a zero balance.
360
+
361
+ Data-plane commands work against managers that use the `AWS_IAM` authorizer.
362
+ The CLI resolves `--manager-id` through `GetPaymentManager` in the configured
363
+ region, then supplies the returned ARN to the data-plane API. Callers need
364
+ `bedrock-agentcore:GetPaymentManager` as well as the relevant data-plane action.
365
+ Region resolution follows the other imperative commands: `--region`, environment
366
+ variables, the active AWS profile, then the CLI default.
367
+ A `CUSTOM_JWT` manager accepts only bearer tokens on its data plane, which
368
+ these commands do not send yet; the CLI reports that limitation before calling
369
+ the data plane.
370
+
371
+ ### Examples
372
+
373
+ ```bash
374
+ # Create a project. The default is a harness project: a managed agent
375
+ # configured by spec, no model-loop code to maintain. Passing only --name
376
+ # scaffolds the default harness.
377
+ agentcore project create --name MyAssistant
378
+ cd MyAssistant && agentcore project deploy
379
+ # … or run `agentcore project create` bare in a terminal for the guided
380
+ # wizard (name → harness or template → confirm), which drives the same
381
+ # creation path.
382
+ agentcore harness invoke --id <id from the deploy outputs> --prompt "hello"
383
+
384
+ # Scaffold runtime code instead by selecting a template. Templates that support
385
+ # a model provider (agent-python-strands) accept --model-provider/--api-key;
386
+ # add the -container suffix for a container build, or use `empty` for a project
387
+ # with no runtime.
388
+ agentcore project create --name MyAgent --template agent-python-strands
389
+ # The same Strands agent built as a container image, with a Dockerfile.
390
+ agentcore project create --name MyAgent --template agent-python-strands-container
391
+ # A LangChain agent on Bedrock, built with create_agent.
392
+ agentcore project create --name MyAgent --template agent-python-langchain
393
+
394
+ # Translate an existing Amazon Bedrock Agent version into editable runtime code
395
+ # with `project add runtime --type import` from inside a project. The selected
396
+ # alias identifies the immutable source version; generated code invokes models
397
+ # and translated tools directly rather than proxying the alias. Use --framework
398
+ # strands (default) or langgraph. The alias must point at a prepared version,
399
+ # not the mutable DRAFT that the built-in test alias (TSTALIASID) routes to.
400
+ # Anything that could not be translated is listed in the generated IMPORT_NOTES.md.
401
+ agentcore project add runtime --name MyImportedAgent --type import \
402
+ --agent-id A1B2C3D4E5 --agent-alias-id XYZ123ABC4 --region us-east-1 \
403
+ --framework strands
404
+ ```
405
+
406
+ ```bash
407
+ # Create a harness; a default execution role is created for you.
408
+ agentcore harness create \
409
+ --name my-agent \
410
+ --system-prompt "You are a helpful assistant." \
411
+ --model '{"bedrockModelConfig":{"modelId":"us.anthropic.claude-sonnet-4-5-20250929-v1:0"}}' \
412
+ --json
413
+
414
+ # List and inspect
415
+ agentcore harness list --json
416
+ agentcore harness get --id <harnessId> --json
417
+
418
+ # One-shot prompt (streams, then prints the full transcript as JSON)
419
+ agentcore harness invoke --id <harnessId> --prompt "Summarize this repo." --json
420
+
421
+ # Interactive chat (no --prompt): opens the TUI chat at that harness/session
422
+ agentcore harness invoke --id <harnessId>
423
+ agentcore harness invoke --id <harnessId> --session-id <session> --qualifier PROD
424
+
425
+ # Run a shell command inside the agent runtime
426
+ agentcore harness exec --id <harnessId> --command "ls -la" --json
427
+
428
+ # Inspect deployed Runtimes without project configuration or deployment
429
+ agentcore runtime get --id <runtimeId>
430
+ agentcore runtime list --max-results 20
431
+ agentcore runtime version get --id <runtimeId> --version <version>
432
+ agentcore runtime version list --id <runtimeId> --max-results 20
433
+ agentcore runtime endpoint get --id <runtimeId> --qualifier DEFAULT
434
+ agentcore runtime endpoint list --id <runtimeId> --max-results 20
435
+
436
+ # Follow a Runtime's logs live by resource ID (Ctrl+C to stop)
437
+ agentcore runtime logs --id <runtimeId>
438
+ agentcore runtime logs --id <runtimeId> --level error --query "database"
439
+
440
+ # Search a past window instead (--since/--until switch to search mode)
441
+ agentcore runtime logs --id <runtimeId> --since 1h --limit 100
442
+ agentcore runtime logs --id <runtimeId> --since 2026-08-30T12:00:00Z --until now --json
443
+
444
+ # List recent traces (they take 2-3 minutes to appear), then download one
445
+ agentcore runtime traces list --id <runtimeId> --since 30m
446
+ agentcore runtime traces get <traceId> --id <runtimeId> --output trace.json
447
+
448
+ # Resolve project resources by logical name and deployment target
449
+ agentcore project log harness --name support --target production --since 1h
450
+ agentcore project traces runtime list --name checkout --target production --since 30m
451
+ agentcore project traces runtime get <traceId> --name checkout --output trace.json
452
+ agentcore project traces harness list --name support --target production --since 30m
453
+ agentcore project traces harness get <traceId> --name support --output trace.json
454
+
455
+ # Inspect AgentCore Memories without project configuration or deployment
456
+ agentcore memory get --id <memoryId>
457
+ agentcore memory get --id <memoryId> --view without_decryption
458
+ agentcore memory list --max-results 20
459
+ agentcore memory event get --id <memoryId> --actor-id <actorId> --session-id <sessionId> --event-id <eventId>
460
+ agentcore memory event list --id <memoryId> --actor-id <actorId> --session-id <sessionId> --max-results 20
461
+ agentcore memory record get --id <memoryId> --record-id <recordId>
462
+ agentcore memory record list --id <memoryId> --namespace <namespace> --max-results 20
463
+
464
+ # Inspect Gateway resources without project configuration or deployment
465
+ agentcore gateway get --id <gatewayId>
466
+ agentcore gateway list --max-results 20
467
+ agentcore gateway invoke --id <gatewayId> --payload file://request.json
468
+ agentcore gateway invoke --id <gatewayId> # open the persistent JSON console
469
+ agentcore gateway target get --gateway-id <gatewayId> --target-id <targetId>
470
+ agentcore gateway target list --gateway-id <gatewayId> --max-results 20
471
+ agentcore gateway connector get --gateway-id <gatewayId> --id <targetId>
472
+ agentcore gateway connector list --gateway-id <gatewayId> --max-results 20
473
+ agentcore gateway rule get --gateway-id <gatewayId> --rule-id <ruleId>
474
+ agentcore gateway rule list --gateway-id <gatewayId> --max-results 20
475
+ agentcore gateway policy generate --gateway-id <gatewayId> --prompt "forbid IAM callers from every tool"
476
+ agentcore gateway policy generate --gateway-id <gatewayArn> --prompt file://policy.txt --json
477
+ # Pipe the generated Cedar into a project (run inside the project)
478
+ agentcore gateway policy generate --gateway-id <gatewayId> --prompt "..." \
479
+ | agentcore project add policy --engine Guardrails --name Generated --statement -
480
+
481
+ # Manage API key credential providers
482
+ agentcore identity api-key-credential-provider create --name my-provider --api-key <key>
483
+ agentcore identity api-key-credential-provider get --name my-provider
484
+ agentcore identity api-key-credential-provider list --max-results 10
485
+ agentcore identity api-key-credential-provider update --name my-provider --api-key <new-key>
486
+ agentcore identity api-key-credential-provider delete --name my-provider
487
+
488
+ # Manage OAuth2 credential providers (guided Custom OAuth2, or --provider-configuration for other vendors)
489
+ agentcore identity oauth2-credential-provider create \
490
+ --name my-oauth-provider \
491
+ --vendor CustomOauth2 \
492
+ --client-id <client-id> \
493
+ --discovery-url https://issuer.example.com/.well-known/openid-configuration \
494
+ --client-secret -
495
+ agentcore identity oauth2-credential-provider get --name my-oauth-provider
496
+ agentcore identity oauth2-credential-provider list --max-results 10
497
+ agentcore identity oauth2-credential-provider delete --name my-oauth-provider
498
+
499
+ # Manage evaluators
500
+ # Create an LLM-as-a-Judge evaluator with a rating-scale preset.
501
+ agentcore eval evaluator llm-as-a-judge create \
502
+ --name order-support-quality \
503
+ --level SESSION \
504
+ --model us.anthropic.claude-sonnet-4-5-20250929-v1:0 \
505
+ --instructions "Judge from {context} whether the order-support agent answered correctly." \
506
+ --rating-scale 1-5-quality \
507
+ --json
508
+
509
+ # Create a code-based (Lambda-backed) evaluator; timeout defaults to the service value.
510
+ agentcore eval evaluator code-based create \
511
+ --name refund-policy-compliance \
512
+ --level SESSION \
513
+ --lambda-arn arn:aws:lambda:us-west-2:123456789012:function:refund-policy \
514
+ --json
515
+
516
+ # Get, list, delete.
517
+ agentcore eval evaluator get --id <evaluatorId> --json
518
+ agentcore eval evaluator list --max-results 20 --json
519
+ agentcore eval evaluator delete --id <evaluatorId> --json
520
+
521
+ # Remove resources from a project's spec (run inside the project)
522
+ agentcore project remove memory --name recall
523
+ agentcore project remove credential --name svc-key # also deletes its .env.local entries
524
+ agentcore project remove gateway-target --gateway tools --name search
525
+ agentcore project remove all # y/N prompt; empties every collection
526
+ agentcore project remove all --yes # non-interactive
527
+ ```
528
+
529
+ Source-aware values: any field flag documented as such accepts the value inline,
530
+ `file://<path>` to read it from a file, or `-` to read it from stdin (the AWS CLI
531
+ `file://` convention). A command reads stdin from at most one flag. For example,
532
+ `--instructions file://order-quality.txt` or `--instructions -`.
533
+
534
+ Project credentials: a `credentials[]` entry in `agentcore.json` is named by its
535
+ spec name and keeps its secret in `agentcore/.env.local` under
536
+ `AGENTCORE_CREDENTIAL_<NAME>` (with a field suffix for OAuth2 and payment
537
+ values). `project deploy` provisions the Identity credential provider before
538
+ synth under the name `<project>_<target>_<credential>`, so two targets in one
539
+ account and region get separate providers, and records its ARN in
540
+ `deployed-state.json` under the spec name. A credential removed from the spec
541
+ has its provider deleted on the next deploy of each target, after the stack
542
+ update. Tearing a target down (deploying a spec with nothing left to deploy,
543
+ which is where `project remove all` leads) deletes every provider the target
544
+ owns: API key, OAuth2 and payment. CLI versions before this change named providers by the bare credential name. Those
545
+ providers stay in the account after an upgrade, untouched by deploys and
546
+ teardowns. Delete them with `agentcore identity api-key-credential-provider
547
+ delete --name <credential>`, the `oauth2-credential-provider` equivalent, or
548
+ `aws bedrock-agentcore-control delete-payment-credential-provider` once nothing
549
+ else uses them.
550
+
551
+ ### Extending the CDK app
552
+
553
+ `agentcore/cdk/` is a CDK app of two files. `bin/cdk.ts` reads the project once
554
+ (`readAgentCoreProject`), makes one stack per deployment target
555
+ (`resolveTargetStacks`) and turns `agentcore.json` into the application's props
556
+ (`transformAgentCoreJson`) — all three come from `@aws/agentcore-cdk`, so how
557
+ `agentcore.json` is interpreted changes with the library version, not with code
558
+ on your disk. `lib/cdk-stack.ts` instantiates one `AgentCoreApplication`; it is
559
+ the file you edit. Add your own resources after the application and wire them to
560
+ a runtime or harness through the application's accessors: runtimes and harnesses
561
+ implement `iam.IGrantable`, so any AWS L2 grant accepts them, and they expose
562
+ `grantRead` / `grantWrite` / `grantReadWrite` (DynamoDB tables, S3 buckets,
563
+ Secrets Manager secrets) and `addEnvironmentVariable`:
564
+
565
+ ```ts
566
+ import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
567
+
568
+ const orders = new dynamodb.Table(this, "Orders", {
569
+ partitionKey: { name: "pk", type: dynamodb.AttributeType.STRING },
570
+ });
571
+ const checkout = this.application.runtime("checkout"); // or this.application.harness('support')
572
+ checkout.grantReadWrite(orders);
573
+ checkout.addEnvironmentVariable("ORDERS_TABLE", orders.tableName);
574
+ orders.grantReadData(this.application.harness("support")); // any AWS L2 grant works too
575
+ ```
576
+
577
+ Redeploy with `agentcore project deploy`. An unknown name fails at synth and lists
578
+ the names that exist; a runtime or harness configured with an `executionRoleArn`
579
+ warns at synth about every grant CDK could not attach to the imported role. Note
580
+ that `agentcore project status` reports only the resources `agentcore.json`
581
+ declares, not the ones you add in the stack.
582
+
583
+ ### Invoke a Gateway
584
+
585
+ Gateway Invoke is a project-independent HTTP request command with headless and
586
+ interactive modes. It gets the Gateway by ID, uses the returned HTTPS origin,
587
+ selects authentication from the Gateway's authorizer, and preserves the request
588
+ and response bodies.
589
+
590
+ ```bash
591
+ # MCP Gateway: use the exact gatewayUrl returned by GetGateway.
592
+ agentcore gateway invoke \
593
+ --id <gatewayId> \
594
+ --payload '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"agentcore-cli","version":"1"}}}' \
595
+ --accept 'application/json, text/event-stream' \
596
+ --mcp-protocol-version 2025-03-26
597
+
598
+ # HTTP target: --path is relative to the Gateway origin.
599
+ agentcore gateway invoke \
600
+ --id <gatewayId> \
601
+ --path support-agent/invocations \
602
+ --payload file://request.json \
603
+ --session-id <runtimeSessionId>
604
+
605
+ # Inference target.
606
+ agentcore gateway invoke \
607
+ --id <gatewayId> \
608
+ --path inference/v1/messages \
609
+ --payload file://message.json \
610
+ --json
611
+
612
+ # GET requests do not accept a payload.
613
+ agentcore gateway invoke \
614
+ --id <gatewayId> \
615
+ --method GET \
616
+ --path inference/v1/models
617
+ ```
618
+
619
+ `--path` replaces the path in the returned Gateway URL while retaining its
620
+ origin. It must remain relative to the selected Gateway and may include a query
621
+ string. Omitting it uses the returned `gatewayUrl` exactly. Supported methods
622
+ are `GET`, `POST` (the default), and `DELETE`. POST requires `--payload`; DELETE
623
+ may include one. Payloads accept inline bytes, `file://<path>`, or `-` for stdin.
624
+
625
+ Authentication follows `GetGateway.authorizerType`: `AWS_IAM` and
626
+ `AUTHENTICATE_ONLY` requests use SigV4, `CUSTOM_JWT` requires `--bearer-token`,
627
+ and `NONE` uses unsigned HTTPS. Bearer tokens accept inline, `file://`, or stdin
628
+ sources; payload and token cannot both read stdin.
629
+
630
+ Raw responses stream exact bytes to stdout. `--output-file` streams those bytes
631
+ to disk, while `--json` buffers one envelope containing status, selected session
632
+ and request metadata, body encoding, and body. Binary or unknown output requires
633
+ `--output-file` or `--json` when stdout is a terminal. Response metadata goes to
634
+ stderr in raw and file modes. Redirects are returned without being followed.
635
+ Non-2xx response bodies use the selected output mode before the command exits
636
+ with a failure status.
637
+
638
+ Without `--payload`, Gateway Invoke opens a persistent POST JSON console. Bare
639
+ invoke opens the Gateway picker, while `--id` opens the selected Gateway
640
+ directly. `--path`, `--session-id`, MCP session flags, `--header`, and
641
+ `--bearer-token` seed the console. Interactive bearer tokens may be inline or
642
+ `file://` sources, but not stdin. Explicit headless-only flags such as
643
+ `--method`, `--accept`, `--content-type`, `--output-file`, or `--json` keep the
644
+ command headless.
645
+
646
+ The console generates and displays a Runtime session ID, adopts returned Runtime
647
+ and MCP sessions, and streams textual responses as they arrive. An empty path
648
+ uses the exact `gatewayUrl`; `Ctrl+P` edits the raw Gateway-relative path and
649
+ `Ctrl+T` switches Gateways. Switching Gateways clears request context, while
650
+ changing paths preserves the draft and Gateway authentication but starts fresh
651
+ sessions.
652
+
653
+ | Shortcut | Action |
654
+ | ------------- | -------------------------------------------- |
655
+ | `Enter` | Send the JSON request |
656
+ | `Shift+Enter` | Insert a newline |
657
+ | `Ctrl+P` | Edit the Gateway-relative path |
658
+ | `Ctrl+T` | Change Gateway |
659
+ | `Ctrl+V` | Toggle raw and pretty completed JSON |
660
+ | `Esc` | Interrupt an active request or navigate back |
661
+ | `↑`/`↓` | Scroll response history |
662
+
663
+ Gateway Invoke V1 has no request-type selector, target/path discovery,
664
+ tool/model discovery command, authentication editor, or protocol-specific
665
+ payload builder. Callers provide the Gateway-relative route and protocol payload
666
+ directly. GET and DELETE remain available through headless invoke.
667
+
668
+ ### Invoke a Runtime
669
+
670
+ Headless invocation accepts inline, file, or stdin payload bytes:
671
+
672
+ ```bash
673
+ # Inline
674
+ agentcore runtime invoke \
675
+ --id <runtimeId> \
676
+ --payload '{"action":"status"}' \
677
+ --content-type application/json \
678
+ --accept text/event-stream
679
+
680
+ # File
681
+ agentcore runtime invoke --id <runtimeId> --payload file://request.json
682
+
683
+ # stdin
684
+ cat request.json | agentcore runtime invoke --id <runtimeId> --payload -
685
+ ```
686
+
687
+ CUSTOM_JWT Runtimes require `--bearer-token`. The token accepts the same inline,
688
+ `file://`, or stdin sources as the payload; payload and token cannot both read
689
+ stdin.
20
690
 
21
- - **Node.js** 20.x or later
22
- - **uv** for Python agents ([install](https://docs.astral.sh/uv/getting-started/installation/))
691
+ ```bash
692
+ agentcore runtime invoke \
693
+ --id <runtimeId> \
694
+ --payload file://request.json \
695
+ --bearer-token file://$HOME/.config/agentcore/runtime-token
696
+ ```
697
+
698
+ For MCP Runtimes, initialize first, then pass the returned Runtime and MCP
699
+ session IDs to later methods. MCP requests accept both JSON and SSE responses.
700
+
701
+ ```bash
702
+ agentcore runtime invoke \
703
+ --id <runtimeId> \
704
+ --payload '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"agentcore-cli","version":"1"}}}' \
705
+ --accept 'application/json, text/event-stream' \
706
+ --mcp-protocol-version 2025-03-26 \
707
+ --mcp-method initialize
708
+
709
+ agentcore runtime invoke \
710
+ --id <runtimeId> \
711
+ --payload '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
712
+ --accept 'application/json, text/event-stream' \
713
+ --session-id <returnedRuntimeSessionId> \
714
+ --mcp-session-id <returnedMcpSessionId> \
715
+ --mcp-protocol-version 2025-03-26 \
716
+ --mcp-method tools/list
717
+ ```
23
718
 
24
- ## Installation
719
+ Raw stdout always streams exact response bytes as they arrive, regardless of
720
+ content type. `--output-file` streams the same bytes directly to disk. Binary or
721
+ unknown responses require `--output-file` or `--json` when stdout is a terminal.
722
+ Response metadata is written to stderr.
25
723
 
26
- > **Upgrading from the Bedrock AgentCore Starter Toolkit?** If the old Python CLI is still installed, you'll see a
27
- > warning after install asking you to uninstall it. Both CLIs use the `agentcore` command name, so having both can cause
28
- > confusion. Uninstall the old one using whichever tool you originally used:
29
- >
30
- > ```bash
31
- > pip uninstall bedrock-agentcore-starter-toolkit # if installed via pip
32
- > pipx uninstall bedrock-agentcore-starter-toolkit # if installed via pipx
33
- > uv tool uninstall bedrock-agentcore-starter-toolkit # if installed via uv
34
- > ```
724
+ `--json` buffers the complete response, including streaming representations, and
725
+ emits one metadata envelope without interpreting the customer body. If a raw or
726
+ file response fails, bytes already written remain available and the stderr
727
+ summary reports `complete=false`. A failed JSON response emits no partial
728
+ envelope.
35
729
 
36
730
  ```bash
37
- npm install -g @aws/agentcore
731
+ agentcore runtime invoke \
732
+ --id <runtimeId> \
733
+ --payload file://request.bin \
734
+ --content-type application/octet-stream \
735
+ --accept application/octet-stream \
736
+ --output-file response.bin
737
+
738
+ agentcore runtime invoke --id <runtimeId> --payload '{"action":"status"}' --json
739
+ # {"statusCode":200,"contentType":"application/json","bodyEncoding":"utf8","body":"{\"ok\":true}","complete":true}
38
740
  ```
39
741
 
40
- ## Quick Start
742
+ Without `--payload`, Runtime Invoke opens a persistent JSON console for repeated
743
+ requests. The console sends inline `application/json` payloads and renders each
744
+ response according to its returned content type. Bare invoke opens the Runtime
745
+ and endpoint pickers; `--id` skips the Runtime picker, and `--id` plus
746
+ `--qualifier` opens the console directly. `--session-id` resumes that Runtime
747
+ session in the console. `--user-id`, `--header`, and `--bearer-token` seed
748
+ request context that persists across sends and endpoint changes within that
749
+ Runtime. The console never displays their values, and switching Runtimes clears
750
+ them. Interactive bearer tokens may be inline or `file://` sources, but not
751
+ stdin.
41
752
 
42
- Use the terminal UI to walk through all commands interactively, or run each command individually:
753
+ | Shortcut | Action |
754
+ | ------------- | -------------------------------------------- |
755
+ | `Enter` | Send the JSON request |
756
+ | `Shift+Enter` | Insert a newline |
757
+ | `Ctrl+T` | Change Runtime or endpoint |
758
+ | `Ctrl+V` | Toggle raw and pretty completed JSON |
759
+ | `Esc` | Interrupt an active request or navigate back |
760
+ | `↑`/`↓` | Scroll response history |
761
+
762
+ Runtime Invoke accepts Runtime IDs from the current account only. It does not
763
+ accept ARNs, `--version`, `--interactive`, cross-account targets, or custom
764
+ request paths. All requests use the Runtime `/invocations` route, including MCP
765
+ Runtimes.
766
+
767
+ ### Open a Runtime shell
768
+
769
+ Runtime Shell opens a persistent interactive terminal in a Runtime session.
770
+ Bare shell opens the Runtime and endpoint pickers. `--id` skips the Runtime
771
+ picker, and `--id` plus `--qualifier` connects directly.
43
772
 
44
773
  ```bash
45
- # Launch terminal UI
46
- agentcore
774
+ agentcore runtime shell
775
+ agentcore runtime shell --id <runtimeId>
776
+ agentcore runtime shell --id <runtimeId> --qualifier DEFAULT
777
+ ```
47
778
 
48
- # Create a new project (wizard guides you through agent setup)
49
- agentcore create
50
- cd my-project
779
+ Use `--session-id` to open the shell in a specific Runtime session/VM:
780
+
781
+ ```bash
782
+ agentcore runtime shell \
783
+ --id <runtimeId> \
784
+ --qualifier DEFAULT \
785
+ --session-id <runtimeSessionId>
786
+ ```
51
787
 
52
- # Test locally
53
- agentcore dev
788
+ CUSTOM_JWT Runtimes require `--bearer-token`. Interactive bearer tokens may be
789
+ inline or `file://` sources, but not stdin.
54
790
 
55
- # Deploy to AWS
56
- agentcore deploy
791
+ The shell forwards terminal input byte-for-byte, including `Ctrl+C`, `Ctrl+D`,
792
+ escape sequences, and full-screen terminal applications. Terminal resize events
793
+ update the remote PTY. Running `exit` or sending `Ctrl+D` terminates the remote
794
+ shell.
57
795
 
58
- # Test deployed agent
59
- agentcore invoke
796
+ Runtime Shell requires TTY stdin and stdout and does not support `--json` or
797
+ `--endpoint-url`.
60
798
 
799
+ Bare Runtime branches and leaves, plus `memory`, `memory get`, and `memory list`,
800
+ require a TTY on stdin and stdout.
801
+ For Runtime Invoke, supplying a payload or headless-only request or output flags
802
+ runs headlessly; `--session-id` can instead seed the persistent console.
803
+ Supplying Memory operation flags runs those commands headlessly, and `--json`
804
+ always suppresses TUI rendering. The `memory event` and `memory record` groups
805
+ are headless: invoking a group without a leaf prints help, and their leaves
806
+ require resource selectors.
807
+
808
+ ```bash
809
+ agentcore runtime
810
+ agentcore runtime list
811
+ agentcore runtime get
812
+ agentcore runtime version list
813
+ agentcore runtime endpoint list
814
+ agentcore memory
815
+ agentcore memory list
816
+ agentcore memory get
817
+ agentcore memory event
818
+ agentcore memory record
819
+ ```
820
+
821
+ The Identity TUI is read-only: bare `identity` branches and the `get`/`list`
822
+ leaves open interactive menus and detail views. Mutations (`create`, `update`,
823
+ `delete`) remain available through the CLI and are omitted from the TUI menus.
824
+
825
+ ```bash
826
+ agentcore identity
827
+ agentcore identity api-key-credential-provider list
828
+ agentcore identity api-key-credential-provider get
829
+ agentcore identity oauth2-credential-provider list
830
+ agentcore identity oauth2-credential-provider get
831
+ ```
832
+
833
+ The Gateway TUI is read-only: bare Gateway, Target, Connector, and Rule
834
+ branches and their `get`/`list` leaves open command menus and scoped selection
835
+ flows. Connector is presented as a separate resource experience while using
836
+ Gateway Target operations internally.
837
+
838
+ ```bash
839
+ agentcore gateway
840
+ agentcore gateway list
841
+ agentcore gateway get
842
+ agentcore gateway target list
843
+ agentcore gateway target get
844
+ agentcore gateway connector list
845
+ agentcore gateway connector get
846
+ agentcore gateway rule list
847
+ agentcore gateway rule get
61
848
  ```
62
849
 
63
- ## Supported Frameworks
850
+ ---
851
+
852
+ # Architecture & patterns
64
853
 
65
- | Framework | Notes |
66
- | ------------------- | ----------------------------- |
67
- | Strands Agents | AWS-native, streaming support |
68
- | LangChain/LangGraph | Graph-based workflows |
69
- | Google ADK | Gemini models only |
70
- | OpenAI Agents | OpenAI models only |
854
+ This section documents the architectural conventions the codebase is built
855
+ around. They exist to keep the app modular, testable, and predictable as it
856
+ grows.
857
+
858
+ ## The big picture
859
+
860
+ ```
861
+ ┌───────────────────────────┐
862
+ argv ─────────────▶ │ Router / Handler tree │ src/router, src/handlers
863
+ │ (flags, args, middleware)│
864
+ └────────────┬──────────────┘
865
+ │
866
+ flags/args ? │ bare command ?
867
+ │ │ │
868
+ ▼ ▼
869
+ ┌─────────────────┐ ┌───────────────────┐
870
+ │ headless handler│ │ Ink/React TUI │ src/tui, src/components
871
+ │ → JSON output │ │ (same handlers) │
872
+ └────────┬────────┘ └────────┬──────────┘
873
+ │ │
874
+ └──────────┬─────────────┘
875
+ ▼
876
+ ┌───────────────────────┐
877
+ │ Core (CoreClient) │ src/core
878
+ │ feature sub-clients │
879
+ └──────────┬────────────┘
880
+ ▼
881
+ AWS SDK: Bedrock AgentCore (control + data) + IAM
882
+ ```
71
883
 
72
- ## Supported Model Providers
884
+ The CLI and the TUI are two front-ends over the **same** handler tree and the
885
+ **same** `Core` clients. Dependencies are injected at the edge in the main entrypoint (`src/index.ts`),
886
+ which is what makes the whole thing testable end-to-end.
73
887
 
74
- | Provider | API Key Required | Default Model |
75
- | -------------- | ------------------------- | -------------------------------------------- |
76
- | Amazon Bedrock | No (uses AWS credentials) | us.anthropic.claude-sonnet-4-5-20250514-v1:0 |
77
- | Anthropic | Yes | claude-sonnet-4-5-20250514 |
78
- | Google Gemini | Yes | gemini-2.5-flash |
79
- | OpenAI | Yes | gpt-4.1 |
888
+ ## The Router / Handler framework
80
889
 
81
- ## Commands
890
+ The whole CLI is expressed as a tree of **`Handler`** nodes wired together by a
891
+ **`Router`** (`src/router/`). A `Router` is itself a mountable branch node, so
892
+ routers nest to form the command tree (`agentcore` → `harness` → `get`). Every
893
+ command — branch or leaf — is a `Handler`:
82
894
 
83
- ### Project Lifecycle
895
+ - **Branch nodes** (routers) host subcommands and may declare group-level
896
+ ("global") flags and middleware that apply to everything beneath them. A
897
+ branch can also register a **default handler** (`router.default(...)`) that
898
+ runs when the branch is invoked with no subcommand (e.g. bare `agentcore` or
899
+ `agentcore harness` — this is how the TUI launches).
900
+ - **Leaf nodes** (built with `createHandler(...)`) do the work. They declare
901
+ their own flags/arguments (validated and coerced via zod schemas) and receive
902
+ a typed object in `handle(ctx, flags, args)`.
84
903
 
85
- | Command | Description |
86
- | -------- | ------------------------------ |
87
- | `create` | Create a new AgentCore project |
88
- | `dev` | Start local development server |
89
- | `deploy` | Deploy infrastructure to AWS |
90
- | `invoke` | Invoke deployed agents |
904
+ Every node — branch or leaf — satisfies the `Handler` interface:
91
905
 
92
- ### Resource Management
906
+ ```ts
907
+ export interface Handler {
908
+ name(): string;
909
+ description(): string;
910
+ flags(): Flag[];
911
+ arguments(): Argument[];
912
+ // At runtime `handle` receives the validated, coerced flags object. The precise
913
+ // shape is supplied to authors via createHandler's generic; the interface keeps
914
+ // it erased so middleware can forward it uniformly.
915
+ handle: (ctx: Context, flags: any, args: any) => Promise<void>;
916
+ children(): Handler[];
917
+ }
918
+ ```
93
919
 
94
- | Command | Description |
95
- | -------- | ---------------------------------------------------- |
96
- | `add` | Add agents, memory, credentials, evaluators, targets |
97
- | `remove` | Remove resources from project |
920
+ Under the hood the tree is compiled into a [Commander](https://github.com/tj/commander.js)
921
+ command tree (`src/router/router.tsx`), so `--help`, argument parsing, and error
922
+ handling come from a battle-tested parser while the authoring API stays small.
98
923
 
99
- > **Note**: Run `agentcore deploy` after `add` or `remove` to update resources in AWS.
924
+ Cross-cutting values flow through a typed **`Context`**. Group-level flags
925
+ (`globalFlag(...)`) double as context keys, so a flag declared high in the tree
926
+ is read type-safely by any descendant via `ctx.value(key)` / `ctx.require(key)`.
100
927
 
101
- ### Observability
928
+ ```ts
929
+ export interface Context {
930
+ // value returns the value previously stored under `key`, or undefined if absent.
931
+ value<V>(key: ContextKey<V>): V | undefined;
932
+ // require returns the value stored under `key`, throwing if it is absent.
933
+ require<V>(key: ContextKey<V>): V;
934
+ // withValue returns a new Context that carries `key`/`value` on top of this one.
935
+ withValue<V>(key: ContextKey<V>, value: V): Context;
936
+ }
937
+ ```
102
938
 
103
- | Command | Description |
104
- | ------------- | --------------------------------------- |
105
- | `logs` | Stream or search agent runtime logs |
106
- | `traces list` | List recent traces for a deployed agent |
107
- | `traces get` | Download a trace to a JSON file |
108
- | `status` | Show deployed resource details |
939
+ **Middleware** (`router.use(...)`) wraps handlers down the subtree in
940
+ ancestor-first order — for example `withRegion` resolves the effective AWS
941
+ region once at the root and pins it on the context for every command below. A
942
+ middleware is just a function that wraps one `Handler` in another:
109
943
 
110
- ### Evaluations
944
+ ```ts
945
+ export type Middleware = (handler: Handler) => Handler;
946
+ ```
111
947
 
112
- | Command | Description |
113
- | ----------------------- | ------------------------------------------------ |
114
- | `add evaluator` | Add a custom LLM-as-a-Judge evaluator |
115
- | `add online-eval` | Add continuous evaluation for live traffic |
116
- | `run eval` | Run on-demand evaluation against agent traces |
117
- | `run batch-evaluation` | Run evaluators across all sessions [preview] |
118
- | `run recommendation` | Optimize prompts and tool descriptions [preview] |
119
- | `evals history` | View past eval run results |
120
- | `pause online-eval` | Pause a deployed online eval config |
121
- | `resume online-eval` | Resume a paused online eval config |
122
- | `stop batch-evaluation` | Stop a running batch evaluation [preview] |
123
- | `logs evals` | Stream or search online eval logs |
948
+ ### Putting it all together
124
949
 
125
- ### Config Bundles [preview]
950
+ A minimal, self-contained example — a router with one piece of middleware and a
951
+ `greet` leaf handler:
126
952
 
127
- | Command | Description |
128
- | ------------------- | ----------------------------------------- |
129
- | `add config-bundle` | Add a versioned configuration bundle |
130
- | `cb versions` | List version history for a bundle |
131
- | `cb diff` | Diff two versions of a bundle |
132
- | `cb create-branch` | Create a new branch on an existing bundle |
953
+ ```ts
954
+ import z from "zod";
955
+ import { Router, createHandler, flag, globalFlag, type Middleware } from "./router";
133
956
 
134
- > Create agents with `--with-config-bundle` to auto-wire config bundle support into the generated template.
957
+ // A group-level flag that doubles as a typed context key.
958
+ const LoudKey = globalFlag("loud", "shout the greeting", z.boolean().default(false));
135
959
 
136
- ### Utilities
960
+ // Middleware wraps every handler beneath where it's mounted. Here it just logs.
961
+ const withLogging = (): Middleware => (h) => ({
962
+ name: () => h.name(),
963
+ description: () => h.description(),
964
+ flags: () => h.flags(),
965
+ arguments: () => h.arguments(),
966
+ children: () => h.children(),
967
+ handle: async (ctx, flags, args) => {
968
+ console.error(`> running ${h.name()}`);
969
+ await h.handle(ctx, flags, args);
970
+ },
971
+ });
137
972
 
138
- | Command | Description |
139
- | -------------- | ----------------------------------------- |
140
- | `validate` | Validate configuration files |
141
- | `package` | Package agent artifacts without deploying |
142
- | `fetch access` | Fetch access info for deployed resources |
143
- | `update` | Check for and install CLI updates |
973
+ // A leaf handler. `flags` is precisely typed from the zod schemas, and the
974
+ // group-level LoudKey is read back off the context.
975
+ const greet = createHandler({
976
+ name: "greet",
977
+ description: "greet someone",
978
+ flags: [flag("name", "who to greet", z.string().default("world"))] as const,
979
+ handle: async (ctx, flags) => {
980
+ const message = `hello, ${flags.name}!`;
981
+ console.log(ctx.value(LoudKey) ? message.toUpperCase() : message);
982
+ },
983
+ });
144
984
 
145
- ## Project Structure
985
+ // Wire it together: flags + middleware live on the router, handlers mount under it.
986
+ const app = new Router("demo", "a tiny demo CLI")
987
+ .groupFlags(LoudKey)
988
+ .use(withLogging())
989
+ .handler(greet);
146
990
 
991
+ await app.route(process.argv);
147
992
  ```
148
- my-project/
149
- ├── agentcore/
150
- │ ├── .env.local # API keys (gitignored)
151
- │ ├── agentcore.json # Resource specifications
152
- │ ├── aws-targets.json # Deployment targets
153
- │ └── cdk/ # CDK infrastructure
154
- ├── app/ # Application code
993
+
994
+ ```bash
995
+ demo greet --name Ada # hello, Ada!
996
+ demo greet --name Ada --loud # HELLO, ADA!
155
997
  ```
156
998
 
157
- ### App Structure
999
+ ## Adding a new handler
1000
+
1001
+ Each command lives in its own directory with a consistent file layout. Using
1002
+ `harness` as the model:
158
1003
 
159
1004
  ```
160
- ├── app/ # Application code
161
- │ └── <AgentName>/ # Agent directory
162
- │ ├── main.py # Agent entry point
163
- │ ├── pyproject.toml # Python dependencies
164
- │ └── model/ # Model configuration
1005
+ src/handlers/harness/
1006
+ ├── index.tsx # createHarnessHandler(core): builds the Router/Handler, wires
1007
+ │ # subcommands, middleware, flags, and the default handler
1008
+ ├── screen.tsx # the Ink/React screen(s) rendered for this command in the TUI
1009
+ ├── types.tsx # the interface(s) this command consumes from Core (see below)
1010
+ ├── get/ # a subcommand, same layout recursively
1011
+ │ ├── index.tsx
1012
+ │ └── screen.tsx
1013
+ └── list/
1014
+ ├── index.tsx
1015
+ └── screen.tsx
165
1016
  ```
166
1017
 
167
- ## Configuration
1018
+ Conventions:
1019
+
1020
+ - **`index.tsx`** exports a `create<Name>Handler(core)` factory returning a
1021
+ `Handler`/`Router`. Dependencies (the `Core` client) are passed in, never
1022
+ imported as singletons. Re-export the command's `screen.tsx` from here.
1023
+ - **`screen.tsx`** exports the React component(s) for the TUI. Screens receive
1024
+ `ScreenProps` (`{ ctx, core }`) threaded down from `Root`, and drive data
1025
+ fetching with react-query against `core`.
1026
+ - **`types.tsx`** defines the interface(s) this command needs from Core.
1027
+ - Shared helpers live in a sibling `utils.tsx` (e.g. `coreOptsFromCtx(ctx)`
1028
+ builds the standard `CoreOptions` from context values).
1029
+ - Shared components live in `src/components/`: anything rendered by more than
1030
+ one screen belongs there (e.g. `Layout`, `RouterScreen`, `HarnessPicker`),
1031
+ with the vendored InkUI primitives under `src/components/ui/`. A handler
1032
+ directory contains only the screens for its own command.
1033
+
1034
+ Mount the new handler by adding `root.handler(create<Name>Handler(core))` in
1035
+ `src/handlers/index.tsx` (or on the appropriate parent router).
1036
+
1037
+ ## Core and dependency inversion
1038
+
1039
+ Business logic and all I/O (AWS SDK calls, etc.) live in **`src/core/`**, behind
1040
+ a `CoreClient` that exposes feature-scoped sub-clients (e.g. `core.harness`).
1041
+ `CoreClient` owns the underlying AWS clients — the Bedrock AgentCore
1042
+ **control** plane (CRUD, versions, endpoints), the **data** plane (invoke, exec
1043
+ streaming), **IAM** (default execution roles) — caching one per config.
1044
+
1045
+ The important rule: **interfaces are defined by their consumers, not by Core.**
1046
+ The `CoreHarnessClient` interface lives in `src/handlers/harness/types.tsx` —
1047
+ next to the handler that uses it — and `src/core/harness.tsx` provides the
1048
+ implementation. Handlers depend on the interface they declare; Core depends on
1049
+ nothing about the handlers. This is **dependency inversion**: the
1050
+ high-level policy (handlers) owns the abstraction, and the low-level detail
1051
+ (Core/SDK) conforms to it.
1052
+
1053
+ Construction is also inverted. `CoreClient` doesn't build SDK clients directly;
1054
+ it takes **factory functions** (`(config) => new BedrockAgentCore...Client(...)`)
1055
+ injected at the app edge in `src/index.ts`. That keeps the SDK swappable —
1056
+ crucial for the testing strategy below.
1057
+
1058
+ ## The TUI
1059
+
1060
+ The interactive UI is built with [Ink](https://github.com/vadimdemedes/ink)
1061
+ (React for the terminal). `renderTui` mounts the `Root` component
1062
+ (`src/components/Root.tsx`) — a MemoryRouter over the app's route table plus a
1063
+ react-query client — seeded at the command's path. Because routes map to the
1064
+ same handler paths as the CLI, deep-linking works: `harness invoke --id X` opens
1065
+ the chat screen at that harness. Ink reads and writes through the injected IO
1066
+ streams, so the TUI is fully testable without a real terminal.
168
1067
 
169
- Projects use JSON schema files in the `agentcore/` directory:
1068
+ ## Testing
170
1069
 
171
- - `agentcore.json` - Agent specifications, memory, credentials, evaluators, online evals
172
- - `deployed-state.json` - Runtime state in agentcore/.cli/ (auto-managed)
173
- - `aws-targets.json` - Deployment targets (account, region)
1070
+ Tests sit next to the code they cover as `<file>.test.tsx` (e.g.
1071
+ `src/router/router.test.ts`), run with `bun test`. Shared test infrastructure
1072
+ lives in `src/testing/`.
174
1073
 
175
- ## Capabilities
1074
+ The guiding principle is **test behavior, not implementation**: a good test lets
1075
+ a maintainer refactor freely and only fails when observable behavior changes.
1076
+ This is possible because the app injects every dependency at its edges, so a
1077
+ test can build the whole CLI with test doubles at the boundary and drive a real
1078
+ command flow — argument parsing, middleware, handler, Core, and (for the TUI)
1079
+ rendering — as a single unit, asserting on the output a user would see.
176
1080
 
177
- - **Runtime** - Managed execution environment for deployed agents
178
- - **Memory** - Semantic, summarization, and user preference strategies
179
- - **Credentials** - Secure API key management via Secrets Manager
180
- - **Evaluations** - LLM-as-a-Judge for on-demand and continuous agent quality monitoring
1081
+ We aim for **90% line coverage** (`bun test --coverage`).
181
1082
 
182
- ## Documentation
1083
+ ### Injected IO
183
1084
 
184
- - [CLI Commands Reference](docs/commands.md) - Full command reference for scripting and CI/CD
185
- - [Configuration](docs/configuration.md) - Schema reference for config files
186
- - [Evaluations](docs/evals.md) - Evaluators, on-demand evals, and online monitoring
187
- - [Batch Evaluation](docs/batch-evaluation.md) - Run evaluators across sessions at scale [preview]
188
- - [Recommendations](docs/recommendations.md) - Optimize prompts and tool descriptions [preview]
189
- - [Config Bundles](docs/config-bundles.md) - Versioned runtime configurations [preview]
190
- - [Frameworks](docs/frameworks.md) - Supported frameworks and model providers
191
- - [Gateway](docs/gateway.md) - Gateway setup, targets, and authentication
192
- - [Memory](docs/memory.md) - Memory strategies and sharing
193
- - [Local Development](docs/local-development.md) - Dev server and debugging
1085
+ Nothing in the app reaches for `process.stdout`/`console.*` directly. An `AppIO`
1086
+ (`{ stdin, stdout, stderr }`, defined in `src/handlers/types.tsx`) is passed to
1087
+ `createRootHandler(core, io)` at the edge (`src/index.ts` passes the real process
1088
+ streams) and threaded down to the TUI renderer and handlers. JSON output flows
1089
+ through the context: a `withJsonRenderer` middleware pins a `JsonRenderer` wired
1090
+ to the configured stdout, and leaf handlers emit via
1091
+ `ctx.require(JsonRendererKey).renderJson(...)`. In tests, `testIO()` supplies an
1092
+ in-memory `AppIO` with `stdout()`/`stderr()` accessors, so a command's output is
1093
+ captured with no global patching.
1094
+
1095
+ ### Golden files and record mode
1096
+
1097
+ Handler tests run the real `CoreClient` over fixture-backed SDK clients and
1098
+ compare rendered output against committed **golden files**. The record/replay
1099
+ seam sits at the SDK `.send()` boundary (the same seam `src/index.ts` wires the
1100
+ real clients into), so replayed tests still exercise the real `CoreClient`,
1101
+ `HarnessClient`, and option translation — only the network call is swapped out.
1102
+
1103
+ Two modes, selected by the `RECORD` env var:
1104
+
1105
+ ```bash
1106
+ RECORD=1 bun test # hit the live AWS APIs and (re)write fixtures + golden files
1107
+ bun test # replay the saved fixtures; never touch the network
1108
+ ```
1109
+
1110
+ Recording lets the suite be fast, deterministic, and runnable offline/in CI.
1111
+ Refresh the fixtures by re-running in record mode when the APIs or expected
1112
+ output change. Fixtures are Date-safe (Dates round-trip via a tagged encoding)
1113
+ and strip volatile transport metadata (`$metadata`, request IDs) so they stay
1114
+ stable. Golden files are excluded from Prettier (`.prettierignore`) — they are
1115
+ byte-for-byte recordings, not source to reformat.
1116
+
1117
+ See [this talk](https://www.youtube.com/watch?v=yszygk1cpEc&t=1s) for background
1118
+ on the pattern.
1119
+
1120
+ ### TUI tests
1121
+
1122
+ Screens are tested with
1123
+ [`ink-testing-library`](https://github.com/vadimdemedes/ink-testing-library) via
1124
+ the `renderScreen(path, { core })` helper (`src/testing/renderScreen.tsx`). It
1125
+ mounts the real `Root` (MemoryRouter + the app's route table + react-query)
1126
+ seeded at a command path — exactly how the CLI mounts a screen — so routing,
1127
+ route params, data fetching, key input, and rendering are all exercised
1128
+ together. Data comes from a `TestCoreClient` (a hand-controllable `Core` that
1129
+ returns canned responses, forces errors, and records calls). Assertions read the
1130
+ rendered frame (`waitForText`, `lastFrame`) and key presses drive navigation
1131
+ between screens (`press`, `write`).
1132
+
1133
+ ## Repository layout
1134
+
1135
+ ```
1136
+ src/
1137
+ index.ts # app entry: wires real SDK factories + process IO into the root handler
1138
+ router/ # the Router/Handler framework (compiles to Commander)
1139
+ handlers/ # the command tree; one directory per command (index/screen/types)
1140
+ core/ # CoreClient + feature sub-clients; all AWS SDK I/O lives here
1141
+ middleware/ # cross-cutting middleware (withRegion, withJsonRenderer, ...)
1142
+ tui/ # Ink renderer entry (renderTui / renderTuiAt) + JSON renderer
1143
+ components/ # shared TUI components; ui/ holds vendored InkUI primitives
1144
+ testing/ # test doubles + helpers (testIO, renderScreen, fixtures, golden IO)
1145
+ runnable/ # top-level run/exit-code wrapper
1146
+ ```
194
1147
 
195
- ## Feedback & Issues
1148
+ ---
196
1149
 
197
- Found a bug or have a feature request? [Open an issue](https://github.com/aws/agentcore-cli/issues/new) on GitHub.
1150
+ # Development
198
1151
 
199
- ## Security
1152
+ Install [Bun](https://bun.com).
1153
+
1154
+ ```bash
1155
+ brew install oven-sh/bun/bun
1156
+ ```
1157
+
1158
+ Install dependencies:
1159
+
1160
+ ```bash
1161
+ bun install
1162
+ ```
1163
+
1164
+ Run from source:
1165
+
1166
+ ```bash
1167
+ bun run start
1168
+ ```
1169
+
1170
+ Run tests:
1171
+
1172
+ ```bash
1173
+ bun test
1174
+ ```
1175
+
1176
+ ## Run Locally
1177
+
1178
+ Build, then symlink the `agentcore` command globally so it works from any directory:
1179
+
1180
+ ```bash
1181
+ bun run build
1182
+ npm link
1183
+ ```
1184
+
1185
+ Re-run `bun run build` after changes; the linked command picks it up. Remove with:
1186
+
1187
+ ```bash
1188
+ npm unlink -g @aws/agentcore
1189
+ ```
1190
+
1191
+ To test the exact published artifact instead:
1192
+
1193
+ ```bash
1194
+ npm pack # builds via prepublishOnly, creates the .tgz
1195
+ npm i -g ./aws-agentcore-0.28.1.tgz
1196
+ ```
1197
+
1198
+ ## Windows notes
1199
+
1200
+ - **`agentcore.ps1 cannot be loaded because running scripts is disabled`**: the
1201
+ npm shim is a PowerShell script and Windows Server defaults to a `Restricted`
1202
+ execution policy. Run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned`
1203
+ once, or call `agentcore.cmd`. The compiled `.exe` has no shim.
1204
+ - **The CLI looks frozen in a PowerShell window**: legacy conhost pauses all
1205
+ output while text is selected (the title bar shows `Select`). Press `Esc`.
1206
+ Windows Terminal does not do this.
1207
+ - **`project create` refuses a long path**: Windows caps paths at 260 characters
1208
+ unless `LongPathsEnabled` is set, and the CDK app's `node_modules` puts its
1209
+ deepest file 155 characters below the project root (aws-cdk-lib's own shipped
1210
+ fixtures), so the project root must be at most 104 characters. Create the
1211
+ project higher in the tree or enable long paths.
1212
+
1213
+ # Build
1214
+
1215
+ Run `make` to verify bun is installed, build the Node bundle, and compile all native binaries:
1216
+
1217
+ ```bash
1218
+ make # check-bun -> build -> compile (all platforms)
1219
+ make bundle # node bundle only (dist/index.js)
1220
+ make compile # native binaries only (dist/bin/)
1221
+ make clean # remove dist/
1222
+ ```
1223
+
1224
+ `make` errors out early if bun is not installed.
1225
+
1226
+ Bundle the CLI into `dist/` for distribution. The bundle targets Node.js and is the artifact published to npm (via the `bin` entry):
1227
+
1228
+ ```bash
1229
+ make bundle
1230
+ ```
1231
+
1232
+ The output (`dist/index.js`) can be run directly with Node:
1233
+
1234
+ ```bash
1235
+ node dist/index.js
1236
+ ```
1237
+
1238
+ ## Native binaries
1239
+
1240
+ Compile standalone executables (Bun runtime embedded; no Node/Bun required to run) for all platforms into `dist/bin/`:
1241
+
1242
+ ```bash
1243
+ make compile
1244
+ ```
1245
+
1246
+ Targets (build individually with `bun run compile:<target>`):
1247
+
1248
+ | Script | Output |
1249
+ | ----------------------- | ----------------------------- |
1250
+ | `compile:darwin-x64` | `agentcore-darwin-x64` |
1251
+ | `compile:darwin-arm64` | `agentcore-darwin-arm64` |
1252
+ | `compile:linux-x64` | `agentcore-linux-x64` |
1253
+ | `compile:linux-arm64` | `agentcore-linux-arm64` |
1254
+ | `compile:windows-x64` | `agentcore-windows-x64.exe` |
1255
+ | `compile:windows-arm64` | `agentcore-windows-arm64.exe` |
1256
+
1257
+ Each binary is ~60–95MB (embedded runtime).
1258
+
1259
+ # Formatting
1260
+
1261
+ Format all files with Prettier:
1262
+
1263
+ ```bash
1264
+ bun run format # write changes
1265
+ bun run format:check # check only
1266
+ ```
200
1267
 
201
- See [SECURITY](SECURITY.md) for reporting vulnerabilities and security information.
1268
+ A Husky pre-commit hook runs Prettier (via lint-staged) on staged files automatically. It installs on `bun install`.
202
1269
 
203
- ## License
1270
+ # Next Steps
204
1271
 
205
- This project is licensed under the Apache-2.0 License.
1272
+ - **Cover more AgentCore resources.** The harness surface (CRUD, versions,
1273
+ endpoints, invoke, exec) is fully implemented in both the CLI and the TUI;
1274
+ the same patterns extend naturally to the remaining read-only Memory
1275
+ data-plane operations, browser profiles, and the other AgentCore resources.
1276
+ - **Implement `config`.** The `config` command is currently a stub — it should
1277
+ read/write real global settings (telemetry, log level, ...) through an
1278
+ injected config accessor.