Compound Engineering: Codex Skills를 사용해서 도입해보기

AR-DA-02calendar_today2026-02-17 00:39#AGENTS #CODEX #AI

개요

  • 이 글은 ~/.agents/skills에 있는 ce-* 스킬 파일을 그대로 공개하고, 각 파일이 어떤 문제를 줄이는지(효과)를 짧게 덧붙입니다.
  • 본문이 길어지는 이유는 “설명”보다 “원문(스킬 파일)”을 남기려는 선택 때문입니다.
  • 처음 읽을 때는 1~4절을 보고, 필요할 때 5절 이후의 파일 원문을 참고하면 됩니다.

1. 머릿속 규칙은 항상 휘발됩니다

처음에는 다들 비슷한 말을 합니다.

  • "작업 전에 계획은 세워야지"
  • "리뷰는 꼭 해야지"
  • "같은 버그는 다시 안 나게 막아야지"

그런데 일정이 밀리고, 요청이 쏟아지고, 병렬 작업이 쌓이기 시작하면 이 규칙은 빠르게 흐려집니다.

그리고 그 대가는 슬슬 잊혀져 갈때쯤 나에게 돌아옵니다.

  • 범위가 바뀌었는데도 그대로 구현이 진행됩니다.
  • 테스트는 했는데, 무엇을 확인했는지 남지 않습니다.
  • 리뷰는 했는데, 무엇이 위험한지 우선순위가 흐립니다.
  • 버그는 고쳤는데, 다음 주에 같은 형태로 다시 등장합니다.

그래서 저는 "원칙"을 문장으로만 두지 않고, 실행하려고 생각했습니다.

AGENTS.md가 아닌 Skills.md를 사용해서요.

2. 규칙을 스킬 파일로 만들기

제 맥북에서 Codex로 개발하는 모든 프로젝트에서 적용하기 위해 ~/.agents/skills 경로에 스킬들을 만들었습니다.

이 글에서는 개인 절대 경로를 드러내지 않고, 공개용 표기(홈 디렉터리 기준)로만 설명합니다.

핵심 아이디어는 단순합니다.

  • 루프를 Plan → Work → Review → Compound로 고정합니다.
  • 각 단계에서 무엇을 반드시 만들어야 하는지 "파일"로 박아 둡니다.
  • 단계 전환은 승인 게이트로 막습니다.
    • 그냥 AGENTS.md로만 통제하려고 하니, 멋대로 각 단계를 넘나들면서 작업하더라구요 ㅠㅠ...

3. 현재 스킬 구성

아래는 Compound-Engineering방식의 스킬들만 모아둔 Skills 디렉터리 트리 구조입니다.

text
~/.agents/skills/
├── README.md
├── ce-router/
├── ce-plan/
├── ce-work/
├── ce-review/
└── ce-compound/

이 구조의 효과는 분명합니다.

  • 항상 새로운 프로젝트를 시작하더라도 동일한 프롬프트를 사용하게 됩니다.
  • 무엇을 언제 멈춰야 하는지(승인 게이트)가 명시됩니다.

4. README.md: 이 루프의 목차

README.md는 이 키트가 무엇을 담고 있는지, 최소한의 맥락만 제공합니다.

md
## 이 키트의 스킬 구성
- ce-router (게이트/라우팅) ✅ implicit 허용 (가능한 자동 개입)
- ce-plan (PLAN 산출물)
- ce-work (WORK 실행 + Work Log 강제)
- ce-review (리뷰 + P1/P2/P3)
- ce-compound (축적물 최소 1개 강제)

효과는 단순합니다.

  • "무슨 스킬이 있지?"를 찾는 시간을 없앱니다.
  • 루프의 구성요소를 한 화면에 고정해, 다음 단계로 자연스럽게 넘어가게 만듭니다.
  • 사실 에이전트보단 사람을 위해 만든 파일이긴합니다.

5. ce-router: 진입점(라우팅 + 승인 게이트)

병렬로 바이브코딩을 진행하다보면, 지금 내가 어떤 단계를 수행해야하는지 헷갈릴때가 많습니다.

"지금이 어떤 단계인지"가 흐려지면, 이후 단계는 자연스럽게 무너집니다.

