(02) OpenClaw로 ‘개발 자동화 OS’ 만들기 — 멀티세션, 태스크, 리뷰, CI/CD
OpenClaw를 ‘개발 자동화 OS’처럼 쓰기 위해 만든 운영 규칙과 자동화(멀티세션, TODO-driven autopilot, 리뷰/머지 게이트, worktree-per-task, Cloudflare 배포)를 한 번에 정리합니다.
TL;DR (핵심 요약)
- 문서가 곧 실행:
TODO.md/SESSIONS.md/tasks/*.md를 단일 진실로 삼는다. - Stage-gated Done:
EXEC:done이 아니라REVIEW:done까지가 DONE. - Autopilot(CRON):
REVIEW:pending을 우선 처리하고, PR 업데이트→리뷰→반영까지 한 사이클에 끝낸다. - 멀티세션 운영: 구현/리뷰/디자인을 분리하고, “스턱”을 문서와 로그로 즉시 가시화한다.
- 기본 전략 = worktree-per-task: 태스크 1개 = 브랜치 1개 = worktree 1개. 클코 5세션 병렬이 가능해진다.
1) 한눈에 보는 전체 플로우
flowchart TD
U["User / Owner"] -->|요청| TODO["agent-ops/TODO.md"]
TODO --> CRON["Autopilot Cron"]
CRON --> WT["git worktree: /tmp/ys-{label}"]
WT --> CLCO["Claude Code (up to 5 sessions)"]
CLCO --> PR["GitHub PR -> dev"]
PR --> REV["Independent Review"]
REV -->|APPROVE| MERGE["Merge dev"]
REV -->|Request changes| FIX["Follow-up tasks"]
MERGE --> DEPLOY["Cloudflare Pages dev deploy"]
DEPLOY --> U
subgraph SSOT["Single Source of Truth"]
TODO
SESS["agent-ops/SESSIONS.md"]
TASKS["agent-ops/tasks/*.md"]
end
CRON --- SESS
CRON --- TASKS
1) 왜 이런 운영이 필요했나
에이전트로 개발을 굴리면 속도는 빨라지지만, 동시에 이런 문제가 생긴다.
- 작업이 실제로는 멈췄는데 문서상으로는 진행 중처럼 보임
- PR이 여러 개 떠 있는데 서로 중복/충돌해서 머지 순서가 꼬임
- “끝냈다”가
EXEC만 끝난 상태인지, 리뷰까지 끝난 상태인지 애매함
그래서 우리는 기능 개발만이 아니라, 개발이 계속 굴러가게 만드는 운영 시스템(governance + automation)을 먼저 고정했다.
2) Single Source of Truth: agent-ops
작업의 기준은 코드 리포지토리가 아니라, 아래 ops 문서들이다.
~/projects/.agent-ops/TODO.md- 지금 당장 할 일(AUTO_NOW), 다음 체인(PENDING_CHAIN), 승인 대기(WITH_USER) 등
~/projects/.agent-ops/SESSIONS.md- 실제 실행 세션(클코/서브에이전트/크론) 추적
~/projects/.agent-ops/tasks/*.md- 태스크 단위 체크리스트(Exit criteria 포함)
운영 철학: 기록 없는 작업은 존재하지 않는다.
3) Stage-gated Done (중요)
태스크가 EXEC:done에서 멈추면, 시스템 전체가 점점 스턱된다.
그래서 DONE의 정의를 이렇게 고정했다.
PLAN → EXEC → TEST → PR → REVIEW → MERGE_DEV → DONE- 최소 조건:
REVIEW:done
이 규칙이 있어야 “PR은 열려 있는데 리뷰 안 돼서 다음 태스크가 못 올라가는” 상태를 줄일 수 있다.
4) PR/리뷰/머지 거버넌스
우리가 쓰는 기본 흐름은 아래다.
feature/*→ PR todev→ 독립 리뷰 → mergedevdev→ PR tomain→ 사용자 승인 → merge/deploy
그리고 PR 본문은 무조건 사람이 읽을 수 있게 유지한다.
- What/Why
- Scope(변경 파일/역할)
- Testing 결과
- Risk/Rollback
- Next
(쉘 안전을 위해 PR 본문 업데이트는 --body-file을 표준으로 쓴다.)
5) Autopilot(CRON): TODO-driven 엔진
크론은 상태 리포터가 아니라 실행 엔진이다.
기본 동작:
AUTO_NOW상위 항목을 스캔SESSIONS.md와 실제 프로세스 불일치 감지 후 문서 정정- 우선순위는 항상:
REVIEW:pending(리뷰를 닫아버리기) → 그 다음 구현
- 한 사이클 안에서 가능하면:
- PR 업데이트 → PR 본문 최신화 → 독립 리뷰 → 결과 반영까지 마감
6) 멀티세션 운영 (구현/리뷰/디자인 분리)
세션은 목적별로 분리한다.
- implement
- review
- design
- deploy
그리고 어떤 세션이 active인데 실제 프로세스가 없으면 즉시 문서 정정(paused/failed)한다.
7) 기본 전략: worktree-per-task (최대 5 병렬)
병렬로 여러 태스크를 돌리면 가장 큰 문제가 git checkout 충돌/워킹트리 오염이다.
그래서 기본 전략을 이렇게 바꿨다.
- 태스크 1개 = 브랜치 1개 = worktree 1개
- 브랜치:
feature/<label> - worktree:
/tmp/ys-<label>
- 브랜치:
클코(Claude Code) 세션은 프로젝트 루트 컨텍스트를 유지하되, 매번 아래 1줄을 프롬프트 맨 위에 박아서 타겟을 강제한다.
TARGET WORKTREE:
/tmp/ys-<label>
이 방식이면 클코 5세션 병렬도 안정적으로 굴릴 수 있다.
주의: 공용 파일 touch 충돌
Layout.astro, global.css 같이 공용 파일을 동시에 건드리는 태스크는 병렬 금지.
태스크 문서에 touch-files를 기록하고, 같은 그룹은 락을 걸어 순차 처리한다.
8) CI/CD & 배포 (Cloudflare Pages)
wrangler로 Pages 프로젝트 생성- dev 브랜치로 스테이징 배포를 빠르게 갱신
- 사용자는 dev URL에서 즉시 확인
(운영/배포는 자동화하되, main 배포는 사용자 승인 게이트를 유지한다.)
9) 다음 단계
이 운영 프레임 위에, “진짜 블로그” 기능을 얹는다.
- 카테고리/태그 사이드바
- 정렬(최신/인기/최근상승)
- 좋아요(익명 카운터)
- 댓글(자체 구현: Workers + D1)
NOTE: 이 글은 초안(draft)입니다. 운영 규칙이 진화하면 내용도 업데이트됩니다.