{"id":47942154,"url":"https://github.com/tienne/gestalt","last_synced_at":"2026-06-14T03:05:48.806Z","repository":{"id":344164288,"uuid":"1178440288","full_name":"tienne/gestalt","owner":"tienne","description":"From ambiguity to AI execution ⚡","archived":false,"fork":false,"pushed_at":"2026-06-07T10:34:13.000Z","size":935,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-07T11:22:19.519Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tienne.png","metadata":{"files":{"readme":"README.ko.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-11T02:52:59.000Z","updated_at":"2026-06-07T10:34:14.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tienne/gestalt","commit_stats":null,"previous_names":["tienne/gestalt"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/tienne/gestalt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tienne%2Fgestalt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tienne%2Fgestalt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tienne%2Fgestalt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tienne%2Fgestalt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tienne","download_url":"https://codeload.github.com/tienne/gestalt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tienne%2Fgestalt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34044919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-08T02:00:07.615Z","response_time":111,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T08:11:34.002Z","updated_at":"2026-06-08T02:01:56.172Z","avatar_url":"https://github.com/tienne.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" alt=\"Gestalt\" width=\"600\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eGestalt — AI 개발 하네스\u003c/strong\u003e\u003cbr/\u003e\n  흩어진 막연함을 하나의 실행 계획으로\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@tienne/gestalt\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@tienne/gestalt\" alt=\"npm version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"MIT License\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/tienne/gestalt/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/tienne/gestalt/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"./README.md\"\u003eEnglish\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Gestalt는 무엇인가요?\n\nGestalt는 Claude Code 안에서 실행되는 MCP(Model Context Protocol) 서버예요. 요구사항을 인터뷰로 구체화해 **Spec**(목표·제약조건·완료 기준)을 만들고, 그 Spec을 바탕으로 실행 계획을 짜요.\n\n\u003e **시작 전 확인** — Node.js \u003e= 20.0.0이 필요해요. `nvm install 22 \u0026\u0026 nvm use 22`로 설치할 수 있어요.\n\n---\n\n## 빠른 시작\n\n플러그인을 설치하세요 (최초 1회):\n\n```bash\n# 1단계: 마켓플레이스 등록\n/plugin marketplace add tienne/gestalt\n\n# 2단계: 플러그인 설치\n/plugin install gestalt@gestalt\n```\n\n설치가 끝나면 Claude Code에서 바로 사용할 수 있어요:\n\n```bash\n# 요구사항 인터뷰 시작\n/interview \"사용자 인증 시스템\"\n\n# 인터뷰 완료 후 Spec 생성\n/spec\n\n# Spec을 실행 계획으로 만들고 실행\n/execute\n```\n\n![Gestalt 데모](./docs/demo.gif)\n_(데모 영상 준비 중)_\n\n---\n\n## Gestalt가 해결하는 문제\n\nAI에게 무엇을 만들지 설명하는 건 생각보다 어려워요. 방향은 맞는데 세부 구현이 기대와 달라 다시 처음부터 시작하게 되는 일이 생기죠.\n\nGestalt는 코드를 작성하기 전에 요구사항을 함께 구체화해줘요. 게슈탈트 심리학 원리를 토대로 인터뷰를 진행하면서 빠진 요구사항, 핵심 기능, 모순되는 조건을 체계적으로 짚어줘요.\n\n인터뷰를 마치면 결과가 **Spec**으로 정리돼요. 목표, 제약조건, 완료 기준을 담은 이 문서가 실행 계획부터 코드 리뷰까지 이후 모든 단계의 기준이 돼요.\n\n### 다섯 가지 게슈탈트 원리\n\n- **Closure** — 빠진 요구사항과 암묵적 가정을 찾아요\n- **Proximity** — 함께 묶여야 할 기능과 태스크를 식별해요\n- **Similarity** — 요구사항 전반의 반복 패턴을 파악해요\n- **Figure-Ground** — 핵심 MVP(전경)와 선택사항(배경)을 구분해요\n- **Continuity** — 의존성 체인을 검증하고 모순을 감지해요\n\n\u003e \"전체는 부분의 합보다 크다.\" — 아리스토텔레스\n\n### Passthrough 모드는 어떻게 작동하나요?\n\nGestalt는 **MCP 서버**로 실행돼요. Claude Code를 통해 사용할 경우 Claude Code가 LLM 역할을 담당해요 — Gestalt는 프롬프트와 컨텍스트를 반환하고, 실제 추론은 Claude Code가 해요. 서버 자체는 별도 API 호출을 하지 않아요.\n\n\u003e **참고해 주세요** — Execute 단계는 API 키 설정 여부와 무관하게 **항상 Passthrough 모드**로 동작해요. Execute는 Claude Code의 도구(Bash, Edit 등)로 실제 파일 수정과 코드 실행을 수행하기 때문에, Claude Code가 LLM 주체가 되는 게 설계 의도예요. 자체 LLM으로 대체하는 모드는 따로 없어요(미구현이 아니라 설계상 그래요).\n\n```\nClaude Code\n       │\n       ▼ /interview \"주제\"\n  Gestalt MCP 서버\n  (컨텍스트 + 프롬프트 반환)\n       │\n       ▼\n  Claude Code가 프롬프트 실행\n  (질문 생성, 점수 산출, 계획 수립)\n       │\n       ▼\n  Gestalt MCP 서버\n  (검증, 상태 저장, 단계 진행)\n       │\n       ▼ 해상도 ≥ 0.8 될 때까지 반복\n  최종 Spec → 실행 계획\n```\n\n\u003e **참고해 주세요** — CLI 직접 실행 모드에서는 `ANTHROPIC_API_KEY`가 필요해요. Claude Code 없이 터미널에서 바로 사용할 경우에만 해당돼요.\n\n---\n\n## 프로젝트 메모리\n\nSpec과 실행 결과는 레포 루트의 `.gestalt/memory.json`에 자동으로 저장돼요.\n\n```json\n{\n  \"specHistory\": [\n    { \"specId\": \"...\", \"goal\": \"Build a user auth system\", \"sourceType\": \"text\" }\n  ],\n  \"executionHistory\": [],\n  \"architectureDecisions\": []\n}\n```\n\n- **커밋하세요** — `.gestalt/memory.json`은 일반 JSON 파일이에요. 커밋해두면 팀원도 `git pull` 후 이전 결정 사항을 그대로 이어받을 수 있어요.\n- **컨텍스트 반영** — 다음 Spec을 생성할 때 이전 목표와 아키텍처 결정 사항이 프롬프트에 자동으로 반영돼요.\n- **User Profile** — 개인 설정은 `~/.gestalt/profile.json`에 저장돼요. git에는 올라가지 않아요.\n\n---\n\n## 설치\n\n### 옵션 1: Claude Code 플러그인 (권장)\n\n설치 한 번에 MCP 서버, 슬래시 커맨드, Gestalt 에이전트, 프로젝트 컨텍스트를 모두 쓸 수 있어요.\n\n**터미널에서:**\n\n```bash\nclaude plugin install gestalt@gestalt\n```\n\n**Claude Code 세션 내에서:**\n\n```bash\n# 1단계: 마켓플레이스 등록 (최초 1회)\n/plugin marketplace add tienne/gestalt\n\n# 2단계: 플러그인 설치\n/plugin install gestalt@gestalt\n```\n\n기본 제공 항목:\n\n| 항목 | 내용 |\n|------|------|\n| **MCP 도구** | `ges_interview`, `ges_generate_spec`, `ges_execute`, `ges_create_agent`, `ges_agent`, `ges_status`, `ges_code_graph`, `ges_graph_visualize`, `ges_benchmark` |\n| **슬래시 커맨드** | `/interview`, `/spec`, `/execute`, `/agent` |\n| **에이전트** | Gestalt 파이프라인 에이전트 5개 + Role 에이전트 9개 + Review 에이전트 3개 |\n| **CLAUDE.md** | 프로젝트 컨텍스트 및 MCP 사용 가이드 자동 추가 |\n\n\u003e **Node.js \u003e= 20.0.0** 필요 — [nvm](https://github.com/nvm-sh/nvm) 사용 시: `nvm install 22 \u0026\u0026 nvm use 22`\n\n---\n\n### 옵션 2: Claude Code Desktop\n\nClaude Code Desktop 설정에서 `settings.json` (또는 `claude_desktop_config.json`)에 추가하세요:\n\n```json\n{\n  \"mcpServers\": {\n    \"gestalt\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@tienne/gestalt\"]\n    }\n  }\n}\n```\n\nClaude Code Desktop을 재시작하면 MCP 도구가 즉시 사용 가능해요. 슬래시 커맨드는 플러그인 설치 또는 별도 스킬 설정이 필요해요.\n\n---\n\n### 옵션 3: Claude Code CLI\n\n```bash\n# claude CLI로 추가\nclaude mcp add gestalt -- npx -y @tienne/gestalt\n```\n\n또는 `~/.claude/settings.json`을 직접 편집하세요:\n\n```json\n{\n  \"mcpServers\": {\n    \"gestalt\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@tienne/gestalt\"]\n    }\n  }\n}\n```\n\n---\n\n## 사용법: 전체 파이프라인\n\n### 1단계 — 인터뷰\n\n주제를 입력해 인터뷰를 시작하세요. 한 줄짜리 문장도 충분해요.\n\n```bash\n/interview \"Stripe로 결제 플로우를 만들고 싶어\"\n```\n\n각 라운드는 모호한 부분을 집중적으로 파악해요:\n\n- **Closure** — 빠진 요구사항과 말하지 않고 가정한 것을 찾아요\n- **Proximity** — 함께 묶여야 할 기능을 식별해요\n- **Similarity** — 요구사항에 반복되는 패턴을 파악해요\n- **Figure-Ground** — 핵심 MVP와 선택사항을 구분해요\n- **Continuity** — 모순이나 충돌을 검증해요\n\n**해상도가 ≥ 0.8에 도달할 때까지** 인터뷰가 계속돼요:\n\n```\n1라운드 → 해상도: 0.28  (모르는 것이 많음)\n4라운드 → 해상도: 0.55  (점점 명확해짐)\n8라운드 → 해상도: 0.81  ✓ Spec 생성 준비 완료\n```\n\n#### 인터뷰가 길어질 때 (Context Compression)\n\n라운드가 5개를 초과하면 Gestalt가 자동으로 압축을 제안해요. `compress` action을 쓰면 이전 대화를 요약해 컨텍스트를 줄일 수 있어요:\n\n```\n1. respond 응답에 needsCompression: true + compressionContext 포함\n2. ges_interview({ action: \"compress\", sessionId }) → compressionContext 반환\n3. caller가 요약 생성 후 제출 → 세션에 저장\n```\n\n이후 라운드에서 압축된 요약이 자동으로 반영돼요.\n\n---\n\n### 2단계 — Spec 생성\n\n**옵션 A — 텍스트로 바로 생성 (인터뷰 불필요):**\n\n```bash\nges_generate_spec({ text: \"Stripe로 결제 플로우 구현\" })\n```\n\n**옵션 A-2 — 내장 템플릿 사용:**\n\n3가지 내장 템플릿으로 빠르게 시작할 수 있어요:\n\n| 템플릿 ID | 설명 |\n|-----------|------|\n| `rest-api` | REST API 서버 (인증, CRUD, OpenAPI) |\n| `react-dashboard` | React 대시보드 앱 (차트, 필터, 반응형) |\n| `cli-tool` | CLI 도구 (서브커맨드, 설정, 배포) |\n\n```bash\nges_generate_spec({ text: \"JWT 인증이 포함된 API\", template: \"rest-api\" })\n```\n\n**옵션 B — 완료된 인터뷰에서 생성:**\n\n```bash\n/spec\n```\n\n이후 단계 전체의 기준이 되는 **Spec**을 생성해요:\n\n```\ngoal                → 명확한 프로젝트 목표\nconstraints         → 기술적·비즈니스적 제약 조건\nacceptanceCriteria  → 측정 가능한 완료 기준\nontologySchema      → 엔티티-관계 모델 (entities + relations)\ngestaltAnalysis     → 게슈탈트 원리별 핵심 발견 사항\n```\n\n---\n\n### 3단계 — Execute (계획 + 실행)\n\nSpec에서 실행 계획을 만들어 실행해요:\n\n```bash\n/execute\n```\n\n\u003e Execute는 **항상 Passthrough 모드**로 동작해요 — 실제 파일 수정과 코드 실행은 Claude Code가 도구(Bash, Edit 등)로 수행해요. API 키를 설정해도 Execute가 자체 LLM 모드로 바뀌지 않아요. 그런 모드는 설계상 존재하지 않아요.\n\n**Planning 단계**에서 4가지 게슈탈트 원리를 고정 순서로 적용해요:\n\n| 단계 | 원리 | 역할 |\n|:---:|-----------|-------------|\n| 1 | **Figure-Ground** | 완료 조건(AC)을 핵심(전경) vs. 보조(배경)로 분류 |\n| 2 | **Closure** | AC를 원자적 태스크로 분해 (암묵적 태스크 포함) |\n| 3 | **Proximity** | 관련 태스크를 도메인별 그룹으로 묶음 |\n| 4 | **Continuity** | 의존성 DAG 검증 — 순환 없음, 위상 정렬 순서 확인 |\n\n**Execution 단계**에서 위상 정렬 순서대로 태스크를 실행해요. 각 태스크 후 **Drift Detection**이 Spec과 얼마나 맞는지 확인해요:\n\n- 3차원 점수: Goal (50%) + Constraint (30%) + Ontology (20%)\n- Jaccard 유사도 기반 측정\n- 임계값을 초과하면 회고(Retrospective)가 자동으로 시작돼요\n\n#### 병렬 실행 (Parallel Groups)\n\n`plan_complete` 응답에 `parallelGroups: string[][]`이 포함돼요. 의존성이 없는 태스크를 같은 그룹으로 묶어 동시에 실행해요:\n\n```json\n\"parallelGroups\": [\n  [\"setup-db\", \"setup-env\"],   // 동시 실행 가능\n  [\"create-schema\"],           // 위 그룹 완료 후 실행\n  [\"seed-data\", \"run-tests\"]   // 동시 실행 가능\n]\n```\n\n#### 실행 이어하기 (Resume)\n\n실행 중 세션이 중단되어도 이어서 계속할 수 있어요:\n\n```bash\nges_execute({ action: \"resume\", sessionId: \"\u003cid\u003e\" })\n```\n\n`ResumeContext`를 반환해요: 완료된 태스크 목록, 다음 태스크, 진행률(%). `ges_status` 응답에도 `resumeContext`가 자동으로 포함돼요.\n\n#### Brownfield 감사 (Audit)\n\n기존 코드베이스가 있을 때 Spec 대비 구현 현황을 분석할 수 있어요:\n\n```bash\n# 1단계: 감사 컨텍스트 요청\nges_execute({ action: \"audit\", sessionId: \"\u003cid\u003e\" })\n→ auditContext (systemPrompt, auditPrompt) 반환\n\n# 2단계: 코드베이스 스냅샷 + 감사 결과 제출\nges_execute({\n  action: \"audit\",\n  sessionId: \"\u003cid\u003e\",\n  codebaseSnapshot: \"...\",\n  auditResult: { implementedACs: [0,2], partialACs: [1], missingACs: [3], gapAnalysis: \"...\" }\n})\n```\n\n#### 실행 진행 패널\n\n`/execute` 실행 중 Claude Code Task 패널에 진행 상태가 실시간으로 표시돼요. Planning 단계부터 Evaluate까지 완료 태스크 수, 현재 태스크 이름, 실패 수, 병렬 그룹 구조가 자동으로 갱신돼요.\n\n#### 하위 에이전트 생성 (Spawn)\n\n실행 중에 복잡한 태스크를 하위 태스크로 나눌 수 있어요:\n\n```bash\nges_execute({\n  action: \"spawn\",\n  sessionId: \"\u003cid\u003e\",\n  parentTaskId: \"task-3\",\n  subTasks: [\n    { title: \"DB 스키마 작성\", description: \"...\" },\n    { title: \"마이그레이션 실행\", description: \"...\", dependsOn: [\"spawned-\u003cid\u003e\"] }\n  ]\n})\n```\n\n---\n\n### 4단계 — Evaluate (평가)\n\n실행 후 2단계 평가가 자동으로 실행돼요:\n\n| 단계 | 방식 | 실패 시 |\n|:---:|-------|-----------|\n| 1 | **Structural** — lint → build → test 실행 | 조기 종료(short-circuit); 2단계 건너뜀 |\n| 2 | **Contextual** — LLM이 각 AC + goal alignment 검증 | Evolution Loop 진입 |\n\n**성공 조건:** `score ≥ 0.85` AND `goalAlignment ≥ 0.80`\n\n---\n\n### 5단계 — Evolve (진화)\n\n평가가 실패하면 Evolution Loop가 동작해요. 세 가지 복구 흐름을 제공해요:\n\n**Flow A — Structural Fix** (lint/build/test 실패 시)\n```\nevolve_fix → 수정 태스크 제출 → 재평가\n```\n\n**Flow B — Contextual Evolution** (AC 점수 미달 시)\n```\nevolve → Spec 패치 (AC/constraints) → 영향받은 태스크 재실행 → 재평가\n```\n\nSpec 패치 범위: AC와 constraints는 자유롭게 수정할 수 있어요. ontology는 추가/변경만 가능하고, **goal은 변경할 수 없어요**.\n\n**Flow C — Lateral Thinking** (답보 상태 감지 시)\n\n종료하는 대신 Lateral Thinking Persona를 순서대로 적용하며 다른 접근을 시도해요:\n\n| 답보 상태 패턴 | Persona | 전략 |\n|--------------------|---------|---------|\n| Hard cap 도달 | **Multistability** | 다른 각도로 보기 |\n| 진동하는 점수 | **Simplicity** | 단순하게 줄이고 수렴 |\n| 진전 없음 (no drift) | **Reification** | 빠진 것 채우기 |\n| 효과 감소 | **Invariance** | 성공한 패턴 복제 |\n\n4개 Persona를 모두 소진하면 세션이 **Human Escalation**으로 종료돼요. 직접 해결할 수 있도록 구체적인 제안도 함께 알려줘요.\n\n**종료 조건:**\n\n| 조건 | 트리거 |\n|-----------|---------|\n| `success` | score ≥ 0.85 AND goalAlignment ≥ 0.80 |\n| `stagnation` | 2회 연속 delta \u003c 0.05 |\n| `oscillation` | 2회 연속 점수 역전 |\n| `hard_cap` | structural 3회 + contextual 3회 실패 |\n| `caller` | 수동 종료 |\n| `human_escalation` | 4개 lateral persona 모두 소진 |\n\n---\n\n### 6단계 — Code Review (코드 리뷰)\n\nEvolution 완료 후 코드 리뷰 파이프라인이 자동으로 실행돼요:\n\n```\nreview_start → 에이전트 관점 제출 → 합의 → 자동 수정\n```\n\n9개의 내장 **Role 에이전트**가 다양한 관점에서 리뷰해요:\n\n| 에이전트 | 도메인 |\n|-------|--------|\n| `architect` | 시스템 설계, 확장성 |\n| `frontend-developer` | UI, React, 접근성 |\n| `backend-developer` | API, 데이터베이스, 서버 |\n| `devops-engineer` | CI/CD, 인프라, 모니터링 |\n| `qa-engineer` | 테스팅, 품질, 자동화 |\n| `designer` | UX/UI, 디자인 시스템 |\n| `product-planner` | 로드맵, 사용자 스토리, 지표 |\n| `researcher` | 분석, 데이터, 벤치마크 |\n| `technical-writer` | 문서화, API 문서, 가이드, README |\n\n3개의 내장 **Review 에이전트**가 코드를 집중 분석해요:\n\n| 에이전트 | 집중 영역 |\n|-------|-------|\n| `security-reviewer` | 인젝션, XSS, 인증 취약점, 시크릿 |\n| `performance-reviewer` | 메모리 누수, N+1 쿼리, 번들 크기, 비동기 |\n| `quality-reviewer` | 가독성, SOLID, 에러 핸들링, DRY |\n\n파이프라인 밖에서도 `/agent`로 언제든 에이전트를 쓸 수 있어요:\n\n```bash\n# 사용 가능한 에이전트 목록 조회\n/agent\n\n# 특정 에이전트로 원하는 태스크 실행\n/agent architect \"이 코드베이스의 모듈 경계를 리뷰해줘\"\n/agent security-reviewer \"이 인증 코드의 취약점을 확인해줘\"\n/agent technical-writer \"이 모듈의 README를 작성해줘\"\n```\n\n인터뷰 결과에서 커스텀 Role 에이전트를 만들 수도 있어요:\n\n```\n# 인터뷰 완료 후 커스텀 에이전트 생성\n\n# 1단계: 에이전트 생성 컨텍스트 요청\nges_create_agent  →  action: \"start\", sessionId: \"\u003cid\u003e\"\n                  →  agentContext 반환 (systemPrompt, creationPrompt, schema)\n\n# 2단계: 생성한 AGENT.md 내용 제출\nges_create_agent  →  action: \"submit\", sessionId: \"\u003cid\u003e\", agentContent: \"...\"\n                  →  agents/{name}/AGENT.md 생성\n```\n\n---\n\n### CLI 모드 (Claude Code 없이 사용하기)\n\nClaude Code 없이 터미널에서 바로 쓰고 싶다면 CLI 모드를 이용할 수 있어요. **`ANTHROPIC_API_KEY`가 필요해요.**\n\n```bash\n# 인터랙티브 인터뷰 시작\nnpx @tienne/gestalt interview \"주제\"\n\n# 완료된 세션에서 Spec 생성\nnpx @tienne/gestalt spec \u003csession-id\u003e\n\n# 전체 세션 목록 확인\nnpx @tienne/gestalt status\n\n# gestalt.json 설정 파일 생성\nnpx @tienne/gestalt setup\n\n# MCP 서버 수동 시작\nnpx @tienne/gestalt serve\n```\n\n---\n\n## 설정\n\n다음 명령어로 `gestalt.json`을 생성하세요. IDE 자동완성을 지원해요.\n\n```bash\nnpx @tienne/gestalt setup\n```\n\n```json\n{\n  \"$schema\": \"./node_modules/@tienne/gestalt/schemas/gestalt.schema.json\",\n  \"llm\": {\n    \"model\": \"claude-sonnet-4-20250514\"\n  },\n  \"interview\": {\n    \"resolutionThreshold\": 0.8,\n    \"maxRounds\": 10\n  },\n  \"execute\": {\n    \"driftThreshold\": 0.3,\n    \"successThreshold\": 0.85,\n    \"goalAlignmentThreshold\": 0.80\n  }\n}\n```\n\n**설정 우선순위** (높음 → 낮음): 코드 override → 쉘 환경변수 → `.env` → `gestalt.json` → 기본값\n\n잘못된 값은 경고를 출력하고 기본값을 사용해요.\n\n### 멀티 프로바이더 설정 (LLM Tier)\n\n작업 복잡도에 따라 서로 다른 LLM 프로바이더를 tier별로 지정할 수 있어요.\n\n| Tier | 용도 | 예시 |\n|------|------|------|\n| **frugal** | 가벼운 작업 — 점수 산정, 분류, 짧은 응답 | `llama3.2`, `haiku` |\n| **standard** | 일반 작업 — 인터뷰, 스펙 생성, 코드 실행 | `claude-sonnet-4-20250514` |\n| **frontier** | 고난도 추론 — 아키텍처 설계, 코드 리뷰, 진화 루프 | `claude-opus-4-20250514` |\n\nAnthropic(standard/frontier)과 Ollama(frugal)를 혼합하는 예시예요:\n\n```json\n{\n  \"$schema\": \"./node_modules/@tienne/gestalt/schemas/gestalt.schema.json\",\n  \"llm\": {\n    \"apiKey\": \"\",\n    \"model\": \"claude-sonnet-4-20250514\",\n    \"frugal\": {\n      \"provider\": \"openai\",\n      \"baseURL\": \"http://localhost:11434/v1\",\n      \"apiKey\": \"ollama\",\n      \"model\": \"llama3.2\"\n    },\n    \"standard\": {\n      \"provider\": \"anthropic\",\n      \"model\": \"claude-sonnet-4-20250514\"\n    },\n    \"frontier\": {\n      \"provider\": \"anthropic\",\n      \"model\": \"claude-opus-4-20250514\"\n    }\n  }\n}\n```\n\n\u003e tier를 설정하지 않으면 `llm.apiKey` + `llm.model` 조합으로 모든 tier에 Anthropic을 사용해요. 기존 설정과 완전히 호환돼요.\n\n### 환경변수\n\n| 변수 | Config 경로 | 기본값 | 설명 |\n|----------|-------------|---------|-------------|\n| `ANTHROPIC_API_KEY` | `llm.apiKey` | `\"\"` | CLI 직접 모드에서만 필요 |\n| `GESTALT_MODEL` | `llm.model` | `claude-sonnet-4-20250514` | LLM 모델 (provider 모드) |\n| `GESTALT_RESOLUTION_THRESHOLD` | `interview.resolutionThreshold` | `0.8` | 인터뷰 완료 임계값 |\n| `GESTALT_MAX_ROUNDS` | `interview.maxRounds` | `10` | 최대 인터뷰 라운드 수 |\n| `GESTALT_DRIFT_THRESHOLD` | `execute.driftThreshold` | `0.3` | 태스크 drift 감지 임계값 |\n| `GESTALT_EVOLVE_SUCCESS_THRESHOLD` | `execute.successThreshold` | `0.85` | Evolution 성공 점수 |\n| `GESTALT_EVOLVE_GOAL_ALIGNMENT_THRESHOLD` | `execute.goalAlignmentThreshold` | `0.80` | Goal alignment 임계값 |\n| `GESTALT_DB_PATH` | `dbPath` | `~/.gestalt/events.db` | SQLite 이벤트 스토어 경로 |\n| `GESTALT_SKILLS_DIR` | `skillsDir` | `skills` | 커스텀 스킬 디렉토리 |\n| `GESTALT_AGENTS_DIR` | `agentsDir` | `agents` | 커스텀 에이전트 디렉토리 |\n| `GESTALT_LOG_LEVEL` | `logLevel` | `info` | 로그 레벨 (`debug`/`info`/`warn`/`error`) |\n| `GESTALT_LLM_FRUGAL_PROVIDER` | `llm.frugal.provider` | — | frugal tier 프로바이더 (`anthropic`/`openai`) |\n| `GESTALT_LLM_FRUGAL_API_KEY` | `llm.frugal.apiKey` | — | frugal tier API 키 |\n| `GESTALT_LLM_FRUGAL_BASE_URL` | `llm.frugal.baseURL` | — | frugal tier API 엔드포인트 (Ollama 등) |\n| `GESTALT_LLM_FRUGAL_MODEL` | `llm.frugal.model` | — | frugal tier 모델 |\n| `GESTALT_LLM_STANDARD_PROVIDER` | `llm.standard.provider` | — | standard tier 프로바이더 |\n| `GESTALT_LLM_STANDARD_API_KEY` | `llm.standard.apiKey` | — | standard tier API 키 |\n| `GESTALT_LLM_STANDARD_BASE_URL` | `llm.standard.baseURL` | — | standard tier API 엔드포인트 |\n| `GESTALT_LLM_STANDARD_MODEL` | `llm.standard.model` | — | standard tier 모델 |\n| `GESTALT_LLM_FRONTIER_PROVIDER` | `llm.frontier.provider` | — | frontier tier 프로바이더 |\n| `GESTALT_LLM_FRONTIER_API_KEY` | `llm.frontier.apiKey` | — | frontier tier API 키 |\n| `GESTALT_LLM_FRONTIER_BASE_URL` | `llm.frontier.baseURL` | — | frontier tier API 엔드포인트 |\n| `GESTALT_LLM_FRONTIER_MODEL` | `llm.frontier.model` | — | frontier tier 모델 |\n\n---\n\n## 아키텍처\n\n![Gestalt 아키텍처](./docs/architecture.png)\n_(다이어그램 준비 중)_\n\n```\nClaude Code\n     │\n     ▼  MCP / stdio transport\n┌──────────────────────────────────┐\n│        Gestalt MCP 서버           │\n│                                  │\n│  Interview Engine                │\n│  ├─ GestaltPrincipleSelector     │\n│  ├─ ResolutionScorer              │\n│  ├─ SessionManager               │\n│  └─ ContextCompressor            │\n│                                  │\n│  Spec Generator                  │\n│  ├─ PassthroughSpecGenerator     │\n│  └─ SpecTemplateRegistry         │\n│                                  │\n│  Execute Engine                  │\n│  ├─ DAG Validator                │\n│  ├─ ParallelGroupsCalculator     │\n│  ├─ DriftDetector                │\n│  ├─ EvaluationEngine             │\n│  ├─ AuditEngine                  │\n│  └─ ExecuteSessionManager        │\n│                                  │\n│  Resilience Engine               │\n│  ├─ StagnationDetector           │\n│  ├─ LateralThinkingPersonas      │\n│  └─ HumanEscalation              │\n│                                  │\n│  Agent System                    │\n│  ├─ RoleAgentRegistry            │\n│  ├─ RoleMatchEngine              │\n│  └─ RoleConsensusEngine          │\n│                                  │\n│  EventStore (SQLite WAL)         │\n└──────────────────────────────────┘\n```\n\n---\n\n## 라이선스\n\nMIT © [tienne](https://github.com/tienne)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftienne%2Fgestalt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftienne%2Fgestalt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftienne%2Fgestalt/lists"}