# GEMINI.md บอกกฎของคุณให้ Gemini รู้แต่ไม่ได้บอกโค้ดของคุณ

Canonical source: https://maguyva.ai/th/for-gemini

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).

GEMINI.md กำหนดบริบทในการทำงาน MCP ให้ Gemini เอื้อมไปหยิบเครื่องมือได้ Maguyva คือเซิร์ฟเวอร์ MCP ที่มอบแผนที่ของรีโพที่สอบถามได้ให้ Gemini ทำให้การแก้ไขครั้งแรกไม่ใช่การเดาโครงสร้างไฟล์

> GEMINI.md คือบริบท MCP คือช่องทางสื่อสาร Maguyva คือแผนที่

## สแต็กที่แบ่งเป็นชั้น

สี่แนวคิด แต่ละอย่างทำหน้าที่ของตัวเอง

### GEMINI.md

Gemini ควรทำตัวยังไงในรีโพนี้

### MCP

วิธีที่ Gemini เอื้อมไปหยิบเครื่องมือและบริบทจากภายนอก

### Maguyva

เซิร์ฟเวอร์ MCP ที่คืนข้อเท็จจริงของรีโพที่มีหลักฐานอ้างอิง

### เวิร์กสเปซ ไม่ใช่ที่นั่ง

ไม่คิดค่าบริการต่อที่นั่งสำหรับเอเจนต์ [ดูราคา](https://maguyva.ai/th/pricing)

## GEMINI.md คือบริบทในการทำงาน ใช้มันให้เต็มที่

คำสั่งที่ต้องคงอยู่ถาวรควรอยู่ใน `GEMINI.md` มันคือที่ที่เหมาะสำหรับ:

- คำสั่งบิลด์ เทสต์ และ lint ที่ Gemini ควรรัน
- กฎแบบ “ต้องทำ X เสมอ / ห้ามทำ Y” ที่จำกัดขอบเขตไว้ในไดเรกทอรีหนึ่งๆ
- ข้อตกลงการตั้งชื่อและแนวทางการรีแฟกเตอร์
- ลิงก์ไปยังบันทึกการตัดสินใจและบันทึกสถาปัตยกรรมที่เป็นมาตรฐาน

เขียนให้กระชับ จำกัดขอบเขตไว้ แล้ว commit มันเก็บไว้

แต่ `GEMINI.md` ไม่เคยถูกออกแบบมาให้เป็นดัชนีที่สอบถามได้ของทุกสัญลักษณ์ ไฟล์ และจุดเรียกใช้ในรีโพของคุณ

## จุดที่ GEMINI.md เพียงลำพังไปต่อไม่ไหว

สี่รูปแบบความล้มเหลว การ์ดละหนึ่งแบบ

### // บริบทไม่ใช่ดัชนี

การบอก Gemini ว่า*ต้องทำงานยังไง* ไม่ได้บอกว่า*มีอะไรอยู่จริง* การแก้ไขครั้งแรกในแพ็กเกจที่ไม่คุ้นเคยคือการเดาพาธไฟล์และชื่อฟังก์ชัน GEMINI.md ไม่สามารถลิสต์ทุกสัญลักษณ์ได้ และคุณก็ไม่อยากให้มันเป็นแบบนั้นด้วย

### // เอกสารคลาดเคลื่อนจากโค้ด

บล็อกใน GEMINI.md ที่อธิบายโครงสร้างคิวของคุณถูกต้องอยู่จนกว่าจะมีใครเพิ่มคอนซูมเมอร์ใหม่เข้ามา ตอนนี้โค้ดคือแหล่งความจริง ส่วนเอกสารล้าสมัยไปแล้วอย่างมั่นใจ Gemini กลับอ่านอันที่ผิดอยู่

### // การเปลี่ยนชื่อคือปัญหาของกราฟ

“มีอะไรอ้างอิงคลาสนี้บ้าง?” ตอบไม่ได้จากไฟล์ markdown Gemini ก็ต้อง grep แล้วภาวนาไปทั่วโมโนรีโพ หรือไม่ก็ขอให้คุณวางจุดเรียกใช้ลงในแชท

### // คอนเท็กซ์วินโดว์ไม่ได้มาฟรีๆ

หน้าต่างบริบทที่ใหญ่ ไม่เหมือนกับดัชนีที่สอบถามได้ การโหลด GEMINI.md จน Gemini “รู้พอ” ก็ยังแลกงบประมาณการคิดวิเคราะห์กับปริมาณบริบทนิ่งๆ อยู่ดี

## สามชั้นนี้ประกอบกันยังไง

ผู้ใช้ Gemini คิดในรูปแบบนี้อยู่แล้ว หน้านี้แค่ทำให้มันชัดเจนขึ้น

- **GEMINI.md**: บริบท (Gemini ทำตัวยังไง)
- **MCP**: ช่องทางสื่อสาร (วิธีที่มันเอื้อมไปหยิบ)
- **Maguyva**: ข้อเท็จจริงของโค้ดเบส (สิ่งที่มันมองเห็น)

- **GEMINI.md**: Gemini ทำตัวยังไงในรีโพนี้
- **MCP**: วิธีที่ Gemini เอื้อมไปหยิบเครื่องมือและบริบท [(สเปก)](https://modelcontextprotocol.io/docs/getting-started/intro)
- **Maguyva**: สิ่งที่ Gemini มองเห็นเมื่อถามคำถามกับโค้ดเบส ผลการค้นหาเชิงความหมาย เชิง AST เชิงกราฟ และเชิงข้อความ พร้อมพาธไฟล์และเลขบรรทัด

> GEMINI.md บอก Gemini ว่า*ต้องทำงานยังไง*
> Maguyva มอบ*สิ่งที่ใช้เริ่มทำงานได้*ให้ Gemini

## สามเวิร์กโฟลว์

เฉพาะสำหรับ Gemini อ้างอิงจากกราฟการเรียกใช้จริง ไม่ใช่การ grep ของ Gemini

### 01. เปลี่ยนชื่อคลาสที่ใช้ร่วมกัน โดยหาทุกสิ่งที่พึ่งพามันก่อน

```text
gemini> PaymentClient → BillingClient เปลี่ยนชื่อ

graph::callers(PaymentClient)            12 การอ้างอิง ครอบคลุม 7 แพ็กเกจ
graph::importers(src/payments/client.ts)  9 จุดอิมพอร์ต
graph::extends(PaymentClient)             2 คลาสลูก (RetryClient, MockClient)

→ Gemini เสนอแผนย้าย 21 จุดแก้ไข พร้อมรายการไฟล์แบบอินไลน์
[exit 0]
```

Gemini ถาม Maguyva หาส่วนประกอบที่พึ่งพา*ก่อน*ที่จะเริ่มแก้ไข รายการย้ายที่ได้กลับมาอ้างอิงจากกราฟจริง ไม่ใช่จากความจำของ Gemini

### 02. หาการอิมพลีเมนต์จริง ไม่ใช่ test stub

```text
gemini> normalizePhoneNumber จัดการ E.164 ยังไง?

semantic::query("normalize phone E.164")
  src/util/phone.ts:88   normalizePhoneNumber()   ← ของจริง
  test/util/phone.spec.ts:14  jest.mock(...)      ← stub
[exit 0]
```

ชื่อบอกอะไรไม่ได้เสมอไป mock บดบังโค้ดจริงได้ Maguyva จัดอันดับการอิมพลีเมนต์จริงให้อยู่เหนือ test mock

### 03. เช็ครัศมีผลกระทบก่อนรีแฟกเตอร์

```text
gemini> อะไรเรียก QueueDispatcher.publish บ้าง?

graph::callers(QueueDispatcher.publish)
  3 ครั้งใน src/billing/*    1 ครั้งใน src/audit/*    1 ครั้งใน src/notifications/*
[exit 0]
```

จุดเรียกใช้ข้ามแพ็กเกจโผล่ขึ้นมาให้เห็นทันที การเปลี่ยนแปลงอ้างอิงจากโค้ดที่อิมพอร์ตจริง ไม่ใช่การ grep ของ Gemini

## ตั้งค่าใน Gemini CLI

สามขั้นตอน แผน Free: รีโพซิทอรี 3 แห่ง, บรรทัดที่ทำดัชนีสูงสุด 50,000 บรรทัด ไม่ต้องใช้บัตรเครดิต

### 01. ทำดัชนีรีโพที่ maguyva.ai

เลือกรีโพที่คุณรู้จักดี เพื่อให้ตรวจสอบคำตอบได้

### 02. เพิ่ม Maguyva เป็นเซิร์ฟเวอร์ MCP ในการตั้งค่า Gemini CLI ของคุณ

`~/.gemini/settings.json`

```json
{
  "mcpServers": {
    "maguyva": {
      "httpUrl": "https://maguyva.tools/mcp",
      "headers": {
        "Authorization": "Bearer ${MAGUYVA_API_KEY}"
      }
    }
  }
}
```

### 03. ถามคำถามเดียวที่คุณรู้คำตอบอยู่แล้ว

อย่าเริ่มจากทั้งบริษัทของคุณ เริ่มจากรีโพเดียวและคำถามเดียวที่ตรวจสอบได้

## ทำดัชนีรีโพเดียวที่คุณรู้จักดีอยู่แล้ว

เชื่อมต่อ Gemini ผ่าน MCP ลองถามคำถามเดียวที่คุณตรวจสอบคำตอบได้
