บล็อก

กู้คืน Claude Code: Safe Mode, /cd และโมเดลสำรอง

Markdown

วินิจฉัย Claude Code ด้วย safe mode คำสั่ง /cd โมเดลสำรอง และการกู้คืนการตั้งค่า ลำดับการตรวจสอบและข้อจำกัดเดิม

อ่านบทความฉบับเต็ม

สื่อเชิงปฏิบัติเกี่ยวกับการทำงานกับเอเจนต์: เอกสารประกอบ Ailoot.

Claude Code เปลี่ยนแปลงอะไรในเดือนมิถุนายน 2026?

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

เมื่อวันที่ 8 มิถุนายน 2026 ใน Claude Code v2.1.169 Anthropic เพิ่มแฟล็ก --safe-mode และคำสั่ง /cd สองวันก่อนหน้านั้น v2.1.166 เปิดตัวโมเดลสำรอง ซึ่งกำหนดเป็นสายโซ่ได้สูงสุด 3 โมเดล คุณสมบัติทั้งสามนี้ตอบโจทย์ปัญหาที่นักพัฒนา vibe coding พบมากที่สุด: “ทุกอย่างพังไปหมด ไม่รู้ว่าใครเป็นต้นเหตุ และไม่อยากเสียเวลาหนึ่งชั่วโมงติดตั้งใหม่”

ก่อนหน้านี้ เมื่อ Claude Code เริ่มทำงานผิดปกติ—ตัวหมุนโหลดไม่หยุด โปรแกรมขัดข้องตอนเริ่มทำงาน เอเจนต์ไม่สนใจกฎใน CLAUDE.md หรือ hook ไม่ทำงานโดยไม่มีสัญญาณใด ๆ—มีทางแก้เพียงทางเดียว: ใส่คอมเมนต์ให้บางส่วนของ .claude/settings.json ด้วยตนเอง ปิดเซิร์ฟเวอร์ MCP ทีละตัว หรือกรณีเลวร้ายที่สุด ลบ ~/.claude แล้วติดตั้งใหม่ ในกรณีหนึ่งที่อธิบายไว้ มีการลบ ~/.claude ทำให้การตั้งค่าเซิร์ฟเวอร์ MCP ซึ่งใช้เวลาประกอบขึ้นมาหนึ่งชั่วโมงครึ่งสูญหาย ภายหลังจึงทราบว่ามีบรรทัดหนึ่งใน CLAUDE.md เป็นต้นเหตุ และสามารถค้นพบได้ใน 10 วินาที—แต่กว่าจะรู้ก็ต้องกู้คืนทั้งหมดก่อน

ในเดือนมิถุนายน 2026 Anthropic เปิดตัวกลไกสามอย่างที่เปลี่ยนสถานการณ์นี้ สรุปสิ่งที่เพิ่มเข้ามาและเวลาที่เปิดตัว:

เวอร์ชันวันที่สิ่งที่เพิ่มเข้ามา
2.1.1666 มิถุนายน 2026การตั้งค่า fallbackModel + แฟล็ก --fallback-model สำหรับเซสชันแบบโต้ตอบ
2.1.1698 มิถุนายน 2026แฟล็ก --safe-mode และตัวแปรสภาพแวดล้อม CLAUDE_CODE_SAFE_MODE, คำสั่ง /cd
2.1.17612 มิถุนายน 2026แก้ไข: /cd และการสลับ worktree ไม่แสดงสาขา git เดิมอีกต่อไป

ด้านล่างนี้จะอธิบายแต่ละกลไกทีละขั้นตอน พร้อมลำดับการใช้งานเมื่อเซสชัน Claude Code เริ่มผิดเพี้ยน

อะไรทำให้ Claude Code พังบ่อยที่สุด?

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

จากประสบการณ์ที่อธิบายไว้ โดยทั่วไป Claude Code พังสำหรับนักพัฒนา vibe coding เพราะสี่สาเหตุ: CLAUDE.md ที่ยาวเกินไปและมีกฎขัดแย้งกัน, hook ที่ใช้ exit code ไม่ถูกต้อง, เซิร์ฟเวอร์ MCP ที่ล้มเหลวโดยไม่มีข้อความแจ้ง และการตั้งค่า settings.json สามระดับที่ทับซ้อนกัน มีต้นเหตุอยู่หนึ่งอย่าง การวินิจฉัยใช้เวลาไม่กี่นาที แต่ความตื่นตระหนกทำให้คนรีบใช้ rm -rf ทันที

ในตัวอย่างที่อธิบายไว้ ตอนแรก CLAUDE.md มี 80 บรรทัด—และใช้งานได้อยู่หนึ่งเดือน พอถึงเดือนที่สองก็เริ่มเห็นว่า Claude ละเมิดกฎทั้งหมดที่ตั้งไว้สัปดาห์ละครั้ง: แตะ .env, เรียกใช้ git push --force, คุ้ยดูใน node_modules ไม่ใช่เพราะเจตนาร้าย—แค่ลืม ครั้งหนึ่ง .gitignore ถูกลบ และไม่มีใครรู้สาเหตุในทันที สถานการณ์นี้อธิบายละเอียดขึ้นในคู่มือ CLAUDE.md

เมื่อ CLAUDE.md ยาวถึง 400+ บรรทัด ก็เริ่มสร้างปัญหาโดยไม่มีสัญญาณชัดเจน: ใช้พื้นที่ส่วนสำคัญของหน้าต่างบริบทตอนเริ่มเซสชัน และทำให้คำสั่งสำคัญเจือจางไปกับคำสั่งรอง Claude ยังคงอ่านไฟล์นี้ตามปกติ จึงดูจากภายนอกเหมือนว่า “มีกฎอยู่ แต่ใช้ไม่ได้”—เป็นสัญญาณทั่วไปของข้อกำหนดที่ยาวเกินไป

Hooks เป็นสาเหตุที่พบบ่อยอันดับสอง Claude Code hooks มีข้อควรรู้ข้อหนึ่งที่ Anthropic ไม่ได้เน้นย้ำ

