@tienne/gestalt 0.71.0 → 0.72.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.
Files changed (34) hide show
  1. package/CLAUDE.md +2 -2
  2. package/README.ko.md +4 -4
  3. package/README.md +3 -3
  4. package/dist/package.json +1 -1
  5. package/dist/plugin/role-agents/_shared/references/style-guide.md +19 -1
  6. package/dist/plugin/skills/_shared/agent-delegation.md +1 -1
  7. package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
  8. package/dist/plugin/skills/local-pr/SKILL.md +2 -1
  9. package/dist/plugin/skills/pr/SKILL.md +2 -0
  10. package/dist/plugin/skills/review/SKILL.md +3 -1
  11. package/dist/plugin/skills/review-reply/SKILL.md +3 -1
  12. package/dist/plugin/skills/ship/SKILL.md +750 -0
  13. package/dist/src/cli/commands/pr.d.ts +1 -1
  14. package/dist/src/gestalt/surface-labels.d.ts +12 -12
  15. package/dist/src/gestalt/surface-labels.js +9 -9
  16. package/dist/src/humanize/detectors.js +1 -1
  17. package/dist/src/local-pr/policy.d.ts +7 -7
  18. package/dist/src/local-pr/policy.d.ts.map +1 -1
  19. package/dist/src/local-pr/policy.js +5 -5
  20. package/dist/src/local-pr/policy.js.map +1 -1
  21. package/dist/src/local-pr-web/engine.d.ts +1 -1
  22. package/dist/src/local-pr-web/engine.js +1 -1
  23. package/dist/src/mcp/tools/pr.js +1 -1
  24. package/dist/src/mcp/tools/review-passthrough.js +1 -1
  25. package/package.json +1 -1
  26. package/plugin/.codex-plugin/plugin.json +2 -2
  27. package/plugin/role-agents/_shared/references/style-guide.md +19 -1
  28. package/plugin/skills/_shared/agent-delegation.md +1 -1
  29. package/plugin/skills/_shared/proactive-routing.md +1 -0
  30. package/plugin/skills/local-pr/SKILL.md +2 -1
  31. package/plugin/skills/pr/SKILL.md +2 -0
  32. package/plugin/skills/review/SKILL.md +3 -1
  33. package/plugin/skills/review-reply/SKILL.md +3 -1
  34. package/plugin/skills/ship/SKILL.md +750 -0
package/CLAUDE.md CHANGED
@@ -90,7 +90,7 @@ src/cli/ — commander 기반 CLI
90
90
  plugin/ — 배포 자산 전부. Claude Code와 Codex 플러그인이 이 디렉토리 하나를 공유한다
91
91
  plugin/role-agents/ — 내장 Role Agent 9개 (architect, frontend-developer, backend-developer, devops-engineer, qa-engineer, designer, product-planner, researcher, technical-writer) + 스킬 지원용 에이전트(jira-writer, slack-messenger, presentation-writer, code-review-writer, code-review-responder 등) 총 21개 + `_shared/references/` 공유 룰북(author-voice, ai-tell-quick-rules, style-guide, comment-rules, truncation-rules — 에이전트 아님, 레지스트리가 건너뜀)
92
92
  plugin/review-agents/ — 내장 Review Agent 6개 (security-reviewer, performance-reviewer, quality-reviewer, frontend-reviewer, comment-reviewer, writing-reviewer)
93
- plugin/skills/ — SKILL.md 18개 (interview, spec, execute, dispatch, agent, review, review-reply, pr, local-pr, build-graph, blast-radius, diff-radius, jira-create, slack-send, brief, presentation, solve, setup) + `_shared/` 공유 규칙(스킬 아님, 레지스트리가 건너뜀)
93
+ plugin/skills/ — SKILL.md 19개 (interview, spec, execute, dispatch, agent, review, review-reply, pr, local-pr, ship, build-graph, blast-radius, diff-radius, jira-create, slack-send, brief, presentation, solve, setup) + `_shared/` 공유 규칙(스킬 아님, 레지스트리가 건너뜀)
94
94
  plugin/agents/ — 파이프라인 에이전트 5개
