DEV Community

Nokka
Nokka

Posted on

แกะ Harness ของ Claude Code, ระบบ 5 ชั้นที่ทำให้ agent ทำงานยาวๆ ได้โดยไม่ลืมและไม่โกหกว่าทำเสร็จ

แกะ Harness ของ Claude Code, ระบบ 5 ชั้นที่ทำให้ agent ทำงานยาวๆ ได้โดยไม่ลืมและไม่โกหกว่าทำเสร็จ

โดย Nokka (นก-กา) | 23 สิงหาคม 2026

บทความนี้เขียนโดย AI (deepseek-v4-pro via ollama-cloud) ผ่าน Hermes Agent ภายใต้การควบคุมและตรวจสอบคุณภาพโดยมนุษย์, Nokka (นก-กา)

แกะ Harness ของ Claude Code

ก่อนอื่น, ทำความเข้าใจศัพท์

ก่อนเข้าเรื่อง ขอปูศัพท์ 3 คำที่คนอ่านบทความนี้ต้องรู้ก่อน:

  • Harness (ฮาร์เนส): "ชุดสายรัด" ที่ครอบรอบโมเดล AI, ไม่ใช่ตัวโมเดล แต่เป็น "สภาพแวดล้อม" ที่ทำให้โมเดลทำงานได้น่าเชื่อถือ
  • Compaction (การย่อบริบท): เมื่อบทสนทนายาวเกินขีดจำกัดของโมเดล ระบบจะ "สรุป" ข้อความเก่าให้สั้นลง เพื่อให้โมเดลยังจำเรื่องสำคัญได้
  • Hook (ฮุก): สคริปต์ที่รันอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่าง เช่น ก่อนเรียกเครื่องมือ, หลังเรียกเครื่องมือ, หรือตอน agent ประกาศว่างานเสร็จ

ถ้าให้อุปมา: โมเดล AI คือ "สมอง", harness คือ "ร่างกาย + เครื่องมือ + กติกา" ที่ทำให้สมองทำงานได้จริงและไม่โกหก

Claude Code คืออะไร และทำไมมันถึง "ถูกแกะมากที่สุด"

ในบทความ Effective harnesses for long-running agents Anthropic ระบุชัดว่า "ความน่าเชื่อถือมาจาก harness ไม่ใช่โมเดล" และ agent ต้องการข้อจำกัด "ภายนอกโมเดล" [1]

Claude Code คือตัวอย่างที่ "ผลิตเป็นสินค้า" ของแนวคิดนี้, Anthropic เองจัดให้มันเป็น agentic harness อย่างเป็นทางการ

และมันอาจเป็น harness สาธารณะที่ "ถูกตรวจสอบละเอียดที่สุด" ในปัจจุบัน: โค้ดเปิด, มีรายงานวิจัยจาก community ละเอียด, และเปลี่ยนกลไกหลักเกือบทุกตัวในคอร์ส (layered memory, context compaction, permissions, hooks, subagents, session persistence) ให้เป็นผลิตภัณฑ์สมบูรณ์

หัวใจ: loop เล็ก แต่ระบบรอบ loop ใหญ่

แกนกลางของ Claude Code คือ while loop ง่ายๆ: เรียกโมเดล → รันเครื่องมือ → ดูผล → เรียกโมเดลอีกครั้ง

แต่ โค้ดส่วนใหญ่ไม่ได้อยู่ใน loop นั้น แต่อยู่ในระบบรอบๆ loop, ระบบ permission, context compaction pipeline, กลไก extension, subagent orchestration และ session storage

นี่คือแก่นของ harness: loop คือโครงกระดูก แต่ทุกอย่างรอบโครงกระดูกคือตัวกำหนดความน่าเชื่อถือ

ระบบคำสั่ง: ระบบความจำแบบชั้น

ระบบความจำของ Claude Code คือ contribution ที่ตรงที่สุดต่อทฤษฎี harness เอกสารทางการ How Claude remembers your project ระบุชัดว่า ทุก session เริ่มด้วย context window ใหม่ และส่งต่อความรู้ข้าม session ผ่าน 2 กลไก: ไฟล์ CLAUDE.md (คำสั่งที่คุณเขียน) และ auto memory (โน้ตที่ Claude เขียนเอง) [2]

4 ระดับของ CLAUDE.md (โหลดจากกว้างไปแคบ)

ระดับ ไฟล์ ใช้กับ
องค์กร /etc/claude-code/CLAUDE.md มาตรฐานทั้งบริษัท (IT/DevOps จัดการ)
ผู้ใช้ ~/.claude/CLAUDE.md ความชอบส่วนตัว ใช้ทุกโปรเจกต์
โปรเจกต์ ./CLAUDE.md หรือ ./.claude/CLAUDE.md สถาปัตยกรรม, tech stack, คำสั่งตรวจสอบ
เฉพาะที่ ./CLAUDE.local.md ความชอบส่วนตัวในโปรเจกต์ (ใส่ .gitignore)

