teach-me-ai / sources / MP-0
⟵ กลับหน้าแทร็กเสริม
MP-0 · mattpocock/skills

Skills For Real Engineers — ปรัชญาและการติดตั้ง

⏱️ ~18 นาที 🎯 เข้าใจ 4 failure modes, ความต่าง user/model-invoked และการติดตั้ง 📦 ต้นทาง: skills/README.md · CONTEXT.md

แทร็กนี้พาไปรู้จัก mattpocock/skills — ชุด agent skills ที่ Matt Pocock ใช้ทำงานจริงทุกวัน ไม่ใช่แค่ demo สวยๆ บทนี้เป็นบทเปิด (MP-0) จะพาไปเข้าใจ ปรัชญาเบื้องหลัง ว่าทำไม skill เหล่านี้ถึงถูกออกแบบให้ "เล็ก ปรับง่าย ประกอบกันได้" แทนที่จะเป็นกระบวนการใหญ่ก้อนเดียว, เข้าใจ 4 failure modes ที่พบบ่อยเวลาใช้ AI agent เขียนโค้ด พร้อมยาที่ใช้แก้แต่ละอาการ, ความต่างระหว่าง user-invoked กับ model-invoked skill, และวิธีติดตั้งจริงในโปรเจกต์ ถ้าคุณทำงานสาย TypeScript/NestJS หรือ Go นี่คือชุดเครื่องมือที่เอาไปวางบน repo จริงได้ทันที

ปรัชญา: Real engineering, not vibe coding

README ของ repo นี้เปิดประโยคแรกตรงๆ ว่า skill เหล่านี้คือสิ่งที่ Matt Pocock ใช้ทำ "real engineering, not vibe coding" — งานวิศวกรรมจริง ไม่ใช่การโยนโจทย์ให้ AI แล้วปล่อยไหลตามอารมณ์

ประเด็นที่น่าสนใจคือ การเทียบกับแนวทางอื่นอย่าง GSD, BMAD, และ Spec-Kit — เฟรมเวิร์กเหล่านี้พยายามช่วยด้วยการ "เป็นเจ้าของกระบวนการทั้งหมด" (own the process) เช่น บังคับให้ทำตามขั้นตอนตายตัวตั้งแต่ต้นจนจบ แต่ผลข้างเคียงคือ คุณเสียการควบคุม และเมื่อเกิดบั๊กระหว่างทาง กลับแก้ยากขึ้น เพราะกระบวนการที่ล็อกไว้ไม่ยืดหยุ่นพอให้คุณเข้าไปจัดการปัญหาเฉพาะจุด

แนวทางของ skills repo นี้ต่างออกไป: skill แต่ละตัวถูกออกแบบให้

  • เล็ก (small) — แต่ละ skill โฟกัสงานเดียว ไม่พยายามทำทุกอย่างในตัวเดียว
  • ปรับง่าย (easy to adapt) — แก้ไข hack เป็นของตัวเองได้ ไม่ใช่กล่องดำ
  • ประกอบกันได้ (composable) — เอามาต่อกันเป็น flow ที่ใหญ่ขึ้นได้ตามงาน
  • ใช้ได้กับทุกโมเดล — ไม่ผูกกับ Claude เพียงตัวเดียว

พูดง่ายๆ คือแทนที่จะให้ AI "เป็นคนขับ" กระบวนการทั้งหมด คุณยังเป็นคนขับอยู่ เพียงแต่มีชุดเครื่องมือที่ผ่านการกลั่นจาก "ทศวรรษของประสบการณ์ทำ software engineering จริง" (ตามคำใน README) มาช่วยแต่ละจุดของงาน

💡

เทียบกับงานที่คุณคุ้นเคย: นี่คล้ายกับความต่างระหว่าง framework ที่บังคับโครงสร้างทั้งหมด (opinionated ทั้ง stack) กับชุด library เล็กๆ ที่คุณเลือกประกอบเองได้ — NestJS ให้โครงสร้างแน่นอน ส่วน skills พวกนี้เหมือน utility ที่หยิบมาใช้เฉพาะจุดที่ต้องการ ไม่บังคับทั้ง workflow

4 failure modes ที่พบบ่อย และยาที่ใช้แก้

README อธิบายว่า skill ทั้งหมดถูกสร้างมาเพื่อแก้ 4 อาการที่ Matt เจอซ้ำๆ เวลาทำงานกับ Claude Code, Codex และ coding agent ตัวอื่น ลองดูภาพรวมก่อน แล้วค่อยไล่ทีละอาการ

