@tienne/gestalt 0.8.0 → 0.9.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 (49) hide show
  1. package/CLAUDE.md +4 -2
  2. package/README.ko.md +47 -35
  3. package/README.md +8 -20
  4. package/dist/package.json +3 -1
  5. package/dist/role-agents/technical-writer/AGENT.md +39 -3
  6. package/dist/schemas/gestalt.schema.json +5 -0
  7. package/dist/skills/execute/SKILL.md +148 -1
  8. package/dist/skills/interview/SKILL.md +37 -1
  9. package/dist/skills/spec/SKILL.md +39 -1
  10. package/dist/src/cli/commands/setup.d.ts.map +1 -1
  11. package/dist/src/cli/commands/setup.js +1 -0
  12. package/dist/src/cli/commands/setup.js.map +1 -1
  13. package/dist/src/core/config.d.ts +3 -0
  14. package/dist/src/core/config.d.ts.map +1 -1
  15. package/dist/src/core/config.js +5 -0
  16. package/dist/src/core/config.js.map +1 -1
  17. package/dist/src/execute/rule-writer.d.ts +15 -0
  18. package/dist/src/execute/rule-writer.d.ts.map +1 -0
  19. package/dist/src/execute/rule-writer.js +57 -0
  20. package/dist/src/execute/rule-writer.js.map +1 -0
  21. package/dist/src/mcp/schemas.d.ts +3 -0
  22. package/dist/src/mcp/schemas.d.ts.map +1 -1
  23. package/dist/src/mcp/schemas.js +1 -0
  24. package/dist/src/mcp/schemas.js.map +1 -1
  25. package/dist/src/mcp/server.d.ts.map +1 -1
  26. package/dist/src/mcp/server.js +2 -0
  27. package/dist/src/mcp/server.js.map +1 -1
  28. package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
  29. package/dist/src/mcp/tools/execute-passthrough.js +113 -4
  30. package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
  31. package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
  32. package/dist/src/mcp/tools/interview-passthrough.js +5 -0
  33. package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
  34. package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -1
  35. package/dist/src/mcp/tools/review-passthrough.js +14 -0
  36. package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
  37. package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
  38. package/dist/src/mcp/tools/spec-passthrough.js +9 -0
  39. package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
  40. package/dist/src/utils/notifier.d.ts +10 -0
  41. package/dist/src/utils/notifier.d.ts.map +1 -0
  42. package/dist/src/utils/notifier.js +21 -0
  43. package/dist/src/utils/notifier.js.map +1 -0
  44. package/package.json +3 -1
  45. package/role-agents/technical-writer/AGENT.md +39 -3
  46. package/schemas/gestalt.schema.json +5 -0
  47. package/skills/execute/SKILL.md +148 -1
  48. package/skills/interview/SKILL.md +37 -1
  49. package/skills/spec/SKILL.md +39 -1
package/CLAUDE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Gestalt — AI Development Harness
2
2
 
3
3
  ## Overview
4
- 게슈탈트 심리학 원리를 요구사항 명확화 프로세스에 매핑한 TypeScript 기반 AI 개발 하네스.
4
+ 게슈탈트 지각이론을 요구사항 명확화 프로세스에 매핑한 TypeScript 기반 AI 개발 하네스.
5
5
  "전체는 부분의 합보다 크다" — 흩어진 요구사항 조각들을 모아 완전한 스펙(Spec)으로 결정화.
6
6
 
7
7
  ## Architecture
@@ -10,7 +10,7 @@
10
10
  - **Execute Engine**: 게슈탈트 5원리를 실행 전략으로 사용, Spec→ExecutionPlan 변환 (Figure-Ground→Closure→Proximity→Continuity)
11
11
  - **Resilience Engine**: Stagnation 감지 → Lateral Thinking Personas → Human Escalation
12
12
  - **MCP Server**: stdio transport로 Claude Code 등 AI 에이전트와 통합
13
- - **Skill System**: SKILL.md 기반 확장, chokidar hot-reload 지원
13
+ - **Skill System**: SKILL.md 기반 확장, chokidar hot-reload 지원. 각 스킬(`/interview`, `/spec`, `/execute`)은 실행 중 Claude Code Task 패널에 진행 상태를 `TaskCreate`/`TaskUpdate`로 실시간 표시 (공통 진행 패널)
14
14
  - **Event Store**: better-sqlite3 WAL 모드 이벤트 소싱
15
15
 
16
16
  ## Tech Stack