95
95
  plugin/personas/ — Lateral Thinking 페르소나
96
96
  ```
@@ -108,7 +108,7 @@ plugin/.mcp.json Grok MCP (plugin/mcp.json과 동일)
108
108
  ```
109
109
 
110
110
  - Codex는 마켓플레이스 매니페스트를 `.agents/plugins/marketplace.json`에서만 찾는다. `.codex-plugin/marketplace.json`은 인식하지 않는다.
111
- - Grok은 `.grok-plugin/marketplace.json`이 정본이다. source는 반드시 `./plugin`이다. Claude 매니페스트(`source: "./"`)를 바꾸지 말 것.
111
+ - Grok은 `.grok-plugin/marketplace.json`만 읽는다. 마켓플레이스를 고칠 일이 있으면 여기를 고친다. source는 반드시 `./plugin`이다. Claude 매니페스트(`source: "./"`)를 바꾸지 말 것.
112
112
  - Grok은 `plugin/.mcp.json`(점 파일)을 읽는다. `plugin/mcp.json`과 내용을 같게 유지한다.
113
113
  - Codex는 `path`가 가리킨 디렉토리를 통째로 복사한다. 레포 루트를 가리키면 `.git`과 `node_modules`까지 딸려가 1.6GB가 되므로 반드시 `plugin/`으로 좁힌다.
114
114
  - Codex는 심링크를 따라가지 않는다. 자산은 실물 파일로 `plugin/` 안에 있어야 한다.
package/README.ko.md CHANGED
@@ -151,7 +151,7 @@ claude plugin install gestalt@gestalt
151
151
  | 항목 | 내용 |
152
152
  |------|------|
153
153
  | **MCP 도구** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark`, `ges_generate_kb`, `ges_search`, `ges_sync` |
154
- | **슬래시 커맨드** | 워크플로 스킬 18개 — `/interview`, `/spec`, `/execute`, `/review`, `/pr`, `/brief`, `/jira-create`, `/slack-send` 등 |
154
+ | **슬래시 커맨드** | 워크플로 스킬 19개 — `/interview`, `/spec`, `/execute`, `/review`, `/pr`, `/brief`, `/jira-create`, `/slack-send` 등 |
155
155
  | **에이전트** | 파이프라인 에이전트 5개 + Role 에이전트 21개 + Review 에이전트 4개 |
156
156
  | **CLAUDE.md** | 프로젝트 컨텍스트 및 MCP 사용 가이드 자동 추가 |
157
157
 
@@ -202,7 +202,7 @@ claude mcp add gestalt -- npx -y @tienne/gestalt
202
202
 
203
203
  ### 옵션 4: OpenAI Codex 플러그인
204
204
 
205
- Claude Code 플러그인과 똑같이 MCP 서버랑 워크플로 스킬 18개를 한 번에 받아요.
205
+ Claude Code 플러그인과 똑같이 MCP 서버랑 워크플로 스킬 19개를 한 번에 받아요.
206
206
 
207
207
  ```bash
208
208
  codex plugin marketplace add tienne/gestalt
@@ -214,7 +214,7 @@ codex plugin add gestalt@gestalt
214
214
  | 항목 | 내용 |
215
215
  |------|------|
216
216
  | **MCP 도구** | `ges_*` 12개 전부 |
217
- | **스킬** | 워크플로 스킬 18개 (`gestalt:review`, `gestalt:pr` 포함) |
217
+ | **스킬** | 워크플로 스킬 19개 (`gestalt:review`, `gestalt:pr` 포함) |
218
218
  | **에이전트** | Role 에이전트 21개 + Review 에이전트 4개 (스킬이 읽을 수 있게 같이 들어감) |
219
219
 
220
220
  스킬은 다음 Codex 세션부터 잡혀요. 슬래시 커맨드랑 Claude Code Task 패널은 Claude Code 전용이라, Codex에서는 하려는 일을 말로 설명하면 Codex가 해당 `SKILL.md`를 읽어 진행해요.
@@ -246,7 +246,7 @@ Codex는 호스트 패스스루로 동작해요 — Gestalt가 프롬프트와
246
246
 
