- เบราว์เซอร์ที่เรนเดอร์ HTML และ CSS ได้ ถูกสร้างขึ้นโดยคนเพียงหนึ่งคนกับ LLM เอเจนต์หนึ่งตัวด้วย Rust ภายในเวลาแค่ 3 วัน
- โปรเจกต์นี้เสร็จสมบูรณ์ด้วยโค้ด ราว 20,150 บรรทัด และมีฟังก์ชันพื้นฐานอย่างการเลื่อนหน้า, ปุ่มย้อนกลับ และโหมด headless
- ออกแบบให้ทำงานได้บน Windows, macOS และ Linux โดยไม่ใช้ไลบรารี Rust ภายนอก
- กระบวนการพัฒนาดำเนินไปในรูปแบบ การทำงานร่วมกับ Codex เอเจนต์ โดยมนุษย์รับหน้าที่ประสานงานและตรวจสอบ ส่วนเอเจนต์เป็นผู้เขียนโค้ด
- ท้ายที่สุด นี่เป็นกรณีศึกษาที่แสดงให้เห็นว่า การจับคู่ ‘คนหนึ่งคน + เอเจนต์หนึ่งตัว’ มีประสิทธิภาพกว่าการใช้หลายเอเจนต์
ภาพรวมของโปรเจกต์
- เป้าหมายคือการสร้าง เบราว์เซอร์พื้นฐานที่สามารถเรนเดอร์ HTML และ CSS ได้ ขึ้นมาใหม่ทั้งหมด
- ไม่รองรับ JavaScript
- ผู้พัฒนาเริ่มต้นจาก “ทำเอาสนุก” และทำงานร่วมกับ LLM เอเจนต์ (Codex)
- ตั้งเงื่อนไขไว้ว่า ต้องเสร็จภายใน 3 วัน, ห้ามพึ่งพา Rust dependency ภายนอก, และ ต้องรองรับ 3 ระบบปฏิบัติการหลัก
- เบราว์เซอร์มี เรนเดอริงเอนจินของตัวเอง พร้อมฟีเจอร์จับภาพหน้าจอ, การคลิกลิงก์ และการทดสอบแบบ regression
Day 1 – การพัฒนาเริ่มต้น
- เริ่มจากการเรนเดอร์ “Hello World” แล้วเพิ่ม การจัดการแท็กซ้อนกัน และ ฟังก์ชันจับภาพหน้าจอ
- กำหนดสเปก HTML/CSS และเพิ่มฟังก์ชันเปรียบเทียบภาพสำหรับ การทดสอบ E2E
- ภายในวันเดียวไปถึงระดับที่สามารถ ดึงเว็บไซต์ด้วย X11 และ cURL แล้วเรนเดอร์ได้
- โค้ดเบสมีประมาณ 7,500 บรรทัด และทุกไฟล์มีขนาดไม่เกิน 1,000 บรรทัด
Day 2 – ขยายฟังก์ชัน
- เพิ่มโหมด --headless เพื่อแก้ปัญหาหน้าต่างถูกเปิดขึ้นระหว่างการทดสอบ
- ปรับปรุง การปรับขนาดหน้าต่าง, ความเข้ากันได้, ประสิทธิภาพ และการเรนเดอร์ฟอนต์
- เวิร์กโฟลว์คือการแชร์ภาพหน้าจอของเว็บไซต์ แล้วให้ Codex สร้างผลลัพธ์นั้นขึ้นมาใหม่
- โค้ดส่วนใหญ่เขียนโดยเอเจนต์ ส่วนมนุษย์รับหน้าที่ตรวจทานและอนุมัติ
Day 3~4 – ทำให้เสร็จสมบูรณ์และรองรับข้ามแพลตฟอร์ม
- เพิ่มฟังก์ชันสำคัญของเบราว์เซอร์ เช่น การเลื่อนหน้า, debug log, ปุ่มย้อนกลับ
- รองรับ macOS และ Windows พร้อมผ่านการทดสอบ
- เสร็จสิ้น การรวม CI และรีลีสบิลด์ โดยใช้เวลาพัฒนารวมประมาณ 72 ชั่วโมง
ผลลัพธ์และสถิติโค้ด
- โค้ดเบสสุดท้ายมีขนาด ราว 20,150 บรรทัด ใน 72 ไฟล์
- ไฟล์หลักประกอบด้วยโมดูลอย่าง
layout, style, platform, browser เป็นต้น
- Cargo.lock ว่างเปล่า หมายความว่าสามารถรันได้แบบอิสระเต็มรูปแบบโดยไม่ต้องใช้ Rust package ภายนอก
- สามารถดาวน์โหลด ไบนารีที่สร้างด้วย CI และซอร์สโค้ด ได้โดยตรงจาก GitHub
บทเรียนสำคัญ
- การจับคู่คนหนึ่งคน + เอเจนต์หนึ่งตัว มีประสิทธิภาพมากกว่าการใช้เอเจนต์นับพันตัว
- เอเจนต์เดี่ยวสามารถทำงานกับโค้ดเบสเดียวเป็นเวลานานและสร้างความคืบหน้าที่จับต้องได้
- มีความเป็นไปได้ที่จะขยายสู่รูปแบบที่หลายคนต่างมีเอเจนต์ของตัวเอง
- การชะลอความเร็วลงกลับอาจนำไปสู่ผลลัพธ์ที่เร็วกว่าและดีกว่า
- บทบาทของมนุษย์ที่ควบคุมเอเจนต์ อาจสำคัญกว่าการออกแบบระบบเสียอีก
- โดยสรุป กรณีนี้แสดงให้เห็นว่า สำหรับคำถามที่ว่า “ถ้าใส่หลายเอเจนต์เข้าไป การพัฒนาจะเร็วขึ้นไหม?”
การทำงานร่วมกันระหว่างมนุษย์หนึ่งคนกับเอเจนต์หนึ่งตัวอาจเป็นแนวทางที่ใช้งานได้จริงและมีประสิทธิภาพมากกว่า
4 ความคิดเห็น
ผม/ฉันอาจจะไม่ค่อยรู้เท่าไหร่ เลยสงสัยว่าที่ในความเห็นบน Hacker News พูดถึง
บล็อกของ simonกันบ่อย ๆ นี่ มันเป็นบล็อกเกี่ยวกับอะไรกันเหรอครับ/คะ...?เหตุผลที่โพสต์บล็อกของ Simon Willison ถูกพูดถึงบน Hacker News บ่อยมาก น่าจะเป็นเพราะ
น่าจะเป็นบล็อกที่ได้อันดับ 1 ในบรรดา บล็อกที่ได้รับความนิยมมากที่สุดบน Hacker News ในปี 2025 เลยครับ ทั้งชื่อเสียงก็มีอยู่แล้ว และจำนวนบทความที่เผยแพร่ก็เยอะมากด้วย ดังนั้นในมุมของผู้ใช้ Hacker News ทั่วไป มันจึงน่าจะเป็นบล็อกที่ถูกเข้าไปดูบ่อยที่สุด และเลยถูกมองเป็นตัวชี้วัดไปโดยธรรมชาติ
ความคิดเห็นบน Hacker News
คิดว่านี่เป็นเดโมเบราว์เซอร์ที่สร้างโค้ดได้ดีกว่า FastRender ของ Cursor มาก
มันเล็กกว่ามาก อยู่ที่ราว 20,000 บรรทัดของ Rust ใช้ เฉพาะไลบรารีของระบบ สำหรับการเรนเดอร์ภาพและข้อความ และโค้ดก็อ่านง่าย
ตัวอย่างเช่น ถ้าดู โค้ด implementation ของ flexbox ก็จะเห็นว่าชัดเจน
เขายังโพสต์ ภาพหน้าจอ ที่เรนเดอร์บล็อกของฉัน ซึ่งจัดการ CSS gradient และไอคอน SVG ได้ดี แต่ล้มเหลวกับ PNG
เดิมทีฉันคิดว่าเบราว์เซอร์เรนเดอร์ HTML+CSS เป็นโจทย์ที่เหมาะอย่างยิ่งสำหรับการสาธิตเอเจนต์แบบขนาน แต่ก็น่าทึ่งที่แค่ coding agent ตัวเดียวก็ทำได้
สิ่งสำคัญไม่ใช่แค่ใช้โทเคนเยอะ แต่คือการ ใช้งานเอเจนต์อย่างมีประสิทธิภาพ
ฉันเองก็เคยสร้างโปรเจ็กต์หลายอันแล้วปล่อยทิ้งไว้หลายวันเหมือนกัน เพราะเอเจนต์ทำแค่ตามที่สั่งโดยไม่มีฟีดแบ็ก ถ้าเริ่มไปผิดทางก็ยิ่งขุดหลุมลึกกว่าเดิม
ต่อให้ Claude หลงไปคนละทาง ถ้ามี โครงสร้างเอเจนต์ ที่ถูกต้องก็ยังดึงกลับมาได้
ตอนนี้ผมกำลังทดลองแยกเอเจนต์เป็นผู้ประเมิน นักวิจัย และผู้ลงมือทำ
ให้มันขยายการทดสอบตามคะแนนหรือสืบหาสาเหตุที่ล้มเหลว และถ้าไม่มีการปรับปรุงก็ทิ้ง commit นั้นไป
โครงสร้างแบบนี้เอื้อต่อ การควบคุมคุณภาพโค้ด มากกว่าเยอะ
ในยุคที่โค้ดมีต้นทุนต่ำและทิ้งได้ เวิร์กโฟลว์เองก็ต้องเปลี่ยนไป
มันให้ความรู้สึกเหมือนเรื่อง ‘David vs Goliath’ ที่ 1 คน + 1 เอเจนต์เอาชนะเบราว์เซอร์มูลค่า 5 ล้านดอลลาร์และ 1.6 ล้าน LOC ได้
AI ก็ยังคงเป็น กล่องดำ อยู่ดี ทุกคนยังอยู่ในช่วงทดลองและหาทิศทางกันไป
ปี 2026 เพิ่งผ่านไปแค่เดือนเดียว น่าสนใจว่าเราจะได้เห็นการทดลองอะไรอีกต่อจากนี้
น่าจะสนุกถ้า Simon รีวิวเธรดทำนายปี 2026 ของ HN เป็นระยะๆ
เขาตั้งกติกาว่าจะให้เวลาจำกัด 3 วัน และต้องรองรับ X11/Windows/macOS โดย ไม่ใช้ Rust third-party crate ใช้แค่ไลบรารีพื้นฐานของ OS
สุดท้ายทำเสร็จที่ประมาณ 20,000 LOC โดยในนั้น 14,000 บรรทัดเป็นเอนจิน และ 6,000 บรรทัดเป็นโค้ดรองรับแพลตฟอร์ม
มีการเปิดเผย ซอร์สโค้ดและไบนารี แล้ว
ตอนนี้มี machine-readable test suite เลยทำงานได้มีประสิทธิภาพกว่ามาก
เมื่อก่อนพฤติกรรมของ IE แทบจะเป็นมาตรฐานโดยพฤตินัย แต่ตอนนี้กูเกิล แอปเปิล และอีกหลายเจ้ามีส่วนร่วมในการทำมาตรฐาน จึงดีขึ้นมาก
นอกเหนือจากฟีเจอร์แล้ว ผมสงสัยเรื่อง การตรวจสอบความปลอดภัย ของโค้ดเบสแบบนี้
Rust น่าจะช่วยได้ แต่ก็ไม่แน่ใจว่าการรับประกันของภาษาเพียงอย่างเดียวจะเพียงพอไหม
Rust ป้องกันได้แค่ข้อผิดพลาดหน่วยความจำพื้นฐาน แต่ไม่ได้กันเรื่องอย่างการเข้าถึงไฟล์ในเครื่อง
ถึงจะไม่มี JS engine เลยทำให้ data exfiltration ยาก แต่ถ้าตรวจสอบจริงจังก็น่าจะเจอ ช่องโหว่ร้ายแรง หลายจุด
ชุมชนรอ browserBench กันมานาน และดีใจที่ในที่สุดก็เริ่มต้นเสียที
เบราว์เซอร์เป็นหนึ่งในซอฟต์แวร์ที่ซับซ้อนที่สุด ดังนั้นความพยายามแบบนี้จะกลายเป็น จุดอ้างอิงสำหรับประเมินขีดจำกัด ได้
ยังนึกภาพไม่ออกว่าจะสร้างเบราว์เซอร์ด้วย 20,000 บรรทัดได้อย่างไร
แค่ zlib ก็ 12,000 บรรทัดแล้ว เลยรู้สึกเหมือนน่าจะมีอะไรขาดหายไป
เลยสงสัยว่ามันแค่เรียกใช้การเรนเดอร์ของ OS หรือเปล่า
README ระบุไว้อย่างชัดเจนว่าใช้ไลบรารีใดบ้าง
ผมลองรันดูแล้ว การเรนเดอร์ค่อนข้าง สับสน
สีลิงก์กับขีดเส้นใต้ไม่สม่ำเสมอ และบน Windows ปุ่มย้อนกลับก็ไม่ทำงาน
ถึงอย่างนั้นก็ยังเรนเดอร์หน้าแรกของ HN หรือบล็อกของ Simon ได้ค่อนข้างดี
เป้าหมายคือทำฟังก์ชันใกล้เคียงกันแต่ใช้ LOC น้อยกว่า
มันไม่มีสไตล์ชีตเริ่มต้น สีลิงก์เลยไม่สม่ำเสมอ
บน Windows 11 ปุ่มย้อนกลับทำงานได้ ถ้าคุณใช้ Windows 10 นั่นอาจเป็นสาเหตุก็ได้
ดูเหมือนว่าการเรนเดอร์บล็อกของ Simon จะกลายเป็น เป้าหมายตัวแทน ของเบราว์เซอร์ AI ไปแล้ว
แต่ตอนนี้มันยังใกล้เคียงกับ renderer มากกว่าจะเป็นเบราว์เซอร์จริง
ถ้า AI ไปช่วย เติมเต็ม implementation ของ API ในโปรเจ็กต์อย่าง Servo น่าจะน่าประทับใจกว่า
ถึงอย่างนั้นก็ยังดีกว่าความพยายามของ Cursor และอย่างน้อยคำว่า “คอมไพล์ได้” ก็ถือเป็นความก้าวหน้าขั้นต่ำ
สงสัยว่าถ้าทำคนเดียวจะใช้เวลานานแค่ไหน
ถ้าอยากเข้าใจความช่วยเหลือจากเอเจนต์ ก็ต้องรู้ว่าในคู่มือที่ให้มันไปนั้นมี ความเชี่ยวชาญเชิงลึก แค่ไหน
ผมรู้ Rust แต่ไม่รู้ X11 หรือ macOS, Windows API เลย คงเริ่มต้นได้ยากด้วยซ้ำ
แต่ผมมีประสบการณ์เยอะด้านการทดสอบ อินฟรา และการออกแบบ ซึ่งช่วยมากในการทำงานร่วมกับเอเจนต์
โปรเจ็กต์นี้ตามเกณฑ์ปี 2000 ประเมินได้ที่ 4.58 คน-ปี, 610,000 ดอลลาร์
ส่วนตามเกณฑ์ปี 2025 อยู่ที่ประมาณ 5.6 ปี, 1.38 ล้านดอลลาร์
สิ่งที่ทำให้บทความนี้น่าสนใจไม่ใช่ผลลัพธ์ แต่คือ กระบวนการสร้างและข้อจำกัดที่ตั้งไว้
บทความส่วนใหญ่มักโฟกัสที่ผลงานหรือผู้เขียน แต่อันนี้ให้ มุมมองเชิงกระบวนการ ที่น่าสนใจ
เลยรู้สึกว่าการสำรวจว่าจริงๆ แล้วส่วนไหนยาก และกระบวนการไหนที่ผิดพลาด น่าจะมีความหมายมากกว่า
เป็นงานที่น่าประทับใจ
สงสัยว่าถ้าจะทำ Accessibility โดยไม่พึ่ง Rust dependency ต้องทำอย่างไร
Windows/macOS ทำได้ผ่าน UI Automation และ NSAccessibility แต่บน X11 มีทางเลือกคือ