สวัสดีครับ
ตอนนี้ผมกำลังสร้าง Tenet ซึ่งเป็น AI coding agent harness ที่สามารถทำงานอัตโนมัติได้ต่อเนื่องยาวนาน เลยอยากมาแชร์ครับ

พอลองใช้ AI coding agent จะพบว่างานสั้น ๆ มักทำได้ค่อนข้างดี แต่พอเป็นงานพัฒนาที่กินเวลาหลายชั่วโมงขึ้นไป ก็มักเริ่มรู้สึกไม่มั่นใจได้เร็วมาก
ทั้งสเปกที่เริ่มพร่าเลือน, ไม่แน่ใจว่าเทสต์ที่รันผ่านนั้นเพียงพอจริงไหม, ระหว่างทางก็เปลี่ยนทิศทางได้ยาก, และถ้าเซสชันหลุด บริบทก็หายตามไปด้วย

Tenet คือฮาร์เนสที่สร้างขึ้นมาเพื่อลดปัญหาเหล่านั้น
มันไม่ได้เป็นแค่ “เอเจนต์ที่รันได้นาน” แต่ใกล้เคียงกับโครงสร้างที่ช่วยรักษาทิศทางและคุณภาพเอาไว้ได้แม้จะรันต่อเนื่องเป็นเวลานานมากกว่า

โดยคร่าว ๆ จะทำงานตามลำดับแบบนี้

  1. Interview

    • เริ่มจากทำให้ requirement ชัดเจนขึ้นผ่านการสัมภาษณ์
    • หากจำเป็นก็ทำ technical research ไปพร้อมกัน
  2. Visuals / Architecture

    • สร้าง architecture diagram หรือ UI mockup
    • ถ้าเป็นงาน UI ก็จะสร้างหลาย variation เพื่อให้เลือกทิศทางได้ก่อน
  3. Spec / Harness / Scenarios

    • บันทึก implementation spec, test/validation harness และ scenario ไว้เป็นเอกสาร
    • ไม่ได้กำหนดแค่ว่า “จะสร้างอะไร” แต่ตรึงไว้ด้วยว่า “อะไรจึงจะถือว่าผ่าน”
  4. DAG decomposition

    • แยกงานออกเป็น dependency graph
    • job ที่เป็นอิสระจากกันสามารถรันแบบขนานได้
  5. 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

เพราะยังเป็นโปรเจ็กต์ระยะเริ่มต้น จึงยังมีหลายจุดที่ค่อนข้างหยาบอยู่มาก
หากมีข้อเสนอแนะใด ๆ ก็ยินดีอย่างยิ่งครับ

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น