Context Engineering สำหรับ Claude Code 2026: 4 Pattern ใหม่

เปิดมาช่วงนี้ผมเจอคำถามจากทีม dev ไทยซ้ำกันแบบเหลือเชื่อครับ “พี่อาร์ตี้ ทำไม Claude Code ของผมพอใช้ไปหลายชั่วโมงแล้วเริ่มลืมเรื่องที่คุยกันไว้ตั้งแต่เช้า?” — คำตอบสั้น ๆ คือมันไม่ได้ลืมครับ มัน compact context ทิ้งไปต่างหาก แล้วเรานี่แหละที่ไม่ได้บอกมันว่าจะ re-inject อะไรกลับมาบ้างหลังจากนั้น 55

ปี 2026 Anthropic ผลัก context engineering จาก “นั่ง craft prompt” มาเป็น “ออกแบบ context flow ทั้ง session” ผ่าน Claude Code 2.x แล้วเรียบร้อย แล้วเครื่องมือที่ใช้คือ hook, skill, MCP volume control และ subagent isolation นั่นเองครับผม

TL;DR — สรุปก่อนสำหรับคนรีบ

ตั้งแต่ Claude Code 2.x เปิดตัว เอกสาร hooks ฉบับทางการของ Anthropic ระบุไว้ชัดเจนว่ามี hook event 27 ตัวที่ทีม dev สามารถ intercept lifecycle ของ Claude ได้ตั้งแต่ SessionStart ยัน SessionEnd รวมถึง PreCompact, PostCompact และ UserPromptSubmit ที่ออกแบบมาเพื่อ inject context โดยเฉพาะ

4 production pattern ที่ทีมไทยควรลองในไตรมาส 2 ปี 2026 คือ:

  1. SessionStart hook พร้อม compact matcher — re-inject context หลังโดน autocompaction ทุกครั้ง
  2. Skills + Progressive Disclosure — โหลด playbook แบบ on-demand แทนยัดทุกอย่างใส่ CLAUDE.md
  3. CwdChanged + CLAUDE_ENV_FILE — context ที่ปรับตามโฟลเดอร์ที่ Claude ทำงานอยู่
  4. MCP volume control + Subagent isolation — กัน context overflow เวลาต่อหลาย MCP server

ทั้ง 4 pattern ผมและทีม ALL-IN-AI ทดลองมาแล้วบน setup จริงของลูกค้า ไม่ใช่อ่านจาก release note แล้วเขียนต่อนะครับ

ทำไม Context Engineering ถึงมาแทน Prompt Engineering ในปี 2026

สมัยปี 2023–2024 ทีม dev ไทยส่วนใหญ่ที่ผมคุยด้วยจะตื่นเต้นกับ prompt engineering — craft prompt ให้สวย ใส่ system message ยาว ๆ แล้วก็จบ แต่พอมาปี 2026 เกมเปลี่ยนแล้วครับ Claude Code มี context window 1 ล้าน token แต่ที่น่าสนใจกว่าคือ มันไม่ได้แปลว่าเรายัดได้ทุกอย่าง

เพราะอะไร? ลองดู 3 ข้อนี้ครับ:

  • Token เพิ่มขึ้น = cost เพิ่มขึ้นแบบ linear ทุกการเรียก model
  • Long context performance degrade — เนื้อกลาง ๆ ของ context มักโดน “forget” ก่อน (lost-in-the-middle)
  • เอกสาร Claude Code Ecosystem ฉบับเมษา 2026 ระบุชัดว่า autocompact circuit breaker จะ trigger หลัง context refill ครั้งที่ 3 — ซึ่งหมายความว่า session ยาว ๆ จะถูกบีบอัดแน่นอน

นี่คือเหตุผลที่ บทความหลักของผมเรื่อง Context Engineering วางไว้ตั้งแต่ปลายปีที่แล้วยังจริงอยู่: ทีมที่ชนะคือทีมที่ออกแบบ context flow ไม่ใช่ทีมที่ craft prompt สวยที่สุด

Pattern 1: SessionStart Hook + compact Matcher

นี่คือ pattern ที่ผมว่าทีมไทยส่วนใหญ่พลาดมากที่สุดครับ — และเป็นต้นเหตุของอาการ “Claude เริ่มลืม” ที่เปิดบทความไว้

เวลา context window เริ่มเต็ม Claude Code จะรัน autocompact คือสรุป conversation ทั้งหมดเป็นข้อความสั้น ๆ เพื่อ free space ปัญหาคือมันสรุปไว้ระดับหนึ่ง แล้วของสำคัญที่ทีมเรา agree ไว้ตั้งแต่เช้า เช่น “ใช้ Bun ไม่ใช่ npm” หรือ “branch ปัจจุบันคือ feature/auth-refactor” บางทีก็หายไปกับสายลม

