diff --git a/documentation/docs/guides/config-files.md b/documentation/docs/guides/config-files.md
index 30d07fb1c0e0..b1faf2822d4c 100644
--- a/documentation/docs/guides/config-files.md
+++ b/documentation/docs/guides/config-files.md
@@ -19,6 +19,7 @@ The configuration files allow you to set default behaviors, configure language m
- **permission.yaml** - Tool permission levels configured via `goose configure`
- **secrets.yaml** - API keys and secrets (only when keyring is disabled)
- **permissions/tool_permissions.json** - Runtime permission decisions (auto-managed)
+- **prompts/** - Customized [prompt templates](/docs/guides/prompt-templates)
In addition to editing configuration files directly, many settings can be managed from goose Desktop and goose CLI:
- **goose Desktop**: From the `Settings` page and the bottom toolbar
diff --git a/documentation/docs/guides/creating-plans.md b/documentation/docs/guides/creating-plans.md
index 9dce591a6cde..141c7767e2bd 100644
--- a/documentation/docs/guides/creating-plans.md
+++ b/documentation/docs/guides/creating-plans.md
@@ -38,6 +38,10 @@ The goose CLI plan mode uses two configuration values:
goose also supports automatic model switching with [Lead/Worker mode](/docs/guides/environment-variables#leadworker-model-configuration), which provides turn-based switching between two models to help balance model capabilities with cost and speed.
:::
+:::tip Customize Plan Format
+You can also customize how goose creates plans by editing the `plan.md` [prompt template](/docs/guides/prompt-templates).
+:::
+
### Set goose planner environment variables
You might add these lines to your bash shell config file (.bashrc) to add the planner environment variables:
```bash
@@ -318,13 +322,27 @@ To enter planning mode, type `/plan`. Optionally, you can append your plan desc
( O)> /endplan
```
-
-
📚 Featured Tutorial
-
-
-
-
+## Additional Resources
+
+import ContentCardCarousel from '@site/src/components/ContentCardCarousel';
+import blogBanner from '@site/blog/2025-12-19-does-your-ai-agent-need-a-plan/blog-banner.png';
+
+
\ No newline at end of file
diff --git a/documentation/docs/guides/prompt-templates.md b/documentation/docs/guides/prompt-templates.md
new file mode 100644
index 000000000000..596b5b299d85
--- /dev/null
+++ b/documentation/docs/guides/prompt-templates.md
@@ -0,0 +1,137 @@
+---
+sidebar_position: 86
+title: Customizing Prompt Templates
+sidebar_label: Prompt Templates
+description: Learn how to customize the prompt templates that define goose's behavior in different situations
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import { PanelLeft } from 'lucide-react';
+
+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.md` to have goose respond in Dutch by adding an instruction to "Reply in Dutch"
+- Edit `plan.md` to 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](#template-variable-syntax) for important information about modifying template variables.
+
+:::info Related Configuration
+Other goose settings and features can also affect behavior or provide context, such as [config files](/docs/guides/config-files), [.goosehints](/docs/guides/context-engineering/using-goosehints), and [skills](/docs/guides/context-engineering/using-skills).
+:::
+
+## Managing Prompt Templates
+
+
+
+
+ goose Desktop users can manage templates from the `Settings` page.
+
+ **To customize a template:**
+
+ 1. Click the button in the top-left to open the sidebar
+ 2. Click `Settings` in the sidebar
+ 3. Click the `Prompts` tab
+ 4. Click `Edit` next to the template you want to change
+ 5. Make your changes in the editor. You can click `Restore Default` to start over from the default template at any time.
+ 6. Click `Save` to apply your customization
+
+ Customized prompt templates display a `Customized` badge.
+
+ **To reset a template to its default:**
+
+ 1. Click the button in the top-left to open the sidebar
+ 2. Click `Settings` in the sidebar
+ 3. Click the `Prompts` tab
+ 4. Click `Edit` next to the template you want to reset
+ 5. Click `Reset to Default` to 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:**
+
+ 1. Create the `prompts` directory if it doesn't exist
+ 2. Copy the template file name from the table above (e.g., `system.md`)
+ 3. Create a file with that name in your prompts directory
+ 4. Add your custom content and save your changes. We recommend that you start by reviewing or copying the default template (linked in the [table](#available-prompt-templates) above).
+
+ **To reset a template to its default:**
+
+ 1. Delete the template file from your `prompts` directory
+
+
+
+
+### Available Prompt Templates
+
+The following default templates can be customized.
+
+| Template | Description | Applies To |
+|----------|-------------|------------|
+| [system.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/system.md) | General system prompt defining goose's role, capabilities, and response format | Desktop and CLI |
+| [apps_create.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/apps_create.md) | Prompt for generating new standalone apps (in development) | Desktop only |
+| [apps_iterate.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/apps_iterate.md) | Prompt for updating existing standalone apps (in development) | Desktop only |
+| [compaction.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/compaction.md) | Prompt for summarizing conversation history when context limits are reached | Desktop and CLI |
+| [desktop_prompt.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/desktop_prompt.md) | Context about the user interface and available features | Desktop only |
+| [desktop_recipe_instruction.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/desktop_recipe_instruction.md) | Instructions for executing recipes | Desktop only |
+| [permission_judge.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/permission_judge.md) | Prompt for analyzing tool operations for read-only detection | Desktop and CLI |
+| [plan.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/plan.md) | Instructions for creating detailed, actionable plans with clarifying questions | CLI only |
+| [recipe.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/recipe.md) | Prompt for generating recipe files from conversations | Desktop and CLI |
+| [subagent_system.md](https://github.com/block/goose/blob/main/crates/goose/src/prompts/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`](https://github.com/block/goose/blob/main/crates/goose/src/prompt_template.rs).
+
+### Template Variable Syntax
+
+Templates use [Jinja2](https://jinja.palletsprojects.com/) 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](#available-prompt-templates) above) to find common variables, such as `{{ extensions }}` and `{{ hints }}`.
+
+:::warning
+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.
+:::
+
+## Additional Resources
+
+import ContentCardCarousel from '@site/src/components/ContentCardCarousel';
+import promptBanner from '@site/blog/2025-03-19-better-ai-prompting/prompt.png';
+
+
diff --git a/documentation/docs/guides/recipes/session-recipes.md b/documentation/docs/guides/recipes/session-recipes.md
index f2c857e26043..369914892bb7 100644
--- a/documentation/docs/guides/recipes/session-recipes.md
+++ b/documentation/docs/guides/recipes/session-recipes.md
@@ -180,6 +180,10 @@ You can turn your current goose session into a reusable recipe that includes the
+:::tip Customize Recipe Generation
+You can customize how goose generates recipes by editing the `recipe.md` [prompt template](/docs/guides/prompt-templates).
+:::
+
## Edit Recipe
diff --git a/documentation/docs/guides/sessions/smart-context-management.md b/documentation/docs/guides/sessions/smart-context-management.md
index df6b3e41594b..c1bff50bc9d9 100644
--- a/documentation/docs/guides/sessions/smart-context-management.md
+++ b/documentation/docs/guides/sessions/smart-context-management.md
@@ -41,6 +41,10 @@ When you reach the auto-compaction threshold:
2. Once complete, you'll see a confirmation message that the conversation was compacted and summarized.
3. Continue the session. Your previous conversation remains visible, but only the compacted conversion is included in the active context for goose.
+:::tip Customize Compaction
+You can customize how goose summarizes conversations during compaction by editing the `compaction.md` [prompt template](/docs/guides/prompt-templates).
+:::
+
### Manual Compaction
You can also trigger compaction manually before reaching context or token limits:
diff --git a/documentation/docs/guides/subagents.mdx b/documentation/docs/guides/subagents.mdx
index 0b5da174f2a9..7fbd41302df2 100644
--- a/documentation/docs/guides/subagents.mdx
+++ b/documentation/docs/guides/subagents.mdx
@@ -248,6 +248,10 @@ Subagents use the following pre-configured settings, but you can override any de
| **Extensions** | Inherited from parent | Specify which extensions to use in your prompt |
| **Return Mode** | All subagent information provided in main session | Specify how much detail you want in your prompt |
+:::tip Advanced Customization
+You can also customize subagent behavior by editing the `subagent_system.md` [prompt template](/docs/guides/prompt-templates).
+:::
+
### Customizing Settings in Prompts
You can override any default by including the setting in your natural language request: