AI

[AI] 모델은 똑똑한데왜 Agent는 자꾸 이상한 짓을 할까? 하네스 엔지니어링 (Harness Engineering)

rubrub 2026. 9. 15. 00:07
AGENTIC AI · HARNESS ENGINEERING · 2026 DEEP DIVE

모델은 똑똑한데
왜 Agent는 자꾸 이상한 짓을 할까?

Google이 2026년 다시 꺼낸 Harness Engineering.
Prompt보다 Tool, State, Permission, Eval, Runtime이 중요해지는 이유를 최신 논문과 함께 뜯어본다.

SCENE #1 · 흔한 Agent 사고
사람: “이 코드 고치고 테스트까지 돌려줘.”
Agent: “수정 완료했습니다. 모든 테스트가 통과했습니다.”
실제: 테스트 명령은 한 번도 실행하지 않았다.

이런 문제를 보면 우리는 먼저 Prompt를 고친다. “반드시 테스트를 실행하세요.” 그래도 또 빠뜨리면 대문자로 쓴다. “IMPORTANT: 반드시 테스트!”

그런데 여기서 문제가 하나 생긴다. 테스트 실행이 정말 반드시 지켜야 할 규칙이라면, 왜 그 규칙의 집행을 확률적으로 말을 듣는 LLM에게 맡기고 있을까?

Model은 엔진이다. Agent를 움직이는 건 ‘차 전체’다. MODEL ENGINE reasoning 강력하지만 혼자서는 방향도, 제동도 없다 HARNESS 핸들 routing 브레이크 permission 계기판 observability 내비 planning 안전벨트 validation 결합 좋은 엔진 ≠ 좋은 자동차 · 좋은 Model ≠ 좋은 Agent
Harness Engineering은 모델을 더 똑똑하게 만드는 연구가 아니라, 모델이 실제 시스템 안에서 덜 이상하게 행동하도록 만드는 엔지니어링에 가깝다.
먼저 사실관계부터 “Google의 Harness Engineering 논문”이라는 제목의 단일 대표 논문이 있는 것은 아니다. 2026년 9월 9일 Google Developers Blog가 The Anatomy of Harness Engineering이라는 글을 공개했고, Google Research에는 Industrial Agentic Engineering 자료가 올라와 있다. 동시에 arXiv에서는 Harness Engineering을 직접 다루는 논문들이 4월부터 9월까지 연속해서 등장했다. 따라서 지금 이 주제를 이해하려면 Google의 실무 관점 + 최신 학술 연구 흐름을 같이 보는 편이 정확하다.
먼저 결론
Agent 시대의 경쟁력은 “어떤 모델을 쓰느냐”에서
“그 모델이 어떤 실행 환경 안에서 행동하게 만드느냐”로 이동하고 있다.

Harness는 Prompt를 감싸는 포장지가 아니다

가장 직관적인 정의는 간단하다.

Agent = Model + Harness
Model이 “생각”한다면, Harness는 그 생각이 실제 세계에서 어떤 행동으로 바뀔지를 결정한다.

모델은 다음 토큰을 생성한다. 하지만 실제 Agent는 그것만으로 움직이지 않는다. 어떤 tool을 쓸 수 있는지, tool 호출 결과를 어떻게 다시 context에 넣는지, 실패했을 때 재시도할지 중단할지, 명령어 실행 전에 승인을 받을지, context가 길어지면 무엇을 버릴지, 완료 조건을 어떻게 검증할지를 누군가 결정해야 한다. 그 “누군가”가 Harness다.