กล่าวคือ sys.exit(1) ใน hook ของ Python (หรือ “ล้มเหลวพร้อมข้อผิดพลาด” ตามธรรมเนียมของ Unix) จะไม่หยุด Claude มีเพียง code 2 เท่านั้นที่บล็อกได้ ในกรณีที่อธิบายไว้ hook ถูกมองว่าเป็น “ข้อห้ามเด็ดขาด” แต่ในทางปฏิบัติมันเพียงบันทึกคำร้องเรียนและปล่อยให้ดำเนินการต่อ

เซิร์ฟเวอร์ MCP เป็นชั้นที่สาม และก็อาจมีปัญหาในแบบของตัวเอง

อาการมักเหมือนกัน: มีคำสั่ง MCP ให้ใช้งาน แต่กลับส่ง failed โดยไม่มี traceback ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า MCP และเพิ่มเซิร์ฟเวอร์ด้วย claude mcp add ได้ในคู่มือแยกต่างหาก

สาเหตุที่สี่คือโครงสร้างลำดับชั้นสามระดับของ settings.json คุณมี ~/.claude/settings.json (ระดับผู้ใช้), .claude/settings.json ที่รากโปรเจกต์ (ระดับโปรเจกต์), .claude/settings.local.json (ระดับเฉพาะเครื่อง) และอาจมีการตั้งค่าที่ผู้ดูแลระบบขององค์กรจัดการด้วย ระบบจะรวมการตั้งค่าเหล่านี้ตามกฎลำดับความสำคัญ เมื่อมีคนเพิ่มเซิร์ฟเวอร์ MCP ที่ระดับโปรเจกต์ ขณะที่คุณมีรายการคล้ายกันแต่ตั้งค่าการเปิดใช้งานต่างกันที่ระดับผู้ใช้ ก็จะเกิดข้อขัดแย้งเงียบ ๆ ซึ่งดูเหมือนว่า “Claude Code พัง”

--safe-mode ทำงานอย่างไร และปิดอะไรบ้าง?

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

claude --safe-mode เริ่ม Claude Code โดยปิดการปรับแต่งทั้งหมด: CLAUDE.md, ปลั๊กอิน, สกิล, hooks, เซิร์ฟเวอร์ MCP, คำสั่งผู้ใช้, เอเจนต์, รูปแบบเอาต์พุต, เวิร์กโฟลว์ และคีย์ลัด การยืนยันตัวตน การเลือกโมเดล เครื่องมือในตัว และสิทธิ์การใช้งานยังคงอยู่ นี่คือเครื่องมือวินิจฉัย: หากปัญหาหายไปใน safe mode แสดงว่าหนึ่งในชั้นที่คุณเพิ่มเข้าไปเป็นต้นเหตุ

ข้อความต้นฉบับของ Anthropic ในบันทึกการเปลี่ยนแปลง v2.1.169 ระบุว่า:

เพิ่มแฟล็ก --safe-mode (และ CLAUDE_CODE_SAFE_MODE) สำหรับเริ่ม Claude Code โดยปิดการปรับแต่ง (CLAUDE.md, ปลั๊กอิน, สกิล, hooks, เซิร์ฟเวอร์ MCP) เพื่อใช้ในการวินิจฉัย

— บันทึกการเปลี่ยนแปลง Anthropic Claude Code, https://code.claude.com/docs/en/changelog

Anthropic ชี้แจงไว้ในเอกสารการกำหนดค่าโมเดลว่า:

หากต้องการตรวจสอบว่าการปรับแต่งเป็นต้นเหตุหรือไม่ ให้เริ่มเซสชันด้วย claude --safe-mode ซึ่งจะปิด CLAUDE.md, สกิล, เซิร์ฟเวอร์ MCP และ hooks สถานะ Git และชื่อไดเรกทอรีไม่ถือเป็นการปรับแต่ง จึงยังใช้งานได้

— เอกสาร Anthropic - การกำหนดค่าโมเดล, https://code.claude.com/docs/en/model-config

นี่คือเครื่องมือวินิจฉัย ไม่ใช่ “สภาพแวดล้อมสะอาด” safe mode ช่วยตอบคำถามหนึ่งข้อ: ปัญหาเกิดจากพฤติกรรมพื้นฐานของ Claude Code หรือเกิดจากการปรับแต่งที่เพิ่มเข้าไป? เรื่องนี้เป็นส่วนหนึ่งของการจัดการบริบท—การควบคุมสิ่งที่ Claude มองเห็นและไม่เห็นในแต่ละช่วง หากทุกอย่างทำงานใน safe mode ก็ชัดเจนว่าควรตรวจสอบแต่ละชั้นด้วยการค้นหาแบบแบ่งครึ่ง หากยังไม่ทำงาน ปัญหาอยู่ที่ตัวการติดตั้ง การยืนยันตัวตน เครือข่าย หรือโครงสร้างพื้นฐาน และควรตรวจสอบ claude doctor กับบันทึกการทำงาน

สิ่งที่ safe mode ปิด (รายการทางการของ Anthropic—5 ชั้นหลัก):

  • CLAUDE.md ทุกระดับ (ผู้ใช้ / โปรเจกต์)
  • ปลั๊กอิน
  • สกิล
  • Hooks
  • เซิร์ฟเวอร์ MCP

สิ่งที่ยังทำงานได้:

  • การยืนยันตัวตน (เซสชัน OAuth หรือคีย์ API ของคุณ)
  • การเลือกโมเดล (--model sonnet, --model opus)
  • เครื่องมือในตัว (Read, Write, Bash, Grep และอื่น ๆ)
  • สิทธิ์การใช้งาน
  • สถานะ Git
  • ชื่อไดเรกทอรี

รายละเอียดสำคัญ: safe mode ไม่ปิดการตั้งค่าที่ผู้ดูแลระบบองค์กรจัดการหรือนโยบายขององค์กร หากคุณทำงานในทีมที่ใช้ Bedrock GovCloud หรือการตั้งค่า MDM เพื่อกำหนด availableModels ข้อจำกัดเหล่านั้นยังคงมีผล—safe mode ปิดเฉพาะการปรับแต่งของคุณ ไม่ใช่นโยบายองค์กร

