อย่าฝากความหวังไว้กับ CLAUDE.md: เขียนกฎไว้ ไม่เท่ากับ Claude จะทำตามทุกครั้ง
CLAUDE.md คือบริบท ไม่ใช่คำสัญญา — โมเดลอ่านแต่ไม่การันตีว่าจะทำตามเสมอ สิ่งที่ 'ห้ามพลาด' ต้องบังคับด้วย hook/gate ในตัว harness ไม่ใช่ฝากไว้กับความตั้งใจ
เขียนกฎใน CLAUDE.md ≠ Claude จะทำตามแน่นอน
- มันคือบริบท
- โมเดลอ่าน แต่ชั่งน้ำหนัก/ตีความเอง
- ทำไมหลุด
- context ยาว = กฎถูกเจือจาง/ลืม
- ของห้ามพลาด
- ใส่ใน hook/gate ให้ harness บังคับ
- บังคับใช้ ชนะ ความตั้งใจ
- อย่าฝากความเสี่ยงไว้กับ prose
ผมเห็นคนใช้ Claude Code พลาดท่าเดียวกันบ่อยมาก คือเขียนกฎยาวเหยียดลงใน CLAUDE.md — "ห้ามแก้ไฟล์นี้" "ต้องรันเทสต์ก่อนเสมอ" "อย่าลืมอัปเดตเอกสาร" — แล้วก็สบายใจว่าเขียนไว้แล้วเดี๋ยวมันก็ทำตามเอง พอผ่านไปหลายงานเข้า ถึงค่อยรู้ว่าหลายข้อมันไม่ได้ทำ ความเข้าใจผิดตรงนี้แหละที่ทำให้คนเสียเวลาและบางทีเสียงาน เพราะ CLAUDE.md ไม่ใช่ "สวิตช์บังคับ" มันคือ "บริบท" ที่โมเดลเอาไปชั่งน้ำหนักเอง บทความนี้ผมจะอธิบายว่าทำไมมันถึงไม่ใช่การการันตี และอะไรคือสิ่งที่บังคับได้จริง
CLAUDE.md คือบริบท ไม่ใช่สวิตช์บังคับ
หัวใจที่ต้องเข้าใจก่อนคือ CLAUDE.md ถูกโยนเข้าไปเป็น "ข้อความบอกกล่าว" ในบริบทของโมเดล มันคือคำแนะนำที่โมเดลได้อ่าน ไม่ใช่กฎที่ระบบบังคับให้เกิดขึ้นจริง พูดง่าย ๆ คือมันบอกว่า "ช่วยทำแบบนี้นะ" ไม่ใช่ "ระบบจะไม่ยอมให้ทำอย่างอื่น"
ความต่างนี้สำคัญมาก เพราะระหว่างทาง โมเดลต้องชั่งน้ำหนักคำสั่งหลายอย่างพร้อมกัน — สิ่งที่คุณเพิ่งพิมพ์สั่ง สิ่งที่อยู่ใน CLAUDE.md สิ่งที่มันเห็นในโค้ด และเป้าหมายเฉพาะหน้าของงาน เมื่อมันต้องเลือก กฎใน CLAUDE.md ก็เป็นแค่หนึ่งเสียงในห้องที่มีหลายเสียง ไม่ใช่เสียงที่ดังกว่าใครเสมอไป
ทำไมมันสำคัญกับเรา: ถ้าคุณคิดว่า "เขียนไว้ใน CLAUDE.md แล้ว = การันตีว่าจะทำ" คุณกำลังฝากความเสี่ยงไว้กับความเข้าใจที่ผิด สำหรับงานทั่วไปอาจไม่เป็นไร แต่สำหรับงานที่พลาดไม่ได้ ความเข้าใจผิดนี้แพงมาก
ทำไมเขียนไว้แล้วมันถึงไม่ทำตาม
จากที่ผมเจอจริง มีสามสาเหตุหลักที่กฎใน CLAUDE.md หลุด:
- บริบทยาวขึ้น กฎถูกเจือจาง: ยิ่งงานยาว ยิ่งมีไฟล์และผลลัพธ์เข้ามาเบียดในบริบท กฎที่อยู่ต้น ๆ ก็ถูกกลบความสำคัญลงเรื่อย ๆ พอถึงช่วงท้ายงาน โมเดลอาจ "ลืม" ข้อที่คุณคิดว่าสำคัญที่สุดไปแล้ว
- มันตีความและชั่งน้ำหนักเอง: กฎที่เขียนกว้าง ๆ อย่าง "เขียนโค้ดให้สะอาด" หรือ "ระวังเรื่องความปลอดภัย" เปิดช่องให้ตีความได้หลายแบบ สิ่งที่คุณหมายถึงกับสิ่งที่มันเข้าใจอาจคนละเรื่อง
- กฎเยอะจนขัดกันเอง: พอ
CLAUDE.mdยาวเป็นหน้า ๆ มีสิบยี่สิบข้อ บางข้อก็ขัดกันเองในบางสถานการณ์ โมเดลต้องเลือกข้างหนึ่ง และมันอาจไม่เลือกข้างที่คุณอยากได้
สังเกตว่าทั้งสามข้อนี้ไม่ใช่ "โมเดลห่วย" แต่เป็นธรรมชาติของการเอา prose ไปเป็นกฎ — มันยืดหยุ่นเกินกว่าจะการันตีอะไรได้แน่นอน เรื่องที่บริบทยาวแล้วคุณภาพตกตอนท้าย ผมเล่าไว้ละเอียดในการแตกงานเป็น subagent ซึ่งก็มาจากรากปัญหาเดียวกัน
ทำไมมันสำคัญกับเรา: ในมุมคนทำ risk นี่คือ "control ที่พึ่งพาไม่ได้" — control ที่ทำงานบ้างไม่ทำงานบ้างตามสภาพบริบท ใช้เป็นหลักประกันไม่ได้ ต้องมีของที่แข็งกว่ามารองรับ
ของที่ "ห้ามพลาด" ต้องบังคับ ไม่ใช่ฝากความหวัง
ทางออกไม่ใช่เลิกใช้ CLAUDE.md แต่คือ ย้ายของที่พลาดไม่ได้ออกจาก prose ไปไว้ในกลไกที่บังคับใช้จริง ใน Claude Code กลไกนั้นคือ hooks — คำสั่งที่ harness รันให้เองทุกครั้งตามจังหวะที่กำหนด ไม่ว่าโมเดลจะ "อยาก" ทำตามหรือไม่
ต่างกันตรงนี้: ถ้าคุณเขียนใน CLAUDE.md ว่า "ต้องรันเทสต์ก่อน commit เสมอ" นั่นคือการขอ แต่ถ้าคุณตั้ง hook ที่บล็อก commit เมื่อเทสต์ยังไม่ผ่าน นั่นคือการบังคับ — อันแรกพึ่งความตั้งใจของโมเดล อันหลังพึ่งกลไกที่ทำงานเสมอ หลักการนี้คือสิ่งที่ผมเรียกว่า "บังคับใช้ ชนะ ความตั้งใจ" และเป็นแก่นเดียวกับที่ผมเขียนไว้ในsession ritual และ hook ของ Claude Code
กลไกบังคับพวกนี้ — hook, gate, permission, การจำกัดสิทธิ์ — จริง ๆ แล้วคือส่วนหนึ่งของ harness ที่หุ้มโมเดลอยู่ ใครยังไม่เห็นภาพรวมว่า harness ประกอบด้วยอะไรบ้าง ผมแยกอธิบายไว้ในHarness คืออะไร และมีหลักฐานปี 2026 ว่าทำไมชั้นนี้สำคัญพอ ๆ กับตัวโมเดลในAgent Harness สำคัญพอ ๆ กับตัวโมเดล
ทำไมมันสำคัญกับเรา: control ที่ผู้ตรวจหรือหัวหน้าทีม risk ยอมรับได้ ต้องเป็นกลไกที่ทำงานเสมอและตรวจสอบย้อนได้ ไม่ใช่ "เราเขียนไว้ใน CLAUDE.md แล้วว่าห้ามทำ" — คำตอบแบบหลังไม่มีน้ำหนักเลยในห้องตรวจ
แล้ว CLAUDE.md ควรใส่อะไร
ถามแบบนี้แปลว่าคุณเข้าใจถูกแล้ว — CLAUDE.md มีประโยชน์มากเมื่อใช้ให้ถูกหน้าที่ มันเหมาะกับ การให้บริบทและทิศทาง สิ่งที่ช่วยให้โมเดลตัดสินใจได้ดีขึ้น แต่ไม่ใช่สิ่งที่พังแล้วเสียหายหนัก เช่น:
- บริบทของโปรเจกต์ — โครงสร้าง คำศัพท์เฉพาะ สิ่งที่โมเดลควรรู้ก่อนเริ่ม
- สไตล์และความชอบ — เขียนโค้ดแนวไหน ตอบยาวหรือสั้น ใช้ไลบรารีตัวไหน
- ทางลัดที่ช่วยงาน — คำสั่งที่ใช้บ่อย ที่อยู่ของไฟล์สำคัญ
หลักง่าย ๆ ที่ผมยึดคือ ถ้าข้อนั้น "ทำตามได้ก็ดี ไม่ได้ก็ไม่ถึงตาย" ใส่ใน CLAUDE.md ได้เลย แต่ถ้าข้อนั้น "พลาดแล้วเสียหาย" ต้องย้ายไปอยู่ใน hook หรือ gate เสมอ อย่าปล่อยให้ของสำคัญลอยอยู่ในไฟล์ที่ไม่มีใครบังคับใช้
ทำไมมันสำคัญกับเรา: การแยกสองอย่างนี้ออกจากกันชัด ๆ — "บริบท" กับ "กฎที่ต้องบังคับ" — คือก้าวแรกที่ทำให้คุณออกแบบให้ AI ทำงานแทนได้โดยที่ยังคุมความเสี่ยงอยู่ ไม่ใช่ปล่อยทุกอย่างไว้ในกองเดียวแล้วหวังว่ามันจะทำครบ
สรุป: เขียนกฎไว้ ≠ การันตีว่าทำ
CLAUDE.md เป็นเครื่องมือที่ดีสำหรับให้บริบทและทิศทาง แต่มันไม่ใช่คำสัญญา โมเดลอ่านมันในฐานะคำแนะนำ ไม่ใช่คำสั่งที่ขัดไม่ได้ ของที่พลาดไม่ได้จริง ๆ ต้องบังคับด้วยกลไกในตัว harness — hook, gate, permission — ที่ทำงานเสมอไม่ว่าโมเดลจะตัดสินใจยังไง (ส่วนกฎที่เป็น "บริบท" ซึ่งยังอยู่ใน CLAUDE.md ก็ออกแบบให้ทนทานขึ้นได้ ผมแยกวิธีเขียน CLAUDE.md ให้กฎรอด context compactionไว้อีกชิ้น) นี่คือเหตุผลที่ผมไม่เคยฝากเรื่องสำคัญไว้กับความตั้งใจของโมเดล แต่ฝากไว้กับกลไกที่ผมตรวจสอบได้ ทักษะนี้ยิ่งจำเป็นถ้าคุณทำงานสายการเงินหรือ risk ที่ความผิดพลาดเดินทางเร็วและซ่อนตัวเก่ง
ส่วนวิธีตั้ง hook และ gate ที่ผมใช้บังคับ "ของห้ามพลาด" จริง ๆ ในงานประจำวัน — ตั้งแต่ด่านเปิด ด่านระหว่างทาง ไปจนด่านปิดที่ให้มันตรวจงานตัวเอง — ผมเก็บโครงและตัวอย่างที่ก็อปไปปรับใช้ได้เลยไว้ในคอร์ส Claude Code ใครอยากเลิกฝากความหวังไว้กับ prose แล้วเปลี่ยนมาใช้กลไกที่บังคับได้จริง เริ่มจากตรงนั้นได้