Model은 Harness 안에서만 Agent가 된다 LLM / Foundation Model reasoning · generation · tool selection AGENT HARNESS Agent Loop plan · act · observe Context / Memory state · compaction Tools API · shell · MCP Permission / Sandbox allowlist · policy · isolation Validation · Guard · Retry Trace · Eval · Observability Extensions Repository · Browser · Database · Enterprise APIs · External Systems
모델은 추론 엔진이고, Harness는 실행 정책과 운영 규칙을 담는 런타임이다.
같은 Model인데 왜 결과가 다를까? Same Foundation Model Harness A · “자유롭게 해봐” • 범용 shell tool • 명시적 완료 검증 없음 • retry 무제한 • trace는 마지막 답변만 저장 Harness B · “끝났는지 증명해” • scoped tools • test/validator completion gate • retry budget + fallback • trajectory + policy trace “완료했습니다”라고 말함 실제로 검증 후 종료
Model 품질만 비교하면 이 차이를 설명하기 어렵다. Harness는 Agent의 ‘행동 습관’을 만든다.

Chatbot은 틀리면 답만 틀렸다. Agent는 버튼을 누른다

Chatbot 시절에는 모델이 틀리면 “답변 품질” 문제로 끝나는 경우가 많았다. Agent는 다르다. 파일을 수정하고, DB를 조회하고, 코드를 실행하고, API를 호출하고, 때로는 결제·배포·승인 같은 실제 업무를 수행한다.

여기서부터는 모델의 평균 지능보다 실행 경로의 통제 가능성이 중요해진다. 같은 prompt를 주더라도 실행 순서가 달라지고, 어떤 run에서는 검증을 하고 어떤 run에서는 건너뛸 수 있다. Production에서는 이 변동성이 곧 장애·보안·감사 문제다.

문제 Prompt만으로 해결? Harness에서 다룰 것
잘못된 Tool 호출부분적으로 가능Tool allowlist, schema, permission
검증 없이 완료 선언쉽게 회귀verify-on-stop, completion gate
Context 폭주어려움compaction, memory policy, token budget
권한 없는 데이터 접근불가Authorization, tool-side filter, policy enforcement
모델 교체 시 행동 변화예측 어려움behavioral eval, trace regression test
Agent 사고는 보통 마지막 한 문장에서 시작되지 않는다 1. 모호한 요청“적당히 처리해” 2. 잘못된 계획확인 없이 추측 3. Tool 선택너무 강한 권한 4. Side Effect파일/DB 변경 5. 검증 생략테스트 안 함 6. 완료“성공!” Harness는 이 체인의 중간마다 “여기서 멈춰야 하나?”를 검사하는 장치다.

Google의 포인트: “점수 몇 점?”보다 “도중에 뭘 했는데?”

2026년 9월 9일 Google Developers Blog의 The Anatomy of Harness Engineering은 Harness Engineering을 특히 behavioral evaluation 관점에서 설명한다.

흔히 Agent를 평가할 때 “SWE-Bench 몇 점”, “Terminal-Bench 몇 점”처럼 최종 성공률을 본다. 물론 중요하다. 하지만 점수가 떨어졌을 때 원인은 알기 어렵다. 모델이 애매한 요청에서 추측했는지, 테스트를 안 돌렸는지, 존재하지 않는 CLI 옵션을 만들어냈는지 최종 pass/fail만으로는 분해가 안 된다.

Google의 실무 메시지 Behavioral eval을 Agent Harness의 integration test처럼 다뤄라. 최종 문장 일치보다 “필요한 상황에서 실제로 특정 tool을 호출했는가”, “파일 수정 뒤 validator를 실행했는가”, “불확실한 요구에서 확인 절차를 밟았는가” 같은 중간 행동을 검증하라는 이야기다.

이 관점은 꽤 중요하다. Agent는 계산기처럼 같은 입력에 늘 같은 경로를 밟는 프로그램이 아니다. 그래서 모든 trajectory를 정확히 고정하려 들면 정상적인 다른 해결 경로까지 막을 수 있다. 단순한 행동은 strict assertion으로 검사하고, 복잡한 작업은 outcome-based check나 judge를 섞어야 한다.

# 나쁜 평가: 마지막 답변 문자열만 비교
assert response.text == "done"