จะแยกชั้นและหาต้นเหตุภายใน 60 วินาทีได้อย่างไร?

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

ขั้นที่ 1: เรียกใช้ claude --safe-mode ในโฟลเดอร์เดียวกับที่เกิดปัญหา หากใช้ได้ แสดงว่าปัญหาอยู่ในการปรับแต่งของคุณ จากนั้นเปิดใช้ทีละอย่าง: CLAUDE.md -> hooks -> MCP -> สกิล หากยังใช้ไม่ได้แม้ใน safe mode ปัญหาอยู่ที่การยืนยันตัวตน เวอร์ชัน เครือข่าย หรือระบบปฏิบัติการ ในกรณีนั้นให้เรียกใช้ claude doctor เพื่อวินิจฉัยอัตโนมัติ โดยไม่แตะ rm -rf

ขั้นตอนวินิจฉัยเมื่อ Claude Code “หยุดฟังคำสั่ง” เวอร์ชันขั้นต่ำสำหรับคำสั่งทั้งหมดด้านล่างคือ Claude Code v2.1.169 หากเวอร์ชันของคุณเก่ากว่านี้ ให้อัปเดตก่อน (npm update -g @anthropic-ai/claude-code หรือใช้ตัวติดตั้งดั้งเดิมของ Anthropic)

  1. เปิดโฟลเดอร์เดียวกับที่เกิดปัญหา
  2. เรียกใช้ claude --safe-mode
  3. หากเริ่มทำงานได้อย่างเรียบร้อย ให้ตรวจสอบคำขอเดิมของคุณ ใช้งานได้ไหม? ถ้าได้ แสดงว่ามีชั้นหนึ่งเป็นต้นเหตุ ไปขั้นที่ 4
  4. หากยังมีปัญหาใน safe mode อย่าแตะไฟล์การตั้งค่า ให้เรียกใช้ claude doctor ก่อน แล้วตรวจสอบการยืนยันตัวตน เวอร์ชัน และการติดตั้งที่ขัดแย้งกัน

เมื่อ safe mode เริ่มทำงานได้อย่างเรียบร้อย ให้เปิดแต่ละชั้นทีละอย่าง โดยเริ่มจากตัวการที่น่าจะเป็นไปได้มากที่สุด ลำดับนี้อิงจากประสบการณ์ที่อธิบายไว้:

  1. CLAUDE.md. เรียกใช้ claude โดยไม่ใช้ safe mode แต่เปลี่ยนชื่อไฟล์ชั่วคราว: mv CLAUDE.md CLAUDE.md.bak หากใช้งานได้ แสดงว่าไฟล์นี้เป็นต้นเหตุ จากนั้นใช้การค้นหาแบบแบ่งครึ่งได้ โดยเก็บบรรทัดไว้ครึ่งหนึ่งแล้วตรวจสอบ
  2. Hooks. เปิด .claude/settings.json แล้วตั้งค่า [] ชั่วคราวในส่วน hooks เริ่ม claude ใหม่ ใช้ได้หรือไม่? ถ้าได้ แสดงว่า hook ตัวหนึ่งเป็นต้นเหตุ เปิดใช้งานทีละตัว
  3. เซิร์ฟเวอร์ MCP. ในทำนองเดียวกัน ให้ตั้งค่าส่วน mcpServers ใน ~/.claude.json หรือ .claude/settings.json เป็นออบเจ็กต์ว่างชั่วคราว แล้วเริ่มใหม่และตรวจสอบ
  4. สกิล. ย้าย .claude/skills/ ไปยังโฟลเดอร์ชั่วคราว แล้วเปิดโปรแกรมและตรวจสอบ

“การเปลี่ยนชื่อชั่วคราว” หมายถึงไม่ได้ลบไฟล์ระหว่างวินิจฉัย mv หรือ git stash ช่วยให้กู้คืนทุกอย่างได้ด้วยคำสั่งเดียว หากพบว่าชั้นนั้นไม่ใช่ต้นเหตุ

จะเปลี่ยนโฟลเดอร์ทำงานด้วย /cd โดยไม่เสียบริบทได้อย่างไร?

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

คำสั่ง /cd <path> ใน Claude Code 2.1.169+ เปลี่ยนโฟลเดอร์ทำงานของเซสชันที่กำลังใช้อยู่โดยไม่ทำให้แคชพรอมป์ต์หาย มีประโยชน์เมื่อการตั้งค่าของโปรเจกต์ปัจจุบันเสีย: คุณสามารถย้ายไปยังโฟลเดอร์สะอาด ตรวจสอบว่า Claude ทำงานได้ แล้วกลับมา ก่อนหน้านี้ต้องปิดเซสชันแล้วเริ่มใหม่

จากบันทึกการเปลี่ยนแปลง v2.1.169 เมื่อวันที่ 8 มิถุนายน:

เพิ่มคำสั่ง /cd เพื่อเปลี่ยนเซสชันไปยังโฟลเดอร์ทำงานใหม่ โดยไม่รีเซ็ตแคชพรอมป์ต์ระหว่างเซสชัน

— บันทึกการเปลี่ยนแปลง Anthropic Claude Code, https://code.claude.com/docs/en/changelog

ทำไมจึงมีประโยชน์ตอนแก้ปัญหา สมมติว่าคุณอยู่ในโฟลเดอร์โปรเจกต์ ~/work/myapp และ Claude Code ทำงานผิดปกติ ก่อนหน้านี้วิธีเดียวที่จะตรวจสอบว่า “มันทำงานได้หรือเปล่า?” คือปิดเซสชัน ย้ายไปโฟลเดอร์อื่น แล้วเริ่มใหม่ คุณจะเสียบริบท ประวัติ และแคชพรอมป์ต์ที่เตรียมไว้ ตอนนี้ทำได้ดังนี้:

