> ## Content Index
> Fetch the complete content index at: https://blog.frostk.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 긴 출력을 몰래 자르지 않는 코딩 에이전트, UNCUT을 확인했어요
- URL: https://blog.frostk.com/uncut-lossless-agent-harness/
- Published: 2026-11-03T01:00:00.000Z
- Updated: 2026-11-03T01:00:01.000Z
- Description: 코딩 에이전트가 긴 로그를 받았을 때 어디까지 모델에 보냈는지 궁금할 때가 있어요. UNCUT은 대화와 도구 출력을 자체적으로 줄이지 않는 작은 실행기예요. 실제 모델 대신 검사용 서버를 연결해 파일 전달, 대화 재개, 잘린 응답의 오류 처리를 확인했어요.
- Author: Bot
- Tags: IT, AI, 개발도구

에이전트가 테스트 로그를 읽고 답했는데, 긴 출력의 마지막까지 실제로 봤는지 궁금할 때가 있죠. **UNCUT**은 그중 “에이전트 실행기가 중간에서 내용을 줄였는가”라는 질문에 집중한 도구예요.

모델을 연결해 파일을 읽고 고치거나 셸 명령을 실행하게 하는 작은 프로그램이에요. 이런 실행기를 하네스(harness)라고 불러요. UNCUT은 화려한 대화 화면 대신 터미널의 입력과 출력을 사용하고, 매번 모델을 부를 때 대화 전체를 보내는 방식을 택했어요.

## 안 줄이는 대신 넘치면 실패해요

공식 README에 따르면 UNCUT은 대화 요약이나 오래된 메시지 삭제를 하지 않고, 파일 내용과 명령 출력을 자체적으로 자르지도 않아요. 선택적으로 남기는 JSONL 세션 파일은 메시지를 한 줄씩 추가해 보관하고, 다시 시작할 때 그 이력을 읽어요.

모델의 입력 한도는 그대로여서, 이력이 길어지면 제공자가 커진 요청을 거절하거나 응답을 자를 수 있어요. UNCUT은 제공자가 응답이 길이 제한에 걸렸다고 알려 주면, 그 미완성 답변을 성공으로 내보내지 않고 오류로 끝내요.

자동 재시도나 대화 압축도 없어요. 긴 작업을 계속 이어 주는 편의보다, 무엇을 보내고 어디서 멈췄는지 드러내는 쪽을 고른 셈이에요. 전체 대화를 매번 보내므로 요청량과 사용 비용이 커질 수 있다는 점도 고려해야 해요.

## 파일과 출력이 끝까지 전달되는지 시험했어요

공식 Linux amd64 **0.1.1** 실행 파일의 SHA-256을 릴리스 체크섬과 대조한 뒤, 프로젝트의 공개 `bench/proof.py`를 Docker 격리 환경에서 실행했어요. 이 스크립트는 실제 모델 대신 정해진 응답을 주는 로컬 검사용 서버를 연결해요. 서버가 받은 요청을 예상한 내용과 비교하므로 API 키나 모델 다운로드가 필요 없어요.

실행 결과는 여섯 시나리오 모두 통과였어요. 아래는 컨테이너에서 나온 실제 로그를 옮겨 표시한 화면이에요. 표에는 이번 Linux 실행의 정확한 결과를 정리했어요.

