@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.
- package/CLAUDE.md +4 -2
- package/README.ko.md +47 -35
- package/README.md +8 -20
- package/dist/package.json +3 -1
- package/dist/role-agents/technical-writer/AGENT.md +39 -3
- package/dist/schemas/gestalt.schema.json +5 -0
- package/dist/skills/execute/SKILL.md +148 -1
- package/dist/skills/interview/SKILL.md +37 -1
- package/dist/skills/spec/SKILL.md +39 -1
- package/dist/src/cli/commands/setup.d.ts.map +1 -1
- package/dist/src/cli/commands/setup.js +1 -0
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/core/config.d.ts +3 -0
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +5 -0
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/execute/rule-writer.d.ts +15 -0
- package/dist/src/execute/rule-writer.d.ts.map +1 -0
- package/dist/src/execute/rule-writer.js +57 -0
- package/dist/src/execute/rule-writer.js.map +1 -0
- package/dist/src/mcp/schemas.d.ts +3 -0
- package/dist/src/mcp/schemas.d.ts.map +1 -1
- package/dist/src/mcp/schemas.js +1 -0
- package/dist/src/mcp/schemas.js.map +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +2 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/execute-passthrough.js +113 -4
- package/dist/src/mcp/tools/execute-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/interview-passthrough.js +5 -0
- package/dist/src/mcp/tools/interview-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/review-passthrough.js +14 -0
- package/dist/src/mcp/tools/review-passthrough.js.map +1 -1
- package/dist/src/mcp/tools/spec-passthrough.d.ts.map +1 -1
- package/dist/src/mcp/tools/spec-passthrough.js +9 -0
- package/dist/src/mcp/tools/spec-passthrough.js.map +1 -1
- package/dist/src/utils/notifier.d.ts +10 -0
- package/dist/src/utils/notifier.d.ts.map +1 -0
- package/dist/src/utils/notifier.js +21 -0
- package/dist/src/utils/notifier.js.map +1 -0
- package/package.json +3 -1
- package/role-agents/technical-writer/AGENT.md +39 -3
- package/schemas/gestalt.schema.json +5 -0
- package/skills/execute/SKILL.md +148 -1
- package/skills/interview/SKILL.md +37 -1
- 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
|
-
게슈탈트
|
|
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
|
-
|
|
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) 서버예요.
|
|
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
|
-
|
|
32
|
+
플러그인을 설치하세요 (최초 1회):
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
|
-
#
|
|
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
|
-
# 인터뷰 완료 후
|
|
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
|
-
##
|
|
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
|
-
- **컨텍스트
|
|
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 서버, 슬래시
|
|
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
|
-
|
|
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
|
-
-
|
|
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
|
-
####
|
|
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 실행 |
|
|
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
|
-
|
|
|
391
|
+
| 답보 상태 패턴 | Persona | 전략 |
|
|
380
392
|
|--------------------|---------|---------|
|
|
381
393
|
| Hard cap 도달 | **Multistability** | 다른 각도로 보기 |
|
|
382
394
|
| 진동하는 점수 | **Simplicity** | 단순하게 줄이고 수렴 |
|
|
383
395
|
| 진전 없음 (no drift) | **Reification** | 빠진 것 채우기 |
|
|
384
|
-
|
|
|
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
|
-
###
|
|
471
|
+
### CLI 모드 (Claude Code 없이 사용하기)
|
|
460
472
|
|
|
461
|
-
|
|
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
|
-
잘못된 값은 경고를 출력하고
|
|
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
|
|
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
|
-
|
|
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
|
-
###
|
|
459
|
+
### CLI Mode (without Claude Code)
|
|
472
460
|
|
|
473
|
-
|
|
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.
|
|
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
|
-
-
|
|
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
|
-
-
|
|
210
|
-
-
|
|
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.
|
|
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.
|
|
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
|
+
```
|