# ในเซสชันเดิม:
/cd ~/sandbox/test

Claude จะย้ายไปยังโฟลเดอร์ใหม่และอ่าน CLAUDE.md ของโฟลเดอร์นั้น (ถ้ามี) ในฐานะข้อความ ไม่ใช่แทนที่ system prompt—หมายความว่าแคชยังคงอยู่ หากทุกอย่างทำงานใน ~/sandbox/test ก็ชัดเจนว่าปัญหาอยู่ในการตั้งค่าของ ~/work/myapp

เมื่อวันที่ 12 มิถุนายน v2.1.176 แก้การถดถอยที่น่ารำคาญอย่างหนึ่ง—/cd แสดงสาขา git เดิมจนกว่าจะเริ่มระบบใหม่ทั้งหมด หากเวอร์ชันของคุณเก่ากว่านี้ ให้อัปเดต หรือไม่ก็ละเลย git status ในข้อความแรก ๆ หลังเปลี่ยนโฟลเดอร์ เพราะเดี๋ยวก็อัปเดตตาม

จะตั้งค่าโมเดลสำรองสำหรับข้อผิดพลาด 529 ได้อย่างไร?

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

ใน v2.1.166 Anthropic เพิ่ม fallbackModel ซึ่งเป็นสายโซ่ของโมเดลสูงสุด 3 ตัว ที่จะลองใช้ตามลำดับเมื่อโมเดลหลักมีโหลดสูงหรือไม่พร้อมใช้งาน สายโซ่นี้จะเริ่มทำงานเฉพาะเมื่อเกิดข้อผิดพลาดจากเซิร์ฟเวอร์ที่มีโหลดสูงและไม่สามารถลองใหม่ได้ ข้อผิดพลาดด้านการยืนยันตัวตน การเรียกเก็บเงิน การจำกัดอัตรา และการขนส่ง จะไม่เรียกใช้สายโซ่สำรอง แต่จะใช้ตรรกะการลองใหม่ตามปกติ

ในสถานการณ์ที่อธิบายไว้ มีงานยาวที่รันบน Opus ในโปรเจกต์สัปดาห์ละครั้ง หลังผ่านไป 10 นาที API ส่ง 529 Overloaded กลับมาและเซสชันก็ขัดข้อง ก่อนหน้านี้ต้องรอหรือสลับไป Sonnet ด้วยตนเองโดยใช้ --model sonnet และเสียบริบททั้งหมดที่เตรียมไว้ ใน business/ ขนาดใหญ่ที่จัดโครงสร้างแบบ second-brain งานนี้ใช้เวลาประมาณยี่สิบนาที ตอนนี้มีกลไกที่เหมาะสมแล้ว

คำพูดตรงจากเอกสารทางการ:

เมื่อโมเดลหลักมีโหลดสูง ไม่พร้อมใช้งาน หรือส่งข้อผิดพลาดจากเซิร์ฟเวอร์อื่นที่ไม่สามารถลองใหม่ได้ Claude Code สามารถสลับไปใช้โมเดลสำรองแทนที่จะทำให้คำขอล้มเหลว ข้อผิดพลาดด้านการยืนยันตัวตน การเรียกเก็บเงิน การจำกัดอัตรา ขนาดคำขอ และการขนส่ง จะไม่ทำให้เกิดการสลับโมเดล แต่จะดำเนินการตามเส้นทางการลองใหม่และจัดการข้อผิดพลาดตามปกติ

— เอกสาร Anthropic - การกำหนดค่าโมเดล, https://code.claude.com/docs/en/model-config

และอีกส่วนหนึ่ง อธิบายการทำงานของสายโซ่:

กำหนดโมเดลสำรองหนึ่งตัวหรือมากกว่า แล้ว Claude Code จะลองใช้ตามลำดับ พร้อมแสดงการแจ้งเตือนเมื่อสลับโมเดล การสลับมีผลเฉพาะเทิร์นปัจจุบัน—ข้อความถัดไปจะลองใช้โมเดลหลักอีกครั้ง สายโซ่จำกัดไว้ที่สามโมเดลหลังตัดรายการซ้ำ โดยไม่สนใจรายการที่เกินมา

— เอกสาร Anthropic - การกำหนดค่าโมเดล, https://code.claude.com/docs/en/model-config

มีสองวิธีในการตั้งค่า ผ่าน CLI:

claude --fallback-model sonnet,haiku

ผ่าน ~/.claude/settings.json:

{
  "fallbackModel": ["claude-sonnet-4-6", "claude-haiku-4-5"]
}

รายละเอียดอีกข้อเกี่ยวกับการจำกัดอัตรา Anthropic ตั้งใจไม่ส่งข้อผิดพลาด 429 ต่อไปตามสายโซ่ เพื่อไม่ให้ข้ามขีดจำกัดคำขอด้วยการสลับไปโมเดลถัดไป ระบบสำรองทำงานเฉพาะเมื่อโมเดลหลักมีโหลดสูง ไม่พร้อมใช้งาน หรือส่งข้อผิดพลาดจากเซิร์ฟเวอร์ที่ไม่สามารถลองใหม่ได้ (เช่น 529 Overloaded) ส่วนการจำกัดอัตราจะใช้การลองใหม่และการหน่วงเวลาแบบ backoff ตามปกติ

อีกประเด็นหนึ่ง—วันที่ 12 มิถุนายน v2.1.174 แก้การถดถอยที่การบีบอัดบริบทไม่เคารพ --fallback-model หากคุณมีเซสชันยาวที่ถูกบีบอัดระหว่างระบบมีโหลดสูง ก่อนการแก้ไขนี้จะไม่มีการเรียกใช้โมเดลสำรอง หากทำงานกับเซสชันยาว (/compact, /loop ข้ามคืน) ให้อัปเดตเป็น v2.1.174 ขึ้นไป

ควรแก้อะไรเมื่อ CLAUDE.md, hook, MCP หรือสกิลเป็นต้นเหตุ?

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