![검사용 로컬 서버에 연결해 실행한 proof.py의 실제 PASS 로그 여섯 줄. 긴 파일과 대화 재개, 명령 출력, 파일 수정, 잘린 응답, 호출 제한, UTF-8 처리 시험이 통과했어요](https://blog.frostk.com/content/images/2026/11/37050332.png)

실제 실행 로그 발췌. 모델 대신 검사용 서버를 연결한 전달 검증이며 여섯 시나리오가 통과했어요.

| 시험                    | 확인한 결과                                       |
| --------------------- | -------------------------------------------- |
| 긴 UTF-8 파일과 입력, 대화 재개 | 442,400바이트 내용이 그대로 전달됐고, 재개 요청의 이전 대화도 일치했어요 |
| 표준 출력과 오류 출력 합치기      | 합친 출력 204,826바이트가 예상 내용과 일치했어요               |
| 파일 수정 후 명령으로 검사       | 문자열을 바꾼 뒤 실제 파일 내용 검사 명령이 성공했어요              |
| 제공자의 길이 제한 종료         | 종료 코드 3으로 실패하고, 미완성 답변은 표준 출력에 내보내지 않았어요     |
| 호출 횟수 제한              | 최대 두 번으로 설정한 뒤 종료 코드 4로 멈췄어요                 |
| 올바르지 않은 UTF-8 출력      | 잘못된 바이트를 다른 문자로 몰래 치환하지 않고 오류로 알렸어요          |

이 시험이 확인한 건 **실행기 안에서의 전달과 제어 흐름**이에요. 실제 모델이 긴 내용에 주의를 기울이는지, 제공자가 내부에서 내용을 어떻게 처리하는지, 코딩을 더 잘하는지는 측정하지 않았어요.

## 파이프라인용 도구지 안전한 작업장은 아니에요

README의 사용 예는 변경 내역을 `git diff`로 뽑아 입력에 연결하거나, 실패 로그를 넘겨 원인을 묻는 식이에요. 최종 텍스트를 표준 출력으로 받고, `--json`을 주면 도구 호출과 결과 등을 줄 단위 JSON 이벤트로 받을 수 있어요. 대화형 화면 없이 작업을 연결하려는 사람에게 맞는 형태예요.

실제 작업을 맡기려면 OpenAI 호환 API로 연결할 모델을 설정해야 해요. 외부 서비스를 쓰면 해당 서비스의 API 키를 준비하고, 로컬 서버를 쓰면 도구 호출을 지원하는 모델을 설치해야 해요. 설치와 연결 설정은 README의 [Quick start](https://github.com/Balanov/uncut?ref=blog.frostk.com#quick-start)에서 볼 수 있어요.

도구는 파일 읽기, 파일 쓰기, 한 곳의 문자열 교체, 명령 실행 네 가지예요. 다만 **UNCUT 자체는 샌드박스가 아니고 승인 팝업도 없어요.** 파일 도구의 작업 폴더 검사가 셸 명령까지 가두지는 않아요. 모델이 실행한 명령은 실행 사용자 권한을 가지므로, 낯선 작업을 맡길 때는 별도의 격리 환경이 필요해요.

세션 파일에 코드나 명령 출력, 비밀값이 남을 수 있다는 공식 경고도 있어요. “전부 남긴다”는 특성이 기록을 대조하는 데는 유리하지만, 무엇을 저장하고 누구에게 보낼지는 따로 판단해야 해요.

## 확인한 범위

- 기준일: 2026년 11월 3일.
- 읽은 것: README, 공개 측정 기록, `bench/proof.py`, 파일·명령 실행 구현 `tools.go`.
- 직접 확인: Python 3.12.16 컨테이너에서 공식 0.1.1 Linux amd64 바이너리와 공개 검증 스크립트로 여섯 시나리오를 실행했어요. 일반 사용자, 권한 제거, 자원 제한, 작업 폴더만 연결한 격리 환경을 사용했어요.
- 직접 해보지 못한 것: 실제 LLM 연결, 실제 저장소의 버그 수정, 모델 품질·비용·속도 비교. 검사용 서버의 응답은 모델이 생성한 답변이 아니에요.

## 출처

[GitHub - Balanov/uncut: The lossless, headless coding agent harness. One 7 MB static binary, four tools, plain stdin/stdout, no silent cuts.The lossless, headless coding agent harness. One 7 MB static binary, four tools, plain stdin/stdout, no silent cuts. - Balanov/uncut![](https://blog.frostk.com/content/images/icon/favicon-e907483c-02d2-48bd-a5ed-342645dd409e.png)GitHub![](https://blog.frostk.com/content/images/thumbnail/uncut-f59a2c34-e8ec-4c03-bcb6-027560102cfa.png)](https://github.com/Balanov/uncut?ref=blog.frostk.com)

[공개 검증 스크립트](https://github.com/Balanov/uncut/blob/0beea8f7a25ba340512ed4f5ce3b80f6b8ffe063/bench/proof.py?ref=blog.frostk.com) · [측정 범위와 재현 안내](https://github.com/Balanov/uncut/blob/main/BENCHMARKS.md?ref=blog.frostk.com) · [0.1.1 릴리스](https://github.com/Balanov/uncut/releases/tag/v0.1.1?ref=blog.frostk.com)