247
247
  ### 옵션 6: Grok Build 플러그인
248
248
 
249
- Grok Build TUI/CLI용으로 MCP 서버랑 워크플로 스킬을 한 번에 받아요. 마켓플레이스는 `.grok-plugin/marketplace.json`이 정본이에요. Claude 마켓플레이스는 레포 루트를 복사하니 여기서 쓰지 마세요.
249
+ Grok Build TUI/CLI용으로 MCP 서버랑 워크플로 스킬을 한 번에 받아요. Grok은 `.grok-plugin/marketplace.json`을 읽어요. Claude 마켓플레이스는 레포 루트를 복사하니 여기서 쓰지 마세요.
250
250
 
251
251
  ```bash
252
252
  grok plugin marketplace add tienne/gestalt
package/README.md CHANGED
@@ -124,7 +124,7 @@ What you get:
124
124
  | Item | Details |
125
125
  |------|---------|
126
126
  | **MCP Tools** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark`, `ges_generate_kb`, `ges_search`, `ges_sync` |
127
- | **Slash Commands** | 18 workflow skills — `/interview`, `/spec`, `/execute`, `/review`, `/pr`, `/brief`, `/jira-create`, `/slack-send`, and more |
127
+ | **Slash Commands** | 19 workflow skills — `/interview`, `/spec`, `/execute`, `/review`, `/pr`, `/brief`, `/jira-create`, `/slack-send`, and more |
128
128
  | **Agents** | 21 role agents + 4 review agents |
129
129
  | **CLAUDE.md** | Project context and MCP usage guide auto-injected |
130
130
 
@@ -172,7 +172,7 @@ Or add directly to `~/.claude/settings.json`:
172
172
 
173
173
  ### Option 4: OpenAI Codex Plugin
174
174
 
175
- Bundles the MCP server and all 18 workflow skills, the same way the Claude Code plugin does.
175
+ Bundles the MCP server and all 19 workflow skills, the same way the Claude Code plugin does.
176
176
 