เมื่อ safe mode ระบุชั้นที่เป็นต้นเหตุได้ วิธีแก้จะแตกต่างกันไปตามชั้นนั้น สำหรับ CLAUDE.md ให้ค้นหาแบบแบ่งครึ่งหรือย้อนกลับไปใช้เทมเพลตสำเร็จรูปที่มีน้อยกว่า 200 บรรทัด สำหรับ hook ให้ตรวจสอบ exit code (2 บล็อก แต่ 1 ไม่บล็อก) และตรรกะ สำหรับ MCP ให้ลบเซิร์ฟเวอร์หนึ่งตัวแล้วตรวจสอบ สำหรับสกิล ให้ตรวจดู SKILL.md ว่ามีกฎขัดแย้งกับ CLAUDE.md หรือไม่

กลยุทธ์เฉพาะสำหรับแต่ละชั้น

หาก CLAUDE.md เป็นต้นเหตุ

เปิดไฟล์และตรวจสอบขนาด จากประสบการณ์ที่อธิบายไว้ ให้ CLAUDE.md ที่ใช้งานอยู่มีไม่เกิน 200 บรรทัด ย้ายส่วนที่เหลือไปไว้ในเราเตอร์และเอกสารประกอบข้างโปรเจกต์ (โครงสร้าง second-brain ฉบับเต็มอยู่ในคู่มือ second brain) หากมี 400+ บรรทัด เกือบจะแน่นอนว่าเป็นต้นเหตุ ขั้นตอน:

  1. สำรองไฟล์: cp CLAUDE.md CLAUDE.md.full.
  2. ย้อนกลับไปใช้เทมเพลตสั้นที่ใช้งานได้ มีเทมเพลตพร้อมใช้ในคู่มือ “วิธีกำหนดค่า CLAUDE.md”
  3. เริ่ม Claude Code ใหม่ แล้วตรวจสอบ
  4. หากใช้งานได้ ให้คืนกฎกลับมาทีละบล็อกเล็ก ๆ บล็อกละ 10–20 บรรทัด และตรวจสอบหลังแต่ละบล็อก
  5. หาบล็อกที่ทำให้พฤติกรรมผิดปกติ แล้วเขียนใหม่เป็น hook โดยใช้ exit code ที่ถูกต้อง (อธิบาย exit code ของ hooks ไว้ในหัวข้อย่อยถัดไปของ H2 นี้)

หาก hook เป็นต้นเหตุ

คำถามหลักคือ exit code ถูกต้องหรือไม่ Claude Code hooks ใช้ค่าเหล่านี้:

  • Exit 0 — ทุกอย่างเรียบร้อย ดำเนินการต่อ
  • Exit 1 — เป็นข้อผิดพลาด แต่ไม่บล็อก Claude ทำงานต่อเหมือนไม่มีอะไรเกิดขึ้น
  • Exit 2 — เป็นข้อผิดพลาดแบบบล็อก มีเพียงค่านี้ที่หยุดการทำงานจริง

หากเขียน sys.exit(1) หรือ exit 1 ใน shell hook โดยคิดว่าจะบล็อก โค้ดนี้ใน Claude Code จะทำหน้าที่เหมือนบันทึกคำเตือนโดยไม่หยุดการทำงาน เปลี่ยนเป็น 2 ดูรายละเอียดเกี่ยวกับ hooks และการกำหนดค่าโดยไม่เจอปัญหานี้ได้ในคู่มือแยกต่างหาก

กรณีที่พบบ่อยเป็นอันดับสองคือ hook ส่ง JSON ที่ไม่ถูกต้องออกทาง stdout Claude Code แยกวิเคราะห์การตอบกลับของ hook เป็น JSON และหากมีข้อมูลอื่นปะปน (บันทึก เครื่องหมายแสดงความคืบหน้า อีโมจิ) hook จะถือว่าล้มเหลวและการทำงานจะดำเนินต่อ กฎคือ stdout ต้องมีเฉพาะ JSON ส่วนอย่างอื่นส่งไปที่ stderr

กรณีที่สามคือ hook อ่านข้อมูลจาก ~/.claude/ ที่ safe mode ซ่อนไว้ นี่เป็นสถานการณ์ปกติ วิธีแก้ไม่ใช่การแก้ hook แต่ให้ตรวจสอบ os.environ.get('CLAUDE_CODE_SAFE_MODE') ที่จุดเริ่มต้น แล้วออกด้วย 0

หากเซิร์ฟเวอร์ MCP เป็นต้นเหตุ

อาการ: มีคำสั่ง MCP ให้ใช้ แต่ส่ง failed โดยไม่มี traceback ที่ชัดเจน ขั้นตอน:

  1. เรียกใช้ claude mcp list—มีเซิร์ฟเวอร์ใดกำหนดไว้บ้าง?
  2. ปิดเซิร์ฟเวอร์ทีละตัวใน ~/.claude.json: เปลี่ยนชื่อคีย์ claude-server-A เป็น _claude-server-A (วิธีนี้ปิดใช้งานโดยไม่ลบ)
  3. เริ่ม claude ใหม่ แล้วตรวจสอบว่าการเรียกใดทำงาน
  4. เมื่อพบเซิร์ฟเวอร์ต้นเหตุ ให้ตรวจสอบบันทึกของเซิร์ฟเวอร์นั้น: claude mcp logs <name>.
  5. หากเป็นเซิร์ฟเวอร์ของบุคคลที่สาม (@modelcontextprotocol/server-postgres และอื่น ๆ ที่คล้ายกัน) ให้ตรวจว่ามีรุ่นใหม่ออกมาหรือไม่ ระบบนิเวศ MCP ยังผันผวน เซิร์ฟเวอร์มักพังหลังอัปเดต Claude Code

หากพบว่า “ขัดข้องตอนเริ่มทำงานเฉพาะเมื่อมี MCP สองตัว” ให้เปรียบเทียบการทำงานใน safe mode โดยไม่มี MCP

หากสกิลเป็นต้นเหตุ

