From 3254d442c90c714b6f7328965fb02861d41cbbc4 Mon Sep 17 00:00:00 2001 From: Douwe Osinga Date: Sat, 16 May 2026 10:41:15 -0400 Subject: [PATCH] docs: document summon extension requirement for delegate and load tools (#9231) Signed-off-by: Douwe Osinga Co-authored-by: Douwe Osinga --- .../docs/guides/recipes/recipe-reference.md | 12 ++++++++++++ documentation/docs/guides/recipes/subrecipes.md | 4 ++++ documentation/docs/guides/subagents.mdx | 13 +++++++++++++ 3 files changed, 29 insertions(+) diff --git a/documentation/docs/guides/recipes/recipe-reference.md b/documentation/docs/guides/recipes/recipe-reference.md index cefffa1529..48bbf81585 100644 --- a/documentation/docs/guides/recipes/recipe-reference.md +++ b/documentation/docs/guides/recipes/recipe-reference.md @@ -176,6 +176,18 @@ The `extensions` field allows you to specify which Model Context Protocol (MCP) - **`frontend`**: Frontend-provided tools called through the frontend - **`inline_python`**: Inline Python code executed using uvx. Requires `code` field; optional `dependencies` for packages. +:::note Summon Extension and Subagents +The `delegate` and `load` tools are provided by the `summon` platform extension. When a recipe specifies an explicit `extensions` block, only the listed extensions are available — default platform extensions like `summon` are not automatically included. If your recipe needs subagent delegation, add `summon` to your extensions list: + +```yaml +extensions: + - type: platform + name: summon +``` + +Recipes that define [`sub_recipes`](/docs/guides/recipes/subrecipes) have `summon` auto-injected and do not need to list it explicitly. +::: + #### Example Extensions Configuration diff --git a/documentation/docs/guides/recipes/subrecipes.md b/documentation/docs/guides/recipes/subrecipes.md index 65f394bcfb..8064d1dafb 100644 --- a/documentation/docs/guides/recipes/subrecipes.md +++ b/documentation/docs/guides/recipes/subrecipes.md @@ -28,6 +28,10 @@ When the main recipe is run, goose generates a tool for each subrecipe that: Sub-recipe sessions run in isolation - they don't share conversation history, memory, or state with the main recipe or other subrecipes. Additionally, subrecipes cannot define their own subrecipes (no nesting allowed). +:::note +Recipes that define `sub_recipes` automatically get the `summon` platform extension injected, so the `delegate` tool is available without needing to list it in `extensions`. +::: + ### Parameter Handling Parameters received by subrecipes can be used in prompts and instructions using `{{ parameter_name }}` syntax. Subrecipes receive parameters in two ways: diff --git a/documentation/docs/guides/subagents.mdx b/documentation/docs/guides/subagents.mdx index beacf85240..3a665c3b6a 100644 --- a/documentation/docs/guides/subagents.mdx +++ b/documentation/docs/guides/subagents.mdx @@ -299,6 +299,19 @@ You can override any default by including the setting in your natural language r Control which tools and capabilities subagents can access. By default, subagents inherit all extensions from your main session, but you can restrict access for security, focus or performance. +:::note Summon Extension +The `delegate` and `load` tools are provided by the `summon` platform extension, which is enabled by default. If you are using a [recipe](/docs/guides/recipes/) with an explicit `extensions` block, you must include `summon` in that list or the `delegate` tool will not be available: + +```yaml +extensions: + - type: platform + name: summon + # ... your other extensions +``` + +Recipes that define [`sub_recipes`](/docs/guides/recipes/subrecipes) have `summon` auto-injected. +::: + **Examples:** ``` "Create a subagent to write a summary, but don't give it file access"