177
177
  ```bash
178
178
  codex plugin marketplace add tienne/gestalt
@@ -184,7 +184,7 @@ What you get:
184
184
  | Item | Details |
185
185
  |------|---------|
186
186
  | **MCP Tools** | All 12 `ges_*` tools |
187
- | **Skills** | 18 workflow skills, including `gestalt:review` and `gestalt:pr` |
187
+ | **Skills** | 19 workflow skills, including `gestalt:review` and `gestalt:pr` |
188
188
  | **Agents** | 21 role agents + 4 review agents (bundled for skills to read) |
189
189
 
190
190
  Skills load on the next Codex session. Slash commands and the Claude Code Task
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.71.0",
3
+ "version": "0.72.1",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -72,7 +72,6 @@
72
72
  |---|---|
73
73
  | 규칙·정의가 적힌 문서 | 기준 문서 |
74
74
  | 비교 대상이 되는 수치 | 기준값 (목표 대비, 전기 대비 등 — impact-writer 용법) |
75
- | 여러 사본 중 원본 하나 | 정본 |
76
75
  | 조회·대조용 참조 자료 | 참조 기준 |
77
76
  | 데이터가 처음 만들어지는 곳 | 원천 데이터 |
78
77
  | 값을 담고 있는 데이터 자체 | 기준 데이터 |
@@ -85,6 +84,8 @@
85
84
  "룰북과 에이전트 문서가 갈라졌는지 본다"가 "룰북 기준 문서와…"보다 낫다.
86
85
  명사를 고르기 전에 동사로 풀 수 있는지 먼저 본다 — "A가 기준이다", "A를 기준으로 삼는다".
87
86
 
87
+ **여러 사본 중 원본 하나를 가리킬 때가 특히 그렇다.** 이 자리에 명사를 붙이면 뭉개진다. "이 파일만 읽는다", "고칠 일이 있으면 여기를 고친다", "표와 본문이 어긋나 보이면 본문을 따른다"처럼 적는다.
88
+
88
89
  ### 음차를 옮길 때 — 한 단어로 정하지 않는다
89
90
 
90
91
  같은 영어 단어라도 가리키는 게 다르면 다른 말이 된다. 대체어 하나를 정해놓고 전부 치환하면
@@ -98,6 +99,23 @@
98
99
  | layer | 동시에 처리되는 한 덩어리 | 묶음 |
99
100
  | layer | 순서대로 밟는 구간 | 단계 |
100
101
  | layer | 책임이 갈리는 구분 | 역할 |
102
+ | surface | 에이전트나 사람이 접근하는 창구 | 그 이름을 부른다 (CLI, MCP, 웹) |
103
+ | surface | 그 셋을 아울러야 할 때 | 호출하는 쪽 |
104
+ | surface | 이름 붙이기 애매한 접근 지점 | 자리 |
105
+ | surface | 값이 찍히는 화면 | 화면 |
106
+ | surface | 사용자에게 나가는 응답 | 사용자에게 보이는 / 나가는 |
107
+ | surface | 노출 영역 전체를 개념으로 부를 때 | 사용자 노출 |
108
+ | surface | 탐지기가 걸리는 넓이 | 걸리는 범위 |
109
+ | deep | 게슈탈트 용어를 써도 되는 곳 | 게슈탈트 내부 |
110
+ | deep | LLM 지시 프롬프트를 가리킬 때 | LLM에게만 가는 프롬프트 |
111
+
112
+ **이 표는 한국어 산문에서 음차로 쓴 자리만 다룬다.** 세 가지는 대상이 아니다.
113
+
114
+ - **코드 식별자.** `sanitizeSurfaceContext`, `DEEP_PROMPT_KEYS`, `gateway`는 그대로 둔다. 심볼을 바꾸면 호출부가 전부 딸려 온다.
115
+ - **그 도메인의 정착 용어.** 디자인 시스템의 `surface`와 `onSurface`(Material Design 색 토큰), CI의 gate, API gateway가 그렇다. **이 파일은 플러그인으로 배포돼 다른 레포에서도 읽히므로** 프론트엔드 레포에서 색 토큰을 "표면"으로 옮기라는 말이 되지 않게 조심한다.
116
+ - **이미 나간 CHANGELOG와 릴리즈 노트.** 그때 낸 문장이 아니게 된다.
117
+
118
+ **대비쌍은 짝을 함께 옮긴다.** `surface`와 `deep`처럼 둘이 맞물려 뜻을 이루는 말은 한쪽만 풀면 남은 쪽이 무엇의 반대인지 가리킬 데를 잃는다. 실제로 "표면"만 걷었다가 "심층"이 짝 없이 남아 한 문단 안에서 이름이 둘로 갈렸다.
101
119
 
102
120
  **일괄 치환은 조사를 깨뜨린다.** 받침 유무가 바뀌면 뒤따르는 조사도 바뀐다.
103
121
  `레이어라면` → `계층이라면`, `레이어(…)는` → `계층(…)은`. 실제로 이 자리에서 두 번 깨졌다.
@@ -1,6 +1,6 @@
1
1
  # 에이전트를 서브에이전트로 위임하기 (공유 규칙)
2
2
 
3
- > **현재 적용: `review`, `pr`, `brief`, `presentation`, `review-reply`, `slack-send`, `jira-create`.** 에이전트를 불러 쓰는 스킬은 전부 위임한다. 새 스킬이 `ges_agent get`을 메인에서 하면 그건 예외가 아니라 빠뜨린 것이다.
3
+ > **현재 적용: `review`, `pr`, `brief`, `presentation`, `review-reply`, `slack-send`, `jira-create`, `ship`.** 에이전트를 불러 쓰는 스킬은 전부 위임한다. 새 스킬이 `ges_agent get`을 메인에서 하면 그건 예외가 아니라 빠뜨린 것이다.
4
4
 
5
5
  ## 왜 필요한가
6
6
 
@@ -38,6 +38,7 @@
38
38
  | 내 PR에 달린 리뷰 코멘트 답변 본문 작성 (반영·대안·보류·질문) | `code-review-responder` |
39
39
  | PR·브랜치·커밋 코드 리뷰 요청 | `/review` 스킬 사용 |
40
40
  | 받은 리뷰 반영·답글 게시 요청 ("리뷰 반영해줘", "리뷰 코멘트에 답해줘", "받은 리뷰 처리해줘") | `review-reply` 스킬 사용 (스레드 수집 → 유형 분류 승인 → 수정·커밋 → 답글 승인 → 게시) |
41
+ | 리뷰가 수렴할 때까지 돌려 GitHub까지 내보내는 요청 ("출하해줘", "리뷰 통과할 때까지", "코파일럿 리뷰까지 받아줘") | `ship` 스킬 사용 (로컬 PR → 리뷰 수렴 루프 → 승인 → draft PR → Copilot 수렴 루프 → ready). 리뷰 한 번만이면 `review` |
41
42
  | PR 작성·생성 요청 ("PR 만들어줘", "PR 작성해줘", "PR 올려줘") | `gestalt:pr` 스킬 사용 |
42
43
  | 실행 태스크를 외부 런타임 워커로 뿌리는 요청 ("orca로 실행", "codex로 실행", "워커 띄워서 실행") | `dispatch` 스킬 사용 (런타임 감지 → 같은 워크트리에 터미널 → worker_done 대기 → ready 재계산). 런타임 없으면 execute의 기본 병렬 경로 |
43
44
 
@@ -47,6 +47,7 @@ outputs:
47
47
  | 에이전트끼리 코드를 주고받는 자리 | **이 스킬** |
48
48
  | 이미 있는 변경을 검토받기 | `review` |
49
49
  | 받은 리뷰에 답하기 | `review-reply` |
50
+ | 리뷰가 수렴할 때까지 돌려 GitHub까지 내보내기 | `ship` |
50
51
 
51
52
  원격 PR은 사람이 읽고 판단하라고 올린다. 에이전트끼리 주고받는 데는 `gh`도 인증도 원격 왕복도 군더더기다. 워크트리 여럿이 `.gestalt/reviews.db` 하나를 공유하므로 어느 워크트리에서 쳐도 같은 목록을 본다.
52
53
 
@@ -179,7 +180,7 @@ gestalt pr prune --checkouts # 체크아웃 자국까지
179
180
  - 닫힌 PR은 아무것도 안 놓는다.
180
181
  - 체크아웃 자국은 기본으로 안 놓는다. 어느 이력에도 없는 커밋이라 놓으면 영영 사라진다. `--checkouts`로 뜻을 밝혀야 하고 그 PR이 이미 머지되거나 닫혔을 때만 놓는다.
181
182
 
182
- `prune`은 CLI에만 있다. 되돌릴 수 없게 놓는 자리라 도구 표면에 안 뒀다.
183
+ `prune`은 CLI에만 있다. 되돌릴 수 없게 놓는 자리라 MCP 도구로는 안 뒀다.
183
184
 
184
185
  ## 여러 워커로 나눌 때
185
186
 
@@ -39,6 +39,8 @@ outputs:
39
39
  /pr feature/auth # 특정 브랜치
40
40
  ```