# 더 나은 behavioral eval
trace = run_agent(task)

assert trace.used_tool("unit_test")
assert trace.modified_only(allowed_paths)
assert trace.exit_reason == "verified"
assert trace.policy_violations == 0

Google 글의 또 다른 포인트는 dogfooding → behavioral eval → macro benchmark의 순서다. 초기부터 거대한 eval framework를 만들기보다 먼저 Agent가 자기 코드베이스에서 실제 일을 하게 만들고, 반복되는 실패 패턴이 보이기 시작하면 그 실패를 작은 regression test로 고정한다. 이후 큰 benchmark는 전체 목적지의 품질을 확인하는 용도로 사용한다.

Macro Benchmark는 체온계, Behavioral Eval은 CT에 가깝다 MACRO SCORE 71% “뭔가 나빠졌는데… 왜?” zoom in BEHAVIORAL EVAL ✓ 테스트 Tool 호출 ✕ 범위 밖 파일 수정 ✓ Citation 포함 ✕ Validator 생략 원인이 보이기 시작한다

2026년, Harness가 하나의 연구 분야가 되기 시작했다

2026 Harness Engineering 연구 타임라인
4월
AHE / HARBOR — Harness 자체를 자동으로 개선·탐색하는 문제로 보기 시작
7월
Harness Anatomy — 11개 production coding harness의 실제 source code를 해부하고 공통 패턴 정리
7월
From Prompts to Contracts — Enterprise Agent에서 prompt가 아니라 코드·schema·validator가 보장을 가져야 한다는 관점
8월
Predictable Agentic Systems — deterministic execution constraint와 structured planning의 효과 측정
9월
HarnessDev / HEART — Agent가 자기 Harness를 만들고 진화시키는 문제, 대규모 tool catalogue를 다루는 Harness 연구
9월
Scanning the Harness — Skill·Hook·MCP 설정이 새로운 software supply-chain attack surface가 되고 있음을 실증
2026 Harness 연구는 크게 네 방향으로 갈라진다 HARNESS runtime engineering ① Anatomy 실제 제품은 어떤 구조로 수렴하나? 11개 production coding harness 분석 ② Evolution Harness도 자동으로 개선할 수 있나? AHE · HarnessDev ③ Predictability 더 결정적인 실행 구조가 도움이 되나? structured planning · validation ④ Security Skill·Hook·MCP가 공격면이 되나? agent configuration supply chain

1. Harness Engineering: 실제 제품 코드를 뜯어보니

2026년 7월의 Harness Engineering: Anatomy, Architecture, and Evolution of Coding Agents는 Claude Code, Codex CLI, Gemini CLI, Mistral Vibe, OpenHands, Aider 등 11개 coding harness를 source-code 수준에서 비교했다.

이 논문의 여기서 꽤 재밌는 부분은 “Agent를 어떻게 만들어야 한다”는 개념도를 그린 것이 아니라, 실제 production system이 어디에 코드를 많이 쓰고 어떤 방식으로 수렴하는지를 봤다는 점이다. 연구진은 공통 구조를 Agent loop, tool execution, context/memory, safety, orchestration, extensibility 등의 subsystem으로 분해하고 29개의 반복 패턴을 정리한다.

특히 재미있는 관찰
연구 대상 약 400만 라인의 코드에서 일반-purpose agent framework를 runtime dependency로 쓰는 경우가 없었고, code retrieval에 embedding 기반 RAG를 쓰는 harness도 없었다고 보고한다. 실제 제품은 생각보다 “거대한 agent framework”보다 hand-rolled loop, deterministic file/search primitives, 세밀한 permission과 context 관리에 가까웠다.

이 결과를 “LangChain이나 vector search가 쓸모없다”로 읽으면 안 된다. 연구 범위가 coding harness이고, repository 탐색은 symbol/path/grep처럼 강한 deterministic signal을 갖는다. 다만 한 가지는 분명하다. Agent가 복잡해질수록 abstraction을 많이 쌓는 것이 자동으로 좋은 architecture가 되는 것은 아니다.

