긴 작업을 스킬로 쪼개기: 사람 확인 지점을 넣는 기준 세 가지
상담 메모부터 견적·안내 메일까지 한 번에 시키지 않고 지휘 스킬과 단계별 스킬로 나누는 방법. 어디서 사람이 확인하고 넘어갈지 정하는 기준과 SKILL.md 예시를 담았습니다.

상담 메모를 붙여 넣고 이렇게 부탁하는 장면을 떠올려 보세요. "이 고객 정리해서 견적 내고, 안내 메일이랑 제안서까지 만들어 줘." 결과는 한 번에 나옵니다. 그런데 읽어 보면 교육 인원이 메모와 다르고, 그 인원으로 계산한 견적과 메일과 제안서가 전부 같은 숫자를 따라 틀려 있어요. 다음에 같은 부탁을 하면 이번엔 메일 구성이 또 달라져 있고요.
이 글은 이런 긴 일을 지휘하는 스킬 하나와 단계별 스킬 여러 개로 나누는 방법을 다룹니다. 그리고 그 사이 어디에서 사람이 확인하고 넘어가야 하는지 기준 세 가지를 정리합니다. 예시는 1인 교육 사업자의 "문의 → 견적 → 안내 메일" 흐름으로 들었습니다. 제가 실제로 운영하는 흐름이 아니라 설명을 위해 만든 가상 예시예요.
한 번에 시키면 생기는 세 가지 문제
중간 단계가 틀려도 끝까지 갑니다. 긴 요청은 앞 단계 결과를 뒤 단계가 그대로 받아 씁니다. 고객 정리에서 인원을 20명이 아니라 12명으로 읽으면 견적, 메일, 제안서가 모두 12명 기준으로 나옵니다. 마지막 결과물만 보면 어디서 틀렸는지 찾기도 어렵습니다.
결과가 매번 달라집니다. "메일 써 줘"라는 말에는 형식이 없어서 AI가 그때그때 구성을 새로 짭니다. 어제는 가격을 표로 넣고 오늘은 문장으로 넣는 식이에요. 받는 고객 입장에서는 같은 곳에서 온 메일이 매번 다르게 보입니다.
사용량도 대화가 길수록 늘어납니다. Claude Code 비용 문서에 따르면 Claude Code는 요청할 때마다 대화 전체를 함께 보냅니다. 이미 읽은 부분은 캐시 단가로 다시 읽어서 처음보다 쌉니다. 그래도 긴 대화에서는 한 줄짜리 질문에도 그 대화 분량의 사용량이 듭니다. 한 대화에서 모든 단계를 이어 가면 제안서를 쓰는 요청에도 상담 메모 원문과 앞 단계의 시행착오가 계속 실려요. 틀린 걸 고치려고 같은 대화에서 처음부터 다시 시키면 그 위에 또 쌓입니다.
셋 다 원인이 같습니다. 단계 사이에 멈춰서 확인할 자리가 없고 단계마다 정해진 형식이 없다는 점입니다.
구조: 지휘 스킬 하나와 단계별 스킬
스킬은 AI에게 줄 작업 설명서를 파일로 저장해 둔 것입니다. Claude Code 스킬 문서의 기본 형태는 이렇습니다.
- 스킬 하나는 폴더 하나이고 그 안에
SKILL.md가 있습니다. 프로젝트 폴더의.claude/skills/<스킬이름>/SKILL.md에 두면 그 프로젝트에서, 홈 폴더의~/.claude/skills/<스킬이름>/SKILL.md에 두면 이 컴퓨터의 모든 프로젝트에서 쓸 수 있습니다. - 파일 맨 위
---사이에 설정을 적고 그 아래에 지시를 씁니다. 가장 중요한 설정은description입니다. Claude는 이 설명을 보고 언제 이 스킬을 쓸지 정합니다. - 평소에는 스킬 이름과 설명만 컨텍스트에 올라가고 본문은 쓸 때 불러옵니다. 그래서 긴 절차를 스킬로 옮겨 두면 그 절차를 쓰지 않는 대화는 가벼워집니다. 한 번 불러온 본문은 그 대화의 다음 턴에도 남아 있습니다.
- 폴더 이름이 곧 명령이 됩니다(설정의
name은 목록에 보이는 이름일 뿐입니다)..claude/skills/quote-draft/라면/quote-draft로 직접 부를 수 있고 요청이 설명과 맞으면 Claude가 알아서 불러 쓰기도 합니다. - 폴더에 템플릿이나 스크립트 같은 보조 파일을 함께 둘 수 있습니다. 문서는
SKILL.md를 500줄 아래로 유지하고 자세한 참고 자료는 따로 빼라고 권합니다.
긴 일을 나눌 때는 이 스킬을 두 종류로 씁니다.
- 단계별 스킬. 한 가지 일만 합니다. 읽을 파일(입력)과 만들 파일(출력)이 정해져 있습니다. 예를 들어 견적 스킬은 "고객 정리 파일과 가격표를 읽어 견적 파일 하나를 만든다"에서 끝납니다.
- 지휘 스킬. 직접 일하지 않고 순서만 정합니다. 어떤 단계를 어떤 순서로 부르는지, 어디서 멈추고 사람에게 물어볼지를 적어 둡니다.
단계 사이는 대화가 아니라 파일로 주고받게 합니다. 이렇게 하면 중간 결과를 사람이 열어 볼 수 있고 틀린 단계 하나만 다시 돌릴 수 있습니다. 대화가 길어져 앞부분이 요약돼도 파일은 그대로 남아 있고요. Claude Code에서는 스킬 설정에 context: fork를 넣어 별도 서브에이전트에서 돌리는 방법도 있습니다. 이때 그 에이전트는 지금까지의 대화를 보지 못하니 파일로 넘기는 방식이 더 중요해집니다. 다만 이 방식은 기본이 백그라운드 실행이라 결과가 나중에 도착합니다. 단계가 끝난 뒤 사람 확인을 기다려야 하는 흐름이라면 background: false를 함께 넣어 그 자리에서 끝나길 기다리게 하는 편이 맞습니다.
Codex에도 같은 개념이 있습니다
Codex도 같은 SKILL.md 형식의 스킬을 씁니다. Codex 스킬 문서에 따르면 두 도구 모두 Agent Skills 공개 표준을 따르고 Codex에서는 name과 description이 필수입니다. 저장 위치는 프로젝트의 .agents/skills/나 홈 폴더의 ~/.agents/skills/예요. Codex CLI나 IDE 확장에서는 $를 입력하거나 /skills로 스킬을 직접 부르고 ChatGPT 데스크톱 앱에서는 사이드바의 Skills에서 프로젝트에 만들어 둔 스킬을 볼 수 있습니다. 같은 문서의 권장 사항에도 "스킬 하나는 한 가지 일에 집중한다", "입력과 출력을 분명히 적는다"가 들어 있습니다.
Codex 사용자 지정 문서는 매번 적용할 안내는 AGENTS.md에, 반복하는 절차는 스킬에 두라고 나눕니다. Claude Code의 CLAUDE.md와 스킬 관계와 같은 구조입니다(에이전트 메모리 파일).
사람 확인 지점은 어디에 두나요
단계를 나눴다고 모든 단계 뒤에 멈출 필요는 없습니다. 매번 멈추면 사람이 다 하는 것과 다르지 않거든요. 아래 세 가지 중 하나에 해당하는 곳에만 확인 지점(게이트)을 둡니다.
- 사람의 판단이 필요한 곳. 가격, 할인, 일정 약속, 메일의 말투처럼 틀렸을 때 책임이 사람에게 돌아오는 결정입니다. AI가 초안은 만들 수 있어도 "이 고객에게 이 가격을 약속한다"는 결정은 사람이 해야 합니다.
- 다음 단계가 이 결과에 기대는 곳. 고객 정리처럼 뒤의 모든 단계가 받아 쓰는 결과는 여기서 틀리면 뒤가 다 틀립니다. 앞에서 한 번 보는 게 끝에서 세 문서를 고치는 것보다 쌉니다.
- 자동으로 가져올 수 없는 정보를 사람이 보태야 하는 곳. 통화로만 들은 예산 범위, 지난번에 이 고객과 나눈 이야기처럼 파일 어디에도 없는 정보입니다. 이걸 빼고 진행하면 AI는 빈칸을 그럴듯하게 채웁니다.
여기에 기준이 하나 더 있습니다. 쓰기·발송·게시처럼 되돌리기 어려운 동작 앞에서는 무조건 멈춥니다. Claude Code에는 되감기 기능이 있지만 체크포인트 문서가 설명하듯 Claude가 파일 편집 도구로 고친 파일만 되돌립니다. 명령이나 스크립트가 바꾼 파일, 백그라운드 서브에이전트가 고친 파일도 되감기에 들어가지 않아요. 이미 보낸 메일이나 외부 시트에 써 넣은 행은 말할 것도 없고요(체크포인트·되감기).
이런 동작은 바로 실행하지 말고 먼저 미리 보기(드라이런)를 시킵니다.
지난주 문의 전체를 고객 목록 시트에 추가할 거야.
먼저 5건만 어떤 칸에 어떤 값이 들어갈지 표로 보여 주고, 아직 시트에는 쓰지 마.
내가 "진행"이라고 하면 그때 전체를 써.
Claude Code 스킬에는 이 원칙을 설정으로 걸어 둘 수도 있습니다. 설정에 disable-model-invocation: true를 넣으면 그 스킬은 사람이 /이름을 입력할 때만 실행되고 Claude가 스스로 부르지 못합니다. 스킬 문서도 배포나 메시지 발송처럼 부수 효과가 있는 일에 이 설정을 쓰라고 안내합니다. Codex에는 스킬 폴더의 agents/openai.yaml에 allow_implicit_invocation: false를 두는 설정이 있습니다. 다만 이건 요청 내용을 보고 알아서 고르는 것만 막고 $스킬이름으로 직접 부르는 건 그대로 됩니다. 두 설정이 막는 범위가 다르니 Codex에서는 스킬 본문에도 "보내기 전에 멈추고 사람에게 확인받는다"를 분명히 적어 두는 편이 안전합니다.
템플릿은 복사해서 채우게 합니다
매번 결과 형식이 달라지는 문제는 "이 형식으로 써 줘"라고 설명하는 것만으로는 잘 안 잡힙니다. 설명은 해석할 여지가 남으니까요. 더 확실한 방법은 템플릿 파일을 복사한 다음 빈칸만 채우게 하는 것입니다.
<!-- templates/reply.md -->
제목: [{{교육명}}] 문의 주셔서 감사합니다
{{담당자}}님, 안녕하세요.
문의 주신 내용으로 정리했습니다.
- 대상과 인원: {{대상}} {{인원}}명
- 희망 일정: {{희망일정}}
- 예상 비용: {{총액}} (부가세 {{부가세표시}})
자세한 구성은 첨부한 제안서에 담았습니다.
{{추가안내}}
감사합니다.
{{서명}}
지시는 "templates/reply.md를 복사해서 {{ }} 칸만 채워. 제목, 순서, 서명은 바꾸지 마"처럼 줍니다. 새 문서를 쓰는 게 아니라 정해진 틀의 칸을 채우는 일이 되니 구성이 흔들릴 여지가 줄어요. 채울 값이 없는 칸은 비워 두지 말고 [확인 필요]로 남기게 하면 사람이 볼 곳도 바로 보입니다.
예시: 문의에서 안내 메일까지 스킬 5개, 게이트 3개
예를 들어 기업 대상 AI 교육을 혼자 운영하는 강사가 있다고 해 보겠습니다. 문의가 들어오면 상담 메모를 남기고, 견적을 내고, 안내 메일과 제안서를 보냅니다. 이 흐름을 이렇게 나눌 수 있습니다.
| 순서 | 스킬 | 읽는 파일 | 만드는 파일 | 끝나고 멈추나 |
|---|---|---|---|---|
| 1 | inquiry-intake | memo.txt | customer.md | 게이트 1: 인원·일정이 맞는지, 메모에 없는 예산·지난 대화를 사람이 보탬 (기준 2·3) |
| 2 | quote-draft | customer.md, data/price-table.csv | quote.md | 게이트 2: 가격·할인을 사람이 확정 (기준 1·2) |
| 3 | reply-draft | customer.md, quote.md, templates/reply.md | reply.md | 바로 다음 단계로 |
| 4 | proposal-draft | customer.md, quote.md, templates/proposal.md | proposal.md | 게이트 3: 메일·제안서의 말투와 약속 문장 확인 (기준 1, 보내기 전) |
| 5 | mail-handoff | reply.md, proposal.md | 메일 초안 | 사람이 직접 실행하고 보내기 버튼도 사람이 누름 |
3번 뒤에 멈추지 않는 이유는 메일과 제안서를 한 번에 같이 보는 게 편하고 둘 다 게이트 2에서 확정된 값만 옮겨 적기 때문입니다. 반대로 게이트 1을 건너뛰면 표의 나머지 줄이 전부 틀린 값을 따라갑니다.
2번 견적은 계산이 들어가는 단계라서 AI가 암산하게 두지 않고 스킬 폴더에 계산 스크립트를 넣어 두는 편이 안전합니다. 이 부분은 AI 계산 실수 막기에서 따로 다룹니다. 문의마다 cases/<날짜-고객>/ 폴더를 만들어 파일을 모으는 식의 폴더 설계는 AI가 알아서 찾는 작업 폴더 만들기를 참고하세요.
단계별 스킬 뼈대: reply-draft
3번 스킬의 SKILL.md입니다. name은 Codex에서 필수라서 두 도구에서 모두 쓸 수 있게 넣었습니다. Agent Skills 규격상 name은 소문자·숫자·하이픈만 쓰고 폴더 이름과 같아야 하니 폴더도 reply-draft로 만듭니다.
---
name: reply-draft
description: 확정된 고객 정리와 견적으로 문의 안내 메일 초안을 만든다. 안내 메일, 견적 메일 초안 요청에 사용. 메일을 보내지는 않는다.
---
# 안내 메일 초안
## 입력 (하나라도 없으면 만들지 말고 멈춰서 알린다)
- cases/<문의폴더>/customer.md
- cases/<문의폴더>/quote.md (맨 위에 "상태: 확인됨"이 있어야 한다)
## 출력
- cases/<문의폴더>/reply.md
## 순서
1. templates/reply.md를 cases/<문의폴더>/reply.md로 복사한다. 새 문서를 처음부터 쓰지 않는다.
2. 복사한 파일의 {{ }} 칸만 채운다. 제목, 순서, 인사말, 서명은 바꾸지 않는다.
3. 금액, 날짜, 인원은 quote.md와 customer.md에 있는 값만 옮긴다. 없는 값은 [확인 필요]로 둔다.
4. 할인, 환불, 일정 보장처럼 quote.md에 없는 약속은 새로 쓰지 않는다.
5. 끝나면 채운 칸과 [확인 필요]로 남긴 칸을 목록으로 보여 준다.
입력 파일이 없을 때 멈추라는 줄이 중요합니다. 이 줄이 없으면 AI가 없는 견적을 짐작해 메일 칸을 채워 버릴 수 있습니다.
지휘 스킬 만들기 요청문
지휘 스킬은 직접 쓰기보다 Claude Code나 Codex에 만들어 달라고 하는 편이 빠릅니다. 단계별 스킬 다섯 개가 폴더에 있다는 전제에서 이렇게 요청합니다.
.claude/skills/ 에 inquiry-flow 라는 지휘 스킬을 만들어 줘.
(Codex라면 .agents/skills/ 에 만든다.)
이 스킬은 직접 문서를 쓰지 않고 아래 순서로 단계별 스킬을 부르기만 한다.
1. inquiry-intake → 끝나면 customer.md를 보여 주고 멈춘다.
"인원·일정이 맞는지, 메모에 없는 예산이나 지난 대화가 있는지" 물어본다.
2. 내가 보탠 내용을 customer.md에 반영하고 맨 위에 "상태: 확인됨"을 적은 뒤 quote-draft.
끝나면 quote.md를 보여 주고 멈춘다. 가격과 할인은 내가 확정한다.
3. 내가 "진행"이라고 하면 quote.md 맨 위에 "상태: 확인됨"을 적고
reply-draft, proposal-draft를 차례로 실행한다.
4. reply.md와 proposal.md를 보여 주고 멈춘다. 말투와 약속 문장을 내가 확인한다.
5. 확인이 끝나면 "/mail-handoff <문의폴더>를 직접 입력하세요"라고만 안내한다.
메일 초안을 올리거나 보내는 일은 이 스킬이 하지 않는다.
규칙
- 멈추는 곳에서는 내가 "진행"이라고 답하기 전에 다음 단계로 가지 않는다.
- 앞 단계 파일이 없거나 "상태: 확인됨"이 없으면 다음 단계를 실행하지 말고 알린다.
- 단계가 끝날 때마다 만든 파일 경로와 한 줄 요약만 보여 준다.
- description은 "문의 한 건을 고객 정리부터 메일 초안까지 순서대로 처리할 때 사용"으로 적는다.
5번 mail-handoff는 도구마다 잠그는 자리가 다릅니다. Claude Code에서는 SKILL.md 설정에 disable-model-invocation: true를 넣습니다. 그러면 지휘 스킬이 순서를 착각해도 Claude가 이 스킬을 스스로 부르지 못합니다. 사람이 /mail-handoff를 입력해야만 진행됩니다. Codex에서는 agents/openai.yaml에 allow_implicit_invocation: false를 두고 앞에서 말했듯 본문에도 보내기 전에 멈추라는 지시를 적어 둡니다. 어느 쪽이든 이 설정은 스킬 호출을 막는 것이지 다른 경로의 발송까지 막아 주지는 않으니 마지막 보내기 버튼은 사람이 누르는 구조로 둡니다.
처음부터 쪼개지 마세요
여기까지 읽으면 스킬 다섯 개부터 만들고 싶어지는데요. 순서는 반대가 낫습니다.
- 한 번은 대화로 같이 해 봅니다. 문의 한 건을 놓고 "먼저 고객 정리만 해 줘", "이제 견적" 하는 식으로 한 단계씩 진행합니다. 어디서 AI가 헷갈렸는지, 어디서 내가 정보를 보태야 했는지가 이때 보입니다. 게이트 자리는 대부분 여기서 정해져요.
- 잘 된 흐름을 스킬로 저장합니다. 같은 대화에서 "방금 한 과정을 단계별 스킬과 지휘 스킬로 정리해 줘. 내가 중간에 고친 부분은 규칙으로 넣어 줘"라고 요청합니다. Claude Code 스킬 문서도 같은 지시나 절차를 반복해서 붙여 넣고 있을 때 스킬을 만들라고 권합니다. Codex에서는 같은 요청을 하거나 기본 제공되는
$skill-creator를 불러 만들 수 있습니다. 참고로 Codex의 Record & Replay는 성격이 다른 기능입니다. macOS에서 Computer Use를 켜고 Mac 화면에서 하는 작업을 한 번 보여 주면 그 시연으로 스킬 초안을 만듭니다. 이 글처럼 파일을 주고받는 절차보다는 화면을 눌러 가며 하는 반복 작업에 맞습니다. - 다섯 번쯤 돌려 보며 고칩니다. 새 문의가 올 때마다 스킬로 돌리고 틀린 곳을
SKILL.md에 한 줄씩 보탭니다. 이때 새 세션에서 돌려 보는 게 중요합니다. 스킬 문서는 스킬을 만든 대화에 남아 있는 맥락이 지시문의 빈틈을 가려 버린다고 설명합니다. 만든 대화에서는 잘 되던 스킬이 새 세션에서는 헷갈리는 경우가 여기서 드러납니다.
다섯 번은 정해진 숫자가 아니라 감각입니다. 몇 번 돌려도 새로 고칠 게 안 나오면 그때 스킬이 자리를 잡았다고 보면 됩니다.
정리
- 긴 일은 지휘 스킬 하나와 한 가지 일만 하는 단계별 스킬로 나누고 단계 사이는 파일로 주고받습니다.
- 확인 지점은 사람의 판단이 필요한 곳, 뒤 단계가 기대는 곳, 사람이 정보를 보태야 하는 곳에만 둡니다.
- 쓰기·발송·게시 앞에서는 무조건 멈추고 먼저 미리 보기를 시킵니다.
- 형식은 설명하지 말고 템플릿을 복사해서 채우게 합니다.
- 처음에는 대화로 한 번 해 보고 잘 된 흐름을 저장한 뒤 새 세션에서 여러 번 돌려 보며 고칩니다.
다음 단계
- 스킬·MCP·서브에이전트가 각각 무엇인지: Claude Code MCP, Skills, 서브에이전트 차이
- 항상 지킬 규칙은 스킬이 아니라 여기에: CLAUDE.md 작성법
- 견적처럼 계산이 들어가는 단계: AI 계산 실수 막기: 계산은 코드로, 검증은 따로
- 단계별 파일을 어디에 둘지: AI가 알아서 찾는 작업 폴더 만들기
- AI를 부르지 않아도 되는 반복 작업 가르기: 모든 걸 AI에게 시키지 않기
출처와 확인 (2026-09-25)
- Claude Code: Extend Claude with skills (SKILL.md 위치, description, 폴더 이름과 명령, 보조 파일, disable-model-invocation, context: fork, 새 세션에서 평가)
- Claude Code: Manage costs effectively (긴 대화에서 사용량이 느는 이유, 캐시 단가)
- Claude Code: Checkpointing (되감기가 추적하는 범위, Bash·백그라운드 서브에이전트 변경 제외)
- Codex: Build skills (SKILL.md 필수 항목, .agents/skills 위치, $·/skills 호출, $skill-creator, allow_implicit_invocation, 권장 사항)
- Codex: Customization (AGENTS.md와 스킬의 역할)
- Agent Skills specification (name 규칙)
- Codex: Record & Replay (시연으로 스킬 만들기)



