ข้ามไปยังเนื้อหา
Claude Code 2.1.277 อ่าน AGENTS.md ได้แล้ว — และเบื้องหลังคือ "mods" ปลั๊กอินในตัวที่ Anthropic เปิดซอร์สให้ดูทั้งก้อน
เครื่องมือนักพัฒนา

Claude Code 2.1.277 อ่าน AGENTS.md ได้แล้ว — และเบื้องหลังคือ "mods" ปลั๊กอินในตัวที่ Anthropic เปิดซอร์สให้ดูทั้งก้อน

อ่าน 7 นาที ที่มา: Claude Code Changelog

หนึ่งในความรำคาญเล็ก ๆ ที่อยู่กับทีมที่ใช้ coding agent หลายตัวพร้อมกันมานานคือ ไฟล์คำสั่งประจำโปรเจกต์ที่ไม่ตรงกัน — Claude Code อ่าน CLAUDE.md, ส่วน Codex, Cursor, OpenCode และอีกหลายตัวไปทาง AGENTS.md ผลคือรีโปเดียวต้องมีสองไฟล์ที่เนื้อหาเกือบเหมือนกัน แล้วก็ลืมซิงก์กันเป็นประจำ

วันที่ 18 กันยายน 2026 Claude Code เวอร์ชัน 2.1.277 ปิดช่องนี้ลง บรรทัดแรกของ changelog เขียนไว้ตรง ๆ ว่า “Added AGENTS.md support: in a project with no CLAUDE.md, Claude Code reads AGENTS.md instead; change it under ‘Project instructions’ in /config (not yet on Bedrock, Vertex or Foundry)”

แต่สิ่งที่ทำให้ข่าวนี้น่าสนใจกว่าแค่ “รองรับไฟล์เพิ่มอีกชื่อ” คือ วิธีที่มันถูกสร้าง — Anthropic ไม่ได้ฝังลอจิกนี้ไว้ในเอนจิน แต่ทำเป็นปลั๊กอินในตัวชื่อ agents-md แล้วเปิดซอร์สโค้ดทั้งก้อนไว้ในรีโป anthropics/claude-code ใต้โฟลเดอร์ใหม่ชื่อ mods/

สี่โหมด ไม่ใช่สวิตช์เปิด-ปิด

ปลั๊กอินนี้มีออปชันเดียวชื่อ instructionFiles แต่มีสี่ค่า และแต่ละค่าตอบโจทย์ทีมคนละแบบ:

  • claude-md — อ่าน CLAUDE.md อย่างเดียวเหมือนเดิม ปลั๊กอินไม่เพิ่มอะไรเลย
  • claude-md-or-agents-md (ค่าเริ่มต้น) — โปรเจกต์ที่ ไม่มีไฟล์คำสั่งของตัวเอง จะได้ AGENTS.md แทน โดยโหลดในตำแหน่งและวิธีเดียวกับที่ CLAUDE.md จะถูกโหลด
  • claude-md-and-agents-md — โหลด AGENTS.md ทุกไฟล์ควบคู่กับ CLAUDE.md ทั้งขึ้นและลงตามต้นไม้ไดเรกทอรี และถ้าไฟล์นั้นถูก @-import จาก CLAUDE.md อยู่แล้ว หรือเป็น symlink ถึงกัน ก็จะไม่โหลดซ้ำ (เทียบด้วย path ก่อน แล้วค่อยเทียบเนื้อหา)
  • managed-only — ตัดไฟล์คำสั่งของโปรเจกต์ ไฟล์ local และไฟล์ส่วนตัวของผู้ใช้ออกจาก context ทั้งหมด เหลือไว้แค่ CLAUDE.md ที่องค์กรบังคับ (managed) กับ memory ของเอนจิน

นิยาม “ไม่มีไฟล์ของตัวเอง” เขียนไว้ละเอียดกว่าที่คิด: ถ้ามี CLAUDE.md, .claude/CLAUDE.md หรือ CLAUDE.local.md อยู่ในไดเรกทอรีไหนก็ตาม ตั้งแต่ root ลงมาถึง working directory ปลั๊กอินจะถอยออกและปล่อยให้เอนจินจัดการทั้งโปรเจกต์ ส่วนไฟล์ managed ขององค์กร, ~/.claude/CLAUDE.md ส่วนตัว, ไฟล์ .claude/rules และ CLAUDE.md ของไดเรกทอรีที่ --add-dir เข้ามา ไม่นับ เพราะการ walk แบบซ้อนของเอนจินเองก็มองไม่เห็นไฟล์พวกนี้

ตั้งค่าผ่าน /config แถว “Project instructions” หรือเขียนมือลงใน ~/.claude/settings.json:

