자동화, 워크트리, 스킬: 기동 장치, 작업 분리, 프로젝트 지식

자동화는 기동 조건과 정지 조건을 한 세트로 정해야 무한 루프를 피하고, 워크트리는 병행하는 에이전트가 서로의 파일을 밟지 않게 하며, 스킬은 에이전트가 추측으로 메울 프로젝트 지식을 적어 둡니다.

7분 갱신

앞 편에서 루프의 부품 여섯 가지를 지도로 그렸습니다. 이 편은 그중 앞의 셋입니다. 자동화는 루프를 시작하고 멈추는 장치, 워크트리는 동시에 도는 작업을 분리하는 장치, 스킬은 에이전트가 모르는 것을 추측하지 않게 하는 장치입니다. 다음 편은 커넥터, 서브에이전트, 기억입니다.

핵심 요약

  • 자동화는 기동 조건과 정지 조건을 한 세트로 정합니다. 정지 조건은 완료 판정 하나로 부족하고 상한과 천장 판별이 함께 있어야 합니다.
  • Claude Code의 /loop는 7일 뒤 자동 만료되고, 세션 안 예약 작업은 최대 50개입니다.
  • 워크트리는 Git의 기본 기능이며, claude --worktree <이름>은 .claude/worktrees/<이름>/에 별도 체크아웃을 만듭니다.
  • 스킬은 SKILL.md에 적힌 절차형 지식으로, 호출될 때만 로드되어 추측이 들어갈 자리를 메웁니다.

자동화: 기동 장치와 정지 조건을 세트로 정한다

자동화는 루프의 기동 장치

루프의 첫 바퀴는 누군가 돌려야 합니다. 우리가 쓰는 기동 장치는 세 종류입니다.

  1. 시각 기반: macOS launchd(맥미니의 일간 보고 00시 30분, 워치독 5분 간격). Windows에서는 작업 스케줄러가 같은 역할입니다.
  2. 세션 기반: /loop 20m /review-pr 1234처럼 간격과 프롬프트(또는 스킬)를 주면 세션이 열려 있는 동안 반복합니다. 간격을 빼면 Claude가 1분에서 1시간 사이에서 다음 간격을 고릅니다.
  3. 이벤트 기반: 훅. Stop 훅은 Claude가 응답을 끝내려는 순간 실행되어 exit code 2로 "아직 멈추지 마라"를 되돌립니다. 검증 스크립트를 여기에 걸면 테스트 통과 전에는 끝났다고 말하지 못하는 루프가 됩니다.

절대 빠뜨리면 안 되는 정지 조건

"무엇이 일어나면 시작하는가"보다 "무엇이 일어나면 멈추는가"가 더 중요합니다. 정지 조건이 없으면 루프는 토큰과 신뢰를 태우는 무한 루프가 됩니다. 완료 판정 하나로는 부족합니다. 목표에 영영 닿지 못하는 경우가 있기 때문입니다. 디자인 벤치마크에서 docs 페이지는 88에서 91 사이를 왕복하며 원본의 실물 콘텐츠 보유량 차이라는 천장에 걸렸습니다. 그래서 정지 조건은 세 겹으로 둡니다.

  1. 완료 판정: 점수 95, 3회 중앙값 기준.
  2. 상한: 라운드 수의 한계, 채점은 한 번에 1건.
  3. 천장 판별: 지시가 왕복하고 같은 대역(±5~7)에서 맴돌면 천장으로 보고 사람에게 마감 확정을 요청.

Claude Code 자체에도 상한이 있습니다. /loop의 반복 작업은 생성 후 7일에 만료되고 세션당 50개까지입니다. 문서는 그 이유를 "잊혀진 루프가 실행될 수 있는 기간을 제한"하기 위해서라고 밝힙니다. launchd에는 만료가 없으므로 직접 넣습니다. 우리 워치독은 5분마다 깨어나 서비스가 없으면 launchctl bootstrap을 최대 6회(5초 간격)까지만 시도하고, 그다음 kickstart, 그래도 안 되면 kickstart -k로 한 단계씩만 올라갑니다. 재시도에 한계가 없으면 재시작이 원인을 가리는 자체가 사고가 됩니다.

워크트리: 병행 작업이 부딪히지 않게 나눈다

동시에 돌리면 작업이 부딪힌다

루프 둘 이상을 같은 폴더에서 돌리는 순간 사고가 납니다. 한쪽이 고치는 파일을 다른 쪽이 읽거나, 한쪽이 브랜치를 바꾸면 다른 쪽의 HEAD가 따라 움직입니다. 우리는 같은 워크트리에서 자동 모드 세션과 일반 세션을 동시에 돌리다 HEAD가 꼬인 적이 있고, 그 뒤로 금지 규칙으로 적었습니다.

워크트리는 원래 Git의 기능이다

워크트리는 같은 저장소 히스토리를 공유하면서 별도의 작업 디렉토리와 브랜치를 갖는 Git의 기본 기능입니다.

git worktree add ../project-feature-a -b feature-a
git worktree list
git worktree remove ../project-feature-a