2. AHE: Harness도 스스로 개선할 수 있을까?

4월 공개된 Agentic Harness Engineering은 Harness 개선을 사람이 prompt를 조금씩 고치는 작업이 아니라 관측 가능한 closed loop 최적화 문제로 바꾼다.

핵심은 세 가지 observability다. 무엇을 수정했는지 추적하는 component observability, 긴 trajectory에서 실패 원인을 압축해주는 experience observability, 그리고 “이 수정이 어떤 결과를 낼 것이라고 예상했는가”를 기록하는 decision observability다.

논문 보고값 기준으로 10회의 개선 iteration 뒤 Terminal-Bench 2 pass@1이 69.7%에서 77.0%로 상승했고, frozen harness를 다른 model family에 적용했을 때도 +5.1~10.1 percentage point의 개선을 보고했다. Ablation에서는 system prompt보다 tools, middleware, long-term memory 쪽 변경이 더 중요한 성능 기여를 보였다.

Engineering Interpretation “Prompt engineering을 잘하면 된다”에서 한 단계 더 간다. 좋은 Agent는 좋은 prompt가 아니라 좋은 runtime structure + observable feedback loop의 결과일 수 있다는 주장이다.

3. HarnessDev: AI가 자기 Harness를 직접 만들면 인간을 이길까?

2026년 9월의 HarnessDev는 질문을 더 밀어붙인다. LLM에게 주어진 Harness 안에서 문제를 풀게 하지 않고, Harness 자체를 만들고 고치게 한다.

결과는 낭만적이지만은 않다. 생성된 Harness는 coding과 search/research 영역에서 성숙한 human-engineered reference보다 아직 크게 뒤처졌고, writing과 일부 ML experimentation에서는 비슷하거나 더 높은 결과도 보였다. Evolution 단계의 개선 역시 불안정했고, 다른 runtime model로 바꾸면 이득이 잘 전달되지 않았다.

즉 “Agent가 자기 Agent runtime까지 알아서 최적화하는 시대”는 방향으로는 흥미롭지만, 현재 Production에서 완전히 맡겨도 된다는 증거는 아니다. 특히 금융권에서는 self-evolving harness보다 human-gated harness evolution이 현실적이다.

4. Predictable Agentic Systems: 결정성을 높이면 무조건 좋아질까?

8월 논문은 finance·legal synthetic task와 두 open-weight model을 대상으로 finite-state control, forced tool selection, output validation, bounded retry 같은 deterministic constraint를 실험했다.

첫 번째 결과는 의외다. 단순히 constraint를 넣는다고 항상 좋아지지 않았다. 어떤 조합에서는 reproducibility가 오히려 악화됐다. 원인을 추적하니 free-text planning이 새로운 variance source가 되고 있었다. 이후 plan을 fixed schema로 검증하는 Structured Planning을 추가하자 4개 cell 중 3개에서 reproducibility 지표가 1.000에 도달했고, 3개 cell에서 task success가 100%가 됐다.

하지만 latency는 model에 따라 반대 방향으로 움직였다. 이 부분이 중요하다. Harness의 통제 강화는 공짜가 아니다. Reliability, token cost, latency를 같이 측정해야 한다.

5. 최신 보안 연구: 이제 Harness 자체가 Supply Chain이다

9월 7일 공개된 Scanning the Harness는 3,171개 공개 GitHub repository의 coding-agent configuration을 분석했다. 연구 대상은 instruction file, skill, hook, MCP server declaration, subagent 설정 등 우리가 흔히 “Agent 설정”이라고 가볍게 보는 artifact들이다.

