Tenet - ฮาร์เนสสำหรับ AI coding ระยะยาวที่มีตั้งแต่การสัมภาษณ์ การรัน DAG, critic 3 ชั้น ไปจนถึง steer message
(github.com/JeiKeiLim)สวัสดีครับ
ตอนนี้ผมกำลังสร้าง Tenet ซึ่งเป็น AI coding agent harness ที่สามารถทำงานอัตโนมัติได้ต่อเนื่องยาวนาน เลยอยากมาแชร์ครับ
พอลองใช้ AI coding agent จะพบว่างานสั้น ๆ มักทำได้ค่อนข้างดี แต่พอเป็นงานพัฒนาที่กินเวลาหลายชั่วโมงขึ้นไป ก็มักเริ่มรู้สึกไม่มั่นใจได้เร็วมาก
ทั้งสเปกที่เริ่มพร่าเลือน, ไม่แน่ใจว่าเทสต์ที่รันผ่านนั้นเพียงพอจริงไหม, ระหว่างทางก็เปลี่ยนทิศทางได้ยาก, และถ้าเซสชันหลุด บริบทก็หายตามไปด้วย
Tenet คือฮาร์เนสที่สร้างขึ้นมาเพื่อลดปัญหาเหล่านั้น
มันไม่ได้เป็นแค่ “เอเจนต์ที่รันได้นาน” แต่ใกล้เคียงกับโครงสร้างที่ช่วยรักษาทิศทางและคุณภาพเอาไว้ได้แม้จะรันต่อเนื่องเป็นเวลานานมากกว่า
โดยคร่าว ๆ จะทำงานตามลำดับแบบนี้
-
Interview
- เริ่มจากทำให้ requirement ชัดเจนขึ้นผ่านการสัมภาษณ์
- หากจำเป็นก็ทำ technical research ไปพร้อมกัน
-
Visuals / Architecture
- สร้าง architecture diagram หรือ UI mockup
- ถ้าเป็นงาน UI ก็จะสร้างหลาย variation เพื่อให้เลือกทิศทางได้ก่อน
-
Spec / Harness / Scenarios
- บันทึก implementation spec, test/validation harness และ scenario ไว้เป็นเอกสาร
- ไม่ได้กำหนดแค่ว่า “จะสร้างอะไร” แต่ตรึงไว้ด้วยว่า “อะไรจึงจะถือว่าผ่าน”
-
DAG decomposition
- แยกงานออกเป็น dependency graph
- job ที่เป็นอิสระจากกันสามารถรันแบบขนานได้
-
Autonomous execution loop
- รันแต่ละ job และเมื่อจบแล้วจะมีการประเมินต่อท้าย
- ออกแบบลูปนี้มาให้สามารถรันได้นานมาก
วิธีการประเมิน
แต่ละ job จะไม่ข้ามไปขั้นถัดไปทันทีแม้จะทำเสร็จแล้ว แต่ต้องผ่าน critic 3 ตัวก่อน
- code critic: การพัฒนาสอดคล้องกับเจตนาของ spec หรือไม่
- test critic: เทสต์ที่มีอยู่ตอนนี้เพียงพอจริงหรือไม่สำหรับการตรวจสอบ job นี้
- Playwright e2e eval: ทำงานได้จริงจากมุมมองของผู้ใช้จริงหรือไม่
สิ่งที่ให้ความสำคัญมากคือ critic เหล่านี้ต้องตรวจใน fresh context ที่แยกออกจากบริบทของผู้เขียนให้ได้มากที่สุด
ผมอยากลดกรณีที่เอเจนต์ซึ่งเขียนโค้ดเองปล่อยให้งานของตัวเองผ่านได้ง่ายเกินไป
ผมเขียนไว้ใน README ด้วยว่า โดยเฉพาะฝั่ง test นั้น สิ่งที่สำคัญกว่าคำถามว่า “มีเทสต์ไหม” คือ เทสต์นั้นตรวจสอบได้ถูกต้องจริงไหม
การ steer ระหว่างทาง
เมื่อรันงานเป็นเวลานาน บางครั้งคนก็อยากปรับทิศทางเล็กน้อยระหว่างทาง
ใน Tenet แทนที่จะต้องอธิบายการทำงานทั้งหมดใหม่ตั้งแต่ต้น
ก็แค่ส่ง steer message เข้าไป ระบบจะบันทึกไว้และนำไปสะท้อนใน job ที่เกี่ยวข้องถัดไป
กล่าวคือ
- ไม่จำเป็นต้องตัดลูปทั้งหมดในทันที
- แต่ใช้วิธีให้ระบบกลับมาหยิบไปใช้ใหม่ในขั้นตอนที่เกี่ยวข้อง
ผมให้ความสำคัญกับการเก็บเอกสารและร่องรอยการทำงาน
สิ่งที่ผมให้ความสำคัญเป็นพิเศษระหว่างทำระบบนี้คือ
ไม่ใช่แค่เก็บผลลัพธ์ แต่ต้อง เก็บทั้งการตัดสินใจและร่องรอยของงานไปพร้อมกัน
ภายใต้ .tenet/ จะมีสิ่งเหล่านี้ถูกเก็บไว้
- interview
- spec
- harness
- visuals
- knowledge
- journal
- steer
- status
- SQLite state
ดังนั้นมันจึงไม่ใช่เอเจนต์แบบอิงเซสชันที่รันครั้งเดียวแล้วจบ
แต่เป็นโครงสร้างที่มุ่งสะสม บันทึกการพัฒนาที่สามารถอ้างอิงกลับมาใช้ได้อีกในงานถัดไปอย่างต่อเนื่อง
ในแง่ความรู้สึกแล้ว
มันใกล้เคียงกับความพยายามที่จะนำ “โครงสร้างเอกสาร / การตรวจสอบ / การ handoff ที่จำเป็นเวลาส่งงานให้ฟรีแลนซ์หรือผู้รับจ้างภายนอก”
มาปรับใช้กับฝั่ง AI agent มากกว่า
สถานะปัจจุบัน
ตอนนี้ยังอยู่ในช่วงเริ่มต้น
แต่ flow พื้นฐานถูกพัฒนาไว้แล้ว และปัจจุบันมีองค์ประกอบประมาณนี้
- อะแดปเตอร์สำหรับ Claude Code / OpenCode / Codex
- MCP server + CLI
- job orchestration แบบอิง DAG
- persistent state บน SQLite + WAL
- orphan job recovery
- evaluation pipeline แบบ 3-critic
- การจัดการ steer message
- โครงสร้างเอกสาร
.tenet/
ผมได้ลองใช้มันรันจริงเป็นเวลาค่อนข้างนานแล้ว
และยืนยันได้ว่า *มันสามารถรันโดยไม่มีการแทรกแซงจากคนได้นานเกิน 6 ชั่วโมง และให้ผลลัพธ์ที่พร้อมใช้งานได้ทันที
หนึ่งในสิ่งที่ผมใช้งานทุกวันอยู่ตอนนี้ก็เป็นผลลัพธ์ที่สร้างขึ้นโดยใช้ tenet
เพราะยังเป็นโปรเจ็กต์ระยะเริ่มต้น จึงยังมีหลายจุดที่ค่อนข้างหยาบอยู่มาก
หากมีข้อเสนอแนะใด ๆ ก็ยินดีอย่างยิ่งครับ
ยังไม่มีความคิดเห็น