unlazy, AI 에이전트가 일을 대충 끝내는 걸 막는 깃허브 오픈소스 스킬

AI 에이전트에게 리팩토링을 맡겼더니 “완료했습니다”라는 말만 돌아온 적 있다면

코딩 에이전트에게 마이그레이션이나 리팩토링을 맡기면, 정작 검증은 건너뛴 채 “완료했습니다”라는 보고만 돌아오는 경우가 있습니다. 개발자가 다시 코드를 열어 하나씩 확인해야 그제야 절반만 끝나 있었다는 걸 알게 됩니다.

깃허브에 올라온 unlazy는 이 문제를 정면으로 다루는 오픈소스 스킬입니다. 소개 문구도 직설적입니다. “AI 에이전트를 위한 게으름 방지 스킬(Anti-laziness skill for AI agents).”

깃허브 unlazy 저장소 메인 화면. 스타 1.8k, 포크 103, 워치 8 표시와 함께 저장소 파일 구조가 보인다 출처 : 깃허브 unlazy 저장소 화면 캡처

공개된 지 얼마 안 됐는데 스타 1.8천 개, 포크 100개를 넘겼습니다. Claude Code, Codex CLI 등 여러 에이전트에서 스킬 형태로 바로 얹어 쓸 수 있게 만들어졌습니다.


왜 AI 에이전트는 일을 대충 끝낼까

이 프로젝트가 근거로 드는 논문은 “Quantifying Laziness”(arXiv 2512.20662)입니다. 여러 항목으로 구성된 프롬프트를 줘도 모델이 일부만 처리하고 조기에 작업을 종료하는 경향이 확인됐다는 내용입니다.

같이 인용되는 SlopCodeBench 결과도 눈에 띕니다. 저장소 README에 따르면 이 벤치마크에서 최고 성능 에이전트조차 체크포인트 통과율이 14.8%에 그쳤다고 합니다. 에이전트가 “작업 완료”라고 보고하는 것과 실제로 검증 가능한 결과물을 내놓는 것 사이에 큰 간극이 있다는 뜻입니다.

unlazy는 이 간극을 사람이 매번 눈으로 확인하는 대신, 실행 가능한 검증 절차로 강제하겠다는 접근입니다.


Depth Tree 방법과 GATES.md, 검증을 어떻게 강제하나

핵심 개념은 Depth Tree 방법입니다. 작업을 N단계 트리로 쪼개고, 트리 아래로 내려갈수록 각 단계에 전체 작업 시간 예산을 그대로 부여합니다. 깊이가 늘어날수록 들이는 노력도 함께 늘어나도록 설계한 구조입니다.

/unlazy tree 5 refactor the payment module and verify every migration path

실제 검증은 GATES.md라는 파일로 이뤄집니다. 각 게이트는 CHECK, EXPECT, EVIDENCE 세 필드로 구성되고, CHECK에 적힌 셸 명령을 실제로 실행해서 종료 코드가 0인지, EXPECT에 적힌 문구가 출력에 포함되는지를 대조합니다. 파서는 게이트가 0개거나 ID가 중복되거나 EXPECT 기준이 모호하면 아예 거부합니다.

# Gates: pricing behavior

- [ ] G1: pricing fixtures render the expected tiers
  CHECK: node scripts/verify-pricing.mjs
  EXPECT: pricing verification passed
  EVIDENCE: pending

검증 흐름은 상태 확인, 드라이런, 승인, 재검증 네 단계로 나뉩니다.

node scripts/gate-check.mjs --status GATES.md    # 실행 없이 상태만 확인
node scripts/gate-check.mjs GATES.md             # 드라이런, 실제 실행 안 함
node scripts/gate-check.mjs --approve GATES.md   # 승인 후 실제 실행
node scripts/gate-check.mjs --reverify GATES.md  # 반환된 작업을 다시 검증

“승인 전 반환된 작업은 재검증한다”는 마지막 단계가 이 시스템의 요점입니다. 에이전트가 스스로 완료를 보고해도, 그 보고를 그대로 믿지 않고 같은 게이트를 다시 돌려 결과가 여전히 통과하는지 확인합니다.