논문은 검증된 기준으로 전체 setup의 16.0%에서 security defect를 보고했다. 예를 들어 MCP server가 version pin 없이 설치되거나, 겉보기에는 제한적으로 보이는 permission이 사실상 arbitrary execution을 허용하거나, 배포되는 skill 자체가 shell 실행을 사전 승인하는 경우가 있었다.

Enterprise에서 이건 꽤 큰 변화다 지금까지 software supply chain은 package, container image, CI/CD plugin을 주로 봤다. 이제는 SKILL.md, MCP config, hook, agent instruction도 실행 권한을 가진 dependency로 봐야 한다. “텍스트 파일”처럼 보여도 Agent에게 shell·filesystem·API 권한을 부여하면 사실상 executable policy다.

Prompt를 더 세게 쓰는 것과 Harness는 완전히 다르다

구분 Prompt Engineering Agent Framework Harness Engineering
주요 대상모델 입력개발 abstraction실행 runtime 전체
핵심 질문어떻게 지시할까?어떻게 조립할까?어떻게 안전하고 반복 가능하게 실행할까?
실패 대응문구 수정node/graph 수정policy·tool·state·validator·eval 수정
보장 수준확률적 지시구조 제공코드·schema·policy로 enforce 가능

셋은 경쟁 관계가 아니다. Prompt는 Harness의 한 구성요소일 수 있고, LangGraph·AutoGen 같은 framework를 이용해 Harness를 구현할 수도 있다. 중요한 차이는 관심의 초점이다. Harness Engineering은 “모델에게 무엇을 말할까?”보다 “모델이 어떤 조건에서 무엇을 할 수 있고, 실패했을 때 시스템이 무엇을 보장할까?”에 더 가깝다.

“하지 마”와 “할 수 없음”은 다르다 Prompt Policy “권한 없는 고객 정보는 절대 조회하지 마세요.” LLM이 지켜주길 기대한다 Executable Contract authorized_customer_ids 에 포함되지 않으면 API가 403 시스템이 애초에 못 하게 만든다

“반드시”라는 단어가 나오면 Prompt 밖으로 꺼내라

금융권 관점에서 가장 중요한 관련 논문은 7월의 From Prompts to Contracts: Harness Engineering for Auditable Enterprise LLM Agents다. 이 논문의 메시지는 단순하다.

“Prompt에 적은 정책은 정책이 아니다.”
source boundary, entity routing, output contract, trace hygiene처럼 반드시 지켜야 하는 조건은 model instruction이 아니라 code, manifest, schema, validator가 소유해야 한다.

이 연구는 세 hosted model에 대해 270회의 composition-boundary run을 수행했고, Harness가 강제하는 source grounding, routing, trace, output hygiene 등의 contract는 유지되었다고 보고한다. 반면 prompt-only 조건에서는 recommendation wording과 internal trace leakage 위반이 사용자에게 도달했다. 외부 guardrail을 덧붙이면 차단은 가능했지만 과도한 refusal로 utility가 감소했다.

이 결과 하나로 모든 Enterprise Agent가 같은 설계를 써야 한다는 뜻은 아니다. 하지만 “must” 조건은 자연어가 아니라 executable contract로 옮겨야 한다는 방향은 매우 실무적이다.

금융권에서는 Harness가 곧 실행 통제선이다

Enterprise Agent Harness: Model 앞뒤가 아니라 실행 경계 전체를 감싼다 User / Channel Web · Copilot · API Identity & Policy SSO · RBAC · entitlement AGENT HARNESS Task Router intent · risk tier State Machine allowed transitions Tool Policy allowlist · scopes Data Guard ACL · DLP · masking Output Contract schema · citation Retry / Timeout budget · circuit break Trace · Audit · Behavioral Eval · Cost Attribution Model Gateway routing · fallback · version Enterprise Tools DB · Search · API Approval human-in-the-loop
금융권에서는 Harness를 단순 prompt wrapper가 아니라 policy enforcement와 audit의 실행 경계로 보는 편이 안전하다.
가장 중요한 원칙 LLM에게 전달된 순간 이미 데이터 접근은 발생했다. “권한 없는 정보는 답하지 마”라는 system prompt는 Authorization이 아니다. 권한 없는 데이터는 Retrieval과 Tool Execution 단계에서 애초에 제외되어야 한다.