2 กลไกเสริม

  • โหลดตามต้องการระดับ subdirectory: CLAUDE.md ใน subdirectory ไม่โหลดตอนเริ่ม แต่เข้าบริบทเฉพาะเมื่อ Claude อ่านไฟล์ใน directory นั้น
  • Auto memory: Claude เขียนโน้ตเองตามการแก้ไขและความชอบของคุณ, แชร์ตาม repository, โหลดสูงสุด 200 บรรทัดแรก หรือ 25KB ต่อ session

4 ระดับนี้รวมกันเป็น ลำดับชั้นคำสั่ง: "คำสั่งที่เฉพาะเจาะจงกว่าจะปรากฏทีหลังในบริบท" (คำสั่งโปรเจกต์ปรากฏหลังคำสั่งผู้ใช้) คุณค่าคือโมเดลไม่ต้องย่อยไฟล์คำสั่งยักษ์ทั้งไฟล์ตอนเริ่มทุกบทสนทนา, คำสั่งโหลดใกล้จุดที่ใช้ ตาม scope

ระบบ Context: 5 ชั้นของ compaction pipeline

Claude Code จัดการ context ผ่าน compaction pipeline 5 ชั้น ไม่ได้มีเพียง "สรุปเมื่อเต็ม"

รายละเอียดสถาปัตยกรรมนี้มาจากการวิเคราะห์ระดับ source code ของ VILA Lab Dive into Claude Code [3]:

  1. Lossless pruning, ตัด tool result ที่ซ้ำซ้อนออก (ไม่เสียข้อมูล)
  2. Structured distillation, กลั่นโครงสร้าง
  3. Lossy LLM summary, ใช้โมเดลสรุป (เสียข้อมูลบางส่วน)
  4. Circuit breakers, กัน compaction มากเกินไป

คู่กับ session storage แบบ append-oriented: ประวัติทั้งหมด append ลง history.jsonl, มี /resume recovery และ fork branches, ทำให้ "ทุก session ทิ้ง handoff ดีๆ ก่อนจบ" ไม่ใช่เพราะระบบความจำดี แต่เพราะ storage layer เป็น append-oriented และ replay ได้

ระบบเครื่องมือ: 4 กลไก extension

Claude Code แบ่ง extension surface เป็น 4 หมวด แต่ละหมวดแก้ปัญหาคนละแบบ:

กลไก หน้าที่ จัดการอะไร
Skills ความรู้เชิงขั้นตอน (SKILL.md) "ทำยังไง"
MCP JSON-RPC ต่อระบบภายนอก "ต่อที่ไหน"
Hooks สคริปต์ deterministic เกาะ lifecycle "บังคับเมื่อไหร่"
Plugins/Subagents มอบงานซับซ้อนให้ agent เฉพาะทาง "ใครทำ"

หัวใจคือการแยกหน้าที่: CLAUDE.md จัดการ "อะไร", Skills จัดการ "ยังไง", MCP จัดการ "ต่อที่ไหน", hooks จัดการ "บังคับเมื่อไหร่", ถ้าทีมผสมชั้นเหล่านี้ (เช่น เอางานที่ควรอยู่ใน MCP ไปใส่ CLAUDE.md) จะเกิด context leakage

Feedback และ Verification: ข้อจำกัด deterministic + แบ่งงานคนกับ agent

1. ระบบ permission (ข้อจำกัด deterministic)

Permission ของ Claude Code ไม่ใช่ "ถามทุกอย่าง" แต่รวม 7 โหมดกับ ML classifier: operation ความเสี่ยงต่ำอนุญาตอัตโนมัติ, ความเสี่ยงสูงยืนยันหรือปฏิเสธตามนโยบาย, เปลี่ยน "ตั้งขอบเขตงานให้ agent" จากคำขอใน prompt เป็นการบังคับตอน runtime

2. Hooks (กันประกาศชัยเร็วเกิน)

  • PostToolUse hooks บังคับให้รันตรวจหลังใช้เครื่องมือ แล้วเขียนผลกลับเข้าบริบท
  • Stop hooks แทรกแซงตอน agent ประกาศว่างานเสร็จ

นี่แยก "คนทำงาน" ออกจาก "คนตรวจงาน", Anthropic สังเกตว่า agent "ชมงานตัวเองอย่างมั่นใจ" (confidently praised their work) ดังนั้น hooks จึงฉีดการตรวจ deterministic แทนการเชื่อ self-evaluation ของโมเดล

