goose
$
npx mdskill add TerminalSkills/skills/gooseExecute complex tasks by installing software and managing infrastructure.
- Installs packages, runs tests, and edits files across systems.
- Integrates with MCP tools and custom extensions for broader reach.
- Decides actions through its extensible architecture and multi-LLM backends.
- Delivers results via direct command execution and system interaction.
SKILL.md
.github/skills/gooseView on GitHub ↗
---
name: goose
description: >-
Use Block's Goose — an open-source, extensible AI agent that goes beyond code
suggestions to install software, execute commands, edit files, run tests, and
manage infrastructure. Use when: setting up Goose, building custom extensions,
adding MCP tool support, configuring multi-LLM backends, creating task-specific
agents (DevOps, data pipelines, incident response), or comparing Goose to other
AI coding agents.
license: Apache-2.0
compatibility: "macOS, Linux, Python 3.10+"
metadata:
author: terminal-skills
version: "1.0.0"
category: development
tags: ["ai-agent", "extensible", "coding-agent"]
---
# Goose — Extensible AI Agent by Block
## Overview
Goose is an open-source AI agent from Block (formerly Square) that operates as a full system agent — not just a code assistant. It can install packages, execute shell commands, edit files, run tests, browse the web, and interact with external services through extensions.
**Repo:** `block/goose`
**Key differentiator:** Extension system + MCP tool support = unlimited capabilities
## Installation
```bash
# macOS (Homebrew)
brew install block/tap/goose
# Cross-platform (pipx)
pipx install goose-ai
# From source
git clone https://github.com/block/goose.git
cd goose && cargo build --release
```
Verify installation:
```bash
goose --version
```
## Core Concepts
### What Makes Goose Different
Unlike code-only AI tools, Goose has full system agency:
| Capability | Code Assistants | Goose |
|-----------|----------------|-------|
| Code suggestions | ✅ | ✅ |
| File editing | Limited | ✅ Full filesystem |
| Command execution | ❌ | ✅ Shell access |
| Package installation | ❌ | ✅ |
| Web browsing | ❌ | ✅ Via extensions |
| External APIs | ❌ | ✅ MCP tools |
| Custom workflows | ❌ | ✅ Extensions |
### Sessions
Goose maintains session context across interactions:
```bash
# Start new session
goose session
# Resume last session
goose session --resume
# Named session
goose session --name "deploy-v2"
```
## CLI Usage
```bash
# Interactive session
goose session
# One-shot task
goose run "Write unit tests for src/auth.py and run them"
# With specific profile
goose session --profile devops
# Pipe input
echo "Explain this error log" | goose run --stdin
```
### Profiles
Create `~/.config/goose/profiles.yaml`:
```yaml
devops:
provider: anthropic
model: claude-sonnet-4-20250514
extensions:
- name: ssh-tools
- name: developer
- name: jira-mcp
coding:
provider: openai
model: gpt-4o
extensions:
- name: developer
```
## Multi-LLM Support
Goose supports multiple LLM providers:
```bash
# Configure provider
goose configure
# Supported providers
# - Anthropic (Claude)
# - OpenAI (GPT-4o, o1)
# - Google (Gemini)
# - Ollama (local models)
# - Azure OpenAI
# - AWS Bedrock
```
Set via environment:
```bash
export GOOSE_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-...
```
## Extension System
Extensions give Goose new capabilities. They run as separate processes communicating via the Model Context Protocol (MCP).
### Built-in Extensions
| Extension | Capabilities |
|-----------|-------------|
| `developer` | Shell, file editing, code analysis |
| `web` | Browse pages, extract content |
| `computeruse` | GUI interaction, screenshots |
| `memory` | Persistent memory across sessions |
Enable extensions:
```bash
goose configure extensions
# Interactive selection of extensions
```
### MCP Tool Integration
Goose natively supports MCP (Model Context Protocol) servers as extensions, connecting it to databases, APIs, and services:
```yaml
# ~/.config/goose/profiles.yaml
default:
provider: anthropic
model: claude-sonnet-4-20250514
extensions:
- name: developer
- name: jira-mcp
type: mcp
command: npx
args: ["-y", "@modelcontextprotocol/server-jira"]
env:
JIRA_URL: "https://myteam.atlassian.net"
JIRA_TOKEN: "${JIRA_TOKEN}"
- name: postgres-mcp
type: mcp
command: npx
args: ["-y", "@modelcontextprotocol/server-postgres"]
env:
DATABASE_URL: "${DATABASE_URL}"
```
### Building Custom Extensions
Create an extension in Python:
```python
# my_extension.py
from goose.extension import Extension, tool
class HealthChecker(Extension):
"""Check service health endpoints."""
@tool
def check_health(self, url: str) -> str:
"""Check if a service is healthy by hitting its /health endpoint."""
import requests
try:
r = requests.get(f"{url}/health", timeout=5)
return f"Status: {r.status_code}, Response: {r.json()}"
except Exception as e:
return f"Health check failed: {e}"
@tool
def check_multiple(self, urls: list[str]) -> str:
"""Check health of multiple services."""
results = []
for url in urls:
status = self.check_health(url)
results.append(f"{url}: {status}")
return "\n".join(results)
```
Register in profile:
```yaml
default:
extensions:
- name: health-checker
type: mcp
command: python
args: ["my_extension.py"]
```
## Common Workflows
### DevOps Incident Response
```
> goose session --profile devops
You: SSH into prod-web-01, check the nginx logs for 5xx errors
in the last hour, and create a Jira ticket if there are more than 10
Goose: [uses ssh-tools to connect]
[runs: grep "HTTP/1.1\" 5" /var/log/nginx/access.log | tail -60]
[finds 47 5xx errors]
[creates JIRA ticket OPS-1234 with error summary]
Found 47 5xx errors in the last hour. Created OPS-1234.
```
## Tips
- Use `--verbose` flag to see what tools Goose is calling
- Set `GOOSE_LOG=debug` for detailed extension communication logs
- Extensions run in sandboxed processes — a crash won't kill Goose
- Use profiles to switch between provider/extension combos quickly
- Goose respects `.gooseignore` files (like `.gitignore`) to exclude files from context