Memory Extension
Watch the demo
The Memory extension turns Goose into a knowledgeable assistant by allowing you to teach it personalized key information (e.g. commands, code snippets, preferences and configurations) that it can recall and apply later. Whether itβs project-specific (local) or universal (global) knowledge, Goose learns and remembers what matters most to you.
This tutorial covers enabling and using the Memory MCP Server, which is a built-in Goose extension.
Configurationβ
- Ensure extension is enabled:
- Goose CLI
- Goose Desktop
- Run the
configure
command:
goose configure
- Choose to add a
Built-in Extension
β goose-configure
β
β What would you like to configure?
β Add Extension
β
β What type of extension would you like to add?
β β Built-in Extension (Use an extension that comes with Goose)
β β Command-line Extension
β β Remote Extension
β
- Arrow down to the
Memory
extension and press Enter
β goose-configure
β
β What would you like to configure?
β Add Extension
β
β 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
β β Memory
| β JetBrains
β Enabled Memory extension
- Click
...
in the upper right corner - Click
Settings
- Under
Extensions
, toggleMemory
to on.
Why Use Memory?β
With the Memory extension, youβre not just storing static notes, youβre teaching Goose how to assist you better. Imagine telling Goose:
learn everything about MCP servers and save it to memory.
Later, you can ask:
utilizing our MCP server knowledge help me build an MCP server.
Goose will recall everything youβve saved as long as you instruct it to remember. This makes it easier to have consistent results when working with Goose.
Example Usageβ
In this example, Iβll show you how to make Goose a knowledgeable development assistant by teaching it about your projectβs API standards. With the Memory extension, Goose can store structured information and retrieve it later to help with your tasks.
This means you no longer have to repeat yourself. Goose will remember your projectβs requirements and automatically apply them to new tasks.
- Goose CLI
- Goose Desktop
- Open a terminal and start a new Goose session:
goose session
- Open a new session in Goose Desktop
Step 1: Teach Goose Your API Standardsβ
Goose Prompt #1β
Goose, learn our API development standards:
- All endpoints must use TypeScript interfaces
- Error responses follow RFC 7807 Problem Details spec
- Rate limiting headers are required
- Authentication uses JWT in Authorization header
- All endpoints need OpenAPI documentation
Remember this so you can help me follow these practices.
Goose Outputβ
I've learned your API standards. I'll help enforce these requirements when working on API endpoints.
Storing in:
- Category: development_standards
- Tags: #api #typescript #security #documentation
- Scope: global (these are general standards)
I can now help with:
- API endpoint implementation
- Error handling patterns
- Authentication flows
- Documentation requirements
Step 2: Use Stored Knowledge to Create a New API Endpointβ
Goose Prompt # 2β
Help me create a new endpoint for user preferences
Goose Outputβ
I see you need a new endpoint. Based on our API development standards that I have stored in memory, I'll ensure it meets all our requirements.
[.. Checking stored API standards ...]
I've included all our required elements:
β
TypeScript interfaces
β
RFC 7807 error response format
β
Rate limiting
β
JWT auth header
β
OpenAPI documentation
Here's your compliant endpoint:
interface UserPreferences {
userId: string;
theme: 'light' | 'dark';
notifications: boolean;
timezone: string;
}
interface ErrorResponse {
type: string;
title: string;
status: number;
detail: string;
instance: string;
}
@Route('/api/users/:userId/preferences')
class UserPreferencesController {
@Get()
@RateLimit(100) // Adding required rate limiting
@OpenAPI({ ... }) // Including mandatory OpenAPI docs
async getUserPreferences(
@Header('Authorization') token: string, // JWT auth as per our standard
@Param('userId') userId: string
): Promise<UserPreferences | ErrorResponse> {
// Implementation following our error handling pattern
}
}
Would you like me to implement the full endpoint logic?