Hooks Guide ฉบับทางการ เสนอวิธีแก้ที่ตรงจุดมากครับ ใช้ SessionStart hook พร้อม matcher compact เพื่อ re-inject critical context หลัง compaction ทุกครั้ง:

// .claude/settings.json
{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "compact",
        "hooks": [
          {
            "type": "command",
            "command": "echo 'Reminder: ใช้ Bun ไม่ใช่ npm. รัน bun test ก่อน commit. Sprint นี้: auth refactor.'"
          }
        ]
      }
    ]
  }
}

หรือจะให้ dynamic ขึ้น แทนที่ echo ด้วย git log --oneline -5 ก็ได้ครับ Claude จะเห็น commit ล่าสุดทันทีหลัง compaction รอบใหม่

เคสที่ผมเจอ: ลูกค้าทีม fintech ขนาด 8 dev เจอปัญหา Claude ลืม coding convention ทุก ๆ 2-3 ชั่วโมง พอใส่ pattern นี้เข้าไป ลด rework เพราะ format ผิดลงประมาณ 30% ในสัปดาห์แรก เพราะ “Bun ไม่ใช่ npm” ไม่หลุดอีกแล้วครับผม

Pattern 2: Skills + Progressive Disclosure

ทีมที่ผมเจอบ่อย ๆ มักเริ่มต้นจากการยัดทุกอย่างลง CLAUDE.md — coding style, deployment process, security guideline, business glossary, อะไรก็ใส่ลงไป สุดท้าย CLAUDE.md ยาว 12,000 token แล้วทุก session ก็โดนมัน prepend ทุกครั้ง

ปัญหาคือ Claude อ่าน 12,000 token ทุก session ทั้งที่บางวันคุณแค่อยากให้มัน rename ฟังก์ชัน ไม่ได้แตะ deployment เลย

Solution คือ Progressive Disclosure ผ่าน Skills ครับ — Skill คือไฟล์ markdown ที่มี YAML frontmatter (name และ description) วางไว้ใน .claude/skills/ Claude จะ ไม่ โหลดเข้า context จนกว่า user จะเรียกใช้ หรือ description ตรงกับสิ่งที่ user ขอ (Replyant production guide)

ตัวอย่าง skill สำหรับ deployment ที่ผมใช้กับ Data-Espresso:

# .claude/skills/deploy-to-coolify.md
---
name: deploy-to-coolify
description: Deploy WordPress หรือ Next.js app ไปที่ Coolify server พร้อม validate Caddy + DNS
---

ขั้นตอน deploy:
1. ตรวจ branch ว่าเป็น main
2. รัน build local ก่อน push
3. ใช้ Coolify API endpoint POST /api/v1/deploy
...

ของพวกนี้จะกินที่เฉพาะตอนเรียกใช้ ไม่กิน token เปล่าทุก session ผม benchmark เองตอนทำ 5 เทคนิค context engineering ที่เคยเขียน พบว่าทีมที่ migrate จาก CLAUDE.md ขนาด 8K+ token มาเป็น 5 skills ขนาดเล็กลด baseline token usage ลงเฉลี่ย 60–70% ต่อ session

Best practice ที่ Happyin Knowledge Space ระบุไว้ปี 2026: skill ที่ดีควรอยู่ใต้ 2,000 token ถ้าใหญ่กว่านี้แตกเป็นหลาย skill เถอะครับ

Pattern 3: CwdChanged Hook + CLAUDE_ENV_FILE

Pattern นี้ผมเพิ่งลองช่วงเดือนเมษายนที่ผ่านมาตอนทำ project ที่มีหลาย micro-service ใน mono-repo เดียว ปัญหาคือแต่ละ service ใช้ environment variable ไม่เหมือนกันเลย — staging ใช้ DB คนละตัว, API key คนละชุด ปกติ direnv handle ให้ใน shell แต่ Bash tool ของ Claude ไม่ได้ trigger direnv ตอนเปลี่ยน directory

วิธีแก้สวย ๆ คือใช้ SessionStart + CwdChanged hook คู่กัน เขียนเข้า $CLAUDE_ENV_FILE ซึ่ง Claude Code จะ run เป็น preamble ก่อนทุก Bash command:

