+
button in the top-left to open the sidebar
+2. Click `Apps` in the sidebar
+3. Browse your available MCP Apps
+4. Click `Launch` to launch an app in a new window
+
+:::info Apps Extension
+To see the `Apps` page in the sidebar, the [Apps extension](/docs/mcp/apps-mcp) must be enabled from the `Extensions` page. You can also use it to create custom standalone apps.
+:::
+
+The `Apps` page displays custom HTML apps you created using the Apps extension, imported HTML apps, and apps from your enabled MCP Apps extensions. The app interface lets you click buttons, fill forms, or use other controls. Apps can call tools and read resources through MCP (if enabled through CORS), but cannot communicate with goose (e.g. via chat).
+
+#### Import an HTML App
+
+Import apps that were created with the Apps extension and shared with you.
+
+1. Click the
button in the top-left to open the sidebar
+2. Click `Apps` in the sidebar
+3. Click `Import App`, browse to the app's `.html` file on your file system, and click `Open`
+
+### Using Apps in Chat Windows
+
+Some MCP Apps render directly in your conversation when goose calls a tool that returns UI. The interactive interface appears inline with the chat, letting you make selections, fill forms, or trigger actions without leaving the conversation flow.
+
+If needed, you can just ask goose whether the UI can be loaded in the chat window.
+
-## Try It Out
+## MCP-UI
+
+MCP-UI is an earlier specification for interactive UIs that renders content embedded in your chat. While MCP Apps is now the recommended approach, MCP-UI extensions continue to work in goose.
+
+### Try It Out
See how interactive responses work in goose. For this exercise, we'll add an extension that connects to [MCP-UI Demos](https://mcp-aharvard.netlify.app/) provided by Andrew Harvard.
@@ -78,4 +119,5 @@ Try out other demos:
Add interactivity to your own extensions:
- [Building MCP Apps](/docs/tutorials/building-mcp-apps) - Step-by-step tutorial (recommended)
-- [MCP-UI Documentation](https://mcpui.dev/guide/introduction) - MCP-UI specification
+- [MCP Apps SDK and Specification](https://modelcontextprotocol.github.io/ext-apps/api/)
+- [MCP Apps SDK Guide](https://mcpui.dev/guide/introduction)
diff --git a/documentation/docs/guides/subagents.mdx b/documentation/docs/guides/subagents.mdx
index 29c4a169dae9..0511e63f4ba3 100644
--- a/documentation/docs/guides/subagents.mdx
+++ b/documentation/docs/guides/subagents.mdx
@@ -348,7 +348,7 @@ import agentCoordination from '@site/blog/2025-08-14-agent-coordination-patterns
title: 'Tutorial: Using Subagents',
description: 'Spin up a team of subagents to build a fully functional app',
thumbnailUrl: 'https://block.github.io/goose/assets/images/tutorial-using-subagents-ef265627024db73e73d80e5799ed0c1a.png',
- linkUrl: '/docs/tutorials/subagents',
+ linkUrl: '/goose/docs/tutorials/subagents',
date: '2026-01-27',
duration: '1 hour'
},
diff --git a/documentation/docs/mcp/apps-mcp.md b/documentation/docs/mcp/apps-mcp.md
new file mode 100644
index 000000000000..1f80c9cdf73c
--- /dev/null
+++ b/documentation/docs/mcp/apps-mcp.md
@@ -0,0 +1,99 @@
+---
+title: Apps Extension
+description: Create, manage, and launch custom HTML apps in standalone windows
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import { PlatformExtensionNote } from '@site/src/components/PlatformExtensionNote';
+import GooseBuiltinInstaller from '@site/src/components/GooseBuiltinInstaller';
+
+The Apps extension lets you create, manage, and launch simple custom apps through chat. This feature is ideal for:
+- Quick utilities and tools like calculators and converters
+- Data visualizations like graphs and dashboards
+- Simple games and interactive widgets
+
+Custom apps are single-file HTML applications with JavaScript, CSS, and HTML (no external dependencies or npm packages). They're exposed as [MCP App resources](/docs/guides/interactive-chat/mcp-ui) that run in standalone, sandboxed windows that you can launch from the `Apps` page or by asking goose in chat.
+
+You can create, modify, and delete apps through chat without needing to edit files directly. Behind the scenes, the Apps extension stores each app as an HTML file in:
+
+- **macOS/Linux:** `~/.local/share/goose/apps/`
+- **Windows:** `%APPDATA%\Block\goose\data\apps\`
+
+## Configuration
+
+
+
+
+
+
+
+
+
+ 1. Run the `configure` command:
+ ```sh
+ goose configure
+ ```
+
+ 2. Choose to `Toggle Extensions`
+ ```sh
+ ┌ goose-configure
+ │
+ ◇ What would you like to configure?
+ │ Toggle Extensions
+ │
+ ◆ Enable extensions: (use "space" to toggle and "enter" to submit)
+ // highlight-start
+ │ ● apps
+ // highlight-end
+ └ Extension settings updated successfully
+ ```
+
+
+
+## Example Usage
+
+Let's ask goose to create a utility app.
+
+:::info LLM
+Anthropic's Claude Sonnet 4.5 was used for this example.
+:::
+
+### goose Prompt
+
+> _Create a JSON formatter app_
+
+### goose Output
+
+:::note Desktop
+I'll create a JSON formatter app for you. This will be a useful tool for formatting, validating, and beautifying JSON data.
+
+Perfect! I've created a JSON formatter app called "json-beautifier" that should have opened in a new window.
+
+The app includes:
+
+✅ **Input & Output Areas**: Split view with input on the left and formatted output on the right
+✅ **Format Button**: Prettifies JSON with proper indentation
+✅ **Minify Button**: Compresses JSON to a single line
+✅ **Validate Button**: Checks JSON validity and shows errors
+✅ **Copy Button**: Copies the formatted JSON to clipboard
+✅ **Clear Button**: Resets everything
+✅ **Syntax Highlighting**: Color-coded keys, strings, numbers, and booleans
+✅ **Indentation Options**: Choose between 2 or 4 spaces
+✅ **Error Display**: Clear error messages in red
+✅ **Character/Line Count**: Shows statistics about your JSON
+✅ **Dark Theme**: Modern, easy-on-the-eyes design
+
+You can paste JSON into the left panel and use the buttons to format, minify, validate, or copy it. The app should be ready to use right away!
+:::
+
+### Results
+
+Here's what the JSON formatter looks like:
+
+[](/img/apps-extension-results.png)
+
+The first iteration of my app looks and works great, but you can just ask goose to add features, change the styling, and more!
diff --git a/documentation/src/components/PlatformExtensionNote.js b/documentation/src/components/PlatformExtensionNote.js
index 65702cd7015b..4b23effcd6da 100644
--- a/documentation/src/components/PlatformExtensionNote.js
+++ b/documentation/src/components/PlatformExtensionNote.js
@@ -4,7 +4,7 @@ import Admonition from '@theme/Admonition';
export const PlatformExtensionNote = ({ defaultEnabled = true }) => {
return (
- This is a built-in platform extension{defaultEnabled && " that's enabled by default"}. Platform extensions provide core functionality and are used within goose just like MCP server extensions.
+ This is a built-in platform extension{defaultEnabled && " that's enabled by default for new users"}. Platform extensions provide core functionality and are used within goose just like external MCP server extensions.
);
};
diff --git a/documentation/static/img/apps-extension-results.png b/documentation/static/img/apps-extension-results.png
new file mode 100644
index 000000000000..3fc79a5f8558
Binary files /dev/null and b/documentation/static/img/apps-extension-results.png differ