설치는 어떻게 하나

Node 16 이상이면 타사 런타임 패키지 없이 바로 설치할 수 있습니다.

npx skills add Leonxlnx/unlazy

-g 옵션을 붙이면 사용자 레벨로, --all 옵션을 붙이면 감지된 모든 에이전트에 한 번에 설치됩니다. 수동으로 설치하려면 다음 경로에 저장소를 복제하면 됩니다.

# Claude Code
~/.claude/skills/unlazy

# Codex CLI
~/.codex/skills/unlazy

깃허브 unlazy 저장소 README 화면. "Completion discipline for substantial AI-agent work, backed by runnable gates" 소개 문구와 npx skills add 설치 명령이 보인다 출처 : 깃허브 unlazy 저장소 README 화면 캡처

설치 후에는 /unlazy로 슬래시 스킬을 호출하거나, Codex에서는 $unlazy로 부릅니다. Claude Code에는 세션 종료 시점에 미충족 게이트가 남아 있으면 종료 자체를 막는 Stop 훅도 선택적으로 붙일 수 있습니다.

node scripts/install-hooks.mjs

unlazy 저장소 바로가기


제작자 스스로 인정한 한계

README에서 특히 눈에 띄는 문장이 있습니다.

“Approval is consent, not a sandbox. Checks run with ambient filesystem, environment, credential, and network access.”

승인은 실행을 허락하는 동의일 뿐 격리된 실행 환경을 제공하는 게 아니라는 뜻입니다. CHECK에 적힌 명령은 파일 시스템, 환경 변수, 인증 정보, 네트워크에 그대로 접근할 수 있는 상태로 실행되기 때문에, 신뢰할 수 없는 게이트를 승인하면 그만큼 위험이 그대로 따라옵니다.

병렬 실행에 대해서도 비슷한 수준의 정직함이 보입니다. 여러 게이트를 동시에 처리하는 --jobs 옵션이 있지만, 경로가 겹치지 않는지 확인하는 수준이지 쓰기 격리 자체를 보장하지는 않는다고 명시합니다. 실제로 겹치는 작업을 병렬로 돌리려면 별도의 git worktree를 쓰라고 안내합니다.

README는 자체 성능 비교에 대해서도 한 걸음 물러섭니다. 초기 버전에서 언급했던 내부 비교 결과를 원본 그대로 보유하고 있지 않다며, 이 수치는 설계 근거로만 참고했을 뿐 벤치마크로 보장하는 값이 아니라고 별도로 밝혀뒀습니다.


검증 자동화가 신뢰를 만드는 건 아니다

unlazy가 다루는 문제는 결국 AI 에이전트에게 위임한 작업을 어디까지 믿을 수 있느냐는 질문입니다. GATES.md 같은 구조는 사람이 매번 손으로 확인하는 수고를 셸 명령으로 대신하게 해주지만, 그 명령 자체를 잘못 작성하면 검증도 함께 허술해집니다. 저장소가 스스로 “승인은 샌드박스가 아니다”라고 밝혀둔 것도 같은 이유입니다.

AI 에이전트에게 코드 작업을 맡기는 흐름이 늘어날수록, 결과를 검증하는 절차 역시 도구에만 맡기지 않고 직접 설계에 관여해야 신뢰할 수 있는 수준을 유지할 수 있습니다.

이 글은 정보 제공을 목적으로 작성했으며, 2026년 8월 기준 공개된 깃허브 저장소 README를 근거로 정리했습니다. 실제 프로젝트에 적용하기 전에는 CHECK 명령이 어떤 권한으로 무엇을 실행하는지 직접 검토하시길 권합니다. 스크립트 실행에 따른 결과와 책임은 전적으로 사용자 본인에게 있으며, 이 글은 특정 도구의 안전성이나 효과를 보증하지 않습니다.

Categories:

Updated:

Leave a comment