{
  "pluginConfigs": {
    "agents-md@builtin": {
      "options": { "instructionFiles": "claude-md-and-agents-md" }
    }
  }
}

ข้อควรรู้ที่จะทำให้หลายคนงง: .claude/settings.json ของโปรเจกต์ไม่ถูกอ่านสำหรับออปชันของปลั๊กอิน ต้องตั้งที่ user settings, --settings หรือ managed settings เท่านั้น และการเปลี่ยนค่าจะรีโหลดโมดูล โดย context ชุดถัดไปที่เอนจินสร้าง (เทิร์นถัดไปหลังรีโหลด, บทสนทนาใหม่, /clear, หรือหลัง compaction) ถึงจะได้ไฟล์ตามโหมดใหม่

mods/ — ปลั๊กอินในตัวสี่ตัวที่เปิดซอร์สโค้ดไว้ให้อ่าน

โฟลเดอร์ mods/ ในรีโปสาธารณะอธิบายตัวเองว่า “A mod is a Claude Code plugin whose behaviour lives in a hooks module: one register(on, options) entry that hooks the engine’s events as functions ($, e, next). These four ship inside Claude Code; this folder is their source, published as it is built into the binary.”

สี่ตัวที่ว่าคือ:

modทำอะไร
sec-defaultกัน hooks, prompt content, managed settings และ tool policy ขององค์กรไม่ให้ปลั๊กอินที่ผู้ใช้ติดตั้งเองเข้าถึงได้ — ตัวมันเองไม่เพิ่มนโยบายใด ๆ
diffคำสั่ง /diff แสดงความเปลี่ยนแปลงที่ยังไม่คอมมิตเป็นแพเนลข้าง transcript ไล่ทีละไฟล์พร้อม hunk รีเฟรชตามที่ Claude แก้ไฟล์
telemetryเพิ่ม $.telemetry (log, mark) ใน fold ของ engine.create ให้ปลั๊กอินบันทึก event เป็น analytics row ได้
agents-mdเรื่องที่เล่าในโพสต์นี้

แต่ละโฟลเดอร์เป็นปลั๊กอินสมบูรณ์: มี .claude-plugin/plugin.json, hooks/hooks.json ที่ระบุโมดูล และ TypeScript ใต้ hooks/ ที่ type ตรงกับ declaration ที่คำสั่ง /plugin-types สร้างให้ — รันจากซอร์สได้ด้วย claude --plugin-dir mods/diff และทดสอบด้วย claude plugin test mods/agents-md

สำหรับคนที่เขียนปลั๊กอิน Claude Code อยู่ นี่คือของที่หายากกว่าเอกสาร API: โค้ดจริงของปลั๊กอินระดับ production สี่ตัวที่ใช้ event เดียวกับที่เราเข้าถึงได้ agents-md hook ไว้สี่ event คือ session.start, prompt.context, agent.spawn (เฉพาะ fork: true) และ tool.call บน Read โดยงานหลักอยู่ที่ prompt.context ซึ่งเอนจินยื่นรายการไฟล์คำสั่งเบื้องหลัง claudeMd มาให้ในรูป { path, kind, content, parent? } (kind มี managed, user, project, local, memory เรียงตามลำดับโหลด) แล้ว hook ตอบกลับว่ารายการเปลี่ยนไปอย่างไร

ผลที่ตามมาคือสิ่งที่เอกสารย้ำไว้: AGENTS.md ที่ปลั๊กอินเติมเข้าไปในฐานะไฟล์ project จะ “same place in the context, same framing, same omission rules, same announcement” — รวมถึงถูกตัดออกอัตโนมัติสำหรับ subagent ที่ไม่รับ project instructions (Explore, Plan, หรือ agent ที่ตั้ง omitClaudeMd)

แปดข้อที่ยัง “ไม่เหมือน” CLAUDE.md — และ Anthropic เขียนไว้เอง

