2 คะแนน โดย marshallku 7 시간 전 | 3 ความคิดเห็น | แชร์ทาง WhatsApp

ผมรัน AI coding agent อย่าง Claude Code และ Codex ไว้พร้อมกันใน tmux หลายเซสชัน แล้วก็เริ่มเจอปัญหา ผมพลาดไปว่าเซสชันไหนจบแล้ว เซสชันไหนติดอยู่และกำลังรอผมอยู่ ส่วน agent ที่รันอยู่เบื้องหลัง กว่าจะรู้ก็โดน usage limit ไปแล้ว
tmux ทำได้ถึงแค่นี้ ผมเลยสร้าง comux ขึ้นมา

comux คือ multiplexer สไตล์ tmux สำหรับรัน AI agent

  • แสดงสถานะ agent ของทุกเซสชัน (working / ready / blocked) แบบเรียลไทม์ใน sidebar
  • ส่ง desktop notification ทันทีเมื่อ agent จบเทิร์นหรือกำลังรอ input
  • แม้จะปิด server หรือ reboot เมื่อ restart ก็จะ restore agent แต่ละตัวกลับไปยังจุดที่คุยค้างไว้ (ต่างจาก tmux-resurrect ตรงที่ restart session)
  • ดู usage ของ agent และ notification ที่สะสมอยู่ได้แบบเรียลไทม์จาก status bar

เป็น static binary ไฟล์เดียวที่ไม่มี dependency จึงรันได้ทุกที่ เช่น server แบบ SSH headless
เป็นส่วนหนึ่งของโปรเจกต์ terminal ที่ใหญ่กว่า (copad) แต่สามารถติดตั้งเฉพาะ comux แยกต่างหากได้:

# ติดตั้งเฉพาะ Comux  
curl -fsSL https://raw.githubusercontent.com/marshallku/copad/… | bash  
  
# ติดตั้งรวม Copad ด้วย (Linux & MacOS)  
curl -fsSL https://raw.githubusercontent.com/marshallku/copad/master/install.sh | bash  

บันทึกการสร้างตลอด 4 เดือน: https://marshallku.com/dev/road-to-making-my-own-terminal/

ยินดีรับ feedback จากคนที่รัน agent หลายตัวครับ

3 ความคิดเห็น

 
ohah173 5 시간 전

ผมอ่านบทความบล็อกแล้วเช่นกันครับ
ในฐานะที่ผมเองก็กำลังพัฒนาเทอร์มินัลด้วยแรงจูงใจคล้าย ๆ กัน เลยมีข้อสงสัยขึ้นมาครับ

ส่วนตัวแล้วผมรู้สึกว่าไม่เคยมียุคไหนที่สภาพแวดล้อม DX เปลี่ยนเร็วเท่าช่วงนี้ และแตกต่างกันไปตามนักพัฒนาแต่ละคนขนาดนี้
ไม่แน่ใจว่าผู้สร้างเองก็รู้สึกแบบเดียวกันไหม แต่ยิ่งเป็นช่วงแบบนี้ ผมคิดว่าการมีอำนาจควบคุมอยู่กับตัวเองยิ่งได้เปรียบกว่า
และเมื่อคิดว่า “รากฐานของ DX ในยุค AI คืออะไร?” ผมก็มองว่ามันคือฐานที่เป็นเทอร์มินัลครับ

ผมได้ลองใช้เทอร์มินัลยอดนิยมช่วงนี้มาหมดแล้ว แต่การป้อนภาษาเกาหลีในเทอร์มินัลส่วนใหญ่ยังทำได้ไม่ดี และเวลาใช้เอเจนต์ DX/UX ก็ไม่สะดวก สุดท้ายเลยได้ข้อสรุปว่าควรพัฒนาเอง และกำลังทำอยู่ ซึ่งผมคิดว่าผมเองก็ได้ผลิตภาพที่ดีกว่าคนอื่นผ่านเทอร์มินัลของตัวเองครับ

ในกรณีของผม เพื่อให้ได้อำนาจควบคุมอย่างเต็มที่
ผมคิดว่าต้องลดการพึ่งพาไลบรารีภายนอกให้น้อยที่สุดด้วย จึงเลือกพัฒนาทุกอย่างเองด้วย Zig (ยกเว้นกรณีที่เลี่ยงไม่ได้อย่าง WebView)

พออ่านบทความบล็อกและดูโค้ดแล้ว เห็นว่าคุณเลือก Rust และเลือกใช้ไลบรารีภายนอกที่มีอยู่ใน Rust เช่น ratatui มากกว่าการพัฒนาเองทั้งหมด เลยอยากทราบเหตุผลครับ
เพราะในบทความเองก็ดูเหมือนจะมีประเด็นที่เกิดจากการพึ่งพาไลบรารีภายนอกอยู่เหมือนกัน

อีกอย่าง เนื่องจาก WebView เป็น WebView แบบเนทีฟ สภาพแวดล้อมเว็บส่วนใหญ่ไม่ได้เป็น Safari ดังนั้นการทดสอบ E2E แบบสมบูรณ์น่าจะทำได้ยาก ในส่วนนี้คุณปล่อยให้เป็นหน้าที่ของเครื่องมือทดสอบภายนอกไปเลยหรือเปล่าครับ? หรือมีแผนจะใส่ CEF ในอนาคตด้วยไหมครับ