ce-router는 그걸 막기 위해 존재합니다.

md
---
name: ce-router
description: |
  사용자의 요청이 PLAN/WORK/REVIEW/COMPOUND 중 어느 단계인지 불명확하거나,
  승인된 PLAN 없이 구현/수정/테스트 실행을 요구하는 경우,
  Compound Engineering 루프 준수(PLAN→WORK→REVIEW→COMPOUND)와 승인 게이트를 강제한다.
  특히 "구현해줘/고쳐줘/리팩터링/테스트 돌려줘/배포해줘" 같은 요청에서 먼저 개입해
  (1) 현재 단계 (2) 승인 상태 (3) 다음으로 호출할 단계 스킬을 안내한다.
---

## 기본 규칙
- 모든 답변은 한국어로 작성한다.
- 코드 주석은 항상 한국어로 작성한다.
- 1인 개발 전제이며, 최종 결정 권한은 사용자에게 있다.
- AI는 설계→구현→테스트→문서화를 주도하되, 단계 전환은 사용자의 명시적 승인 후 진행한다.
  - 단, 사용자가 "중간 확인 없이 끝까지 진행"을 명시한 경우는 예외로 한다.

## 라우팅 목표
- 사용자 요청을 아래 중 정확히 1개 단계로 분류한다.
  - PLAN / WORK / REVIEW / COMPOUND
- 분류에 필요한 정보가 부족하면 질문은 1~3개만 한다(고레버리지 질문만).

## 승인 게이트(강제)
- 승인된 PLAN 없이 WORK로 진행하지 않는다.
- 승인된 PLAN이 있어도, 사용자가 단계 전환 승인을 하지 않았다면:
  - "다음 단계로 진행해도 되는지" 1문장으로 승인 요청 후 멈춘다.
- 사용자가 "중간 확인 없이 끝까지 진행"을 명시한 경우:
  - 단, Plan Drift(범위/정책/불변식 변경)가 발생하면 즉시 중단하고 1~3개 질문으로 승인 재확인을 한다.

## 출력 형식(강제)
1) 현재 상태 요약 (3~6줄)
   - 내가 이해한 작업 목표
   - 현재 단계(추정 또는 확인 필요)
   - 승인/위임 상태(확인 필요 여부)
2) 지금 필요한 단계 1개 + 이유
3) (필요한 경우에만) 질문 1~3개
4) 다음 단계 실행을 위한 입력 블록 템플릿
   - 사용자가 그대로 복붙해 채워 넣을 수 있게 제공
5) 마지막 한 줄: `CE 라우팅 완료`

5.1. 이 스킬이 만들어주는 효과

  • PLAN 없이 WORK로 튀는 상황을 원천적으로 차단합니다.
  • 단계 전환을 "분위기"가 아니라 "명시적 승인"으로 고정합니다.
  • 질문이 필요할 때도 1~3개로 제한해, 대화를 늘어뜨리지 않습니다.

6. ce-plan: 계획을 문서로 고정하는 단계

Plan 단계의 목적은 거창한 설계서가 아닙니다.

Work가 흔들리지 않게 만드는 최소한의 경계를 고정하는 것입니다.

md
---
name: ce-plan
description: |
  Compound Engineering의 PLAN 단계 산출물을 작성한다.
  구현/코드 수정/테스트 실행 없이, 목표/범위/DoD/결함 매트릭스/불변식/정책/체크리스트/테스트계획/리스크를 포함한 고품질 PLAN을 만든다.
  불확실하면 질문 1~3개만 한다.
---

## 모드 고정
- PLAN 전용.
- 구현/코드 수정/테스트 실행 금지.
- 증거 없는 추정 금지(근거 없으면 "가정"으로 명시하고 승인 항목으로 올린다).

## 입력(사용자 제공)
사용자가 아래 형식 중 가능한 만큼 제공한다. 누락이 크면 질문 1~3개만 한다.
- 프로젝트명:
- 스택/런타임:
- 작업 ID:
- 작업명:
- 현재 단계: PLAN
- SoT/참고 파일(선택): (경로 리스트)
- 해결 대상 결함/요구: (리스트)
- 고정 정책: (리스트)
- 범위 제한: 포함 / 제외
- 불변식: (리스트)
- (선택) 관련 코드 힌트: 파일 경로/모듈명/엔드포인트 등