สกิลประกอบด้วย SKILL.md และโค้ดใน .claude/skills/<name>/ อาการ: Claude ไม่สนใจสกิล เรียกใช้ผิดเวลา หรือเรียกใช้แล้วสร้างผลลัพธ์ที่แย่ ขั้นตอน:

  1. เปิด SKILL.md ตรวจสอบคำอธิบาย—ควรยาว 1–2 ประโยค และระบุให้ชัดเจนว่าควรใช้เมื่อใด หากเขียนว่า “ตัวช่วยอเนกประสงค์สำหรับทุกอย่าง” Claude จะไม่เข้าใจว่าควรเรียกใช้ตอนไหน
  2. ตรวจสอบว่าขัดแย้งกับ CLAUDE.md หรือไม่ หาก CLAUDE.md ระบุว่า “เขียนเทสต์ทุกครั้ง” แต่คำอธิบายสกิลระบุว่า “ใช้สำหรับทำต้นแบบอย่างรวดเร็วโดยไม่ต้องมีเทสต์” นั่นคือความขัดแย้ง
  3. หากสกิลใช้คำสั่งภายนอก (npm, python, git) ให้ตรวจสอบว่าคำสั่งเหล่านั้นพร้อมใช้งานใน PATH ทั้งระบบหรือไม่ สกิลมีสภาพแวดล้อมขั้นต่ำของตัวเอง

หาก Safe Mode ไม่ช่วย: วินิจฉัยและเก็บสถานะก่อนซ่อม

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

หาก safe mode ล้มเหลว ยังอาจเป็นการติดตั้ง การยืนยันตัวตน เครือข่าย หรือโครงสร้างพื้นฐาน รัน claude doctor แล้วตรวจหลักฐาน รายงานที่ไม่ชัดไม่ใช่เหตุผลลบค่าหรือเซสชัน ต้องเก็บและตรวจสถานะทั้งหมดก่อน แล้วซ่อมเฉพาะการติดตั้งที่วินิจฉัย

การลบข้อมูลผู้ใช้ไม่ใช่ทางลัดวินิจฉัย ใช้การตรวจด้านล่างหาสาเหตุ หากยังไม่ชัดให้เก็บหลักฐานและตรวจต่อ การซ่อมเริ่มจากสำรองที่ตรวจแล้วและคงบัญชีกับตัวตน credential store เดิม ลำดับคือ:

  1. claude doctor — วินิจฉัยอัตโนมัติ Anthropic เขียนไว้ในเอกสารว่า:

หาก `claude --version` ใช้งานได้ แต่มีอย่างอื่นผิดปกติ ให้เรียกใช้ `claude doctor` เพื่อสร้างรายงานวินิจฉัยอัตโนมัติ

— เอกสาร Anthropic - แก้ไขปัญหาการติดตั้ง, https://code.claude.com/docs/en/troubleshoot-install
  1. ตรวจสอบการติดตั้งที่ขัดแย้งกัน หลายคนติดตั้งทั้งเวอร์ชัน npm แบบ global และตัวติดตั้งดั้งเดิมพร้อมกัน:

การติดตั้ง Claude Code หลายชุดอาจทำให้เวอร์ชันไม่ตรงกันหรือเกิดพฤติกรรมที่ไม่คาดคิด

— เอกสาร Anthropic - แก้ไขปัญหาการติดตั้ง, https://code.claude.com/docs/en/troubleshoot-install
  1. ตรวจสอบว่า ANTHROPIC_API_KEY กำลังแทรกแซงเซสชัน OAuth หรือไม่ นี่เป็นสาเหตุที่พบบ่อยของอาการ “ไม่มีอะไรทำงาน คีย์หมดอายุแล้ว”:

เมื่อกำหนด `ANTHROPIC_API_KEY` และคุณยืนยันคีย์แล้ว Claude Code จะใช้คีย์นั้นแทนข้อมูลรับรอง OAuth สำหรับสมาชิกของคุณ

— เอกสาร Anthropic - แก้ไขปัญหาการติดตั้ง, https://code.claude.com/docs/en/troubleshoot-install

วิธีแก้: เรียกใช้ unset ANTHROPIC_API_KEY ในเซสชัน shell ปัจจุบัน หรือเอาออกจาก ~/.zshrc / ~/.bashrc.

  1. ซ่อมเฉพาะการติดตั้งที่การวินิจฉัยระบุ และเก็บข้อมูลผู้ใช้ทั้งหมดก่อน Safe mode ล้มเหลวหรือ doctor ไม่ได้ข้อสรุปไม่พิสูจน์ว่าต้องลบข้อมูล หยุดเซสชัน Claude และผู้เขียนอื่นทั้งหมดก่อนสำรองให้สอดคล้อง คง Unix account, HOME, credential store ของ OS และบัญชี Anthropic เดิม ห้ามหมุนคีย์หรือสร้างตัวตนทดแทน

ตัวอย่างสำรองนี้สำหรับ Linux ที่มี GNU tar บน macOS หรือ Windows ให้ใช้เครื่องมือที่รักษา ACL, extended attributes, links และ metadata ของแพลตฟอร์ม และตรวจการกู้ก่อนทำต่อ อย่าสมมติว่า flags ของ GNU ใช้ได้ที่อื่น archive มี credentials กับ transcript จึงต้องเก็บส่วนตัวนอก repository

# Run as the same user who owns the Claude state, after stopping writers.
set -eu
umask 077
backup_dir=$(mktemp -d "$HOME/.claude-recovery-XXXXXXXX")
set --
if [ -e "$HOME/.claude" ] || [ -L "$HOME/.claude" ]; then
  set -- "$@" .claude
fi
if [ -e "$HOME/.claude.json" ] || [ -L "$HOME/.claude.json" ]; then
  set -- "$@" .claude.json
