Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 55 additions & 57 deletions documentation/docs/getting-started/using-extensions.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,34 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import { PanelLeft, Settings } from 'lucide-react';

Extensions are add-ons that provide a way to extend the functionality of Goose by connecting with applications and tools you already use in your workflow. These extensions can be used to add new features, access data and resources, or integrate with other systems.
Extensions are add-ons that provide a way to extend the functionality of goose by connecting with applications and tools you already use in your workflow. These extensions can be used to add new features, access data and resources, or integrate with other systems.

Extensions are based on the [Model Context Protocol (MCP)](https://github.com/modelcontextprotocol), so you can connect
Goose to a wide ecosystem of capabilities.
goose to a wide ecosystem of capabilities.

Goose automatically checks external extensions for known malware before activation. If a malicious package is detected, the [extension will be blocked](/docs/troubleshooting/known-issues#malicious-package-detected) with a clear error message.
goose automatically checks external extensions for known malware before activation. If a malicious package is detected, the [extension will be blocked](/docs/troubleshooting/known-issues#malicious-package-detected) with a clear error message.

:::tip Tutorials
Check out the [step-by-step tutorials](/docs/category/mcp-servers) for adding and using several Goose Extensions
Check out the [step-by-step tutorials](/docs/category/mcp-servers) for adding and using various goose extensions
:::

## Built-in Extensions
Out of the box, Goose is installed with a few extensions but with only the `Developer` extension enabled by default.
goose includes several built-in extensions you can start using out of the box:

Here are the built-in extensions:

- [Developer](/docs/mcp/developer-mcp): Provides a set of general development tools that are useful for software development.
- [Developer](/docs/mcp/developer-mcp): Provides a set of general development tools that are useful for software development. The Developer extension is **enabled by default**.
- [Computer Controller](/docs/mcp/computer-controller-mcp): Provides general computer control tools for webscraping, file caching, and automations.
- [Memory](/docs/mcp/memory-mcp): Teaches Goose to remember your preferences as you use it.
- [Tutorial](/docs/mcp/tutorial-mcp): Provides interactive tutorials for learning about Goose.
- [Memory](/docs/mcp/memory-mcp): Teaches goose to remember your preferences as you use it.
- [Tutorial](/docs/mcp/tutorial-mcp): Provides interactive tutorials for learning about goose.
- [Auto Visualiser](/docs/mcp/autovisualiser-mcp): Automatically generates graphical data visualizations in conversations.

:::warning Access Control
goose operates autonomously by default. Combined with the Developer extension's tools, this means goose can execute commands and modify files without your approval. If you want more control over this behavior, you can configure the [goose permission mode](/docs/guides/goose-permissions), [tool permissions](/docs/guides/managing-tools/tool-permissions), and [.gooseignore files](/docs/guides/using-gooseignore). See [Configuring Access Controls](/docs/mcp/developer-mcp#configuring-access-controls) for a brief overview.
:::

In addition, these platform extensions provide core goose functionality. They are also always available and enabled by default:

- Extension Manager: Discover, enable, and disable extensions dynamically during sessions
- [Todo](/docs/mcp/todo-mcp): Manage task lists and track progress across sessions

#### Toggling Built-in Extensions

Expand All @@ -50,21 +56,17 @@ Here are the built-in extensions:
To navigate through available extensions:

1. Run the following command:
```sh
goose configure
```
2. Select `Add Extension` from the menu.
3. Choose the type of extension you'd like to add:
- `Built-In Extension`: Use an extension that comes pre-installed with Goose.
- `Command-Line Extension`: Add a local command or script to run as an extension.
- `Remote Extension (SSE)`: Connect to a remote system via SSE (Server-Sent Events).
- `Remote Extension (Streaming HTTP)`: Connect to a remote system via Streaming HTTP
4. Follow the prompts based on the type of extension you selected.
```sh
goose configure
```
2. Select `Add Extension` from the menu. Use the up and down keys to highlight your choice then press `Enter`.
3. Select `Built-In Extension`.
4. Select the extension to enable.
5. Provide a timeout for the extension (in seconds).
6. Press `Enter`.

**Example: Adding Built-in Extension**

To select an option during configuration, hover over it and press Enter.

```
┌ goose-configure
Expand All @@ -74,33 +76,29 @@ Here are the built-in extensions:
◇ What type of extension would you like to add?
│ Built-in Extension
◆ Which built-in extension would you like to enable?
│ ○ Developer Tools
│ ○ Computer Controller (controls for webscraping, file caching, and automations)
│ ○ Google Drive
│ ○ Memory
│ ● JetBrains
◇ Which built-in extension would you like to enable?
│ Auto Visualiser
◇ Please set the timeout for this tool (in secs):
│ 300
└ Enabled jetbrains extension
└ Enabled Auto Visualiser extension
```
</TabItem>
</Tabs>


:::info
All of Goose's built-in extensions are MCP servers in their own right. If you'd like
to use the MCP servers included with Goose with any other agent, you are free to do so.
goose's built-in extensions are MCP servers in their own right. If you'd like
to use the MCP servers included with goose with any other agent, you are free to do so.
:::


## Discovering Extensions

Goose provides a [central directory][extensions-directory] of extensions that you can install and use.
goose provides a [central directory][extensions-directory] of extensions that you can install and use.

You can also add any other [MCP Server](#mcp-servers) as a Goose extension, even if it's not listed in our directory.
You can also add any other [MCP Server](#mcp-servers) as a goose extension, even if it's not listed in our directory.


## Adding Extensions
Expand All @@ -113,7 +111,7 @@ If you're in a corporate or airgapped environment and extensions fail to activat

### MCP Servers

You can install any MCP server as a Goose extension.
You can install any MCP server as a goose extension.

:::tip MCP Server Directory
See available servers in the **[MCP Server Directory](https://www.pulsemcp.com/servers)**.
Expand All @@ -127,7 +125,7 @@ See available servers in the **[MCP Server Directory](https://www.pulsemcp.com/s
3. Under `Extensions`, click `Add custom extension`.
4. On the `Add custom extension` modal, enter the necessary details
- If adding an environment variable, click `Add` button to the right of the variable
- The `Timeout` field lets you set how long Goose should wait for a tool call from this extension to complete
- The `Timeout` field lets you set how long goose should wait for a tool call from this extension to complete
5. Click `Add` button

#### Example of adding the [Knowledge Graph Memory MCP Server](https://github.com/modelcontextprotocol/servers/tree/main/src/memory):
Expand All @@ -149,7 +147,7 @@ See available servers in the **[MCP Server Directory](https://www.pulsemcp.com/s
2. Select `Add Extension` from the menu.

3. Choose the type of extension you'd like to add:
- `Built-In Extension`: Use an extension that comes pre-installed with Goose.
- `Built-In Extension`: Use an extension that comes pre-installed with goose.
- `Command-Line Extension`: Add a local command or script to run as an extension.
- `Remote Extension (SSE)`: Connect to a remote system via SSE (Server-Sent Events).
- `Remote Extension (Streaming HTTP)`: Connect to a remote system via Streaming HTTP
Expand Down Expand Up @@ -258,7 +256,7 @@ Note: Java and Kotlin extensions are only support on Linux and macOS

### Deeplinks

Extensions can be installed using Goose's deep link protocol. The URL format varies based on the extension type:
Extensions can be installed using goose's deep link protocol. The URL format varies based on the extension type:

<Tabs groupId="interface">
<TabItem value="stdio" label="StandardIO" default>
Expand Down Expand Up @@ -357,7 +355,7 @@ You can enable or disable installed extensions based on your workflow needs.
</TabItem>

<TabItem value="cli" label="goose CLI">
1. Run the following command to open up Goose's configurations:
1. Run the following command to open up goose's configurations:
```sh
goose configure
```
Expand All @@ -383,9 +381,9 @@ You can enable or disable installed extensions based on your workflow needs.

## Automatically Enabled Extensions

The Smart Extension Recommendation system in Goose automatically identifies and suggests relevant extensions based on your tasks and needs. This section explains how to use this feature effectively and understand its capabilities and limitations.
The Smart Extension Recommendation system in goose automatically identifies and suggests relevant extensions based on your tasks and needs. This section explains how to use this feature effectively and understand its capabilities and limitations.

When you request a task, Goose checks its enabled extensions and their tools to determine if it can fulfill the request. If not, it suggests or enables additional extensions as needed. You can also request specific extensions by name.
When you request a task, goose checks its enabled extensions and their tools to determine if it can fulfill the request. If not, it suggests or enables additional extensions as needed. You can also request specific extensions by name.


:::warning
Expand All @@ -394,17 +392,17 @@ Any extensions enabled dynamically are only enabled for the current session. To

### Automatic Detection

Goose automatically detects when an extension is needed based on your task requirements. Here's an example of how Goose identifies and enables a needed extension during a conversation:
goose automatically detects when an extension is needed based on your task requirements. Here's an example of how goose identifies and enables a needed extension during a conversation:

<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>

#### Goose Prompt
#### goose Prompt
```plaintext
Find all orders with pending status from our production database
```

#### Goose Output
#### goose Output

```plaintext
I'll help you search for available extensions that might help us interact with PostgreSQL databases.
Expand All @@ -426,12 +424,12 @@ Great! Now I can help you query the database...
</TabItem>
<TabItem value="cli" label="goose CLI">

#### Goose Prompt
#### goose Prompt
```plaintext
Find all orders with pending status from our production database
```

#### Goose Output
#### goose Output

```sh
I apologize, but I notice that I don't currently have access to your database. Let me search if there are any database-related extensions available.
Expand All @@ -442,7 +440,7 @@ I see that there is a "postgresql" extension available. Let me enable it so I ca
extension_name: postgresql


Goose would like to enable the following extension, do you approve?
goose would like to enable the following extension, do you approve?
// highlight-start
| ● Yes, for this session
// highlight-end
Expand All @@ -454,18 +452,18 @@ extension_name: postgresql

### Direct Request

Goose responds to explicit requests for extensions, allowing users to manually enable specific tools they need. Here's an example of how Goose handles a direct request to enable an extension:
goose responds to explicit requests for extensions, allowing users to manually enable specific tools they need. Here's an example of how goose handles a direct request to enable an extension:

<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>

#### Goose Prompt
#### goose Prompt

```plaintext
Use PostgreSQL extension
```

#### Goose Output
#### goose Output

```plaintext
I'll help enable the PostgreSQL extension for you.
Expand All @@ -482,21 +480,21 @@ The PostgreSQL extension is now ready to use. What would you like to do with it?
</TabItem>
<TabItem value="cli" label="goose CLI">

#### Goose Prompt
#### goose Prompt

```sh
Use the PostgreSQL extension
```

#### Goose Output
#### goose Output

```sh
I'll help enable the PostgreSQL extension for you.
─── enable_extension | platform ──────────────────────────
extension_name: postgresql


Goose would like to enable the following extension, do you approve?
goose would like to enable the following extension, do you approve?
// highlight-start
| ● Yes, for this session
// highlight-end
Expand All @@ -508,7 +506,7 @@ extension_name: postgresql

## Updating Extension Properties

Goose relies on extension properties to determine how to handle an extension. You can edit these properties if you want to change the extension's display settings and behavior, such as the name, timeout, or environment variables.
goose relies on extension properties to determine how to handle an extension. You can edit these properties if you want to change the extension's display settings and behavior, such as the name, timeout, or environment variables.

<Tabs groupId="interface">
<TabItem value="ui" label="goose Desktop" default>
Expand All @@ -523,7 +521,7 @@ Goose relies on extension properties to determine how to handle an extension. Yo

<TabItem value="cli" label="Config file">

1. Navigate to the Goose [configuration file](/docs/guides/config-files). For example, navigate to `~/.config/goose/config.yaml` on macOS.
1. Navigate to the goose [configuration file](/docs/guides/config-files). For example, navigate to `~/.config/goose/config.yaml` on macOS.
2. Edit the extension properties as needed and save your changes.

</TabItem>
Expand All @@ -548,7 +546,7 @@ You can remove installed extensions.
To remove an extension, you must [disable](#enablingdisabling-extensions) it first.
:::

1. Run the following command to open up Goose's configurations:
1. Run the following command to open up goose's configurations:
```sh
goose configure
```
Expand All @@ -572,7 +570,7 @@ You can remove installed extensions.

## Starting Session with Extensions

You can start a tailored Goose session with specific extensions directly from the CLI.
You can start a tailored goose session with specific extensions directly from the CLI.

:::info Notes
* The extension will not be installed. It will only be enabled for the current session.
Expand Down Expand Up @@ -664,6 +662,6 @@ goose session --with-streamable-http-extension "https://example.com/streamable"

## Developing Extensions

Goose extensions are implemented with MCP, a standard protocol that allows AI models and agents to securely connect with local or remote resources. Learn how to build your own [extension as an MCP server](https://modelcontextprotocol.io/quickstart/server).
goose extensions are implemented with MCP, a standard protocol that allows AI models and agents to securely connect with local or remote resources. Learn how to build your own [extension as an MCP server](https://modelcontextprotocol.io/quickstart/server).

[extensions-directory]: /extensions
2 changes: 1 addition & 1 deletion documentation/docs/guides/config-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ The following settings can be configured at the root level of your config.yaml f
| `GOOSE_PROVIDER` | Primary [LLM provider](/docs/getting-started/providers) | "anthropic", "openai", etc. | None | Yes |
| `GOOSE_MODEL` | Default model to use | Model name (e.g., "claude-3.5-sonnet", "gpt-4") | None | Yes |
| `GOOSE_TEMPERATURE` | Model response randomness | Float between 0.0 and 1.0 | Model-specific | No |
| `GOOSE_MODE` | [Tool execution behavior](/docs/guides/goose-permissions) | "auto", "approve", "chat", "smart_approve" | "smart_approve" | No |
| `GOOSE_MODE` | [Tool execution behavior](/docs/guides/goose-permissions) | "auto", "approve", "chat", "smart_approve" | "auto" | No |
| `GOOSE_MAX_TURNS` | [Maximum number of turns](/docs/guides/sessions/smart-context-management#maximum-turns) allowed without user input | Integer (e.g., 10, 50, 100) | 1000 | No |
| `GOOSE_LEAD_PROVIDER` | Provider for lead model in [lead/worker mode](/docs/guides/environment-variables#leadworker-model-configuration) | Same as `GOOSE_PROVIDER` options | Falls back to `GOOSE_PROVIDER` | No |
| `GOOSE_LEAD_MODEL` | Lead model for lead/worker mode | Model name | None | No |
Expand Down
Loading