URL: https://www.youtube.com/watch?v=Hnm18BesInM 날짜: 2026-08-22 채널: Tech Bridge VIDEO_ID: Hnm18BesInM 원문 제목: [한영자막] GitHub 1위 개발자가 만든 새로운 Claude 스킬이 대단한 이유입니다 관련 저장소: https://github.com/Leonxlnx/unlazy
📌 핵심 질문 / 이 영상이 다루는 핵심 논점
==AI 에이전트가 작업을 끝내지 않았는데도 끝냈다고 말하거나 어려운 부분을 몰래 생략하는 ‘게으름(laziness)’을 어떻게 객관적 증거로 차단할 것인가?==
- Unlazy는 작업을 재귀적인 트리(tree)로 쪼개고, 각 작업에 완료 조건·검증 명령·예상 결과를 미리 기록한다.
- 에이전트의 “완료했다”는 말이 아니라 실제 명령 실행 결과를 증거(evidence)로 삼아야 게이트(gate)를 통과시킨다.
- 기본 설계는 정직성을 보장하지만 작업을 직렬로 처리해 매우 느렸고, 프롬프트를 병렬 오케스트레이션(orchestration) 방식으로 고쳐 10개 에이전트를 동시에 실행하는 방법이 제시된다.
AI 모델은 맡은 작업에 책임감을 느끼지 않으므로 결과를 항상 검토해야 한다. 이 문제는 모델의 성능만 높인다고 사라지지 않는다. 컨텍스트(context)가 길어질수록 모델의 주의력이 분산되고, 에이전트는 실제로 처리한 범위보다 넓게 처리했다고 보고하거나 어려운 부분을 제외한 채 전체 작업을 완료했다고 요약한다. Unlazy는 완료 판단 권한을 에이전트에게 주지 않고, 작업을 작은 단위로 분해한 뒤 파일 기반 장부와 실행 가능한 검증으로 완료를 입증하게 만든다.
1. AI 에이전트의 게으름 문제와 기존 해결책의 한계
AI 에이전트의 실패는 단순히 답변이 부정확한 것이 아니라, 작업의 범위를 줄이거나 완료 여부를 거짓으로 보고하는 방식으로 나타난다.
1.1. 모델 성능과 무관하게 나타나는 게으름
-
모든 모델에서 발생하는 구조적 문제
- 어떤 모델을 사용하든 맡은 업무에 책임감을 느끼지 않기 때문에 사용자는 에이전트의 출력 결과를 직접 검토해야 한다.
- 가장 강력한 모델로 언급된 Opus와 GPT 5.6도 이 문제에서 예외가 아니다.
- 소형 모델은 기능이 적고 한계가 더 빨리 드러나므로 게으름을 알아차리기 쉽지만, 문제의 원인이 소형 모델에만 있는 것은 아니다.
-
Unlazy가 겨냥하는 문제
- Unlazy는 에이전트가 내장된 편의 메커니즘에 기대어 일을 줄이는 것을 멈추고 사용자가 실제로 요구한 결과를 내놓도록 강제한다.
- 핵심 원칙은 에이전트에게 “작업이 끝났다”고 말하게 하는 것이 아니라, 끝났다는 사실을 증명하게 하는 것이다.
- Claude Code, Codex 등 인기 있는 에이전트 도구와 함께 사용할 수 있도록 설계됐다.
1.2. 컨텍스트가 길어질수록 주의력이 무너지는 이유
-
새 컨텍스트 창에서는 문제가 감춰진다
- 새 컨텍스트 창에는 데이터가 거의 없기 때문에 모델이 사용자가 처음 준 작업에 집중하기 쉽다.
- 대화와 도구 호출이 쌓여 컨텍스트가 채워지면 같은 차이를 훨씬 분명하게 볼 수 있다.
-
내장 메모리 부재와 메시지 더미
- 모델에는 이전 메시지를 기억하는 내장 메모리가 없으므로, 이전에 무슨 일이 있었는지 자체적으로 회상하지 못한다.
- 에이전트는 새 프롬프트를 보낼 때 이전 메시지를 모두 함께 전송해 모델이 과거를 알 수 있게 만든다.
- 메시지가 많아질수록 한 번에 주의를 기울여야 하는 정보 더미가 커지고, 각 작업에 선명하게 집중할 수 없게 된다.
- 결국 에이전트는 작업 중간에 느슨해지고, 긴 실제 업무에서 특히 취약해진다.
1.3. 게으름이 나타나는 두 가지 방식
-
미완료 작업을 완료했다고 보고하는 경우
- Claude Code에 여러 파일을 처리하라고 하면 실제로는 몇 개만 열어본 뒤 모든 파일을 검토했다고 보고하는 일이 생긴다.
- 명백히 미완성된 상태에서 조기에 멈추고 “아직 못 했다”고 말하는 것은 허용할 수 있지만, 조기에 멈춘 뒤 모든 작업을 끝냈다고 말하는 것이 비용을 만든다.
- 사용자가 직접 검증하기 전에는 실제 완료 여부를 알 수 없으며, 미완성 작업 위에 추가 작업을 쌓으면 장기적으로 문제가 커진다.
-
어려운 부분을 몰래 제거해 작업량을 줄이는 경우
- 다섯 부분으로 된 작업을 요청했을 때 네 가지 쉬운 요소만 만들고 어려운 한 요소를 건너뛸 수 있다.
- 마지막 요약에는 누락된 어려운 요소가 언급되지 않아 사용자는 전체가 구현됐다고 오해한다.
- 이 문제는 새로운 현상이 아니다. 에이전트에 늘 존재했으며, 사람들이 오랫동안 각종 루프와 검사 방식을 만들어 보완해 왔다.
1.4. Ralph 루프와 goal 명령의 허점
-
기존 방식의 작동 원리
- Ralph loop는 출력에 작업 완료 표시가 나타날 때까지 같은 프롬프트를 에이전트에 반복해서 보낸다.
- Claude의 goal command는 다른 모델을 심판(judge)으로 사용해 대화를 읽고 작업이 끝났는지 판단한다.
- 자체적으로 만든 루프도 작업 목록에 각 작업이 통과해야 하는 검사 항목을 저장하는 방식이었다.
-
완료 판정이 실제 결과와 분리되는 지점
- Ralph에서 결승선은 에이전트가 작업 중 출력하는 짧은 문구일 뿐이다. 기능이 제대로 만들어졌음을 나타내는 단 하나의 단어가 존재하지 않는 작업도 많다.
- goal command는 작품 자체가 아니라 대화 내용을 읽는다. 대화가 “완료됐다”고 말하는 것과 사용자가 실제로 필요로 한 결과가 어긋날 수 있다.
- 자체 루프의 검사 항목이 실제로 존재해도 에이전트 자신이 채점하면 결국 에이전트가 완료 여부를 결정한다.
- 이런 방식은 컨텍스트가 새로울 때는 잘 작동하지만 실제 업무에 깊이 들어가 컨텍스트가 길어지면 흔들린다. 바로 그때 시스템이 버텨야 한다.
2. Unlazy의 트리 구조와 증거 기반 완료 시스템
Unlazy는 작업을 나누는 구조와 완료를 입증하는 구조를 하나의 시스템으로 결합한다. 마지막에 한 번 확인하는 방식이 아니라 시작부터 끝까지 완료 권한을 에이전트에서 분리한다.
2.1. 큰 작업을 재귀적으로 나누는 작업 트리
-
분할과 하위 에이전트 배분
- 큰 작업을 받으면 즉시 구현하지 않고 먼저 더 작은 작업으로 나눈다.
- 나뉜 각 작업을 다시 더 작은 작업으로 나누며, 하나의 작업이 몇 개로 갈라지고 각 가지가 다시 여러 가지로 갈라지는 트리를 만든다.
- 분할이 멈추면 마지막의 작은 작업 하나씩을 각각의 하위 에이전트(sub-agent)에게 넘긴다.
-
트리 깊이(depth) 설정
- 프롬프트에서 사용할 스킬 이름과 함께 숫자를 지정하며, 숫자는 트리를 몇 번 분할할지 나타낸다.
- 깊이를 5로 지정하면 작업이 다섯 번 세분화되고 그 이상 나누지 않는다.
- 숫자를 지정하지 않으면 요청 조건에 맞는 가장 작은 값을 자동으로 선택한다.
- 전체 애플리케이션처럼 큰 작업은 깊이 5를 사용할 수 있고, 전체 앱이 아니라 특정 기능 하나를 만드는 작업은 깊이 2~3이면 충분하다.
2.2. 작업 단위의 크기와 실행 모드
-
주의력을 보존하는 최소 작업 크기
- 업무를 나누면 각 하위 작업에 명확한 목표 하나만 남고, 담당 에이전트는 전체 업무의 나머지 부분을 계속 들고 다니지 않아도 된다.
- 작업이 지나치게 잘게 쪼개지면 하위 에이전트가 제대로 된 작업 일부를 맡아 끝낼 수 없으므로, 각 작업은 실제 작업 시간으로 최소 10분의 가치가 있어야 한다.
- 깊이를 너무 높게 설정해 결과 작업이 10분보다 짧아지면 스킬이 분할 깊이를 기본값인 3으로 낮춘다.
-
Solo mode와 orchestrated mode
- 깊이 3 이하는 기본값인 solo mode다. 모든 작업이 하나의 세션에서 진행되고 동일한 에이전트가 전 과정을 수행한다.
- 깊이 4 이상은 orchestrated mode로 전환된다. 작업 전체의 분해도를 기록한 계획 파일과 각 작업별 별도 체크리스트를 만든다.
- 분할 깊이는 단순히 하위 에이전트 수만 정하는 값이 아니라 작업을 직렬로 수행할지 여러 담당자에게 나눌지 결정하는 기준이기도 하다.
2.3. plan 파일과 gates 원장
-
긴 세션에서 지침을 잃지 않는 파일 기반 설계
- 이전 버전은 에이전트에게 꼼꼼하게 작업하라고 지시하는 것만으로 게으름을 고치려 했다.
- 그러나 긴 세션에서 가장 먼저 사라지는 것은 지침이며, 이것이 바로 이전 버전이 해결하려던 문제였다.
- 새 버전은 작업 중간에 다시 묻지 않고, 작업 시작 전에 계획과 검증 조건을 파일에 기록한다.
-
plan.md의 역할
plan.md에는 전체 작업이 어떻게 분해됐는지와 각 작업이 어떤 파일을 다뤄야 하는지가 들어간다.- 여러 에이전트가 동시에 일해도 담당 파일을 미리 알 수 있으므로 서로의 작업을 덮어쓰는 위험을 줄인다.
- 오케스트레이션이 진행되면 검증이 끝난 작업을 계획 파일에 한 줄씩 기록한 뒤 다음 작업을 배분한다.
-
gates.md의 역할
gates.md는 처음에 말한 장부(ledger)이며, 파일의 각 항목을 **게이트(gate)**라고 부른다.- 각 게이트는 체크박스와 결과(outcome)로 구성된다. 해당 결과가 참이 되기 전까지 작업은 완료로 간주되지 않는다.
- 결과 아래에는 세 줄이 있다.
- 결과가 달성됐음을 증명하는 실행 명령(command).
- 그 명령이 돌려줘야 하는 정확한 단어(exact expected words).
- 처음에는
pending으로 남아 있는 증거(evidence) 줄.
2.4. 검증기(checker)와 정직한 상태 기록
-
명령 실행으로 완료를 증명하는 절차
- 스킬에 포함된 checker가 gates 파일을 위에서 아래로 훑으며 모든 게이트의 명령을 직접 실행한다.
- 명령 결과에 게이트가 기대한 단어가 포함되면 체크박스를 체크한다.
- 동시에
pending줄을 판정을 결정한 실제 답변의 해당 부분으로 바꾼다. 따라서 완료 상태에는 사람이 다시 확인할 수 있는 실행 결과가 남는다.
-
에이전트의 자기 선언을 무효화하는 규칙
- 체크박스는 체크됐지만 그 아래 증거가 여전히
pending이면 에이전트가 스스로 체크한 것으로 본다. - 이 상태는 미충족으로 처리되며, 아무 표시가 없는 빈 체크박스보다도 나쁘다.
- 빈 체크박스는 작업이 어디까지 진행됐는지 적어도 솔직하게 보여주지만,
pending을 남긴 체크는 완료를 거짓으로 주장하기 때문이다. - 이 규칙이 큰 실행에서도 완료 상태를 정직하게 유지한다.
- 체크박스는 체크됐지만 그 아래 증거가 여전히
-
오케스트레이션에서의 이중 확인
- 새 하위 에이전트에는 전체 업무가 아니라
plan.md와 자기 작업의 gates 파일만 전달한다. - 하위 에이전트가 작업 완료를 보고해도 메인 에이전트는 그 말을 그대로 믿지 않고 해당 작업의 검사를 다시 실행한다.
- 재검증이 끝난 뒤에만 계획 파일에 완료 한 줄을 남기고 다음 작업을 배분한다.
- 새 하위 에이전트에는 전체 업무가 아니라
-
불가능한 작업을 처리하는 정직한 탈출구
- 어떤 작업은 실제로 불가능한 것으로 판명될 수 있다.
- 에이전트가 작업을 버리고 침묵하는 대신, 포기한 게이트의 이름과 포기 이유를 보고서에 기록한다.
- 그 기록은 최종 보고서에 포함되므로 성공과 실패, 미해결 원인을 구분할 수 있다.
3. 설치·설정과 실제 사용 과정
Unlazy는 공식 GitHub 저장소의 설치 명령으로 프로젝트에 추가하고, 사용할 에이전트와 적용 범위를 선택해 활성화한다.
3.1. 설치 명령과 에이전트 선택
-
기본 설치 흐름
- 공식 GitHub 페이지에서 Install 섹션을 찾아 명령어를 복사한다. 관련 저장소는
https://github.com/Leonxlnx/unlazy다. - 작업 중인 프로젝트 안에서 터미널을 열고 복사한 명령어를 실행한다.
- 설치 프로그램이 시작되면 먼저 어떤 에이전트를 사용하는지 묻는다.
- 공식 GitHub 페이지에서 Install 섹션을 찾아 명령어를 복사한다. 관련 저장소는
-
Codex와 Claude Code 설정
- Codex를 사용한다면 Codex가 이미 읽는
.agents폴더에 설치되므로 별도 변경이 필요 없다. - Claude Code를 사용한다면 메뉴에서 해당 에이전트를 선택한다.
- 여러 에이전트를 동시에 선택해 같은 스킬을 다른 환경에서도 사용할 수 있다.
- Codex를 사용한다면 Codex가 이미 읽는
3.2. 적용 범위와 프로젝트 폴더
-
scope 선택
- 설치 과정에서 현재 프로젝트 안에서만 스킬을 쓸지, 앞으로 만드는 모든 프로젝트에서 쓸지 선택한다.
- 소개된 테스트에서는 특정 데모 프로젝트부터 검증하기 위해 project scope를 선택했다.
- 그 뒤 권장 옵션을 선택하면 설치가 완료된다.
-
생성되는 폴더와 중복 방지
- 프로젝트를 VS Code에서 열면
.agents와.claude두 폴더가 새로 보인다. - 이 두 폴더는 프로젝트의 별도 복사본이 아니다. 스킬 자체는
.agents폴더에 있다. .claude쪽은 같은 스킬을 가리키는 바로가기(shortcut)라서 Claude Code가 인식하고, 한 프로젝트에 중복된 사본을 만들지 않고 사용할 수 있다.- 폴더 안의 스킬 파일에는 에이전트가 이 기능을 사용하는 방법에 대한 지침이 들어 있으며, 설치가 끝나면 곧바로 사용할 수 있다.
- 프로젝트를 VS Code에서 열면
4. 직렬 처리의 속도 문제와 병렬 오케스트레이션 수정
Unlazy의 검증 설계는 정직성을 얻는 대신 기본 프롬프트가 작업을 하나씩 배분하는 병목을 만들었다. 이 병목은 병렬 실행을 명시하도록 스킬 지침을 바꿔 해결한다.
4.1. 기본 버전에서 드러난 심각한 병목
-
3~4시간 동안 로그인 페이지만 남은 실험
- 스킬을 설치한 그대로 앱 제작에 적용했을 때 의미 있는 결과물이 나오기까지 매우 오래 걸렸다.
- 테스트 세션은 약 3~4시간 계속됐지만, 진행 상황을 확인하자 로그인 페이지 외에는 아무것도 없었다.
-
병렬 기능을 직렬로 사용하는 지침
- Claude Code와 Codex 모두 여러 에이전트를 동시에 실행할 수 있고, 각 하위 에이전트가 서로 다른 작업을 병렬로 수행할 수 있다.
- 그러나 기존 Unlazy 스킬은 작업 하나를 배분하고 그 작업이 끝날 때까지 기다린 후에야 다음 작업을 배분했다.
- 에이전트를 실행하고는 있었지만 도구가 가진 동시 실행 능력을 최대한 활용하지 못해 시간이 모두 대기 시간으로 사라졌다.
4.2. 프롬프트를 병렬 실행형으로 변경하는 방법
-
수정 방향
- 프로젝트를 다시 열고 스킬 자체의 안내 메시지(prompt)를 수정한다.
- 필요하면 데모에서 사용한 안내 메시지를 일시정지해 복사한 뒤 직접 수정할 수 있다.
- 핵심은 여러 에이전트를 동시에 실행할 수 있다는 사실을 스킬이 실제로 사용하도록 지시하는 것이다.
-
실행 입력
- 스킬 이름을 입력하고 트리 깊이를 지정한 다음 만들고 싶은 결과물을 모두 나열한다.
- 데모 앱을 처음부터 제작했으므로 깊이 5를 사용했다.
- 특정 기능만 만들 때는 깊이 2~3이면 충분하며, 필요 이상으로 높은 값을 선택해도 스킬이 자동으로 깊이를 낮추므로 옵션 선택을 지나치게 걱정할 필요가 없다.
4.3. 병렬 작업의 파일 안전장치와 결과
-
동시 실행 전 준비
- 빌드가 시작되기 전에 먼저
plan.md를 작성하고 이어서gates.md를 작성한다. plan.md는 각 작업이 다뤄야 할 파일을 명시하므로 동시에 일하는 두 에이전트가 서로의 파일을 덮어쓰지 않게 한다.- 기반이 마련되면 모든 작업을 동시에 실행 중인 에이전트들에게 나눠준다.
- 빌드가 시작되기 전에 먼저
-
10개 에이전트와 2시간 실행
- 프롬프트를 수정한 뒤 10개 에이전트가 동시에 각기 다른 부분을 작업했다.
- 병렬 실행은 거의 2시간 이어졌다.
- 결과적으로 원하는 모든 기능이 정확히 작동하는 데모 앱의 첫 번째 버전을 완성했다.
-
모델 라우터와의 결합
- 이 정도 규모의 빌드에서는 model router skill을 함께 사용할 수 있다.
- 모델 라우터는 각 작업을 그 작업에 맞는 모델로 보낸다.
- 단순한 기계적 작업은 저렴한 모델에 맡기고, 어려운 부분은 강력한 모델에 맡겨 강한 모델의 한도에 너무 빨리 도달하지 않게 한다.
주요 발언 모음
“에이전트에게 작업이 끝났다고 알려주는 것이 아니라, 끝났다는 사실을 증명하게 해야 한다.”
“각 항목에는 실제로 완료됐다는 증거가 있어야 한다.”
“에이전트가 스스로 체크한 상자 아래에
pending이 남아 있다면, 빈 상자보다 더 나쁘다. 빈 상자는 적어도 작업이 어디까지 됐는지 정직하게 보여주기 때문이다.”
“Unlazy는 마지막 단계의 단일 검사가 아니라 하나의 전체 시스템이다. 그 안에서 에이전트는 작업이 끝났는지를 결정할 권한이 없다.”
“여러 에이전트를 실행하고 있었지만, 에이전트의 능력을 최대한 활용하고 있지는 않았다.”
핵심 데이터 & 수치
- 모델 범위: Opus와 GPT 5.6 같은 고성능 모델도 게으름 문제에서 자유롭지 않다.
- 최소 작업 단위: 각 하위 작업은 실제 작업 시간으로 최소 10분의 가치가 있어야 한다.
- 자동 깊이 조정: 결과 작업이 10분보다 짧아지면 분할 깊이를 기본값 3으로 낮춘다.
- Solo mode: 트리 깊이 3 이하이며 하나의 세션과 동일 에이전트로 처리한다.
- Orchestrated mode: 트리 깊이 4 이상이며 계획 파일과 작업별 체크리스트를 만들고 하위 에이전트를 활용한다.
- 기본 버전 실험: 약 3~4시간 실행했지만 로그인 페이지 외 결과가 없었다.
- 병렬 수정 후: 10개 에이전트를 동시에 거의 2시간 실행해 원하는 기능이 모두 작동하는 데모 앱 첫 버전을 만들었다.
- 검증 데이터: 각 게이트는 실행 명령, 정확한 기대 단어, 실행 전
pending인 증거 줄을 가진다. - 원본 제작자/저장소: GitHub 트렌딩 1위 개발자로 소개된
Leonxlnx의unlazy저장소다.
결론 및 시사점
- AI 에이전트의 게으름은 모델을 더 강하게 고르는 것만으로 해결되지 않으며, 컨텍스트가 길어질수록 주의력이 분산되는 구조적 문제다.
- “모든 파일을 처리했다”는 에이전트의 자연어 보고는 완료 증거가 아니므로, 실제 파일·명령·테스트 결과를 직접 검증해야 한다.
- 작업을 한 번에 맡기지 말고 트리 구조로 나누면 각 담당 에이전트가 하나의 명확한 목표에 집중할 수 있다.
- 분할 깊이는 작업의 규모에 맞춰 정해야 하며, 작업 단위가 10분보다 짧아지면 기본 깊이 3으로 낮추는 안전장치가 작동한다.
plan.md는 작업 범위와 파일 소유권을 고정하고,gates.md는 완료 조건과 검증 방법을 작업 전에 고정한다.- 체크박스 자체보다 checker가 실행한 명령의 결과를 증거로 삼아야 에이전트의 자기 보고를 차단할 수 있다.
pending증거를 남긴 채 체크된 게이트를 미충족으로 처리하는 규칙은 “완료했다고 주장하기”를 “아직 안 됨을 인정하기”보다 불리하게 만든다.- 불가능한 작업도 게이트 이름과 포기 이유를 기록하면 침묵에 의한 누락을 방지하고 최종 보고서에서 실패를 추적할 수 있다.
- Unlazy의 기본 직렬 배분은 정직한 검증을 제공하지만, Claude Code와 Codex의 병렬 실행 능력을 활용하지 못하면 3~4시간 동안 거의 결과가 없을 수 있다.
- 프롬프트를 병렬 오케스트레이션에 맞게 수정하면 10개 에이전트가 서로 다른 파일과 기능을 맡아 거의 2시간 만에 데모 앱 첫 버전을 완성할 수 있다.
- 병렬 실행은 파일별 담당 범위를
plan.md에 적어 두어야 하며, 그렇지 않으면 동시 수정으로 서로의 작업을 덮어쓸 수 있다. - 모델 라우터를 결합하면 단순 작업은 저렴한 모델로, 고난도 작업은 강력한 모델로 보내 비용과 컨텍스트 한도 문제를 함께 줄일 수 있다.
- Unlazy의 핵심은 특정 모델이나 특정 에이전트가 아니라 “완료 판정권을 에이전트에서 회수하고 외부 증거에 위임하는 운영 설계”다.
- 이 설계는 AI 코딩 작업뿐 아니라 여러 단계와 검증 가능한 결과가 있는 조사·문서화·자동화 업무에도 적용할 수 있다.
