에이전트와 하네스, 뭐가 다른가
안녕하세요! 재니미입니다.
에이전트와 하네스, 뭐가 다른지에 대해 이야기 해 보려고 합니다. AI모델이 뭔지는 다들 감이 있습니다. Claude Opus, Sonnet 같은 대규모 언어 모델(LLM) 자체를 가리키는 말이니까요. 입력을 받아 출력을 내놓는 하나의 함수에 가깝고, 그 자체로는 상태를 유지하지도 파일을 읽지도 않습니다.
헷갈리는 건 그다음입니다. “에이전트”와 “하네스”는 둘 다 모델 주변을 감싸는 뭔가를 가리키는 말인데, 실제로 대화하다 보면 이 둘을 같은 뜻으로 섞어 쓰는 경우가 많습니다. 이번 글에서는 에이전트와 하네스, 비슷한 듯 다른 이 두 가지에 대해 다뤄 보겠습니다.
하네스 — 실체가 있는 소프트웨어
위키피디아는 에이전트 하네스(agent harness, 또는 에이전트 스캐폴딩)를 “LLM이 AI 에이전트로 동작할 수 있게 해주는 소프트웨어 기반구조”라고 정의합니다. 모델을 호출해서 응답에서 도구 호출을 뽑아 실행하고 그 결과를 다시 모델에 넣어주는 반복 루프를 돌리고, 대화 기록이나 파일 상태를 메모리·컨텍스트로 관리하고, 위험한 동작은 가드레일로 막는 실제 프로그램이 하네스입니다.
Anthropic도 이 말을 이런 식으로 씁니다. Claude Agent SDK를 소개하는 글에서 “코딩을 비롯해 모델이 도구를 써서 맥락을 모으고 계획하고 실행해야 하는 작업에 능한, 범용 에이전트 하네스”라고 부릅니다. Claude Code나 Antigravity 같은 CLI 도구도 결국 이 하네스에 해당합니다. 즉 하네스는 명사입니다. 설치할 수 있고, 버전이 있고, git clone 해서 코드를 들여다볼 수 있는 실체입니다.
에이전트 — 실체가 아니라 동작 방식
반면 “에이전트”는 실체를 가리키는 말이 아닙니다. Anthropic은 “Building Effective Agents”에서 워크플로우와 에이전트를 이렇게 구분합니다.
“Workflows” are systems where LLMs and tools are orchestrated through predefined code paths. “Agents”, on the other hand, are systems where LLMs dynamically direct their own processes and tool usage.
정해진 순서를 그대로 따라가면 워크플로우, LLM이 스스로 다음에 뭘 할지 판단해서 도구를 골라 쓰면 에이전트라는 뜻입니다. 여기서 “에이전트”는 소프트웨어 이름이 아니라 시스템이 작동하는 방식을 가리킵니다. 같은 하네스라도 모델이 매번 똑같은 절차만 밟게 짜두면 워크플로우이고, 상황에 따라 다음 행동을 스스로 고르게 열어두면 에이전트입니다.
구분하는 기준
- 하네스: “이게 뭐야?“에 대한 답. 루프·도구·메모리·가드레일을 갖춘 실제 코드. Claude Code, Antigravity CLI, Claude Agent SDK가 여기 해당합니다.
- 에이전트: “이게 어떻게 움직여?“에 대한 답. 모델이 스스로 판단해서 도구 사용 순서를 정하는 동작 패턴. 같은 하네스 위에서도 워크플로우로 쓸 수도, 에이전트로 쓸 수도 있습니다.
회사마다 조금씩 다르게 씁니다
지금까지는 Anthropic 기준으로 설명했습니다. 그런데 OpenAI와 Google 문서를 보면 “에이전트”를 쓰는 방식이 조금 다릅니다.
OpenAI의 Agents SDK 문서는 에이전트를 이렇게 정의합니다.
An agent is a large language model (LLM) configured with instructions, tools, and optional runtime behavior such as handoffs, guardrails, and structured outputs.
여기서 에이전트는 동작 방식이 아니라 “지시문과 도구를 설정해서 만든 LLM 하나”, 즉 코드로 인스턴스화하는 대상을 가리킵니다. Anthropic이 에이전트를 동작 방식으로 쓰는 것과는 결이 다릅니다.
다만 OpenAI도 “하네스”라는 말은 따로 씁니다. Codex를 이용해 사람 손을 거의 안 대고 100만 줄 규모 프로덕트를 만든 사례를 소개한 OpenAI의 글에서, 하네스를 “코드 생성이 안정적으로 이뤄지도록 감싸는 환경 전체”라고 설명하고 저장소 구조·CI 설정·승인 정책 같은 것들을 그 예로 듭니다. 이 글은 harness라는 단어 자체가 원래 말을 다루는 마구(고삐·안장처럼, 힘은 세지만 다루기 어려운 동물을 원하는 방향으로 이끄는 장비)에서 온 이름이라고 짚기도 합니다.
Google의 “Agents” 백서는 결이 또 다릅니다. 에이전트를 모델(뇌)·오케스트레이션 레이어(신경계)·도구(손과 눈), 세 요소로 이뤄진 애플리케이션으로 봅니다. “하네스”라는 단어는 안 쓰지만, 오케스트레이션 레이어가 하는 일(정보를 받아들이고 추론해서 다음 행동을 정하는 순환 과정)은 우리가 하네스라고 부르는 것과 사실상 같은 자리를 차지합니다.
세 회사의 관점을 표로 정리하면 이렇습니다.
| “에이전트” | 하네스에 해당하는 개념 | |
|---|---|---|
| Anthropic | 동작 방식 (워크플로우와 대비, 모델이 스스로 판단해서 도구를 쓰는 것) | 하네스 (Claude Agent SDK, Claude Code 등) |
| OpenAI | 사물 (지시문·도구로 설정한 LLM 객체) | 하네스 (harness engineering — 코드 생성을 감싸는 환경 전체) |
| 사물 (모델·오케스트레이션 레이어·도구로 이뤄진 애플리케이션) | 오케스트레이션 레이어 (“하네스”라는 단어는 쓰지 않음) |
이 표에서 보듯 “에이전트”가 사물을 가리키는지 동작 방식을 가리키는지는 어느 회사 문서를 보고 있느냐에 따라 갈립니다.
그래서 뭐가 헷갈렸나
“이 에이전트 써봤어?“라는 말은 사실 “이 하네스 써봤어?“를 뜻할 때가 많습니다. 실체를 가리켜야 할 때 동작 방식을 가리키는 말을 쓰다 보니 섞이는 겁니다. 반대로 “이거 에이전트답게 동작하네”라고 할 때는 어떤 소프트웨어를 말하는 게 아니라, 그 소프트웨어(하네스) 위에서 모델이 스스로 판단하고 있다는 동작 자체를 말하는 겁니다. 게다가 회사마다 “에이전트”를 사물과 동작 방식 중 어느 쪽으로 쓰는지도 다르다 보니 헷갈림이 한 겹 더 붙습니다. 이 글은 Anthropic의 구분을 기준으로 삼았지만, 다른 회사 문서를 읽을 때는 “에이전트”가 그냥 “설정해서 만든 프로그램 하나”를 가리키는 말일 수도 있다는 걸 감안하면 덜 헷갈립니다.
여기까지는 개념 정리였습니다. 실제로 하네스가 어떤 순서로 모델을 호출하고 도구를 실행하는지, 같은 하네스가 워크플로우와 에이전트 중 뭘로 쓰이는지는 구체적인 예시를 붙여서 다음 글에서 다루겠습니다.
감사합니다.