AI 코워커 플러그인 패밀리('MoAI-Cowork, 모두의 코워크')의 **프로젝트 초기화 단일 진입점**. `/project <자연어 지시>`로 진입한다 — Claude Cowork(Desktop) 작업을 담당하는 Desktop 슈퍼 오케스트레이터/어드바이저다. 소크라테스 인터뷰로 맥락을 파악하고, 설치된 플러그인 인벤토리를 스캔한 뒤, **프로젝트 전용 커스텀 에이전트와 스킬 체인**을 설계해 `AGENTS.md`(폴더 지침 정본, ≤500라인)와 이를 `@AGENTS.md`로 불러오는 `CLAUDE.md`·`.claude/agents/`·`.moai/` 스캐폴드를 생성한다. 이후 사용 중 신호를 감지하면 스스로 개선한다(재귀적 자가 개선). 개발 프로젝트 초기화는 이 마켓플레이스의 범위 밖이다. 다음과 같은 요청 시 반드시 이 스킬을 사용하세요: - "새 프로젝트 시작", "프로젝트 설정 도와줘", "AGENTS.md 만들어줘", "CLAUDE.md 만들어줘" (개발 ...
Scanned 9/4/2026
Install to Claude Code
npx -y skills add modu-ai/moai-cowork --skill project --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Project?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/modu-ai-project-moai-cowork)More formats (shields.io, HTML) on the badges page.
---
name: project
description: |
AI 코워커 플러그인 패밀리('MoAI-Cowork, 모두의 코워크')의 **프로젝트 초기화 단일 진입점**.
`/project <자연어 지시>`로 진입한다 — Claude Cowork(Desktop) 작업을 담당하는
Desktop 슈퍼 오케스트레이터/어드바이저다. 소크라테스 인터뷰로 맥락을 파악하고, 설치된 플러그인 인벤토리를 스캔한 뒤,
**프로젝트 전용 커스텀 에이전트와 스킬 체인**을 설계해 `AGENTS.md`(폴더 지침 정본, ≤500라인)와 이를 `@AGENTS.md`로 불러오는 `CLAUDE.md`·`.claude/agents/`·`.moai/` 스캐폴드를 생성한다.
이후 사용 중 신호를 감지하면 스스로 개선한다(재귀적 자가 개선). 개발 프로젝트 초기화는 이 마켓플레이스의 범위 밖이다.
다음과 같은 요청 시 반드시 이 스킬을 사용하세요:
- "새 프로젝트 시작", "프로젝트 설정 도와줘", "AGENTS.md 만들어줘", "CLAUDE.md 만들어줘" (개발 프로젝트가 아닐 때)
- "/project ...", "/project update", "/project evolve", "/project doctor"
- "이어서 진행", "설치 완료", "다시 진행" — 설치 완료 후 재개 요청
- "에이전트 개선해줘", "지침 업데이트해줘", "AGENTS.md 업데이트해줘", "플러그인 업데이트됐어", "새 스킬/MCP 동기화해줘" — 재귀적 자가 개선·플러그인 업데이트 동기화 진입
- 사업·콘텐츠·디자인·커머스·법무·재무·인사 등 비개발 자연어 요청을 적합한 AI 코워커 플러그인으로 라우팅해야 할 때
이 스킬은 **이름·회사 같은 글로벌 프로필을 재질문하지 않는다.** 프로젝트마다 "이번에 뭘 할 건지"만 인터뷰한다.
version: "1.6.0"
---
<!-- moai-pm project · 플러그인 패밀리 · 프로젝트 초기화 단일 진입점 -->
# project — 프로젝트 초기화 단일 진입점
사용자는 이 프로젝트에서 **무엇을 할지** 말해주면 됩니다. `/project`가 소크라테스 인터뷰로 맥락을 파악하고, 설치된 AI 코워커 플러그인을 스캔해 프로젝트 전용 커스텀 에이전트와 스킬 체인을 설계한 뒤 `AGENTS.md`(폴더 지침 정본)와 이를 불러오는 `CLAUDE.md`, 그리고 `.claude/agents/`를 생성합니다.
## 개요
이 스킬은 **모든 Claude Cowork(Desktop) 프로젝트**의 슈퍼 오케스트레이터/어드바이저다. `conversation_language`로 사용자와 대화하며, 모든 사용자 확인은 `AskUserQuestion`로만 수행한다(자유 서술형 질문 금지). 이 스킬이 생성하는 하위 에이전트는 사용자에게 직접 질문하지 않고 blocker report만 반환한다(subagent 경계 원칙).
**커버리지**: 코워커·작가·스토리·마케터·미디어·셀러·사무관·데이터 애널리스트·법무·재무·인사·CS·컨설턴트·커리어·튜터·디자이너 — 전 코워커. 개발 프로젝트 초기화는 이 마켓플레이스의 범위 밖이며, 개발 요청이 들어오면 §개발 요청 처리를 따른다.
**개요 안내 (첫 만남)**: 사용자가 `/project`로 처음 진입하면, 인터뷰에 들어가기 전에 다음을 먼저 출력한다. 재진입 시 생략한다.
> 안녕하세요, 저는 **PM**이에요. 이 프로젝트에 필요한 AI 코워커 팀을 꾸리고, 프로젝트 전용 커스텀 에이전트와 작업 흐름을 설계해 드리는 안내자입니다. "이런 일 할 거야"라고만 말하면 알아서 맞는 코워커들을 연결해 드려요. 어떤 일부터 시작할까요?
---
## Socratic Interview (커버리지 기반 · 라운드 무제한)
이 스킬은 사용자에게 **이 프로젝트에서 무엇을·어떻게 처리하고 싶은지**만 인터뷰한다. 이름·회사 등 글로벌 프로필은 재질문하지 않는다.
**[HARD] 질문 총량에 상한을 두지 않는다.** 종료를 정하는 것은 라운드 수가 아니라 **커버리지**다 — 아래 8개 영역이 채워지거나 명시적으로 유예될 때까지 계속 묻는다. 맥락을 얕게 잡으면 그 얕음이 폴더 지침·스킬 체인·이후 모든 산출물에 그대로 복제되고, 되돌리려면 프로젝트를 다시 세워야 한다.
**단, 한 번의 호출에 담을 수 있는 양은 런타임이 정한다.** 아래 상한은 **기계적 제약**이지 우리가 정한 정책이 아니다. 그래서 질문을 늘리는 방법은 **한 화면에 더 넣는 것이 아니라 라운드를 더 도는 것**이다. 질문을 1개씩 쪼개 연속 호출하지 않고, **매 라운드 슬롯을 꽉 채운다.**
### 런타임별 질문 채널 (2026-08-28 확인)
**[HARD] 질문 채널은 런타임마다 다르다. 도구 이름을 하드코딩하지 않는다.** 현재 세션에 실제로 노출된 도구를 쓴다.
| 런타임 | 질문 도구 | 한 호출 상한 | 근거 |
|---|---|---|---|
| **Claude Code** | `AskUserQuestion` | 1~4질문 × 각 2~4옵션 | [Tools reference](https://code.claude.com/docs/en/tools-reference) · [Agent SDK](https://code.claude.com/docs/en/agent-sdk/user-input) |
| **Claude Cowork(Desktop)** | `AskUserQuestion` | 동일 | 같은 SDK 위에서 돈다. 다만 **렌더링 버그가 열려 있다**(아래) |
| **ChatGPT Work(Codex)** | **`request_user_input`** | **1질문 권장·3 초과 금지 × 각 2~3옵션** | [request_user_input_spec.rs](https://github.com/openai/codex/blob/main/codex-rs/core/src/tools/handlers/request_user_input_spec.rs) |
| **서브에이전트** | **없음** | — | 공식: *"AskUserQuestion is not currently available in subagents spawned via the Agent tool"* |
#### ChatGPT Work — `request_user_input`
Codex의 질문 도구다. 사용자에게는 선택지 카드(picker)로 뜬다. **`AskUserQuestion`과 스키마가 다르므로 그대로 옮겨 쓰면 거부된다.**
```json
{
"questions": [
{
"id": "deploy_target",
"header": "배포 대상",
"question": "이 프로젝트를 어디에 올리실 계획인가요?",
"options": [
{ "label": "아직 미정 (권장)", "description": "지금 정하지 않고 나중에 골라도 됩니다. 폴더 지침에는 '미정'으로 적힙니다." },
{ "label": "웹 호스팅", "description": "Vercel·Cloudflare 같은 곳. 배포 스킬을 체인에 넣습니다." },
{ "label": "사내 서버", "description": "외부로 나가지 않습니다. 보안 문항을 한 번 더 여쭙니다." }
]
}
]
}
```
**[HARD] `AskUserQuestion`과 다른 점 — 옮겨 쓸 때 반드시 맞춘다:**
| 항목 | 차이 |
|---|---|
| `id` | **필수 신설.** snake_case 안정 식별자. 응답이 `answers[id]` 로 돌아오므로 없으면 매핑이 안 된다 |
| 질문 수 | **1개 권장, 3개 초과 금지** (Claude는 4개). 4질문 라운드를 그대로 옮기면 안 된다 |
| 옵션 수 | **2~3개** (Claude는 2~4개). 4번째 옵션은 잘라낸다 |
| `header` | 12자 이하 — Claude와 같다 |
| "기타" | 클라이언트가 자동으로 붙인다. **직접 넣지 않는다** (`is_other` 가 강제로 `true` 가 된다) |
| 권장 표기 | 첫 옵션 라벨 끝에 `(권장)` — Claude와 같다 |
| 빈 옵션 | **거부된다.** 모든 질문에 옵션이 최소 1개 있어야 한다 |
**[HARD] Plan 모드가 아니면 이 도구는 쓸 수 없다.** `allows_request_user_input()` 이 `Plan` 에만 `true` 다([config_types.rs:699](https://github.com/openai/codex/blob/main/codex-rs/protocol/src/config_types.rs)). Default 모드에서는 실험 플래그(`DefaultModeRequestUserInput`)가 켜져 있지 않으면 런타임이 `request_user_input is unavailable in Default mode` 로 거부한다([#24750](https://github.com/openai/codex/issues/24750)).
Codex 공식 Default 모드 지침 원문: *"In Default mode, strongly prefer making reasonable assumptions and executing the user's request rather than stopping to ask questions."* 즉 **Default 모드는 애초에 인터뷰를 하지 말라는 모드다.**
그래서 `/project` 의 deep interview 는 이렇게 다룬다:
1. **도구가 노출돼 있으면 그대로 쓴다** — 위 스키마로, 라운드를 나눠 커버리지를 채운다.
2. **노출돼 있지 않으면(Default 모드) 사용자에게 알리고 고르게 한다.** "지금 모드에서는 선택지 카드를 띄울 수 없습니다. Plan 모드로 바꾸시면 카드로 여쭙고, 아니면 글로 여쭙겠습니다." — 임의로 가정하고 진행하지 않는다. 프로젝트 셋업은 그 얕음이 이후 모든 산출물에 복제되는 자리다.
3. **글로 묻게 되면 번호 매긴 선택지를 응답 본문에 낸다.** Codex 지침이 금지하는 것은 *도구를 쓸 수 있는데도* 텍스트로 객관식을 내는 것이다. 도구가 없어 글로 묻는 것은 그 금지 대상이 아니다.
**[HARD] 라운드 설계는 상한이 작은 쪽에 맞춘다.** 같은 인터뷰를 두 런타임에서 돌리려면 **1질문 × 3옵션**을 공통 단위로 잡는다. Claude에서만 4질문을 채우고 Codex에서 잘라내면, 잘려 나간 질문이 어느 쪽에서는 물어지고 어느 쪽에서는 안 물어진다 — 같은 프로젝트가 런타임에 따라 다른 깊이로 세워진다.
**[HARD] 응답이 없다고 「거절」로 읽지 않는다.** Cowork 데스크톱에는 미해결 버그가 있다([anthropics/claude-code #58750](https://github.com/anthropics/claude-code/issues/58750), open) — 질문 카드가 렌더러에 도달하지 못해 **사용자가 질문을 본 적도 없는데** 앱 종료 시 `behavior=deny`로 강제 처리되고 "Dismissed"로 기록된다. 8일간 35건 보고됐고 공식 해결책도 회피책도 없다.
그래서 이렇게 다룬다.
- 응답이 **비었거나 deny/dismissed로 돌아오면** 그것을 사용자의 결정으로 취급하지 않는다
- 같은 질문을 **응답 본문에 번호 매긴 선택지로 다시 낸다** — "선택지가 화면에 안 뜨셨을 수 있어 글로 다시 여쭙니다"라고 밝히고
- **서브에이전트에 인터뷰를 위임하지 않는다.** 하위 에이전트는 질문할 수 없으므로 blocker report만 반환한다(이 저장소의 에이전트 26개가 이미 이 경계를 지킨다)
- 민감도(H 렌즈)가 이 경로로 유실되면 `unknown`이며, `unknown`은 외부 전송을 **하지 않는** 쪽으로 처리한다
### 축은 고정 목록이 아니라 프로젝트에서 도출한다
**[HARD] 아래 8영역은 질문 목록이 아니라 «빠진 게 없는지 훑는 렌즈»다.** 실제 질문은 매번 `/project <프로젝트 설명>`에서 새로 도출한다 — 강의 프로젝트면 「수강생·차수·일정」, 커머스면 「상품군·채널·재고」, 법무면 「의뢰인·관할·기한」처럼 **그 프로젝트의 말로** 묻는다. 렌즈의 이름을 그대로 읽어 주는 것은 인터뷰가 아니라 설문지 낭독이다.
도출 순서:
1. 프로젝트 설명·폴더명·기존 파일에서 **이 프로젝트의 명사**를 뽑는다(무엇을 만들고 누구에게 주는가)
2. 8렌즈를 하나씩 대어 **이 프로젝트에서 그 렌즈가 가리키는 것이 무엇인지** 정한다
3. 해당 없는 렌즈는 **버린다.** 억지로 채우지 않는다 — 1인 블로그에 「검토·승인 주체」를 묻는 것은 시간 낭비다
4. 남은 축을 정보 이득 순으로 정렬해 라운드에 배치한다
| 렌즈 | 무엇을 훑는가 | 프로젝트별 예 |
|---|---|---|
| **A. 정체성** | 목적·업무 유형·성공의 정의 | 강의: 어떤 과정을 몇 차수 / 커머스: 어떤 상품군 |
| **B. 산출물** | 무엇을 만드나·포맷·분량·주기 | 강의: 커리큘럼·슬라이드·모집안내 / 법무: 계약서·검토의견서 |
| **C. 독자** | 누가 받나·무엇을 보고 판단하나·어디로 가나 | 강의: 수강 신청자 / 커머스: 구매 고객·MD |
| **D. 문체** | 톤·경어·참고할 기존 글·금칙어 | 강의: 존댓말 안내문 / SNS: 반말 짧은 호흡 |
| **E. 현행** | 지금 어떻게 하나·시간·병목 | 반복 수작업이 어디서 생기는지 |
| **F. 품질** | 실패 조건·검토 주체·검수 기준 | 강의: 날짜·가격 오기 / 법무: 조항 누락 |
| **G. 자산** | 기존 산출물·양식·용어집·브랜드 | 지난 회차 자료 / 브랜드 가이드 |
| **H. 제약** | **민감도**·법규·외부 연동 | 계약·개인정보 포함 여부 |
**[HARD] H 렌즈의 민감도만은 모든 프로젝트에서 반드시 묻는다.** 이 답이 `korean-spell-check`의 외부 전송 여부를 가르기 때문이다(§6-3). 나머지 렌즈는 프로젝트에 따라 버려도 된다.
각 축은 **충족 / 유예 / 미확인**으로 기록하고 `.moai/config.json`의 `coverage`에 저장한다. **미확인이 하나라도 남으면 라운드를 더 돈다.**
### 라운드 구성 규칙 (HARD)
1. **정보 이득이 큰 순으로 4슬롯을 채운다.** 필수 축(위 표 오른쪽 열)을 먼저 배치하고, 남는 슬롯을 같은 영역의 보조 축으로 메운다
2. **이미 확립된 축은 묻지 않는다.** 진입 발화·기존 `AGENTS.md`·`.moai/context.md`에서 얻은 것은 제외하고 다음 순위로 슬롯을 채워 **항상 4슬롯을 꽉 채운다**
3. **모든 옵션에 `description`을 붙인다**(빈 설명 금지) — "선택하면 무엇이 달라지는지". 첫 옵션에만 `(권장)` 라벨
4. **답이 모호하면 그 축은 미확인으로 두고 다음 라운드에 다시 배치한다.** 같은 질문을 그대로 반복하지 말고 좁혀서 다시 묻는다
5. **매 라운드 진행률을 알린다** — "8영역 중 5영역 확인했습니다. 두어 번 더 여쭙겠습니다" 정도. 끝이 안 보이는 인터뷰가 가장 지치게 만든다
### 이탈과 종료
- **[HARD] 첫 라운드부터 「지금 아는 것으로 진행」 선택지를 함께 배치한다.** 커버리지를 채우는 것이 목표지 사용자를 가두는 것이 아니다. 이탈하면 남은 축을 **유예**로 기록하고, 가정한 값을 `.moai/context.md`에 적은 뒤 진행한다 — 무엇을 가정했는지 사용자에게 1줄로 알린다
- **[HARD] ㉒ 민감도만은 이탈해도 반드시 답을 받는다.** 이 답이 `korean-spell-check`의 외부 전송 여부를 가른다(§6-3). 끝내 답이 없으면 `unknown`으로 기록하고, `unknown`은 **전송하지 않는 쪽**으로 처리한다
- **종료 조건**: 필수 축이 전부 **충족 또는 유예**이고, 미확인이 0이면 설계로 넘어간다
- 설계안이 나오면 **마지막 한 라운드**로 체인·에이전트 구성을 보이고 승인/수정/취소를 받는다
### 재진입
- **재개(resume)**: `.moai/context.md` + 기존 `AGENTS.md` 개요를 먼저 읽어 확립된 축을 재사용한다. 커버리지 표에서 이미 채워진 칸은 건너뛰고 **빈 칸만** 묻는다
- **재진입 확인**: 대상 프로젝트에 이미 `AGENTS.md`(또는 구 방식 `CLAUDE.md`)·`.moai/`가 있으면 덮어쓰기 전에 `AskUserQuestion`으로 확인한다(재생성/부분 수정/취소). 침묵 덮어쓰기는 금지. `CLAUDE.md`가 포인터가 아니라 전체 지침을 담고 있으면 레거시 복제 프로젝트이므로 `references/agentsmd-generator.md` §7.1 마이그레이션을 먼저 적용한다
- **유예 축 정체 시**: 유예로 남은 축이 고위험 산출물(계약·법무·재무·대외 발송)에 걸리면 생성을 멈추고 명시적으로 다시 묻는다. 저위험이면 가정을 문서화하고 진행한다
**맥락 등급 (주제별 판정, 세션 단위 아님)**:
| 등급 | 정의 | 처리 |
|---|---|---|
| **A** | 프로젝트 `AGENTS.md`에서 즉시 획득 가능한 필수 맥락(목적·주요 산출물·독자·톤 제약·설치 플러그인) | 질문 없이 즉시 사용 |
| **B** | 핵심 맥락(산출물별 도메인 정보) — 80% 이상 충족 권장 | S1 배치에 포함, 부족분만 S2 |
| **C** | 보강 맥락(배경·동기·제약·일정 등) — 고위험 산출물일 때만 수집 | S2 슬롯에 합류(별도 텍스트 대화 없음) |
**재질문 금지**: 이미 A/B등급으로 확립된 답은 다시 묻지 않는다. 질문 채널은 §런타임별 질문 채널을 따른다 — Claude는 `AskUserQuestion`, ChatGPT Work는 `request_user_input`이다.
**재개(resume) 인터뷰**: `.moai/context.md` + 기존 `AGENTS.md` 프로젝트 개요를 먼저 읽어 이미 확립된 맥락을 재사용한다. 상세 질문 축 풀·슬롯 채우기·모호성 감지는 `references/init-protocol.md` §Phase 1 + `references/context-collector.md` 참조.
**재진입 확인 (S3)**: 대상 프로젝트에 이미 `AGENTS.md`(또는 구 방식의 `CLAUDE.md`)·`.moai/`가 존재하면, 기존 산출물을 덮어쓰기 전에 `AskUserQuestion`으로 명시적 확인을 받는다(옵션: 재생성 / 부분 수정 / 취소). 침묵 덮어쓰기는 금지한다. `CLAUDE.md`가 포인터가 아니라 전체 지침을 담고 있으면 레거시 복제 프로젝트이므로 `references/agentsmd-generator.md` §7.1 마이그레이션을 먼저 적용한다.
**유예 축 정체 시**: 라운드를 더 돌아도 유예로 남는 축이 있으면, 생성을 차단하고 명시적으로 묻거나(고위험 산출물), 가정을 `.moai/context.md`에 문서화하고 진행한다(저위험 산출물). 어느 경로를 택했는지 사용자에게 1줄로 알린다.
---
## Plugin Inventory Scan
에이전트/스킬 체인을 설계하기 **전에** 반드시 `~/.claude/plugins/`(Claude)와 `~/.codex/plugins/`+`.codex/agents/`(Codex)를 모두 스캔해 실제 설치된 AI 코워커 플러그인을 확인한다. 카탈로그(플러그인 목록·스킬 수)는 **하드코딩하지 않는다** — `.claude-plugin/marketplace.json`이 패밀리 로스터의 유일한 정본이다.
```bash
# 소스 A: 디렉터리 스캔 — Claude(~/.claude/plugins/) + Codex(~/.codex/plugins/cache/) 양쪽, moai-* 글롭
for dir in ~/.claude/plugins/moai-* ~/.codex/plugins/cache/*/moai-*; do
[ -d "$dir" ] && { [ -f "$dir/.claude-plugin/plugin.json" ] || [ -f "$dir/.codex-plugin/plugin.json" ]; } && basename "$dir"
done
# Codex 프로젝트/전역 커스텀 에이전트(.codex/agents/*.toml)도 인벤토리에 포함
for f in ./.codex/agents/*.toml ~/.codex/agents/*.toml; do [ -f "$f" ] && basename "$f" .toml; done 2>/dev/null
# 소스 B: 현재 세션 system reminder의 "user-invocable skills" 목록 파싱(moai-* 접두 스킬만)
```
두 소스를 교차 검증해 `plugins_installed` + `skills_available` 인벤토리를 구성한다(신뢰도 HIGH/MEDIUM). 결과는 `.moai/config.json`에 스냅샷으로 저장한다. **Gap Detection**: 설계된 체인의 스킬이 인벤토리에 없으면 `AskUserQuestion` 4옵션(설치 안내+재개 권장 / 제외하고 진행 / 대체 스킬 / 중단)을 제시한다. 재개는 사용자가 "설치 완료"·"이어서 진행"으로 말하면 감지해 같은 흐름으로 이어 진행한다.
---
## Custom Agent & Skill-Chain Design
이 스킬이 생성하는 `.claude/agents/*.md`는 **사용자·프로젝트 전용으로 매번 새로 설계**된다. **프리빌트 플러그인 에이전트를 복사하지 않는다** — 인벤토리에서 발견한 스킬을 체인으로 호출하는 에이전트 본문을 인터뷰 맥락에서 직접 합성한다.
**설계 절차**:
1. 인터뷰 답변(무엇을·어떻게) + 인벤토리(무엇이 설치됐는가) + 재진입 시 기존 `.moai/context.md` 누적 맥락, 3종 입력을 종합한다.
2. **[HARD] 관련 스킬을 전수 탐색한 뒤 설계한다.** 설치된 플러그인의 `skills/*/SKILL.md` **description을 전부 읽고** 이 프로젝트 산출물에 쓸 수 있는 것을 남김없이 후보에 올린다. 기억이나 프리셋에 있는 것만 쓰지 않는다 — 프리셋(`references/cowork-setup.md` §3)은 **출발점이지 목록이 아니다.** 후보에서 제외한 스킬이 있으면 왜 뺐는지 설계 근거에 한 줄로 적는다.
3. 산출물별 스킬 체인을 **프로젝트 목적에 맞게** 설계한다: `[기획/분석] → [생성] → [포맷 변환/미디어] → ⟨한국어 감사 3단⟩`. 프리셋을 그대로 베끼지 말고, S1·S2에서 받은 실패 조건·검토 주체·주기에 맞춰 단계를 더하거나 뺀다.
4. **[HARD] 한국어 텍스트 체인은 `moai-writer:korean-humanize`로 끝난다.** 순서는 `ai-slop-reviewer` → `korean-spell-check`(민감 문서는 생략) → `korean-humanize`(윤문 + Phase 6 최종 검수)다. Phase 6가 의미 보존을 판정한 **바로 그 산출물**이 전달되어야 하므로, 검수 뒤에 문장을 고치는 단계를 두지 않는다. 판정이 `hold_and_report`면 전달하지 않는다. 비텍스트(차트·숫자·미디어)는 감사 단계를 생략한다. 정본: `references/cowork-setup.md` §3.
3. **반복될 작업 유형별 에이전트 1개**를 생성한다(과잉 생성 금지 — 근거 없는 에이전트는 만들지 않는다). 본문은 아래 7-step 루프 + 프로젝트 맥락(톤·산출물 규격·금지 사항)을 내장한다.
4. 각 에이전트/체인을 `AGENTS.md` §워크플로우 표에 기록해, 실행 시점에 자연어 요청이 표를 따라 에이전트/스킬 호출로 라우팅되게 배선한다.
**7-step 에이전트 루프** (모든 생성 에이전트 공통 본문 구조): ① 요청 평가(대화/스킬/파일 3단) → ② 소크라테스 인터뷰(빠진 맥락) → ③ 맥락 요약 확인 → ④ 체인 실행 계획 + 완료 기준 제시 → ⑤ `AskUserQuestion` 승인 → ⑥ 체인 순차 실행(단계별 요약 보고) → ⑦ `moai-coworker:ai-slop-reviewer` 검수 → (한국어 텍스트면) `moai-writer:korean-humanize` 윤문 → **최종 검수** → 「확인 필요 항목」 명시 후 전달. **검수를 건너뛰었다면 그 사실과 이유를 결과에 적는다.**
**frontmatter 최소 권한**: `name`(kebab-case) · `description`(호출 트리거 명시) · `tools`(작업에 필요한 최소 목록만 — `Agent` 툴은 포함하지 않아 중첩 스폰을 차단한다). 생성된 에이전트는 subagent 경계를 지킨다: 사용자에게 직접 질문하지 않고, 부족한 입력이 있으면 blocker report를 반환한다.
**검증 깊이(위험 비례)**: QUICK(단순 조회 — Layer 1만) / NORMAL(일반 산출물 — 근거 게이트 활성, 기본값) / DEEP(법률·세무·재무·정부지원·계약·의료 또는 2개+ 코워커 체인 — 전체 검증 + 전달 전 확인). 상세는 `references/execution-protocol.md` §검증 깊이 사다리 참조.
---
## Generation Targets
Phase 5 확인 이후 이 스킬은 다음을 생성한다:
1. **`AGENTS.md`(정본) + `CLAUDE.md`(포인터)** (프로젝트 루트) — 폴더 지침의 **정본은 `AGENTS.md` 한 파일**이다(≤500라인). `CLAUDE.md`는 그 정본을 `@AGENTS.md` 한 줄로 불러오는 포인터(≈11라인)다. **두 파일에 같은 본문을 복제하지 않는다** — 복제는 한쪽만 고쳤을 때 조용히 어긋난다. Codex(ChatGPT Work)는 `AGENTS.md`를 직접 읽고, Claude(Cowork/Code)는 `CLAUDE.md`의 임포트를 세션 시작 시 펼쳐 같은 정본을 읽으므로 둘은 기능 동등(상호 운용)이다. Desktop 변형 템플릿(`references/templates/AGENTS.md.tmpl`)을 치환해 `AGENTS.md`를 만들고, `references/templates/CLAUDE.md.tmpl`을 치환 없이 복사해 포인터를 만든다. 소스 템플릿의 **8개 `## N. … (HARD)` 블록을 전부 보존**한다(§Desktop Parity Constraints 아래 표 참조). 라인 예산 초과 시 축소 대상은 스킬 체인 나열뿐이며 HARD 블록은 절대 축소·삭제하지 않는다. 임포트 줄을 백틱으로 감싸면 조용히 실패하므로 금지한다(상세: `references/agentsmd-generator.md` §2.4).
2. **`.claude/agents/*.md` + `.codex/agents/*.toml`** — 반복 작업 유형별 1개씩 양쪽 생성. Claude용은 markdown+YAML frontmatter(`name`·`description`·`tools`), Codex용은 TOML(`name`·`description`·`developer_instructions`, `model`·`sandbox_mode` 선택). 둘 다 7-step 루프 + 프로젝트 맥락을 동일 내장. Codex `.codex/agents/`는 프로젝트 로컬 git 커밋 가능.
3. **`.moai/` 스캐폴드** — `config.json`(프로젝트 메타 + 언어 + 설치 플러그인 스냅샷) · `context.md`(인터뷰 요약) · `credentials.env`(GUIDANCE 전용 — 안내 문구만, 실제 값은 절대 기록하지 않음) · `cache/`(빈 디렉터리) · `evolution/`(자가 개선 진단 기록).
---
## Recursive Self-Improvement
`/project` 셋업이 끝난 프로젝트는 **사용하면서 스스로 개선**된다. 단일 단순화 모델만 사용한다 — 강제 점수화·반성 에세이·별도 지표 파일을 요구하는 무거운 다단계 모델은 채택하지 않는다(아래 신호·이력 기록은 전부 1줄 단위다).
**4가지 개선 트리거** (하나라도 감지되면 발동, 영문 토큰이 기계 앵커다):
1. **`repeated correction`** — 같은 행동에 대한 사용자 수정 요청이 2회 이상 반복
2. **`chain failure`** — 스킬 체인이 반복적으로 같은 단계에서 실패·우회
3. 명시적 요청 `/project evolve` (수동 발동)
4. **`inventory drift`** — 설치 플러그인 인벤토리가 `.moai/config.json` 스냅샷과 어긋남
**신호 영속화 (HARD)**: 사용자 수정 요청·체인 실패를 감지한 **즉시** `.moai/evolution/signals.md`에 1줄을 기록한다(`날짜 | 트리거 토큰 | 대상(에이전트/체인/지침 앵커) | 요지`). 트리거 1·2의 "반복" 판정은 대화 기억이 아니라 **이 파일을 세어서** 한다 — 세션이 바뀌어도 1회차 신호가 유실되지 않는다.
**개선 사이클**: 신호 감지 → 진단(무엇이 어긋났는가: `AGENTS.md` 지침 vs 에이전트 본문 vs 스킬 체인) → 최소 diff 작성(전면 재작성 금지) → 사용자에게 변경 요지 1-3줄 보고(파괴적 변경만 사전 확인) → `.moai/evolution/log.md` 맨 위에 1줄 기록(트리거 토큰 + 수정 대상 포함). diff 적용 전 수정 지점의 **원문 조각을 `.moai/evolution/` 진단 기록에 함께 남겨** 되돌리기가 가능해야 한다.
**개선 검증 + 롤백 (HARD)**: 개선은 적용으로 끝나지 않는다 — 적용 이후 **같은 트리거 토큰 + 같은 대상**의 신호가 다시 발동하면 그 개선은 **실패한 개선**으로 판정한다. 실패한 개선은 `.moai/evolution/`에 남긴 원문 조각으로 해당 diff를 되돌리고, 같은 지점을 자동으로 재수정하는 대신 사용자에게 상황을 1-3줄로 보고해 방향을 확인받는다(동일 지점 자동 재수정 반복 금지).
**개선 이력 큐레이션**: 이력 정본은 `.moai/evolution/log.md` 한 곳이며 최신순으로 누적한다. `AGENTS.md`에는 이력을 적지 않는다 — 생성 시 HTML 주석이 제거되므로 거기 적은 이력은 남지 않는다. 자가 개선 diff 적용 후에도 `AGENTS.md`가 500라인 이내인지 재검증한다(`references/agentsmd-generator.md` §5 길이 검증은 생성 시뿐 아니라 개선 시에도 적용).
**가드레일 (HARD)**: 자가 개선은 **`AGENTS.md`와 `.claude/agents/` 파일만** 수정한다(`.moai/evolution/`의 신호·진단·이관 기록 파일은 예외). 스킬 본문·플러그인 파일은 건드리지 않는다. 개선 1회당 수정 파일은 **최대 3개**까지다(evolution 기록 파일은 카운트 제외).
---
## Plugin Update Synchronization (`update`)
`/project update`는 **외부에서 플러그인이 업데이트된 직후** 프로젝트를 최신 인벤토리에 동기화하는 수동 스위치다. §Recursive Self-Improvement의 `inventory drift` 트리거를 "감지 대기"가 아니라 **즉시·전수조사로 강제 실행**하는 모드다. 자가 개선 가드레일(수정 대상·3파일 상한·파괴적 변경 사전 확인)을 그대로 계승한다.
**`evolve` vs `update` (발동 조건으로 구분)**:
| 모드 | 발동 | 입력 |
|---|---|---|
| `/project evolve` | 사용 중 신호(`repeated correction`·`chain failure`)가 `.moai/evolution/signals.md`에 **누적**되어 발동 | 대화 맥락 + 누적 신호 |
| `/project update` | **사용자가 플러그인 업데이트 직후 수동 호출** — drift를 기다리지 않음 | 설치된 전체 플러그인 전수조사 + 누적 신호 |
**`update` 실행 절차 (5단계)** — 상세 정본은 `references/update-protocol.md`:
1. **전수조사(Full Census)** — `~/.claude/plugins/moai-*` 전체를 스캔해 각 플러그인의 `plugin.json` + `skills/` + MCP 정의를 조사. 기존 `.moai/config.json` 스냅샷과 비교해 **새 스킬·새 MCP·변경된 스킬**의 diff를 도출한다.
2. **세션 신호 분석** — `.moai/evolution/signals.md`(누적 교정·체인 실패 신호) + `.moai/context.md`(프로젝트 맥락)를 읽어, 업데이트된 스킬이 기존 신호를 해소할 수 있는지 교차 확인한다(이게 "기존 대화 세션 분석 + 재귀적 자가 학습"의 실체다).
3. **AGENTS.md·에이전트 동기화** — diff에 맞춰 `AGENTS.md` §워크플로우 표와 `.claude/agents/*.md`의 스킬 체인을 최소 diff로 갱신. 500라인 예산·8개 HARD 블록 보존 정책은 `references/agentsmd-generator.md`를 그대로 따른다. 레거시 복제 프로젝트(전체 지침을 담은 `CLAUDE.md`)를 만나면 같은 문서 §7.1 마이그레이션을 먼저 적용한다.
4. **스냅샷 갱신** — `.moai/config.json`의 `plugins_installed` + `skills_available` 스냅샷을 새 인벤토리로 갱신(`inventory drift`를 0으로 리셋). `.moai/evolution/log.md`에 1줄 기록(트리거 토큰 `inventory drift` + 동기화 요지).
5. **검증 + 롤백** — 동일한 `inventory drift` 신호가 다시 발동하면 실패한 동기화로 판정해 `.moai/evolution/` 원문 조각으로 롤백(§Recursive Self-Improvement의 검증·롤백 메커니즘 재사용).
**미설치 프로젝트 (HARD)**: `AGENTS.md`·`CLAUDE.md`·`.moai/`가 모두 없으면 `update`는 동기화 대상이 없다 — `AskUserQuestion`으로 `/project`(최초 셋업)로 안내한다. 침묵 생성 금지.
---
## Desktop Parity Constraints
이 스킬이 생성하는 프로젝트는 **Claude Cowork(Desktop)** 런타임을 전제하되, 산출물(`AGENTS.md`+`CLAUDE.md` 포인터, `.claude/agents/`+`.codex/agents/`)을 Claude와 Codex(ChatGPT Work) 양쪽으로 내놓아 어느 런타임에서도 작동한다. `AGENTS.md`는 Codex가 직접, Claude는 `CLAUDE.md`의 `@AGENTS.md` 임포트를 통해 같은 정본을 로드하며 기능 동등이다. 심볼릭 링크(`ln -s`)는 Windows에서 관리자 권한을 요구하므로 4조합 동일 동작 원칙에 어긋나 쓰지 않는다 — 임포트 방식만 쓴다(상세: `references/agentsmd-generator.md` §2.4). 다음 세 클래스는 Desktop/Codex 런타임에서 동작하지 않으므로 어떤 생성 경로에서도 이를 만들지 않는다:
- **hooks** — 훅 배선을 생성하지 않는다.
- **LSP** — LSP 설정을 생성하지 않는다.
- **output-styles** — output-style 파일을 생성하지 않는다.
이 스킬은 세 클래스를 클래스 이름으로만 언급한다(구체적 산출물 경로 토큰은 사용하지 않는다). 개발 런타임을 전제하는 산출물이 필요하면 §개발 요청 처리를 따른다.
Desktop `AGENTS.md.tmpl`이 보존하는 8개 `## N. … (HARD)` 블록(소스 순서):
| # | 섹션 |
|---|------|
| 1 | `## 2. 행동 원칙 (HARD)` |
| 2 | `## 3. 요청 평가 사다리 (HARD)` |
| 3 | `## 4. 파일 생성 기준 (HARD)` |
| 4 | `## 5. 문서·콘텐츠 생성 우선순위 (HARD)` |
| 5 | `## 6. AI 슬롭 후처리 (HARD)` |
| 6 | `## 7. 인용·저작권 가드 (HARD)` |
| 7 | `## 8. 톤 규칙 (HARD)` |
| 8 | `## 14. 맥락 적용 규칙 (HARD)` |
카운트는 정확히 8이다(`grep -cE '^## .*\(HARD\)' references/templates/AGENTS.md.tmpl` == 8). 라인 예산 초과 정책은 `references/agentsmd-generator.md` 참조.
---
## 플러그인 패밀리
마켓플레이스 **'MoAI-Cowork, 모두의 코워크'** (`modu-ai/moai-cowork`) 소속. **로스터(플러그인 목록·한글명·역할)는 하드코딩하지 않는다** — 실측 정본은 `.claude-plugin/marketplace.json`이며, 이 스킬은 §Plugin Inventory Scan에서 런타임에 동적으로 읽는다. 역할별 라우팅 매핑(키워드 → 코워커 플러그인)은 `references/router.md`가 단일 진실 원천이다.
---
## 라우팅
### 자연어 의도 분기
| 발화 맥락 | 분기 |
|-----------|------|
| 개발·코딩·SPEC·DDD/TDD·개발환경 | §개발 요청 처리 |
| 그 외 전부(사업·콘텐츠·창작·커머스·문서·법무·재무·채용·교육·디자인) | 이 스킬이 직접 처리 |
| 불명확 | `AskUserQuestion` (계속 진행 권장 / §개발 요청 처리 안내) |
### 코워커(플러그인) 키워드 매핑 (요약)
키워드 매칭 결과 후보가 1개면 해당 코워커 중심으로 체인을 설계한다. 상세 키워드 테이블·모호성 해소·복합 요청 처리는 `references/router.md` 참조. 후보가 2개 이상이면: (a) 산출물 유형이 명시되면 해당 산출물을 만드는 코워커 우선(자동 해소), (b) 자동 해소가 어려우면 `AskUserQuestion`(후보 최대 4 + Other). 디자이너 중심이면 `references/designer-setup.md` 서브 프로토콜을 호출한다.
---
## 워크플로우 (8-Phase)
```
Phase 1 인터뷰 → Phase 2 인벤토리 → Phase 3 체인 설계 → Phase 4 Gap Detection
→ Phase 5 확인 → Phase 6 지침 생성(AGENTS.md + CLAUDE.md 포인터) → Phase 7 커스텀 에이전트 생성 → Phase 8 API 키 + 첫 실행 안내
```
상세: `references/cowork-setup.md`(코워커·작가 8-Phase 정본) + `references/designer-setup.md`(디자인 자산 5-Phase 서브 프로토콜, 디자인 요청 시 호출).
---
## 커맨드 표면
`/project`는 자연어 단일 진입 스킬이다. 기본 동작은 `<자연어 지시>`로 인터뷰→설계→생성을 한 흐름으로 끝내는 것이고, 아래 3가지 액션만 명시적 서브커맨드로 노출한다. 그 외(재개·카탈로그·상태 조회·API 키)는 자연어로 요청하면 스킬이 알아서 라우팅한다 — "설치 완료했어"(재개)·"어떤 코워커 있어?"(카탈로그)·"지금 상태 어때?"(상태)·"API 키 설정할래"(Phase 8 안내).
| 커맨드 | 동작 |
|--------|------|
| `/project <지시>` | 진입 — 인터뷰 후 에이전트/체인 설계 + 생성. **PRIMARY 기본 동작.** |
| `/project update` | 플러그인 업데이트 후 전수조사 → AGENTS.md·에이전트 재동기화(§Plugin Update Synchronization) |
| `/project evolve` | 재귀적 자가 개선 수동 발동 |
| `/project doctor` | 환경 진단 |
---
## 저장 위치
- **프로젝트 작업 지침(정본)**: `./AGENTS.md` (≤500라인 — Codex가 직접 로드)
- **Claude용 포인터**: `./CLAUDE.md` (`@AGENTS.md` 임포트 한 줄 + 안내 주석. 지침 본문을 복제하지 않는다)
- **커스텀 에이전트**: `./.claude/agents/*.md` (Claude) + `./.codex/agents/*.toml` (Codex)
- **프로젝트 설정**: `./.moai/config.json`
- **프로젝트 맥락**: `./.moai/context.md`
- **API 키**: `./.moai/credentials.env` (프로젝트 격리, GUIDANCE 전용)
- **템플릿**: `references/templates/AGENTS.md.tmpl`(정본, 변수 치환) + `references/templates/CLAUDE.md.tmpl`(포인터, 그대로 복사)
---
## 상세 레퍼런스 (`references/`)
| 파일 | 역할 |
|------|------|
| `router.md` | 자연어 → 코워커(플러그인) 키워드 매핑·모호성 해소·복합 요청·검증 깊이 연동 |
| `cowork-setup.md` | 코워커·작가 8-Phase 정본(역할 자동 감지·체인 프리셋·커스텀 에이전트 생성·인용 가드) |
| `designer-setup.md` | 디자인 자산 5-Phase 서브 프로토콜 |
| `init-protocol.md` | 인터뷰 질문 스키마·인벤토리 스캔·Gap Detection·재개(Re-entry) 상세 |
| `context-collector.md` | 맥락 등급(A/B/C)·커버리지 기반 라운드 설문 플로우·모호성 감지·맥락 적용 규칙 |
| `agentsmd-generator.md` | AGENTS.md 변수 치환·500라인 예산·HARD 블록 보존·CLAUDE.md 포인터 규칙·레거시 마이그레이션 |
| `execution-protocol.md` | 스킬 체인 순차 실행·검증 깊이 사다리·검색 스케일링 |
| `evaluation-protocol.md` | 5차원 산출물 평가(정확성·완전성·실용성·톤·도메인) |
| `quality-evaluator.md` | 결정론적 품질 게이트(파일 유효성·마크다운 렌더링·AI 작문 패턴·근거 검증) |
| `diagnostic-protocol.md` | 환경 진단(`/project doctor`) · 상태 조회(자연어) |
| `update-protocol.md` | 플러그인 업데이트 동기화(`/project update` — 전수조사·세션 신호 분석·동기화·검증) |
| `INDEX.md` | 레퍼런스 전체 인덱스 |
---
## 개발 요청 처리
**범위 (HARD)**: 이 마켓플레이스는 **비개발 AI 코워커 플러그인 전용**이다. 개발-프로젝트 초기화(SPEC·DDD/TDD·품질 게이트·개발환경 셋업)는 이 스킬의 범위 밖이며, 어떤 개발 셋업 산출물도 생성하지 않는다.
사용자가 개발·코딩·SPEC·DDD/TDD 의도를 보이면, 어떤 생성 절차도 시작하지 말고 범위 밖임을 안내한 뒤 이 스킬이 담당하는 비개발 프로젝트 초기화로 안내한다.
---
## 주의사항
1. **글로벌 프로필 질문 금지** — 이름·회사·역할을 재질문하지 않는다. 모든 사용자 정보는 `AGENTS.md` 한 곳에만 기록한다.
2. **project 스킬은 구현하지 않는다** — 라우팅·셋업·자가 개선 배선만 담당한다. 실무 체인·디자인 합성 로직은 각 코워커 플러그인의 스킬에 위임한다.
3. **단일 마켓플레이스 정합** — 스킬 참조는 설치된 플러그인의 `moai-*:` 접두어를 사용하며, 로스터는 `marketplace.json`에서 런타임 도출한다(하드코딩 금지). `router.md`의 매핑이 단일 진실 원천이다.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!