unlazy
무엇인가
unlazy는 AI 에이전트가 '작업 완료'를 선언하기 전에 통과해야 하는 절차를 규정하는 완료 규율 스킬이다. 규율 대상은 완료 판정과 증거 제출이다. 수용 기준을 원장(ledger)으로 먼저 적고, 검토된 검사만 실행하며, 반환된 작업은 다시 검증하고, 증거가 지지하는 범위만 보고하도록 강제한다. 핵심 방법론인 Depth Tree는 작업을 N개 층으로 분해하고 각 말단(leaf)에 전체 작업의 시간 예산을 부여해, 깊이가 늘수록 투입 노력이 곱해지게 만든다.
어떻게 동작하나
구현의 중심은 SKILL.md이고, 실행 계약은 GATES.md 형식의 원장이다. 각 게이트는 `- [ ] G1: ...` 제목, `CHECK:` 셸 명령, `EXPECT:` 성공 출력 일치 문자열, 선택적 `CWD:`, `EVIDENCE:` 줄로 구성된다. 검사기 scripts/gate-check.mjs가 원장을 파싱해 실행하며, `--status`는 셸을 해석하지 않는 비실행 모드, `--approve`는 승인 후 실행, `--reverify`는 이미 완료 표시된 게이트까지 포함해 전부 재실행하는 모드다. 발동은 슬래시 명령 `/unlazy`(예: `/unlazy tree 5 ...`), Codex의 `$unlazy`, 또는 스킬 설명에 따른 자연어 트리거로 이뤄지고, 선택적 훅이 Stop 시점에 정의 드리프트를 감지한다.
무엇과 다른가
프롬프트에 '꼼꼼히 하라'고 적거나 CLAUDE.md·AGENTS.md에 산문 규칙을 넣는 방식과 달리, 이 스킬은 판정을 실행 가능한 오라클로 고정한다. 게이트는 프로세스 종료 코드 0과 `EXPECT:` 일치가 동시에 성립할 때만 통과하고, 자동 증거는 파싱된 `CHECK:`·`EXPECT:`·`CWD:` 정의의 SHA-256 다이제스트와 출력 지문으로 시작한다. 승인 기록은 절대 경로 원장·게이트, 정확한 명령·기대값, 해석된 CWD·셸, 타임아웃, 출력·정규식 한도, 플랫폼, 상속된 PATH 전체에 묶이며, 어느 하나라도 바뀌면 재승인이 필요하다. 유효한 포기는 성공이 아니라 종료 코드 1과 `HANDOFF REQUIRED`를 내는 인계로 처리된다.
어떻게 쓰나
설치는 `npx skills add Leonxlnx/unlazy`로 하고, 사용자 수준 설치는 `-g`, 감지된 모든 에이전트 대상은 `--all`을 붙인다. 수동 배치는 Claude Code의 `~/.claude/skills/unlazy`, Codex CLI의 `~/.codex/skills/unlazy`에 저장소를 복제한다. 단일 작업에는 templates/gates-leaf.md를 `GATES.md`로 복사해 플레이스홀더를 채운 뒤 `node .../scripts/gate-check.mjs --status GATES.md`로 명령을 실행하지 않고 검토하고, 모든 명령과 호출 스크립트를 읽은 다음 `--approve`로 실행한다.
전제와 한계
동작 대상은 Claude Code와 Codex CLI이며, 검사기와 선택적 훅은 Node 16 이상을 요구하고 서드파티 런타임 패키지를 쓰지 않는다. 검사기는 선언된 명령 오라클만 증명할 수 있고, 영어 제목과 임의 셸 코드가 같은 뜻이라고 추론하지 못한다. 증거 결속은 키 없는 방식이라 원장 편집 자체를 탐지하지는 못하고 구조적 드리프트만 잡는다. 셸은 `--shell`, `UNLAZY_SHELL`, 플랫폼 기본값 순으로 결정되며 Windows에서는 Git Bash와 PowerShell의 PATH 차이가 검증 실패로 이어질 수 있다. 현재 소스는 2.1.0을 목표로 하고 태그된 릴리스로 표기되지 않으므로, 불변 설치가 필요하면 정확한 커밋을 고정해야 한다.