## 품질 기준(내부 체크리스트)
- First Principles: 요구를 원자 단위로 재정의
- Invariants First: 불변식을 먼저 보호 전략으로 고정
- Failure-Oriented: 실패/예외/경계부터 설계
- Minimal Complexity: 가장 단순한 접근부터
- Tight Loop: 단계별 검증 루프를 촘촘히
- Observability: 로그/메트릭/에러 메시지 개선 포인트 포함

## 근거 규칙(강제)
- 가능하면 모든 주장/판단에 대해 "파일 경로 + 라인 범위" 근거를 붙인다.
- 근거를 아직 확인할 수 없으면:
  - (1) 미확인 근거
  - (2) 확인해야 할 파일 후보
  - (3) 확인 커맨드/방법
  을 PLAN에 명시한다.

## 출력 형식(강제)
아래 13개 섹션을 반드시 포함한다(순서 유지).

1) 목표/범위/비범위
2) 결함(또는 요구) 매트릭스
3) 불변식 보호 전략
4) 정책 결정 테이블
5) 완료 기준(DoD: 측정 가능)
6) 변경 대상 파일 후보 + 이유
7) 단계별 Work 체크리스트(W1~Wn, 단계별 검증 커맨드)
8) 테스트 계획(Red→Green 분리, 정상/실패/경계)
9) 리스크/회귀(P1/P2/P3) + 대응
   - P1: 데이터/보안/크래시/치명 회귀
   - P2: 내구성/중요 품질/사용성 큰 영향
   - P3: 문서/정리/개선(후속 가능)
10) Plan Drift 규칙(중단/승인 조건)
11) Review 우선순위 기준
12) Compound 후보(최소 1개)
13) 사용자 승인 필요 항목(1~3개)

### 최상단 요약(필수)
- 문서 맨 위에 "핵심 요약 5줄 이내"를 붙인다.

### 최하단 센티넬(필수)
- 마지막 한 줄: `PLAN 작성 완료 — WORK 진행 승인 요청`

6.1. 이 스킬이 만들어주는 효과

  • 목표/범위/비범위가 문서로 남아, 논쟁이 줄고 합의가 빨라집니다.
  • DoD(완료 기준)가 생겨 "끝"을 합의할 수 있습니다.
  • 실패/예외/경계를 먼저 설계하도록 강제해, 뒷북 디버깅 비용이 줄어듭니다.

7. ce-work: 실행을 체크리스트-검증-기록으로 묶기

Work 단계에서 가장 흔한 문제는 두 가지입니다.

  • 계획을 벗어났는데도 계속 진행하는 것
  • 검증을 했는데도 근거가 남지 않는 것

ce-work는 이 두 가지를 동시에 잡는 쪽에 초점이 있습니다.

md
---
name: ce-work
description: |
  승인된 PLAN을 기준으로 WORK 단계를 수행한다.
  체크리스트 1항목 완료→검증(가능한 범위)→의미 있는 커밋을 기본 단위로 강제하며,
  Work Log를 남긴다. Plan Drift 발생 시 즉시 중단하고 승인 요청한다.
---

## 사전조건(게이트)
- 승인된 PLAN이 없으면 WORK를 진행하지 않는다.
  - 대신: 필요한 정보 1~3개 질문 → 또는 $ce-plan 실행을 안내한다.
- 사용자가 "중간 확인 없이 끝까지 진행"을 명시한 경우만 예외로 연속 진행한다.
  - 단, Plan Drift 발생 시에는 즉시 중단하고 승인 재확인을 한다.

## 기본 규칙
- 모든 답변은 한국어.
- 코드 주석은 항상 한국어.
- PLAN 범위 밖 작업 금지.
- "의미 있는 완료 단위 커밋" 원칙 강제(커밋 메시지: 무엇/왜 포함).

## 입력(사용자 제공)
- 작업 ID:
- 작업명:
- 현재 단계: WORK
- 승인된 PLAN: (문서 경로 또는 본문 요약 붙여넣기)
- (있으면) 브랜치/PR 전략:
- (프로젝트 루트 AGENTS.md 기준) 실행/테스트 커맨드:

## 진행 단위(강제)
1) 체크리스트 1항목 선택
2) 구현(PLAN 범위 내)
3) 검증(가능한 범위: 테스트/린트/타입체크/수동 시나리오)
4) 커밋(무엇/왜 포함)
5) Work Log 업데이트

## Plan Drift 처리(필수)
- 아래 중 하나라도 발생하면 "즉시 중단":
  - 범위 변경(포함/제외가 뒤바뀜)
  - 고정 정책 위반 가능성
  - 불변식 훼손 가능성
  - DoD 재정의 필요
- 중단 시 반드시 제공:
  - 변경 전/후
  - 변경 이유
  - 영향(P1/P2/P3)
  - 대안 1~2개
  - 사용자 승인 요청(1문장)

## Work Log(강제)
- WORK 종료 시 아래 중 최소 1개는 반드시 남긴다.
  - docs/plans/<작업id>-worklog.md 생성
  - 또는 docs/plans/<작업id>-plan.md 하단에 `## Work Log` 섹션 추가

### Work Log 최소 포함 항목
- 진행 요약(3~7줄)
- 실제 변경 파일 목록(최종)
- 체크리스트 진행 상황(완료 [x])
- 실행한 검증 커맨드와 결과(실행한 것만)
- 커밋 해시 또는 PR 번호/링크
- Work 종료 3줄:
  - 이번 Work에서 완료된 체크리스트 항목:
  - 지금 상태에서 통과한 검증:
  - Review에서 집중적으로 봐야 할 위험 지점(있으면):

## 출력 형식(권장, 운영용)
- 이번 턴에서 완료한 체크리스트 항목
- 변경 파일 목록 + 핵심 변경 이유
- 실행한 검증 커맨드/결과
- Work Log 업데이트 요약
- 다음 체크리스트 제안
- 마지막 한 줄: `WORK 진행 상태 공유 완료 — 다음 단계 승인 요청`

7.1. 이 스킬이 만들어주는 효과

  • 작업을 "한 번에 크게"가 아니라 "작게 완료"로 쪼개서, 되돌리기 쉬운 단위로 만듭니다.
  • Plan Drift를 즉시 멈추게 하여, 늦게 발견되는 범위 확장을 줄입니다.
  • Work Log를 남기게 강제해, 다음 작업의 진입 비용을 낮춥니다.

8. ce-review: 리뷰를 '정렬'로 바꾸기

실제로 작업을 진행하고 Review를 통해 문제점이 있는지 파악합니다.

중요한건 P1/P2/P3로 이슈를 분리한다는 것 입니다.

이슈 분류 기준은 아래와 같습니다. (아래 스킬 프롬프트에도 나와있습니다.)

  • P1: 반드시 지금 수정(데이터/보안/크래시/치명 회귀)
  • P2: 가능하면 이번에 수정(사용성/내구성/중요 품질)
  • P3: 문서/정리/개선(후속 가능)
md
---
name: ce-review
description: |
  WORK 이후 REVIEW 단계를 수행한다.
  자기 PR 리뷰를 선행하고, 버그/엣지/리스크/회귀/가독성 순으로 점검하며
  P1/P2/P3로 이슈를 분류하고, 이번 PR에서 처리 범위를 사용자가 결정할 수 있게 요약한다.
---

## 입력
- 작업 ID:
- 작업명:
- 현재 단계: REVIEW
- 승인된 PLAN(경로 또는 요약):
- 변경 요약(가능하면):
- 커밋/PR 식별자(가능하면):
- 실행한 검증 결과(가능하면):

## 리뷰 우선순위(강제)
1) 버그 가능성 / 엣지 케이스
2) 리스크(보안, 데이터 손상, 성능, 운영)
3) 회귀 가능성(기존 기능 영향)
4) 가독성/유지보수성

## 이슈 분류 기준(강제)
- P1: 반드시 지금 수정(데이터/보안/크래시/치명 회귀)
- P2: 가능하면 이번에 수정(사용성/내구성/중요 품질)
- P3: 문서/정리/개선(후속 가능)

