สิ่งที่ขาดคือกติกา ไม่ใช่ตัวรันเพิ่ม
แปดบทก่อนหน้าสอนว่าโค้ด ของรอบตัว AI และงานที่ไม่ใช่โค้ด ควรอยู่ตรงไหน บทนี้คือตอนที่คุณเปิด Claude Code หลาย terminal ข้ามหลาย repo พร้อมกัน แต่ละตัวเห็นแค่ repo ของตัวเอง ปัญหาไม่ใช่ AI เขียนโค้ดเก่งแค่ไหน มันคือแต่ละตัวจะรู้ได้ยังไงว่าอีกตัวเพิ่งเปลี่ยนอะไร ใครตัดสินว่าเสร็จ และใครเป็นคนตรวจ
kanly คือชุด skill ที่ Isagi เขียนขึ้นมาคุมเรื่องนี้ ทุกตัวเป็นไฟล์ markdown ธรรมดา สี่กระดานนี้สอนสิ่งที่โพสต์ของเพจเล่าไว้ handoff ส่งงานข้าม repo, contract ประกาศเส้นชัยก่อนปล่อย loop, review ให้คนที่ไม่ได้เขียนเป็นคนตรวจ และไฟล์ชุดเดียวที่ทุก terminal อ่าน คู่กับหลักฐานก่อนคำว่าเสร็จ ซ้ายคือ terminal ที่มีกติกา ขวาคือ terminal ที่ปล่อยให้แต่ละตัวรู้เอาเอง กดถัดไปแล้วนับว่าฝั่งไหนเชื่อเรื่องที่ไม่จริงกี่เรื่อง ขั้นสุดท้ายลากมันไปไว้ในไฟล์ที่ทุกตัวอ่าน บทจะถูกนับว่าเรียนจบเมื่อคุณไปถึงขั้นสุดท้ายของรูป
คุณเปิด Claude Code สามหน้าต่าง หลังบ้าน หน้าเว็บ และอีก repo หนึ่ง แต่ละ terminal เห็นแค่ repo ของตัวเอง เช้านี้ terminal หลังบ้านเปลี่ยนคำตอบของหน้ารายการ และตัดช่องสถานะที่ไม่ใช้ทิ้ง
หลังบ้านตัดช่องข้อมูลทิ้งไปแล้ว อีก terminal ยังสร้างหน้ามารับมันอยู่ เพราะไม่มีใครบอก
แตะกล่องเพื่อหาไฟล์บนกระดาน
handoff · หลังบ้าน ส่งถึง หน้าเว็บ
เขียนก่อนจบงาน · อีกฝั่งอ่านก่อนเริ่ม · ทำเสร็จแล้วลบ ประวัติอยู่ใน git
- 1เปลี่ยนอะไร: คำตอบของหน้ารายการเป็นก้อนที่มีรายการกับจำนวน และตัดช่องสถานะทิ้ง
- 2ต้องทำอะไรต่อ: หน้ารายการอ่านรูปใหม่ เอาทุกที่ที่อ่านช่องสถานะออก
- 3breaking change: มี หน้าที่ยังอ่านรูปเดิมจะพังตอนรัน
- 4contract ใหม่: รายการ กับ จำนวน ไม่มีช่องสถานะ
handoff verify · เทียบ contract กับโค้ดจริงของหน้าเว็บ
- ✓MATCH · หน้ารายการอ่านรูปใหม่ ตรงกับ contract
- ✗DRIFT · ป้ายสถานะยังอ้างช่องที่ตัดไปแล้ว หนึ่งบรรทัด
terminal หลังบ้าน · แชทนี้ terminal อื่นมองไม่เห็น
เปลี่ยนคำตอบของหน้ารายการเป็นก้อนที่มีรายการกับจำนวนแล้ว ตัดช่องสถานะทิ้งด้วย
หน้าเว็บต้องแก้ตาม
หน้าที่อ่านรูปเดิมจะพัง
รูปใหม่คือ รายการ กับ จำนวน
terminal หน้าเว็บ: ยังไม่รู้ว่ามีอะไรเปลี่ยน
กล่อง = ที่ที่เรื่องหนึ่งอยู่ repo ของ terminal หนึ่งตัว แชทของมัน หรือไฟล์ handoffเรื่องชิ้น = สิ่งที่ terminal หนึ่งรู้ หรือต้องทำ หนึ่งเรื่อง= ชิ้นที่ลากไปไฟล์ handoffได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีหลังบ้านที่ส่งหน้ารายการ กับหน้าเว็บที่อ่านมันมาโชว์ พร้อมป้ายสถานะในแต่ละแถว ตอนนี้สองฝั่งเห็นตรงกัน ซ้ายมีที่สำหรับไฟล์ handoff ขวาไม่มีไฟล์กลาง ทุกอย่างที่ terminal หนึ่งรู้ อยู่ในแชทของมันเอง
ซ้าย terminal หลังบ้านแก้เสร็จ แล้วเขียนไฟล์ handoff สี่ข้อ แค่ส่วนที่เปลี่ยน ขวา แก้เท่ากัน แต่ทุกเรื่องอยู่ในแชทของ terminal หลังบ้าน หน้าเว็บยังไม่รู้อะไรเลย
ซ้าย พิมพ์ /handoff check ตอนเปิด AI อ่าน handoff ก่อนเริ่ม เปลี่ยนหน้ารายการตามรูปใหม่ แล้วบอกคุณว่าช่องสถานะไม่อยู่ใน contract แล้ว ตัวกรองนี้ทำไม่ได้ ขวา AI เดาจาก context เก่า สร้างตัวกรองรับช่องที่ถูกตัดไปแล้ว หน้ารายการยังอ่านรูปเดิม ไม่ตรงกัน 3 เรื่อง
ซ้าย รัน handoff verify มันเทียบ contract ใน handoff กับโค้ดจริงของหน้าเว็บ หน้ารายการ MATCH ป้ายสถานะ DRIFT ยังอ้างช่องที่ตัดไปแล้วหนึ่งบรรทัด ชี้ไฟล์ ชี้บรรทัด แก้ก่อน ship ขวา ไม่มีอะไรให้เทียบ คุณเปิดแชทหลังบ้าน ก๊อปไปแปะในหน้าเว็บ ไม่ตรงกันยังอยู่ครบ 3 เรื่อง
ถ้า session หนึ่งเปลี่ยนอะไรที่กระทบอีก session ให้เขียนไฟล์ handoff ไว้ให้อีกฝั่งอ่าน แค่ส่วนที่เปลี่ยน อีกฝั่งพิมพ์ /handoff check ก่อนเริ่มงาน และก่อน ship รัน handoff verify ดูว่าโค้ดจริงยังตรงกับที่ตกลงไว้ ใน CLAUDE.md เขียนไว้ว่าเปลี่ยนอะไรที่อีก repo ใช้ ต้องมี handoff ก่อนจบงาน
ถามก่อนรับ diffdiff นี้เปลี่ยนอะไรที่อีก repo ใช้อยู่ไหม ถ้าใช่ handoff ของมันเขียนแล้วหรือยัง และ verify ออกมากี่ DRIFT
kanly's handoff skill as the page's posts describe it: if session A changes something that affects session B, write a handoff file for B (what changed, what to do next, breaking changes, the new contract); write, check, execute, done; delete when done and let git keep the history; `handoff verify` sorts the declared contract against the real code into MATCH, DRIFT, MISSING, UNDOCUMENTED (kanly handoff protocol, 2026-04-17; kanly team mode, 2026-07-03, the frontend field the backend had already cut)คุณให้ agent ทำหน้าสมัครสมาชิก ฟอร์ม อีเมลยืนยัน และกันอีเมลซ้ำ สั่งแบบ goal mode ให้มันวิ่งเอง แล้วเดินไปทำอย่างอื่น
ปล่อย agent วิ่งเอง กลับมามันบอกว่าเสร็จแล้ว เปิดดูจริงยังไม่เสร็จ เพราะไม่มีใครบอกไว้ก่อนว่าเสร็จแปลว่าอะไร
แตะกล่องเพื่อหาไฟล์บนกระดาน
contract · หน้าสมัครสมาชิก
เขียนก่อนปล่อย loop · ทุกข้อเช็กได้ ผ่านหรือไม่ผ่าน · ตายเมื่องานปิด
- 1CONTRACT-1 · สมัครแล้วได้อีเมลยืนยัน · เช็ก: รัน test ชุดสมัคร
- 2CONTRACT-2 · อีเมลซ้ำสมัครไม่ได้ · เช็ก: ลองสมัครซ้ำจริงด้วยอีเมลเดิม
- 3CONTRACT-3 · ไม่มี TODO ค้างในงานสมัคร · เช็ก: grep คำว่า TODO
loop · วิ่งเองได้ ปิดงานเองไม่ได้
- ·ฟอร์มสมัคร
- ·ส่งอีเมลยืนยัน
- ·กันอีเมลซ้ำ
เช็กตาม contract · ไล่ทีละข้อตอน loop บอกว่าเสร็จ
- ✓PASS · ข้อที่ผ่าน แนบผลเช็กไว้
- ✗FAIL · ข้อที่ยังไม่ผ่าน งานยังไม่จบ loop วิ่งต่อ
agent รายงานตอนคุณกลับมา
ฟอร์มสมัคร ✓
ส่งอีเมลยืนยัน ✓
กันอีเมลซ้ำ ✓
สรุป: เสร็จแล้ว
กล่อง = ช่องหนึ่งของงาน เงื่อนไขจบ loop ที่วิ่ง หรือการเช็กก่อนปิดงานข้อชิ้น = งานย่อยหรือเงื่อนไขจบหนึ่งข้อ= ชิ้นที่ลากไปเงื่อนไขจบได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งยังไม่ได้ปล่อย loop ซ้ายเขียนเงื่อนไขจบไว้แล้วสามข้อ สมัครแล้วได้อีเมลยืนยัน อีเมลซ้ำสมัครไม่ได้ และไม่มี TODO ค้าง แต่ละข้อบอกว่าเช็กด้วยอะไร ขวาไม่มีอะไรบอกว่าเสร็จแปลว่าอะไร
ซ้าย loop วิ่งทำสามงาน โดยมีเงื่อนไขจบสามข้อรออยู่ มันวิ่งได้ แต่ปิดงานเองไม่ได้ ขวา loop วิ่งทำสามงานเท่ากัน แล้วขึ้นว่าเสร็จแล้วตอนที่มันรู้สึกว่าจบ เสร็จไม่จริง 1 ครั้ง
ซ้าย อีก pass หนึ่งรันเงื่อนไขไล่ทีละข้อ ข้อ 1 กับข้อ 3 ผ่าน ข้อ 2 ไม่ผ่าน อีเมลซ้ำยังสมัครได้ งานยังไม่จบ loop วิ่งต่อจนข้อ 2 ผ่าน ขวา คุณเชื่อคำว่าเสร็จ ไม่มีอะไรให้เช็ก อีเมลซ้ำยังสมัครได้ เสร็จไม่จริง 2 ครั้ง
ซ้าย หมดเวลาแล้วข้อ 3 ยังไม่ผ่าน ยังมี TODO ค้าง agent รายงานว่ายังไม่เสร็จ และบอกว่าเหลือข้อไหน ขวา loop ชน timeout แล้วนับว่าจบ เสร็จไม่จริง 3 ครั้ง
ห้ามปล่อย loop วิ่งเองถ้ายังไม่มีเงื่อนไขจบที่เช็กได้จริง เขียนก่อนเริ่ม ข้อละหนึ่งบรรทัด มีชื่อ บอกวิธีเช็ก ผลเป็นผ่านหรือไม่ผ่าน แล้วปิดงานด้วยการเช็ก ไม่ใช่ด้วยความรู้สึก เขียนทีหลังไม่ใช่ contract มันคือคำบรรยาย ใน CLAUDE.md เขียนไว้ว่าไม่มีเงื่อนไขจบ ไม่ปล่อย loop
ถามก่อนรับ diffคำว่าเสร็จของงานนี้ผ่านเงื่อนไขข้อไหนบ้าง และเงื่อนไขพวกนั้นเขียนก่อน หรือหลัง loop วิ่ง
kanly's contract skill as the page's post describes it: no loop runs without a checkable end condition; CONTRACT-1, CONTRACT-2, each named, checkable (a command, a grep, a behaviour) and pass or fail; declared before, not after; a FAIL keeps the loop running; once, mission mode declared 15 items before any code and another pass checked all 15 (contract, 2026-07-06)agent เขียนฟีเจอร์ส่งอีเมลแจ้งเตือนเสร็จ คุณถามต่อว่า ตรวจให้หน่อยว่าถูกมั้ย มันตอบว่าเรียบร้อยดี
ถาม AI ว่าตรวจให้หน่อย มันตอบว่าเรียบร้อยดีเกือบทุกครั้ง เพราะมันตรวจด้วยหัวเดียวกับตอนที่เขียน
แตะกล่องเพื่อหาไฟล์บนกระดาน
diff · ส่งอีเมลแจ้งเตือนเมื่อมีคำสั่งซื้อ
คนเขียน: AI ตัวที่เขียน · ข้อสมมติของมันอยู่ในนี้
- +ส่งอีเมลแจ้งเตือนเมื่อมีคำสั่งซื้อใหม่
- +เพิ่มหน้าตั้งค่าการแจ้งเตือน ที่ spec ไม่ได้ขอ
- +ส่วนส่งอีเมลเรียกส่วนชำระเงินตรง ๆ
- +เวลาส่งฝังไว้ในโค้ด
- +เงื่อนไขการส่งเปลี่ยน ไม่มี test คุม
คนตรวจ · context ใหม่ ไม่เห็นแชทของคนเขียน
- ?เทียบ spec กับ diff กับ test ว่าตรงกันมั้ย
- ✗ตอบว่าไม่ผ่านได้
บันทึกรอบรีวิว
- 3แก้ · ทำเกิน spec · เวลาที่ฝังไว้ · ทางที่ไม่มี test
- 1ปัด · ส่วนที่ผูกกัน · เหตุผลหนึ่งบรรทัดจดไว้
- 0เมินเงียบ
diff · ส่งอีเมลแจ้งเตือนเมื่อมีคำสั่งซื้อ · คนเขียน: AI ตัวที่เขียน
+ ส่งอีเมลแจ้งเตือนเมื่อมีคำสั่งซื้อใหม่
+ เพิ่มหน้าตั้งค่าการแจ้งเตือน ที่ spec ไม่ได้ขอ
+ ส่วนส่งอีเมลเรียกส่วนชำระเงินตรง ๆ
+ เวลาส่งฝังไว้ในโค้ด
+ เงื่อนไขการส่งเปลี่ยน ไม่มี test คุม
คุณถามตัวที่เขียนว่า ตรวจให้หน่อยว่าถูกมั้ย
ตรวจแล้วครับ เรียบร้อยดี
อนุมัติโดยคนเขียน · merge แล้ว
กล่อง = ช่องหนึ่งของรอบรีวิว diff คนตรวจ บันทึกรอบรีวิว หรืองานที่สร้างต่อข้อชิ้น = สิ่งหนึ่งใน diff หรือคำตอบต่อ flag หนึ่งข้อ= ชิ้นที่ลากไปบันทึกรอบรีวิวได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมี diff เดียวกัน ส่งอีเมลแจ้งเตือน และอีกสี่อย่างที่คนเขียนมองไม่เห็น ทำเกิน spec ผูกส่วนที่ไม่ควรผูก ค่าที่ฝังไว้เงียบ ๆ และทางที่เปลี่ยนพฤติกรรมแต่ไม่มี test คุม ซ้ายมีคนตรวจที่ไม่ได้เขียน ขวามีแค่คนเขียน
ซ้าย diff ไปหา context ใหม่ที่เห็น spec diff test แต่ไม่เห็นแชทของคนเขียน มันเจอทั้งสี่ข้อ ขวา คนเขียนตรวจเอง อ่าน diff ด้วยข้อสมมติเดิม ตอบว่าเรียบร้อยดี หลุดรีวิว 4 ข้อ
ซ้าย ทุก flag ลงบันทึกรอบรีวิว แก้สามข้อ ปัดหนึ่งข้อพร้อมเหตุผลหนึ่งบรรทัด เมินเงียบเป็นศูนย์ ขวา ไม่มี flag ให้ตอบ คนเขียนอนุมัติเองแล้ว merge หลุดรีวิว 5 ข้อ
ซ้าย งานถัดไปเริ่มจากของที่มีคนตรวจจริง บันทึกบอกว่าข้อไหนแก้ ข้อไหนปัด เพราะอะไร ขวา งานถัดไปรับจุดบอดของคนเขียนที่ถูกตีตราว่าผ่าน แล้วสร้างต่อบนมัน พอเจอทีหลังต้องกลับไปเปิด diff เดิม หลุดรีวิว 6 ข้อ
คนเขียนคือคนที่ไม่ควรเป็นคนอนุมัติ ส่ง diff ไปหาตาที่ไม่เคยเห็นตอนสร้าง ให้เห็น spec diff test แล้วกล้าตอบว่าไม่ผ่าน ทุก flag มีคำตอบ แก้ หรือปัดพร้อมเหตุผลหนึ่งบรรทัด เมินเงียบนับเป็นการเบี้ยว ใน CLAUDE.md เขียนไว้ว่าคนเขียนไม่ใช่คนอนุมัติ
ถามก่อนรับ diffใครตรวจ diff นี้ ถ้าคำตอบคือตัวมันเอง แปลว่ายังไม่มีใครตรวจ
kanly's review skill and the rule behind it as the page's posts tell it: the writer is not the approver; the reviewer is a context that does not carry the writer's assumptions, sees the spec, the diff and the tests, and must be able to answer FAIL; what fresh eyes catch (more or less than the spec, coupling, silent hardcodes, behaviour with no test) (review 3/3, 2026-07-10); to reject a flag, write a one-line reason, silence counts as a dodge, 27 scored review rounds (ADE convergence; Axelrod review)คุณเปิด Claude Code สาม terminal พร้อมกัน หลังบ้าน หน้าเว็บ และอีก repo หนึ่ง วันนี้ terminal หลังบ้านเปลี่ยนโครงตารางสมาชิก แล้วตอบว่าเสร็จแล้ว
สาม terminal ตอบเรื่องเดียวกันได้สามคำตอบ ทุกตัวมั่นใจเท่ากัน และไม่มีตัวไหนแนบหลักฐาน
แตะกล่องเพื่อหาไฟล์บนกระดาน
ไฟล์สถานะ
ใครเปลี่ยนอะไร จดที่นี่ · อีกสองตัวเห็นตอนเปิดรอบหน้า
- 1งานถึงไหน: เปลี่ยนโครงตารางสมาชิก
- 2ต่อไป: หน้าเว็บอ่านโครงใหม่
หลักฐาน · แนบก่อนคำว่าเสร็จ
- 1คำสั่งที่รัน กับผลที่ออกมา แปะไว้ทั้งบรรทัด
- 2ไฟล์กับบรรทัดที่แก้
- 3ค่าที่อ่านได้จริงหลังแก้
- ?terminal หน้าเว็บ · ตอบจากไฟล์สถานะ
- ?terminal ตัวที่สาม · ตอบจากไฟล์สถานะ
terminal หลังบ้าน
เสร็จแล้วครับ น่าจะทำงานได้
terminal หน้าเว็บ
โครงตารางสมาชิกเป็นแบบเดิมครับ
terminal ตัวที่สาม
งานเปลี่ยนโครงตารางยังไม่เริ่มครับ
กล่อง = ที่ที่คำตอบมาจาก terminal หนึ่งตัว หรือไฟล์ที่ทุกตัวอ่านเรื่องชิ้น = สิ่งที่ terminal รู้ หรือคำว่าเสร็จหนึ่งครั้ง= ชิ้นที่ลากไปไฟล์สถานะได้ ในขั้นสุดท้าย
บนมือถือ: แตะที่กระดานเพื่อไปขั้นถัดไป ขั้นสุดท้ายแตะชิ้นที่ลากได้ แล้วแตะกล่องที่มันควรอยู่
ทั้งสองฝั่งมีสาม terminal หลังบ้าน หน้าเว็บ และตัวที่สาม ตอนนี้ทุกตัวรู้โครงตารางเดียวกัน ซ้ายทุกตัวอ่านไฟล์สถานะชุดเดียวกันตอนเปิด ขวาแต่ละตัวรู้เท่าที่อยู่ในแชทของมัน
ซ้าย terminal หลังบ้านแก้เสร็จ รันเช็กจริง แล้วจดลงไฟล์สถานะพร้อมหลักฐานสามอย่าง คำสั่งกับผล ไฟล์กับบรรทัด ค่าจริงหลังแก้ ขวา แก้เสร็จแล้วตอบในแชทว่าเสร็จแล้วครับ น่าจะทำงานได้ ไม่ได้รัน ไม่มีหลักฐาน 1 ครั้ง
ซ้าย terminal หน้าเว็บอ่านไฟล์สถานะก่อนตอบ บอกว่าเปลี่ยนแล้ว และยกหลักฐานจากไฟล์มาให้ดู ขวา terminal หน้าเว็บตอบจากแชทของตัวเองว่ายังเป็นโครงเดิม มั่นใจเท่ากัน ไม่มีหลักฐาน 2 ครั้ง
ซ้าย ทุกตัวเปิดไฟล์เดียวกัน ตอบตรงกัน และชี้ไปที่หลักฐานในไฟล์ ไม่มีใครต้องเชื่อคำพูดของใคร ขวา ได้สามคำตอบ ทุกตัวมั่นใจเท่ากัน คุณต้องเปิดแชทไล่ทีละตัวว่าอันไหนพูดจริง ไม่มีหลักฐาน 3 ครั้ง
ทุก terminal อ่านไฟล์ชุดเดียวกันตอนเปิด ใครเปลี่ยนอะไรจดลงไฟล์นั้น และห้ามบอกว่าเสร็จถ้ายังไม่มีหลักฐาน คำสั่งที่รันกับผลที่ได้ ไฟล์กับบรรทัด ค่าจริง แก้ไฟล์แล้วยังไม่ใช่เสร็จ ใน CLAUDE.md เขียนไว้ว่าไม่มีหลักฐาน ห้ามพูดคำว่าเสร็จ
ถามก่อนรับ diffหลักฐานของคำว่าเสร็จนี้อยู่ไหน คำสั่งอะไร ผลเป็นยังไง ไฟล์ไหน บรรทัดไหน
Why kanly exists, as the page's post tells it: three terminals (backend, frontend, contract) each remembered a different thing, one knew the schema had changed, three answers all equally confident; kanly makes every terminal read one file set (memory vs skills, 2026-09-07); "Never claim a change is complete without running verification. 'I edited the file' is not done" (anti-lying rules); verify points at the file and the line (kanly team mode)สี่ข้อคือคำถามเดียว: ใครรู้อะไร และพิสูจน์ยังไง
เปลี่ยนอะไรที่อีก repo ใช้ เขียน handoff ให้อีกฝั่งอ่านก่อนเริ่มงาน แล้ว verify ก่อน ship (1) ปล่อย loop วิ่งเองเมื่อมีเงื่อนไขจบที่เช็กได้ ประกาศก่อน ไม่ใช่หลัง (2) คนเขียนไม่ใช่คนอนุมัติ และทุก flag มีคำตอบ (3) ทุก terminal อ่านไฟล์ชุดเดียวกัน และคำว่าเสร็จมาพร้อมหลักฐาน (4) ทั้งวงการกำลัง ship ท่อ แต่ไม่มีใคร ship กติกาว่าใครเชื่อใครได้แค่ไหน กติกาส่วนนั้นเขียนเองได้ เป็นไฟล์ markdown ธรรมดา
อยากรู้ตอนมีกระดานใหม่
ทุกหลักสูตรตอนนี้อ่านฟรี ทิ้งอีเมลไว้ แล้วจะส่งให้เฉพาะตอนมีหลักสูตรหรือกระดานใหม่ ไม่มีอย่างอื่น