① Misalignment Agent ทำไม่ตรงใจ เพราะ ไม่มีใครรู้ชัดว่าต้องการอะไร ยา: grilling session /grill-me · /grill-with-docs ซักถามละเอียดก่อนเริ่มลงมือ ② Too verbose Agent พูดยาวเกิน เพราะ ไม่รู้ภาษา/ศัพท์เฉพาะโปรเจกต์ ยา: ubiquitous language CONTEXT.md (ผ่าน /grill-with-docs) ศัพท์ร่วมกัน ลดคำฟุ่มเฟือย ③ Code doesn't work Agent เขียนพัง เพราะ ไม่มี feedback loop ที่ดีพอ ยา: feedback loop /tdd · /diagnosing-bugs red-green-refactor + diagnosis loop ④ Ball of mud โค้ดพันกันเป็นโคลน เพราะ agent เร่งความเร็ว entropy ของระบบ ยา: design discipline codebase-design · improve-codebase-architecture ใส่ใจ design ของระบบทุกวัน
4 failure modes จาก README ของ mattpocock/skills เทียบกับ skill ที่ใช้แก้แต่ละอาการ

① Misalignment — Agent ไม่ทำตามที่ตั้งใจ

README อ้างประโยคจาก The Pragmatic Programmer ว่า "no-one knows exactly what they want" — ไม่มีใครรู้ชัด 100% ว่าต้องการอะไร ปัญหานี้เกิดกับ dev มนุษย์มาก่อนแล้ว และเกิดซ้ำในยุค AI: มีช่องว่างการสื่อสาร (communication gap) ระหว่างคุณกับ agent

ยาที่ใช้คือ grilling session — ให้ agent ถามคำถามละเอียดกลับมาก่อนเริ่มทำงานจริง ผ่าน /grill-me (สำหรับงานทั่วไปที่ไม่ใช่โค้ด) และ /grill-with-docs (แบบเดียวกันแต่มีของแถมเพิ่ม — ดูหัวข้อถัดไป) README บอกว่านี่คือ skill ยอดนิยมที่สุด แนะนำให้ใช้ ทุกครั้ง ที่จะเปลี่ยนแปลงอะไรสักอย่าง

② Too verbose — Agent พูดยืดยาวเกินจำเป็น

อ้างจาก Domain-Driven Design ของ Eric Evans: ตอนเริ่มโปรเจกต์ dev กับ domain expert มักพูดกันคนละภาษา agent ก็เจอปัญหาเดียวกัน — ถูกโยนเข้าโปรเจกต์แล้วต้องเดาศัพท์เฉพาะไปเรื่อยๆ ผลคือใช้ 20 คำในที่ที่ควรใช้แค่ 1 คำ

ยาคือ shared language — เอกสารที่ช่วยถอดรหัสศัพท์เฉพาะของโปรเจกต์ให้ agent อ่านเข้าใจ ตัวอย่างจาก README: ประโยค "There's a problem when a lesson inside a section of a course is made 'real' (i.e. given a spot in the file system)" เขียนสั้นลงเป็น "There's a problem with the materialization cascade" เมื่อมี CONTEXT.md นิยามคำว่า materialization ไว้แล้ว

กลไกนี้ฝังอยู่ใน /grill-with-docs — เป็น grilling session ที่ช่วยสร้าง shared language กับ AI และบันทึกการตัดสินใจที่อธิบายยากไว้เป็น ADR (Architecture Decision Record) ไปในตัว README ถึงกับบอกว่านี่อาจเป็นเทคนิคที่เจ๋งที่สุดใน repo นี้

ประโยชน์ของ shared language ไม่ได้มีแค่ลดความยืดยาด: ตัวแปร ฟังก์ชัน และไฟล์ถูกตั้งชื่อสอดคล้องกันตามภาษาร่วม ทำให้ codebase เดินสำรวจง่ายขึ้นสำหรับ agent และ agent ใช้ token คิดน้อยลง เพราะมีภาษาที่กระชับกว่าให้ใช้

③ Code doesn't work — ตกลงกันแล้วแต่โค้ดยังพัง

อ้างจาก The Pragmatic Programmer อีกครั้ง: "ก้าวเล็กๆ ที่ตั้งใจเสมอ อัตราของ feedback คือความเร็วสูงสุดที่ทำได้" ต่อให้ตกลงกับ agent ได้ตรงใจแล้ว แต่ถ้าไม่มี feedback ว่าโค้ดที่เขียนออกมา รันได้จริงไหม agent ก็เหมือนบินโดยไม่เห็นจอเรดาร์

ยาคือชุด feedback loop ที่คุ้นเคย: static types, browser access, automated tests โดยเฉพาะ red-green-refactor loop — agent เขียน test ที่ fail ก่อน แล้วค่อยแก้ให้ผ่าน README บอกว่านี่คือ pattern ที่ทำให้โค้ดคุณภาพดีขึ้นมาก

