기술

코딩 에이전트는 837줄이면 만든다, uncut 코드 뜯어보기

11월 1일 공개된 uncut은 Go 837줄짜리 코딩 에이전트입니다. 도구 4개와 반복문 하나로 이루어진 구조를 직접 열어 보고 정리했습니다.

코딩 에이전트라고 하면 복잡한 시스템을 떠올리기 쉽습니다. uncut(★566, 11월 1일 공개, MIT)은 그 뼈대를 Go 837줄로 보여 줍니다. 저장소의 Go 코드를 내려받아 직접 줄을 세고 읽어 봤습니다(실행은 하지 않았습니다).

파일 8개, 837줄

파일줄 수하는 일
cmd/uncut/main.go193명령줄 옵션, 실행 시작
internal/harness/tools.go208도구 4개 정의와 실행
internal/harness/run.go140에이전트 반복문
session.go 외 4개296세션 저장, 모델 호출, 셸

wc -l로 센 값이고 테스트 파일은 뺐습니다. README에 적힌 “837 lines”와 같습니다.

도구는 네 개

tools.go에 정의된 도구는 이것뿐입니다.

  • read_file: 파일 읽기
  • write_file: 파일 쓰기
  • replace: 파일 안의 글자 바꾸기
  • run_command: 셸 명령 실행

중심은 반복문 하나

run.go를 줄여 옮기면 이렇습니다.

for step := 1; step <= maxSteps; step++ {
    msg := ask(model, history)          // 모델에게 지금까지의 대화를 보낸다
    if len(msg.ToolCalls) == 0 {
        return msg                      // 도구를 안 부르면 그게 최종 답
    }
    for _, call := range msg.ToolCalls {
        history += run(call)            // 도구를 실행하고 결과를 대화에 붙인다
    }
}

모델에게 묻고, 모델이 도구를 쓰라고 하면 실행해서 결과를 돌려주고, 더 부를 도구가 없으면 끝납니다. 최대 단계 수를 넘기면 오류로 멈춥니다.

큰 에이전트와 무엇이 다른가

uncut은 일부러 기능을 뺐습니다. README 기준으로 화면(TUI), 원격 기록, 플러그인, 백그라운드 에이전트, 자동 재시도, 대화 요약이 없습니다. 대화 전체를 매번 그대로 보내고, 파일 내용이나 명령 출력을 잘라 내지 않습니다. 모델 응답이 출력 한도에서 잘리면 일부만 받아들이지 않고 오류로 끝냅니다.

Claude Code 같은 도구는 이 고리 위에 권한 확인, 맥락 요약, 서브에이전트, 훅 같은 기능을 얹은 구조입니다. 에이전트가 왜 “읽고, 고치고, 실행하고, 다시 읽는” 순서로 움직이는지 이 반복문을 보면 이해가 쉽습니다.

오늘 할 일

internal/harness/run.go 한 파일만 열어 보세요. 140줄이라 10분이면 다 읽습니다. 직접 돌려 보려면 OpenAI 호환 API 주소와 키가 필요합니다.

김현빈 Developer & Writer

기술, 포스팅 관련 질문, 프로젝트 협업 등 연락주시면 언제든지 회신 드립니다.

esc

↑↓ 고르기↵ 열기? 단축키

해변에서 주운 것

읽으러 가기 →
guest@beachcombers — zsh

단축키

⌘K 또는 /
글·작업·개발일지 찾기
R
해변 산책 — 아무 글 하나 줍기
`
터미널 열기
←→
쪽 넘기기 (휠·스와이프도 됩니다)
?
이 안내
esc
닫기