1. Tool마다 권한 모델이 있어야 한다

Agent에게 “DB tool” 하나를 주는 대신 read-only query, customer lookup, policy retrieval처럼 권한 범위를 작은 capability로 나누는 편이 좋다. shell이나 arbitrary SQL 같은 범용 tool은 가장 높은 risk tier로 관리해야 한다.

2. State transition을 명시한다

상담 Agent가 조회에서 바로 계약 변경으로 넘어가서는 안 된다. 예를 들어 IDENTIFY → ELIGIBILITY_CHECK → RETRIEVE → PROPOSE → APPROVE → EXECUTE처럼 상태 전이를 코드로 정의하면 “모델이 알아서 순서를 지키겠지”에 의존하지 않게 된다.

3. Output은 자연어가 아니라 Contract다

고객에게 보여줄 답변이 citation, disclaimer, confidence, action type을 반드시 포함해야 한다면 JSON schema 또는 typed model로 검증해야 한다. validation 실패 시 재생성·fallback·human handoff를 명시한다.

class Claim(BaseModel):
    text: str
    source_id: str
    page: int

class AgentOutput(BaseModel):
    answer: str
    claims: list[Claim]
    action: Literal["answer", "ask", "handoff"]
    risk_level: Literal["low", "medium", "high"]

result = model.invoke(context)
validated = AgentOutput.model_validate_json(result)

if validated.risk_level == "high":
    return require_human_approval(validated)

4. Trace는 운영 로그가 아니라 평가 데이터다

좋은 Harness는 단순히 “에러가 났다”를 남기지 않는다. 어떤 model version이 어떤 tool을 왜 선택했고, policy check가 무엇을 통과·거절했고, retry가 몇 번 일어났으며, 최종 답변이 어떤 source를 사용했는지 재현할 수 있어야 한다.

Agent에게도 회귀 테스트가 필요하다

Harness Engineering의 가장 실용적인 출발점은 거대한 Agent platform을 새로 만드는 것이 아니다. 지금 운영 중인 Agent의 반복 실패를 테스트로 고정하는 것이다.

추천하는 Agent Eval 계층
L0
Schema / unit
→
L1
Behavioral eval
→
L2
Trajectory judge
→
L3
End-to-end benchmark
→
L4
Shadow / canary

모든 PR에서 거대한 benchmark를 돌리면 비용과 시간이 너무 크다. 반대로 unit test만으로는 LLM의 trajectory 회귀를 잡을 수 없다. 따라서 빠른 deterministic check → 행동 eval → 제한된 judge → batch benchmark → production canary로 층을 나누는 편이 현실적이다.

# CI 예시
on_pull_request:
  - schema_tests
  - tool_permission_tests
  - behavioral_suite_50_cases

nightly:
  - trajectory_eval_500_cases
  - model_version_A_B
  - cost_latency_regression

before_release:
  - full_e2e_benchmark
  - red_team_suite
  - shadow_traffic

production:
  - canary_5_percent
  - p95_latency / tool_error / policy_violation
  - rollback_on_threshold

AI Gateway와 Harness는 같은 계층이 아니다

Enterprise architecture에서 자주 섞이는 개념이 하나 있다. AI Gateway와 Agent Harness다.

AI Gateway는 model endpoint 접근을 통제하고 routing, rate limit, quota, logging, provider abstraction을 담당하는 인프라 계층에 가깝다. 반면 Agent Harness는 task를 어떤 단계로 수행하고 어떤 tool을 어떤 조건에서 호출하며 어떤 검증을 통과해야 종료되는지를 관리한다.