41
41
 
42
+ PR을 만드는 것까지가 범위입니다. 올리기 전에 리뷰를 통과시키고 Copilot 리뷰까지 받으려면 `ship` 스킬을 씁니다 — 그쪽이 이 스킬의 0~4.5단계로 description을 짓고 `--draft`로 제출합니다.
43
+
42
44
  ## 전제 조건
43
45
 
44
46
  `repoRoot`가 주어지지 않으면 현재 작업 디렉토리를 절대 경로로 사용합니다.
@@ -63,6 +63,8 @@ execute 세션 없이 PR, 브랜치, 커밋의 변경사항을 직접 리뷰 파
63
63
  /review abc1234 # 특정 커밋
64
64
  ```
65
65
 
66
+ 리뷰 한 번이 이 스킬의 범위입니다. 이슈가 없어질 때까지 리뷰와 대응을 반복하고 GitHub PR까지 내보내려면 `ship` 스킬을 씁니다 — 그쪽이 라운드마다 이 스킬을 부릅니다.
67
+
66
68
  ## 전제 조건
67
69
 
68
70
  없습니다. git 저장소이기만 하면 바로 돌아갑니다 — 코드 그래프는 쓰지 않습니다.
@@ -132,7 +134,7 @@ id를 직접 주면 아래 1번의 첫 수단이 브랜치를 안 따지고 잡
132
134
  5. `gh pr view <target>`이 성공하면(GitHub PR이 실제로 존재) → `github`입니다.
133
135
  6. 여기까지 아무 데도 안 걸렸으면(GitHub에도 로컬에도 대응하는 PR이 없는 브랜치나 커밋 범위 리뷰) → `none`입니다. 4.7단계 전체를 건너뜁니다.
134
136
 
135
- **갈리는 건 본문이 정본입니다.** 아래 표는 본문 1~6번을 그대로 펼친 것뿐입니다. 표와 본문이 어긋나 보이면 본문을 따르고 표를 고칩니다. 각 행은 자기 위의 행에 안 걸린 경우입니다. "—"는 앞 행에서 이미 갈려 볼 필요가 없다는 뜻입니다.
137
+ **아래 표는 본문 1~6번을 그대로 펼친 것뿐입니다.** 표와 본문이 어긋나 보이면 본문을 따르고 표를 고칩니다. 각 행은 자기 위의 행에 안 걸린 경우입니다. "—"는 앞 행에서 이미 갈려 볼 필요가 없다는 뜻입니다.
136
138
 
137
139
  "로컬 PR 조회" 열은 1번의 두 수단(`show <id>` 또는 위의 가리는 법)이 대상 PR을 찾았는지입니다. 앞쪽은 브랜치를 안 따지고 뒤쪽만 따집니다. `안 봄`은 1번도 3번도 조회할 일이 없어 CLI를 아예 안 부른 경우입니다.
138
140
 
@@ -60,6 +60,8 @@ outputs:
60
60
  /review-reply feature/auth # 해당 브랜치의 PR
61
61
  ```
