Claude Code Harness Foundations
Checkpoints and rewind
ใช้เมนูย้อนกลับเพื่อคืน code และ conversation ให้ตรงกับจุดที่เลือก พร้อมแยกแยะว่าอะไรที่ checkpoint คืนได้และอะไรที่ต้องใช้ git หรือเครื่องมืออื่นจัดการ
1) งานของ checkpoint และจังหวะที่ต้องใช้
คุณกำลังลองแนวทางใหม่ใน shop-api: สั่งให้ Claude แยกส่วนลดออกจาก `src/domain/order.ts` ไปเป็น strategy ของตัวเอง เป็นการรื้อโครงเล็ก ๆ ที่อาจได้หรืออาจพัง Claude แก้ `src/domain/order.ts` ปรับ `src/routes/orders.ts` เพิ่มเทสต์ แล้วรัน `pnpm test` — ผลคือล้มหลายตัว และคุณเพิ่งนึกได้ว่าอยากเทียบกับอีกแนวทางหนึ่ง คุณมอง `git status` แล้วเจอทั้งไฟล์ที่คุณเองแก้ค้างไว้และไฟล์ที่ Claude เพิ่งแก้ปนกัน การใช้ git ทิ้งการเปลี่ยนแปลงทั้งหมดจึงหมายถึงทิ้งงานของคุณเองไปด้วย สิ่งที่ต้องการคือ ย้อนเฉพาะสิ่งที่ session นี้ทำ กลับไปยังจุดหนึ่งของบทสนทนา โดยไม่แตะ commit ที่ตั้งใจไว้ และไม่แตะงานที่คุณทำค้างไว้
นี่คือช่องว่างที่ checkpoint เข้ามาเติม: git เก็บประวัติที่คุณเลือกจะ commit และ branch เป็นประวัติถาวรที่ใช้ร่วมกับทีม ส่วน harness เก็บสถานะไฟล์ก่อนการแก้ของแต่ละเทิร์น เป็น snapshot ระดับ session ที่มีไว้ให้ลองผิดลองถูกได้โดยไม่ต้องกลัว ทำไมต้องมีสองกลไก เพราะมันตอบคนละคำถาม: git ตอบว่า "ประวัติของโปรเจกต์เป็นอย่างไร" ส่วน checkpoint ตอบว่า "ย้อนการเปลี่ยนแปลงของ session นี้กลับไปจุดก่อนหน้าได้ไหม" การมี checkpoint ไม่ได้ลดบทบาทของ git — เอกสารระบุชัดว่า checkpoint ไม่ใช่ตัวแทนของ version control กลไกที่ทำให้มันเป็นไปได้คือการ snapshot ไฟล์ก่อนที่เครื่องมือแก้ไขของ Claude จะเขียนทับ เก็บ snapshot นั้นไว้คู่กับบทสนทนา แล้วให้คุณเลือกจุดที่จะย้อนจากเมนูของ session
2) Anatomy: เปิดเมนูย้อนกลับและเลือกการกระทำ
การย้อนกลับทำงานผ่านเมนูที่เปิดจากใน session สองทาง: ใช้คำสั่ง หรือกดคีย์ลัดสองครั้งตอนช่องพิมพ์ว่าง (ตัวจริงอยู่ในตารางข้อเท็จจริงที่เปลี่ยนได้ด้านล่าง) เมนูจะแสดงรายการ prompt ของ session นี้ตามลำดับเวลา คุณเลือกจุดที่ต้องการก่อน แล้วจึงเลือกว่าจะทำอะไรกับจุดนั้น
เปิดเมนูย้อนกลับและเลือกจุด
การกระทำในเมนูแบ่งเป็นสองกลุ่มตามสิ่งที่มันแตะ กลุ่มแรกคือการคืนสถานะ — คืน code กับ conversation พร้อมกัน คืนเฉพาะ conversation โดยคง code ปัจจุบัน หรือคืนเฉพาะ code โดยคงบทสนทนา กลุ่มที่สองคือการสรุปบทสนทนาเป็นข้อความย่อ ซึ่งบีบอัด context โดยไม่เปลี่ยนไฟล์บนดิสก์ การแยกกลุ่มนี้สำคัญ เพราะเลือกผิดกลุ่มแล้วสิ่งที่คุณต้องการจะไม่เกิดขึ้น: ถ้าต้องการไฟล์กลับคืน การเลือกสรุปจะไม่แตะไฟล์เลย และถ้าต้องการประหยัดพื้นที่ context การเลือกคืน code ก็ไม่ช่วยเรื่องนั้น
| ข้อเท็จจริงที่เปลี่ยนได้ | สิ่งที่ตรวจสอบล่าสุด | เอกสารเจ้าของ |
|---|---|---|
| เปิดเมนูย้อนกลับ | พิมพ์ `/rewind` หรือกด `Esc` สองครั้งเมื่อช่องพิมพ์ว่าง ถ้าช่องพิมพ์มีข้อความอยู่ การกด `Esc` สองครั้งจะล้างข้อความแทน | https://code.claude.com/docs/en/checkpointing |
| จุดที่สร้าง checkpoint | ทุก prompt ที่เริ่มเทิร์นใหม่สร้าง checkpoint หนึ่งจุด | https://code.claude.com/docs/en/checkpointing |
| ตัวเลือกการคืนสถานะ | `Restore code and conversation` · `Restore conversation` (คง code ปัจจุบัน) · `Restore code` (คงบทสนทนา) | https://code.claude.com/docs/en/checkpointing |
| ตัวเลือกการสรุป | `Summarize from here` · `Summarize up to here` — บีบอัดบทสนทนาโดยไม่เปลี่ยนไฟล์บนดิสก์ | https://code.claude.com/docs/en/checkpointing |
| จำนวน snapshot ที่เก็บ | เก็บ snapshot ของ 100 checkpoint ล่าสุดใน session | https://code.claude.com/docs/en/checkpointing |
| อายุของ snapshot | ถูกลบในรอบ retention ค่าเริ่มต้นประมาณ 30 วันหลัง session บันทึกล่าสุด ปรับได้ด้วย `cleanupPeriodDays` | https://code.claude.com/docs/en/checkpointing |
| สิ่งที่ไม่ถูกคืน | ไฟล์ที่ถูกแก้ด้วยคำสั่ง Bash; ไฟล์ symlink/hard link (ถูกข้ามพร้อมคำเตือน); การแก้จาก subagent ส่วนใหญ่ | https://code.claude.com/docs/en/checkpointing |
| ความสัมพันธ์กับ git | checkpoint ไม่ใช่ตัวแทนของ version control — commit, branch และประวัติถาวรยังเป็นหน้าที่ของ git | https://code.claude.com/docs/en/checkpointing |
| ตรวจสอบล่าสุด: 2026-09-23 · https://code.claude.com/docs/en/checkpointing |
3) Contrast: คืนเฉพาะที่ track ไว้ กับเข้าใจว่า undo ทั้งหมด
ความเข้าใจผิดที่พบบ่อยที่สุดคือคิดว่า checkpoint เป็น undo ที่ครอบทุกอย่าง รวมถึงสิ่งที่เกิดขึ้นนอกเครื่องมือแก้ไขไฟล์ของ Claude สองแบบจำลองด้านล่างเริ่มจากสถานการณ์เดียวกัน แต่คาดหวังผลต่างกัน
ขอบเขตของ rewind: ทั้งหมด กับ เฉพาะที่ track ไว้
แบบซ้ายคาดหวังว่าทุกอย่างจะย้อน รวมถึงสิ่งที่เกิดจากคำสั่ง Bash และ git แบบขวาแยกหน้าที่ตามกลไก จึงคาดเดาสถานะสุดท้ายได้ถูกต้อง
แบบจำลองที่กว้างเกินจริงทำให้คาดหวังสิ่งที่กลไกไม่ได้สัญญา แล้วตีความว่ากลไกผิด
เมื่อรู้ขอบเขตของแต่ละกลไก คุณเลือกได้ว่าอะไรให้ rewind จัดการ และอะไรต้องใช้ git หรือคำสั่งอื่น
4) ฝึก: คืน code ตามจุดที่เลือกแล้วแก้เอง
ใน shop-api เทิร์นล่าสุดของ Claude แก้ src/domain/order.ts และ tests/domain/order.test.ts จน pnpm test ล้ม คุณต้องการ working tree กลับไปก่อนเทิร์นนั้น แต่ยังเก็บบทสนทนาไว้ ทำตามลำดับด้านล่างแล้วตรวจสถานะที่ได้
งานที่ต้องทำ
- ทำนายก่อนดูเฉลย: ถ้าเลือกคืน code ที่จุดก่อนการแก้ของ Claude สถานะของสองไฟล์ที่ Claude แก้ บทสนทนาหลังจุดนั้น และไฟล์อื่นที่ถูกสร้างด้วยคำสั่ง Bash จะเป็นอย่างไรบ้าง
- เปิดเมนูย้อนกลับด้วยคำสั่งหรือคีย์ลัดจากตารางข้อเท็จจริง แล้วเลือก prompt ที่เริ่มการแก้รอบล่าสุด
- เลือกการกระทำที่คืนไฟล์โดยไม่ย้อนบทสนทนา แล้วตรวจสถานะไฟล์ด้วยเครื่องมือที่คุณใช้ประจำ เช่น git status หรือเปิดไฟล์ดูเนื้อหา
- ยืนยันว่าบทสนทนายังอยู่หลังจุดที่เลือก และสังเกตว่าไฟล์ที่ถูกแก้ด้วยคำสั่ง Bash ไม่ได้ถูกคืนด้วย
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด
ไม่มีลำดับขั้นให้ทำตาม กำหนดสถานะเป้าหมาย: เก็บการแก้ของ Claude รอบแรกไว้ แต่ย้อนการแก้รอบสอง พร้อมเก็บบทสนทนาทั้งหมดไว้ จงเลือกเองว่าจะเปิดเมนูอย่างไร เลือกจุดใด และเลือกการกระทำใด แล้วพิสูจน์สถานะที่ได้
งานที่ต้องทำ
- เขียนแผนก่อนลงมือ: จุดที่ต้องเลือก ประเภทการคืนที่ต้องใช้ และสิ่งที่คาดว่าจะยังอยู่หลังย้อน
- ลงมือใน session ของคุณเอง แล้วเก็บหลักฐานสถานะสุดท้าย: ไฟล์ใดกลับก่อนการแก้ ไฟล์ใดคงอยู่ และบทสนทนายังอยู่หรือไม่
- ระบุว่าอะไรที่การย้อนกลับครั้งนี้ไม่คืนให้ และต้องใช้ git หรือเครื่องมืออื่นจัดการต่อ
ลองทำด้วยตัวเองก่อน แล้วค่อยเปิดเฉลยเพื่อเทียบแนวคิดและรายละเอียด
5) ตรวจความเข้าใจและก้าวต่อไป
ทดสอบความเข้าใจ: checkpoint และการย้อนกลับ
ตอบคำถามต่อไปนี้เพื่อยืนยันว่าคุณรู้ว่า checkpoint ถูกสร้างเมื่อใด คืนอะไรได้ และทำไมจึงไม่แทนที่ git
checkpoint ถูกสร้างเมื่อใด
หลังเลือกการคืน code ที่จุดหนึ่ง ข้อใดอธิบายสถานะที่ได้ถูกต้อง
เพราะเหตุใด checkpoint จึงไม่แทนที่ git
จุดอ้างอิงที่ harness บันทึกไว้คู่กับบทสนทนา เพื่อย้อนสถานะไฟล์ของ session เรียกว่า ______
ตอบเป็นคำภาษาอังกฤษคำเดียว
- checkpoint คือ snapshot ระดับ session ที่ harness เก็บคู่กับบทสนทนา สร้างทุก prompt ที่เริ่มเทิร์นใหม่
- เมนูย้อนกลับเปิดได้สองทาง และการกระทำแบ่งเป็นกลุ่มคืนสถานะกับกลุ่มสรุปบทสนทนา
- rewind คืนเฉพาะไฟล์ที่เครื่องมือแก้ไขของ Claude แตะ — Bash, symlink/hard link, subagent ส่วนใหญ่ และ git อยู่นอกขอบเขต
- ก้าวต่อไป: จบบทนี้แล้ว Phase Harness Foundations ครบทั้ง 8 บท บทถัดไปคือ Install Claude Code ซึ่งจะพาไปติดตั้งคำสั่ง claude ให้พร้อมเริ่ม session จริง