Customizing Prompt Templates
goose comes with built-in prompt templates that guide its behavior in different situations. You can edit these templates to customize how goose responds, creates plans, decides what to save during compaction, and more.
How It Works
goose's default prompt templates are defined in the codebase and embedded in the application. You can override any default by creating a custom version in your local config directory (either directly or via goose Desktop).
When you customize a template:
- Your customizations persist across goose updates
- Changes to defaults in the codebase don't affect your customized templates
- You can reset to default templates at any time
- Changes take effect in new sessions
Your changes can range from major updates to minor adjustments such as:
- Edit
system.mdto have goose respond in Dutch by adding an instruction to "Reply in Dutch" - Edit
plan.mdto add time estimates by adding instructions to "Include an estimated time for each step (e.g., "~5 min", "~30 min", "~2 hours")."
See Template Variable Syntax for important information about modifying template variables.
Other goose settings and features can also affect behavior or provide context, such as config files, .goosehints, and skills.
Managing Prompt Templates
- goose Desktop
- goose CLI
goose Desktop users can manage templates from the Settings page.
To customize a template:
- Click the button in the top-left to open the sidebar
- Click
Settingsin the sidebar - Click the
Promptstab - Click
Editnext to the template you want to change - Make your changes in the editor. You can click
Restore Defaultto start over from the default template at any time. - Click
Saveto apply your customization
Customized prompt templates display a Customized badge.
To reset a template to its default:
- Click the button in the top-left to open the sidebar
- Click
Settingsin the sidebar - Click the
Promptstab - Click
Editnext to the template you want to reset - Click
Reset to Defaultto delete your local template file
Or click Reset All at the top of the tab to delete all of your local template files.
goose CLI users can edit template files directly in the file system.
Custom templates are stored in:
- macOS/Linux:
~/.config/goose/prompts/ - Windows:
%APPDATA%\Block\goose\config\prompts\
To customize a template:
- Create the
promptsdirectory if it doesn't exist - Copy the template file name from the table above (e.g.,
system.md) - Create a file with that name in your prompts directory
- Add your custom content and save your changes. We recommend that you start by reviewing or copying the default template (linked in the table above).
To reset a template to its default:
- Delete the template file from your
promptsdirectory
Available Prompt Templates
The following default templates can be customized.
| Template | Description | Applies To |
|---|---|---|
| system.md | General system prompt defining goose's role, capabilities, and response format | Desktop and CLI |
| apps_create.md | Prompt for generating new standalone apps (in development) | Desktop only |
| apps_iterate.md | Prompt for updating existing standalone apps (in development) | Desktop only |
| compaction.md | Prompt for summarizing conversation history when context limits are reached | Desktop and CLI |
| desktop_prompt.md | Context about the user interface and available features | Desktop only |
| desktop_recipe_instruction.md | Instructions for executing recipes | Desktop only |
| permission_judge.md | Prompt for analyzing tool operations for read-only detection | Desktop and CLI |
| plan.md | Instructions for creating detailed, actionable plans with clarifying questions | CLI only |
| recipe.md | Prompt for generating recipe files from conversations | Desktop and CLI |
| subagent_system.md | System prompt for subagents spawned to handle specific tasks | Desktop and CLI |
Customizable templates are enumerated in the TEMPLATE_REGISTRY array in prompt_template.rs.
Template Variable Syntax
Templates use Jinja2 syntax for dynamic content:
{{ variable }}- Inserts a value (e.g.,{{ extensions }}lists enabled extensions){% if condition %}...{% endif %}- Conditional sections{% for item in list %}...{% endfor %}- Loops over items
Check out the default templates (linked to from the table above) to find common variables, such as {{ extensions }} and {{ hints }}.
Be careful when modifying template variables, as incorrect changes can break functionality. Test your changes in a new session to ensure they work as expected.
