เป้าหมาย
ใช้ hooks บังคับกติกาแบบ "ทำทุกครั้งแน่นอน" ใช้ subagents แยกงานเป็นผู้เชี่ยวชาญ แล้วแพ็กทุกอย่างเป็น plugin ให้ทีม
CLAUDE.md vs Hooks vs Permission
| CLAUDE.md | Hooks | Permission deny | |
|---|---|---|---|
| ลักษณะ | คำแนะนำ (Claude อาจลืม) | สคริปต์ที่ รันทุกครั้ง | กฎห้ามตายตัว |
| ตัวอย่าง | "ใช้ prettier" | format ทุกครั้งหลังแก้ไฟล์ | "deny": ["Read(./.env)"] |
Hook รับ JSON ทาง stdin (tool_name, tool_input.file_path, tool_input.command ...)
PreToolUse+ exit 2 = บล็อก tool call และ stderr ส่งกลับให้ Claude เป็นเหตุผลPostToolUse= ทำต่อหลัง tool สำเร็จ (exit 2 ย้อนไม่ได้ แค่ส่ง feedback)Stop= ตอน Claude ตอบเสร็จ เหมาะแจ้งเตือน
ลองเลย 🧪 — Hooks
ทดลอง A — สคริปต์บล็อกการแก้ไฟล์ .env (ต้องมี jq)
mkdir -p .claude/hooks
cat > .claude/hooks/protect-env.sh <<'EOF'
#!/bin/bash
file_path=$(jq -r '.tool_input.file_path')
if [[ "$file_path" == *.env* ]]; then
echo "ห้ามแก้ไฟล์ .env โดยตรง ให้แจ้งผู้ใช้แก้เอง" >&2
exit 2
fi
exit 0
EOF
chmod +x .claude/hooks/protect-env.shทดลอง B — ลง .claude/settings.json (3 hooks: บล็อก .env / format หลังแก้ / แจ้งเตือนเมื่อเสร็จบน macOS)
{
"hooks": {
"PreToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/protect-env.sh" }
]
}
],
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{ "type": "command", "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write" }
]
}
],
"Stop": [
{
"hooks": [
{ "type": "command", "command": "osascript -e 'display notification \"Claude ทำงานเสร็จแล้ว\" with title \"Claude Code\"'" }
]
}
]
}
}→ Linux เปลี่ยนคำสั่ง Stop เป็น notify-send "Claude Code" "ทำงานเสร็จแล้ว"
→ ทดสอบ: สั่ง เพิ่มบรรทัด DEBUG=true ใน .env → ต้องถูกบล็อก, แก้ไฟล์ .js → ถูก format อัตโนมัติ
→ ตรวจ hooks ที่โหลดอยู่ด้วย /hooks
⚠️ hook รันด้วยสิทธิ์ของคุณ อ่านสคริปต์ hook ใน repo คนอื่นก่อนเปิด Claude Code ทุกครั้ง
Subagents — ผู้ช่วยเฉพาะทาง context แยก
ไฟล์ .claude/agents/<name>.md (หรือสร้างผ่าน /agents) แต่ละตัวมี context ของตัวเอง + tool เท่าที่จำเป็น + เลือกโมเดลได้
→ งานอ่านเยอะ (รันเทสต์ ค้นโค้ด) ไม่ทำให้ context หลักรก และรันหลายตัวขนานกันได้
ทดลอง C — คู่ reviewer + test-runner
mkdir -p .claude/agents
cat > .claude/agents/code-reviewer.md <<'EOF'
---
name: code-reviewer
description: ตรวจโค้ดที่เพิ่งแก้หาบั๊ก ช่องโหว่ และ secret ที่หลุด ใช้หลังแก้โค้ดเสร็จทุกครั้ง
tools: Read, Grep, Glob
model: sonnet
---
คุณคือผู้ตรวจโค้ดอาวุโส อ่านอย่างเดียว ห้ามแก้ไฟล์
รายงานเป็นตาราง: ไฟล์:บรรทัด / ความรุนแรง (สูง/กลาง/ต่ำ) / ปัญหา / วิธีแก้ที่เสนอ
ถ้าไม่พบปัญหาให้บอกตรงๆ ไม่ต้องหาเรื่อง
EOF
cat > .claude/agents/test-runner.md <<'EOF'
---
name: test-runner
description: รันชุดทดสอบและสรุปเฉพาะเทสต์ที่ล้มพร้อมสาเหตุ ใช้เมื่อต้องการรู้ว่าเทสต์ผ่านไหม
tools: Read, Grep, Glob, Bash
model: haiku
---
รันคำสั่งทดสอบของโปรเจกต์ (ดูจาก CLAUDE.md หรือ package.json/pyproject)
ห้ามแก้โค้ด รายงานแค่: จำนวนผ่าน/ล้ม, ชื่อเทสต์ที่ล้ม, บรรทัด error สำคัญไม่เกิน 5 บรรทัดต่อเทสต์
EOFใช้ code-reviewer ตรวจไฟล์ที่แก้ใน git diff และใช้ test-runner รันเทสต์ไปพร้อมกัน แล้วสรุปรวมว่าพร้อม commit หรือยัง→ สังเกตว่าทั้งสองทำงานขนานกัน และ context หลักได้แค่บทสรุป ไม่ใช่ log ยาวๆ
Plugins — แพ็กให้ทั้งทีมติดตั้งคำสั่งเดียว
plugin = โฟลเดอร์ที่มี .claude-plugin/plugin.json (name, description, version) และโฟลเดอร์ย่อย skills/, agents/, hooks/hooks.json, .mcp.json → แพ็ก skill บท 6d-01 + subagent + hooks + MCP server เป็นชุดเดียว
เปิด /plugin เพื่อดู/ติดตั้งจาก marketplace หรือ claude plugin install <name>@<marketplace> (marketplace ทางการ: claude-plugins-official)
⚠️ ต้องตรวจสอบ: โครงสร้างโฟลเดอร์และวิธีทำ marketplace ภายในองค์กรที่ code.claude.com/docs (หัวข้อ Plugins)
สรุปจำง่าย
ต้องเกิดทุกครั้ง → hook, ต้องห้ามเด็ดขาด → deny, งานเฉพาะทาง → subagent, แชร์ทั้งชุด → plugin