# Goose chạy bằng extension. Hãy thêm một extension hiểu repo của bạn.

Canonical source: https://maguyva.ai/vi/for-goose

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Goose làm việc thông qua extension, và mỗi extension là một MCP server. Maguyva là extension lập chỉ mục codebase của bạn, nên Goose hỏi mọi thứ nằm ở đâu thay vì liệt kê thư mục.

> Dùng .goosehints cho cách làm việc. Dùng Maguyva cho những gì mã đang nói lúc này.

## Những điều cần biết về Goose

Bốn điều riêng của Goose.

### config.yaml

Extension nằm dưới `extensions` trong `~/.config/goose/config.yaml`. `goose configure` → Add Extension sẽ viết một mục cùng loại cho bạn.

### Một extension từ xa

Maguyva là một extension `streamable_http`, nên Goose tự kết nối tới endpoint: không có tiến trình cục bộ, không cần Node.js. URL đặt trong `uri`, không phải `url`.

### headers

Goose gửi map `headers` kèm mỗi yêu cầu, nên khóa đặt trong header `Authorization`. Goose cũng có thể điền khóa từ một biến môi trường được liệt kê trong `env_keys`.

### available_tools

Một extension có thể chỉ cung cấp một phần công cụ: liệt kê những công cụ bạn muốn dưới `available_tools`, hoặc để trống để dùng tất cả.

## Goose hints là một thỏa thuận làm việc. Cứ dùng nó.

```text
# .goosehints
- Dùng pnpm, không dùng npm.
- Chạy integration test trước khi coi một thay đổi là xong.
```

Mặc định Goose nạp `AGENTS.md` và `.goosehints`: hint toàn cục từ `~/.config/goose/.goosehints`, hint dự án từ repo, và các tệp lồng nhau khi làm việc trong thư mục con. Hint cần extension Developer. Đây là nơi phù hợp cho:

- Lựa chọn công cụ và lệnh.
- Quy ước Goose cần tuân theo.
- Vị trí của tài liệu.

Hint mô tả dự án. Chúng không trả lời được “cái gì phụ thuộc vào thứ này?”

## Khi hint và shell không còn đủ

Ba khoảng trống Goose lấp bằng lệnh shell, mỗi lần một tệp.

### // danh sách không phải bản đồ

Trên một repo xa lạ, Goose định hướng bằng danh sách thư mục và đọc tệp. Mỗi lần như vậy tốn ngữ cảnh trước khi tác vụ bắt đầu.

### // grep tìm chuỗi, không tìm nơi gọi

Tìm kiếm văn bản không phân biệt được lời gọi thật với comment, mock hay method trùng tên.

### // hint bị lệch dần

Tệp hint viết từ quý trước mô tả cấu trúc của quý trước. Goose vẫn làm theo.

## Maguyva làm extension của Goose

Một mục extensions mang lại cho Goose:

- **11 công cụ trên repo đã lập chỉ mục của bạn**: tìm kiếm ngữ nghĩa, cấu trúc (AST), đồ thị và văn bản, cùng tra cứu ký hiệu, thành phần phụ thuộc và truy xuất tệp.
- **Câu trả lời kèm đường dẫn tệp và số dòng**: trên 285+ ngôn ngữ.
- **Công cụ chỉ đọc**: Công cụ của Maguyva truy vấn chỉ mục. Không công cụ nào sửa tệp của bạn.

> Hint cho Goose biết *cách làm việc*.
> Maguyva cho Goose *bản đồ của mã*.

## Hai quy trình làm việc

Bản đồ trước, rồi để Goose chạy.

### 01. Lần theo một lỗi tới tận gốc

```text
goose> vì sao một số lần export kết thúc với không dòng nào?

semantic_search("export job empty result")
  src/export/runner.ts:118   flushBatch()
  src/export/filters.ts:40   applyTenantFilter()

→ Goose đọc hai tệp, không phải cả package export.
[exit 0]
```

Kết quả xếp hạng thu hẹp phạm vi tìm kiếm trước khi Goose mở shell.

### 02. Kiểm tra thành phần phụ thuộc trước khi refactor

```text
goose> tách class Notifier thành email và SMS

dependency_search("Notifier", dependents)
  11 tham chiếu trên 5 package

→ Kế hoạch bao quát cả mười một chỗ trước lần sửa đầu tiên.
[exit 0]
```

Goose nhận đầy đủ danh sách thành phần phụ thuộc trong một lần gọi thay vì một chuỗi grep.

## Cài đặt trong Goose

Ba bước. Gói Free: 3 repository, Tối đa 50K dòng repo đã index, không cần thẻ tín dụng.

### 01. Lập chỉ mục một repo tại maguyva.ai

Chọn một repo bạn đã biết, để bạn có thể đánh giá các câu trả lời.

### 02. Thêm Maguyva vào extensions trong config.yaml

`~/.config/goose/config.yaml`

```yaml
extensions:
  maguyva:
    name: maguyva
    type: streamable_http
    uri: https://maguyva.tools/mcp
    enabled: true
    headers:
      Authorization: Bearer mgv_xxxx
    timeout: 300

```

### 03. Thay placeholder và bắt đầu một phiên

Thay `mgv_xxxx` bằng khóa API của bạn, chạy `goose session`, và đặt một câu hỏi mà bạn đã biết câu trả lời. YAML nhạy với thụt lề: dùng dấu cách, không dùng tab.

[Tài liệu extension](https://goose-docs.ai/docs/getting-started/using-extensions/) của Goose nói về extension từ xa, timeout và bộ lọc công cụ.

## Lập chỉ mục một repo mà bạn đã biết rõ.

Kết nối Goose qua MCP, rồi đặt một câu hỏi bạn có thể kiểm tra.
