# ไฟล์คำสั่งเดียวสำหรับ Claude Code, Codex และ Cursor ในปี 2026

> แหล่งข้อมูลอ้างอิงเดียวสำหรับ Claude Code, Codex และ Cursor ในปี 2026: เมื่อ Claude Code อ่าน AGENTS.md เอง การนำเข้า @AGENTS.md ใน CLAUDE.md ลิงก์สัญลักษณ์ และ /init

Source: https://ailoot.ai/blog/th/agents-md-claude-md-one-instruction-file/
Canonical: https://ailoot.ai/blog/th/agents-md-claude-md-one-instruction-file/
Language: th
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-004
Revision: sha256-fe1969aa6cb57b4d940e8dab486b6e3e2a131ea23623c661dd95256927680071


ดูข้อมูลเกี่ยวกับบริการได้ที่[เอกสารประกอบของ Ailoot](https://ailoot.ai/docs/)

## เมื่อใช้ Claude Code, Codex และ Cursor ร่วมกัน มีอะไรเปลี่ยนไปบ้าง?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

ในปี 2026 การตั้งค่าทั่วไปของนักเขียนโค้ดแบบ vibe ไม่ได้มีเครื่องมือเดียว แต่มี 3–5 เครื่องมือ ใช้ Claude Code เป็นเครื่องมือหลัก ใช้ Codex ทำงานอัตโนมัติระยะยาว และใช้ Cursor แก้ไขอย่างรวดเร็วใน IDE แต่ละเครื่องมือมีไฟล์คำสั่งของตัวเอง ได้แก่ `CLAUDE.md`, `AGENTS.md` และ `.cursorrules` หากซิงก์ไฟล์เหล่านี้ด้วยตนเอง คุณต้องแก้บรรทัดเดียวกันในห้าตำแหน่ง ลืมอัปเดต Cursor แล้วหนึ่งสัปดาห์ต่อมา Claude กับ Codex ก็ให้ผลลัพธ์ต่างกันสำหรับพรอมป์ต์เดียวกัน

</div>

ในตัวอย่างที่กล่าวถึง Claude Code เป็นเครื่องมือหลัก ส่วน Codex และ Cursor ใช้กับงานเฉพาะอย่าง `CLAUDE.md` ของฉันมีคำสั่งประมาณ 250 บรรทัด เช่น ต้องอ่านอะไรและเรียงลำดับอย่างไร ห้ามแตะอะไร ใช้คำสั่งใดสำหรับการนำขึ้นใช้งาน และกฎการจัดรูปแบบ commit ตอนที่ฉันลองใช้ Codex CLI กับโปรเจ็กต์เป็นครั้งแรก มันไม่รู้กฎเหล่านี้เลย: มันรัน `git push --force` เข้าไปดู `.env` และเปลี่ยนชื่อไฟล์อย่างไม่ระมัดระวัง

ตอนแรกฉันคัดลอก `CLAUDE.md` ไปเป็น `AGENTS.md` ด้วยมือ สองสัปดาห์ต่อมา ฉันพบว่าในโปรเจ็กต์มีคำสั่งเดียวกันถึงสี่เวอร์ชัน ได้แก่ใน `CLAUDE.md`, `AGENTS.md`, `.cursorrules` และ `.windsurf/rules/` โดยแต่ละไฟล์ต่างกันเล็กน้อย นี่ไม่ใช่ปัญหาของ Claude หรือ Cursor แต่เป็นกับดักพื้นฐานของทุกระบบที่มีแหล่งข้อมูลอ้างอิงหลายแห่ง ฉันอธิบายปัญหานี้เพิ่มเติมใน[คู่มือการทำงานแบบหลายเอเจนต์](https://ailoot.ai/blog/th/claude-code-codex-together/)

ในเดือนมิถุนายน 2026 เอกสารหน่วยความจำของ Claude Code จาก Anthropic เสนอวิธีหนึ่ง: ใช้ไฟล์ร่วมกันและนำเข้า ตั้งแต่เดือนกันยายน 2026 เป็นต้นมา Claude Code อ่าน `AGENTS.md` เองได้หากโปรเจ็กต์ไม่มี `CLAUDE.md` และต้องนำเข้าเมื่อคุณมีกฎที่ใช้กับ Claude โดยเฉพาะ ด้านล่างนี้ ฉันจะอธิบายว่าเมื่อใดใช้ `AGENTS.md` เพียงไฟล์เดียวก็พอ วิธีตั้งค่าการนำเข้า และวิธีแยกกฎที่ใช้ร่วมกันออกจากกฎเฉพาะ Claude

## Claude Code อ่าน AGENTS.md เองหรือไม่?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

อ่านได้ ตั้งแต่เวอร์ชัน 2.1.277 ซึ่งเผยแพร่เมื่อวันที่ 18 กันยายน 2026 แต่จะอ่านได้เฉพาะเมื่อไม่มี `CLAUDE.md`, `.claude/CLAUDE.md` หรือ `CLAUDE.local.md` ในไดเรกทอรีทำงานหรือไดเรกทอรีระดับบนขึ้นไป หากมี `CLAUDE.md` อยู่ Claude Code จะอ่านเฉพาะไฟล์นั้นตามค่าเริ่มต้น และจะรวม `AGENTS.md` ได้ด้วยบรรทัด `@AGENTS.md` ภายใน `CLAUDE.md` หรือด้วยลิงก์สัญลักษณ์ พฤติกรรมนี้เปลี่ยนได้ใน `/config` ภายใต้ Project instructions ก่อนเดือนกันยายน Claude Code ไม่อ่าน `AGENTS.md` เลย และการนำเข้าเป็นวิธีเดียวที่ทำได้

</div>

ก่อนเดือนกันยายน 2026 คำตอบคือ “ไม่” Issue \#6235 ซึ่งร้องขอให้รองรับ AGENTS.md เปิดค้างมาตั้งแต่เดือนสิงหาคม 2025 และปิดเมื่อวันที่ 17 สิงหาคม 2026 ตลอดช่วงนั้น เอกสารหน่วยความจำระบุวิธีแก้ไว้แบบเดียว: สร้าง CLAUDE.md แล้วนำ `AGENTS.md` เข้าไปในไฟล์นั้น ตั้งแต่เวอร์ชัน 2.1.277 เอกสารระบุไว้ต่างออกไป:

<figure>
<blockquote>
<p>Claude Code สามารถอ่าน <code>AGENTS.md</code> เป็นคำสั่งของโปรเจ็กต์ได้ ดังนั้นรีโพซิทอรีที่ตั้งค่าสำหรับเอเจนต์อื่นไว้แล้วจึงทำงานได้โดยไม่ต้องมี <code>CLAUDE.md</code> ไม่ต้องนำเข้า และไม่ต้องกำหนดค่า</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory#agents-md</figcaption>
</figure>

ไฟล์ใดมีอยู่ในโปรเจ็กต์จะเป็นตัวกำหนดว่า Claude Code อ่านอะไรบ้าง:

| ไฟล์ในโปรเจ็กต์ | สิ่งที่ Claude Code อ่าน |
|----|----|
| `AGENTS.md` โดยไม่มี `CLAUDE.md` หรือ `CLAUDE.local.md` ในไดเรกทอรีทำงานหรือไดเรกทอรีระดับบนขึ้นไป | `AGENTS.md` |
| `AGENTS.md` และ `CLAUDE.md` (หรือ `CLAUDE.local.md`) ในไดเรกทอรีทำงานหรือไดเรกทอรีระดับบนขึ้นไป | อ่านเฉพาะ `CLAUDE.md` |
| `CLAUDE.md` ที่มีบรรทัด `@AGENTS.md` | `CLAUDE.md` และเนื้อหา `AGENTS.md` ที่นำเข้ามาอยู่ภายใน |

สำหรับการตรวจสอบนี้ `CLAUDE.md`, `.claude/CLAUDE.md` และ `CLAUDE.local.md` ในไดเรกทอรีทำงานและทุกไดเรกทอรีระดับบนขึ้นไปจะนับด้วย ส่วน `~/.claude/CLAUDE.md` ส่วนตัว ไฟล์ที่องค์กรจัดการ และกฎจาก `.claude/rules/` จะไม่นับ เพราะโหลดควบคู่กับ `AGENTS.md`

เมื่อไม่มี `CLAUDE.md` Claude Code จะอ่านไฟล์ `AGENTS.md` และ `.claude/AGENTS.md` ทั้งหมดในไดเรกทอรีทำงานและระดับบนขึ้นไปเมื่อเริ่มทำงาน และจะอ่าน `AGENTS.md` ในไดเรกทอรีย่อยเมื่อเปิดไฟล์ในไดเรกทอรีนั้น การนำเข้า `@path` ภายใน `AGENTS.md` ก็ใช้ได้ Claude Code ไม่อ่าน `AGENTS.local.md`, `AGENTS.override.md` หรือเนื้อหาในไดเรกทอรี `.agents/`

ข้อควรระวังคือ `CLAUDE.local.md` ส่วนตัวก็นับด้วย หากสร้างไฟล์นี้เพื่อเก็บกฎที่ยังไม่ commit Claude Code จะหยุดอ่าน `AGENTS.md` โดยไม่แจ้งให้ทราบ การตั้งค่าด้านล่างเป็นวิธีแก้

พฤติกรรมนี้เปลี่ยนได้ใน `/config` ภายใต้ Project instructions:

| การตั้งค่า | สิ่งที่ Claude Code อ่าน |
|----|----|
| `claude-md-or-agents-md` (ค่าเริ่มต้น) | `CLAUDE.md` หรือหากไม่มีทั้ง `CLAUDE.md` และ `CLAUDE.local.md` ก็อ่าน `AGENTS.md` |
| `claude-md-and-agents-md` | อ่านทั้งสองไฟล์: ในแต่ละไดเรกทอรี อ่าน `CLAUDE.md` ก่อน แล้วจึงอ่าน `AGENTS.md` |
| `claude-md` | อ่านเฉพาะ `CLAUDE.md` |
| `managed-only` | อ่านเฉพาะ `CLAUDE.md` ที่องค์กรจัดการและหน่วยความจำอัตโนมัติ |

หากต้องการเก็บ `CLAUDE.local.md` ไว้โดยยังอ่าน `AGENTS.md` ให้ตั้งค่า `claude-md-and-agents-md` จะไม่มีการอ่านซ้ำ: หาก `AGENTS.md` รวมอยู่แล้วผ่านบรรทัด `@AGENTS.md` หรือลิงก์สัญลักษณ์ Claude Code จะไม่โหลดไฟล์นั้นอีก ไม่ว่าการตั้งค่าจะเป็นอย่างไร

ตรวจได้ว่าอ่านไฟล์แล้วหรือไม่ด้วยคำสั่ง `/memory`: ตั้งแต่เวอร์ชัน 2.1.280 เป็นต้นไป รายการจะแสดงพาธของ `AGENTS.md` ในเวอร์ชันก่อน 2.1.277 และในเซสชันที่ปิดปลั๊กอิน `agents-md` ซึ่งมีมาในตัว Claude Code จะอ่านเฉพาะ `CLAUDE.md` และไม่มีรายการ Project instructions ใน `/config` ก่อนเวอร์ชัน 2.1.281 เซสชันผ่าน Amazon Bedrock และเซสชันที่ปิด telemetry ก็ทำงานแบบเดียวกัน ในเซสชันแรกหลังอัปเดตจากเวอร์ชันเก่า อาจยังอ่าน `AGENTS.md` ไม่ได้เช่นกัน แต่จะเริ่มทำงานตั้งแต่เซสชันถัดไป

แล้วการตั้งค่าที่มีไฟล์เดียวหมายความว่าอย่างไร? หากไม่มีกฎเฉพาะสำหรับ Claude ก็ข้าม `CLAUDE.md` ได้: ใช้ `AGENTS.md` ไฟล์เดียวก็พอ และ Claude Code, Codex กับ Cursor จะอ่านไฟล์นี้ หากมีกฎเฉพาะสำหรับ Claude (เช่น plan mode สำหรับไดเรกทอรีเสี่ยง, skills หรือ hooks) ก็ต้องมี `CLAUDE.md` และ Claude Code จะหยุดอ่าน `AGENTS.md` เอง จากนั้นให้นำ `AGENTS.md` เข้าไปใน `CLAUDE.md` ด้วยบรรทัด `@AGENTS.md` การตั้งค่านี้ยังทำงานเหมือนเดิมก่อนเดือนกันยายน และช่วยรองรับ Claude Code เวอร์ชันเก่าด้วย ฉันจะอธิบายโดยละเอียดด้านล่าง

## จะนำเข้า @AGENTS.md ภายใน CLAUDE.md ได้อย่างไร?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

ต้องนำเข้าเมื่อโปรเจ็กต์มี `CLAUDE.md`: เมื่อมีไฟล์นี้ Claude Code จะไม่อ่าน `AGENTS.md` เองตามค่าเริ่มต้น หากต้องการตั้งค่า ให้เขียนบรรทัด `@AGENTS.md` ไว้ด้านบนสุดของไฟล์ `CLAUDE.md` เมื่อ Claude Code เริ่มเซสชัน ระบบจะแทรกเนื้อหาของ `AGENTS.md` แทนบรรทัดนั้น แล้วอ่านผลลัพธ์เป็นข้อความเดียว ใต้บรรทัดนำเข้า คุณเพิ่มหัวข้อ “Claude Code” พร้อมกฎที่ใช้กับ Claude เท่านั้นได้ การนำเข้าใช้ได้ทั้งพาธสัมพัทธ์และพาธสัมบูรณ์ และซ้อนกันได้ลึกสูงสุดสี่ระดับ

</div>

ตัวอย่างขั้นต่ำที่ใช้งานได้จากเอกสารทางการ:

```markdown
@AGENTS.md

## Claude Code

Use plan mode for changes under `src/billing/`.
```

สิ่งที่เกิดขึ้นมีดังนี้ บรรทัดแรก `@AGENTS.md` เป็นคำสั่งนำเข้า เมื่อ Claude Code แยกวิเคราะห์ `CLAUDE.md` ตอนเริ่มเซสชัน จะพบคำสั่งนำเข้านี้และแทรกเนื้อหาทั้งหมดของ `AGENTS.md` ลงไปแทน จากนั้นเป็นหัวข้อ `## Claude Code`: เป็นเพียง Markdown แต่ทำหน้าที่เป็นส่วน “ข้อกำหนดเพิ่มเติมเฉพาะ Claude” ใต้หัวข้อนี้มีกฎที่ใช้กับ Claude Code เท่านั้น นั่นคือให้ใช้ plan mode เมื่อแก้ไขไดเรกทอรี billing ส่วน Codex CLI หรือ Cursor จะไม่เปิดไฟล์นี้เลย แต่ใช้ `AGENTS.md` โดยตรง

ข้อความจากเอกสารเกี่ยวกับวิธีทำงานของการนำเข้า:

<figure>
<blockquote>
<p>ไฟล์ CLAUDE.md สามารถนำเข้าไฟล์เพิ่มเติมโดยใช้ไวยากรณ์ <code>@path/to/import</code> ไฟล์ที่นำเข้าจะถูกขยายเนื้อหาและโหลดเข้าไปในบริบทเมื่อเริ่มเซสชัน พร้อมกับไฟล์ CLAUDE.md ที่อ้างถึงไฟล์เหล่านั้น</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

รายละเอียดที่ใช้ได้จริงบางประการ:

- **พาธสัมพัทธ์และสัมบูรณ์** `@AGENTS.md` เป็นพาธสัมพัทธ์กับไฟล์ที่มีคำสั่งนำเข้า ส่วน `@/Users/me/shared/rules.md` หรือ `@~/.claude/personal.md` เป็นพาธสัมบูรณ์ ฉันใช้ `@~/.claude/personal.md` เก็บความชอบส่วนตัวที่ไม่ต้องการใส่ไว้ในรีโพซิทอรี
- **ลึกได้สี่ระดับ** `AGENTS.md` สามารถนำเข้า `@docs/coding-style.md` และ `coding-style.md` ก็นำเข้าไฟล์อื่นต่อได้ รวมความลึกสูงสุดสี่ระดับ ซึ่งเพียงพอสำหรับโครงสร้างจริงทุกรูปแบบ
- **แบ็กทิกปิดกั้นการนำเข้า** หากข้อความเขียนว่า `` `@README` `` นั่นเป็นเพียงการกล่าวถึงชื่อ ไม่ใช่การนำเข้า วิธีนี้มีประโยชน์เมื่ออธิบายให้ผู้อ่านเข้าใจวิธีนำเข้าโดยไม่ทำให้เกิดการนำเข้าจริง
- **การอนุมัติสำหรับไฟล์นอกโปรเจ็กต์** หากคำสั่งนำเข้าชี้ออกนอกไดเรกทอรีทำงาน เช่น `@~/.claude/personal.md` Claude Code จะแสดงกล่องโต้ตอบพร้อมรายชื่อไฟล์เหล่านั้นในครั้งแรก หากปฏิเสธ การนำเข้าภายนอกจะยังคงปิดอยู่และจะไม่แสดงกล่องโต้ตอบอีก ส่วน `@AGENTS.md` ที่รากโปรเจ็กต์ไม่ทำให้มีกล่องโต้ตอบ วิธีนี้ช่วยป้องกันไม่ให้โหลดไฟล์ที่ไม่เกี่ยวข้องเข้าไปในบริบทโดยไม่ตั้งใจ

หลังจากเปลี่ยนมาใช้การตั้งค่านี้ในโปรเจ็กต์ที่กล่าวถึง `CLAUDE.md` ของฉันลดจาก 250 บรรทัดเหลือ 60 บรรทัด: มี `@AGENTS.md` และกฎอีกห้าถึงเจ็ดข้อที่ใช้กับ Claude Code เท่านั้น (plan mode สำหรับไดเรกทอรีเสี่ยง สิ่งที่ห้ามแตะในส่วนผู้ดูแลระบบ และวิธีเขียน commit) ทุกอย่างที่ใช้ร่วมกันอยู่ใน `AGENTS.md` ซึ่ง Codex และ Cursor อ่าน

## ควรเลือก symlink หรือการนำเข้าเมื่อใด?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

Anthropic มีสองวิธี: นำเข้าผ่าน `@AGENTS.md` หรือใช้ลิงก์สัญลักษณ์ `ln -s AGENTS.md CLAUDE.md` symlink ง่ายกว่า เพราะเป็นเพียงชื่อแทนและไม่ต้องแก้ไฟล์ แต่มีข้อเสียสามข้อ: Windows ต้องใช้สิทธิ์ผู้ดูแลระบบ คุณเพิ่มกฎเฉพาะ Claude ใน `CLAUDE.md` ไม่ได้ และบางครั้ง Git แสดง symlink เป็นขยะใน diff การนำเข้าเป็นวิธีที่ใช้ได้ทั่วไป หากไม่มีกฎเฉพาะสำหรับ Claude ตั้งแต่เวอร์ชัน 2.1.277 เป็นต้นไป ก็ไม่ต้องใช้ทั้งสองวิธี Claude Code จะอ่าน `AGENTS.md` เอง

</div>

เอกสารแสดงตัวเลือก symlink ดังนี้:

```bash
ln -s AGENTS.md CLAUDE.md
```

และเตือนเกี่ยวกับ Windows อย่างตรงไปตรงมาทันที:

<figure>
<blockquote>
<p>หากคุณหรือใครก็ตามที่โคลนรีโพซิทอรีทำงานบน Windows ให้ใช้การนำเข้า `@AGENTS.md` การสร้างลิงก์สัญลักษณ์บน Windows ต้องใช้สิทธิ์ผู้ดูแลระบบหรือ Developer Mode และหาก Git ไม่ได้เปิดใช้ `core.symlinks` การ checkout ลิงก์ที่ commit ไว้จะกลายเป็นไฟล์ข้อความธรรมดา ทำให้มี `CLAUDE.md` เพียงบรรทัดเดียว แทนคำสั่งในสำเนานั้น</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

ตารางเปรียบเทียบ:

| เกณฑ์ | การนำเข้า `@AGENTS.md` | symlink `ln -s` |
|----|----|----|
| **ใช้บน Windows โดยไม่ต้องมีสิทธิ์ผู้ดูแลระบบ** | ได้ | ไม่ได้ (ต้องใช้ Developer Mode) |
| **เพิ่มกฎเฉพาะ Claude ได้** | ได้ ใต้บรรทัดนำเข้า | ไม่ได้ ไฟล์เหมือนกันทุกประการ |
| **ปรากฏใน Git เป็น Markdown ปกติ** | ได้ | เป็นลิงก์ (ขึ้นอยู่กับ `core.symlinks`) |
| **นำเข้าหลายไฟล์ได้** | ได้ ลึกสูงสุดสี่ระดับ | ไม่ได้ หนึ่งต่อหนึ่ง |
| **การแคช/การทำให้แคชเป็นโมฆะใน Claude Code** | เป็นมาตรฐานสำหรับ CLAUDE.md | ใช้ได้ แต่ symlink มีข้อผิดพลาดเกี่ยวกับข้อมูลเมตา |
| **ตัวเลือกเริ่มต้น** | เหมาะกับทุกคน | ใช้เฉพาะเมื่อไม่จำเป็นต้องรองรับหลายแพลตฟอร์ม |

ฉันใช้การนำเข้าในโปรเจ็กต์ที่กล่าวถึง ด้วยเหตุผลต่อไปนี้:

1. **ทีมใช้หลายแพลตฟอร์ม** ฉันใช้ Mac; ในตัวอย่าง ทีมมีผู้ใช้ Windows และ Mac ในสัดส่วนใกล้เคียงกัน หากมี symlink ในรีโพซิทอรี ผู้ใช้ Windows ที่ไม่มี Developer Mode จะ checkout มันเป็นไฟล์ข้อความธรรมดาที่มีบรรทัดเดียวคือ `AGENTS.md` ซึ่งทำให้เกิดบั๊กแปลก ๆ: บางครั้งกฎก็ทำงาน บางครั้งก็ไม่ทำงาน และไม่รู้ว่าเพราะอะไร
2. **ฉันต้องการกฎเฉพาะ Claude** ใต้ `@AGENTS.md` ใน `CLAUDE.md` ของฉันมีส่วน “Claude Code” พร้อมกฎ เช่น ใช้ `--effort high` สำหรับงานสถาปัตยกรรม รัน `npm run build` ก่อน `git push` และห้ามเรียก `/api/v1/deploy` ด้วยตนเอง Codex ไม่เข้าใจคำสั่งเหล่านี้
3. **แก้จุดบกพร่องได้ง่ายกว่า** เมื่อเกิดปัญหา ฉันเปิด `CLAUDE.md` แล้วเห็นทั้งบรรทัดนำเข้าและข้อกำหนดเพิ่มเติมของฉัน ส่วน symlink ไม่มีข้อความว่า “เพิ่มสิ่งนี้ไว้ที่นี่” ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้จุดบกพร่องของการตั้งค่า Claude Code ได้ใน[คู่มือ safe mode](https://ailoot.ai/blog/th/claude-code-safe-mode-recovery/)

หากไม่มีกฎเฉพาะสำหรับ Claude ตั้งแต่เวอร์ชัน 2.1.277 ก็ไม่จำเป็นต้องใช้ symlink อีกต่อไป: ลบ `CLAUDE.md` แล้ว Claude Code จะอ่าน `AGENTS.md` เอง เก็บ symlink ไว้เฉพาะเมื่อมีคนในทีมใช้เวอร์ชันเก่ากว่า 2.1.277 และอัปเดตไม่ได้ หากมีกฎเฉพาะสำหรับ Claude การนำเข้าสะดวกกว่าในเก้ากรณีจากสิบกรณี

## Codex, Cursor, Copilot, Windsurf และ Gemini CLI อ่านไฟล์ใด?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

แต่ละเครื่องมืออ่านไฟล์ของตัวเอง บางครั้งอ่านมากกว่าหนึ่งไฟล์ Claude Code อ่าน `CLAUDE.md` และตั้งแต่เดือนกันยายน 2026 ก็อ่าน `AGENTS.md` ด้วย หากโปรเจ็กต์ไม่มี `CLAUDE.md` ส่วน Codex CLI อ่าน `AGENTS.md` และ `AGENTS.override.md` Cursor อ่านรูปแบบเก่า `.cursorrules` หรือรูปแบบใหม่ `.cursor/rules/*.mdc` และตั้งแต่ฤดูร้อนปี 2026 ก็อ่าน `AGENTS.md` ด้วย Copilot อ่าน `.github/copilot-instructions.md` หรือ `.github/instructions/*.instructions.md` Windsurf อ่าน `.windsurfrules` รูปแบบเก่า หรือ `.windsurf/rules/` รูปแบบใหม่ Gemini CLI อ่าน `GEMINI.md` ส่วน Aider และ Cline รองรับ `AGENTS.md` แล้ว

</div>

แผนผังของเครื่องมือหลักทั้งเจ็ด (อ้างอิงเอกสารทางการของแต่ละเครื่องมือ):

| เครื่องมือ | ไฟล์คำสั่งหลัก | ทางเลือกอื่น | อ่าน AGENTS.md หรือไม่? |
|----|----|----|----|
| **Claude Code** | `CLAUDE.md` | `~/.claude/CLAUDE.md`, `./.claude/CLAUDE.md`, นโยบายที่องค์กรจัดการ | อ่าน หากโปรเจ็กต์ไม่มี `CLAUDE.md` (ตั้งแต่ 2.1.277) มิฉะนั้นอ่านผ่านการนำเข้า |
| **Codex CLI** (OpenAI) | `AGENTS.md` | `AGENTS.override.md` | อ่าน (มีมาในตัว) |
| **Cursor** | `.cursor/rules/*.mdc` | `.cursorrules` (เลิกใช้แล้ว) | อ่าน |
| **GitHub Copilot** | `.github/copilot-instructions.md` | `.github/instructions/*.instructions.md` | อ่านผ่านส่วนขยาย |
| **Windsurf** | `.windsurf/rules/` | `.windsurfrules` (เลิกใช้แล้ว) | อ่าน |
| **Gemini CLI** | `GEMINI.md` | \- | ไม่อ่าน |
| **Aider, Cline, opencode** | `AGENTS.md` | \- | อ่าน (มีมาในตัว) |

สิ่งนี้หมายความว่าอย่างไร? หากรีโพซิทอรีมี `AGENTS.md` (พร้อม `CLAUDE.md` ที่นำเข้าไฟล์นี้เมื่อมีกฎเฉพาะ Claude) เครื่องมือห้าในเจ็ดตัวจะได้รับคำสั่งล่าสุดโดยอัตโนมัติ ส่วน Cursor และ Windsurf ซึ่งมีไฟล์เฉพาะของตัวเองอยู่แล้ว จะคงการตั้งค่าเดิมก็ได้ (`AGENTS.md` ก็ถูกอ่านโดยเครื่องมือเหล่านี้เช่นกัน) หรือเพิ่มการนำเข้า `@AGENTS.md` ก็ได้ แต่ไวยากรณ์ต่างกันและไม่ได้รองรับเสมอไป

แนวทางที่ง่ายที่สุดสำหรับโปรเจ็กต์ใหม่:

1. **ใส่กฎที่ใช้ร่วมกันทั้งหมดไว้ใน `AGENTS.md`** — กฎ 95% ควรอยู่ที่นั่น
2. **สร้าง `CLAUDE.md` หากต้องการกฎเฉพาะ Claude:** ใส่ `@AGENTS.md` ไว้บรรทัดแรก แล้วเพิ่มส่วนกฎเฉพาะ Claude ไว้ด้านล่าง หากไม่มีกฎดังกล่าวก็ไม่จำเป็นต้องมี `CLAUDE.md`; Claude Code อ่าน `AGENTS.md` เองตั้งแต่เวอร์ชัน 2.1.277
3. **เก็บ `.cursor/rules/` ไว้สำหรับ Cursor** ในกรณีที่พบไม่บ่อยและต้องใช้สิ่งเฉพาะของ Cursor เช่น คำสั่ง `@Codebase` และ `@Docs`
4. **ทำเช่นเดียวกันกับ Windsurf:** เลิกใช้ `.windsurfrules` แบบเก่า และใช้ `.windsurf/rules/` แบบใหม่เฉพาะเมื่อต้องการรูปแบบที่เข้ากับไวยากรณ์ของมัน

แนวทางนี้ให้ประโยชน์ 80% ด้วยงานเพียง 20% จากประสบการณ์ของฉัน ตอนจัดการทีมที่ใช้เครื่องมือปะปนกันใน “Antigravity” การดูแลแหล่งข้อมูลอ้างอิงเกินสองแห่ง (กฎร่วมและกฎเฉพาะ Claude) กลายเป็นเรื่องยุ่งยาก หากมีคนในทีมเพิ่มกฎลงใน `.cursorrules` แล้วลืมเพิ่มใน `AGENTS.md` หนึ่งสัปดาห์ต่อมา Cursor กับ Codex ก็จะให้ผลไม่ตรงกัน

## /init ใน Claude Code นำ AGENTS.md ที่มีอยู่มาใช้ได้อย่างไร?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

`/init` สร้าง `CLAUDE.md` จากสิ่งที่มีอยู่ในรีโพซิทอรี และประหยัดงานด้วยตนเองได้ 20–30 นาที ตามค่าเริ่มต้นจะอ่านกฎ Cursor (`.cursor/rules/`, `.cursorrules`) และกฎ Copilot (`.github/copilot-instructions.md`) ส่วน `AGENTS.md`, `.windsurfrules` และ `.clinerules` จะอ่านในโหมด `CLAUDE_CODE_NEW_INIT=1` โหมดนี้ยังเริ่มกระบวนการแบบอินเทอร์แอกทีฟหลายระยะ: ถามคำถาม สำรวจโค้ดผ่าน subagent และเสนอแผนก่อนเขียน ตั้งแต่เดือนกันยายน 2026 เป็นต้นมา `/init` มีข้อเสียเมื่อใช้ในโปรเจ็กต์ที่มี `AGENTS.md`: `CLAUDE.md` ที่สร้างขึ้นใหม่จะปิดการอ่าน `AGENTS.md` โดยตรง และทำให้กฎไปอยู่ในสองไฟล์

</div>

Anthropic อธิบาย `/init` ไว้ในเอกสารดังนี้:

<figure>
<blockquote>
<p>เมื่อรัน <code>/init</code> ระบบจะอ่านไฟล์คำสั่งของเครื่องมืออื่น แล้วนำส่วนที่เกี่ยวข้องไปไว้ใน <code>CLAUDE.md</code> ที่สร้างขึ้น ได้แก่ กฎ Cursor จาก <code>.cursor/rules/</code> หรือ <code>.cursorrules</code> กฎ Copilot จาก <code>.github/copilot-instructions.md</code> และเมื่อใช้ <code>CLAUDE_CODE_NEW_INIT=1</code> ก็จะอ่าน <code>AGENTS.md</code>, <code>.devin/rules/</code>, <code>.windsurf/rules/</code> หรือ <code>.windsurfrules</code> รวมถึง <code>.clinerules</code> ด้วย</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

ในทางปฏิบัติหมายความว่าอย่างไร? รีโพซิทอรีที่ฉันกล่าวถึงมี `.cursorrules` จากตอนที่ฉันลองใช้ Cursor (ประมาณ 80 บรรทัด) และ `AGENTS.md` (120 บรรทัด ซึ่งฉันรวบรวมด้วยมือ) เมื่อรัน `claude /init` คำสั่งจะอ่านทั้งสองไฟล์ ตัดกฎที่คล้ายกันออก แล้วประกอบเป็น `CLAUDE.md` ที่เป็นระเบียบภายในหนึ่งนาที ฉันตรวจดูไฟล์หลังจากนั้นและแก้เล็กน้อย เช่น ลบรายการที่ล้าสมัยและเพิ่มโครงสร้างหัวข้อ วิธีนี้เร็วกว่าการเขียนใหม่ตั้งแต่ต้น

เปิดโหมดอินเทอร์แอกทีฟที่ทำให้ `/init` อ่าน `AGENTS.md` ด้วยได้ผ่านตัวแปรสภาพแวดล้อม:

```bash
CLAUDE_CODE_NEW_INIT=1 claude
```

เมื่อ `/init` เริ่มทำงาน Claude จะถามคำถามเพื่อขอรายละเอียด เช่น ต้องการตั้งค่าอะไรบ้าง (`CLAUDE.md`, skills, hooks) โปรเจ็กต์ใช้ tech stack ใด และควรใช้คำสั่งใดสำหรับการทดสอบ จากนั้น subagent จะสำรวจโค้ดเบส โดยอ่าน `package.json`, `README.md` และไฟล์กำหนดค่าต่าง ๆ แล้วเติมส่วนที่ขาดให้ ตอนท้าย ระบบจะแสดงข้อเสนอให้คุณแก้ไขก่อนบันทึก หากต้องการทราบเพิ่มเติมเกี่ยวกับการตั้งค่า Claude Code ตอนเริ่มโปรเจ็กต์ โปรดดู[คู่มือแยกต่างหาก](https://ailoot.ai/blog/th/spec-kit-claude-code-spec-driven-development/)

ต่อไปคือข้อเสีย หากโปรเจ็กต์มี `AGENTS.md` ที่ใช้งานอยู่แล้ว `/init` จะสร้าง `CLAUDE.md` ข้างไฟล์นั้น โดยมีสำเนากฎอยู่ ตั้งแต่นั้น Claude Code จะอ่านเฉพาะ `CLAUDE.md` ตามค่าเริ่มต้น ทำให้มีแหล่งข้อมูลอ้างอิงสองแห่งอีกครั้ง: คุณอัปเดต `AGENTS.md` แต่ Claude ยังทำงานจากสำเนาเก่า คำสั่ง `/import` ทำสิ่งคล้ายกัน โดยเพิ่มสำเนา `AGENTS.md` ลงใน `CLAUDE.md` เพียงครั้งเดียว หากต้องการคงแหล่งข้อมูลเดียว ให้ใส่การนำเข้า `@AGENTS.md` เป็นบรรทัดแรกของ `CLAUDE.md` หลังใช้ `/init` และลบเนื้อหาใน `CLAUDE.md` ที่ซ้ำกับ `AGENTS.md`

`/init` เป็นจุดเริ่มต้นที่เหมาะกับโปรเจ็กต์ใหม่ หรือโปรเจ็กต์ที่ย้ายมาจาก Cursor หรือ Copilot ไม่จำเป็นต้องค้นหา “เทมเพลต CLAUDE.md ที่ดีที่สุด” ทางออนไลน์ เพราะ Anthropic นำสิ่งที่มีในรีโพซิทอรีมาพิจารณาอยู่แล้ว หากโปรเจ็กต์มี `AGENTS.md` ที่ใช้งานอยู่และไม่มีกฎเฉพาะ Claude ก็ไม่จำเป็นต้องใช้ `/init`: Claude Code จะอ่าน `AGENTS.md` เอง

## จะแยกคำสั่งที่ใช้ร่วมกันกับคำสั่งเฉพาะ Claude อย่างไร?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

ใส่กฎที่เอเจนต์ AI ทุกตัวเข้าใจได้ไว้ใน `AGENTS.md`: ห้ามแตะอะไร ตั้งชื่อ branch อย่างไร ระบุว่า `.env` มีความลับ และใช้คำสั่งใดสำหรับการทดสอบ ส่วนกฎเฉพาะ Claude Code ให้ใส่ใน `CLAUDE.md` (ใต้บรรทัดนำเข้า) เช่น plan mode, skills, hooks, การอ้างอิง skill และชื่อโมเดลตามเวอร์ชัน แยกง่าย ๆ คือ ถ้ากฎเริ่มด้วย “Claude ควร” ก็ให้อยู่ใน `CLAUDE.md` ถ้าเริ่มด้วย “เครื่องมือควร” ก็ให้อยู่ใน `AGENTS.md`

</div>

ฉันแยกกฎตามหลักนี้ กฎที่ใช้ร่วมกันและควรอยู่ใน `AGENTS.md` มีดังนี้:

- **สิ่งที่ห้ามแตะในโค้ด** โฟลเดอร์ `.env`, `node_modules`, `prisma/migrations` (ให้แก้ผ่าน `prisma migrate` เท่านั้น), `.next/` และ `.git/`
- **วิธีตั้งชื่อ** branch: `feat/`, `fix/`, `chore/` ส่วน commit ให้ขึ้นต้นด้วย `feat:`, `fix:` หรือ `docs:` แล้วตามด้วยคำอธิบายสั้น ๆ ไฟล์ component ใช้ชื่อแบบ `kebab-case`
- **คำสั่ง test/lint** `npm run build`, `npm run lint`, `npm test` รวมถึงคำสั่งที่ต้องรันก่อน `git push`
- **หลักการด้านสถาปัตยกรรม** อะไรควรอยู่ใน `src/lib/` อะไรอยู่ใน `src/components/` ตรรกะทางธุรกิจอยู่ที่ไหน และ UI อยู่ที่ไหน
- **ความปลอดภัย** ห้าม commit ความลับ เข้าถึงฐานข้อมูล production ผ่าน `prod-psql` เท่านั้น เข้าถึง production ผ่าน SSH โดยใช้ alias `prod` เท่านั้น ห้ามใช้ `root@IP`

กฎเฉพาะ Claude ที่ควรอยู่ใน `CLAUDE.md` (ใต้ `@AGENTS.md`):

- **Plan mode** ใช้ `plan mode` เมื่อแก้ไขไดเรกทอรีที่มีความเสี่ยง (เช่น `src/billing/`)
- **ระดับความพยายาม** ใช้ `--effort high` สำหรับงานสถาปัตยกรรม และ `medium` สำหรับงานประจำ
- **Skills** ควรเรียกใช้เอเจนต์ AI และ skill ใดในแต่ละสถานการณ์ ตัวอย่างเช่น “เมื่อทำงานกับคู่มือ ให้เรียกใช้ skill `build-masterskaya-guide`”
- **หน่วยความจำ Claude** ควรใส่อะไรในหน่วยความจำอัตโนมัติ และอะไรใน `CLAUDE.local.md` ดูข้อมูลเพิ่มเติมเกี่ยวกับหน่วยความจำ Claude ได้ที่[คู่มือ Memory และ CLAUDE.md](https://ailoot.ai/blog/th/claude-memory-claude-md-auto-memory/)
- **Hooks** หากกำหนด hooks ไว้ใน `.claude/settings.json` ให้อธิบายใน `CLAUDE.md` ว่าทำอะไร (Codex และ Cursor ไม่รู้จัก hooks และไม่จำเป็นต้องรู้)
- **Skills และคำสั่ง** รายการคำสั่ง slash ที่ฉันใช้บ่อย (`/init`, `/cd`, `/memory`, `/plan`)

ขอบเขตนี้ไม่ได้ชัดเจนเสมอไป ตัวอย่างเช่น “ห้ามรัน `git push --force` ไปยัง `main`” เป็นกฎร่วมอย่างชัดเจน จึงควรอยู่ใน `AGENTS.md` แต่ “เมื่อรัน `git push` ไปยัง branch ที่กำลังพัฒนา ให้ใช้ plan mode ก่อน” เป็นกฎเฉพาะ Claude Code จึงควรอยู่ใน `CLAUDE.md` วิธีทดสอบคือ “ถ้าพรุ่งนี้ฉันเอา Claude Code ออกและเหลือแค่ Codex กฎนี้ยังใช้ได้ไหม?” ถ้าใช่ ให้ใส่ไว้ใน `AGENTS.md` ถ้าไม่ ให้ใส่ไว้ใน `CLAUDE.md`

## อะไรควรอยู่ใน AGENTS.md และอะไรควรอยู่ใน CLAUDE.md หรือ .claude/rules?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

สำหรับโปรเจ็กต์ขนาดใหญ่ `AGENTS.md` ไฟล์เดียวไม่เพียงพอ เพราะจะยาวเกินไป และเอเจนต์ทุกตัวจะดึงเนื้อหาที่ไม่จำเป็นเข้าไปในบริบท วิธีแก้คือสร้างไดเรกทอรี `.claude/rules/` แล้วแยกไฟล์ตามหัวข้อ พร้อม YAML frontmatter `paths:` สำหรับเรียกใช้ตามพาธ ตัวอย่างเช่น กฎ API จะมีผลเฉพาะเมื่อ Claude ทำงานใน `src/api/` วิธีนี้ช่วยประหยัดพื้นที่ context window ได้มาก ส่วน Cursor และ Windsurf ใช้ `.cursor/rules/` และ `.windsurf/rules/` ในลักษณะเดียวกัน

</div>

หากกฎมีเกิน 200 บรรทัด ก็ถึงเวลาแยกไฟล์ เอกสารของ Anthropic แนะนำให้ตั้งเป้าประมาณ 200 บรรทัดต่อไฟล์ เพราะไฟล์ `CLAUDE.md` ที่ยาวทำให้ Claude ปฏิบัติตามคำสั่งน้อยลงโดยไม่มีสัญญาณเตือน: ดูเหมือนว่า Claude อ่านไฟล์ แต่ทำตามคำสั่งน้อยลง

โครงสร้างสำหรับโปรเจ็กต์ขนาดใหญ่ที่ใช้ได้ผลสำหรับฉัน:

```
my-project/
├── AGENTS.md                    # 100-150 lines, shared
├── CLAUDE.md                    # 30-50 lines: @AGENTS.md + Claude-only
└── .claude/
    ├── CLAUDE.md                # alternative to root file, same file
    └── rules/
        ├── api.md               # with paths: ['src/api/**']
        ├── components.md        # with paths: ['src/components/**']
        ├── testing.md           # without paths, always active
        └── security.md          # without paths, always active
```

ไฟล์แต่ละไฟล์ใน `.claude/rules/` สามารถมี frontmatter ได้ดังนี้:

```markdown
---
paths:
  - "src/api/**/*.ts"
---

# API rules
- Every endpoint validates input with zod
- Errors use the standard `{error, code}` format
- OpenAPI comments are required
```

Claude โหลดกฎเหล่านี้เฉพาะเมื่อทำงานกับไฟล์ที่ตรงกับรูปแบบนี้ หากแตะ `src/components/Button.tsx` กฎ API จะไม่ถูกเพิ่มเข้าไปในบริบท วิธีนี้ทำให้ใช้ context window เฉพาะกับสิ่งที่เกี่ยวข้อง ไดเรกทอรี `.claude/rules/` ยังใช้ได้แม้ไม่มี `CLAUDE.md`: หากโปรเจ็กต์มีเพียง `AGENTS.md` กฎจะโหลดควบคู่กันโดยไม่ปิดการอ่าน `AGENTS.md` โดยตรง

Cursor และ Windsurf รองรับแนวทางเดียวกันผ่านไดเรกทอรี `.cursor/rules/` และ `.windsurf/rules/` มาตรฐาน AGENTS.md สามารถอ้างถึงไดเรกทอรีเหล่านี้ได้ แต่ไวยากรณ์ข้ามเครื่องมือยังไม่เสถียรทั้งหมด จึงปลอดภัยกว่าหากเก็บกฎร่วมไว้ใน `AGENTS.md` และทำสำเนากฎที่จำกัดตามพาธไว้ใน `.claude/rules/` และ `.cursor/rules/` — กรณีเฉพาะเช่นนี้พบไม่บ่อยและไม่ใช่กฎส่วนใหญ่

ตำแหน่งที่ใช้ได้สำหรับ CLAUDE.md (เรียงจากขอบเขตกว้างที่สุดไปแคบที่สุด):

| ระดับ | ตำแหน่ง | จุดประสงค์ |
|----|----|----|
| **นโยบายที่องค์กรจัดการ** | `/Library/Application Support/ClaudeCode/CLAUDE.md` (Mac), `/etc/claude-code/CLAUDE.md` (Linux) | กฎองค์กร, IT/DevOps |
| **ผู้ใช้** | `~/.claude/CLAUDE.md` | ความชอบส่วนตัวที่ใช้กับทุกโปรเจ็กต์ |
| **โปรเจ็กต์** | `./CLAUDE.md` หรือ `./.claude/CLAUDE.md` | กฎของทีมโปรเจ็กต์ |
| **เฉพาะเครื่อง** | `./CLAUDE.local.md` (ใน `.gitignore`) | ความชอบส่วนตัวสำหรับโปรเจ็กต์หนึ่ง ๆ |

ตัวอย่าง `~/.claude/CLAUDE.md` อาจมีกฎสองข้อ: “ตอบกลับด้วยภาษาที่ผู้ใช้ต้องการ” และ “สะกด Ailoot ตามนี้ทุกครั้ง” กฎเหล่านี้ใช้กับทุกโปรเจ็กต์ จึงไม่จำเป็นต้องทำซ้ำในแต่ละรีโพซิทอรี

ในสี่ระดับนี้ มีเพียง `CLAUDE.md` ระดับโปรเจ็กต์และ `CLAUDE.local.md` ที่ปิดการอ่าน `AGENTS.md` โดยตรง ส่วน `~/.claude/CLAUDE.md` ส่วนตัวและนโยบายที่องค์กรจัดการจะไม่ขัดขวาง Claude Code อ่านไฟล์เหล่านั้นควบคู่กับ `AGENTS.md`

## หาก AGENTS.md ในโปรเจ็กต์ล้าสมัยอยู่แล้ว ควรทำอย่างไร?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

หากสร้าง `AGENTS.md` ไว้ตั้งแต่ปี 2025 สำหรับ Codex หรือ Aider และไม่ได้แก้ไขตั้งแต่นั้น ให้เปิดโปรเจ็กต์ใน Claude Code แล้วขอให้ Claude แก้ไขไฟล์ AGENTS.md เป็นเอกสารที่ปรับปรุงอยู่เสมอ และข้อกำหนดของ Linux Foundation ก็มีการอัปเดต หลักสำคัญในการดูแลให้เป็นปัจจุบันคือ ทุกกฎต้องตอบคำถามว่า “ฉันเบื่อที่จะต้องคอยบอก Claude/Codex เรื่องอะไร?” หากตอบไม่ได้ ให้เก็บเข้าคลัง

</div>

ในโปรเจ็กต์ที่ฉันกล่าวถึง ฉันมี `AGENTS.md` ตั้งแต่เดือนพฤษภาคม 2025 ยาว 180 บรรทัด และหลายส่วนล้าสมัย (กล่าวถึงจุดเชื่อมต่อ Anthropic API ที่เปลี่ยนไปแล้ว ตัวอย่างไวยากรณ์ `claude --tools` ที่ไม่มีอยู่อีกต่อไป และกฎเกี่ยวกับ `~/.claude/projects/` ที่ใช้โครงสร้างเก่า)

แผนที่ฉันใช้ปรับปรุงไฟล์:

1. **ตรวจทานด้วย `claude` ใน plan mode** ฉันเปิดรีโพซิทอรี รัน `claude --safe-mode` แล้วขอว่า “อ่าน `AGENTS.md` อีกครั้ง แล้วเสนอรายการสิ่งที่ล้าสมัยหรือซ้ำกัน อย่าแก้ไขไฟล์ ให้แสดงเฉพาะรายการเท่านั้น” ภายในสองนาที ฉันได้รายการ 23 ข้อให้ตรวจสอบ
2. **ลบรายการที่เห็นชัดว่าล้าสมัย** จาก 23 ข้อ มี 9 ข้อที่ล้าสมัยอย่างชัดเจน ทั้งไวยากรณ์คำสั่ง จุดเชื่อมต่อ และชื่อ flag ฉันลบบรรทัดเหล่านั้น
3. **รวมเนื้อหาซ้ำกัน** อีก 6 ข้อกล่าวซ้ำด้วยถ้อยคำต่างกัน (“อย่า force-push”, “ห้ามใช้ `--force`”, “หลีกเลี่ยง `git push -f`”) ฉันรวมให้เหลือบรรทัดเดียว
4. **เพิ่มรายการใหม่** ฉันเพิ่มสิ่งที่สังเกตว่า Claude/Codex ทำผิดเป็นประจำในเดือนที่ผ่านมา โดยยึดกฎ “หนึ่งบรรทัดต่อรูปแบบข้อผิดพลาดหนึ่งแบบ” ผลคือมีรายการใหม่ 8 ข้อ
5. **ให้ subagent ตรวจทานรอบสุดท้าย** ฉันขอให้ Claude ตรวจหาข้อขัดแย้ง ความกำกวม และเนื้อหาซ้ำ พบถ้อยคำสามจุดที่ทำให้ชัดเจนขึ้นได้ ฉันจึงแก้ไข

หลังผ่านไปหนึ่งชั่วโมง `AGENTS.md` มี 110 บรรทัด เป็นปัจจุบัน และฉันรู้จักทุกบรรทัดเป็นอย่างดี การสร้าง `CLAUDE.md` 30 บรรทัดจากไฟล์นี้ทำได้ง่าย หลังจากนั้น Codex ก็ระมัดระวังเรื่องการทดสอบมากขึ้นอย่างเห็นได้ชัด ฉันสงสัยว่าการตัดสินใจ “แปลก ๆ” บางอย่างเกิดจากกฎเก่าที่มันทำตามโดยสุจริต

หลักการสำคัญสำหรับ `AGENTS.md` ที่มีการดูแลอยู่เสมอ:

- **ทุกกฎตอบโจทย์ข้อผิดพลาดที่เกิดซ้ำ** หากตลอดทั้งเดือนไม่มีสักครั้งที่ฉันนึกถึงกฎข้อนั้น ก็ไม่มีเหตุผลต้องเก็บไว้
- **เขียนกฎเป็นคำสั่ง ไม่ใช่ทฤษฎี** “ใช้ช่องว่างสองตัว” เป็นกฎ ส่วน “จัดรูปแบบโค้ดให้เรียบร้อย” ไม่ใช่
- **ระบุรายละเอียดให้ชัดเจน** “รัน `npm run build` ก่อน `git push`” เป็นกฎ ส่วน “ทดสอบการเปลี่ยนแปลง” ไม่ใช่

## อะไรที่ใช้ไม่ได้กับการตั้งค่านี้อย่างแน่นอน?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

ประเด็นสำคัญ

การนำเข้า `@AGENTS.md` ไม่ได้ทำให้เครื่องมือต่าง ๆ มีพฤติกรรมเหมือนกัน เครื่องมือแต่ละตัวมีข้อจำกัดของตนเอง: Codex CLI ไม่รู้จัก `.claude/rules/` หรือ hooks ส่วน Cursor มีเครื่องมือเติมข้อความอัตโนมัติของตัวเอง ซึ่งไม่อ่าน CLAUDE.md ขณะเติมข้อความ Copilot ทำตาม `.github/copilot-instructions.md` และกฎใน AGENTS.md เพียงอย่างเดียวไม่พอสำหรับ Copilot นี่ไม่ใช่ “ไฟล์เดียว = พฤติกรรมเดียว” แต่คือ “แหล่งข้อมูลเดียวสำหรับกฎพื้นฐาน แล้วแต่ละเครื่องมือมีกฎเพิ่มเติมของตัวเอง”

</div>

สิ่งที่ฉันได้เรียนรู้ด้วยประสบการณ์ตรงระหว่างทำงานกับการตั้งค่านี้เป็นเวลาหกเดือน:

**1. การเติมข้อความอัตโนมัติของ Cursor ไม่ใช้ AGENTS.md** เมื่อ Cursor เสนอให้เติมบรรทัดในเอดิเตอร์ มันไม่ได้อ่าน `AGENTS.md` แบบเรียลไทม์ เพราะมีเครื่องมือความเร็วสูงแยกต่างหากทำงานอยู่ กฎใน AGENTS.md มีผลเฉพาะเมื่อส่งคำขอแชตภายใน Cursor ดังนั้น การเขียนว่า “อย่าใช้ `var` ให้ใช้ `const`” ใน AGENTS.md จะไม่ส่งผลต่อการเติมข้อความอัตโนมัติ คุณต้องตั้งค่านี้ผ่าน ESLint หรือการกำหนดค่า TypeScript

**2. Hooks ของ Claude Code ใน AGENTS.md ใช้กับ Codex ไม่ได้** หากตั้งค่า hook แบบ PreToolUse ใน `.claude/settings.json` เพื่อบล็อกการกระทำบางอย่าง ข้อมูลนี้มีประโยชน์กับ Claude เท่านั้น Codex ไม่รู้จัก hooks; สำหรับมัน เรื่องนี้คือ “เครื่องมือตัดสินใจเอง” การเขียนว่า “ห้ามทำ X” ใน `AGENTS.md` และเขียนว่า “มี hook ที่บล็อก X โดยตรง” ไว้ใน `CLAUDE.md` ใต้บรรทัดนำเข้าจึงเป็นวิธีที่เหมาะสม

**3. Copilot และ `.github/copilot-instructions.md`** GitHub Copilot อ่านไฟล์ของตัวเอง และยังอ่าน AGENTS.md ได้ไม่ดีนัก หากทีมของคุณใช้ Copilot อยู่เป็นประจำ ให้เพิ่ม `.github/copilot-instructions.md` แยกต่างหากพร้อมกฎฉบับย่อ หรือใช้ [Copilot Extensions](https://github.com/marketplace?type=apps&category=copilot-extensions) ที่รู้จัก AGENTS.md เรื่องนี้เปลี่ยนแปลงอย่างรวดเร็ว ภาพรวมจึงอาจต่างออกไปในอีกสามถึงหกเดือน

**4. Git ไม่ติดตาม symlink ในฐานะการเปลี่ยนแปลงของ CLAUDE.md** หากรัน `ln -s AGENTS.md CLAUDE.md` แล้วอัปเดต `AGENTS.md` หนึ่งสัปดาห์ต่อมา Git จะแสดง diff เฉพาะ `AGENTS.md` ซึ่งเป็นเรื่องปกติ แต่เพื่อนร่วมงานที่ตรวจ PR อาจไม่รู้ว่า `CLAUDE.md` ได้รับการอัปเดตผ่าน symlink ด้วย วิธีแก้คือระบุอย่างชัดเจนในคำอธิบาย PR ว่า “อัปเดต `AGENTS.md` แล้ว; Claude Code เห็นไฟล์เดียวกันผ่าน symlink”

**5. การนำเข้าซ้อนลึกแก้จุดบกพร่องได้ยาก** หาก `AGENTS.md` นำเข้า `@docs/coding-style.md` ซึ่งนำเข้า `@docs/typescript.md` ต่อ และมีกฎข้อหนึ่งขัดแย้งกับอีกข้อ การแก้จุดบกพร่องจะทำได้ยาก ฉันจำกัดการนำเข้าไว้เพียงระดับเดียว (`CLAUDE.md` → `AGENTS.md`) และไม่ซ้อนลึกกว่านั้น Anthropic มี hook `InstructionsLoaded` ที่บันทึกว่าโหลดไฟล์ใดบ้าง ซึ่งมีประโยชน์เมื่อต้องแก้จุดบกพร่องของการตั้งค่าแบบหลายชั้น หมายเหตุ: hook นี้ทำงานกับ `AGENTS.md` ที่รวมผ่านการนำเข้าหรือ symlink แต่ไม่ทำงานกับ `AGENTS.md` ที่ Claude Code อ่านเอง

<div class="section" role="doc-bibliography" aria-label="Sources">

### แหล่งที่มา

- [เอกสารหน่วยความจำ Claude Code — ส่วน AGENTS.md](https://code.claude.com/docs/en/memory#agents-md) — Claude Code อ่าน AGENTS.md เองเมื่อใด การตั้งค่า Project instructions การนำเข้าและ symlink ตลอดจนพฤติกรรมของ `/init`
- [เอกสารหน่วยความจำ Claude Code — การนำเข้าไฟล์เพิ่มเติม](https://code.claude.com/docs/en/memory#import-additional-files) — ไวยากรณ์ `@path/to/file` ความลึกสี่ระดับ และพาธสัมพัทธ์กับสัมบูรณ์
- [agents.md — มาตรฐาน Linux Foundation](https://agents.md/) — มาตรฐาน AGENTS.md อย่างเป็นทางการและรายชื่อเครื่องมือที่รองรับ
- [เอกสาร Cursor Rules](https://docs.cursor.com/context/rules-for-ai) — Cursor อ่านอะไร (`.cursor/rules/*.mdc`, AGENTS.md)
- [คำสั่งกำหนดเองสำหรับ GitHub Copilot](https://docs.github.com/en/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot) — รูปแบบ `.github/copilot-instructions.md`
- [ข้อกำหนด AGENTS.md ของ Linux Foundation](https://aaif.io/projects/agents-md/) — ข้อกำหนดที่มีการปรับปรุงอยู่เสมอ

</div>





ทำความรู้จักกับ [Ailoot](https://ailoot.ai/)

## คำถามที่พบบ่อย

### เมื่อไรควรใช้ import แทน symlink?

ใช้ `@AGENTS.md` ใน `CLAUDE.md` เมื่อต้องเพิ่มคำสั่งเฉพาะ Claude หรือมีเพื่อนร่วมทีมใช้ Windows symlink ทำให้สองชื่อชี้เนื้อหาเดียวกัน จึงเพิ่มส่วนเฉพาะ Claude แยกไม่ได้

### ตรวจได้อย่างไรว่าโหลดคำสั่งร่วมแล้ว?

รัน `/memory` และดูไฟล์คำสั่งที่แสดง หาก `CLAUDE.md` หรือ `CLAUDE.local.md` กันการโหลด AGENTS.md โดยตรง ให้เพิ่ม import หรือเลือกค่าให้โหลดทั้งคู่ แล้วเริ่มเซสชันใหม่


## Ailoot · บริษัทและพอร์ตโฟลิโอโครงการของบริษัท

Ailoot อาศัยประสบการณ์การดำเนินงานที่สั่งสม ฐานลูกค้าขนาดใหญ่ บริการที่เสถียร และการติดตาม KPI อย่างต่อเนื่อง

บริษัทและพอร์ตโฟลิโอโครงการของบริษัท: ลูกค้าหลายล้านราย; ยอดขายระดับหลายพันล้านต่อเดือน.

Ailoot นำประสบการณ์การดำเนินงานนี้มาใช้เพื่อให้เข้าถึงฟังก์ชัน AI ผ่าน API ในผลิตภัณฑ์ของลูกค้า เอเจนต์ แอปพลิเคชัน และระบบอัตโนมัติ
