태스크 큐·판단 규칙·mission.md로 AI가 스스로 판단 24시연속
Safety Guards, Code Quality, Monitoring, Recovery - 앞선 4개의 장은 "잘못된 일이 일어나지 않도록 막는" 구조였다. 이번부터는 방향이 달라진다.
Autonomy, Coordination, Putting It Together - 이 3개는 "Claude Code가 더 자율적으로, 더 오래, 더 영리하게 작동하도록 만드는" 구조다.
특히 Autonomy는 자율 운영의 핵심 기반이다. 이번 장의 3가지 체크가 갖춰지지 않으면, 아무리 Safety Guards를 완벽하게 설정해도 Claude Code는 금방 멈춘다.
어떤 일이 벌어졌나
Claude Code가 블로그 포스트 초안 작성을 완료했다. 그리고 멈췄다.
확인해 보니 5시간째 idle 상태였다. Claude Code는 태스크를 끝낸 뒤 "다음에 무엇을 해야 하는지" 알 수 없어서 기다리고 있었다.
왜 이런 일이 생기나
Claude Code는 태스크를 받으면 실행하지만, "다음 태스크를 스스로 창출하는" 기능은 기본적으로 없다. 명시적인 지시가 없으면 기다리는 것이 기본 동작이다.
자율 운영을 지속하려면 Claude Code가 "다음에 무엇을 해야 하는지"를 언제든 스스로 파악할 수 있는 구조가 필요하다.
1단계. 태스크 큐 파일을 만든다.
mkdir -p ~/ops
curl -o ~/ops/task-queue.yaml \
https://raw.githubusercontent.com/gaebalai/claude-code-hooks/main/templates/task-queue.yaml
2단계. 자신의 작업 환경에 맞게 태스크를 정의한다.
# ~/ops/task-queue.yaml
tasks:
- id: write-blog-chapter-5
status: done
priority: high
completed_at: "2026-02-27"
- id: write-blog-chapter-6
status: in_progress
priority: high
started_at: "2026-02-28"
notes: "Autonomy 체크리스트까지 작성 완료. 예제 코드 보완 필요."
- id: qiita-dry-article
status: pending
priority: medium
blocked_until: "2026-03-01" # 하루 1개 발행 규칙
notes: "DRY 원칙 기초부터 설명하는 입문 글"
- id: github-readme-update
status: pending
priority: low
depends_on: write-blog-chapter-6
notes: "6장 완성 후 README에 링크 추가"
- id: devto-ci-guide
status: pending
priority: medium
blocked_until: "2026-03-03"
태스크 상태값 설명:
3단계. CLAUDE.md에 세션 시작 시 태스크 큐 참조 절차를 명시한다.
## 세션 시작 시 필수 절차
세션을 시작하거나 `/compact` 이후 재개할 때는 반드시 아래 순서를 따른다:
1. `~/ops/mission.md` 를 읽어 현재 전체 맥락을 파악한다
2. `~/ops/task-queue.yaml` 을 읽어 작업 목록을 확인한다
3. `status: in_progress` 인 태스크가 있으면 그 태스크를 이어서 진행한다
4. 없으면 아래 조건을 모두 충족하는 태스크를 시작한다:
- `status: pending`
- `blocked_until` 이 오늘 날짜 이전이거나 없음
- `depends_on` 이 있으면 해당 태스크가 `done` 상태인지 확인
5. 모든 태스크가 완료되어 있으면 `~/ops/mission.md` 의 목표를 기반으로 새 태스크를 스스로 제안하고 큐에 추가한 뒤 진행한다
### 태스크 상태 업데이트 규칙
- 태스크를 시작할 때: `status` 를 `in_progress` 로, `started_at` 을 오늘 날짜로 업데이트
- 태스크를 완료할 때: `status` 를 `done` 으로, `completed_at` 을 오늘 날짜로 업데이트
- 태스크가 막혔을 때: `status` 를 `blocked` 로, `blocked_reason` 을 기록
� 한국 서비스 환경에 맞는 blocked_until 활용법: 국내 플랫폼에서 콘텐츠를 운영할 때 플랫폼별 발행 간격 규칙이 있는 경우가 많다. 예를 들어 네이버 블로그나 티스토리에서 하루 여러 건을 올리면 저품질 처리될 수 있으므로, blocked_until 필드로 발행 간격을 자동 관리하면 유용하다.
태스크 큐가 "AI의 공식 할 일 목록"으로 기능하게 된 이후, idle 정지가 거의 사라졌다.
어떤 일이 벌어졌나
자율 운영을 설정하고 며칠 후, 대화창을 열었더니 Claude Code의 메시지들이 가득했다.
"어떤 파일을 수정할까요?"
"이 방향으로 진행해도 될까요?"
"확인한 후 다음 단계로 넘어가겠습니다"
"두 가지 방법이 있는데, 어느 쪽을 선호하시나요?"
모든 메시지가 사람의 응답을 기다리며 멈춰 있었다. 자율 운영이 아니라, 단순히 응답 대기 상태였다.
왜 이런 일이 생기나
Claude Code는 불확실한 상황에서 안전을 위해 사람에게 확인을 구하는 방향으로 기본 설계되어 있다. 이 자체는 좋은 설계지만, 자율 운영 환경에서는 확인해야 할 상황의 범위를 명확히 정의하지 않으면 모든 결정을 사람에게 넘기게 된다.
"이것은 스스로 결정해도 된다"와 "이것은 반드시 사람에게 물어야 한다"의 경계선을 CLAUDE.md에 명시하는 것이 핵심이다.
curl -o ~/.claude/hooks/no-ask-human.sh \
https://raw.githubusercontent.com/gaebalai/claude-code-hooks/main/hooks/no-ask-human.sh
chmod +x ~/.claude/hooks/no-ask-human.sh
PreToolUse hook에 등록한다:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "bash ~/.claude/hooks/branch-guard.sh" },
{ "type": "command", "command": "bash ~/.claude/hooks/error-gate.sh" },
{ "type": "command", "command": "bash ~/.claude/hooks/no-ask-human.sh" }
]
}
]
}
}
이 hook은 read, select 등 사람의 입력을 기다리는 명령이 실행되려 할 때 이를 감지하고 차단한다.
## 자율 판단 규칙——묻지 않고 스스로 결정한다
### 스스로 결정해도 되는 것
| 상황 | 올바른 행동 |
|------|-----------|
| 라이브러리·프레임워크 선택 | 해당 생태계의 표준을 따른다 (예: React → React Query, Python → pytest) |
| 파일명·변수명·함수명 | 프로젝트 기존 네이밍 규칙에 따른다 |
| 구현 방식 선택 | 기존 코드베이스의 패턴을 따른다 |
| "어느 쪽이 나을까" 판단 | 객관적 근거를 기록하고 결정한다 |
| 에러 수정 방법 | 스스로 조사·수정한다 (3회 실패 시 손절) |
| 불명확한 사양 | 업계 일반 관례를 따르고, 결정 이유를 주석으로 남긴다 |
| 테스트 코드 작성 범위 | 공개 API와 주요 비즈니스 로직을 우선으로 한다 |
### 반드시 사람에게 확인해야 하는 것 (예외)
- **과금이 발생하는 조작**: 유료 API 호출, 클라우드 리소스 생성·삭제 등
- **불가역적 데이터 변경**: 프로덕션 DB 데이터 삭제·수정, 백업 파일 삭제
- **외부 공개**: `git push`, 블로그 발행, SNS 게시, npm publish 등
- **보안 관련 변경**: 인증 로직, 권한 설정, 환경 변수 변경
- **비용이 예상보다 크게 늘어나는 상황**: 예상 비용의 2배 이상이 될 것으로 판단되는 경우
### 판단이 어려울 때의 규칙
위 표에 해당하지 않는 경우:
1. **일반적인 관례가 있으면** → 관례를 따르고 진행
2. **관례가 없거나 불분명하면** → 더 안전한 쪽을 선택하고 결정 이유를 `~/ops/mission.md` 에 기록
3. **어느 쪽을 선택해도 불가역적 영향이 있으면** → `~/ops/pending_for_human.md` 에 기록하고 다른 태스크로 전환
� 한국 개발 현장 특이사항: 카카오·네이버·라인 등 국내 플랫폼의 API는 호출당 과금 또는 일일 한도가 있는 경우가 많다. 이런 API를 사용하는 프로젝트에서는 "예외" 항목에 해당 서비스명을 명시적으로 추가해 두는 것을 권장한다. 예: "카카오 메시지 전송 API 호출 전 반드시 확인"
"묻지 않고 결정하는 범위"를 명확히 정의한 이후, Claude Code가 사람의 응답을 기다리며 멈추는 일이 사라졌다. 동시에 예외 항목을 명시했기 때문에, 정말 중요한 결정에서는 여전히 확인 요청이 온다.
어떤 일이 벌어졌나
Claude Code가 3시간 작업하다가 Context window가 가득 차서 /compact가 실행됐다. 컴팩션 이후 CC에게 계속 진행해 달라고 했더니 이렇게 물었다.
"어떤 작업을 하고 있었는지 알려주실 수 있을까요?"
Claude Code는 자신이 방금까지 무엇을 하고 있었는지 완전히 잊어버렸다. 대화 내역이 요약되면서 작업의 세부 맥락이 사라진 것이다.
결국 처음부터 상황을 다시 설명하고, 이미 완료한 작업을 다시 확인하는 데 30분이 걸렸다.
왜 이런 일이 생기나
Claude Code의 작업 상태는 대화 컨텍스트 안에만 존재한다. /compact가 실행되거나, 세션이 새로 시작되면 이 정보는 사라진다.
"현재 무엇을 하고 있는지", "어디까지 완료했는지", "다음에 무엇을 해야 하는지"를 대화 외부의 파일에 지속적으로 기록해 두면, 어떤 상황에서도 즉시 복원할 수 있다.
1단계. mission.md 파일을 만든다.
curl -o ~/ops/mission.md \
https://raw.githubusercontent.com/gaebalai/claude-code-hooks/main/templates/mission.md
2단계. 자신의 현재 상황에 맞게 내용을 작성한다.
# ~/ops/mission.md
# 마지막 업데이트: 2026-03-01
## 현재 포커스
기술 블로그 시리즈 "Claude Code 100시간 자율가동법" 5장 집필 중
→ Autonomy 체크 15~17 설명 완료, 예제 코드 보완 작업 중
## 완료된 것
- [x] claudecode-scan CLI에 GitHub 직접 링크 추가 (2026-02-27)
- [x] 블로그 시리즈 1~5장 완성 (2026-02-28)
- [x] KPI 정의서 초안 작성 (2026-02-28)
- [x] GitHub Actions 워크플로 설정 (2026-02-26)
## 다음 액션 (우선순위 순)
1. 6장 나머지 예제 코드 보완 및 최종 검토
2. 7장 Coordination 집필 시작
3. 8장 Putting It Together 집필
4. content-manifest.yaml 전체 업데이트
## 현재 블로커
| 항목 | 이유 | 해제 조건 |
|------|------|---------|
| DRY 원칙 기사 발행 | 하루 1개 발행 규칙 | 2026-03-01 이후 |
| 블로그 시리즈 출판 | 플랫폼 수동 설정 필요 | 담당자 직접 처리 |
## 현재 진행 중인 결정 사항
- 7장의 구성: "이론 중심" vs "실전 예시 중심" → **실전 예시 중심**으로 결정 (2026-02-28)
- 코드 예시 언어: TypeScript와 Python 중 → **TypeScript 우선, Python 보완**으로 결정
## 중요 맥락 (반드시 기억할 것)
- 이 시리즈는 **비개발자도 읽을 수 있는 수준**을 목표로 한다
- 모든 코드 예시는 **복사해서 바로 사용 가능**해야 한다
- 각 챕터는 **독립적으로 읽어도 이해**할 수 있어야 한다
Step 3. CLAUDE.md에 mission.md 자동 갱신 규칙을 추가한다.
## mission.md 유지 관리 규칙
### 업데이트 타이밍
- 태스크를 완료했을 때: "완료된 것" 목록에 추가, 날짜 기록
- 중요한 결정을 내렸을 때: "현재 진행 중인 결정 사항"에 기록
- 새로운 블로커가 생겼을 때: "현재 블로커" 표에 추가
- 세션을 종료하기 전: 현재 상태를 반영해 전체 내용 갱신
- /compact 실행 직전: 반드시 mission.md를 최신 상태로 저장
### 세션 시작 시 복원 절차
1. ~/ops/mission.md 를 읽는다
2. ~/ops/task-queue.yaml 을 읽는다
3. 두 파일을 종합해 현재 상황을 파악한다
4. "현재 포커스"와 "다음 액션"에 따라 작업을 재개한다
� mission.md와 task-queue.yaml의 역할 분담: 두 파일은 서로 다른 정보를 담는다. task-queue.yaml은 실행 가능한 단위 작업 목록이고, mission.md는 전체 맥락과 의사결정 기록이다. 태스크 큐는 "무엇을 할지", mission.md는 "왜 하는지, 어디까지 왔는지"를 담는다. 두 파일이 함께 있으면 세션이 아무리 끊겨도 즉시 복원이 가능하다.
compact 후, 새 세션에서 mission.md를 읽는 것만으로 30초 안에 이전 작업으로 완전히 복귀 할 수 있게 됐다.
▸ Autonomy
[PASS] Task queue defines next actions
[PASS] No-ask-human prevents unnecessary interruptions
[PASS] Persistent state enables session continuity
100%
[ ] ~/ops/task-queue.yaml 생성 및 현재 태스크 목록 작성
[ ] CLAUDE.md에 세션 시작 시 태스크 큐 참조 절차 추가
[ ] ~/.claude/hooks/no-ask-human.sh 배치 및 PreToolUse hook에 등록
[ ] CLAUDE.md에 자율 판단 규칙 및 예외 항목 추가
[ ] ~/ops/mission.md 생성 및 현재 작업 상태 기록
[ ] CLAUDE.md에 mission.md 갱신 규칙 추가
누적 85점이 되었다. "Production Ready" 구간(80점 이상)에 진입했다.
Autonomy의 3가지 체크가 모두 갖춰지면, 아래 상태가 실현된다:
Claude Code가 태스크를 끝내면 스스로 다음 태스크를 찾아 시작한다
불확실한 상황에서 판단 기준에 따라 스스로 결정하고 진행한다
세션이 끊기거나 compact되어도 mission.md를 읽고 즉시 복원한다
즉, "하루에 1번 확인하는 것만으로 24시간 Claude Code가 계속 움직이는" 운영 체계가 완성된다.
다음 장에서 Coordination은 이 구조를 여러 Claude Code 인스턴스로 확장하고, 교훈을 축적해 반복 실수를 없애는 구조를 다룬다.
©2024-2026 MDRules dev., Hand-crafted & made with Jaewoo Kim.
이메일문의: jaewoo@mdrules.dev
AI강의/개발/기술자문, AI 업무 자동화 컨설팅 문의: https://talk.naver.com/ct/w5umt5
AI 업무 자동화/에이전트/워크플로우설계 컨설팅/AI교육: https://mdrules.dev
이 작가의 멤버십 구독자 전용 콘텐츠입니다.
작가의 명시적 동의 없이 저작물을 공유, 게재 시 법적 제재를 받을 수 있습니다.
오직 멤버십 구독자만 볼 수 있는,
이 작가의 특별 연재 콘텐츠