แก่นของเรื่อง
ถ้าจำได้อย่างเดียว ให้จำว่า mod คือฟังก์ชันที่รันอยู่ข้างใน Claude Code เอง จึงทำสิ่งที่ hook ภายนอกทำไม่ได้: วาดหน้าจอ, ถือ tool call ไว้ถามคนก่อน, และเปลี่ยนสิ่งที่แสดงโดยไม่เปลี่ยนสิ่งที่โมเดลเห็น ส่วนที่ผู้ใช้ต้องทำมีแค่บอกว่าอยากได้อะไรด้วยภาษาปกติ แล้ว Claude เขียนโค้ดให้
ทำไมแนวคิดนี้ได้ผล (กลไกเหตุและผล)
- Claude Code เรียก handler ของ mod ทุกครั้งที่เกิดเหตุการณ์ เช่น tool call, ส่ง prompt, หรือวาดส่วนหนึ่งของหน้าจอ handler จะ สังเกต แก้ หรือตอบแทน เหตุการณ์นั้นก่อนที่ Claude Code จะทำต่อ
- mod ไม่ต้อง build ไม่ต้องมี Node.js เพราะ Claude Code โหลดไฟล์
.jsและ.tsตรง ๆ และโหลดซ้ำเองเมื่อไฟล์เปลี่ยน วงจร "บอก, ลอง, ปรับ" จึงจบในเซสชันเดียว - mod ที่ Claude เขียนให้ถูกเก็บในโฟลเดอร์ของเซสชัน และโหลดได้หลังผู้ใช้อนุมัติเท่านั้น ผู้ใช้จึงยังเป็นคนตัดสินว่าโค้ดไหนรันบนเครื่อง
- 6 แบบในหน้านี้มีรากเดียวกัน: เอางานที่ทำซ้ำหรือเสี่ยงพลาดทุกวัน มาเป็นหน้าจอหรือปุ่มที่เห็นทันที
20% ที่สำคัญที่สุดในทางปฏิบัติ
| ลำดับ | สิ่งที่ควรทำก่อน | ทำไมสำคัญ |
|---|---|---|
| 1 | ให้ Claude อ่าน log ของตัวเอง แล้วดูว่าซ้ำอะไรบ่อยสุด | ไม่เสียเวลาสร้าง mod ที่ไม่มีใครใช้ |
| 2 | เริ่มจาก mod แบบสังเกตอย่างเดียว (แถบ context, ตัวนับ) | พลาดแล้วไม่กระทบงาน แก้ได้ในเซสชันเดียว |
| 3 | รัน claude plugin validate ก่อนโหลด mod ที่ไม่ได้เขียนเอง |
เห็นรายการ event และ API ที่ mod เรียก ก่อนรันจริง |
| 4 | ทำ guard (Collision Guard) หลังจากมีแบบสังเกตแล้ว | guard ที่ผิดพลาดบล็อกงานได้ ต้องคุ้นกับ hook ก่อน |
ที่เลื่อนได้: Recording Mode และ Goal Meter ทำเมื่อมีเหตุจำเป็น (ถ่ายวิดีโอ, ทำงานยาวข้ามเซสชัน)
ช่วยให้ดีขึ้นอย่างไร
ป้ายหลักฐาน: (a) แสดงในภาพ (เป็นตัวเลขจากภาพจำลองหน้าจอ ไม่ใช่ผลวัดจริง), (b) ตีความ, (c) ยังไม่ทดสอบ
| สถานการณ์ | ถ้าไม่มี mod | ถ้ามี mod | วัดอย่างไร | หลักฐาน |
|---|---|---|---|---|
| ส่งต่องานข้ามแชต (handoff) | 4 ขั้นมือ: run skill, copy, clear, paste | ปุ่มเดียวเหนือช่อง prompt | จำนวนขั้นต่อครั้ง: 4 เป็น 1 | (a) |
| รู้ว่า context ใกล้เต็ม | ต้องเรียกดูเอง | แถบ % อยู่ตลอด เช่น 71% | ครั้งที่ context เต็มกลางงานโดยไม่ทันตั้งตัว | (b) |
| ถ่ายหน้าจอโดยไม่เผยกุญแจ | ต้องตัดต่อหรือเลี่ยงคำสั่งบางอย่าง | ค่าลับถูกบังบนจอ Claude ยังใช้ค่าจริง | จำนวนเฟรมที่เห็นค่าลับ (ควรเป็น 0) | (c) |
| ตามเป้าหมายยาวข้ามเซสชัน | จำเองว่าทำถึงไหน | task list กับตัวจับเวลา | เวลาที่ใช้ก่อนเริ่มงานต่อ | (b) |
| สองแชตแก้ไฟล์เดียวกัน | รู้ตอน merge conflict | เตือนทันทีพร้อม 3 ทางเลือก | จำนวน conflict ต่อสัปดาห์ | (b) |
ตัวเลข 71%, 38%, 4:12, 23:48 และ "12x a week" ในภาพเป็นข้อความตัวอย่างในหน้าจอจำลอง ไม่ควรอ่านเป็นผลวัดของใคร
ลองใช้
ตัวอย่างประกอบ: คำนวณคุ้มค่าของปุ่ม handoff
ตัวเลขชุดนี้เป็นตัวอย่างประกอบ (ใช้ 12 ครั้งต่อสัปดาห์ตามค่าตัวอย่างในภาพ และ 20 วินาทีต่อขั้นเป็นสมมติ)
| รายการ | ค่า | วิธีคิด |
|---|---|---|
| handoff ต่อสัปดาห์ | 12 | จากการนับใน log |
| ขั้นมือต่อครั้ง (ก่อน) | 4 | run skill, copy, clear, paste |
| ขั้นมือต่อสัปดาห์ (ก่อน) | 48 | 12 x 4 |
| ขั้นมือต่อสัปดาห์ (หลัง) | 12 | 12 x 1 |
| เวลาต่อขั้น (สมมติ) | 20 วินาที | ต้องจับเวลาจริง |
| เวลาที่ประหยัดต่อสัปดาห์ | 720 วินาที (12 นาที) | (48 - 12) x 20 |
ผลคือประหยัดขั้นตอนได้ 36 ขั้นต่อสัปดาห์ ถ้า mod ใช้เวลาเขียนและตรวจเกิน 12 นาทีต่อสัปดาห์ที่ได้คืน ต้องใช้หลายสัปดาห์กว่าจะคุ้ม
ตัวอย่างประกอบ: นับเวลา cache ที่เหลือ
| รายการ | ค่า |
|---|---|
| อายุ cache ที่สมมติ (TTL) | 5 นาที = 300 วินาที |
| คำขอล่าสุดผ่านมา | 48 วินาที |
| เหลือ | 300 - 48 = 252 วินาที = 4:12 |
ค่า TTL ห้ามเชื่อตามตัวอย่าง ให้ตรวจกับเอกสาร prompt caching ของ API ที่ใช้จริง
เมื่อไหร่ควรใช้ และเมื่อไหร่ไม่ควร
| กรณี | ใช้ mod | เหตุผล |
|---|---|---|
| ต้องวาด panel, ปุ่ม, แถบเหนือ prompt | ใช่ | settings hook, skill, MCP วาดไม่ได้ |
| ต้องถือ tool call ไว้ถามคนก่อนรัน | ใช่ | mod ตอบแทน tool call ได้ |
| แค่บล็อกหรือ log คำสั่งด้วยสคริปต์ที่มีอยู่แล้ว | ไม่ | settings hook พอ ถูกกว่าและเรียบง่ายกว่า |
| อยากให้ Claude จำคำสั่งหรือขั้นตอน | ไม่ | ใช้ skill |
| ต้องเรียกระบบภายนอก (ฐานข้อมูล, API) | ไม่ | ใช้ MCP server |
ใช้ใน VS Code chat หรือ claude -p และต้องการหน้าจอ |
ไม่ | hook รัน แต่ไม่มีอะไรถูกวาด |
| เครื่องอยู่ภายใต้ managed settings ที่ปิด mod | ไม่ | ผู้ดูแลระบบควบคุมอยู่ |
เงื่อนไขก่อนเริ่ม: Claude Code ฝั่ง terminal เวอร์ชัน 2.1.287 ขึ้นไป (ฝั่ง Desktop 2.1.286 ขึ้นไป) ตรวจด้วย claude --version
ก้าวแรกที่เล็กที่สุด
- เปิดเซสชัน Claude Code แล้วพิมพ์:
make a mod that shows the current git branch above the prompt - เมื่อ Claude ถามว่าจะเปิด hot reload สำหรับเซสชันนี้ไหม ให้เลือก "Enable for this session"
- พิมพ์
/pluginไปที่แท็บ Installed ต้องเห็น mod ในรายการ - ชื่อ branch ต้องขึ้นเหนือช่อง prompt ถ้าไม่ตรงใจ บอก Claude ให้แก้ มันโหลดซ้ำเมื่อจบ turn
วิธีตรวจว่าช่วยได้จริง
| รายการ | ค่าที่ตั้งก่อนเริ่ม |
|---|---|
| ตัวชี้วัด | จำนวนขั้นมือต่อ handoff และจำนวนครั้งต่อสัปดาห์ |
| baseline | นับจาก log 1 สัปดาห์ก่อนสร้าง mod |
| เงื่อนไขผ่าน | ขั้นมือต่อ handoff ลดจาก 4 เหลือ 1 และไม่มี handoff ที่เนื้อหาหาย |
| เงื่อนไขไม่ผ่าน | ใช้ปุ่มน้อยกว่า 3 ครั้งใน 1 สัปดาห์ หรือปุ่มทำงานผิดเกิน 1 ครั้ง ให้ถอน mod |
ทดสอบความเข้าใจ
| คำถาม | คำตอบ | คำตอบที่มักผิด |
|---|---|---|
1. Recording Mode บังค่า API_KEY บนจอ Claude เห็นค่าที่บังไหม และปลอดภัยครบหรือยัง |
Claude เห็นค่าจริง mod แก้แค่ที่วาด permission prompt แก้ไม่ได้ ค่าลับในนั้นยังเห็นบนจอ | "Claude เห็นค่าที่บัง" หรือ "บังแล้วปลอดภัยครบ" |
2. สองแชตแก้ pricing.tsx คนละ git worktree Collision Guard จะเตือนไหม |
ปกติไม่เตือน เพราะ worktree เป็นสำเนาไฟล์ คนละ path จริง จึงเป็นทางออกของ guard | "ยังเตือน เพราะชื่อไฟล์เหมือนกัน" |
| 3. ตัวจับเวลาของ Goal Meter ต้องรอดทั้ง hot reload และเปลี่ยนเซสชัน เก็บที่ไหน | ใน $.store (ใช้ร่วมกันทุกเซสชัน) ตัวแปรในไฟล์ mod หายทุกครั้งที่โหลดซ้ำ |
"เก็บในตัวแปรของไฟล์ mod" |
| 4. mod วาดแถบสีอย่างเดียว ถือว่าปลอดภัยเพราะแค่แต่งหน้าจอใช่ไหม | ไม่ mod รันด้วยสิทธิ์ผู้ใช้ ไม่ถูก sandbox ให้ดู hooks: และ calls: จาก claude plugin validate |
"ปลอดภัย เพราะเป็นแค่ UI" |
| 5. handoff 8 ครั้งต่อสัปดาห์ ขั้นมือ 4 ปุ่มเหลือ 1 ลดได้กี่ขั้นต่อสัปดาห์ | (8 x 4) - (8 x 1) = 24 ขั้น | 32 (ลืมลบ 1 ขั้นที่ยังเหลือ) |
| 6. ครบ 6 แบบแล้วควรสร้างทั้งหมดเลยไหม | ไม่ ตัวเลขในภาพเป็นตัวอย่าง สร้างเฉพาะแบบที่ log ของตัวเองยืนยันว่าซ้ำบ่อย | "สร้างครบ เพราะ Claude เขียนให้ฟรี" |
ภาพอ้างอิงและสิ่งที่อ่านได้จากภาพ