ตอนนี้ผมเองก็ใช้เทอร์มินัลของตัวเองมาระดับหนึ่งและเข้าสู่ช่วงทำให้เสถียรแล้ว เลยอยู่ในขั้นที่คิดเรื่องการเพิ่มฟีเจอร์ การวางแผน หรือ UX อยู่มาก แต่ระหว่างพัฒนาคงมีแครชหรือบั๊กต่าง ๆ เยอะเหมือนกัน

ผมจึงอยากทราบด้วยว่า หลังเริ่มพัฒนาแล้ว ใช้เวลาประมาณเท่าไรถึงเสถียรพอที่จะรันงานต่าง ๆ ผ่านเทอร์มินัลที่พัฒนาขึ้นเอง แทนที่จะใช้เทอร์มินัลภายนอกครับ

 
marshallku 5 시간 전

สวัสดีครับ!
ขอบคุณที่แบ่งปันประสบการณ์และความคิดเห็นดี ๆ นะครับ

แน่นอนว่าเมื่อต้นทุนในการผลิตโค้ดลดลง เส้นทางในการทำเองก็เปิดกว้างขึ้น แต่โดยส่วนตัวแล้ว ผมมองเรื่องการนำไลบรารีภายนอกมาใช้โดยไม่เกี่ยวกับว่าหรือไม่ว่ายุค AI จะมาถึงครับ

  1. ไม่มีไลบรารีที่ตอบโจทย์ความต้องการของผม
  2. การสร้างใหม่ถูกกว่าการนำเครื่องมือที่คล้ายกันมาดัดแปลงเอง

ผมมักจะลงมือทำเองก็ต่อเมื่อคิดว่าสองข้อนี้เป็นจริงเท่านั้นครับ
มีเหตุผลหลายอย่าง แต่ท้ายที่สุดแล้ว ต่อให้เป็นชิ้นส่วนโค้ดเล็กแค่ไหน เมื่อผมเริ่มดูแลมัน ก็จะเข้าสู่ขอบเขตที่ผมต้องตรวจทาน ทดสอบ และบำรุงรักษาเอง และผมคิดว่ามันมีต้นทุนที่มากกว่าแค่การเขียนโค้ดตามมาเสมอครับ
ประเด็นที่พบในระหว่างการพัฒนาก็มีการชนกับโปรแกรมที่ค่อนข้างเป็นแกนหลักอย่าง window manager อยู่มาก ดังนั้นถ้าทำทั้งหมดนี้แบบ build from scratch ผมคิดว่าคงต้องใช้เวลาไปกับการพัฒนาและตรวจสอบความถูกต้องมากกว่าช่วงเวลาที่ใช้ดีบักและทดสอบปัญหาการชนกับ dependency ภายนอกมากทีเดียวครับ

นอกจากนี้ ตั้งแต่เริ่มพัฒนา ผมก็ใช้เครื่องมือที่ผมทำเองมาโดยตลอดแม้จะเจ็บปวดอยู่เรื่อย ๆ และเหตุผลที่ทำแบบนั้นได้ อาจเป็นเพราะเริ่มพัฒนาบน dependency บางส่วนอยู่แล้วก็ได้ครับ
เช่นเดียวกับกรณีที่ถอด SwiftTerm ออกจาก MacOS ก่อนอื่นผมนำ dependency ภายนอกเข้ามาเพื่อดูว่าแนวคิดที่ผมต้องการทำงานได้หรือไม่ และเมื่อมีสิ่งที่ต้องพัฒนาเองก็เริ่มลงมือทำเอง แต่แม้ในจุดนั้น โปรแกรมของผมก็ยังทำงานได้ด้วย dependency ภายนอกอยู่ ทำให้ผมสามารถทุ่มแรงต่อไปกับการทำให้เสถียรและเพิ่มฟีเจอร์บนฐานนั้นได้ครับ

เพิ่มเติมคือ ถ้านำ webkit เข้ามา เว็บแอปส่วนใหญ่จะทำงานเหมือนกับตอนเปิดในเบราว์เซอร์ทั่วไปครับ!
ช่วงหลังผมก็ใช้ทั้งเครื่องมือที่ควบคุม headless browser จาก cli ได้ และ claude in chrome อย่างจริงจังอยู่แล้ว อีกทั้งไม่อยากให้เทอร์มินัลต้องแบก chromium จนใช้หน่วยความจำมากเกินไป ถ้าไม่มีเรื่องใหญ่เกิดขึ้น ผมคิดว่าคงจะไม่เปลี่ยน tech stack ของ webview ภายในเทอร์มินัลมากนักครับ

ขอบคุณที่อ่านครับ!

 
marshallku 7 시간 전

ลิงก์ติดตั้ง multiplexer ถูกตัดไปครับ.. หากดู รายการนี้ ใน README จะสามารถติดตั้งเฉพาะ multiplexer ได้