ส่วนที่ผมชอบที่สุดของ README คือหัวข้อ “Where it still differs from CLAUDE.md” ที่ไล่ข้อจำกัดไว้ 8 ข้อ โดยบอกด้วยว่าแต่ละข้อคือ “ข้อเท็จจริงของ loader ที่ปลั๊กอินเอื้อมไม่ถึงผ่าน event ที่มีอยู่วันนี้” ตัวอย่างที่กระทบงานจริง:

  1. ไฟล์ซ้อน (nested) แนบเมื่อ Read ไฟล์ข้อความเท่านั้น — ส่วนเอนจินยังแนบ CLAUDE.md ของไดเรกทอรีให้เมื่อผู้ใช้ @-mention ไฟล์ในพรอมต์, เมื่อ IDE เปิดไฟล์หรือ select ข้อความ และเมื่อผล Read เป็น notebook/รูป/PDF
  2. ไฟล์ซ้อนที่ปลั๊กอินแนบไม่ถูกบันทึกใน read-file state ของลูป — หลัง compaction เอนจินจึงไม่กู้มันคืนมาในรายการไฟล์ที่เพิ่งอ่าน (ปลั๊กอินแนบใหม่ที่ Read ครั้งถัดไปในไดเรกทอรีนั้นแทน) และถ้าไฟล์ถูกแก้กลางเซสชันก็จะไม่มีประกาศซ้ำ
  3. ไดเรกทอรีจาก --add-dir ไม่ส่ง AGENTS.md เข้ามาเลย ทั้งที่เอนจินโหลด CLAUDE.md ของมันได้
  4. /memory กับชอร์ตคัต # ยังไม่รู้จัก AGENTS.md และแถวนับไฟล์ตอนโหลดของเอนจินก็ไม่นับมัน
  5. @ import ที่ชี้ออกนอก working directory ใน AGENTS.md จะถูกโหลดต่อเมื่อผู้ใช้เคยอนุมัติ external import ของ CLAUDE.md ไปแล้ว — แต่ไดอะล็อกขออนุมัติจะเด้งให้เฉพาะ import ของ CLAUDE.md เท่านั้น

ข้อจำกัดเชิงแพลตฟอร์มอีกอย่างที่ต้องจำ: ยังใช้ไม่ได้บน Bedrock, Vertex และ Foundry ทีมที่รัน Claude Code ผ่านสามช่องทางนี้ยังต้องมี CLAUDE.md ต่อไป

อีกจุดที่ต้องระวังถ้าคุณเคยตั้งค่านี้ไว้ก่อน: ออปชันนี้เคยใช้คีย์ projectInstructions ด้วยค่า claude, agents-fallback, both, none ตอนนี้ยังอ่านคีย์เก่าให้อยู่ (none→managed-only, claude→claude-md, agents-fallback→claude-md-or-agents-md, both→claude-md-and-agents-md) แต่ ค่าที่สะกดผิดหรือไม่อยู่ในสี่ค่านี้จะถูกอ่านเป็น claude-md ซึ่งไม่โหลด AGENTS.md เลย — ไม่ใช่ค่า default ปกติ

มุมมอง AI Curator

การที่ Claude Code ยอมอ่าน AGENTS.md ถูกเล่าในโซเชียลว่าเป็น “Anthropic ยอมแพ้ให้มาตรฐานกลาง” ซึ่งอ่านแบบนั้นก็ได้ แต่รายละเอียดการ implement บอกเรื่องที่ตรงข้ามกว่านั้น: ค่าเริ่มต้นคือ fallback ไม่ใช่ merge — CLAUDE.md ยังชนะเสมอเมื่อมีอยู่ แปลว่ารีโปที่เซ็ตมาเพื่อ Claude Code อยู่แล้วจะไม่เปลี่ยนพฤติกรรมเลยแม้แต่นิดเดียว ของที่ได้จริงคือรีโปที่ ไม่เคยแคร์ Claude Code ตอนนี้ใช้งานได้ทันทีโดยไม่ต้องเพิ่มไฟล์ นี่คือการขยายตลาดเข้าไปในรีโปของคนอื่น มากกว่าการยอมสละมาตรฐานของตัวเอง

สำหรับทีมไทยที่ผมเห็นบ่อยที่สุด — ทีมเล็ก 3-8 คนที่คนหนึ่งใช้ Claude Code อีกคนใช้ Codex และอีกคนใช้ Cursor — คำแนะนำที่ใช้ได้เลยคือ อย่าเพิ่งรีบลบ CLAUDE.md ทิ้ง ถ้ากฎประจำรีโปของคุณมีทั้งส่วนที่ agent ทุกตัวควรรู้ (โครงสร้างโปรเจกต์ คำสั่ง build วิธีรันเทสต์) และส่วนที่เฉพาะกับ Claude Code (ชื่อ skill, hook, subagent, permission mode) ทางที่สะอาดกว่าคือย้ายส่วนกลางไป AGENTS.md แล้วให้ CLAUDE.md @-import มัน — ปลั๊กอินจะไม่โหลดซ้ำเพราะมันเทียบทั้ง path และเนื้อหา ส่วนโหมด claude-md-and-agents-md เหมาะกับกรณีที่ไฟล์สองก้อนเป็นคนละเรื่องกันจริง ๆ ไม่ใช่กรณีที่เนื้อหาซ้ำกัน เพราะคุณจะจ่ายค่าโทเคนสองรอบทุกเทิร์น