ภาพเป็นอินโฟกราฟิกแนวตั้ง มีหัวข้อ "Claude just dropped Mods and they are game changers" ข้อความนำบอกว่าอธิบายฟีเจอร์เป็นภาษาอังกฤษปกติแล้ว Claude Code เพิ่มให้เอง (ปุ่ม, panel, คำเตือน) ตามด้วย 6 ขั้น แต่ละขั้นมีกรอบหน้าจอจำลองอยู่ด้านขวา
ข้อเท็จจริงที่อ่านได้จากภาพ
| ขั้น | ชื่อในภาพ | ข้อความหลัก | ส่วนของหน้าจอจำลอง |
|---|---|---|---|
| 1 | Mine your own session logs | ให้ Claude อ่าน log หาสิ่งที่ทำซ้ำหรือสู้ซ้ำทุกวัน | ถามว่า mod ไหนประหยัดเวลา ตอบว่า hand off 12 ครั้งต่อสัปดาห์ ให้เริ่มตรงนี้ |
| 2 | Build a Cache Keeper | context, ขีดจำกัดการใช้, เวลา cache ในมุมมองเดียว พร้อม handoff คลิกเดียว | context 71%, weekly limit 38%, ปุ่ม Hand off, Fresh chat, cache 4:12 |
| 3 | Turn on Recording Mode | ข้อมูลอ่อนไหวถูกซ่อนบนจอ ขณะที่ Claude ใช้ค่าจริง | screen: sk- ตามด้วยจุด, claude: sk-live-8f2a, emails masked, safe to film |
| 4 | Track goals with a Goal Meter | แต่ละ /goal มี task list สดและตัวจับเวลา ตามได้ข้ามเซสชัน |
/GOAL SHIP ONBOARDING 23:48, 4 งาน (2 เสร็จ, 1 กำลังทำ, 1 รอ) |
| 5 | Add a Collision Guard | เตือนเมื่อแชตอื่นแก้ไฟล์เดียวกัน เลือก Proceed, worktree หรือ cancel | pricing.tsx ถูกแก้โดยแชตอื่นเมื่อ 2 นาทีก่อน ปุ่ม Proceed, Worktree, Cancel |
| 6 | Turn chores into buttons | handoff เคยใช้ 4 ขั้นมือ ตอนนี้เป็นปุ่มเหนือ prompt | BEFORE: run-skill, copy, clear, paste. AFTER: Hand off, 1 click |
สิ่งที่ภาพไม่ได้บอก
| ประเด็น | สถานะ |
|---|---|
| วิธีติดตั้งหรือเวอร์ชันที่ต้องใช้ | ไม่มีในภาพ (เติมจากเอกสารทางการด้านล่าง) |
| โค้ดของ mod | ไม่มีในภาพ |
ความหมายของ /goal ว่าเป็นคำสั่งของ Claude Code หรือของผู้ใช้ |
ไม่ชัดจากภาพ ไม่ได้ตรวจกับเอกสารในรอบนี้ |
| ที่มาของตัวเลข 71%, 38%, 4:12, 23:48, 12x | ไม่ระบุ ถือเป็นข้อมูลจำลอง |
| เวลาตัวอักษรเล็กในภาพ | อ่านได้ครบ ไม่พบส่วนที่อ่านไม่ออก |
Mod คืออะไร
mod คือ plugin ที่มีไฟล์เข้าจุดเดียว (hooks module) เป็น JavaScript หรือ TypeScript Claude Code เรียกฟังก์ชัน register ในไฟล์นั้นตอนโหลด แล้วฟังก์ชันลงทะเบียน handler ผ่านตัวแปร on
โครงไฟล์ขั้นต่ำ
first-mod/
├── .claude-plugin/
│ └── plugin.json # manifest
└── hooks/
├── hooks.json # { "modules": ["./register.js"] }
└── register.js # export function register(on) { ... }
handler ทำอะไรกับเหตุการณ์ได้ 3 อย่าง
| การกระทำ | รูปแบบ | ตัวอย่างใน 6 ขั้น |
|---|---|---|
| สังเกต (observe) | return next(e) หลังจดข้อมูล |
นับ tool call, จดว่าใครแก้ไฟล์ไหน |
| แก้ (rewrite) | next({ ...e, ... }) |
บังค่าลับในข้อความที่วาด |
| ตอบแทน (answer) | return { deny: reason } |
Collision Guard ปฏิเสธ tool call |
เทียบ mod กับของที่คล้ายกัน
| Mod | Settings hook | Skill | MCP server | |
|---|---|---|---|---|
| คืออะไร | ฟังก์ชันใน plugin รันใน process ของ Claude Code | สคริปต์หรือ HTTP ที่รันตามเหตุการณ์ | ไฟล์คำสั่งที่ Claude อ่าน | โปรเซสภายนอกที่ให้ tool |
| วาดหน้าจอได้ | ได้ | ไม่ได้ | ไม่ได้ | ไม่ได้ |
| เลือกเมื่อ | ต้องการ panel, ปุ่ม, แก้ event | ต้องการบล็อกหรือ log ด้วยสคริปต์เดิม | ต้องการให้ Claude รู้ขั้นตอน | ต้องการเชื่อมระบบภายนอก |
ที่ที่ mod ทำงาน
| สภาพแวดล้อม | hook รัน | หน้าจอที่ mod วาด |
|---|---|---|
claude ใน terminal |
รัน | แสดง |
| แท็บ Code ของแอป Desktop | รัน | แสดง (ยกเว้นส่วนที่เป็นเฉพาะ terminal) |
| แอป Desktop แบบ WSL | ไม่รัน | ไม่แสดง |
| แชตใน VS Code extension | รัน | ไม่แสดง |
claude -p และ Agent SDK |
รัน | ไม่แสดง |
6 ขั้นอย่างละเอียด
ทุกขั้นเริ่มจากการบอก Claude ด้วยภาษาปกติ Claude ใช้ skill ชื่อ plugin-authoring เขียน mod ลงโฟลเดอร์ ~/.claude/dev-mods/<session-id>/ ของเซสชันนั้น ป้ายความมั่นใจในตาราง: 🟢 มีในเอกสารทางการ, 🟡 ตีความจากเอกสาร, ⚪ ยังไม่ยืนยัน
ขั้น 1: วิเคราะห์ log ของตัวเอง
เป้าหมายคือหาว่างานซ้ำอะไรบ่อยสุด ก่อนจะลงมือสร้างอะไร
- ให้ Claude อ่านบันทึกเซสชันของคุณ (ที่เก็บ transcript เป็นไฟล์ในโฟลเดอร์
~/.claude/projects/⚪ ความรู้ทั่วไป ควรตรวจบนเครื่องตัวเอง) - ให้นับรูปแบบที่ซ้ำ: คำสั่งที่พิมพ์ซ้ำ, ขั้นตอน copy-paste, ข้อความเตือนที่เจอบ่อย
- ให้จัดอันดับตาม (ความถี่ x จำนวนขั้นมือ)
- เลือกอันดับ 1-2 ไปทำเป็น mod
Read my last 30 session transcripts. List the manual actions I repeat
(count per week, steps per action). Rank by count x steps. Propose which
Claude Code mods would remove the top 2. Do not write any mod yet.
Note: ตัวอย่างในภาพคือ "hand off 12 ครั้งต่อสัปดาห์" ซึ่งเป็นค่าตัวอย่างในภาพจำลอง ผลของคุณจะต่างออกไป
ขั้น 2: Cache Keeper (แถบ context, limit, cache, ปุ่ม handoff)
| ส่วน | กลไกที่ใช้ | สถานะ |
|---|---|---|
| ค่า context % | $.session.usage() คืน context (tokens, window, percent) |
🟢 |
| ค่า weekly limit % | $.session.usage() คืน rateLimits (kind, percentUsed, resetsAt) |
🟢 |
| แถบเหนือ prompt | วาดที่ render site AbovePrompt ด้วย Box, Text |
🟢 |
| ปุ่ม Hand off / Fresh chat | Button + $.prompt.submit หรือ $.command.run |
🟡 |
| นับถอยหลัง cache | mod คำนวณเอง จากเวลาของ turn ล่าสุดกับ TTL ที่สมมติ ไม่มี API ตรงในเอกสารที่อ่าน | 🟡 |
ข้อควรระวัง: ตัวเลขเปอร์เซ็นต์ของ limit มาจากค่าที่ Claude Code ให้ ถ้าแผนที่ใช้ไม่มี rate limit ค่านั้นอาจว่าง ให้ mod รับมือกรณีไม่มีค่า
ขั้น 3: Recording Mode (บังค่าลับบนจอ)
กลไก: hook ui.render ที่ render site ของข้อความ (UserMessage, AssistantMessage, ToolUse, ToolResult, CommandOutput) แก้ e.props ให้ค่าที่ตรงกับรูปแบบลับ (เช่น sk-live-...) ถูกแทนด้วยจุด ส่วนข้อมูลที่ส่งให้โมเดลไม่ถูกแตะ
| จุด | ผล |
|---|---|
| ข้อความที่วาดบนจอ | ถูกบัง 🟢 (เปลี่ยนสิ่งที่วาดได้) |
| สิ่งที่โมเดลเห็น | ค่าจริง 🟡 (mod แก้การวาด ไม่ใช่ข้อมูลใน session) |
| permission prompt | บังไม่ได้ 🟢 เอกสารระบุว่า mod เปลี่ยนสิ่งที่ prompt แสดงไม่ได้ |
| ไฟล์ transcript บนดิสก์ | ยังเป็นค่าจริง 🟡 ไม่ใช่เรื่องของการวาด |
| ค่าลับที่มีรูปแบบไม่ตรง regex | หลุด 🟡 ต้องทดสอบด้วยค่าจริงแต่เป็นค่าทดลอง |
Warning: Recording Mode ลดความเสี่ยงตอนถ่ายหน้าจอ ไม่ใช่การเก็บความลับ อย่าถ่ายตอนที่ permission prompt อาจแสดงค่าลับ และอย่าใช้ค่าจริงของระบบ production ตอนทดสอบ
ขั้น 4: Goal Meter (task list กับตัวจับเวลาต่อ /goal)
| ส่วน | กลไกที่ใช้ | สถานะ |
|---|---|---|
| ตัวจับเวลา | $.clock.every หรือ $.clock.now เทียบเวลาเริ่ม |
🟢 |
| เก็บเวลาเริ่มและ task ข้ามเซสชัน | $.store (key-value ที่ทุกเซสชันในเครื่องใช้ร่วมกัน) |
🟢 |
| ดึง task list | ดัก tool.call ของ tool จดรายการงาน หรืออ่านจาก $.session.messages() |
🟡 |
ผูกกับ /goal |
ดัก command.run ของคำสั่งนั้น |
⚪ ยังไม่ยืนยันว่าดักคำสั่งในตัวได้ |
| แสดงผล | pane ($.ui.open) หรือ band เหนือ prompt |
🟢 |
กับดัก: ตัวแปรในไฟล์ mod หายทุกครั้งที่ hot reload ค่าที่ต้องรอดให้ใส่ $.state (รอดตอน reload ในเซสชันเดียว) หรือ $.store (รอดข้ามเซสชัน) และต้องหยุด timer ตอนเกิด ui.close กับ session.end ไม่เช่นนั้น timer ค้างสะสม
ขั้น 5: Collision Guard (เตือนเมื่อแชตอื่นแก้ไฟล์เดียวกัน)
ลำดับการทำงาน:
- ดัก
tool.callของ tool ที่เขียนไฟล์ (เช่นEdit,Write) - อ่านใน
$.storeว่าไฟล์ path นี้ถูกเซสชันอื่นแก้ล่าสุดเมื่อไร - ถ้าเป็นเซสชันอื่นและยังไม่เกินกรอบเวลา (เช่น 5 นาที) ให้ถามผู้ใช้
- Proceed:
next(e)และบันทึกว่าเซสชันนี้แก้ล่าสุด - Worktree: ปฏิเสธด้วยเหตุผลที่บอก Claude ให้ไปทำใน worktree
- Cancel:
{ deny: reason }
// ตัวอย่างประกอบ (pseudo-code): ลายเซ็นจริงของ $.store และ $.ui.ask
// ให้ตรวจกับไฟล์ types ที่ Claude Code เขียนไว้ใน .claude-plugin/types/
on('tool.call', { tool: 'Edit' }, async ($, e, next) => {
const last = await $.store.get('edit:' + e.file_path)
const isOther = last && last.session !== $.session.id()
if (isOther && Date.now() - last.at < 5 * 60 * 1000) {
// ถามผู้ใช้ 3 ทางเลือก แล้วตัดสินใจตามคำตอบ
}
await $.store.set('edit:' + e.file_path, { session: $.session.id(), at: Date.now() })
return next(e)
})
ข้อจำกัดที่ควรรู้:
| ข้อจำกัด | ผล |
|---|---|
| เห็นเฉพาะการแก้ผ่าน tool ของ Claude | การแก้จาก editor, IDE หรือ sed ใน Bash ไม่ถูกนับ 🟡 |
สองเซสชันอ่าน-เขียน $.store พร้อมกัน |
อาจเขียนทับกัน เอกสารระบุว่า $.fs.write ไม่ atomic ส่วน $.store ควรทดสอบ 🟡 |
| คนละ worktree | path ต่างกัน ไม่ถือว่าชน (ตั้งใจ) 🟡 |
| guard ที่ผิดพลาด | บล็อกงานปกติ ต้องมีทางผ่าน (Proceed) เสมอ |
ขั้น 6: เปลี่ยนงานซ้ำเป็นปุ่ม
กลไก: วาด Button ใน band เหนือ prompt ผูกกับฟังก์ชันที่ทำขั้นตอนทั้ง 4 ใน handler เดียว เอกสารระบุว่ามี $.command.run (รันคำสั่ง), $.prompt.submit (ส่ง prompt) และ Button มี hotkey ให้กดตัวเลขเดียวได้เมื่อ prompt ว่าง
| ก่อน | หลัง |
|---|---|
| run skill, copy, clear, paste (4 ขั้นมือ) | ปุ่ม Hand off (1 คลิก) |
คำเตือนเรื่องปุ่มที่ส่ง prompt แทนผู้ใช้: $.prompt.submit มี 2 แบบ แบบปกติ Claude เห็นว่าผู้ส่งคือ mod ส่วน asUser: true ส่งเหมือนผู้ใช้พิมพ์เอง ให้เลือกแบบปกติเว้นแต่จำเป็น เพื่อให้ตรวจย้อนหลังได้ว่าอะไรมาจากไหน
ความเสี่ยงและข้อจำกัดโดยรวม
Warning: mod รันด้วยสิทธิ์ของผู้ใช้ ไม่ถูก sandbox อ่านและเขียนไฟล์ได้ทุกที่ที่บัญชีเข้าถึง เริ่มโปรแกรมได้ ส่งคำขอเครือข่ายได้ อ่านตัวแปรสภาพแวดล้อมและไฟล์ settings ได้ (รวมถึง API key) เห็นทุก prompt และ tool call เปลี่ยน prompt ได้ อนุมัติ tool call ก่อนถามผู้ใช้ได้ และเรียกโมเดลด้วยโควตาของผู้ใช้ได้
| ความเสี่ยง | ผลที่เกิดได้ | วิธีลดความเสี่ยง |
|---|---|---|
| ติดตั้ง mod จากแหล่งที่ไม่รู้จัก | ถูกอ่านความลับหรือสั่งงานแทน | ใช้เฉพาะ marketplace ที่เชื่อถือ |
| ไม่ดูว่า mod เรียกอะไร | ไม่รู้ว่ามี network หรือ process | claude plugin validate ./mod อ่านบรรทัด hooks: กับ calls: |
| mod ที่ Claude เขียนมีบั๊ก | guard บล็อกงานผิด, ตัวบังค่าลับพลาด | ทดสอบด้วย claude plugin test และข้อมูลทดลอง |
| คิดว่า sandbox ครอบ mod | เปิด sandbox แล้วเชื่อว่า mod ถูกจำกัด | เอกสารระบุว่า process ที่ mod เริ่มทำงานนอก sandbox |
| mod ซ้อนกันหลายตัว | ลำดับการทำงานทำให้ผลไม่คาดคิด | จำกัดจำนวนและตรวจลำดับ |
| ใช้ในองค์กรที่มี managed settings | mod ถูกปิดหรือถูกจำกัด | ปรึกษาผู้ดูแลระบบก่อน |
ข้อผิดพลาดที่พบบ่อย
- เก็บค่าที่ต้องรอดไว้ในตัวแปรของไฟล์ แล้วงงว่าทำไมค่าหายหลังแก้โค้ด
- ไม่หยุด timer ตอนปิด pane ทำให้ timer ซ้อนหลัง reload
- ทำ guard ก่อนทำแบบสังเกต แล้วถูกบล็อกงานจริงโดยไม่มีทางผ่าน
- ใส่ค่าอ่านจาก
eตรง ๆ ใน render hook ทั้งที่ค่า props อยู่ในe.props - คิดว่าการบังบนจอ เท่ากับการไม่ส่งค่าให้โมเดล
รายการตรวจก่อนใช้ mod ทุกตัว
| ขั้น | ตรวจ | สถานะ |
|---|---|---|
| 1 | เวอร์ชัน Claude Code ตรงเงื่อนไข (claude --version) |
⚪ |
| 2 | รู้ที่มาของ mod และอ่านรายการ hooks: กับ calls: แล้ว |
⚪ |
| 3 | ทดสอบด้วยข้อมูลทดลองก่อน ไม่ใช้ค่า production | ⚪ |
| 4 | guard ทุกตัวมีทางผ่านชัดเจน | ⚪ |
| 5 | มีวิธีปิด mod ถ้ามีปัญหา (/plugin แท็บ Installed หรือ --safe-mode) |
⚪ |
| 6 | ตั้งตัวชี้วัดและ baseline ไว้ก่อนวัดผลหลังใช้ | ⚪ |
ขั้นตอนถัดไป
Recommendation: เริ่มจากขั้น 1 ภายในสัปดาห์นี้ นับ handoff และงานซ้ำจาก log จริง ตัดสินใจสร้างเฉพาะ mod ที่ผลคูณ ความถี่ x ขั้นมือ สูงสุดสองอันดับแรก แล้วเริ่มด้วยแบบสังเกตอย่างเดียว
เก็บ mod ที่ใช้ได้จริงไว้นอกโฟลเดอร์เซสชัน (โฟลเดอร์ dev-mods ถูกลบเมื่อเก่าเกิน cleanupPeriodDays) แล้วโหลดด้วย claude --plugin-dir <path>
Sources
เอกสารทางการของ Anthropic (Claude Code documentation):
- Mods overview: นิยาม, สิ่งที่ mod ทำได้, ความเสี่ยง, ที่ที่ mod ทำงาน, เวอร์ชันที่ต้องใช้
- Create a mod: การขอให้ Claude เขียน mod, hot reload,
claude plugin validate,claude plugin test - Mods reference: รายการ event,
$API, render site, element, ขีดจำกัด
หัวข้อที่เติมจากความรู้ทั่วไปหรือตีความ (ไม่ได้มาจากเอกสารข้างต้นโดยตรง): ที่เก็บ transcript ใน ~/.claude/projects/, TTL ของ prompt cache ที่ 5 นาที, วิธีผูก Goal Meter กับ /goal, และรูปแบบ pseudo-code ของ Collision Guard
ตัวย่อที่ใช้ในหน้านี้
| ตัวย่อ | ชื่อเต็ม | คืออะไร | อ่านค่าอย่างไร |
|---|---|---|---|
| UI | User Interface | ส่วนที่ผู้ใช้เห็นและกดบนหน้าจอ | "แถบ context เหนือ prompt" คือ UI ของ mod |
| API | Application Programming Interface | ชุดฟังก์ชันที่โปรแกรมหนึ่งเปิดให้อีกโปรแกรมเรียก | $.session.usage() คือเมธอดหนึ่งของ mods API |
| JS | JavaScript | ภาษาที่ใช้เขียน mod ได้ | ไฟล์ register.js |
| TS | TypeScript | JavaScript ที่มีชนิดข้อมูล ใช้เขียน mod ได้ | ไฟล์ .ts กับ types ที่ Claude Code สร้างให้ |
| JSON | JavaScript Object Notation | รูปแบบไฟล์ข้อมูลที่มี key กับ value | hooks.json ที่ระบุ modules |
| CLI | Command-Line Interface | โปรแกรมที่สั่งงานด้วยคำสั่งใน terminal | claude --version |
| MCP | Model Context Protocol | มาตรฐานให้ Claude เชื่อมกับเครื่องมือภายนอก | MCP server ให้ tool แก่ Claude |
| SDK | Software Development Kit | ชุดเครื่องมือสำหรับเขียนโปรแกรมต่อกับระบบ | Agent SDK รัน hook แต่ไม่วาดหน้าจอ |
| VS Code | Visual Studio Code | โปรแกรมแก้โค้ดที่มี extension ของ Claude Code | แชตใน VS Code: hook รัน แต่ไม่มีอะไรถูกวาด |
| WSL | Windows Subsystem for Linux | ชั้น Linux บน Windows | เซสชัน WSL ในแอป Desktop ไม่โหลด plugin |
| TTL | Time To Live | อายุของข้อมูลที่เก็บชั่วคราว ก่อนหมดอายุ | TTL 300 วินาที เหลือ 252 วินาที = 4:12 |
| HTTP | HyperText Transfer Protocol | ภาษาที่โปรแกรมใช้ขอและส่งข้อมูลทางเว็บ | settings hook แบบ HTTP คือการยิงคำขอเว็บเมื่อเกิดเหตุการณ์ |
| IDE | Integrated Development Environment | โปรแกรมแก้โค้ดครบชุด | แก้ไฟล์จาก IDE ทำให้ Collision Guard มองไม่เห็น |
| git | (ชื่อเครื่องมือ) | ระบบเก็บประวัติการแก้โค้ด | git branch แสดงชื่อ branch ที่ใช้อยู่ |
| regex | Regular Expression | รูปแบบข้อความที่ใช้จับสตริงที่ตรงเงื่อนไข | pattern จับ sk-live-... เพื่อบังค่าลับ |
| sed | stream editor | คำสั่ง Unix แก้ข้อความในไฟล์ | แก้ไฟล์ด้วย sed ใน Bash ไม่ผ่าน tool Edit |
| ID | Identifier | รหัสประจำเซสชันหรือรายการ | <session-id> ในพาธ dev-mods |
% (context, limit) |
เปอร์เซ็นต์ที่ใช้ไป | สัดส่วนของ context window หรือโควตาที่ใช้แล้ว | context 71% = ใช้ไปเกือบสามในสี่ของหน้าต่าง |
sk- |
ไม่ใช่ตัวย่อเต็ม (คำนำหน้าของ API key) | ส่วนต้นของรหัส API ที่ภาพใช้เป็นตัวอย่าง | sk-live-8f2a คือรหัสทดลองในภาพ ไม่ใช่ค่าจริง |
| n8n | ชื่อเครื่องมือ (ออโตเมชัน workflow) | ชื่อผลิตภัณฑ์ที่ปรากฏเป็นชื่อ task ในภาพ | "Wire the n8n trigger" คือชื่องานตัวอย่าง |
ตัวย่อที่มาจากความรู้ทั่วไป ไม่ได้ถูกนิยามในภาพหรือเอกสารที่อ่าน: UI, JS, TS, JSON, CLI, SDK, VS Code, WSL, TTL, HTTP, IDE, git, regex, sed, ID, sk-, n8n
สัญลักษณ์ในสูตร
| สัญลักษณ์ | ความหมาย | อ่านค่าอย่างไร |
|---|---|---|
| x | คูณ | 12 x 4 = 48 ขั้นต่อสัปดาห์ |
| - | ลบ | 300 - 48 = 252 วินาที |
e |
event (ข้อมูลเหตุการณ์ที่ส่งเข้า handler) | e.file_path คือ path ไฟล์ของ tool call |
$ |
mods API ที่ส่งเข้า handler | $.store.get(...) เรียกที่เก็บค่า |
next |
ฟังก์ชันส่งต่อเหตุการณ์ไปยัง handler ถัดไป | return next(e) คือปล่อยผ่าน |
Summary
| หัวข้อ | สรุป |
|---|---|
| mod คืออะไร | plugin ที่รันในตัว Claude Code วาดหน้าจอ ดัก tool call และเปลี่ยนสิ่งที่แสดงได้ |
| วิธีได้มา | บอก Claude ด้วยภาษาปกติ อนุมัติ hot reload แล้วลองและปรับในเซสชันเดียว |
| 6 แบบ | วิเคราะห์ log, Cache Keeper, Recording, Goal Meter, Collision Guard, ปุ่มลัด |
| ที่ทำได้ชัดตามเอกสาร | แถบ context และ limit, ปุ่ม, ตัวจับเวลา, การดัก tool call, เก็บค่าข้ามเซสชัน |
| ที่ยังต้องตรวจเอง | นับถอยหลัง cache, ผูกกับ /goal, ลายเซ็นของ $.store และ $.ui.ask |
| ข้อควรระวังหลัก | ไม่ถูก sandbox, บัง permission prompt ไม่ได้, ตัวเลขในภาพเป็นข้อมูลจำลอง |
| ก้าวแรก | นับงานซ้ำจาก log แล้วสร้างแบบสังเกตอย่างเดียวหนึ่งตัว |
