[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70FWKFPNVC4M5ECZE1F0WS6":3,"skill-same:01M70FWKFPNVC4M5ECZE1F0WS6":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":6,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":40,"install":41,"resources":54},"01M70FWKFPNVC4M5ECZE1F0WS6","parallel-execute",null,"활성 plan 의 `## 실행 전략`(depends_on\u002Fmode\u002Fscope v2) 을 읽어 의존 위상정렬로 웨이브를 유도하고, 각 웨이브의 독립 edit_only 태스크를 같은 작업 트리에서 서브에이전트로 병렬 실행, mutating·의존 태스크는 순차 실행한다. 부모(메인 세션)가 웨이브 단위로 검증·테스트·커밋. 호스트가 병렬 dispatch 불가 시 순차 fallback 으로 degrade.","JayJihyunKim\u002Frein","JayJihyunKim","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9338574?v=4","01M70FV3CW5XEZGG6GS341V6J6","flyingcat4","01M70FV3DSX4YES0CN14AFJT2T",1,"MIT","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Fparallel-execute\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"parallel","execute","parallel execute","plan","edit","only","dispatch","fallback","scope","mode","2026-11-10 10:12:30",false,"---\nname: parallel-execute\ndescription: 활성 plan 의 `## 실행 전략`(depends_on\u002Fmode\u002Fscope v2) 을 읽어 의존 위상정렬로 웨이브를 유도하고, 각 웨이브의 독립 edit_only 태스크를 같은 작업 트리에서 서브에이전트로 병렬 실행, mutating·의존 태스크는 순차 실행한다. 부모(메인 세션)가 웨이브 단위로 검증·테스트·커밋. 호스트가 병렬 dispatch 불가 시 순차 fallback 으로 degrade.\n---\n\n# parallel-execute\n\n스키마 상세: `plugins\u002Frein-core\u002Fdocs\u002Fexec-strategy-schema.md`(v2) — 이 스킬은 소비만 한다.\n\n## 목적\n\n검증 통과한 plan 의 `## 실행 전략` v2 를 위상정렬 웨이브로 나눠 독립 edit_only 태스크는 병렬, mutating·의존 태스크는 순차 실행하고, 부모가 웨이브 경계마다 검증·테스트·커밋한다. 격리는 강제 sandbox 가 아니라 워커 규율 + 부모 사후 델타 검증 두 겹.\n\n## 사용 시점\n\n활성 plan 의 `## 실행 전략` 이 v2 `tasks[]` 일 때만 **명시 호출**(자동 발동 없음). 부재 \u002F 단일 태스크 \u002F 구 `parallelizable` shape 는 대상 아님.\n\n## Preflight\n\n1. plan 의 `## 실행 전략` 을 파싱. validator(`rein-validate-coverage-matrix.py`)가 위상정렬·사이클·disjoint·legacy 를 이미 fail-closed 검증함을 **전제**(재검증 안 함).\n2. 섹션 **부재** → 병렬 대상 아님. 순차 실행 안내 후 종료.\n3. 구 `parallelizable:`\u002F`workers:` shape → validator exit 2 차단. 마이그레이션 안내 후 종료.\n\n## 웨이브 유도 + 결정적 스케줄러\n\n웨이브 = 위상정렬로 묶인 동시 실행 단위. 매 스텝 규칙:\n\n- **ready 집합** = `depends_on` 가 모두 완료된 미실행 태스크.\n- ready 에 `mutating` 있으면 → **plan 순서 가장 앞선 mutating 1개만 단독** 실행 후 ready 재계산.\n- ready 가 전부 `edit_only` → 전부를 **한 메시지에서 병렬 dispatch**(Agent 도구 다중 호출).\n- `mutating` 은 어떤 태스크와도 동시 실행 금지. 사이클 없음(검증기 보증) → 데드락 없음.\n\n**canonical 순서 SSOT** — 부모는 결정성을 재정의하지 않고 Phase 1 emitter 를 소비한다:\n\n```\npython3 scripts\u002Frein-validate-coverage-matrix.py schedule \u003Cplan>\n```\n\n출력은 웨이브당 한 줄 `step \u003Cn>: \u003Cid> [\u003Cid> ...]`(id 는 plan 순서). 부재 → 빈 출력+exit 0, 무효\u002Flegacy → exit 2. 각 `step` 을 한 웨이브로 dispatch(1개=단독, 여럿=병렬). emitter 미가용 시 위 규칙 복제.\n\n## 워커 dispatch 계약\n\n워커 = 한 태스크를 같은 작업 트리에서 실행하는 서브에이전트. dispatch 시 `task_id`·`mode`·`scope`·금지목록을 프롬프트로 전달. 워커는 **마커\u002F결과 파일 없이** 결과를 최종 메시지로 반환.\n\n**공통 결과 스키마**(두 변형 동일): `task_id`(필수) \u002F `status: completed|blocked`(필수) \u002F `changed_files: [repo-relative path...]`(필수, advisory) \u002F `blocked_reason`(blocked 시 필수) \u002F `recommendation: parent_fallback|split|scope_expand`(blocked 시) \u002F `summary`(1-3줄). 부모는 `status=blocked` 또는 **결과 누락(timeout\u002Ftruncation)** 을 **미완** 처리 → 의존 후속 진입 불가, `recommendation` 으로 분기.\n\n**edit_only 변형**: 선언 `scope` 파일만 편집(best-effort). **금지** — 커밋 금지·스테이징·리뷰\u002F보안 stamp 금지·trail 기록·전체 포매터·변경성 테스트\u002F코드젠·git stash(가드가 차단). 같은 웨이브 여러 edit_only 는 한 메시지 병렬 dispatch.\n\n**mutating 변형**: 자기만의 **단독 웨이브**(서브에이전트 1개) dispatch. edit_only 금지목록 중 **변경성 명령 허용**(코드젠·변경성 테스트·설치). 단 커밋·스테이징·stamp·trail 은 부모 소유 금지. 공통 결과 스키마 **동일** 반환. 부모 검증 `scope` = 선언 + **예상 부작용 경로**(plan-writer 가 함께 선언). mutating 도 \"선언(+부작용) 밖 변경 = reject\".\n\n## 호스트 능력 fallback\n\n호스트가 병렬 dispatch 불가하면 **순차 fallback**: 같은 emitter 순서로 각 태스크를 plan 순서로 순차 실행. 검증·커밋 경로(부모 통합)는 병렬과 **동일**.\n\n## 부모 통합 (barrier)\n\n부모(메인 세션)가 웨이브 경계마다 barrier 로 통합:\n\n1. **클린 시작** — 각 웨이브는 **클린 트리**에서 시작(직전 웨이브 커밋이 보장, 첫 웨이브는 세션 현재 커밋 상태). 경계 dirty → **중단·보고**(무관 변경 혼입 방지).\n2. **시작 이후 델타** 산출(기계가독): `git status --porcelain=v1 -z -uall --ignored=no` (fallback: `git diff --name-only HEAD` + `git ls-files --others --exclude-standard` — `-z` 아니므로 4번 정규화 상속) → **repo-relative literal 파일 경로** 정규화(`-uall` 로 untracked 디렉토리 collapse 방지).\n3. **부분집합 검증** — 델타 ⊆ 그 웨이브 `scope`(mutating 은 +예상 부작용 경로) 합집합. per-worker 귀속 불가 → 워커 `changed_files` 는 advisory.\n4. **scope 경로 안전화(보안, 필수)** — `scope`·델타 경로를 검증 전 정규화: **절대경로·`..`·`..\\`·NUL·드라이브문자(`C:`) 포함 시 reject** (path traversal 차단), 나머지는 `realpath`(symlink resolve) 후 프로젝트 루트 prefix **containment** 검증(밖이면 reject). 정규화 실패 경로는 합집합에서 제외. **scope·델타 양쪽을 동일 정규형으로** 비교(검증기 미필터 — 이 단계가 유일 방어선).\n5. 선언 밖 변경 → **reject + 보고**(커밋 안 함). 통과 → 웨이브 단위 1회 포맷\u002F린트\u002F테스트\u002F리뷰(보안 기록 발급·재작업 순서: `agents\u002Forchestrator.md` `security-evidence-issuance`) → 그 델타만 **웨이브당 1커밋** → 다음(다시 클린 시작). **테스트 범위**: 웨이브 델타가 닿는 테스트만 실행한다(가능하면 대상 테스트 선택 도구 `rein-affected-tests.py` 로 고르고, plan 의 목록은 하한). 포맷·린트도 가능하면 델타 파일 대상으로 돌린다. 전체 스위트는 사이클 기준 1회(첫 웨이브 전) + 최종 1회(최종 트리가 기준과 다를 때) + `codex-review` 스킬 \"전체 테스트 재실행으로 돌아가는 조건\" 에 해당할 때만 — 정본 `rules\u002Ftesting.md` \"검증 실행 범위\".\n\n## 사용자 보고 방식\n\n내부 식별자(델타·부분집합·stamp)를 평문 번역: 시작=\"N번째 묶음(K개)을 병렬 실행\", 완료=\"변경 확인·검증·테스트 후 한 번에 커밋\", 차단=\"선언 파일 밖을 건드려 멈춤, 커밋 안 함\".\n","# parallel-execute\n\n스키마 상세: `plugins\u002Frein-core\u002Fdocs\u002Fexec-strategy-schema.md`(v2) — 이 스킬은 소비만 한다.\n\n## 목적\n\n검증 통과한 plan 의 `## 실행 전략` v2 를 위상정렬 웨이브로 나눠 독립 edit_only 태스크는 병렬, mutating·의존 태스크는 순차 실행하고, 부모가 웨이브 경계마다 검증·테스트·커밋한다. 격리는 강제 sandbox 가 아니라 워커 규율 + 부모 사후 델타 검증 두 겹.\n\n## 사용 시점\n\n활성 plan 의 `## 실행 전략` 이 v2 `tasks[]` 일 때만 **명시 호출**(자동 발동 없음). 부재 \u002F 단일 태스크 \u002F 구 `parallelizable` shape 는 대상 아님.\n\n## Preflight\n\n1. plan 의 `## 실행 전략` 을 파싱. validator(`rein-validate-coverage-matrix.py`)가 위상정렬·사이클·disjoint·legacy 를 이미 fail-closed 검증함을 **전제**(재검증 안 함).\n2. 섹션 **부재** → 병렬 대상 아님. 순차 실행 안내 후 종료.\n3. 구 `parallelizable:`\u002F`workers:` shape → validator exit 2 차단. 마이그레이션 안내 후 종료.\n\n## 웨이브 유도 + 결정적 스케줄러\n\n웨이브 = 위상정렬로 묶인 동시 실행 단위. 매 스텝 규칙:\n\n- **ready 집합** = `depends_on` 가 모두 완료된 미실행 태스크.\n- ready 에 `mutating` 있으면 → **plan 순서 가장 앞선 mutating 1개만 단독** 실행 후 ready 재계산.\n- ready 가 전부 `edit_only` → 전부를 **한 메시지에서 병렬 dispatch**(Agent 도구 다중 호출).\n- `mutating` 은 어떤 태스크와도 동시 실행 금지. 사이클 없음(검증기 보증) → 데드락 없음.\n\n**canonical 순서 SSOT** — 부모는 결정성을 재정의하지 않고 Phase 1 emitter 를 소비한다:\n\n```\npython3 scripts\u002Frein-validate-coverage-matrix.py schedule \u003Cplan>\n```\n\n출력은 웨이브당 한 줄 `step \u003Cn>: \u003Cid> [\u003Cid> ...]`(id 는 plan 순서). 부재 → 빈 출력+exit 0, 무효\u002Flegacy → exit 2. 각 `step` 을 한 웨이브로 dispatch(1개=단독, 여럿=병렬). emitter 미가용 시 위 규칙 복제.\n\n## 워커 dispatch 계약\n\n워커 = 한 태스크를 같은 작업 트리에서 실행하는 서브에이전트. dispatch 시 `task_id`·`mode`·`scope`·금지목록을 프롬프트로 전달. 워커는 **마커\u002F결과 파일 없이** 결과를 최종 메시지로 반환.\n\n**공통 결과 스키마**(두 변형 동일): `task_id`(필수) \u002F `status: completed|blocked`(필수) \u002F `changed_files: [repo-relative path...]`(필수, advisory) \u002F `blocked_reason`(blocked 시 필수) \u002F `recommendation: parent_fallback|split|scope_expand`(blocked 시) \u002F `summary`(1-3줄). 부모는 `status=blocked` 또는 **결과 누락(timeout\u002Ftruncation)** 을 **미완** 처리 → 의존 후속 진입 불가, `recommendation` 으로 분기.\n\n**edit_only 변형**: 선언 `scope` 파일만 편집(best-effort). **금지** — 커밋 금지·스테이징·리뷰\u002F보안 stamp 금지·trail 기록·전체 포매터·변경성 테스트\u002F코드젠·git stash(가드가 차단). 같은 웨이브 여러 edit_only 는 한 메시지 병렬 dispatch.\n\n**mutating 변형**: 자기만의 **단독 웨이브**(서브에이전트 1개) dispatch. edit_only 금지목록 중 **변경성 명령 허용**(코드젠·변경성 테스트·설치). 단 커밋·스테이징·stamp·trail 은 부모 소유 금지. 공통 결과 스키마 **동일** 반환. 부모 검증 `scope` = 선언 + **예상 부작용 경로**(plan-writer 가 함께 선언). mutating 도 \"선언(+부작용) 밖 변경 = reject\".\n\n## 호스트 능력 fallback\n\n호스트가 병렬 dispatch 불가하면 **순차 fallback**: 같은 emitter 순서로 각 태스크를 plan 순서로 순차 실행. 검증·커밋 경로(부모 통합)는 병렬과 **동일**.\n\n## 부모 통합 (barrier)\n\n부모(메인 세션)가 웨이브 경계마다 barrier 로 통합:\n\n1. **클린 시작** — 각 웨이브는 **클린 트리**에서 시작(직전 웨이브 커밋이 보장, 첫 웨이브는 세션 현재 커밋 상태). 경계 dirty → **중단·보고**(무관 변경 혼입 방지).\n2. **시작 이후 델타** 산출(기계가독): `git status --porcelain=v1 -z -uall --ignored=no` (fallback: `git diff --name-only HEAD` + `git ls-files --others --exclude-standard` — `-z` 아니므로 4번 정규화 상속) → **repo-relative literal 파일 경로** 정규화(`-uall` 로 untracked 디렉토리 collapse 방지).\n3. **부분집합 검증** — 델타 ⊆ 그 웨이브 `scope`(mutating 은 +예상 부작용 경로) 합집합. per-worker 귀속 불가 → 워커 `changed_files` 는 advisory.\n4. **scope 경로 안전화(보안, 필수)** — `scope`·델타 경로를 검증 전 정규화: **절대경로·`..`·`..\\`·NUL·드라이브문자(`C:`) 포함 시 reject** (path traversal 차단), 나머지는 `realpath`(symlink resolve) 후 프로젝트 루트 prefix **containment** 검증(밖이면 reject). 정규화 실패 경로는 합집합에서 제외. **scope·델타 양쪽을 동일 정규형으로** 비교(검증기 미필터 — 이 단계가 유일 방어선).\n5. 선언 밖 변경 → **reject + 보고**(커밋 안 함). 통과 → 웨이브 단위 1회 포맷\u002F린트\u002F테스트\u002F리뷰(보안 기록 발급·재작업 순서: `agents\u002Forchestrator.md` `security-evidence-issuance`) → 그 델타만 **웨이브당 1커밋** → 다음(다시 클린 시작). **테스트 범위**: 웨이브 델타가 닿는 테스트만 실행한다(가능하면 대상 테스트 선택 도구 `rein-affected-tests.py` 로 고르고, plan 의 목록은 하한). 포맷·린트도 가능하면 델타 파일 대상으로 돌린다. 전체 스위트는 사이클 기준 1회(첫 웨이브 전) + 최종 1회(최종 트리가 기준과 다를 때) + `codex-review` 스킬 \"전체 테스트 재실행으로 돌아가는 조건\" 에 해당할 때만 — 정본 `rules\u002Ftesting.md` \"검증 실행 범위\".\n\n## 사용자 보고 방식\n\n내부 식별자(델타·부분집합·stamp)를 평문 번역: 시작=\"N번째 묶음(K개)을 병렬 실행\", 완료=\"변경 확인·검증·테스트 후 한 번에 커밋\", 차단=\"선언 파일 밖을 건드려 멈춤, 커밋 안 함\".\n",{"name":5,"description":7},"main","8e6e9ee16c5c7343c6f0db55f6c8b37d5ef6f1d0","plugins\u002Frein-core\u002Fskills\u002Fparallel-execute",0,"https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein","https:\u002F\u002Fgithub.com\u002FJayJihyunKim","2026-10-15 08:31:34",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add JayJihyunKim\u002Frein --skill parallel-execute",{"tool":47,"command":48},"bunx","bunx skills add JayJihyunKim\u002Frein --skill parallel-execute",{"tool":50,"command":51},"pnpm","pnpm dlx skills add JayJihyunKim\u002Frein --skill parallel-execute","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Fparallel-execute\u002FSKILL.md",true,[],[56,69,80,91,103,110],{"skillNo":57,"name":58,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":66,"publishedAt":29},"01M70FX2WFS12FG002RNTCSXC7","sample-skill","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Ftests\u002Fscripts\u002Ffixtures\u002Frein-template-min\u002F.claude\u002Fskills\u002Fsample-skill\u002FSKILL.md",[61],{"categoryNo":62,"categoryName":63,"taxonomyType":64,"taxonomyTypeDesc":65},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[67,68],"sample","sample skill",{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":29},"01M70FX0BT6WSNZKFF60KTZ5H9","repo-audit","저장소 전체 상태 점검. 오래된 규칙, 누락 테스트, 비활성 에이전트, trail 일관성 확인.","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Frepo-audit\u002FSKILL.md",[],[76,77,78,79],"repo","repo audit","audit","trail",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":87,"publishedAt":29},"01M70FWXCWRZEJSDQGTNDEKF2G","promote-agent","에이전트 후보를 정식 에이전트로 승격. 사람 승인 이후에만 실행.","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Fpromote-agent\u002FSKILL.md",[86],{"categoryNo":62,"categoryName":63,"taxonomyType":64,"taxonomyTypeDesc":65},[88,89,90],"promote agent","promote","incidents",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":29},"01M70FWTP0QPQN09VJR8DNKWZS","pr-review-fixer","PR 리뷰 코멘트를 읽고 수정 사항을 자동으로 적용한다","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Fpr-review-fixer\u002FSKILL.md",[],[98,99,100,101,102],"pr review fixer","review","pr review","pr","fixer",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":29},"01M70FWR0TC5NDF12D9E5ETBAW","persona","페르소나 프리셋 선택·해제 + 질문-답변 커스텀 프리셋 생성. \"페르소나 골라줘\u002F만들어줘\u002F바꿔줘\u002F꺼줘\" 류 요청에서 호출.","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Fpersona\u002FSKILL.md",[],[105],{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":29},"01M70FWF6XAVDDJRM4GQB3V2RY","incidents-to-rule","trail\u002Fincidents\u002F 파일을 분석해 AGENTS.md에 추가할 규칙 후보를 생성한다","https:\u002F\u002Fgithub.com\u002FJayJihyunKim\u002Frein\u002Fblob\u002Fmain\u002Fplugins\u002Frein-core\u002Fskills\u002Fincidents-to-rule\u002FSKILL.md",[],[117,90,118,119,120,79,78,121],"rule","incidents to rule","daily","incident","draft"]