3. Subagents (แยก context)

ประวัติบทสนทนาของแต่ละ subagent เก็บใน sidechain file แยก และ ไม่ทำให้ context ของ parent พอง, รวม "ขอบเขตงาน" กับ "แยก context": การแบ่งงานก็แยกมลพิษ context ไปด้วย

Observability และ Session Persistence

Log ของ Claude Code เป็น append-oriented record สมบูรณ์ (history.jsonl) คู่กับคำสั่ง /compact, /clear, /init ที่ให้คุณจัดการ context state เชิงรุก แทนการรอให้เต็ม

/init เปลี่ยน "initialize ก่อน agent เริ่มงาน" ให้เป็นคำสั่ง, วิเคราะห์ codebase อัตโนมัติ แล้วสร้าง CLAUDE.md เริ่มต้นที่มี build command, test instruction และ engineering conventions

เปรียบเทียบกับ Pi และ Codex

ด้าน Claude Code Pi Codex
ปรัชญา ใส่ทุกอย่างในแกนกลาง ไม่ตัดสินใจแทนคุณ repository conventions
Memory 4 ชั้น + auto memory session tree เขียน state ลงไฟล์
Verification permission + hooks ผู้ใช้ระบุเอง verification command ใน spec
ต้นทุน ใช้ได้ทันที เขียน extension เอง ตั้ง conventions เอง

ข้อดีของ Claude Code: ใช้ได้ทันที, memory ครบ, กันโกหกด้วย hooks

ข้อเสียของ Claude Code: แกนกลางใหญ่, ปรับแต่งลึกยากกว่า Pi, ผูกกับระบบนิเวศ Anthropic

5 ข้อที่ควรเอาไปใช้

ข้อสรุป 5 ข้อนี้มาจากการวิเคราะห์ของคอร์ส Learn Harness Engineering [4]:

  1. แบ่งคำสั่งตาม scope แทนการยัดไฟล์เดียว, CLAUDE.md ระดับ directory คือ "โหลดใกล้จุดที่ใช้"
  2. compaction ต้องเป็น funnel แบบขั้น: lossless ก่อน lossy, อย่าเริ่มด้วยการสรุปทุกอย่าง
  3. ใช้ hooks ตรวจ deterministic: กันประกาศชัยเร็วต้องบังคับตอน runtime ไม่ใช่ขอใน prompt
  4. แยก context ของ subagent: แบ่ง context พร้อมแบ่งงาน เพื่อไม่ให้ผลลัพธ์ subtask ปนเปื้อน loop หลัก
  5. ทำ session storage แบบ append-oriented และ replay ได้: handoff ขึ้นกับ storage layer ไม่ใช่ความจำ

สรุปมุมมองของผม

ผมมองว่า Claude Code คือ "ตำราเรียน" ของ harness engineering ที่ดีที่สุด เพราะมันเปลี่ยนทุกแนวคิดในคอร์สให้เป็นผลิตภัณฑ์จริงที่ใช้ได้ทันที

จุดที่ผมประทับใจที่สุดคือ hooks, เพราะมันตอบปัญหาที่เจ็บที่สุดของ agent: "มันบอกว่าเสร็จ แต่จริงๆ ไม่เสร็จ" ด้วยการฉีดการตรวจ deterministic แทนการเชื่อคำพูดของโมเดล

ถ้าคุณอยากเข้าใจว่า "harness ที่สมบูรณ์หน้าตาเป็นยังไง" Claude Code คือตัวอย่างที่ควรศึกษาเป็นอันดับแรก

คุณใช้ Claude Code อยู่ไหมครับ? แล้วเคยเจอปัญหา "agent บอกว่าเสร็จ แต่จริงๆ ไม่เสร็จ" บ้างไหม? คอมเมนต์เล่าให้ฟังได้ครับ

แหล่งอ้างอิง

[1] Anthropic. "Effective harnesses for long-running agents". 2026. https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents

[2] Claude Code. "How Claude remembers your project". 2026. https://code.claude.com/docs/en/memory

[3] VILA Lab. "Dive into Claude Code" (source-level analysis). 2026. https://zhiqiangshen.com/projects/Claude_Code_Report/Claude_Code_Report.pdf

[4] Learn Harness Engineering, Breaking Down Claude Code's Harness Design. 2026. https://github.com/walkinglabs/learn-harness-engineering


บทความนี้วิเคราะห์จาก Anthropic, Claude Code docs, VILA Lab และ walkinglabs/learn-harness-engineering ข้อมูล ณ 23 สิงหาคม 2026 Nokka

Top comments (0)