TL;DR

Một coding agent là model cộng với mọi thứ được xây dựng xung quanh nó. Thuật ngữ mới nổi - harness engineering - đặt tên chính thức cho discipline thiết kế phần scaffolding đó. Luận điểm cốt lõi: một model tầm trung với harness xuất sắc thường xuyên đánh bại model đỉnh với harness tệ. Và khoảng cách đó được đo bằng số - không phải lý thuyết.

Cuộc tranh luận sai chỗ

Hai năm qua, phần lớn cộng đồng tập trung vào câu hỏi: model nào thông minh nhất, viết React sạch nhất, ảo giác ít nhất? Đó là câu hỏi đúng nhưng không đủ. Model chỉ là một đầu vào trong một agent đang chạy. Phần còn lại - prompts, tools, context policies, hooks, sandboxes, subagents, feedback loops, recovery paths - là harness.

Claude Code, Cursor, Codex, Aider, Cline đều là harness. Underlying model có thể giống hệt nhau trên các nền tảng, nhưng behavior bạn trải nghiệm phần lớn do harness quyết định. Cái gì nhanh hơn: nâng cấp model hay tối ưu harness? Câu trả lời thường gây bất ngờ.

The model is one chip on the board. The harness is everything else that makes it useful.
Model là một con chip. Harness là toàn bộ mạch board còn lại.

Harness là gì?

Định nghĩa của Viv Trivedy (@Vtrivedy10) - người đặt tên cho discipline này - rất gọn: Agent = Model + Harness. Nếu bạn không phải model, bạn là harness.

Cụ thể, harness bao gồm:

  • System prompts, CLAUDE.md, AGENTS.md, skill files, và subagent instructions
  • Tools, MCP servers, và mô tả kỹ thuật của chúng
  • Infrastructure: filesystem, sandboxes, headless browsers
  • Orchestration logic: spawn subagents, xử lý handoffs, route models
  • Hooks và middleware: lint checks, context compaction, enforcement layer
  • Observability: logs, traces, cost, latency metering

Phân tích arXiv về Claude Code cho thấy con số đáng ngạc nhiên: ~1.6% codebase là AI decision logic; 98.4% còn lại là operational infrastructure - safety gates, context management, tool dispatch, hooks. Đây là harness, không phải model.

Claude Code Architecture - multi-layer harness components

Nguyên lý Ratchet: Mỗi lỗi thành một quy tắc vĩnh viễn

Thói quen quan trọng nhất trong harness engineering là xem mỗi lỗi của agent như một tín hiệu vĩnh viễn, không phải sự cố ngẫu nhiên cần retry rồi bỏ qua.

Agent commit một PR với test bị comment-out? Đó là input. Iteration AGENTS.md tiếp theo phải ghi rõ: "Không bao giờ comment-out test, xóa hoặc fix chúng." Pre-commit hook tiếp theo phải tự động flag .skip( trong diff. Reviewer subagent phải được cập nhật để block commented-out tests.

HumanLayer đúc kết: "It's not a model problem. It's a configuration problem." Mỗi dòng trong system prompt tốt phải trace về một failure cụ thể trong lịch sử. Đó là lý do harness engineering là một discipline - không phải framework one-size-fits-all.

Một chi tiết thực tế từ nghiên cứu của HumanLayer: họ duy trì file cấu hình dưới 60 lines. ETH Zurich phát hiện file AGENTS.md được sinh bởi LLM thực ra hurt performance trong khi tốn thêm 20%+ token. Quy tắc vàng: Less is more.

Cấu trúc harness: Mỗi lớp giải quyết một giới hạn của model

Every harness feature is a bridge across a specific thing the model can't do on its own
Mỗi tầng harness là một cây cầu bắc qua một giới hạn cụ thể của model đơn thuần.

Từ dưới lên:

  • Filesystem + Git: Model chỉ làm việc với những gì trong context window. Filesystem cung cấp workspace để đọc dữ liệu, offload intermediate work, và nhiều agent phối hợp. Git thêm versioning miễn phí.
  • Bash + Code Execution: Thay vì pre-build tool cho mọi action, cho agent quyền bash để tự xây tool on the fly. Agents thường xuất sắc với shell commands.
  • Sandboxes: Bash chỉ hữu ích khi chạy an toàn. Sandbox cung cấp môi trường isolated với pre-installed runtimes, test CLIs, headless browsers.
  • Memory Files + Web Search + MCPs: Bridge khoảng cách giữa training data và real-time knowledge.
  • Compaction + Tool Offloading + Skills: Chống context rot - model suy giảm reasoning khi context window đầy. Có 3 kỹ thuật chính: summarize và offload context cũ, store tool output lớn ra filesystem, chỉ load tools khi task cụ thể yêu cầu.
  • Ralph Loops + Planning + Verification: Long-horizon execution. Planner/Generator/Evaluator separation loại bỏ self-evaluation bias - agent tự chấm điểm luôn thiên vị positive.

Anthropic's 3-agent harness cho thấy tác động thực tế: cùng task game retro - solo agent: 20 phút/$9; full Planner-Generator-Evaluator harness: 6 giờ/$200 - nhưng output quality khác biệt hoàn toàn.

Con số không thể phủ nhận

Trên Terminal Bench 2.0, Claude Opus 4.6 xếp hạng #33 khi chạy trong Claude Code native harness. Cùng model đó, trong một custom harness khác được tối ưu kỹ - xếp hạng #5. Không thay đổi model. Chỉ thay đổi cấu hình.

Khoảng cách giữa những gì model có thể làm theo lý thuyết và những gì bạn thực sự thấy nó làm - phần lớn là harness gap.

Harness không biến mất - nó di chuyển

The harness doesn't shrink. It moves. Each generation absorbs old harness features into the model.
Mỗi thế hệ model hấp thụ một phần harness cũ, nhưng harness mở rộng để chinh phục territory mới.

Dễ bị cám dỗ nghĩ rằng model tốt hơn sẽ làm scaffolding lỗi thời. Anthropic's v2 harness chứng minh điều ngược lại: họ loại bỏ "sprint construct" vì Opus 4.6 đã cải thiện long-context - đó là ví dụ tốt về việc gỡ bỏ scaffolding lỗi thời. Nhưng đồng thời, các tasks trước đây không thể thực hiện nay đã trong tầm với, mang theo failure modes hoàn toàn mới.

Mỗi component trong harness encode một assumption về những gì model không thể tự làm. Khi model cải thiện, scaffolding lỗi thời phải bị gỡ bỏ - và scaffolding mới phải được xây để chạm tới horizon tiếp theo.

Xu hướng hiện tại: các coding agents hàng đầu - Claude Code, Cursor, Aider, Cline - ngày càng trông giống nhau hơn. Không phải vì model giống nhau, mà vì harness patterns đang converge. Ngành đang nhanh chóng xác định được load-bearing scaffolding cần thiết để biến generative text thành shippable software.

Kết: Harness là compiler thế hệ tiếp theo

Những open problems thú vị nhất không còn là về model nữa: orchestrating nhiều agents song song, agents tự phân tích traces để fix harness-level failures, environments lắp ráp tools just-in-time. Harnesses đang ngừng là static config files và bắt đầu hoạt động giống compilers hơn.

Nếu bạn đang xây dựng hoặc dùng coding agents, câu hỏi không còn là "model nào tốt nhất?" mà là: harness của bạn có được engineer không?

via Birgitta Böckeler - Martin Fowler · HumanLayer · Anthropic Engineering · Addy Osmani