create-project은(는) 무엇을 하나요?
사용자의 표준 구조로 새 프로젝트를 생성하는 스킬입니다. 모든 작업은 ~/.claude/rules/의 전역 규칙(특히 project-meta.md, spcfctn-code.md, org-babel.md, file-editing.md)을 따릅니다. 여기에는 작업 순서만 있습니다.
이 스킬을 명시적으로 호출하는 것은 spcfctn/ 생성을 허가하는 것입니다 (전역 규칙 '사용자에게 spcfctn/ 생성을 요청하라'는 여기서 적용되지 않습니다 — 사용자가 이미 요청했습니다).
단계 0 — 준비
- 프로젝트 루트는 현재 작업 디렉토리(또는 사용자가 지정한 디렉토리)입니다. 이미 무엇이 있는지 확인하십시오:
ls -la,find -L(심볼릭 링크 고려). .claude-root,.claude/CLAUDE.md등이 이미 존재하면 새 프로젝트가 아닙니다: 아무것도 덮어쓰지 말고, 누락된 것만 보충하고 기존 항목을 보고하십시오.spcfctn/이 이미 공유 저장소(모노레포)의 일부라면 분할하지 마십시오. 보고서에 이 사실을 명시하고, 다음 커밋 시 기록을 유지한 채 하위 디렉토리로 분할하는 것을 제안하십시오 (spcfctn-code.md).- 각 권한 요청 전에 한국어로 간단한 요약을 제공하십시오 (
file-editing.md).
단계 1 — 프로젝트 언어
- 사용자가 요청에 언어를 지정하지 않았다면
AskUserQuestion을 통해 물어보십시오 ('프로젝트 언어는 무엇입니까?': 한국어, 영어, 기타). 언어를 알기 전에는 어떤 산문 텍스트도 작성하지 마십시오. - 프로젝트 언어는 저장소 파일(코드, 주석, 커밋, org/md) 그리고 외부 프로젝트 아티팩트(Jira 태스크, Confluence 페이지)에 적용됩니다. 사용자와의 채팅 언어는 별개로 항상 한국어입니다.
단계 1a — 프로젝트 코드
각 프로젝트에는 두 글자로 구성된 고유한 짧은 코드가 있습니다. 허용 가능한 두 글자 변형이 없을 때만 세 글자를 사용합니다. 대소문자는 고정되지 않습니다: 사용 컨텍스트에 따라 다릅니다 (예: Jira 태스크 키는 대문자 KB-1676; 코드나 이름의 접두사는 일반적으로 소문자). 따라서 제안에서는 대소문자 구분 없이 코드를 표시하고, CLAUDE.md에서는 주 사용 형태로 기록하고 각 형태가 어디에 적용되는지 명시하십시오.
- 코드를 묵묵히 만들거나 첫 번째로 떠오른 것을 선택하지 마십시오: 명시적으로 제안하십시오. 3-4개의 흥미로운 변형을 (프로젝트 이름, 본질, 또는 말장난에서 유래한 것 — 각각의 이유를 간단히 설명하여) 제시하고 사용자가 하나를 선택하거나 자신의 코드를 제공할 수 있도록 하십시오.
AskUserQuestion을 통해 이를 편리하게 수행하십시오 (첫 번째 변형은 귀하의 평가에 따른 최선의 것으로 '(Recommended)' 표시; 'Other'은 사용자 지정 코드를 위해 자동 추가됨). - 선택한 코드가 사용자의 기존 프로젝트 코드와 충돌하지 않는지 확인하십시오 (
~/.claude/projects/*/memory, 인접 프로젝트의.claude/CLAUDE.md, 필요한 경우locate검색). 충돌이 있으면 알리고 다른 코드를 제안하십시오. - 코드를
.claude/CLAUDE.md(단계 3)에 기록하고 최종 보고서에서 언급하십시오.
단계 2 — 구조
루트에 다음을 생성하십시오:
| 항목 | 내용 |
|---|---|
.claude-root | 빈 파일 (공유 작업 디렉토리의 루트를 표시) |
.dir-locals.el | 아래 형식, 끝에 개행 필수 |
code/ | 빈 디렉토리 (하위 저장소/코드가 위치할 곳) |
spcfctn/code/ | 아직 없는 경우 디렉토리 (spcfctn/은 직접 생성, 위 참조), 그 안에 별도의 git init (일상적인 작업, 허가 불필요) 및 *~ 단일 행이 있는 .gitignore; 사용자가 요청하기 전까지 커밋하지 마십시오. spcfctn/ 자체는 저장소가 아닙니다 |
.mcp.json | 빈 파일: {"mcpServers": {}} (project-meta.md — project-scope MCP만, 절대 user-scope 아님) |
env.org | .env.example의 리터러리 소스 — 아래 참조 |
.claude/ | 단계 3 참조 |
env.org — 프로젝트의 각 MCP 서버마다 하나의 섹션 (* MCP 이름), 어떤 변수가 필요한지와 그 이유를 산문으로 설명; 각 섹션은 공통 .env.example에 :noweb-ref로 태깅됨 (공개, 변수 이름만 표시하고 실제 값은 플레이스홀더로 대체 — org-babel.md, 여기서는 '멀티타겟' 템플릿 불필요, 단일 대상). 실제 .env (권한 600, project-meta.md)는 사용자가 직접 관리 — 생성하거나 편집하지 마십시오; 루트의 .gitignore는 필요하지 않습니다 (루트는 git 저장소가 아님, project-meta.md). 프로젝트 생성 시 MCP 서버가 없다면 env.org는 섹션 대신 하나의 준비 문장 ('아직 연결된 MCP가 없습니다.')으로 남겨두고, 첫 번째 서버가 나타날 때 다시 방문하십시오.
.dir-locals.el (org 링크를 위한 root: 약어, 이식 가능, 하드코딩된 경로 없음):
((org-mode
. ((eval . (add-to-list 'org-link-abbrev-alist
(cons "root" (locate-dominating-file default-directory ".dir-locals.el")))))))
(파일 자체는 순수 elisp — #+begin_example/#+end_example 행은 포함되지 않습니다.)
spcfctn/ui/가 필요하면 (레이아웃 분석) 나중에 필요 시 생성하십시오; 미리 빈 디렉토리를 만들지 마십시오. 이후에 나타나는 spcfctn/의 각 하위 디렉토리(ui/, deploy/ 등)는 즉시 자체 git init과 *~가 포함된 .gitignore를 받습니다 — spcfctn/ 자체는 저장소가 아닙니다. draft/, raw/, data/ 디렉토리는 넣을 파일이 있을 때까지 생성하지 말고, 미리 .gitignore 패턴을 추가하지 마십시오 (project-meta.md).
단계 3 — .claude/
-
mkdir .claude및.claude/내에 별도의git init(루트 자체가 git 저장소이거나 다른 저장소 내에 있더라도). 이는 일상적인 작업이므로 허가가 필요하지 않습니다. 사용자가 요청하기 전까지 커밋하지 마십시오. -
.claude/.gitignore:settings.local.json *~(
*~— Emacs 백업 파일의 일반 패턴,*.~undo-tree~포함; 끝에 개행.) -
.claude/CLAUDE.md— 프로젝트 언어로. 최소 사항:- 언어 섹션: 프로젝트의 모든 산문(문서, 코드 주석, 커밋 메시지, org 제목 등)은 프로젝트 언어로; 여기에 Jira/Confluence 아티팩트 포함; 사용자와의 채팅은 한국어 유지;
- 프로젝트 코드 (단계 1a) — 별도 행, 예: '프로젝트 코드:
kb(Jira 태스크 키에서는KB)'; - 구조 간략 설명:
.claude-root는 루트 표시;code/는 코드;spcfctn/code/는 기존 코드 관행 문서 (자체 git);.claude/는 프로젝트 의도 및 규칙 (자체 git).
추가 사항(Jira 키, 담당자 등)은 임의로 만들지 마십시오 — 작업 진행 중에 나타날 것입니다.
-
settings.local.json에 아무것도 쓰지 마십시오 — 개인 파일이며 git에서 제외됩니다.
단계 4 — 루트는 git 미사용
프로젝트 루트는 절대 git 저장소가 아닙니다 (project-meta.md): 루트에서 git init을 수행하지 말고 루트 .gitignore를 생성하지 마십시오. 루트에 이미 .git이 있으면 건드리지 말고 보고서에 사용자에게 알리십시오. 루트에 .mcp.json이 있으면 아무것도 하지 마십시오.
단계 5 — 기존 파일 번역
생성 전에 프로젝트에 있던 모든 파일(*~ 파일, .git, 바이너리, 방금 생성된 서비스 파일 제외)을 다른 언어로 작성된 경우 프로젝트 언어로 변환하십시오:
- 텍스트는 전체 번역으로 작성하고, 구조, 표, 코드 블록, 식별자 및 인용문을 유지하십시오 (오류 메시지는 원본 유지).
- 한국어: 일반 용어 사용 (예: '목록'은 "list", '훅'은 "hook"을 의미할 수 있음); 식별자와 CSS 클래스는 번역하지 마십시오 (
org-babel.md). .md는 에이전트만 편집합니다;.org는 사용자의 이해할 수 없는 편집을 삭제하지 말고 질문하십시오.:tangle이 있는 org 파일의 경우 org 소스를 편집하고emacsclient를 통해 탱글하십시오 (org-babel.md).- 단락(프로즈, 코드 블록이나 표가 아님) 편집 후 실제
fill-paragraph를emacsclient --eval로 줄바꿈을 정렬하십시오(org의 경우 먼저(font-lock-ensure));new_string/Write의 단락은 한 줄로 작성하십시오.emacsclient가 연결되지 않으면 사용자에게 서버 시작을 요청하고, 흉내내지 마십시오. - org/md 프로즈에 대해 이후
org-lint스킬을 실행하십시오. - 내용의 일부가 여기에 없는 파일/프로젝트를 참조하는 경우 링크를 '수정'하지 말고 주변 텍스트만 번역하십시오.
단계 6 — 보고서
선택된 프로젝트 코드, 생성된 항목, 이미 존재했던 항목, 번역된 항목을 간략히 나열하고, .claude/ 및 spcfctn/ 하위 디렉토리의 커밋이 수행되지 않았음을 상기시키십시오 (요청 시 수행).
하지 말아야 할 것
.env/.env.*(project-meta.md)를 편집하거나 비밀이 포함된.mcp.json을 생성하지 마십시오.code/*의 컴포넌트 하위 저장소에 있는CLAUDE.md/.claude/파일에 아무것도 쓰지 마십시오 — 루트.claude/에만 작성하십시오.- 사용자를 대신하여 언어 규칙을 임의로 만들지 마십시오 — 요청된 언어만 사용하십시오.
- 변형 제안과 사용자 선택 없이 프로젝트 코드를 직접 할당하지 마십시오.
- 프로젝트 루트와
spcfctn/루트에서git init을 수행하지 마십시오: 저장소는.claude/,code/*및spcfctn/*하위 디렉토리에만 있습니다.