Claude Code는 여기에 얇은 편의를 얹었습니다. claude --worktree feature-auth(짧게 -w)는 저장소 루트의 .claude/worktrees/feature-auth/에 worktree-feature-auth 브랜치로 체크아웃을 만들고 그 안에서 세션을 시작합니다. 다른 터미널에서 다른 이름으로 실행하면 격리된 두 번째 세션이 됩니다. 종료 시 커밋되지 않은 변경이 없으면 자동 제거되고, 있으면 유지할지 묻습니다. 서브에이전트에는 정의 파일에 isolation: worktree를 적어 임시 워크트리를 줄 수 있습니다.

실무 팁 둘입니다. 워크트리는 새 체크아웃이라 .env가 없으므로 프로젝트 루트의 .worktreeinclude에 복사할 파일을 적습니다. 그리고 .claude/worktrees/를 .gitignore에 넣어야 추적되지 않은 파일로 보이지 않습니다.

스킬: 프로젝트 지식을 적어 둔다

모르는 건 추측으로 메워 버린다

에이전트는 모르는 것을 그럴듯하게 채웁니다. 배포 절차를 모르면 일반적인 절차를 지어내고, 채점 형식을 모르면 매번 다르게 묻습니다. 루프에서 이것은 치명적입니다. 바퀴마다 절차가 달라지면 라운드 간 비교가 불가능해져 수렴하지 않습니다. 우리 실측 예는 codex exec의 stdin입니다. 백그라운드 실행 시 < /dev/null을 붙이지 않으면 stdin을 기다리며 멈추는데, 이것이 세션 정지의 최다 원인이었고 문서에는 없는 지식입니다.

스킬은 모르면 추측할 수밖에 없는 지식을 쥐여 주는 구조

스킬은 ~/.claude/skills/<이름>/SKILL.md(개인) 또는 .claude/skills/<이름>/SKILL.md(프로젝트)에 두는 마크다운입니다. frontmatter의 description을 보고 Claude가 관련 있을 때 자동으로 불러오거나 /이름으로 직접 부릅니다. CLAUDE.md와 달리 본문은 호출될 때만 로드되므로 긴 절차를 적어도 평소 컨텍스트를 먹지 않습니다.

---
name: codex-score-loop
description: 생성물을 레퍼런스와 맞대고 Codex를 채점자로 세워 목표 점수까지 캡처, 채점, 수정 루프를 돌리는 검증 워크플로우.
---

본문에는 한 라운드의 4단계, 반드시 이 형태로 써야 하는 채점 명령, 프롬프트 뼈대, 수렴 규칙 7개, 마감 조건이 있습니다. 적을지 말지의 기준은 하나입니다. "이걸 모르면 에이전트가 추측할까?" 그래서 deploy-mini 스킬에는 서버 주소와 launchd 라벨과 "bootout 직후 bootstrap은 I/O error 5가 날 수 있으니 3초 대기 후 재시도"가 있고, 코드를 읽으면 알 수 있는 빌드 방법은 없습니다.

정리

  • 기동 조건과 정지 조건은 한 세트이며, 정지 조건은 완료 판정, 상한, 천장 판별 세 겹입니다.
  • /loop의 7일 만료와 50개 제한은 도구가 두는 상한이고, launchd에는 직접 넣습니다.
  • 워크트리는 Git 기본 기능이고 claude --worktree는 .claude/worktrees/ 아래에 격리 세션을 만듭니다.
  • 스킬에는 "모르면 추측할 지식"만 적습니다.

자주 묻는 질문

자동화에서 정지 조건은 왜 기동 조건과 세트로 정해야 하나요?

기동 조건만 있으면 무한 루프가 됩니다. 목표에 영영 닿지 못하는 천장이 실제로 있고, 그때 멈추는 규칙이 없으면 토큰과 시간을 태우며 계속 돕니다. 시작 조건을 적는 줄에 멈춤 조건을 같이 적는 습관이 필요합니다.

정지 조건으로 완료 판정 하나만 두면 부족한가요?

부족합니다. 완료 판정은 목표에 닿을 때만 작동합니다. 라운드 수나 시간의 상한, 진전 없음을 감지해 사람에게 넘기는 천장 판별이 함께 있어야 합니다. /loop가 7일 만료를 두는 것도 같은 이유입니다.

워크트리는 루프에서 어떤 역할인가요?

둘 이상의 세션이 동시에 돌 때 서로의 파일과 브랜치를 건드리지 않게 분리합니다. claude --worktree <이름>으로 격리 세션을 만들고, 서브에이전트에는 isolation: worktree로 임시 워크트리를 줍니다. .worktreeinclude로 .env 같은 파일을 복사합니다.

스킬에는 무엇을 적어야 하나요?

에이전트가 모르면 추측으로 메울 프로젝트 지식입니다. 서버 주소와 launchd 라벨, codex exec에 < /dev/null이 필수라는 실측 함정, 채점 프롬프트의 고정 형식, 수렴 규칙 같은 것입니다. 코드를 읽으면 알 수 있는 것은 적지 않습니다.

팀에 클로드코드를 도입하려면 실제 업무에 맞춘 설계가 필요합니다. 무료 상담 신청 →