Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
bf9e00e
feat(templates): add support for dynamic templates
Aug 26, 2026
f537095
docs(assets): update readme reccomended commands
Aug 26, 2026
51902bf
feat(runtime): wire up runtime version
Aug 26, 2026
7292110
fix(templates): use key function to key templates
Aug 26, 2026
25f40a2
docs(templates): fix comment with missing
Aug 26, 2026
ddacc45
docs(templates): fix incorrect wording on template types
Aug 26, 2026
142b246
fix(manager): render in correct directory
Aug 26, 2026
35cd569
test(template): add a snapshot test for the new template
Aug 26, 2026
d3f322e
fix(template): avoid double nesting runtimes
Aug 26, 2026
c8b9c6c
fix(templates): remove dead parameters
Aug 26, 2026
3c1fb48
refactor(harness): adapt harness to leverage template resolver
Aug 26, 2026
73644fd
refactor(manager): rename project template to project tree to avoid c…
Aug 26, 2026
d6ed9e9
fix(renderer): add missing handlebar helpers
Aug 26, 2026
ca4eaa8
fix(templates): add harnesses to merge entries
Aug 27, 2026
81da1d7
fix(handlebars): add missing helpers from upstream
Aug 27, 2026
28ef6ba
fix(harness): address hardcoded path
Aug 27, 2026
b003cf9
fix(hello-world): reject non-HTTP protocol on template
Aug 27, 2026
ca5224f
docs(strands-python): remove non-existent command from readme
Aug 27, 2026
150a060
feat(template): install runtime dependencies in scaffolding
Aug 27, 2026
aba40d7
fix(python): normalize names before being sent to python templates
Aug 27, 2026
d736054
fix(templates): validate dockerfile for harness/
Aug 27, 2026
49f65b9
fix(handlers): add strands as handler input
Aug 27, 2026
917cc91
fix(spec): avoid writing windows paths
Aug 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions src/assets/templates/strands-http-python/README.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
This is a project generated by the AgentCore CLI!

# Layout

The generated application code lives at the agent root directory. At the root, there is a `.gitignore` file, an
`agentcore/` folder which represents the configurations and state associated with this project. Other `agentcore`
commands like `deploy`, `dev`, and `invoke` rely on the configuration stored here.

## Agent Root

The main entrypoint to your app is defined in `main.py`. Using the AgentCore SDK `@app.entrypoint` decorator, this
file defines a Starlette ASGI app with the chosen Agent framework SDK running within.

`model/load.py` instantiates your chosen model provider.

## Input Validation

Validate invocation input before forwarding it to Strands. Keep plain prompts typed as strings. If the app accepts a
caller-supplied message history, retain `strip_trailing_tool_use()`, which normalizes the history tail before
invoking the agent.

## Environment Variables

| Variable | Required | Description |
| --- | --- | --- |
{{#if hasIdentity}}| `{{identityProviders.[0].envVarName}}` | Yes | {{modelProvider}} API key (local) or Identity provider name (deployed) |
{{/if}}| `LOCAL_DEV` | No | Set to `1` to use `.env.local` instead of AgentCore Identity |

# Developing locally

If installation was successful, a virtual environment is already created with dependencies installed.

Activate the environment with `source .venv/bin/activate` on macOS/Linux, `.venv\Scripts\activate.bat` in Windows
Command Prompt, or `.\.venv\Scripts\activate.ps1` in Windows PowerShell.

`agentcore project dev` will start a local server on 0.0.0.0:8080.

# Deployment

After providing credentials, `agentcore project deploy` will deploy your project into Amazon Bedrock AgentCore.
41 changes: 41 additions & 0 deletions src/assets/templates/strands-http-python/gitignore.template
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
# Environment variables
.env

# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# Virtual environments
.venv/
venv/
ENV/
env/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
Thumbs.db
Loading
Loading