둘은 겹치지만 동일하지 않다. 하나의 Harness가 여러 model을 Gateway를 통해 호출할 수 있고, 하나의 Gateway를 여러 Agent Harness가 공유할 수 있다.

Layer 주요 책임 대표 지표
AI GatewayModel routing, quota, auth, fallbackTPS, latency, error, cost
Agent HarnessLoop, state, tool, context, validationtask success, policy violation, retries
Tool GatewayEnterprise API exposure, scope, audittool error, denied calls, side effects
Eval PlatformRegression, benchmark, judge, trace analysispass rate, stability, cost/quality
Agent의 “설정 파일”이 실제 실행 권한으로 이어지는 길 SKILL.mdinstruction MCP configserver declaration Agent Harness load · route · approve Shelllocal execution Filesystemread / write External APIcredentials Potential Impact 데이터 유출 · 임의 실행 권한 오용 · 공급망 변조 텍스트처럼 보이지만 실행 권한을 연결하면 “설정”이 아니라 supply-chain dependency다.

MCP가 100개가 되는 순간, Tool 목록은 생태계가 아니라 공격면이다

Tool ecosystem이 커질수록 Agent가 강해지지만, 동시에 선택과 권한 문제가 커진다. 최신 Harness 연구가 MCP, Skill, plugin, subagent를 단순 extension이 아니라 Harness의 핵심 surface로 보는 이유다.

수백 개 tool schema를 prompt에 전부 넣으면 context가 커지고 tool selection이 어려워진다. 그래서 2026년 9월의 HEART 연구처럼 tool catalogue를 동적으로 retrieval하고, Planner·Router·Verifier를 두는 구조가 등장한다. 다만 이런 연구의 성능 수치는 특정 benchmark와 구현에 의존하므로 그대로 production 효과로 환산하면 안 된다.

주의할 점
MCP server를 연결했다는 것은 단순히 “LLM에게 도구 설명을 추가했다”는 뜻이 아니다. 실제 credential, network, filesystem, external API 권한까지 연결될 수 있다. 따라서 Tool discovery와 Tool authorization은 분리해야 한다.
하나를 고치면 다른 데가 튀어나온다 PRODUCTION Agent Harness Reliability ↑retry · validation Latency ↑extra steps · judge Control ↑state machine · policy Flexibility ↓free-form 행동 감소 Cost / task까지 같이 봐야 한다

PoC에서는 안 보이다가 Production에서 터지는 5가지

1. Model upgrade regression

모델이 더 좋아졌는데 Agent 성공률이 떨어질 수 있다. Tool selection 스타일, verbosity, planning 습관이 달라지면 Harness와의 궁합이 변한다. 그래서 model version 교체는 library upgrade가 아니라 runtime behavior change로 테스트해야 한다.

2. Retry loop가 비용 폭탄이 된다

“실패하면 다시 해”만 넣으면 transient error를 복구하는 대신 같은 잘못된 계획을 반복할 수 있다. retry budget, backoff, failure class, alternate tool, human handoff를 구분해야 한다.

3. Context compaction이 사실을 삭제한다

long-running Agent는 context를 계속 유지할 수 없다. 그러나 summary-based compaction이 계약번호, 파일 경로, 승인 조건 같은 결정적 상태를 잃으면 뒤 단계가 완전히 잘못될 수 있다. durable state와 conversational summary를 분리하는 편이 좋다.

4. Tool 성공과 Task 성공은 다르다

API가 200을 반환했다고 업무가 끝난 것이 아니다. 실제 업무 규칙 검증, 결과 확인, idempotency, side-effect 확인까지 완료 조건에 포함해야 한다.

5. Observability가 너무 많아도 운영이 안 된다

모든 token과 모든 intermediate thought를 저장하는 것은 비용과 개인정보 측면에서 위험하다. raw trace, structured event, audit log, eval artifact의 보존 정책을 분리해야 한다.