fi
[ "$#" -gt 0 ] || exit 1
tar --acls --xattrs --numeric-owner -cpf "$backup_dir/claude-state.tar" -C "$HOME" "$@"
tar --acls --xattrs --compare -f "$backup_dir/claude-state.tar" -C "$HOME"
sha256sum "$backup_dir/claude-state.tar" > "$backup_dir/claude-state.sha256"
(cd "$backup_dir" && sha256sum -c claude-state.sha256)
mkdir "$backup_dir/restore-check"
tar --acls --xattrs -xpf "$backup_dir/claude-state.tar" -C "$backup_dir/restore-check"
tar --acls --xattrs --compare -f "$backup_dir/claude-state.tar" -C "$backup_dir/restore-check"
printf 'Verified recovery directory: %s\n' "$backup_dir"

ทุกคำสั่งต้องสำเร็จ archive ครอบคลุม .claude ทั้งต้น รวมเซสชัน ignored/untracked กับสถานะ plugin และ .claude.json ไม่ใช่แค่ค่าที่ Git ติดตาม หากเป็น symlink หรือข้อมูลอยู่ตำแหน่งตั้งค่าแยก ให้หยุดและรวม target ที่ resolve แล้วในสำรองที่ตรวจเดียวกัน เก็บเพียง link ไม่ได้สำรอง target archive ไม่รวม macOS Keychain หรือ credential store ภายนอก จึงต้องรักษาตัวตนเหล่านั้นไว้

หากการวินิจฉัยระบุชัดว่า legacy local installation เป็นสำเนาที่ขัดกัน ให้ย้ายเฉพาะการติดตั้งนั้นไปโฟลเดอร์กู้ส่วนตัว ไม่ลบค่าตั้งหรือเซสชัน:

# Use the verified backup_dir from the previous block.
if [ -d "$HOME/.claude/local" ]; then
  mv "$HOME/.claude/local" "$backup_dir/legacy-local"
fi

ถอดการติดตั้ง npm เฉพาะเมื่อวินิจฉัยว่าเป็นตัวขัดกันและตั้งใจคง native จากนั้นใช้ตัวติดตั้ง native ตามเอกสาร โดยไม่ลบ .claude หรือ .claude.json:

curl -fsSL https://claude.ai/install.sh | bash
claude --version
claude doctor

คำสั่งติดตั้ง native บน Windows ยังคือ:

irm https://claude.ai/install.ps1 | iex

กู้คืนแยกต่างหาก หยุดผู้เขียนอีกครั้ง ตรวจ checksum และแตกลงโฟลเดอร์กู้ว่างตามข้างต้น เทียบสำเร็จก่อนใช้ หากต้องคืน legacy installation ให้ยืนยันก่อนว่า $HOME/.claude/local ไม่มี แล้วจึงย้าย $backup_dir/legacy-local กลับ path นั้นตรงตัว คืนไฟล์ตั้งค่าที่วินิจฉัยจากสำเนาแตกที่ตรวจแล้วหลังเก็บของปัจจุบันก่อน ห้ามทับทั้งต้นโดยไม่ตรวจ เซสชัน MCP และตัวตนเดิมยังถูกเก็บ Git snapshot อย่างเดียวไม่ครอบคลุม transcript ที่ ignore/untracked, credentials หรือ metadata ระบบไฟล์

ไม่ควรทำอะไรเมื่อ Claude Code พัง?

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

รูปแบบการทำงานที่ไม่ควรทำ 6 อย่างซึ่งพบในกรณีการสนับสนุนที่อธิบายไว้: เปลี่ยนคีย์ก่อนวินิจฉัย รีเซ็ตทั้งหมดเป็นขั้นตอนแรก ตื่นตระหนกเพราะข้อผิดพลาด UI ใน hook เพิ่ม exit code ของ hook ก่อนแก้ตรรกะ แก้ CLAUDE.md โดยไม่มีมาตรการป้องกันจาก safe mode และเชื่อว่า “Claude แก้ MCP ของตัวเองได้” แต่ละอย่างทำให้เสียเวลาเป็นชั่วโมง และไม่มีข้อใดจำเป็น

อย่าเปลี่ยนคีย์ก่อนวินิจฉัย

“การยืนยันตัวตนใช้งานไม่ได้” ใน 90% ของกรณีหมายถึง ANTHROPIC_API_KEY แทรกแซงการสมัครสมาชิก มีบั๊ก UI ของ hook หรือ MCP ล้มเหลว การหมุนเวียนคีย์ไม่ช่วยแก้ปัญหาเหล่านี้ แต่จะทำให้หยุดทำงานเพิ่มอีกหนึ่งชั่วโมง: ต้องเพิกถอนคีย์เก่า ออกคีย์ใหม่ ลงชื่อเข้าใช้ CI ใหม่ด้วยคีย์นั้น และอัปเดตตัวแปรในระบบ production ให้เรียกใช้ claude --safe-mode ก่อน ใช้ได้หรือไม่? หากใช้ได้ แสดงว่าปัญหาอยู่ในการปรับแต่ง ไม่จำเป็นต้องแตะคีย์

อย่ารีเซ็ตทั้งหมดก่อนลอง Safe Mode

safe mode จัดสภาพแวดล้อมแยกให้ได้ใน 1 วินาที การลบ .claude ทำลายเซสชัน ค่าตั้ง MCP และสถานะ untracked อื่นได้ วินิจฉัยก่อน ตรวจสำรองส่วนตัว และใช้การย้ายย้อนกลับได้เฉพาะชั้นติดตั้งหรือ config ที่หลักฐานชี้

อย่าตื่นตระหนกเพราะข้อผิดพลาด UI ใน hook

ก่อนแก้ไขสิ่งใด ให้ตรวจสอบก่อนว่า hook ทำงานจริงหรือไม่ (ดูจากบันทึกใน stderr หรือการพิมพ์ข้อความอย่างชัดเจน) แทนการเชื่อสัญญาณที่เห็นบนหน้าจอ

อย่าเพิ่ม Exit Code ของ Hook ก่อนแก้ตรรกะ