## 근거 규칙(강제)
- 가능하면 "파일 경로 + 라인 범위"로 근거를 붙인다.
- 근거 확인이 안 되면 "근거 미확인"으로 표기하고, 확인해야 할 파일/라인 후보를 적는다.

## 출력 형식(강제)
1) 변경 요약(3~7줄)
2) DoD 충족 여부 체크(PLAN의 DoD 항목별)
3) P1 / P2 / P3 이슈 리스트
   - 각 항목: 증상 / 영향 / 재현 또는 조건 / 근거(파일:라인) / 권장 수정
4) 추가 테스트/관측 포인트(정상/실패/경계)
5) 사용자 결정 필요 항목(1~3개)
6) 마지막 한 줄: `REVIEW 완료 — 다음 단계(COMPOUND 또는 추가 WORK) 승인 요청`

8.1. 이 스킬이 만들어주는 효과

  • 우선순위를 버그/리스크/회귀/가독성 순으로 고정해, 리뷰 품질이 흔들리지 않습니다.
  • P1/P2/P3로 분류되어, "이번 사이클에서 어디까지 고칠지" 결정을 쉽게 합니다.
  • 근거를 파일 경로/라인으로 남기게 하여, 재검토 비용을 줄입니다.

9. ce-compound: 작업을 자산으로 바꾸는 단계

마지막 단계가 없으면, 루프는 결국 "열심히 한다" 수준에서 멈춥니다.

ce-compound는 여기서 한 번 더 밀어붙입니다.

md
---
name: ce-compound
description: |
  COMPOUND 단계를 수행한다.
  매 작업 종료 시 다음 작업을 더 쉽게 만드는 축적물(테스트/문서/가드레일/규칙/관측성) 최소 1개를 남긴다.
  "자동으로 잡히는가?" 자문에 답하고, 아니면 더 쉽게 찾게 만드는 문서/로그/체크리스트를 남긴다.
---

## 입력
- 작업 ID:
- 작업명:
- 현재 단계: COMPOUND
- 최종 변경 내용 요약:
- 남길 축적물 후보(있으면):

## 강제 규칙
- 축적물 최소 1개는 반드시 제안한다(가능하면 즉시 추가 가능한 형태로).
- 아래 질문에 반드시 답한다:
  - 같은 문제가 다시 생기면, 다음엔 테스트/규칙/가드레일이 자동으로 잡아줄까?
  - 아니라면, 다음에 더 쉽게 찾게 무엇을 남길까?

## 산출물 권장 경로
- docs/solutions/<slug>.md (권장)
- 또는:
  - 회귀 테스트 추가
  - AGENTS.md 규칙 강화(짧고 강한 규칙)
  - 리뷰 체크리스트 업데이트
  - 관측성 개선(로그/에러 메시지/트레이싱 포인트)

## 출력 형식(강제)
1) 축적물 후보 1~3개(우선순위)
2) 그중 최소 1개는 "바로 추가 가능한 형태"
   - 파일 경로 제안 + 문서/테스트 스켈레톤
3) 기대 효과(다음 작업이 왜 쉬워지는지)
4) 사용자 승인 필요 항목(1~3개)
5) 마지막 한 줄: `COMPOUND 완료 — Repeat 여부 승인 요청`

9.1. 이 스킬이 만들어주는 효과

  • 같은 문제가 다시 생길 때 "자동으로 잡히는가"를 강제합니다.
  • 최소 1개의 축적물을 남기게 하여, 다음 작업이 더 빨라지게 만듭니다.
  • 문서/테스트/규칙/관측성 중 하나라도 남기면, 실수 재발 비용이 내려갑니다.

10. 결론

제가 이 구조를 좋아하는 이유는 명확합니다.

  • 루프가 사람을 훈련시키는 게 아니라, 시스템이 사람을 보호합니다.
  • 실행 결과가 아니라 "증거"가 남습니다.
  • 작업이 끝날 때마다 다음 작업이 쉬워집니다.

Plan → Work → Review → Compound는 단계 이름이 아니라,

승인과 검증과 재발 방지를 파일로 고정하는 방법입니다.