
Agent Framework의 '하네스(Harness)'가 experimental을 졸업하여 stable이 된 내용 분석
요약
Microsoft Agent Framework의 '하네스(Harness)' 기능이 실험적 단계를 지나 안정화(stable)되었습니다. 하네스는 모델을 실제 동작 가능한 에이전트로 변환하는 도구 호출, 대화 이력 관리, 컨텍스트 압축 등의 핵심 기능을 포함합니다.
핵심 포인트
- Microsoft Agent Framework의 Harness 기능이 Python 및 .NET에서 stable로 전환됨
- 하네스는 모델을 에이전트로 만드는 스캐폴딩(Scaffolding) 역할을 수행
- 도구 호출 루프, 대화 이력 영속화, 컨텍스트 압축 등 핵심 컴포넌트 포함
- Background agents 및 Shell tooling 등 일부 기능은 여전히 실험적 단계임
먼저 결론
- Microsoft Agent Framework의 '하네스(Harness)' (Python:
create_harness_agent/ .NET:HarnessAgent)가 experimental(실험적)에서 stable(안정적)로 졸업했다. .NET/Python 양쪽 모두 2026-07-21 출시 패키지에서 전환되었으며, 다음 날인 7/22에 공식 devblogs를 통해 발표되었다. - 하네스란 '모델을 에이전트로 만드는 토대'를 의미한다. tool-calling loop(도구 호출 루프)·대화 이력의 영속화·컨텍스트 압축·승인 플로우(Approval flow)·텔레메트리(Telemetry)를 하나로 묶은 동봉 컴포넌트로, Claude Code나 Codex와 같은 코딩 에이전트를 다뤄본 적이 있다면 익숙한 구성일 것이다. - 단, 이번에 졸업한 것은 코어 기능뿐이다. Background agents·File access·Looping·Shell tooling의 4가지는 devblogs 자체에서 "아직 정식 출시가 아니다"라고 명시하고 있으며, 옵트인(Opt-in)할 경우 경고가 표시된다. 동봉되었다고 해서 전부 안정적인 것은 아니다 (Skills provider만은 별개이며, 이쪽은 7/15자로 이미 stable 상태이다).
하네스(Harness)란 무엇인가
'하네스(Harness)'라는 용어 자체는 Agent Framework에 국한된 것이 아니다. 모델 단독으로는 텍스트를 생성할 뿐이지만, 도구를 호출하고, 여러 단계의 작업을 수행하며, 수행한 내용을 기억하고, 끝날 때까지 지속하는—이러한 동작을 하게 하려면 모델 주변에 런타임(Runtime)을 감싸야 한다. 그 감싸는 부분을 지칭하는 용어로 코딩 에이전트 업계에서는 이전부터 사용되어 왔다.
Microsoft Learn의 문서는 이 정의를 상당히 솔직하게 기술하고 있다.
An agent harness is the scaffolding that turns a language model into an agent that can actually do things. [...] Coding assistants and autonomous agents are all built on some form of harness — it's the engine wrapped around the model.
Agent Framework는 이러한 스캐폴딩(Scaffolding)을 직접 제작할 필요가 없도록, 미리 조립된 '하네스'를 동봉하여 제공한다. 내부 구성은 일반적인 채팅 클라이언트를 래핑(Wrap)한 에이전트 (Python에서는 Agent, C#에서는 ChatClientAgent)에 몇 가지 기능을 추가한 것일 뿐이며, 특별한 마법이 있는 것은 아니다—각 기능은 단독으로도 사용할 수 있는 표준 기능의 조합일 뿐이라고 문서는 강조하고 있다.
무엇이 졸업했는가
GitHub의 릴리스 노트를 날짜순으로 읽어보면, 7/21 릴리스에서 한꺼번에 졸업이 진행되었음을 알 수 있다.
Python (agent-framework 1.12.0, 2026-07-21)
| 변경 사항 | PR |
|---|---|
create_harness_agent를 experimental에서 stable로 졸업 (파괴적 변경) | #7120 |
| mode / todo 프로바이더를 experimental에서 stable로 졸업 | #7053 |
ToolApprovalMiddleware를 experimental에서 stable로 졸업 | #7106 |
FileMemoryProvider를 experimental에서 stable로 졸업 | #7113 |
FileAccessProvider를 하네스 에이전트에서 옵트인화 | #7094 |
.NET (Microsoft.Agents.AI.Harness 1.14.0, 2026-07-21)
NuGet의 버전 이력을 보면, 1.13.0-preview.260703.1까지는 프리뷰(Preview) 취급이었으나, 1.14.0에서 처음으로 -preview 접미사가 제거되어 안정판(Stable)이 되었다. 다음 날 공개된 1.15.0은 그 후속 패치이다. 대응하는 릴리스 노트(dotnet-1.14.0, 2026-07-21)에도 동일한 졸업 러시가 나열되어 있다.
| 변경 사항 | PR |
|---|---|
HarnessAgent 졸업 (파괴적 변경) | #7119 |
| 메시지 인젝션 (Message Injection)이 experimental에서 졸업 (파괴적 변경) | #7044 |
| todo / agent mode 프로바이더가 experimental에서 졸업 (파괴적 변경) | #7052 |
ToolApprovalAgent 졸업, ToolAutoApprovalRuleContext 추가 (파괴적 변경) | #7107 |
FileMemoryProvider 졸업 (파괴적 변경) | #7114 |
| FileAccess를 옵트인 (Opt-in) 방식으로 변경 (파괴적 변경) | #7093 |
Python 측은 "Changed" 섹션에 한 줄씩 담담하게 적혀 있는 반면, .NET 측은 커밋 로그에 [BREAKING] 태그가 나열되어 있어, 졸업할 때마다 파괴적 변경 (Breaking Change)이 수반되고 있음을 알 수 있다. 마이너 버전 업데이트 형식을 빌려 파괴적 변경을 도입하는 것은 Agent Framework 1.x 계열에서는 흔한 일이므로, create_harness_agent나 HarnessAgent를 사용 중이라면 7/21 부근의 릴리스 노트를 살펴두는 것이 좋다.
여담이지만, 같은 7/21 릴리스에서 .NET의 Microsoft.Agents.AI.AGUI 패키지가 AGUI.Client / AGUI.Server / AGUI.Abstractions 등으로 분할되었다. 하네스(Harness)와는 별개의 파괴적 변경이므로, AGUI 연동을 사용 중이라면 이 부분도 확인이 필요하다.
사용법 (문서에 기재된 샘플)
Python은 함수, .NET은 클래스라는 차이는 있지만, 최소 구성은 둘 다 몇 줄이면 충분하다.
from agent_framework import create_harness_agent
from agent_framework.openai import OpenAIChatClient
agent = create_harness_agent(
...
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
// chatClient는 임의의 IChatClient 구현체 (Foundry, Azure OpenAI, OpenAI, Anthropic...)
...
컨텍스트 압축 (Context Compression)을 활성화하려면 최대 컨텍스트 길이와 최대 출력 토큰 수만 전달하면 된다.
agent = create_harness_agent(
client=client,
max_context_window_tokens=128_000,
...
토큰 예산 (Token Budget)을 전달하지 않으면 압축은 자동으로 비활성화된다고 문서에 명시되어 있다. 기본 설정으로 멋대로 작동하기 시작하여 동작이 변하는 사고는 일어나지 않도록 설계된 것으로 보인다.
무엇이 포함되어 있는가
문서의 기능표를 기반으로, 기본 활성화 (Default On)와 옵트인 (Opt-in)을 정리하면 다음과 같다.
| 구분 | 기능 | 내용 |
|---|---|---|
| 기본 활성화 | Function invocation | 반복 횟수 상한이 있는 자동 tool-calling 루프 |
| ... |
표에서는 동일하게 "옵트인"으로 묶었지만, 성숙도가 나란히 되어 있지는 않다. Skills provider만 이미 stable 상태이며, 나머지 4개 (Background agents, Shell environment, Looping, File access provider)는 devblogs에서 "아직 정식 출시가 아니다"라고 명시한 기능들이다. 자세한 내용은 후술한다.
전체 흐름을 도식화하면 다음과 같다.
FileAccessProvider가 "기본 활성화"에서 "옵트인"으로 변경된 점이 은근히 신경 쓰여서, 그 이유를 devblogs에서 확인했다.
아직 정식 출시되지 않은 기능
devblogs 기사에는 "Coming soon"이라는 절이 있으며, 그곳에 FileAccess를 포함한 4가지 기능의 위치가 그대로 적혀 있었다.
우리는 핵심 하네스 (core harness)를 출시하고 있지만, 아직 출시하지 않은 몇 가지 옵트인 (opt-in) 기능들이 있습니다. 이 기능들을 이미 사용하는 것은 가능하지만, 우리는 이를 더욱 개선할 수 있다고 생각하며, 출시하기 전에 고객의 피드백을 더 많이 받고 싶습니다. 그때까지는 이러한 기능들을 옵트인할 때 경고 메시지를 받게 됩니다: Background agents, File access, Looping, Shell tooling (알파 단계 도구 패키지에서 제공).
즉 Background agents, File access, Looping, Shell tooling의 4가지는 "사용할 수는 있지만, 아직 정식 출시가 아니다"라는 위치에 있으며, 옵트인하면 경고가 뜨는 사양으로 되어 있다. FileAccessProvider가 이번에 옵트인화된 것도 견고성을 위한 설계 판단이라기보다는, 이 "미출시"라는 위치 그 자체로 보는 것이 더 정확해 보인다.
반면 Skills provider는 이 "Coming soon" 리스트에 포함되어 있지 않다. 이것은 다른 게시물(Agent Skills for Python Is Now Released, 2026-07-15)에서 "core skills API에는 experimental 게이트가 없으며, 실무에 사용해도 좋다"라고 이미 명시된 기능이다. 하네스의 기능표에서는 다른 옵트인 기능들과 나란히 보이는 것처럼 보이지만, 실상은 Skills만 한 단계 앞서 나가 있다. 같은 "옵트인"이라는 표기라도 그 내용의 성숙도는 일치하지 않는다.
분석 관점
"하네스 (Harness)"라는 단어가 공식 API 명칭으로 등장한다는 것 자체가 흥미롭다. 코딩 에이전트 (coding agent)를 다루는 사람들에게는 설명이 필요 없는 개념이지만, 이를 범용 에이전트 프레임워크 (agent framework)가 정면으로 채택하고, 심지어 todo 리스트나 plan/execute 모드까지 표준 기능으로 갖추게 된 것은 업무용 에이전트 구축의 전제가 바뀌고 있다는 방증이라고 생각한다. 이전에는 "LLM 호출 + 자체 제작 도구 루프 (tool loop)"였던 것이, "하네스를 하나 얹고, 필요 없는 기능만 끄는" 발상으로 기울고 있다.
한편으로, 파괴적 변경 (breaking changes)을 동반하는 졸업 러시가 마이너 버전 범위 내에서 일어나고 있는 점은 여전하므로, create_harness_agent나 HarnessAgent를 이미 사용 중이라면 이 일련의 릴리스 노트 (release notes)를 반드시 살펴볼 필요가 있다. 나 자신은 아직 하네스를 통해 에이전트를 구동해 본 적이 없으므로, 다음에는 로컬에서 create_harness_agent를 실제로 호출하여 todo provider와 plan/execute 모드의 동작을 확인해 보고 싶다.
참고 링크 (1차 소스)
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기