AI Coding Harness (สายรัดควบคุมสำหรับ AI โค้ดดิ้ง)
มันคืออะไร
AI coding harness (สายรัดควบคุม/นั่งร้านเชิงบังคับใช้สำหรับ AI โค้ดดิ้ง) คือโครงนั่งร้านสำหรับบังคับใช้กฎและตรวจสอบความถูกต้องที่คุณสร้าง ล้อมรอบ เอเจนต์เขียนโค้ด เพื่อให้มันทำงานได้เองโดยอัตโนมัติโดยไม่ทำให้ระบบพัง ลองนึกภาพความต่างแบบนี้: guardrail (รั้วกันตก) คือนิสัยที่คุณต้องคอยจำเอง (เช่น ต้องรันเทสต์ ต้องอ่าน diff) แต่ harness คือเครื่องจักรที่จำแทนคุณ — มันนั่งอยู่ตรงกลางระหว่างสิ่งที่เอเจนต์ตั้งใจจะทำกับโลกจริง และในทุกขั้นตอนที่อันตราย มันจะบันทึก เตือน หรือบล็อกทันที dancinlab/harness คือเอนจินอ้างอิงที่ไม่ผูกกับโปรเจกต์ใดโปรเจกต์หนึ่ง — เป็นแกนกลาง TypeScript ที่ใช้ร่วมกัน โดยแต่ละ repo จะต่างกันแค่ตรงไฟล์ harness.config.json บวกกับไฟล์ข้อมูล .harness/*.json อีกไม่กี่ไฟล์เท่านั้น
จุดแข็ง
- เปลี่ยน guardrail ของคุณจากนิสัยที่ทำหรือไม่ทำก็ได้ ให้กลายเป็นกฎที่ถูกบังคับใช้โดยโค้ด — เอเจนต์จะข้ามมันไปไม่ได้
- คุมทั้งวงจรชีวิตของเครื่องมือ: ก่อนคำสั่งจะรัน ก่อนไฟล์จะถูกเขียน ตอนรับพรอมต์ ตอน และตอน push
- ledger (สมุดบันทึก) ในที่นี้เหมือนกับสมุดโน้ตที่คุณเขียนเพิ่มบรรทัดใหม่ได้เท่านั้น ไม่มีวันลบบรรทัดเก่าทิ้ง สมุดบันทึกเหล่านี้เขียนในรูปแบบ JSONL ( Lines — หนึ่งอ็อบเจกต์ JSON ต่อหนึ่งบรรทัด) และให้บันทึกที่ตรวจจับการปลอมแปลงได้ (tamper-evident) ของทุกสิ่งที่เอเจนต์เคยทำ เขียนได้ถูกและตรวจสอบได้ง่ายมาก
- ใส่เข้าไปใน repo ไหนก็ได้: พฤติกรรมมาจากค่าคอนฟิกและข้อมูล ไม่ใช่การ fork โค้ด
- ออกแบบให้เงียบเมื่อทุกอย่างปกติ เพื่อให้คำเตือนที่ขึ้นมายังคงมีความหมายจริง ๆ
ข้อแลกเปลี่ยน
- มันคืองานท่อประปา ไม่ใช่เวทมนตร์: harness ทำให้ ต้นทุนของการจับความผิดพลาดถูกลง แต่มันไม่ได้ทำให้ AI ถูกต้องขึ้นเอง
- ต้องมีการตั้งค่าเริ่มต้นและคอนฟิกที่ปรับให้เข้ากับจุดอันตรายของโปรเจกต์คุณ
- กฎที่เข้มงวดเกินไปจะสร้างความเสียดทาน วินัยแบบ "bitter-gate" (เลิกใช้กฎที่ไม่มีใครแตะมานานก่อนจะเพิ่มกฎใหม่) มีไว้เพื่อสู้กับปัญหานี้โดยเฉพาะ
- มีคุณค่าสูงสุดกับโปรเจกต์จริงที่มีผู้ใช้จริง — ถ้าเป็นแค่ต้นแบบทดลองทิ้งขว้าง การใช้ harness จะเกินความจำเป็น
เหมาะกับใคร
เหมาะกับ vibe coding แบบจริงจัง ที่คุณปล่อยให้เอเจนต์แก้ไขไฟล์หลายไฟล์พร้อมกันและรันคำสั่งต่าง ๆ โดยแทบไม่มีคนคอยดูแล และคุณต้องการให้ต้นทุนของการกระทำที่ผิดพลาดต่ำใกล้ศูนย์
หลักการทั้งห้า (H1–H5)
- H1 สำเร็จให้เงียบ ล้มเหลวให้ดัง — ไม่มีเสียงรบกวนที่จะทำให้คุณเผลอเพิกเฉยไปในที่สุด
- H2 ห้ามแก้ไขอัตโนมัติเด็ดขาด — เสนอทางเลือก บล็อก หรือเตือนเท่านั้น การตัดสินใจสุดท้ายเป็นของมนุษย์หรือของเอเจนต์ที่ได้รับข้อมูลครบแล้ว
- H3 Bitter-gate — เลิกใช้กฎที่ไม่มีใครแตะต้องมานานก่อนจะเพิ่มกฎใหม่เข้าไป
- H4 ขับเคลื่อนด้วยคอนฟิก — เอนจินเดียว แต่มี
harness.config.jsonแยกตามแต่ละโปรเจกต์ - H5 เป็นแบบ AI-native — ใช้ ledger แบบ JSONL ที่เขียนเพิ่มได้อย่างเดียว ไม่มีทางถูกเขียนทับแบบเงียบ ๆ ได้
หน้าตาเป็นแบบไหน
ตัวอย่างร่างคอนฟิกแบบง่าย ๆ
// harness.config.json
{
"lockedPaths": ["src/auth/**", "infra/**", ".github/**"],
"blockCommands": ["rm -rf", "git push --force", "curl * | sh"],
"verify": ["npm run lint", "npm run typecheck", "npm test"],
"ledger": ".harness/ledger.jsonl"
}
และลำดับขั้นของ hook ก่อน/หลัง (pre/post) รอบการกระทำหนึ่งครั้งของเอเจนต์
agent intends an action
│
┌────▼─────────────┐
│ pre (PreToolUse) │ block dangerous? warn? → else allow
└────┬─────────────┘
│ command runs / file is written
┌────▼──────────────┐
│ post (PostToolUse) │ record to JSONL · warn if a locked file was touched
└────┬──────────────┘
│ at commit / push
┌────▼─────┐
│ verify │ lint · typecheck · tests (parallel) → green or stop
└──────────┘
เอเจนต์ไม่มีทางเลี่ยงประตูนี้ได้เลย — นั่นคือประเด็นทั้งหมดของมัน