Skip to main content

Summon Extension

The Summon extension lets you load reusable task sources into goose's context and delegate work to subagents.

You can load different types of sources:

  • Recipes - Automated task definitions with prompts and parameters
  • Agents - Reusable agent definitions stored in agent directories
  • Subrecipes - Recipe-local tasks available from the current recipe

This is useful when you want goose to reuse a task definition, hand work to another agent, or run read-only research in parallel. Skills are loaded by the separate Skills platform extension.

info

This extension is available in v1.25.0+.

Configuration

Platform Extension

This is a built-in platform extension that's enabled by default for new users. Platform extensions provide core functionality and are used within goose just like external MCP server extensions.

  1. Click the button in the top-left to open the sidebar
  2. Click Extensions in the sidebar
  3. Toggle Summon on

Example Usage

In this example, we'll create a reusable recipe and use Summon to delegate it to a subagent.

Create a Recipe

.agents/recipes/release-notes.yaml
title: Release Notes
description: Draft release notes from recent git changes
instructions: |
Review the recent git history and changed files.
Write concise release notes with:
- user-facing changes
- fixes
- migration notes, if any
prompt: Draft release notes for the current branch.

goose Prompt

Use summon to delegate the release-notes recipe for this branch.

goose Output

─── delegate | summon ───────────────────────────────────────
source: release-notes

The release-notes subagent reviewed the branch and drafted release notes:

## User-facing changes
- Added support for configuring project-specific extensions.
- Improved error messages when extension startup fails.

## Fixes
- Fixed stale extension state after disabling an extension.

Common Summon Commands

Ask goose to use Summon in natural language, or call the tools directly:

load()
load(source: "release-notes")
delegate(source: "release-notes")
delegate(instructions: "Review these docs and report stale links")
delegate(source: "release-notes", async: true)
load(source: "20260219_1", peek: true)
load(source: "20260219_1")

Calling load() with no arguments lists available sources. For background tasks, delegate(..., async: true) returns a task id, and load(source: "<task_id>") waits for the result.