✨ NO KEYBOARDS ALLOWED HACKATHON✨ : build next-gen interfaces with goose and win prizes. Deadline Nov 14.
Skip to main content

Developer Extension

πŸŽ₯Plug & Play
Watch the demo

The Developer extension allows goose to automate developer-centric tasks such as file editing, shell command execution, and project setup. It also provides tools for enhanced code editing and codebase analysis.

This tutorial will cover enabling and using the Developer MCP Server, which is a built-in goose extension.

Configuration​

info

The Developer extension is already enabled by default when goose is installed.

  1. Click the button in the top-left to open the sidebar
  2. Click Extensions in the sidebar
  3. Toggle Developer on

Example Usage​

In this example, I'm going to have goose automate setting up my JavaScript developer environment with Express, Mongoose, Nodemon, Dotenv and initialize Git.

LLM

Anthropic's Claude 4 Sonnet was used for this task.

  1. Open a new session in goose Desktop

goose Prompt​

set up a new JavaScript project with Express, Mongoose, Nodemon, and Dotenv? Fetch the latest package versions, generate a README with those versions, and initialize Git

After 1 minute, goose was done setting up my entire dev environment! πŸŽ‰

goose Output​

I'll help you set up a new JavaScript project with those dependencies. I'll break this down into steps:

1. First, let's create a new directory and initialize the project
2. Then install the dependencies
3. Create a detailed README
4. Initialize git
5. Create some starter files
6. Let's begin:

[... shell commands, files created ...]

Great! I've set up a complete Express project with MongoDB and Dotenv integrations:

1. Created a new project directory and initialized npm
2. Installed Express, Mongoose, and dotenv dependencies
3. set up the basic project structure with directories for:
- config/
- models/
- routes/
- controllers/
4. Created essential files:
- index.js (main server file)
- .env (environment variables)
- .ignore (with common node.js ignores)
5. Added a basic user model with basic name and email fields
6. Created a user controller with two methods:
- getUsers (GET all users)
- createUser (POST new user)
7. Added user routes under `/api/routes`
8. Updated package.json with start scripts
9. Created a comprehensive README.md with:
- Installation scripts
- Project structure
- Available scripts
- Environment variables
- Latest package versions

The project structure is:

my-express-app/
β”œβ”€β”€ config/ # Configuration files
β”œβ”€β”€ models/ # MongoDB models
β”‚ └── User.js # User model
β”œβ”€β”€ routes/ # API routes
β”‚ └── userRoutes.js
β”œβ”€β”€ controllers/ # Route controllers
β”‚ └── userController.js
β”œβ”€β”€ .env # Environment variables
β”œβ”€β”€ .gitignore # Git ignore file
β”œβ”€β”€ index.js # Entry point
└── package.json # Project dependencies and scripts

To start developing you can:

1. Run `npm install` to install dependencies
2. start the server with `npm run dev`

The API will be available at:
- `http://localhost:3000/api/users` (GET to get all users)
- `http://localhost:3000/api/users` (POST to create a new user)

To test out the API you can use tools like postman or curl, for example, to create a new user:

curl x POST http://localhost:3000/api/users \
-H "Content-Type: application/json" \
-d '{"name": "Ebony Louis" , "email": "ebony@example.com"}'

Would you like me to add any additional features or make other improvements to the setup?

Configuring Access Controls​

By default, goose can run system commands with your user privileges and edit any accessible file without your approval. This is because goose runs in Autonomous permission mode by default and has access to the Developer extension's shell and file editing tools. While this configuration allows goose to work quickly and independently, there's potential for unexpected outcomes. Understanding the available access control features can help you configure goose to match your comfort level and specific needs.

tip

See the Quick Setup Example below for some ways to configure more control over goose's behavior.

Developer Extension Tools​

The Developer extension provides these tools:

ToolDescriptionUse CasesRisk Level
shellExecute shell commandsRunning tests, installing packages, git operations⚠️ High
Can run any system command with your user privileges
text_editorRead, write, and edit filesCode refactoring, creating files, updating configs⚠️ High
Can modify any accessible file
analyzeAnalyze code structureUnderstanding codebase, finding dependenciesβœ… Low
Read-only code analysis
screen_captureTake screenshotsDebugging UI issues, documenting stateβœ… Low
Visual information only
image_processorProcess and resize imagesOptimizing assets, format conversionβœ… Low
Image manipulation only

Access Control Features​

You can layer multiple controls to match your risk tolerance and workflow:

  • goose Permission Modes control when goose asks for approval:

    ModeDescriptionUse Cases
    Autonomous
    CLI: auto
    No approval requiredBest for experienced users in safe environments
    Manual Approval
    CLI: approve
    Review every actionRecommended for sensitive work or when you want maximum control
    Smart Approval
    CLI: smart_approve
    AI decides what needs reviewBalanced approach
    Chat Only
    CLI: chat
    Disable all toolsFor maximum security and models that don't support tool-calling
  • Tool Permissions let you set Always allow, Ask before, and Never allow permissions for individual extension tools when in Manual Approval or Smart Approval modes

  • .gooseignore files restrict which files and directories goose can access (.gitignore files are fallback)

Changing Modes In-Session

You can change goose permission modes during a session without restarting:

  • CLI: Use the /mode command (e.g. /mode approve)
  • Desktop: Use the mode selector button in the bottom menu

Quick Setup Example​

You might want more control over goose's operations when working with sensitive systems, exploring unfamiliar codebases, using untrusted models, or simply preferring to review actions before execution.

Here's an example configuration that enables oversight:

  1. Set the permission mode to Smart Approval or Manual Approval:

    # ~/.config/goose/config.yaml
    GOOSE_MODE: smart_approve # or approve
  2. Create a .gooseignore file in your project to protect sensitive files:

    .env*
    secrets.*
    *.key
    *.pem
    .git/
  3. Configure tool permissions based on your needs

As you become more comfortable with goose's behavior, you can adjust these settings to reduce friction while maintaining appropriate safeguards for your environment.

info

Also see the Security Guide for information about using goose safely.