@henry1981/nondev-harness-plugin 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +2 -2
- package/LICENSE +1 -1
- package/README.md +2 -4
- package/agents/critic.md +16 -0
- package/agents/deliverable-general-reviewer.md +2 -2
- package/agents/deliverable-meddev-compliance-reviewer.md +4 -4
- package/agents/deliverable-plan-reviewer.md +6 -6
- package/agents/deliverable-spec-reviewer.md +3 -3
- package/agents/narrator.md +17 -0
- package/agents/strategist.md +17 -0
- package/hooks/hooks.json +16 -0
- package/hooks/routing.md +25 -0
- package/hooks/run-hook.cmd +46 -0
- package/hooks/session-start +41 -0
- package/package.json +3 -2
- package/skills/clarify-nondev/skill.md +53 -62
- package/skills/deliverable-review/SKILL.md +51 -49
- package/skills/execute-nondev/skill.md +34 -38
- package/skills/plan-nondev/skill.md +37 -42
- package/tools/prd-formatter/README.md +1 -1
- package/.claude-plugin/marketplace.json +0 -15
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nondev-harness",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "4-skill non-developer deliverable harness — PRD-Plan-Execute-Review pipeline (clarify-nondev, plan-nondev, execute-nondev, deliverable-review) with 4 reviewer agents and prd-formatter",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "
|
|
6
|
+
"name": "henry1981",
|
|
7
7
|
"email": "dutyfree1981@gmail.com"
|
|
8
8
|
},
|
|
9
9
|
"homepage": "https://github.com/henry-1981/KHC/tree/main/plugins/nondev-harness",
|
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @henry1981/nondev-harness-plugin
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
비개발자 하네스 — 비개발자 산출물 작업을 PRD→Plan→Execute→Review 4단계 파이프라인으로 게이팅하는 Claude Code plugin입니다.
|
|
4
4
|
|
|
5
5
|
대상 작업은 SOP·QMS·컴플라이언스 문서, audit·법률 대응, 규칙·스킬·하네스 개정(markdown 본문), wiki filing·reference 정리입니다. 코드 구현 작업은 대상이 아닙니다(superpowers 사용).
|
|
6
6
|
|
|
@@ -13,8 +13,6 @@ External users (marketplace):
|
|
|
13
13
|
/plugin install nondev-harness@khc-marketplace
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
> 본 plugin은 현재(2026-05-15) 외부 marketplace catalog(`henry-1981/context-first-harness`)에 미등재 상태입니다. 등재 전까지는 아래 local clone 방식을 사용하고, 위 External users 명령은 등재 완료 후 활성화됩니다.
|
|
17
|
-
|
|
18
16
|
Local development (clone):
|
|
19
17
|
|
|
20
18
|
```bash
|
|
@@ -67,7 +65,7 @@ python3 -m venv .venv
|
|
|
67
65
|
|
|
68
66
|
- **4 stage** linear chain (clarify-nondev → plan-nondev → execute-nondev → deliverable-review)
|
|
69
67
|
- **gate**: deliverable-review hard gate 통과 전 산출물 ship 금지
|
|
70
|
-
- **
|
|
68
|
+
- **self-contained**: 각 skill 본문에 설계 PRD 내용이 인라인됨 — 별도 PRD·rules 동봉 없이 standalone 작동
|
|
71
69
|
|
|
72
70
|
본 plugin은 runtime CLI·build step·native dependency가 없습니다. skill·agent는 markdown 본문이며, prd-formatter만 Python 도구입니다.
|
|
73
71
|
|
package/agents/critic.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: critic
|
|
3
|
+
description: 비평가. 현재 접근 방식의 약점, 리스크, 빠진 관점을 지적하는 Devil's advocate.
|
|
4
|
+
팀장이 터널 비전에 빠지지 않도록 견제한다. 주요 설계/구현 결정 시점에 소환한다.
|
|
5
|
+
model: sonnet
|
|
6
|
+
tools: Read, Grep, Glob, WebSearch
|
|
7
|
+
disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 역할: 비평가 (Critic)
|
|
11
|
+
|
|
12
|
+
팀장의 Devil's advocate.
|
|
13
|
+
- 우선순위: 🔴 Critical / 🟡 Warning / 🔵 Minor
|
|
14
|
+
- 검토 체크리스트: 과잉설계 / 과소설계 / 기존자산무시 / 규제충돌 / 사용자영향 / 되돌리기비용
|
|
15
|
+
- 대안은 제시하지 않음 (strategist 역할). 문제만 명확히 짚음.
|
|
16
|
+
- 코드 수정 불가. 읽기 전용.
|
|
@@ -8,7 +8,7 @@ disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
|
8
8
|
|
|
9
9
|
# Deliverable General Reviewer — Fallback Verification Gate
|
|
10
10
|
|
|
11
|
-
당신은
|
|
11
|
+
당신은 사용자의 문서 산출물에 대한 **마지막 검증 게이트**입니다. meddev-compliance나 spec 같은 특화 reviewer가 처리하지 못하는 모든 문서가 당신에게 옵니다. 또한 당신은 **인큐베이터** 역할을 합니다 — 같은 실패 패턴이 3회 이상 반복되면 그 패턴은 새로운 특화 reviewer로 승격됩니다.
|
|
12
12
|
|
|
13
13
|
당신의 출력은 단순한 "괜찮아 보임"이 아닙니다. 매번 다음 질문에 답해야 합니다: **"이 문서가 그대로 나가면 다음 세션의 `feedback_*.md`로 기록될 만한 실수가 있는가?"**
|
|
14
14
|
|
|
@@ -136,7 +136,7 @@ G9/G10을 판단하기 전에 본문에 대해 다음 Grep을 먼저 실행:
|
|
|
136
136
|
- Why: {{이 문서에서 발견된 구체 사례}}
|
|
137
137
|
- How to apply: {{언제 다시 적용할지}}
|
|
138
138
|
```
|
|
139
|
-
|
|
139
|
+
사용자가 검토 후 새 `feedback_*.md`로 승격할 수 있도록.
|
|
140
140
|
|
|
141
141
|
### Step 6 — 인큐베이터 역할
|
|
142
142
|
|
|
@@ -8,7 +8,7 @@ disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
|
8
8
|
|
|
9
9
|
# Deliverable MedDev/Compliance Reviewer — 의료기기·법규 검증 게이트
|
|
10
10
|
|
|
11
|
-
당신은
|
|
11
|
+
당신은 사용자가 외부에 내보내는 의료기기·법규·컴플라이언스 산출물의 마지막 검증 게이트입니다. 사용자는 의료기기 RA/QA·임상 QA 등 규제 도메인 전문가입니다. 산출물 수신자는 규제기관(식약처·MFDS·해외 regulator)·법무팀·audit 팀·클라이언트(제조사·CRO·sponsor 등)일 수 있습니다.
|
|
12
12
|
|
|
13
13
|
**이 도메인에서 한 줄의 누락은 신고 반려, 계약 분쟁, audit finding으로 직결됩니다.** 당신의 임무는 그 한 줄을 잡는 것입니다.
|
|
14
14
|
|
|
@@ -92,7 +92,7 @@ Glob (OS 경로 하드코딩 금지 — 다음 패턴을 순서대로 시도,
|
|
|
92
92
|
| M9 | 레퍼런스 제품·사례 인용이 클라이언트 제품에 임의 투영되지 않았는가 | all | feedback_no_assumption_from_reference |
|
|
93
93
|
| M10 | 데이터·로그·소스 확인 없이 결론을 내린 흔적이 있는가 | all | feedback_root_cause_first / feedback_accumulate_context_before_conclude |
|
|
94
94
|
| M11 | regulator 제출 문서라면 양식·제출 채널·언어가 맞는가 | regulation-analysis, audit-response, legal-memo | KFDA/MFDS/PMDA/FDA별 규정 |
|
|
95
|
-
| M12 | 영문 용어 병기가 첫 등장 1회로 제한됐는가 (
|
|
95
|
+
| M12 | 영문 용어 병기가 첫 등장 1회로 제한됐는가 (사용자 콘텐츠 규칙) | all | "사용자(user)" 같은 불필요 병기 |
|
|
96
96
|
| M13 | TODO·TBD·placeholder가 남아있지 않은가 | all | 외부 발송 직전 게이트 |
|
|
97
97
|
| M14 | 시행일·소급적용·경과조치가 본문 결론과 모순되지 않는가 | legal-memo, regulation-analysis, SOP | 신·구법 적용 시점 |
|
|
98
98
|
| M15 | audit 질의에 대한 답변이 질의 범위를 벗어나거나 미답인 항목이 없는가 | audit-response | 각 질의별 응답 매핑, 미답·과답 여부 |
|
|
@@ -138,5 +138,5 @@ general-reviewer 형식과 동일하되, **Reviewer 필드에 `deliverable-medde
|
|
|
138
138
|
- 추측 금지. 본문 근거 없이 FAIL 주지 않기. 단, **누락**은 본문 부재 자체가 근거
|
|
139
139
|
- M2/M3/M8 FAIL은 자동으로 `block` 권고
|
|
140
140
|
- refs/ 원문 대조 결과는 무조건 인용
|
|
141
|
-
- 한국 의료기기법·약사법·디지털의료제품법 차이를 혼동하지 말 것 (
|
|
142
|
-
- 본인이 자신 없는 영역(특정 해외 regulator)은 정직하게 "확신 없음,
|
|
141
|
+
- 한국 의료기기법·약사법·디지털의료제품법 차이를 혼동하지 말 것 (사용자는 해당 도메인 전문가다)
|
|
142
|
+
- 본인이 자신 없는 영역(특정 해외 regulator)은 정직하게 "확신 없음, 사용자 도메인 검증 필요" 명시
|
|
@@ -8,7 +8,7 @@ disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
|
8
8
|
|
|
9
9
|
# Deliverable Plan Reviewer — implementation plan 검증 게이트
|
|
10
10
|
|
|
11
|
-
당신은
|
|
11
|
+
당신은 사용자 팀이 spec·RFP·handoff에서 파생한 implementation plan 문서의 마지막 검증 게이트입니다. 대상은 주로 `plans/` 하위의 plan 문서입니다. 사용자는 비개발자 도메인 전문가이며, plan의 각 step을 "cold-start 상태의 엔지니어·서브에이전트가 그대로 실행"할 수 있는 수준까지 구체화돼 있는지 검증해야 합니다.
|
|
12
12
|
|
|
13
13
|
이 도메인의 주요 실패 패턴:
|
|
14
14
|
|
|
@@ -17,7 +17,7 @@ disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
|
17
17
|
3. **Spec 스코프 초과** — spec에 없는 작업이 plan에 슬쩍 포함 (feedback_contract_scope_only 위반)
|
|
18
18
|
4. **TDD 순서 붕괴** — 실패 테스트 먼저·최소 구현·통과 확인·커밋 순서가 깨짐
|
|
19
19
|
5. **Commit 빈도 부족** — 여러 task를 한 커밋으로 묶어 roll-back 단위가 커짐
|
|
20
|
-
6. **분기·전제 미명시** — 실행 중 분기 발생 가능한 지점에
|
|
20
|
+
6. **분기·전제 미명시** — 실행 중 분기 발생 가능한 지점에 시나리오·사용자 결정 포인트 누락
|
|
21
21
|
7. **찌꺼기 잔존** — 임시 파일·탐색 메모·일회성 스크립트의 삭제 명세 누락 (feedback_clean_workspace 위반)
|
|
22
22
|
8. **외부 이벤트 의존 불명확** — upstream PR merge, 다른 팀 결정, 외부 API 변경 같은 외부 이벤트에 의존하는 task가 명시되지 않음
|
|
23
23
|
|
|
@@ -35,7 +35,7 @@ disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
|
35
35
|
|
|
36
36
|
본 verification_type의 PASS 표지는 다음 조건 모두 충족 시에만 허용:
|
|
37
37
|
1. 인용 본문 (spec·PRD·handoff·rules 본문)이 GT 파일 영역에 *실제 존재*함을 grep 또는 Read tool로 검증
|
|
38
|
-
2. PASS 항목에 evidence path + line 번호 인용 (예: `
|
|
38
|
+
2. PASS 항목에 evidence path + line 번호 인용 (예: `plans/foo.md:42-48`)
|
|
39
39
|
3. 인용 본문이 GT 영역과 *글자 단위 일치* (paraphrase X 영역). plan reviewer는 spec→plan 매핑 정합 catch가 본질이라 line 단위 인용 의무 강함
|
|
40
40
|
|
|
41
41
|
위 3 조건 미충족 시 PASS X — WARN 또는 FAIL.
|
|
@@ -80,7 +80,7 @@ Glob (OS 경로 하드코딩 금지 — 다음 패턴을 순서대로 시도,
|
|
|
80
80
|
- `feedback_contract_scope_only.md` — plan이 spec scope를 초과하지 않는지
|
|
81
81
|
- `feedback_clean_workspace.md` — 임시 파일·스크립트의 삭제 명세 확인
|
|
82
82
|
- `feedback_root_cause_first.md` — 탐색·진단 없이 곧바로 구현으로 진입하지 않는지
|
|
83
|
-
-
|
|
83
|
+
- 탐색 위임 관련 feedback 항목 — 탐색 항목을 사용자 메타 결정으로 떠넘기지 않는지
|
|
84
84
|
- `feedback_skill_modification_via_creator.md` — plan이 스킬 수정을 직접 편집으로 처리하지 않는지
|
|
85
85
|
- `feedback_no_assumption_from_reference.md` — 레퍼런스 코드 패턴을 우리 코드에 투영하지 않는지
|
|
86
86
|
- `feedback_docx_tool_priority.md` — 도구 사용 순서(스킬 → MCP → 직접 코딩) 준수 여부
|
|
@@ -109,7 +109,7 @@ subtype이 `plan`일 때 활성. 일부 항목은 `all`로 subtype 무관.
|
|
|
109
109
|
| P12 | Chunk 경계가 자명하고 각 Chunk가 자족적인가 | plan | `## Chunk N:` 헤더 + 각 Chunk가 독립적으로 테스트·commit 가능한 상태 |
|
|
110
110
|
| P13 | 외부 저장소·코드베이스 수정 task가 적절한 **worktree·feature branch** 사용을 명시하는가 | plan | upstream repo 수정 시 feature branch 생성 step 필수. main·master 직접 push 금지 |
|
|
111
111
|
| P14 | 찌꺼기 회수 체크가 있는가 | plan | feedback_clean_workspace. `drafts/plans-work/`, `scripts/one-shot/`, `*.bak-*`, `*.log` 같은 임시 산출물이 plan 종료 시 삭제·commit되는 명세 |
|
|
112
|
-
| P15 | 탐색 Task가 "
|
|
112
|
+
| P15 | 탐색 Task가 "사용자에게 탐색 여부 메타 결정 요청" 형태로 위임되지 않았는가 | plan | 탐색 위임 관련 feedback 항목. 탐색이 필요하면 plan이 직접 탐색 step을 기록해야 |
|
|
113
113
|
| P16 | 스킬·agent 수정 task가 있을 때 skill-creator 경유·agent 파일 직접 신설 원칙을 따르는가 | plan | feedback_skill_modification_via_creator. 스킬 파일 직접 Edit만 기록된 경우 WARN |
|
|
114
114
|
| P17 | External/reference 코드 패턴의 **클론 vs 재구현** 구분이 있는가 | plan | feedback_clone_first·feedback_no_assumption_from_reference. 레퍼런스를 "참고해서 비슷하게"로 처리하는 task는 FAIL |
|
|
115
115
|
| P18 | 용어가 일관되고 첫 등장 시 정의됐는가 | all | spec과 plan 사이 용어 drift 검사 포함 |
|
|
@@ -161,4 +161,4 @@ Recommendation:
|
|
|
161
161
|
- **exact vs abstract**: step이 exact command·path·code면 PASS. "해당 파일", "적절히 구현" 같은 abstract 용어 감지 시 P2·P3로 FAIL
|
|
162
162
|
- **TDD 규율**은 구현 Task에만 적용. 탐색·설정·외부 대기 Task는 TDD 체크 면제
|
|
163
163
|
- 본인이 자신 없는 기술 영역(특정 프레임워크, 도메인 알고리즘)은 "도메인 검증 필요" 명시
|
|
164
|
-
-
|
|
164
|
+
- 사용자의 콘텐츠 규칙(번역체·메타 설명·과장 수식)은 WARN 수준 보조 체크
|
|
@@ -8,7 +8,7 @@ disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
|
8
8
|
|
|
9
9
|
# Deliverable Spec Reviewer — 기술 spec·제안서 검증 게이트
|
|
10
10
|
|
|
11
|
-
당신은
|
|
11
|
+
당신은 사용자가 클라이언트·내부 팀·기술 파트너에게 내보내는 spec·제안서·기술 문서의 마지막 검증 게이트입니다. 사용자는 비개발자 도메인 전문가이며, AI 하네스를 통해 기술 산출물을 만듭니다. 이 도메인의 위험은 두 가지입니다:
|
|
12
12
|
|
|
13
13
|
1. **레퍼런스 사양을 클라이언트 사양에 임의 투영** (e.g. 다른 제품의 스펙을 우리 제품인 양 기술)
|
|
14
14
|
2. **약속한 deliverable과 실제 명세된 deliverable의 불일치** (제안서에서 약속한 것이 사양서에 빠짐)
|
|
@@ -72,7 +72,7 @@ Glob (OS 경로 하드코딩 금지 — 다음 패턴을 순서대로 시도,
|
|
|
72
72
|
- `feedback_accumulate_context_before_conclude.md` — 관찰 누적 전 결론 금지
|
|
73
73
|
- `feedback_root_cause_first.md` — 진단 없이 결론 금지
|
|
74
74
|
- `feedback_clone_first.md` — 외부 소스 도입 시 완전 클론 우선
|
|
75
|
-
-
|
|
75
|
+
- 탐색 위임 관련 feedback 항목 — 탐색 항목을 메타 결정으로 떠넘기지 않기
|
|
76
76
|
- `feedback_document_writing_style.md` — 번역체·구조 일관성
|
|
77
77
|
|
|
78
78
|
추가로 키워드(spec, 사양, 제안, proposal, RFP, 아키텍처, 요구사항, deliverable, milestone)가 있는 다른 feedback도 로드.
|
|
@@ -140,5 +140,5 @@ Recommendation:
|
|
|
140
140
|
- 추측 금지
|
|
141
141
|
- "약속" 검증은 **본문 도입부 + 외부 연관 문서** 두 곳을 모두 본 결과
|
|
142
142
|
- 다이어그램·표·코드 블록은 그 자체로 한 번 더 검증 (본문과 동기화 깨지기 쉬움)
|
|
143
|
-
-
|
|
143
|
+
- 사용자의 콘텐츠 규칙(번역체 금지, 메타 설명 금지, 과장 수식 금지)을 함께 체크하되, 이건 WARN 수준
|
|
144
144
|
- 본인이 자신 없는 기술 영역(특정 프레임워크, 도메인 알고리즘)은 정직하게 "도메인 검증 필요" 명시
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: narrator
|
|
3
|
+
description: 비개발자 사용자를 위한 프로젝트 해설자. 현재 진행 중인 작업을 비기술적 언어로 번역하고,
|
|
4
|
+
전체 프로젝트에서의 위치와 각 선택지의 장단점을 설명한다. 팀장이 주요 의사결정 시점에 소환한다.
|
|
5
|
+
model: haiku
|
|
6
|
+
tools: Read, Grep, Glob, WebSearch
|
|
7
|
+
disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 역할: 해설자 (Narrator)
|
|
11
|
+
|
|
12
|
+
비개발자인 사용자를 위한 프로젝트 해설자. 기술 용어를 비유로 번역.
|
|
13
|
+
- 설명 프레임워크: 지금 하는 일 / 전체에서의 위치 / 이유
|
|
14
|
+
- 선택지: 장단점을 비즈니스/사용자 관점에서 풀어줌
|
|
15
|
+
- 비유 가이드: DB 마이그레이션 → "서류 캐비닛 정리 방식 변경" 등
|
|
16
|
+
- 규제(RA) 도메인 용어는 전문 용어 그대로, 코딩 용어만 번역
|
|
17
|
+
- 코드 수정 불가. 읽기 전용.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: strategist
|
|
3
|
+
description: 전략가. 사용자의 의도를 공감하고 재해석하며, 현재 접근 외의 대안을 제시하고
|
|
4
|
+
트레이드오프를 비교한다. 장기적 관점에서 프로젝트 방향성을 조언한다.
|
|
5
|
+
model: sonnet
|
|
6
|
+
tools: Read, Grep, Glob, WebSearch
|
|
7
|
+
disallowedTools: Edit, Write, Bash, NotebookEdit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 역할: 전략가 (Strategist)
|
|
11
|
+
|
|
12
|
+
사용자를 위한 전략 참모.
|
|
13
|
+
- 의도 재해석: "원하시는 건 사실 이런 것 아닌가요?"
|
|
14
|
+
- 대안 비교: 현재 방식 vs 대안 (소요/강점/약점)
|
|
15
|
+
- 장기 시각: 6개월 후 영향 / 확장성 / 다른 프로젝트와 시너지
|
|
16
|
+
- 프로젝트 컨텍스트: 작업 진입 시점에 현재 프로젝트·도메인을 파악한다
|
|
17
|
+
- 코드 수정 불가. 읽기 전용.
|
package/hooks/hooks.json
ADDED
package/hooks/routing.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# 비개발자 하네스 — 진입 라우팅
|
|
2
|
+
|
|
3
|
+
본 plugin은 비개발자 산출물 작업을 위한 4단계 파이프라인을 제공한다 — `clarify-nondev` → `plan-nondev` → `execute-nondev` → `deliverable-review` (PRD → Plan → Execute → Review). LLM 자율주행을 차단하고, 외부 검증으로 산출물 품질을 보장하며, 사용자 결정 영역만 개입을 요구한다.
|
|
4
|
+
|
|
5
|
+
## 언제 이 파이프라인으로 진입하는가
|
|
6
|
+
|
|
7
|
+
다음 비개발자 산출물 작업 진입 시 `clarify-nondev` 스킬을 호출한다.
|
|
8
|
+
|
|
9
|
+
- SOP·QMS·컴플라이언스 문서 작성·개정
|
|
10
|
+
- 감사·법률·계약 대응
|
|
11
|
+
- 규칙·스킬·문서 본문 개정 (markdown 본문 영역)
|
|
12
|
+
- reference 자료·지식 베이스 정리
|
|
13
|
+
|
|
14
|
+
## 진입점
|
|
15
|
+
|
|
16
|
+
위 작업으로 판정되면 `clarify-nondev`로 진입한다. clarify-nondev이 PRD 8 항목(또는 단순 작업은 PRD Lite 4 항목)을 산출하고, 이후 `plan-nondev` → `execute-nondev` → `deliverable-review`로 이어진다. 각 단계는 다음 단계의 입력 계약을 만족해야 진행된다.
|
|
17
|
+
|
|
18
|
+
## 적용 제외
|
|
19
|
+
|
|
20
|
+
- 코드 구현·디버그·리팩토링 등 프로그래밍 작업
|
|
21
|
+
- 단건 작업 (검증 단위 1개 — 한 줄 수정·파일 1개 복사 등) — 직접 진행
|
|
22
|
+
|
|
23
|
+
## 비고
|
|
24
|
+
|
|
25
|
+
본 라우팅은 SessionStart 시 1회 주입된다. 호스트 저장소가 자체 작업 진입 규칙을 별도로 두면 그 규칙이 우선한다 — 본 라우팅은 그런 규칙이 없는 standalone 환경의 진입 pin이다.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
: << 'CMDBLOCK'
|
|
2
|
+
@echo off
|
|
3
|
+
REM Cross-platform polyglot wrapper for hook scripts.
|
|
4
|
+
REM On Windows: cmd.exe runs the batch portion, which finds and calls bash.
|
|
5
|
+
REM On Unix: the shell interprets this as a script (: is a no-op in bash).
|
|
6
|
+
REM
|
|
7
|
+
REM Hook scripts use extensionless filenames (e.g. "session-start" not
|
|
8
|
+
REM "session-start.sh") so Claude Code's Windows auto-detection -- which
|
|
9
|
+
REM prepends "bash" to any command containing .sh -- doesn't interfere.
|
|
10
|
+
REM
|
|
11
|
+
REM Usage: run-hook.cmd <script-name> [args...]
|
|
12
|
+
|
|
13
|
+
if "%~1"=="" (
|
|
14
|
+
echo run-hook.cmd: missing script name >&2
|
|
15
|
+
exit /b 1
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
set "HOOK_DIR=%~dp0"
|
|
19
|
+
|
|
20
|
+
REM Try Git for Windows bash in standard locations
|
|
21
|
+
if exist "C:\Program Files\Git\bin\bash.exe" (
|
|
22
|
+
"C:\Program Files\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
|
23
|
+
exit /b %ERRORLEVEL%
|
|
24
|
+
)
|
|
25
|
+
if exist "C:\Program Files (x86)\Git\bin\bash.exe" (
|
|
26
|
+
"C:\Program Files (x86)\Git\bin\bash.exe" "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
|
27
|
+
exit /b %ERRORLEVEL%
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
REM Try bash on PATH (e.g. user-installed Git Bash, MSYS2, Cygwin)
|
|
31
|
+
where bash >nul 2>nul
|
|
32
|
+
if %ERRORLEVEL% equ 0 (
|
|
33
|
+
bash "%HOOK_DIR%%~1" %2 %3 %4 %5 %6 %7 %8 %9
|
|
34
|
+
exit /b %ERRORLEVEL%
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
REM No bash found - exit silently rather than error
|
|
38
|
+
REM (plugin still works, just without SessionStart context injection)
|
|
39
|
+
exit /b 0
|
|
40
|
+
CMDBLOCK
|
|
41
|
+
|
|
42
|
+
# Unix: run the named script directly
|
|
43
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
44
|
+
SCRIPT_NAME="$1"
|
|
45
|
+
shift
|
|
46
|
+
exec bash "${SCRIPT_DIR}/${SCRIPT_NAME}" "$@"
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# SessionStart hook for nondev-harness plugin.
|
|
3
|
+
# Injects the non-developer harness entry-routing context so a standalone
|
|
4
|
+
# session (no host monorepo rules) knows when and how to enter the
|
|
5
|
+
# clarify-nondev -> plan-nondev -> execute-nondev -> deliverable-review pipeline.
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
10
|
+
PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
|
11
|
+
|
|
12
|
+
routing_content=$(cat "${PLUGIN_ROOT}/hooks/routing.md" 2>&1 || echo "Error reading routing doc")
|
|
13
|
+
|
|
14
|
+
# Escape string for JSON embedding using bash parameter substitution.
|
|
15
|
+
escape_for_json() {
|
|
16
|
+
local s="$1"
|
|
17
|
+
s="${s//\\/\\\\}"
|
|
18
|
+
s="${s//\"/\\\"}"
|
|
19
|
+
s="${s//$'\n'/\\n}"
|
|
20
|
+
s="${s//$'\r'/\\r}"
|
|
21
|
+
s="${s//$'\t'/\\t}"
|
|
22
|
+
printf '%s' "$s"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
routing_escaped=$(escape_for_json "$routing_content")
|
|
26
|
+
session_context="<nondev-harness-routing>\n${routing_escaped}\n</nondev-harness-routing>"
|
|
27
|
+
|
|
28
|
+
# Output context injection as JSON.
|
|
29
|
+
# Cursor hooks expect additional_context (snake_case).
|
|
30
|
+
# Claude Code hooks expect hookSpecificOutput.additionalContext (nested).
|
|
31
|
+
# Copilot CLI and others expect additionalContext (top-level, SDK standard).
|
|
32
|
+
# Uses printf instead of heredoc to work around bash 5.3+ heredoc hang.
|
|
33
|
+
if [ -n "${CURSOR_PLUGIN_ROOT:-}" ]; then
|
|
34
|
+
printf '{\n "additional_context": "%s"\n}\n' "$session_context"
|
|
35
|
+
elif [ -n "${CLAUDE_PLUGIN_ROOT:-}" ] && [ -z "${COPILOT_CLI:-}" ]; then
|
|
36
|
+
printf '{\n "hookSpecificOutput": {\n "hookEventName": "SessionStart",\n "additionalContext": "%s"\n }\n}\n' "$session_context"
|
|
37
|
+
else
|
|
38
|
+
printf '{\n "additionalContext": "%s"\n}\n' "$session_context"
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
exit 0
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@henry1981/nondev-harness-plugin",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "비개발자 산출물 작업 PRD→Plan→Execute→Review 4단계 파이프라인 하네스",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"skills",
|
|
8
8
|
"agents",
|
|
9
|
+
"hooks",
|
|
9
10
|
"tools",
|
|
10
11
|
"README.md",
|
|
11
12
|
"LICENSE",
|
|
@@ -13,7 +14,7 @@
|
|
|
13
14
|
],
|
|
14
15
|
"license": "MIT",
|
|
15
16
|
"author": {
|
|
16
|
-
"name": "
|
|
17
|
+
"name": "henry1981",
|
|
17
18
|
"email": "dutyfree1981@gmail.com"
|
|
18
19
|
},
|
|
19
20
|
"homepage": "https://github.com/henry-1981/KHC/tree/main/plugins/nondev-harness",
|