ผูกกับ skill สองตัว: /tdd (สอน agent ทำ red-green-refactor พร้อมเกณฑ์ว่า test แบบไหนดี/ไม่ดี) และ /diagnosing-bugs (ห่อ best practice การ debug ไว้เป็น loop ที่มีวินัย) — ถ้าคุณเขียน NestJS อยู่แล้ว นึกภาพว่า /tdd คือคนช่วยบังคับให้เขียน unit test ของ service ก่อน implement จริง ไม่ใช่ทิ้งไว้ทำทีหลัง

④ Ball of mud — โค้ดกลายเป็นโคลนพันกัน

อ้างจาก Kent Beck (Extreme Programming Explained): "ลงทุนกับ design ของระบบทุกวัน" และ John Ousterhout (A Philosophy of Software Design): "โมดูลที่ดีที่สุดคือโมดูลที่ลึก — เข้าถึง functionality จำนวนมากผ่าน interface ที่เรียบง่าย"

ปัญหาคือ agent เร่งความเร็วการเขียนโค้ดได้มาก แต่นั่นก็แปลว่า เร่ง entropy ของระบบ ไปด้วย — codebase ซับซ้อนขึ้นเร็วอย่างที่ไม่เคยเป็นมาก่อน ยาคือแนวทางใหม่: ใส่ใจ design ของโค้ดจริงจัง ฝังอยู่ทุกชั้นของ skills กลุ่มนี้ — /to-spec จะซักถามว่าคุณกำลังแตะโมดูลไหนก่อนสร้าง spec และที่สำคัญคือ /improve-codebase-architecture ที่ช่วยกู้ codebase ที่กลายเป็นโคลนไปแล้ว README แนะนำให้รันสิ่งนี้กับ codebase ของคุณทุกๆ สองสามวัน

User-invoked vs Model-invoked — ใครเป็นคนกด "เริ่ม"

README มีหัวข้อ Reference ที่แบ่ง skill ทั้งหมดออกเป็นสองแกน ตามว่า ใครเป็นคนเรียกได้:

  • User-invoked — เรียกได้เฉพาะตอนที่คุณพิมพ์เอง (เช่น /grill-me) หน้าที่ของ skill กลุ่มนี้คือ orchestrate — คุมทิศทางของงาน
  • Model-invoked — คุณเรียกเองก็ได้ หรือ agent หยิบมาใช้เองอัตโนมัติ เมื่อบริบทของงานเข้าเงื่อนไข skill กลุ่มนี้ถือ "วินัยที่ใช้ซ้ำได้" (reusable discipline)
⚠️

กฎสำคัญจาก README: user-invoked skill เรียก model-invoked skill ได้ แต่ห้ามเรียก user-invoked skill ตัวอื่นเด็ดขาด — ป้องกันไม่ให้ orchestrator ซ้อน orchestrator จนควบคุมทิศทางไม่ได้

ตัวอย่างจริงจาก repo (bucket engineering/ และ productivity/):

ประเภทSkillหน้าที่
User-invokedask-mattrouter ชี้ว่าใช้ skill ไหนกับสถานการณ์ไหน
User-invokedgrill-with-docsgrilling session + สร้าง/อัปเดต domain model, CONTEXT.md, ADR
User-invokedimplementสร้างงานตาม spec/ticket ขับ /tdd แล้วปิดด้วย /code-review
Model-invokedtddred-green-refactor loop ทีละ vertical slice
Model-invokeddiagnosing-bugsreproduce → minimise → hypothesise → instrument → fix → regression-test
Model-invokedcodebase-designวินัยออกแบบ deep module — behaviour เยอะหลัง interface เล็ก

การติดตั้ง: จาก npx ถึง /setup-matt-pocock-skills

ขั้นตอน quickstart ตาม README มี 4 ก้าว:

  1. รันตัวติดตั้งของ skills.sh:
    npx skills@latest add mattpocock/skills
  2. เลือก skill ที่ต้องการ และเลือก coding agent ที่จะติดตั้งลง (Claude Code, Codex ฯลฯ) — ต้องเลือก /setup-matt-pocock-skills ด้วยเสมอ
  3. รัน /setup-matt-pocock-skills ใน agent ของคุณ
  4. เสร็จแล้ว พร้อมใช้งาน

/setup-matt-pocock-skills เป็น "prompt-driven skill" ไม่ใช่ script ตายตัว — ตาม SKILL.md มันจะสำรวจ repo ก่อนเสมอ ไม่เดา: เช็ก git remote -v ว่าเป็น GitHub repo ไหม, เช็กว่า CLAUDE.md/AGENTS.md มีอยู่แล้วหรือยัง มีส่วน ## Agent skills อยู่แล้วไหม, เช็ก CONTEXT.md/CONTEXT-MAP.md, docs/adr/, ว่ามี skill triage ติดตั้งอยู่ไหม (ตัดสินว่าต้องถามเรื่อง label หรือไม่), และเช็ก signal ของ monorepo (pnpm-workspace.yaml, workspaces ใน package.json)

