| name | opensource-pipeline |
| description | 오픈소스 파이프라인: 프라이빗 프로젝트를 안전한 공개 출시를 위해 포크(fork), 세척(sanitize) 및 패키징합니다. 3개 에이전트(포커, 세니타이저, 패키저)를 연결합니다. 트리거: '/opensource', 'open source this', 'make this public', 'prepare for open source'. |
| origin | ECC |
오픈소스 파이프라인 스킬
3단계 파이프라인을 통해 모든 프로젝트를 안전하게 오픈소스화합니다: 포크(Fork) (비밀번호/키 제거) → 세척(Sanitize) (클린 상태 검증) → 패키지(Package) (CLAUDE.md + setup.sh + README 생성).
활성화 시점
- 사용자가 "이 프로젝트를 오픈소스화해줘" 또는 "이것을 공개로 전환해줘"라고 말할 때
- 사용자가 프라이빗 저장소를 공개 출시용으로 준비하고 싶어할 때
- GitHub에 푸시하기 전에 비밀번호나 키를 제거해야 할 때
- 사용자가
/opensource fork, /opensource verify 또는 /opensource package를 호출할 때
명령어
| 명령어 | 동작 |
|---|
/opensource fork PROJECT | 전체 파이프라인: 포크 + 세척 + 패키징 |
/opensource verify PROJECT | 기존 저장소에 세니타이저 실행 |
/opensource package PROJECT | CLAUDE.md + setup.sh + README 생성 |
/opensource list | 스테이징된 모든 프로젝트 표시 |
/opensource status PROJECT | 스테이징된 프로젝트의 보고서 표시 |
프로토콜
/opensource fork PROJECT
전체 파이프라인 — 메인 워크플로.
1단계: 매개변수 수집
프로젝트 경로를 확인합니다. PROJECT에 /가 포함되어 있으면 절대 또는 상대 경로로 처리합니다. 그렇지 않으면 현재 작업 디렉토리, $HOME/PROJECT를 확인한 후 사용자에게 묻습니다.
SOURCE_PATH="<확인된 절대 경로>"
STAGING_PATH="$HOME/opensource-staging/${PROJECT_NAME}"
사용자에게 다음을 묻습니다:
- "어떤 프로젝트인가요?" (찾지 못한 경우)
- "라이선스는? (MIT / Apache-2.0 / GPL-3.0 / BSD-3-Clause)"
- "GitHub 조직 또는 사용자 이름은?" (기본값:
gh api user -q .login으로 감지)
- "GitHub 저장소 이름은?" (기본값: 프로젝트 이름)
- "README에 들어갈 설명은?" (제안을 위해 프로젝트 분석)
2단계: 스테이징 디렉토리 생성
mkdir -p $HOME/opensource-staging/
3단계: 포커(Forker) 에이전트 실행
opensource-forker 에이전트를 생성합니다:
Agent(
description="오픈소스 출시를 위해 {PROJECT} 포크",
subagent_type="opensource-forker",
prompt="""
오픈소스 출시를 위해 프로젝트를 포크합니다.
소스: {SOURCE_PATH}
대상: {STAGING_PATH}
라이선스: {chosen_license}
전체 포킹 프로토콜을 따르십시오:
1. 파일 복사 (.git, node_modules, __pycache__, .venv 제외)
2. 모든 비밀번호, 키 및 자격 증명 제거
3. 내부 참조를 플레이스홀더로 교체
4. .env.example 생성
5. git 기록 정리
6. {STAGING_PATH}/FORK_REPORT.md에 FORK_REPORT.md 생성
"""
)
완료될 때까지 기다립니다. {STAGING_PATH}/FORK_REPORT.md를 읽습니다.
4단계: 세니타이저(Sanitizer) 에이전트 실행
opensource-sanitizer 에이전트를 생성합니다:
Agent(
description="{PROJECT} 세척 검증",
subagent_type="opensource-sanitizer",
prompt="""
오픈소스 포크의 세척 상태를 검증합니다.
프로젝트: {STAGING_PATH}
소스 (참조용): {SOURCE_PATH}
모든 스캔 카테고리를 실행하십시오:
1. 비밀번호/키 스캔 (중요)
2. 개인정보(PII) 스캔 (중요)
3. 내부 참조 스캔 (중요)
4. 위험 파일 확인 (중요)
5. 설정 완료 여부 (경고)
6. git 기록 감사
PASS/FAIL 판정이 포함된 SANITIZATION_REPORT.md를 {STAGING_PATH}/ 안에 생성하십시오.
"""
)
완료될 때까지 기다립니다. {STAGING_PATH}/SANITIZATION_REPORT.md를 읽습니다.
FAIL인 경우: 발견된 사항을 사용자에게 보여줍니다. "이것들을 수정하고 다시 스캔할까요, 아니면 중단할까요?"라고 묻습니다.
- 수정 시: 수정을 적용하고 세니타이저를 다시 실행합니다 (최대 3회 시도 — 3회 실패 후 모든 발견 사항을 제시하고 사용자에게 수동 수정을 요청함).
- 중단 시: 스테이징 디렉토리를 정리합니다.
PASS 또는 PASS WITH WARNINGS인 경우: 5단계로 진행합니다.
5단계: 패키저(Packager) 에이전트 실행
opensource-packager 에이전트를 생성합니다:
Agent(
description="오픈소스 출시를 위해 {PROJECT} 패키징",
subagent_type="opensource-packager",
prompt="""
프로젝트를 위한 오픈소스 패키징을 생성합니다.
프로젝트: {STAGING_PATH}
라이선스: {chosen_license}
프로젝트 이름: {PROJECT_NAME}
설명: {description}
GitHub 저장소: {github_repo}
다음을 생성하십시오:
1. CLAUDE.md (명령어, 아키텍처, 주요 파일)
2. setup.sh (한 번의 명령으로 부트스트랩, 실행 가능하게 설정)
3. README.md (또는 기존 문서 강화)
4. LICENSE
5. CONTRIBUTING.md
6. .github/ISSUE_TEMPLATE/ (bug_report.md, feature_request.md)
"""
)
6단계: 최종 검토
사용자에게 제시합니다:
오픈소스 포크 준비 완료: {PROJECT_NAME}
위치: {STAGING_PATH}
라이선스: {license}
생성된 파일:
- CLAUDE.md
- setup.sh (실행 가능)
- README.md
- LICENSE
- CONTRIBUTING.md
- .env.example ({N}개 변수)
세척 판정: {sanitization_verdict}
다음 단계:
1. 검토: cd {STAGING_PATH}
2. 저장소 생성: gh repo create {github_org}/{github_repo} --public
3. 푸시: git remote add origin ... && git push -u origin main
GitHub에 게시를 진행할까요? (yes/no/먼저 검토)
7단계: GitHub 게시 (사용자 승인 시)
cd "{STAGING_PATH}"
gh repo create "{github_org}/{github_repo}" --public --source=. --push --description "{description}"
/opensource verify PROJECT
세니타이저를 독립적으로 실행합니다. 경로 확인: PROJECT에 /가 포함되어 있으면 경로로 처리합니다. 그렇지 않으면 $HOME/opensource-staging/PROJECT, $HOME/PROJECT, 현재 디렉토리 순으로 확인합니다.
Agent(
subagent_type="opensource-sanitizer",
prompt="{resolved_path}의 세척 상태를 검증하십시오. 6개 스캔 카테고리를 모두 실행하고 SANITIZATION_REPORT.md를 생성하십시오."
)
/opensource package PROJECT
패키저를 독립적으로 실행합니다. "라이선스?"와 "설명?"을 물은 후:
Agent(
subagent_type="opensource-packager",
prompt="{resolved_path} 패키징 ..."
)
/opensource list
ls -d $HOME/opensource-staging/*/
파이프라인 진행 상황(FORK_REPORT.md, SANITIZATION_REPORT.md, CLAUDE.md 존재 여부)과 함께 각 프로젝트를 표시합니다.
/opensource status PROJECT
cat $HOME/opensource-staging/${PROJECT}/SANITIZATION_REPORT.md
cat $HOME/opensource-staging/${PROJECT}/FORK_REPORT.md
스테이징 레이아웃
$HOME/opensource-staging/
my-project/
FORK_REPORT.md # 포커 에이전트 생성
SANITIZATION_REPORT.md # 세니타이저 에이전트 생성
CLAUDE.md # 패키저 에이전트 생성
setup.sh # 패키저 에이전트 생성
README.md # 패키저 에이전트 생성
.env.example # 포커 에이전트 생성
... # 세척된 프로젝트 파일들
안티 패턴
- 절대 사용자 승인 없이 GitHub에 푸시하지 마십시오.
- 절대 세니타이저를 건너뛰지 마십시오 — 이것은 안전 게이트입니다.
- 절대 세니타이저 FAIL 후 모든 중요한 발견 사항을 수정하지 않고 진행하지 마십시오.
- 절대 스테이징 디렉토리에
.env, *.pem 또는 credentials.json을 남겨두지 마십시오.
모범 사례
- 새로운 출시를 위해 항상 전체 파이프라인(포크 → 세척 → 패키징)을 실행하십시오.
- 스테이징 디렉토리는 명시적으로 정리할 때까지 유지됩니다 — 검토를 위해 사용하십시오.
- 수동 수정 후 게시하기 전에 세니타이저를 다시 실행하십시오.
- 비밀 정보를 삭제하기보다는 매개변수화하십시오 — 프로젝트 기능을 유지하십시오.
관련 스킬
세니타이저에서 사용하는 비밀 정보 감지 패턴은 security-review를 참조하십시오.