// ~/.claude/settings.json
{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          { "type": "command",
            "command": "direnv export bash > \"$CLAUDE_ENV_FILE\"" }
        ]
      }
    ],
    "CwdChanged": [
      {
        "hooks": [
          { "type": "command",
            "command": "direnv export bash > \"$CLAUDE_ENV_FILE\"" }
        ]
      }
    ]
  }
}

ผลคือทุกครั้งที่ Claude cd เข้า directory ใหม่ environment variable update เองอัตโนมัติ ไม่ต้องคอย source .env ด้วยมือทุกครั้ง

เคสที่ผมว่าน่าสนใจที่สุด: ทีมที่มี Next.js + WordPress + n8n ใน repo เดียวกัน — แต่ละ subdir มี .env ของตัวเอง ก่อนใส่ pattern นี้ Claude สับสนใช้ DB connection string ผิดอยู่บ่อย ๆ พอใส่ลงไปก็ตรงกันทุก subdir โดยไม่ต้องบอกมันด้วยซ้ำ

Pattern 4: MCP Volume Control + Subagent Isolation

ปัญหาที่ทีมเริ่มเจอเยอะขึ้นเรื่อย ๆ ปี 2026: ต่อ MCP server เกิน 5–6 ตัวพร้อมกันแล้วเริ่มรู้สึกว่า Claude ตอบช้าลง ตัดสินใจช้าลง

เหตุผลคือเมื่อ MCP tool description รวมกันเกิน 10% ของ context window Claude Code จะ switch ไปใช้ two-step tool search — search หา tool ที่เหมาะก่อน ค่อยเรียกใช้ (Replyant production lab) ตัว latency เพิ่มขึ้นเล็กน้อย แต่ที่สำคัญกว่าคือ context budget โดนกินไปกับ tool description ก่อนที่งานจริงจะเริ่ม

ทางออกที่ผมใช้กับลูกค้ามี 2 ทางครับ:

4.1 Scope MCP server ลงไปที่ subagent — Subagent มี config field mcpServers ที่ระบุได้ว่า agent ตัวนี้ใช้ MCP เฉพาะตัวไหน main session ไม่ต้องโหลด tool ของ subagent นั้น (ดูคู่มือ Subagent ฉบับ dev ไทย)

ตัวอย่าง subagent definition:

# .claude/agents/db-migrator.md
---
name: db-migrator
mcpServers:
  - postgres
  - supabase
disallowedTools:
  - Write
  - Edit
isolation: worktree
---
ทำหน้าที่ run database migration เท่านั้น ห้ามแก้ application code

วิธีนี้ทำให้ main Claude session ไม่ต้องเห็น tool ของ Postgres และ Supabase ตลอดเวลา ใช้เวลาเฉพาะตอน delegate งาน DB ให้ subagent

4.2 ใช้ Elicitation hook กรอง MCP request — สำหรับ MCP ที่ขอข้อมูล sensitive เช่น production credential เราตั้ง hook ที่ Elicitation event เพื่อ enforce policy ก่อน Claude จะ confirm กับ user — เป็น security gate ที่ บทความ Claude Code Hooks 25 Events ของผมยกไว้เป็น use case ที่หลายทีมยังไม่ได้เปิดใช้

Anti-Pattern ที่ทีมไทยมักทำพลาด

เขียน 4 pattern ที่ควรทำแล้ว ขอเสริมอีก 3 อย่างที่ ไม่ควรทำ ครับ:

  • ใส่ secret ลง SessionStart hook ตรง ๆ — stdout ของ hook นี้ถูก save ลง session transcript ถ้า resume ด้วย --continue หรือ --resume ค่าเก่าจะถูก replay หมายความว่า credential ของ environment เก่าจะติดมาด้วย ใช้ CLAUDE_ENV_FILE แทนเสมอครับ
  • เขียน hook ที่ run นานSessionStart รันทุก session การ curl ไปดึงข้อมูลจาก API ภายนอกใน hook ทำให้ทุก session boot ช้า ควรใช้ cached file หรือ asyncRewake mode สำหรับงานนาน
  • คิดว่า PreToolUse = log ทุกครั้ง — มัน trigger ก่อนทุก tool call จริง แต่มันก็เป็น hook เดียวที่ block tool ได้ การใช้มันเป็น log อย่างเดียวคือเสียโอกาส ใช้ PostToolUse สำหรับ log ดีกว่าครับ

เริ่มที่ไหนดี ถ้าทีม dev เพิ่งเริ่มทำ Context Engineering

