콘텐츠로 이동

하네스(harness) — 모델을 감싸 실제로 일하게 만드는 실행 프로그램

한 줄 요약: LLM은 "텍스트 in → 텍스트 out" 함수일 뿐, 스스로 파일을 읽거나 명령을 돌리거나 과거를 기억하지 못한다. 이 모델을 감싸 도구 실행·컨텍스트 조립·권한·상태 저장을 담당하며 실제 컴퓨터 위에서 행동하는 에이전트로 바꿔주는 실행 프로그램이 하네스다. CLI형 코딩 에이전트에서는 그 CLI 프로그램 자체가 하네스. 모델 = 두뇌, 하네스 = 손발·기억.

어원 — 말에 채우는 마구(馬具)

harness 는 본래 말에 채우는 마구다. 날것의 힘(말 = 모델)을 묶어 수레를 끌게 만드는 장치. LLM 분야에선 모델을 감싸 도구·루프·상태를 붙이는 이 계층을 agent harness 또는 scaffold(비계) 라 부른다.

모델 vs 하네스 — 두뇌 vs 몸

LLM(모델)은 본질적으로 텍스트 함수 하나다. 그 자체로는:

모델이 하는 것 그래서 하네스가 한다
파일 읽기 · 명령 실행 (손발 없음) 셸 · 파일 · 네트워크 접근
과거 기억 (매 호출 독립, 무상태) 대화 이력 · 메모리를 매번 다시 먹여줌
부작용 발생 도구 호출(텍스트)을 실제 행위로 변환
자기 출력 강제 권한 · 훅으로 결정론적 통제

핵심: 모델이 "이걸 하겠다"고 텍스트로 말하면, 실제로 실행하는 건 전부 하네스다.

하네스가 하는 일 — 에이전트 루프

flowchart LR
    U[사용자] -->|① 입력| H[하네스<br/>코딩 에이전트 CLI]
    H -->|② 컨텍스트 + 프롬프트| M[모델 LLM<br/>무상태 추론]
    M -->|③ 도구 호출 텍스트| H
    H <-->|④ 실제 실행| SYS[(시스템<br/>파일 · 셸 · 네트워크 · MCP)]
    H -->|⑤ 결과| U
  1. 에이전트 루프 — 입력 → 모델 호출 → 모델이 낸 도구 호출 실행 → 결과를 다시 모델에 먹임 → 반복. 이 루프 자체가 하네스다.
  2. 컨텍스트 조립 — 시스템 프롬프트 · 프로젝트 규칙 파일 · 메모리 · 대화 이력 · (길면) 요약을 모델 입력에 조립. 모델이 "기억"하는 것처럼 보이는 건 하네스가 매번 과거를 다시 넣기 때문.
  3. 도구 실행 — 셸 · 파일 · 검색 · MCP 서버 · 서브에이전트를 실제로 구동하고 출력을 회수.
  4. 권한 · 안전 게이트 — 위험한 동작 전 사용자 승인, 허용/거부 모드 관리.
  5. 훅(hooks)SessionStart · UserPromptSubmit · SessionEnd 등 이벤트에 셸 명령 실행 (→ 훅 노트).
  6. 상태 저장 — 세션 트랜스크립트 · 메모리 파일 기록.

왜 이 구분이 실전에서 중요한가

1) "결정론(하드) vs 모델 판단(소프트)" 경계가 여기서 갈린다

  • 하드 — 권한 게이트 · 훅 · 컨텍스트 주입은 하네스가 결정론적으로 실행 → 모델이 무시·변경 불가.
  • 소프트 — 프로젝트 규칙 파일(예: CLAUDE.md) · 메모리는 모델이 읽고 따를지 판단 → 확률적.
  • 어떤 동작을 "반드시" 강제하고 싶으면 소프트(모델 설득)가 아니라 하드(하네스 훅)로 박아야 한다. (→ 훅 노트)

2) 하네스 프로세스가 죽으면 하네스가 하던 모든 게 멈춘다

  • 자동화(예: 종료 시 자동 커밋)를 "하는 주체"는 모델이 아니라 하네스 프로세스다.
  • 크래시 · 정전 · 강제 종료로 프로세스가 죽으면 그 자동화도 안 돈다 → 재난 백업을 종료 훅에 의존하면 안 되는 이유.

같은 모델, 다른 하네스

모델이 같아도 하네스가 다르면 할 수 있는 일이 달라진다. 같은 LLM을 감싸는 하네스는 여럿:

  • CLI 에이전트 — 셸 · 파일 · git 풀 액세스
  • 데스크톱 / 웹 앱 — 도구 · 제약이 다름
  • IDE 확장
  • Agent SDK — 직접 하네스를 만들어 원하는 도구 · 루프 · 제약으로 모델을 묶음

→ "이 AI가 뭘 할 수 있냐"는 사실 "어떤 하네스가 그 모델을 감싸고 있냐" 의 문제다.

발표 시 한 줄

"LLM은 무상태 텍스트 함수라 스스로는 아무것도 못 합니다. 도구 실행·컨텍스트 조립·권한·상태를 붙여 실제로 행동하는 에이전트로 만드는 실행 계층이 하네스고, 모델이 두뇌라면 하네스가 손발과 기억입니다. 그래서 '강제'가 필요한 동작은 모델 설득(소프트)이 아니라 하네스(하드)에 박아야 합니다."

FAQ

Q: 모델이 직접 파일을 읽는 거 아니었나? → 아니다. 모델은 "이 파일 읽어줘"라는 도구 호출을 텍스트로 낼 뿐, 실제 읽기는 하네스가 하고 그 내용을 다시 모델 입력에 넣어준다.

Q: 그럼 모델이 기억하는 건 어떻게? → 모델은 무상태다. 매 호출마다 하네스가 과거 대화·메모리를 통째로 다시 먹인다. "기억"은 모델 능력이 아니라 하네스의 컨텍스트 관리.

Q: 프롬프트로 "반드시 X 해라" 박으면 강제되나? → 그건 소프트(모델 판단)다. 대체로 따르지만 확률적이라 샐 수 있다. 진짜 강제는 하네스의 훅/권한 같은 하드 메커니즘이 필요.

관련