เมื่อ hook ที่ควรบล็อกไม่บล็อก ก็ชวนให้เปลี่ยนเป็น exit 2 แล้วถือว่าจบ นี่เป็นแพตช์ที่ใช้ได้ แต่ซ่อนปัญหาอีกอย่างไว้: หากการบล็อกใช้ไม่ได้มาหนึ่งเดือน สิ่งที่ hook ควรห้ามก็ผ่านไปทั้งหมด ก่อนอื่นให้ตรวจสอบบันทึก git และค้นหาว่ามีอะไรหลุดผ่านไปบ้าง จากนั้นค่อยเพิ่มการบล็อก มิฉะนั้น การปิดกั้นตอนนี้ก็ไม่ได้ย้อนคืนสิ่งที่เกิดขึ้นไปแล้ว

อย่าแก้ CLAUDE.md ในระบบ production โดยไม่มีมาตรการป้องกันจาก Safe Mode

กรณีที่อธิบายไว้: คุณแก้ CLAUDE.md แล้ว Claude เริ่มทำงานแปลก ๆ คุณเรียกใช้ git diff และพบว่ามีคนเพิ่มเซิร์ฟเวอร์ MCP กับ hook ลงใน repo ในเย็นวันเดียวกัน คุณโทษการแก้ไขของตัวเอง ย้อนกลับการเปลี่ยนแปลง แต่ Claude ก็ยังทำงานผิดปกติ กฎคือ ก่อน git revert ให้เรียกใช้ claude --safe-mode หากปัญหายังเกิดใน safe mode การแก้ไขของคุณไม่เกี่ยวข้อง ไม่จำเป็นต้องย้อนกลับ

อย่าเชื่อว่า “Claude แก้ MCP ของตัวเองได้”

สถานการณ์ที่พบบ่อย: คุณขอให้ Claude “เพิ่มเครื่องมือหนึ่งลงในเซิร์ฟเวอร์ MCP” Claude เขียนการตั้งค่าที่ใช้งานได้ใหม่ ทุกอย่างพัง แล้ว Claude ก็ใช้เวลาหลายเทิร์นแก้ปัญหาความเสียหายที่ตัวเองทำ—พร้อมกับใช้โควตาเซสชันจนหมด เมื่อ MCP มีปัญหา ให้ดึงการตั้งค่าด้วยตนเอง อย่าปล่อยให้เอเจนต์จัดการ เครื่องมือส่วนหนึ่งของเอเจนต์ก็ทำงานผ่าน MCP เช่นกัน และ MCP ที่พังก็หมายถึงผู้วินิจฉัยที่พังด้วย

หลังแก้ไขแล้วควรทำอะไรต่อ?

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

เมื่อกู้คืน Claude Code ได้แล้ว ให้เพิ่มการป้องกันไม่ให้เกิดปัญหาอีก อย่างน้อยควรมี disableBypassPermissionsMode: "disable" ในการตั้งค่าผู้ใช้ มี hooks ที่บล็อก .env และ git push --force และมี sandbox สำหรับการทำงานอัตโนมัติระยะยาว คู่มือป้องกันเป็นคู่กันกับคู่มือนี้

หลังวิเคราะห์เหตุการณ์แล้ว อย่าเพิ่งกลับไปทำงาน ให้เพิ่มการป้องกันก่อนเพื่อไม่ให้เหตุการณ์เกิดซ้ำ คุณอาจใช้เวลาหลายชั่วโมงสร้าง second brain (โฟลเดอร์ business/ ที่มีโครงสร้างโปรเจกต์) และ CLAUDE.md ซึ่งกู้คืนด้วยตนเองได้ยาก—นี่เป็นเหตุผลที่หนักแน่นพอ ชุดขั้นต่ำมีดังนี้:

  1. ~/.claude/settings.json ที่มี permissions.disableBypassPermissionsMode: "disable"—ข้อห้ามเชิงสถาปัตยกรรมต่อโหมดข้ามข้อจำกัด เพื่อให้ --dangerously-skip-permissions ที่เปิดใช้โดยไม่ตั้งใจใช้งานไม่ได้
  2. Hooks สำหรับ Read(./env*), Bash(git push --force), Write(./node_modules/**)—สิ่งที่ต้องบังคับใช้เป็นกฎ ไม่ใช่แค่ความหวัง
  3. การตั้งค่า sandbox สำหรับการทำงานอัตโนมัติระยะยาว (/loop, /schedule)
  4. /compact พร้อมกฎของคุณเอง สำหรับกำหนดว่าจะทิ้งอะไรจากบริบท เพื่อไม่ให้ Claude ใช้ทรัพยากรจนหมด

แผนป้องกันครบทั้งสี่ชั้นอยู่ในคู่มือ “วิธีกำหนดค่า Claude Code ไม่ให้ทำโปรเจกต์พังข้ามคืน” คู่มือหนึ่งครอบคลุมการป้องกันก่อนเริ่ม /loop อีกคู่มือครอบคลุมการกู้คืนหลัง /loop ทำอะไรเสียหายไปแล้ว เป็นคู่มือที่เสริมกันอย่างลงตัว

แหล่งที่มา

สื่อเชิงปฏิบัติ: เอกสารประกอบ Ailoot.

สื่อและเครื่องมือเพิ่มเติม: Ailoot.

รายละเอียดเพิ่มเติม

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

Safe mode ล้มเหลวแปลว่าควรลบ ~/.claude หรือไม่?

ไม่ใช่ ยังต้องตรวจการติดตั้ง การยืนยันตัวตน เครือข่าย และโครงสร้างพื้นฐาน doctor ไม่สรุปไม่ใช่หลักฐานว่าต้องลบค่าหรือเซสชัน ซ่อมเฉพาะชั้นที่วินิจฉัย

ก่อนซ่อมติดตั้งต้องเก็บอะไร?

หยุดผู้เขียนแล้วสำรองสถานะ Claude ทั้งหมด รวมเซสชัน ค่า plugin/MCP ไฟล์ ignore และ metadata ตรวจ checksum กับการแตกก่อนทำต่อ คงบัญชีกับ credential store เดิม และกู้เฉพาะชั้นที่วินิจฉัยโดยไม่ทับสถานะปัจจุบันทั้งหมด

บทความทั้งหมด