ถ้าทีมขนาด 3–5 dev เพิ่งเริ่มผมแนะนำลำดับนี้ครับ:

  1. เริ่มที่ Pattern 1 (SessionStart + compact matcher) ก่อน — setup 10 นาที เห็นผลภายในวันเดียว
  2. ตามด้วย Pattern 2 (Skills) — แตก CLAUDE.md ที่บวมอยู่ออกเป็น 3–5 skill
  3. Pattern 3 ค่อยทำตอนเริ่มมีหลาย service / sub-project
  4. Pattern 4 รอจนต่อ MCP เกิน 5 ตัวค่อยทำ

หลักการสำคัญที่ผมยึดเสมอ: weaker model + good context ชนะ stronger model + bad context ทุกครั้งครับ ทีมที่ใช้ Sonnet 4.6 ที่ตั้ง context engineering ดี ๆ ทำงานได้ดีกว่าทีมที่ใช้ Opus 4.7 แต่ปล่อย context ลอยอยู่บ่อยมาก

FAQ

Context Engineering ใน Claude Code 2.x ต่างกับ Prompt Engineering ปกติยังไง?

Prompt Engineering คือ craft ข้อความที่ส่งให้ model ในแต่ละ turn ส่วน Context Engineering คือออกแบบ “ทุกอย่างที่อยู่ใน context window” ทั้ง session — รวมถึง CLAUDE.md, skill, hook output, tool result, subagent transcript Claude Code 2.x ทำให้เรา programmatic ทุก layer ได้ผ่าน hook ซึ่ง prompt engineering ทำไม่ได้

ทีมเล็กที่งบจำกัด ลงทุน Context Engineering คุ้มไหม?

คุ้มมากครับ เพราะทีมเล็กยิ่งต้องประหยัด token เพื่อ control cost ผมเคยเทียบให้ลูกค้ารายหนึ่ง — Pattern 2 (Skills) ลด token usage ต่อ session ลง 65% ภายในเดือนเดียว แปลเป็นค่า API ต่อปีก็เป็นหลักหมื่นบาท แล้วการ setup ทุก pattern ในบทความนี้ใช้เวลารวมไม่เกิน 1 วันทำงาน

Skills กับ MCP server ใช้แทนกันได้ไหม?

ไม่ครับ Skills คือ “playbook” — markdown ที่บอก Claude ว่าให้คิดยังไง ส่วน MCP คือ “tool” — capability ที่ Claude เรียกเพื่อทำอะไรกับโลกภายนอก เช่น query DB, ส่ง Slack message ทั้งสองทำงานคนละ layer ใน Skills เรียก MCP tool ได้ แต่ MCP เรียก Skill ไม่ได้

autocompact เกิดขึ้นกี่ครั้งใน session เดียว?

ตามเอกสารฉบับเมษา 2026 มี circuit breaker ที่หยุด autocompact หลัง refill ครั้งที่ 3 หมายความว่า session ที่ยาวมาก ๆ จะถูกบีบอัดได้สูงสุด 3 รอบก่อน Claude จะหยุดและขอให้ user เริ่ม session ใหม่ Pattern 1 ในบทความนี้สำคัญตรงนี้ครับ — re-inject context ทุกครั้งที่ compact ทำให้ session อยู่ได้นานขึ้นมาก

SessionStart hook ใช้ได้กับ Claude Code Cloud หรือ headless mode ไหม?

ใช้ได้ครับ — hook config อยู่ใน .claude/settings.json ของ project หรือ ~/.claude/settings.json ของ user ทั้ง interactive mode และ headless (claude -p) อ่านไฟล์เดียวกัน แต่ระวังหน่อยตรงที่ headless mode บางทีต้องการ defer decision เพื่อ pause ก่อน destructive operation ตรวจ matcher และ exit code ให้ดี

ปิดท้าย

Context engineering ใน Claude Code 2.x ไม่ใช่เรื่องของ “เซียน” อีกต่อไปครับ มันเป็น baseline skill ของทีม dev ทุกขนาดในปี 2026 ทีมที่ตื่นช้าอีก 6 เดือนจะเสีย token budget เปล่า ๆ ในขณะที่คู่แข่งใช้ Sonnet ราคาถูกเอาชนะคนใช้ Opus เปล่า ๆ

ลองเริ่มจาก Pattern 1 ตอนเช้านี้ก่อนเลยครับ ใช้เวลาแค่ 10 นาที แต่ผลลัพธ์เห็นทันทีในวันเดียว — Context Engineering ก็เหมือนการตั้งโต๊ะให้ดีก่อนทำอาหาร ของทุกอย่างอยู่ในที่ของมัน เชฟไม่ต้องวิ่งหานั่นนี่กลางครัว แล้วงานก็ออกเร็วขึ้นเองครับผม

Leave a Comment

สอบถามข้อมูล
Scroll to Top