This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05
, '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
This repository was archived by the owner on Jun 3, 2026. It is now read-only.

docs: add guide for handling large tool outputs - #774

Open
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs
Open

docs: add guide for handling large tool outputs#774
vinod151019 wants to merge 1 commit into
strands-agents:mainfrom
vinod151019:docs/handling-large-tool-outputs

Conversation

@vinod151019

Copy link
Copy Markdown

Summary

Adds a new page at user-guide/concepts/tools/handling-large-outputs documenting three composable patterns for keeping multi-megabyte tool results out of the agent context window:

  1. File Reference — write the payload to disk, return a path; a follow-up tool reads slices.
  2. AfterToolCallEvent Hook — intercept results and truncate or summarize them uniformly; stash the full value in invocation_state for the caller.
  3. Wrapper Tool — chain multiple steps inside a single tool so only the compact final result reaches the outer agent.

Closesstrands-agents/harness-sdk#2597.

Changes

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines, matches length and style of sibling pages like executors.mdx and vended-tools.mdx).
  • Sidebar: one-line insertion in src/config/navigation.yml to list the page under Tools.

Verification

  • npx astro build completes successfully; the new page builds at /docs/user-guide/concepts/tools/handling-large-outputs/.
  • All internal links (../agents/hooks.md, ./custom-tools.md, ../plugins/index.md, etc.) resolve. Zero new broken links in broken-links.log.
  • Every API call in the code examples verified against strands-agents/sdk-python main:
    • AfterToolCallEvent.result is writable (src/strands/hooks/events.py)
    • event.tool_use["toolUseId"] / ["name"] bracket syntax matches ToolUse TypedDict (src/strands/types/tools.py)
    • Agent(..., invocation_state=...) used instead of **kwargs (the latter is deprecating per src/strands/agent/agent.py)

Notes for reviewers

  • The File-Reference example names run_query and read_file_slice as placeholders the reader supplies. I deliberately avoided shipping a shell-style executor snippet so readers don't copy-paste an unsafe subprocess.run(shell=True) into production.
  • Placement under Tools rather than Agents: the page is primarily about tool-authoring patterns, though one of the three uses hooks.
  • A companion working example is tracked at Add example: Handling large tool call results samples#244.

Addresses #726. Documents three composable patterns — file reference,
AfterToolCallEvent hook, and wrapper tool — for keeping multi-megabyte
tool results out of the agent context window.
@vinod151019

Copy link
Copy Markdown
Author

Hi @lizradway, thanks for the update on strands-agents/harness-sdk#2597.

Sharing what this PR adds for the team's review:

  • New page: src/content/docs/user-guide/concepts/tools/handling-large-outputs.mdx (137 lines).
  • Three patterns documented using today's primitives:
    • File reference — write payload to disk, return path.
    • AfterToolCallEvent hook — truncate result, stash full value in invocation_state.
    • Wrapper tool — chain steps inside one tool so only the final result reaches the outer agent.
  • Sidebar: one-line insertion in src/config/navigation.yml under Tools.
  • npx astro build passes. Zero new broken links.
  • APIs verified against sdk-python main.

Related roadmap items for context:

@strands-agent

Copy link
Copy Markdown
Contributor

This repository has been merged into the strands-agents/harness-sdk monorepo and will be archived shortly. All new development happens there.

If this PR is still relevant, please recreate it against the monorepo. The code now lives under site/. Full commit history was preserved, so your base should be findable.

Apologies for the disruption, and thank you for contributing!

Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add documentation: Patterns for handling large tool call outputs

3 participants

@vinod151019@strands-agent@yonib05