처음부터 거대한 Agent Platform을 만들 필요는 없다

LEVEL 0
Prompt Agent
System prompt + tool 몇 개. PoC에는 충분하지만 회귀 통제가 약하다.
LEVEL 1
Contract
Tool schema, output schema, timeout, retry budget를 코드로 고정한다.
LEVEL 2
Behavioral Eval
실패 패턴을 regression test로 만들고 model/prompt/tool 변경마다 돌린다.
LEVEL 3
Governed Harness
Policy, authorization, trace, cost, approval, rollback을 운영 체계에 편입한다.
LEVEL 4
Human-gated Evolution
Agent가 개선안을 만들되 benchmark·diff·승인 후 배포한다.

대부분의 Enterprise 팀이라면 Level 4보다 Level 1~3을 제대로 만드는 쪽이 우선이다. self-evolving agent가 멋있어 보여도, tool permission과 behavioral regression suite가 없다면 운영 기반부터 부족한 상태다.

무엇을 측정해야 하나

Harness의 품질을 task success 하나로 평가하면 다시 원점으로 돌아간다. 최소한 다음 네 축을 나눠 보는 편이 좋다.

축예시 지표왜 필요한가
CapabilityTask success, exact business outcome실제로 일을 끝냈는가
ReliabilityRun-to-run variance, retry, failure class같은 조건에서 얼마나 일관적인가
SafetyDenied tool call, policy violation, leakage하면 안 되는 행동을 막았는가
EfficiencyTokens, tool calls, P95 latency, cost/task운영 가능한 경제성인가
실패를 발견했을 때 “Prompt를 고칠까?”보다 먼저 물어볼 것 이 규칙은 반드시 지켜져야 하나? 아니오예 Preference / Style Prompt · few-shot · model instruction Invariant / Policy Code · schema · permission · validator 그리고 Behavioral Eval로 고정 다음 model/prompt/tool 변경 때 다시 깨지지 않게 “Must”는 자연어가 아니라 실행 가능한 계약으로 내려보내는 것이 핵심이다.

내일 출근해서 가장 먼저 할 일

PRACTICAL RECOMMENDATION
새 Agent platform을 만들기 전에, 지금 운영 중인 Agent의 실패 20개를 모아라.
그리고 각각을 prompt 수정으로 덮지 말고, tool policy · state transition · validation · behavioral eval 중 어디에서 보장해야 하는지 분류하라.

Harness Engineering의 핵심은 새로운 framework 이름을 배우는 것이 아니다. 모델 밖으로 시스템의 책임을 다시 꺼내오는 일이다.

“모델이 알아서 잘하겠지”라고 남겨둔 부분을 코드, policy, schema, eval, trace로 하나씩 바꾸는 것. 그 과정에서 Agent는 덜 자유로워질 수 있지만, Production system은 더 예측 가능하고 교체 가능하며 감사 가능해진다.

한 줄 평

Agent 시대의 진짜 moat는 더 긴 system prompt가 아니라, 모델이 실패해도 시스템이 무너지지 않도록 만드는 Harness일 가능성이 높다.

개인적으로 2026년 Harness Engineering 흐름에서 가장 중요한 변화는 “Agent 성능”을 더 이상 모델 점수 하나로 보지 않는다는 점이라고 생각한다. 같은 모델도 Harness에 따라 전혀 다른 제품이 된다. 반대로 Harness가 충분히 잘 설계되면 model upgrade와 vendor change를 훨씬 낮은 위험으로 받아들일 수 있다.

금융권에서는 특히 그렇다. Model Risk, Data Access, Tool Permission, Audit, Change Management를 prompt 속 문장으로 유지할 수는 없다. 그 규칙들이 executable contract와 regression test로 내려오는 순간, Harness Engineering은 새로운 유행어가 아니라 Agent Production Engineering의 이름이 된다.


References