จากนั้นถามทีละหัวข้อ (นำด้วยคำแนะนำที่ตอบรับได้คำเดียว):

  • Section A — Issue tracker: ที่เก็บ issue ของ repo นี้ (GitHub, GitLab, local markdown ใต้ .scratch/, หรือ Other อย่าง Jira/Linear) — skill อย่าง to-tickets, triage, to-spec จะอ่าน/เขียนที่นี่
  • Section B — Triage labels: ถามเฉพาะถ้าติดตั้ง skill triage ไว้ — ค่า default คือ 5 role: needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix
  • Section C — Domain docs: default เป็น single-context (CONTEXT.md + docs/adr/ ที่ root เดียว) — เสนอ multi-context เฉพาะเมื่อเจอ signal ว่าเป็น monorepo

สุดท้ายมันจะโชว์ draft ของบล็อก ## Agent skills ให้แก้ก่อนเขียนจริง แล้วเลือกไฟล์ที่จะแก้: ถ้ามี CLAUDE.md อยู่แล้วจะแก้ไฟล์นั้น ถ้าไม่มีแต่มี AGENTS.md จะแก้ไฟล์นั้นแทน และจะไม่มีทางสร้างไฟล์ใหม่ซ้อนกับไฟล์ที่มีอยู่แล้ว — เช่นถ้า repo คุณมี CLAUDE.md อยู่แล้ว (เหมือน repo teach-me-ai นี้เอง) มันจะแก้ CLAUDE.md ไม่ใช่สร้าง AGENTS.md ใหม่

💡

ผูกกับงานจริง: ถ้า repo Go หรือ NestJS ของคุณใช้ GitHub อยู่แล้ว (git remote ชี้ไป github.com) setup จะเสนอ GitHub เป็นค่า default ให้ทันที คุณตอบรับคำเดียวจบ ไม่ต้องอธิบายเพิ่ม

แผนที่แทร็ก MP — บทถัดไปจะเจออะไรบ้าง

แทร็ก mattpocock/skills แบ่งเป็น 7 บท (MP-0 ถึง MP-6) ไล่ตาม flow การทำงานจริง:

บทหัวข้อSkill หลักที่เจอ
MP-0ภาพรวม + ติดตั้ง (บทนี้)setup-matt-pocock-skills
MP-1Alignment — ตกลงกันก่อนเริ่มgrill-me, grill-with-docs, ubiquitous language
MP-2Spec & Tickets — แปลงบทสนทนาเป็นงานto-spec, to-tickets, triage, wayfinder
MP-3Implement — ลงมือเขียนอย่างมีวินัยimplement, tdd, diagnosing-bugs, code-review
MP-4Design — กันไม่ให้เป็นโคลนcodebase-design, domain-modeling, improve-codebase-architecture, prototype
MP-5Productivity — เครื่องมือรอบข้างgrill-me/grilling, handoff, teach, writing-great-skills
MP-6Real-world — ประกอบทุกอย่างเข้าด้วยกันask-matt (router) และ workflow แบบครบวงจร
⚠️

Pitfall ที่พบบ่อย: รีบข้าม /setup-matt-pocock-skills ไปใช้ skill อื่นเลย ทั้งที่ SKILL.md ของมันเขียนชัดว่า "Run once per repo before using the other engineering skills" — ถ้าไม่ตั้งค่า issue tracker ไว้ก่อน skill อย่าง to-tickets หรือ triage จะไม่รู้ว่าต้องเขียน issue ไปที่ไหน

🎯 แบบฝึกหัด
  1. จับคู่ 4 failure mode กับ skill ที่ใช้แก้ ให้ถูกต้อง โดยไม่มองอินโฟกราฟิกด้านบน: (misalignment, too verbose, code doesn't work, ball of mud) vs (tdd/diagnosing-bugs, grill-me/grill-with-docs, codebase-design/improve-codebase-architecture, ubiquitous language ผ่าน CONTEXT.md) — พิมพ์คำตอบมาในแชท เดี๋ยวช่วยเช็กให้
  2. อธิบายด้วยคำพูดตัวเองว่า user-invoked ต่างจาก model-invoked ยังไง พร้อมยกตัวอย่างคนละ 1 skill จาก README (ห้ามซ้ำกับตัวอย่างในตาราง)
  3. สมมติคุณรัน /setup-matt-pocock-skills ใน repo ที่มี CLAUDE.md อยู่แล้ว (เหมือน repo teach-me-ai นี้) — ทายว่ามันจะแก้ไฟล์ไหน และเพราะกฎอะไรจาก SKILL.md ที่ทำให้ตัดสินใจแบบนั้น