@@ -57,6 +57,7 @@ interface GestaltConfig {
57
57
  llm: { apiKey: string; model: string };
58
58
  interview: { ambiguityThreshold: number; maxRounds: number };
59
59
  execute: { driftThreshold: number; successThreshold: number; goalAlignmentThreshold: number };
60
+ notifications: boolean;
60
61
  dbPath: string;
61
62
  skillsDir: string;
62
63
  agentsDir: string;
@@ -75,6 +76,7 @@ interface GestaltConfig {
75
76
  | `GESTALT_DRIFT_THRESHOLD` | `execute.driftThreshold` | `0.3` |
76
77
  | `GESTALT_EVOLVE_SUCCESS_THRESHOLD` | `execute.successThreshold` | `0.85` |
77
78
  | `GESTALT_EVOLVE_GOAL_ALIGNMENT_THRESHOLD` | `execute.goalAlignmentThreshold` | `0.80` |
79
+ | `GESTALT_NOTIFICATIONS` | `notifications` | `false` |
78
80
  | `GESTALT_DB_PATH` | `dbPath` | `"~/.gestalt/events.db"` |
79
81
  | `GESTALT_SKILLS_DIR` | `skillsDir` | `"skills"` |
80
82
  | `GESTALT_AGENTS_DIR` | `agentsDir` | `"agents"` |
package/README.ko.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <p align="center">
6
6
  <strong>Gestalt — AI 개발 하네스</strong><br/>
7
- 모호한 요구사항을 구조화된 실행 계획으로 — Claude Code 안에서 바로.
7
+ 흩어진 막연함을 하나의 실행 계획으로
8
8
  </p>
9
9
 
10
10
  <p align="center">
@@ -21,24 +21,34 @@
21
21
 
22
22
  ## Gestalt는 무엇인가요?
23
23
 
24
- Gestalt는 Claude Code 안에서 실행되는 MCP(Model Context Protocol) 서버예요. 구조화된 요구사항 인터뷰를 진행해 검증된 **Spec**(목표·제약조건·완료 기준을 담은 JSON 문서)을 만들어요. 그 Spec을 의존성 기반 실행 계획으로 변환할 때 별도 API 키는 필요하지 않아요.
24
+ Gestalt는 Claude Code 안에서 실행되는 MCP(Model Context Protocol) 서버예요. 요구사항을 인터뷰로 구체화해 **Spec**(목표·제약조건·완료 기준)을 만들고, 그 Spec을 바탕으로 실행 계획을 짜요.
25
25
 
26
26
  > **시작 전 확인** — Node.js >= 20.0.0이 필요해요. `nvm install 22 && nvm use 22`로 설치할 수 있어요.
27
27
 
28
28
  ---
29
29
 
30
- ## 실제로 어떻게 작동하나요?
30
+ ## 빠른 시작
31
31
 
32
- > **30초 만에 구조화된 실행 계획** — API 키 없이도 돼요.
32
+ 플러그인을 설치하세요 (최초 1회):
33
33
 
34
34
  ```bash
35
- # Gestalt 기반 요구사항 인터뷰 시작
35
+ # 1단계: 마켓플레이스 등록
36
+ /plugin marketplace add tienne/gestalt
37
+
38
+ # 2단계: 플러그인 설치
39
+ /plugin install gestalt@gestalt
40
+ ```
41
+
42
+ 설치가 끝나면 Claude Code에서 바로 사용할 수 있어요:
43
+
44
+ ```bash
45
+ # 요구사항 인터뷰 시작
36
46
  /interview "사용자 인증 시스템"
37
47
 
38
- # 인터뷰 완료 후 구조화된 Spec 생성
48
+ # 인터뷰 완료 후 Spec 생성
39
49
  /spec
40
50
 
41
- # Spec을 검증된 실행 계획으로 변환하고 실행
51
+ # Spec을 실행 계획으로 만들고 실행
42
52
  /execute
43
53
  ```
44
54
 
@@ -88,15 +98,13 @@ Claude Code
88
98
  최종 Spec → 실행 계획
89
99
  ```
90
100
 
91
- `ANTHROPIC_API_KEY`는 필요하지 않아요. 모든 LLM 작업은 Claude Code가 처리해요.
92
-
93
101
  > **참고해 주세요** — CLI 직접 실행 모드에서는 `ANTHROPIC_API_KEY`가 필요해요. Claude Code 없이 터미널에서 바로 사용할 경우에만 해당돼요.
94
102
 
95
103
  ---
96
104
 
97
- ## Project Memory
105
+ ## 프로젝트 메모리
98
106
 
99
- Spec과 실행 결과는 레포 루트의 `.gestalt/memory.json`에 자동으로 기록돼요.
107
+ Spec과 실행 결과는 레포 루트의 `.gestalt/memory.json`에 자동으로 저장돼요.
100
108
 
101
109
  ```json
102
110
  {
@@ -109,8 +117,8 @@ Spec과 실행 결과는 레포 루트의 `.gestalt/memory.json`에 자동으로
109
117
  ```
110
118
 
111
119
  - **커밋하세요** — `.gestalt/memory.json`은 일반 JSON 파일이에요. 커밋하면 팀원도 `git pull` 후 이전 결정 사항을 그대로 이어받을 수 있어요.
112
- - **컨텍스트 주입** — 다음 Spec을 생성할 때 이전 목표와 아키텍처 결정 사항이 프롬프트에 자동으로 주입돼요.
113
- - **User Profile** — 개인 설정은 `~/.gestalt/profile.json`에 저장되며 커밋 대상에 포함되지 않아요.
120
+ - **컨텍스트 반영** — 다음 Spec을 생성할 때 이전 목표와 아키텍처 결정 사항이 프롬프트에 자동으로 반영돼요.
121
+ - **User Profile** — 개인 설정은 `~/.gestalt/profile.json`에 저장돼요. git에는 올라가지 않아요.
114
122
 
115
123
  ---
116
124
 
@@ -118,7 +126,7 @@ Spec과 실행 결과는 레포 루트의 `.gestalt/memory.json`에 자동으로
118
126
 
119
127
  ### 옵션 1: Claude Code 플러그인 (권장)
120
128
 
121
- MCP 서버, 슬래시 커맨드 스킬, Gestalt 에이전트, 프로젝트 컨텍스트를 단일 설치로 묶어서 제공해요.
129
+ 설치 한 번에 MCP 서버, 슬래시 커맨드, Gestalt 에이전트, 프로젝트 컨텍스트를 모두 사용할 있어요.
122
130
 
123
131
  ```bash
124
132
  # 1단계: 마켓플레이스 등록 (최초 1회)
@@ -135,7 +143,7 @@ MCP 서버, 슬래시 커맨드 스킬, Gestalt 에이전트, 프로젝트 컨
135
143
  | **MCP 도구** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status` |
136
144
  | **슬래시 커맨드** | `/interview`, `/spec`, `/execute`, `/agent` |
137
145
  | **에이전트** | Gestalt 파이프라인 에이전트 5개 + Role 에이전트 9개 + Review 에이전트 3개 |
138
- | **CLAUDE.md** | 프로젝트 컨텍스트 및 MCP 사용 가이드 자동 주입 |
146
+ | **CLAUDE.md** | 프로젝트 컨텍스트 및 MCP 사용 가이드 자동 추가 |
139
147
 
140
148
  > **Node.js >= 20.0.0** 필요 — [nvm](https://github.com/nvm-sh/nvm) 사용 시: `nvm install 22 && nvm use 22`
141
149
 
@@ -192,7 +200,7 @@ claude mcp add gestalt -- npx -y @tienne/gestalt
192
200
  /interview "Stripe로 결제 플로우를 만들고 싶어"
193
201
  ```
194
202
 
195
- 각 라운드는 특정 모호성 차원을 목표로 진행돼요:
203
+ 각 라운드는 모호한 부분을 집중해서 파악해요:
196
204
 
197
205
  - **Closure** — 빠진 요구사항과 말하지 않고 가정한 것을 찾아요
198
206
  - **Proximity** — 함께 묶여야 할 기능을 식별해요
@@ -218,7 +226,7 @@ claude mcp add gestalt -- npx -y @tienne/gestalt
218
226
  3. caller가 요약 생성 후 제출 → 세션에 저장
219
227
  ```
220
228
 
221
- 이후 라운드에서는 압축된 요약이 자동으로 주입돼요.
229
+ 이후 라운드에서 압축된 요약이 자동으로 반영돼요.
222
230
 
223
231
  ---
224
232
 
@@ -250,7 +258,7 @@ ges_generate_spec({ text: "JWT 인증이 포함된 API", template: "rest-api" })
250
258
  /spec
251
259
  ```
252
260
 
253
- 파이프라인 전체를 구동하는 구조화된 **Spec**을 생성해요:
261
+ 이후 단계 전체의 기준이 되는 **Spec**을 생성해요:
254
262
 
255
263
  ```
256
264
  goal → 명확하고 모호성 없는 프로젝트 목표
@@ -264,7 +272,7 @@ gestaltAnalysis → 게슈탈트 원리별 핵심 발견 사항
264
272
 
265
273
  ### 3단계 — Execute (계획 + 실행)
266
274
 
267
- Spec 의존성 기반 실행 계획으로 변환하고 실행해요:
275
+ Spec에서 실행 계획을 만들어 실행해요:
268
276
 
269
277
  ```bash
270
278
  /execute
@@ -279,15 +287,15 @@ Spec을 의존성 기반 실행 계획으로 변환하고 실행해요:
279
287
  | 3 | **Proximity** | 관련 태스크를 도메인별 그룹으로 묶음 |
280
288
  | 4 | **Continuity** | 의존성 DAG 검증 — 순환 없음, 위상 정렬 순서 확인 |
281
289
 
282
- **Execution 단계**에서 위상 정렬 순서대로 태스크를 실행해요. 각 태스크 후 **Drift Detection**이 Spec과의 정렬 상태를 확인해요:
290
+ **Execution 단계**에서 위상 정렬 순서대로 태스크를 실행해요. 각 태스크 후 **Drift Detection**이 Spec 얼마나 맞는지 확인해요:
283
291
 
284
292
  - 3차원 점수: Goal (50%) + Constraint (30%) + Ontology (20%)
285
293
  - Jaccard 유사도 기반 측정
286
- - Threshold를 초과하면 소급 검토가 자동으로 시작돼요
294
+ - 임계값을 초과하면 회고(Retrospective)가 자동으로 시작돼요
287
295
 
288
296
  #### 병렬 실행 (Parallel Groups)
289
297
 
290
- `plan_complete` 응답에 `parallelGroups: string[][]`이 포함돼요. 의존성이 없는 태스크는 같은 그룹에 배치되어 동시 실행할 수 있어요:
298
+ `plan_complete` 응답에 `parallelGroups: string[][]`이 포함돼요. 의존성이 없는 태스크를 같은 그룹으로 묶어 동시에 실행해요:
291
299
 
292
300
  ```json
293
301
  "parallelGroups": [
@@ -325,9 +333,13 @@ ges_execute({
325
333
  })
326
334
  ```
327
335
 
328
- #### Sub-agent 스포닝 (Spawn)
336
+ #### 실행 진행 패널
337
+
338
+ `/execute` 실행 중 Claude Code Task 패널에 진행 상태가 실시간으로 표시돼요. Planning 단계부터 Evaluate까지 각 완료 태스크 수, 현재 태스크 이름, 실패 수, 병렬 그룹 구조가 자동으로 갱신돼요.
339
+
340
+ #### 하위 에이전트 생성 (Spawn)
329
341
 
330
- 복잡한 태스크를 동적으로 하위 태스크로 분해할 수 있어요:
342
+ 실행 중에 복잡한 태스크를 하위 태스크로 나눌 수 있어요:
331
343
 
332
344
  ```bash
333
345
  ges_execute({
@@ -349,7 +361,7 @@ ges_execute({
349
361
 
350
362
  | 단계 | 방식 | 실패 시 |
351
363
  |:---:|-------|-----------|
352
- | 1 | **Structural** — lint → build → test 실행 | 단락(short-circuit); 2단계 스킵 |
364
+ | 1 | **Structural** — lint → build → test 실행 | 조기 종료(short-circuit); 2단계 건너뜀 |
353
365
  | 2 | **Contextual** — LLM이 각 AC + goal alignment 검증 | Evolution Loop 진입 |
354
366
 
355
367
  **성공 조건:** `score ≥ 0.85` AND `goalAlignment ≥ 0.80`
@@ -372,18 +384,18 @@ evolve → Spec 패치 (AC/constraints) → 영향받은 태스크 재실행 →
372
384
 
373
385
  Spec 패치 범위: AC와 constraints는 자유 수정; ontology는 추가/변경만; **goal은 변경 불가**.
374
386
 
375
- **Flow C — Lateral Thinking** (스태그네이션 감지 시)
387
+ **Flow C — Lateral Thinking** (답보 상태 감지 시)
376
388
 
377
- 종료하는 대신 Lateral Thinking Persona를 순환하며 다른 접근을 시도해요:
389
+ 종료하는 대신 Lateral Thinking Persona를 순서대로 적용하며 다른 접근을 시도해요:
378
390
 
379
- | 스태그네이션 패턴 | Persona | 전략 |
391
+ | 답보 상태 패턴 | Persona | 전략 |
380
392
  |--------------------|---------|---------|
381
393
  | Hard cap 도달 | **Multistability** | 다른 각도로 보기 |
382
394
  | 진동하는 점수 | **Simplicity** | 단순하게 줄이고 수렴 |
383
395
  | 진전 없음 (no drift) | **Reification** | 빠진 것 채우기 |
384
- | 수익 체감 | **Invariance** | 성공한 패턴 복제 |
396
+ | 효과 감소 | **Invariance** | 성공한 패턴 복제 |
385
397
 
386
- 4개 Persona를 모두 소진하면 세션이 **Human Escalation**으로 종료돼요 수동 해결을 위한 구체적인 제안 목록과 함께.
398
+ 4개 Persona를 모두 소진하면 세션이 **Human Escalation**으로 종료돼요. 직접 해결할 있도록 구체적인 제안도 함께 제공해요.
387
399
 
388
400
  **종료 조건:**
389
401
 
@@ -406,7 +418,7 @@ Evolution 완료 후 코드 리뷰 파이프라인이 자동으로 실행돼요:
406
418
  review_start → 에이전트 관점 제출 → 합의 → 자동 수정
407
419
  ```
408
420
 
409
- 9개의 내장 **Role 에이전트**가 다중 관점 리뷰를 제공해요:
421
+ 9개의 내장 **Role 에이전트**가 다양한 관점에서 리뷰해요:
410
422
 
411
423
  | 에이전트 | 도메인 |
412
424
  |-------|--------|
@@ -434,7 +446,7 @@ review_start → 에이전트 관점 제출 → 합의 → 자동 수정
434
446
  # 사용 가능한 에이전트 목록 조회
435
447
  /agent
436
448
 
437
- # 특정 에이전트로 임의 태스크 실행
449
+ # 특정 에이전트로 원하는 태스크 실행
438
450
  /agent architect "이 코드베이스의 모듈 경계를 리뷰해줘"
439
451
  /agent security-reviewer "이 인증 코드의 취약점을 확인해줘"
440
452
  /agent technical-writer "이 모듈의 README를 작성해줘"
@@ -456,9 +468,9 @@ ges_create_agent → action: "submit", sessionId: "<id>", agentContent: "..."
456
468
 
457
469
  ---
458
470
 
459
- ### 대안: CLI 직접 실행 모드
471
+ ### CLI 모드 (Claude Code 없이 사용하기)
460
472
 
461
- `ANTHROPIC_API_KEY`가 필요해요. Claude Code 없이 터미널에서 직접 실행할있어요:
473
+ Claude Code 없이 터미널에서 바로 사용하고 싶다면 CLI 모드를 이용할 있어요. **`ANTHROPIC_API_KEY`가 필요해요.**
462
474
 
463
475
  ```bash
464
476
  # 인터랙티브 인터뷰 시작
@@ -528,7 +540,7 @@ npx @tienne/gestalt setup
528
540
 
529
541
  **설정 우선순위** (높음 → 낮음): 코드 override → 쉘 환경변수 → `.env` → `gestalt.json` → 기본값
530
542
 
531
- 잘못된 값은 경고를 출력하고 기본값으로 fallback해요.
543
+ 잘못된 값은 경고를 출력하고 기본값을 사용해요.
532
544
 
533
545
  ### 환경변수
534
546
 
package/README.md CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  ## What is Gestalt?
23
23
 
24
- Gestalt is an MCP (Model Context Protocol) server that runs inside Claude Code. It conducts structured requirement interviews, generates a validated **Spec** (a JSON document capturing your goal, constraints, and acceptance criteria), and transforms that Spec into a dependency-aware execution plan — all without a separate API key.
24
+ Gestalt is an MCP (Model Context Protocol) server that runs inside Claude Code. It conducts structured requirement interviews, generates a validated **Spec** (a JSON document capturing your goal, constraints, and acceptance criteria), and transforms that Spec into a dependency-aware execution plan.
25
25
 
26
26
  > **Prerequisites:** Node.js >= 20.0.0. Use `nvm install 22 && nvm use 22` if needed.
27
27
 
@@ -29,21 +29,7 @@ Gestalt is an MCP (Model Context Protocol) server that runs inside Claude Code.
29
29
 
30
30
  ## Quick Start
31
31
 
32
- **Choose your path:**
33
-
34
- ### For Non-Developers (Claude Desktop)
35
-
36
- No terminal. No API key. Just Claude Desktop.
37
-
38
- → **[5-minute Getting Started Guide](./docs/getting-started.md)**
39
-
40
- 1. Open Claude Desktop
41
- 2. Install the Gestalt plugin
42
- 3. Type `/interview "your idea"` — Gestalt guides you through the rest
43
-
44
- ---
45
-
46
- ### For Developers (MCP Integration)
32
+ Install the plugin once, then use it in any Claude Code session:
47
33
 
48
34
  ```bash
49
35
  # Step 1: Add to marketplace (one-time setup)
@@ -104,8 +90,6 @@ You (in Claude Code)
104
90
  Final Spec → Execution Plan
105
91
  ```
106
92
 
107
- `ANTHROPIC_API_KEY` is not required. All LLM work is handled by Claude Code.
108
-
109
93
  ---
110
94
 
111
95
  ## Project Memory
@@ -339,6 +323,10 @@ ges_execute({
339
323
  })
340
324
  ```
341
325
 
326
+ #### Real-time progress panel
327
+
328
+ When using the `/execute` slash command, Gestalt displays live execution status in the Claude Code Task panel — showing completed/total tasks, current task name, failed task count, and parallel group progress. Updated automatically at each planning step, task completion, and evaluation stage.
329
+
342
330
  #### Sub-agent spawning
343
331
 
344
332
  Decompose a complex task into sub-tasks dynamically during execution:
@@ -468,9 +456,9 @@ ges_create_agent → action: "submit", sessionId: "<id>", agentContent: "..."
468
456
 
469
457
  ---
470
458
 
471
- ### Alternative: CLI Direct Mode
459
+ ### CLI Mode (without Claude Code)
472
460
 
473
- Requires `ANTHROPIC_API_KEY`. Runs Gestalt directly from the terminal without Claude Code:
461
+ Want to run Gestalt without Claude Code? CLI mode runs interviews directly in your terminal. **Requires `ANTHROPIC_API_KEY`.**
474
462
 
475
463
  ```bash
476
464
  # Start an interactive interview
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tienne/gestalt",
3
- "version": "0.8.0",
3
+ "version": "0.9.1",
4
4
  "description": "TypeScript AI Development Harness - Gestalt psychology-driven requirement clarification",
5
5
  "type": "module",
6
6
  "main": "./dist/src/index.js",
@@ -46,6 +46,7 @@
46
46
  "gray-matter": "^4.0.3",
47
47
  "ink": "^6.8.0",
48
48
  "jimp": "^1.6.0",
49
+ "node-notifier": "^10.0.1",
49
50
  "node-pty": "^1.1.0",
50
51
  "openai": "^6.27.0",
51
52
  "react": "^19.2.4",
@@ -54,6 +55,7 @@
54
55
  "devDependencies": {
55
56
  "@types/better-sqlite3": "^7.6.13",
56
57
  "@types/node": "^22.13.10",
58
+ "@types/node-notifier": "^8.0.5",
57
59
  "tsx": "^4.19.3",
58
60
  "typescript": "^5.8.2",
59
61
  "vitest": "^3.0.9"
@@ -32,8 +32,20 @@ When writing Korean developer documentation, follow these conventions observed i
32
32
  **Formatting Patterns**
33
33
  - Bold key terms on first use: **소모성 아이템**, **비소모성 아이템**
34
34
  - Use bullet lists for features, options, and constraints — keep each item concise
35
+ - Use numbered lists when sequence matters — installation steps, API call order, migration procedures
36
+ — Don't: bullet a 3-step setup where step 2 depends on step 1
37
+ — Do: number any list where "do these in order" is part of the instruction
35
38
  - Separate distinct concepts with `---` horizontal rules
36
- - End conceptual sections with a "참고해 주세요" callout for edge cases or policy notes
39
+ - Use callout blocks to signal importance choose the type based on consequence:
40
+ - 💡 **Tip**: better approach, shortcut, optional improvement
41
+ - 📝 **Note / 참고**: extra context, exception cases, policy notes — use at the end of conceptual sections
42
+ - ⚠️ **Warning / 주의**: incorrect usage causes problems (wrong output, wasted time)
43
+ - 🔴 **Danger / 경고**: data loss, security risk, service outage — reader must not skip this
44
+ — Don't use Note for Danger: "참고로 이 명령어는 데이터를 삭제해요" understates the risk
45
+ - Write descriptive link text — destination should be clear from the link text alone
46
+ — Don't: "자세한 내용은 [여기](...)를 참고하세요."
47
+ — Do: "자세한 내용은 [설치 가이드](...)를 참고하세요."
48
+ — Don't: "See [this](url)." → Do: "See [API authentication guide](url)."
37
49
 
38
50
  **Content Principles**
39
51
  - Lead with business value or user benefit, follow with technical detail
@@ -46,6 +58,26 @@ When writing Korean developer documentation, follow these conventions observed i
46
58
  - Avoid listing terms inline in introductions if they are covered in a dedicated section below — redundant inline lists interrupt flow without adding value
47
59
 
48
60
  **Korean Sentence Writing**
61
+
62
+ **핵심 원칙: 영어로 생각하고 번역하지 말 것**
63
+ 한국어로 직접 작성한다. "dependency-based execution planning"을 머릿속에서 먼저 영어로 구성한 뒤 번역하면 번역체가 된다.
64
+
65
+ - ❌ 의존성 기반 실행 계획 수립 → ✅ 의존성에 따라 실행 순서를 정해요
66
+ - ❌ 스태그네이션 감지 메커니즘이 트리거됩니다 → ✅ 답보 상태를 감지하면 자동으로 분기해요
67
+ - ❌ 스포닝 → ✅ 하위 에이전트 생성
68
+ - ❌ 소급 검토 컨텍스트 → ✅ 회고 컨텍스트
69
+ - ❌ 임의 태스크에 적용 가능합니다 → ✅ 모든 태스크에 적용할 수 있어요
70
+ - ❌ 단락(short-circuit) 처리 → ✅ 조기 종료 처리
71
+ - ❌ 수익 체감 패턴 → ✅ 효과 감소 패턴
72
+
73
+ **기술 용어 3단계 처리**
74
+
75
+ | 단계 | 사용 기준 | 예시 |
76
+ |------|-----------|------|
77
+ | 영어 그대로 | 한국 개발자들이 영어로 통용하는 용어 | API, CLI, JSON, Git, PR, LLM, DAG |
78
+ | 한국어 + 영어 병기 (첫 등장) | 덜 일반적인 전문 용어의 첫 사용 | 이벤트 소싱(Event Sourcing), 단락 회로 실행(Short-circuit Evaluation) |
79
+ | 한국어만 | 자연스러운 한국어 표현이 있는 경우 | 버전 관리 (버저닝 ❌), 배포 (디플로이먼트 ❌) |
80
+
49
81
  - Reader is the subject: write so the developer is the actor — use active constructions
50
82
  — Don't: "설정이 완료되어야 합니다." → Do: "설정을 완료하세요."
51
83
  — Don't: "이 라이브러리는 초기화를 수행해요." → Do: "이 명령어로 초기화하세요."
@@ -206,7 +238,11 @@ When writing documentation, produce:
206
238
  - Callout blocks for important notes, warnings, or tips
207
239
 
208
240
  When reviewing existing documentation, provide:
209
- - Specific issues by section (clarity / structure / completeness / consistency)
210
- - Rewrite suggestions for unclear passages
241
+ - Issues classified by severity:
242
+ - **Blocker**: reader can misunderstand, follow wrong steps, or miss a critical risk — must fix before publish
243
+ - **Fix**: clarity, consistency, or structural problem — fix when possible
244
+ - **Suggest**: improvement idea — optional, at author's discretion
245
+ - Specific location (section name or quoted passage) for each issue
246
+ - Rewrite suggestions for all Blocker and Fix items
211
247
  - Missing content checklist
212
248
  - Overall readability assessment
@@ -87,6 +87,11 @@
87
87
  "description": "Directory containing agent definitions (env: GESTALT_AGENTS_DIR)",
88
88
  "default": "agents"
89
89
  },
90
+ "notifications": {
91
+ "type": "boolean",
92
+ "description": "Enable OS desktop notifications for pipeline events (env: GESTALT_NOTIFICATIONS)",
93
+ "default": false
94
+ },
90
95
  "logLevel": {
91
96
  "type": "string",
92
97
  "enum": ["debug", "info", "warn", "error"],
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: execute
3
- version: "1.1.0"
3
+ version: "1.2.0"
4
4
  description: "Gestalt-driven execution planner that transforms a Spec into a validated ExecutionPlan"
5
5
  triggers:
6
6
  - "execute"
@@ -183,6 +183,67 @@ API 키 없이 MCP 서버 실행 시 자동 활성화. LLM 작업을 caller가
183
183
 
184
184
  ---
185
185
 
186
+ ### 병렬 그룹 실행 (parallelGroups 활용)
187
+
188
+ `plan_complete` 응답에 `parallelGroups: string[][]`가 포함되어 있으면 병렬 실행을 사용한다. 각 내부 배열은 동시에 실행할 수 있는 태스크 ID 묶음이다.
189
+
190
+ **병렬 그룹 실행 흐름:**
191
+
192
+ 1. `parallelGroups[groupIndex]`의 taskId 목록을 확인한다.
193
+ 2. **단일 메시지에서** 각 taskId마다 Agent 툴을 하나씩, 동시에 호출한다 (여러 Agent 툴 호출을 같은 메시지에 담는다).
194
+ 3. 각 Agent는 독립적으로 해당 태스크를 수행하고, 완료되면 `execute_task`를 호출해 결과를 제출한다.
195
+ 4. 그룹 내 일부 Agent가 실패해도 나머지는 계속 실행한다. 실패한 태스크는 `status: "failed"`로 제출한다.
196
+ 5. 그룹 내 모든 Agent가 완료되면 다음 그룹으로 넘어간다.
197
+ 6. 모든 그룹이 완료된 후 실패한 태스크가 있으면 기존 evolve 파이프라인으로 재처리한다.
198
+
199
+ **Agent 툴 호출 예시 (parallelGroups[0] = ["task-0", "task-1", "task-2"] 인 경우):**
200
+
201
+ 단일 메시지에서 세 Agent를 동시에 실행한다.
202
+
203
+ ```
204
+ // 같은 메시지에서 동시 호출 — Agent 1
205
+ Agent(task: "task-0 실행: {task-0 title}\n컨텍스트: {taskContext}\n완료 후 execute_task로 결과 제출")
206
+
207
+ // 같은 메시지에서 동시 호출 — Agent 2
208
+ Agent(task: "task-1 실행: {task-1 title}\n컨텍스트: {taskContext}\n완료 후 execute_task로 결과 제출")
209
+
210
+ // 같은 메시지에서 동시 호출 — Agent 3
211
+ Agent(task: "task-2 실행: {task-2 title}\n컨텍스트: {taskContext}\n완료 후 execute_task로 결과 제출")
212
+ ```
213
+
214
+ **각 Agent의 execute_task 제출:**
215
+
216
+ ```json
217
+ {
218
+ "action": "execute_task",
219
+ "sessionId": "...",
220
+ "taskResult": {
221
+ "taskId": "task-0",
222
+ "status": "completed",
223
+ "output": "태스크 수행 결과 요약",
224
+ "artifacts": ["path/to/file.ts"]
225
+ }
226
+ }
227
+ ```
228
+
229
+ 실패 시:
230
+ ```json
231
+ {
232
+ "action": "execute_task",
233
+ "sessionId": "...",
234
+ "taskResult": {
235
+ "taskId": "task-1",
236
+ "status": "failed",
237
+ "output": "실패 원인 설명",
238
+ "artifacts": []
239
+ }
240
+ }
241
+ ```
242
+
243
+ **parallelGroups가 없는 경우:** 기존 순차 실행 방식을 사용한다.
244
+
245
+ ---
246
+
186
247
  ### `execute_task` — 태스크 실행 결과 제출
187
248
 
188
249
  role_match/role_consensus로 얻은 `roleGuidance`를 참조해 태스크를 수행한 후 결과 제출.
@@ -350,3 +411,89 @@ role_match/role_consensus로 얻은 `roleGuidance`를 참조해 태스크를 수
350
411
  | `hard_cap` | structural 3회 + contextual 3회 실패 |
351
412
  | `caller` | `{ action: "evolve", terminateReason: "caller" }` |
352
413
  | `human_escalation` | 4개 lateral persona 소진 |
414
+
415
+ ---
416
+
417
+ ## 공통 진행 패널
418
+
419
+ Execute 파이프라인 실행 중 Claude Code Task 패널에 실시간 상태를 표시한다. 패널 업데이트는 best-effort — 실패가 태스크 실행 흐름을 중단시켜서는 안 된다.
420
+
421
+ ### Planning 단계 시작 시 (`start` 응답 수신 후)
422
+
423
+ `TaskCreate`로 실행 패널을 생성하고, 반환된 taskId를 세션 동안 보관한다.
424
+
425
+ ```
426
+ subject: "Gestalt Execute: {spec.goal 앞 40자}"
427
+ description: "Planning 중 | 단계 1/4 | figure_ground"
428
+ activeForm: "실행 계획 수립 중"
429
+ ```
430
+
431
+ ### Planning 각 단계 후 (`plan_step` 응답 수신 시마다)
432
+
433
+ `TaskUpdate`로 현재 Planning 단계를 업데이트한다.
434
+
435
+ ```
436
+ description: "Planning 중 | 단계 {stepsCompleted}/4 | {currentPrinciple}"
437
+ ```
438
+
439
+ ### Execution 시작 후 (`execute_start` 응답 수신 후)
440
+
441
+ Planning 패널 태스크를 완료하고, 새 Execution 패널 태스크를 생성한다.
442
+
443
+ ```
444
+ subject: "Gestalt Execute: {spec.goal 앞 40자}"
445
+ description: "0/{totalTasks} 완료 | 실패: 0개 | 그룹 0/{parallelGroupCount}"
446
+ activeForm: "실행 중: {taskContext.currentTask.title}"
447
+ ```
448
+
449
+ `plan_complete` 응답의 `planSummary.totalTasks`와 `planSummary.parallelGroupCount`를 활용한다.
450
+ `taskContext.currentTask.title`은 `execute_start` 응답에서 바로 꺼내 쓴다.
451
+
452
+ ### 병렬 그룹 실행 시작 시 (Agent 툴 동시 호출 직전)
453
+
454
+ 각 병렬 그룹 실행을 시작하기 전에 `TaskUpdate`로 병렬 실행 상태를 표시한다.
455
+
456
+ ```
457
+ activeForm: "병렬 실행 중: 그룹 {groupIndex}/{totalGroups} — {agentCount}개 Agent 실행 중"
458
+ ```
459
+
460
+ - `groupIndex`: 현재 병렬 그룹 번호 (1부터 시작)
461
+ - `totalGroups`: 전체 병렬 그룹 수 (`parallelGroups.length`)
462
+ - `agentCount`: 현재 그룹의 태스크 수 (`parallelGroups[groupIndex].length`)
463
+
464
+ ### 각 태스크 완료 후 (`execute_task` 응답 수신 시마다)
465
+
466
+ `TaskUpdate`로 진행 상황과 현재 실행 태스크명을 업데이트한다.
467
+
468
+ 순차 실행 중:
469
+ ```
470
+ description: "{completedCount}/{totalTasks} 완료 | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
471
+ activeForm: "실행 중: {taskContext.currentTask.title}"
472
+ ```
473
+
474
+ 병렬 그룹 실행 중 (각 Agent의 execute_task 완료 시):
475
+ ```
476
+ description: "{completedCount}/{totalTasks} 완료 | 실패: {failedCount}개 | 그룹 {groupIndex}/{totalGroups}"
477
+ activeForm: "병렬 실행 중: 그룹 {groupIndex}/{totalGroups} — {agentCount}개 Agent 실행 중"
478
+ ```
479
+
480
+ - `completedCount`: 지금까지 제출한 taskResult 수 (`response.completedTasks`)
481
+ - `failedCount`: status가 `failed`인 taskResult 수
482
+ - `groupIndex/totalGroups`: 현재 처리 중인 병렬 그룹 번호 / 전체 그룹 수
483
+ - `agentCount`: 해당 그룹에서 아직 실행 중인 Agent 수
484
+
485
+ `allTasksCompleted === true` 이면 `TaskUpdate({ status: "completed", activeForm: undefined, description: "전체 완료 ({totalTasks}개)" })`로 변경한다.
486
+
487
+ ### 평가/진화 단계
488
+
489
+ - `evaluate` 시작: description에 "평가 중 — structural 검사" 추가
490
+ - structural 통과: "평가 중 — contextual 검사" 로 업데이트
491
+ - 평가 완료(success): `TaskUpdate({ status: "completed", description: "완료 | score: {overallScore} | alignment: {goalAlignment}" })`
492
+ - Evolve 진입: description에 "개선 중 (generation {N})" 추가
493
+
494
+ ### 오류/에스컬레이션 시
495
+
496
+ ```
497
+ status: "completed"
498
+ description: "종료: {terminationReason} | 최고 점수: {bestScore}"
499
+ ```
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: interview
3
- version: "1.0.0"
3
+ version: "1.1.0"
4
4
  description: "Gestalt-driven interview to clarify project requirements"
5
5
  triggers:
6
6
  - "interview"
@@ -80,3 +80,39 @@ API 키 없이 MCP 서버 실행 시 자동 활성화. LLM 작업을 caller가
80
80
  | `questionPrompt` | string | 다음 질문 생성용 프롬프트 |
81
81
  | `scoringPrompt` | string? | 모호성 점수 산출용 프롬프트 (respond 후에만 포함) |
82
82
  | `roundNumber` | number | 현재 라운드 번호 |
83
+
84
+ ---
85
+
86
+ ## 공통 진행 패널
87
+
88
+ 인터뷰 진행 중 Claude Code Task 패널에 실시간 상태를 표시한다. 패널 업데이트는 best-effort — 업데이트 실패가 인터뷰 흐름을 중단시켜서는 안 된다.
89
+
90
+ ### 시작 시 (`start` 응답 수신 직후)
91
+
92
+ `TaskCreate`를 호출해 진행 패널을 생성하고, 반환된 taskId를 세션 동안 보관한다.
93
+
94
+ ```
95
+ subject: "Gestalt 인터뷰: {topic}"
96
+ description: "라운드 1/{maxRounds} | 모호성: 측정 전"
97
+ activeForm: "라운드 1 — {currentPrinciple}"
98
+ ```
99
+
100
+ ### 각 라운드 후 (`respond` 응답 수신 시마다)
101
+
102
+ `TaskUpdate`로 description과 activeForm을 최신 상태로 갱신한다. 모호성 점수는 추이 형식으로 표시한다.
103
+
104
+ ```
105
+ description: "라운드 {roundNumber}/{maxRounds} | 모호성: {score1} → {score2} → {latestScore}"
106
+ activeForm: "라운드 {roundNumber} — {currentPrinciple}"
107
+ ```
108
+
109
+ ambiguityScore.isReady === true 이면 description에 "✓ 준비 완료" 표시를 추가한다.
110
+
111
+ ### 완료 시 (`complete` 응답 수신 후)
112
+
113
+ `TaskUpdate`로 status를 completed로 변경한다.
114
+
115
+ ```
116
+ status: "completed"
117
+ description: "총 {totalRounds}라운드 완료 | 최종 모호성: {finalAmbiguityScore}"
118
+ ```