และสำหรับองค์กรที่มีฝ่ายคอมพลายแอนซ์ โหมด managed-only คือของที่ถูกมองข้าม มันตัดไฟล์คำสั่งที่เช็กอินมากับรีโปและไฟล์ส่วนตัวของพนักงานออกจาก context ทั้งหมด เหลือแค่ไฟล์ที่องค์กรคุม — ซึ่งเป็นคำตอบตรง ๆ ของคำถามที่ทีมความมั่นคงถามบ่อยว่า “ถ้ามีคนแอบใส่คำสั่งใน CLAUDE.md ของรีโปที่เราไป clone มา จะเกิดอะไรขึ้น” แต่พึงระลึกว่าเอกสารเขียนไว้เองว่าการแนบไฟล์ซ้อนของเอนจินตอน Read “is not an event yet and still arrive” — แปลว่าโหมดนี้ยังไม่ได้ปิดทุกรูในวันนี้

สุดท้าย ของที่ผมคิดว่ามีค่าที่สุดในรีลีสนี้ไม่ใช่ AGENTS.md แต่คือโฟลเดอร์ mods/ เอง การที่เวนเดอร์เผยแพร่ซอร์สของปลั๊กอินที่ “published as it is built into the binary” พร้อมเฟรมเวิร์กเทสต์ที่รันได้จริง คือเอกสารที่ดีที่สุดสำหรับใครที่กำลังเขียน hook ของตัวเอง — โดยเฉพาะตาราง “What it hooks” และ “What it calls on $” ที่บอกชัดว่าปลั๊กอินเรียกอะไรได้บ้าง ถ้าคุณกำลังจะสร้างปลั๊กอินให้ทีม อ่าน mods/agents-md/hooks/ หนึ่งรอบคุ้มกว่าอ่านเอกสาร API สิบหน้า

แหล่งข่าว

บทความนี้เรียบเรียงจากแหล่งข่าวต้นทาง — Claude Code Changelog

เนื้อหาบน blog นี้สร้างโดย AI โดยมีการกำกับบรรณาธิการจากมนุษย์

อ่านเพิ่มในหมวด เครื่องมือนักพัฒนา

Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ
เครื่องมือนักพัฒนา

Betelgeuse รัน Qwen3.8 Flash Next ขนาด 68GB บน RTX 3060 กับแรม 16GB ส่วน Basalt วัดให้เห็นว่าเอนจินที่เร่งด้วยแฟล็กลัดทำให้โมเดลลืมของ

Betelgeuse ฟอร์ก llama.cpp ที่เปิดเมื่อ 31 ต.ค. ดึง expert จาก NVMe เข้า VRAM ตามต้องการ อ้าง 22 tok/s แบบไม่ทิ้ง expert แต่ README เตือนเองว่ายังทดลองและตัวเลขมาจากคนละรอบ วันเดียวกันผู้พัฒนา Basalt เผยผลวัดว่าแฟล็กเร่งความเร็วทำคุณภาพ Q8 ตกไปใกล้ Q2

· อ่าน 5 นาที
กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง
เครื่องมือนักพัฒนา

กฎห้ามโคลนเกมของ Claude Code เริ่มกระทบงานจริง บริษัทรับทำเกมกระดานร้องงานลูกค้าหยุด แต่รายงานหลายชิ้นปนกับตัวกรองไซเบอร์คนละเรื่อง

ต่อจากที่เราพบกฎนี้ในไบนารี Claude Code ผู้ใช้เริ่มรายงานว่างานเชิงพาณิชย์ถูกปฏิเสธ และ Tom's Hardware กับ Mashable หยิบไปรายงาน แต่เมื่อไล่ issue ที่อ้างถึง พบว่าหลายรายการเกิดก่อนกฎจะมา จึงน่าจะเป็นตัวกรองด้านไซเบอร์ ส่วน Anthropic ยังไม่ชี้แจง

· อ่าน 4 นาที
Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้
เครื่องมือนักพัฒนา

Claude Code ส่ง transcript ของ background agent ให้โมเดลทุก ~30 วินาทีเพื่อเขียนสถานะ 3–5 คำ ผู้วัดรายงานกินราว 16% และยังปิดแบบทางการไม่ได้

รายงานอิสระพบว่าฟีเจอร์ agent_summary ของ Claude Code ส่ง transcript เต็มของ background agent ไปถามสถานะทุก ~30 วินาที คิดเป็น 16.4% ของค่าใช้จ่ายในระบบของผู้วัด Issue เปิดมาตั้งแต่ ส.ค. ยังไม่มีสวิตช์ปิดที่รองรับ เราตรวจพบโค้ดนี้ใน 2.1.314 และพบกฎใหม่เรื่องเกมที่ไม่อยู่ใน changelog

· อ่าน 4 นาที