62
62
 
63
+ 받은 코멘트에 한 번 답하는 게 이 스킬의 범위다. 코멘트가 안 나올 때까지 리뷰와 대응을 반복하려면 `ship` 스킬을 쓴다 — 그쪽이 라운드마다 이 스킬을 부른다.
64
+
63
65
  ## 불변 규칙 두 가지
64
66
 
65
67
  이 스킬은 외부에 나가는 문장을 쓰고 그 문장이 사실 주장이다. 아래 둘은 어떤 경우에도 건너뛰지 않는다.
@@ -131,7 +133,7 @@ id를 직접 주면 아래 1번의 첫 수단이 브랜치를 안 따지고 잡
131
133
 
132
134
  gh 인증이 되고 원격도 있는데 로컬 PR을 지정했으면 1번이 먼저 잡는다. 로컬 PR id 형식이 아닌 값(PR 번호, URL, 브랜치명)은 1번을 그냥 지나친다.
133
135
 
134
- **갈리는 건 본문이 정본이다.** 아래 표는 본문 1~5번을 그대로 펼친 것뿐이다. 표와 본문이 어긋나 보이면 본문을 따르고 표를 고친다. 각 행은 자기 위의 행에 안 걸린 경우다. "—"는 앞 행에서 이미 갈려 볼 필요가 없다는 뜻이다.
136
+ **아래 표는 본문 1~5번을 그대로 펼친 것뿐이다.** 표와 본문이 어긋나 보이면 본문을 따르고 표를 고친다. 각 행은 자기 위의 행에 안 걸린 경우다. "—"는 앞 행에서 이미 갈려 볼 필요가 없다는 뜻이다.
135
137
 
136
138
  "로컬 PR 조회" 열은 1번의 두 수단(`show <id>` 또는 위의 가리는 법)이 대상 PR을 찾았는지다. 앞쪽은 브랜치를 안 따지고 뒤쪽만 따진다. `안 봄`은 1번도 3번도 조회할 일이 없어 CLI를 아예 안 부른 경우다.
137
139