
Ponytail: ทำให้ AI เขียนโค้ดน้อยลงแต่ดีขึ้น
/ 6 min read
Table of Contents
ใครที่ใช้ AI coding agent อย่าง Claude Code, Cursor หรือ Codex อยู่ น่าจะเคยเจออาการนี้ สั่งให้มันทำเรื่องเล็กๆ เช่น “ขอ date picker หน่อย” แล้วมันก็จัดเต็มเกินโจทย์ ลงไลบรารีเพิ่มหนึ่งตัว เขียน wrapper component สร้างไฟล์ stylesheet ใหม่ แถมยังเปิดประเด็นเรื่อง timezone ให้อีก ทั้งที่จริงๆ แค่ <input type="date"> ก็จบแล้ว
AI มันชอบเขียนเยอะ เพราะมันถูกฝึกมาให้ “ช่วยให้เต็มที่” แต่โค้ดที่เยอะเกินจำเป็นก็คือหนี้ที่เราต้องมานั่งอ่าน นั่งดูแล นั่งแก้บั๊กทีหลังนั่นแหละ
แล้วถ้ามีคนเอา “ลุงซีเนียร์ขี้เกียจ” มาใส่ไว้ใน AI ของเราล่ะ? คนที่เห็นโค้ดห้าสิบบรรทัด แล้วมองเฉยๆ ไม่พูดอะไร ก่อนจะลบทิ้งแล้วเขียนแทนด้วยบรรทัดเดียว นั่นแหละคือไอเดียของ Ponytail โปรเจกต์ open source ที่ช่วงนี้เห็นคนพูดถึงกันเต็มฟีดโซเชียลไปหมด เลยอดไม่ได้ที่จะไปส่องดู
สโลแกนของมันบอกหมดในประโยคเดียว “He says nothing. He writes one line. It works.” (เขาไม่พูดอะไร เขาเขียนบรรทัดเดียว แล้วมันก็ทำงานได้)
ส่วนชื่อ Ponytail ก็มาจากมาสคอตของโปรเจกต์นั่นแหละ รูปวาดลุงซีเนียร์มัดผมหางม้าบนหัว README ภาพจำของ dev รุ่นเก๋าที่อยู่ในวงการมานานจนไม่ต้องพิสูจน์อะไรกับใครแล้ว
Ponytail คืออะไร
Ponytail ไม่ใช่ตัวเขียนโค้ดเอง แต่เป็น ปลั๊กอิน/ชุดกฎ (ruleset) ที่ไปครอบพฤติกรรมของ AI agent ที่เราใช้อยู่ ให้มันยึดปรัชญาที่ชื่อว่า “lazy senior developer” ขี้เกียจแบบมือโปร โดยมีความเชื่อหลักว่า
โค้ดที่ดีที่สุด คือโค้ดที่คุณไม่เคยเขียนมันเลย
ฟังดูเหมือนคำคมในโปสเตอร์ออฟฟิศ แต่พอเอามาใช้กับ AI จริงๆ มันเปลี่ยนผลลัพธ์เยอะ เพราะ AI มักจะ over-engineer คือทำเกินโจทย์ Ponytail เลยมาเป็นเบรกให้มันหยุดคิดก่อนว่า “อันนี้จำเป็นต้องเขียนจริงไหม”
ตัวอย่าง before/after ใน README อธิบายชัดมาก ปกติขอ date picker แล้วได้ของพะรุงพะรัง แต่พอมี Ponytail มันจะใส่คอมเมนต์ <!-- ponytail: browser has one --> แล้วตอบกลับแค่ <input type="date"> เพราะเบราว์เซอร์มีให้อยู่แล้ว ไม่ต้องลงอะไรเพิ่ม
หัวใจคือ “ลำดับการตัดสินใจ”
สิ่งที่ทำให้ Ponytail ไม่ใช่แค่คำสั่งลอยๆ ว่า “เขียนให้น้อยๆ นะ” คือมันมี decision hierarchy หรือลำดับขั้นที่ AI ต้องไล่เช็กก่อนจะลงมือเขียนโค้ดทุกครั้ง โดยจะหยุดที่ขั้นแรกที่ใช้ได้เลย
ไล่จากบนลงล่างแบบนี้
- อันนี้จำเป็นต้องมีไหม? → ถ้าไม่ ก็ข้ามไป (หลักการ YAGNI (You Aren’t Gonna Need It) ที่ Martin Fowler อธิบายไว้ว่าอย่าเพิ่งสร้างฟีเจอร์ที่ยังไม่ได้ใช้)
- stdlib ทำได้ไหม? → ใช้ standard library ของภาษานั้น
- เป็นฟีเจอร์ของแพลตฟอร์มอยู่แล้วไหม? → ใช้ของที่ platform มีให้ (เหมือนเคส
<input type="date">) - มีไลบรารีที่ลงไว้แล้วทำได้ไหม? → ใช้ dependency เดิมที่มีอยู่
- เขียนบรรทัดเดียวจบไหม? → ก็เขียนบรรทัดเดียว
- ถ้าเลี่ยงไม่ได้จริงๆ → ค่อยเขียน แต่ให้น้อยที่สุดเท่าที่ทำงานได้
จุดที่ผมชอบคือบรรทัดสุดท้ายของส่วนนี้ “Lazy, not negligent” (ขี้เกียจ แต่ไม่ใช่มักง่าย) เขาเขียนไว้ชัดว่าเรื่อง trust-boundary validation, การกันข้อมูลสูญหาย, ความปลอดภัย และ accessibility คือสิ่งที่ ไม่มีวันถูกตัดทิ้ง ความขี้เกียจในที่นี้คือเลี่ยงโค้ดที่ไม่จำเป็น ไม่ใช่ขี้เกียจจนข้ามเรื่องสำคัญ
เขียนโค้ดบั๊กไม่ได้ ถ้าไม่เขียนโค้ดตั้งแต่แรก
ตัวเลขที่เขาเคลม
ส่วนที่จะทำให้หลายคนสนใจคือตัวเลข เพราะโค้ดน้อยลงแปลว่า token น้อยลง ซึ่งแปลตรงๆ ว่าจ่ายค่า API ถูกลง ตัวเลขชุดล่าสุดใน README วัดจาก session จริงของ Claude Code เทียบกับตอนไม่มี Ponytail
- โค้ดน้อยลงเฉลี่ยราว 54% (บางเคสถึง 94%)
- เร็วขึ้นราว 27%
- ถูกลงราว 20%
- เรื่องความปลอดภัยยังผ่านครบ 100%
ส่วนตัวเลข 80-94% ที่เห็นในป้ายบนภาพหัว README ด้านบน มาจาก benchmark รุ่นแรกที่ยิงงานเดี่ยวๆ 5 อย่าง email validator, debounce, รวมเลขจาก CSV, countdown timer และ rate limiter บนโมเดลสามตัว (Haiku, Sonnet, Opus) รันอย่างละ 10 ครั้งแล้วรายงานค่า median ซึ่งเขายอมรับเองใน README ว่าตัวเลขชุดนั้นโดนเงื่อนไขการทดสอบช่วยอยู่บ้าง เลยขยับมาใช้ตัวเลขจากงานจริงเป็นตัวชูโรงแทน วิธีวัดกับตัวเลขดิบเปิดให้ดูได้ในโฟลเดอร์ benchmarks/ ของ repo และรันซ้ำเองได้ด้วย npx promptfoo eval
ผมยังไม่ได้ลองรัน benchmark เองนะ เลยขอเล่าตามที่เขาเคลมไว้ตรงๆ ใครอยากรู้จริงก็รันซ้ำได้ ซึ่งการที่เขาเปิด method ให้ตรวจสอบได้แบบนี้ก็ถือว่าโปร่งใสกว่าหลายโปรเจกต์ที่โยนแต่ตัวเลขสวยๆ มาให้
ใช้ได้กับ AI ตัวไหนบ้าง
อันนี้คือจุดแข็ง Ponytail ไม่ได้ผูกกับเครื่องมือเดียว ตอนนี้รองรับ agent 16 ตัว (ตอนผมแคปหน้า repo ป้ายยังเขียน 13 อยู่เลย เพิ่มเร็วมาก) ทั้งสายปลั๊กอินและสายไฟล์กฎ เช่น
- Claude Code, Codex, GitHub Copilot CLI, OpenCode, Gemini CLI, Pi ติดตั้งเป็นปลั๊กอินผ่าน marketplace
- Cursor, Windsurf, Cline, Aider, Kiro ก๊อปไฟล์กฎจาก repo ไปวาง (เช่น
.cursor/rules/,.windsurf/rules/)
สำหรับ Claude Code ติดตั้งง่ายมาก พิมพ์สองคำสั่ง
/plugin marketplace add DietrichGebert/ponytail/plugin install ponytail@ponytailฝั่ง GitHub Copilot CLI ก็คล้ายกัน
copilot plugin marketplace add DietrichGebert/ponytailcopilot plugin install ponytail@ponytailมีข้อแม้นิดนึงคือปลั๊กอินฝั่ง Claude Code กับ Codex ใช้ Node.js lifecycle hook เล็กๆ สองตัว เลยต้องมี node อยู่ใน PATH ของเครื่องด้วย ถ้าไม่มี node ตัวสกิลก็ยังทำงานได้ แค่ส่วน always-on จะเงียบไปเฉยๆ ไม่ขึ้น error
โหมดและคำสั่งที่ใช้บ่อย
Ponytail ปรับความเข้มได้ ไม่ใช่เปิดแล้วบีบจนโค้ดอ่านไม่รู้เรื่อง ตั้งระดับผ่านคำสั่ง /ponytail ตามด้วยโหมด แล้วระดับนั้นจะค้างไว้จนกว่าจะเปลี่ยนเองหรือจบ session
/ponytail liteทำตามที่สั่ง แล้วบอกทางที่ขี้เกียจกว่าให้ 1 บรรทัด/ponytail fullค่าเริ่มต้น บังคับใช้ “บันได”: YAGNI → stdlib → ฟีเจอร์ native → บรรทัดเดียว → ขั้นต่ำ/ponytail ultraสุดทาง ลบก่อนเพิ่ม แถมตั้งคำถามกับโจทย์ก่อนเลยว่าจำเป็นจริงไหม- ปิด: พิมพ์
stop ponytail/normal mode//ponytail offแล้วเปิดใหม่ด้วย/ponytail
นอกจากโหมด ยังมีสกิลช่วยงานอีกสองตัว
| คำสั่ง | ทำอะไร |
|---|---|
/ponytail | เปิดโหมดขี้เกียจ (ตัวหลัก) |
/ponytail-review | รีวิว diff หาจุด over-engineering สรุปบรรทัดเดียวต่อจุด |
/ponytail-help | เปิด reference card ดูคำสั่งทั้งหมด |
เวลา AI มันเลือก “ทางลัด” ไว้ มันจะทิ้งคอมเมนต์ ponytail: ไว้ในโค้ด บอกว่าทางลัดนี้มีเพดานแค่ไหน และถ้าจะอัปเกรดต้องทำอะไร ทำให้ทางลัดที่ตั้งใจเลือกไม่หล่นหายไปเฉยๆ กลายเป็น tech debt แบบที่มองเห็นและตามเก็บได้ทีหลัง
อยากให้มันขี้เกียจตั้งแต่เปิดเครื่องเลยก็ตั้ง default mode ได้ ผ่าน env PONYTAIL_DEFAULT_MODE หรือไฟล์ ~/.config/ponytail/config.json ถ้าไม่ตั้งอะไรเลยจะเป็น full
เหมาะกับใคร
ถ้าคุณจ่ายค่า API ของ AI agent เองแล้วบิลเริ่มแสบ Ponytail ช่วยลด token ตรงๆ
ถ้าคุณเป็นคนรีวิว PR ที่ AI generate มาแล้วเบื่อกับโค้ดรกๆ มันช่วยให้ diff สั้นลง อ่านง่ายขึ้น
หรือถ้าคุณแค่อยากให้ AI ตอบโจทย์แบบตรงประเด็น ไม่ใส่ของแถมที่ไม่ได้ขอ ก็ลองได้ เพราะมันเป็น MIT license ฟรี และปิดด้วย /ponytail off เมื่อไหร่ก็ได้
ตัว repo เองก็เล่นมุกตามคอนเซ็ปต์ตัวเองด้วย สัญญาอนุญาตเขาเลือก MIT พร้อมคำอธิบายว่า “The shortest license that works” (สัญญาอนุญาตที่สั้นที่สุดเท่าที่ใช้งานได้) ขี้เกียจกันตั้งแต่เลือก license เลย
เริ่มต้นยังไง
ทั้งหมดอยู่ที่ github.com/DietrichGebert/ponytail มีคู่มือติดตั้งแยกตาม agent แต่ละตัว ตัวอย่าง before/after ในโฟลเดอร์ examples/ และ benchmark เปิดให้รันซ้ำได้ใน benchmarks/ ถ้าใช้ Claude Code อยู่แล้วก็แค่สองคำสั่งตามด้านบน ลองสั่งงานเดิมที่เคยได้โค้ดยาวๆ ดูว่ามันสั้นลงจริงไหม
ส่วนตัวผมว่าสิ่งที่น่าสนใจที่สุดของ Ponytail ไม่ใช่ตัวเลข 94% หรือปลั๊กอินหรอก แต่เป็นการที่มันหยิบเอานิสัยของ “ซีเนียร์ที่เก่งจริง” มาทำให้จับต้องได้ คนเก่งหลายคนที่ผมเคยเจอ เขาไม่ได้เขียนโค้ดเยอะ เขาเขียนน้อยแต่ตรงจุด และมักจะถามกลับว่า “อันนี้ต้องเขียนด้วยเหรอ” ก่อนเสมอ Ponytail พยายามใส่ instinct ข้อนี้ลงไปใน AI ซึ่งผมว่าเป็นทิศทางที่ถูก เพราะปัญหาของโค้ดทุกวันนี้ไม่ใช่เขียนได้น้อยไป แต่คือเขียนเยอะเกินจนดูแลไม่ไหวต่างหาก
ผมยังไม่ได้เอาไปใช้กับงานจริงจังนะ แต่จากตัวอย่าง before/after ใน repo ก็เห็นภาพชัดว่ามันตัดของแถมที่ไม่ได้ขอออกได้จริง ใครใช้ AI agent อยู่แล้วเบื่อโค้ดยาวเกินจำเป็น ลองดูได้คับ


