From f2f6f898a1909b87f4578712c5285088cf018bf1 Mon Sep 17 00:00:00 2001 From: jazz1x <33783621+jazz1x@users.noreply.github.com> Date: Fri, 22 May 2026 11:49:26 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20remove=20forki=20skill=20(moved=20to?= =?UTF-8?q?=20galmuri)=20=E2=80=94=20v0.4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 4 +- CHANGELOG.ko.md | 25 ++++ CHANGELOG.md | 25 ++++ README.ko.md | 35 ++---- README.md | 37 ++---- VERSION | 2 +- VERSIONING.md | 1 - scripts/test-all.sh | 4 +- skills/drafti-architect/SKILL.ko.md | 2 +- skills/drafti-architect/SKILL.md | 2 +- skills/drafti-feature/SKILL.ko.md | 2 +- skills/drafti-feature/SKILL.md | 2 +- skills/forki/SKILL.ko.md | 148 ------------------------ skills/forki/SKILL.md | 154 ------------------------- skills/forki/references/asset.ko.md | 66 ----------- skills/forki/references/asset.md | 66 ----------- skills/forki/references/protocol.ko.md | 115 ------------------ skills/forki/references/protocol.md | 115 ------------------ skills/impl/SKILL.ko.md | 2 +- skills/impl/SKILL.md | 2 +- 21 files changed, 85 insertions(+), 726 deletions(-) delete mode 100644 skills/forki/SKILL.ko.md delete mode 100644 skills/forki/SKILL.md delete mode 100644 skills/forki/references/asset.ko.md delete mode 100644 skills/forki/references/asset.md delete mode 100644 skills/forki/references/protocol.ko.md delete mode 100644 skills/forki/references/protocol.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index dd493ee..eb35dd3 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ { "name": "harnish", "source": "./", - "description": "자율 구현 엔진. PRD 생성(drafti) → 자율 구현(harnish). 점검(ralphi)은 galmuri로 이관." + "description": "자율 구현 엔진. PRD 생성(drafti) → 자율 구현(harnish). 의사결정(forki)·점검(ralphi)은 galmuri로 이관." } ] } diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index fedc14c..61fa714 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "harnish", - "version": "0.3.0", - "description": "자율 구현 엔진. PRD 생성(drafti) → 자율 구현(harnish). 점검(ralphi)은 자매 플러그인 galmuri로 이관.", + "version": "0.4.0", + "description": "자율 구현 엔진. PRD 생성(drafti) → 자율 구현(harnish). 의사결정(forki)·점검(ralphi)은 자매 플러그인 galmuri로 이관.", "author": { "name": "jazz1x", "url": "https://github.com/jazz1x" diff --git a/CHANGELOG.ko.md b/CHANGELOG.ko.md index f3b6c3c..2665e05 100644 --- a/CHANGELOG.ko.md +++ b/CHANGELOG.ko.md @@ -9,6 +9,31 @@ ## [Unreleased] +## [0.4.0] - 2026-05-22 + +`forki` 의사결정 강제 스킬이 harnish에서 졸업해 자매 플러그인 **galmuri** (`galmuri:forki`)로 이전. harnish는 구현 엔진 도메인(drafti + impl)으로 더 좁아지고, 의사결정 강제는 galmuri의 기존 Socratic 프레임 스킬(`audit`, `distill`, `ralphi`) 옆에서 함께 산다. public API breaking 변경 — 0.3.0의 ralphi 이전과 동일한 pre-1.0 MINOR 컨벤션. + +### Removed +- **`forki` 스킬** — [galmuri](https://github.com/jazz1x/galmuri)로 `galmuri:forki`로 이전. + - `skills/forki/` 삭제 (SKILL.md + SKILL.ko.md + 참조 문서 4개 en/ko). +- **`/harnish:forki` 슬래시 명령** — 더 이상 등록되지 않음. galmuri 설치 후 `/galmuri:forki` 사용. + +### Changed +- **README / README.ko** — forki 스킬 행, §0 Usage 섹션, flow 다이어그램 forki 노드, install 출력(4 → 3 skills), cherry-pick 예시(forki → impl), `decision` 자산 행, naming 섹션이 `galmuri:forki`를 가리키도록 갱신. +- **plugin.json / marketplace.json** description이 이전을 반영하도록 갱신; 버전 `0.4.0`으로 bump. +- **VERSIONING.md** 파일 구조 트리에서 forki 행 제거. +- **scripts/test-all.sh** SKILL 버전 동기 루프에서 `forki` 제외 (3개 SKILL × en+ko = 6 frontmatter 검사). +- **impl / drafti-architect / drafti-feature** frontmatter `version: 0.3.0` → `0.4.0` (plugin.json 잠금). + +### Migration +기존 `/harnish:forki` 사용자: +1. galmuri 설치: `npx skills add jazz1x/galmuri` (또는 `/plugin marketplace add https://github.com/jazz1x/galmuri.git && /plugin install galmuri`). +2. `/harnish:forki` 참조를 `/galmuri:forki`로 교체. +3. forki 스킬 본문은 galmuri에 그대로 보존됨 — 동작 변경 없음, 네임스페이스만 이동. + +### Why MINOR, not MAJOR +0.3.0과 동일 — pre-1.0 컨벤션은 MAJOR를 `1.0.0` 컷에 예약한다. breaking 표면(스킬 1개 제거 + 슬래시 명령 1개 이름 변경)은 위 마이그레이션 경로로 안내. + ## [0.3.0] - 2026-05-21 `ralphi` 점검 스킬이 harnish에서 졸업해 자매 플러그인 **galmuri** (`galmuri:ralphi`)로 이전. harnish는 구현 엔진 도메인(forki + drafti + impl)을 유지하고, 점검/감사는 galmuri의 기존 `audit` + `distill` 스킬 옆에서 동일한 Socratic 프레임 아래 함께 산다. public API breaking 변경. diff --git a/CHANGELOG.md b/CHANGELOG.md index 95a3a83..9633ab7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.4.0] - 2026-05-22 + +The `forki` decision-forcing skill graduates out of harnish into the sibling plugin **galmuri** (`galmuri:forki`). harnish narrows further to its implementation-engine concern (drafti + impl); decision forcing now lives next to galmuri's existing Socratic-frame skills (`audit`, `distill`, `ralphi`). This is a public-API breaking change, following the same pre-1.0 MINOR convention used for the 0.3.0 ralphi move. + +### Removed +- **`forki` skill** — moved to [galmuri](https://github.com/jazz1x/galmuri) as `galmuri:forki`. + - Deleted `skills/forki/` (SKILL.md + SKILL.ko.md + 4 reference docs en/ko). +- **`/harnish:forki` slash command** — no longer registered. Use `/galmuri:forki` after installing galmuri. + +### Changed +- **README / README.ko** — forki skill row, §0 Usage section, flow diagram forki node, install output (4 → 3 skills), cherry-pick example (forki → impl), `decision` asset row, and naming section updated to point at `galmuri:forki`. +- **plugin.json / marketplace.json** description updated to reflect the move; version bumped to `0.4.0`. +- **VERSIONING.md** file-structure tree drops the forki row. +- **scripts/test-all.sh** SKILL version-sync loop drops `forki` (3 skills × en+ko = 6 frontmatters checked). +- **impl / drafti-architect / drafti-feature** frontmatter `version: 0.3.0` → `0.4.0` for lockstep with plugin.json. + +### Migration +For consumers who previously relied on `/harnish:forki`: +1. Install galmuri: `npx skills add jazz1x/galmuri` (or `/plugin marketplace add https://github.com/jazz1x/galmuri.git && /plugin install galmuri`). +2. Replace any references to `/harnish:forki` with `/galmuri:forki`. +3. The forki skill body is preserved verbatim in galmuri — no behavior change, only namespace. + +### Why MINOR, not MAJOR +Same rationale as 0.3.0: pre-1.0 convention reserves MAJOR for the eventual `1.0.0` cut. The breaking surface (one removed skill + one renamed slash command) is documented above with a migration path. + ## [0.3.0] - 2026-05-21 The `ralphi` inspection skill graduates out of harnish into the sibling plugin **galmuri** (`galmuri:ralphi`). harnish keeps the implementation-engine concern (forki + drafti + impl); inspection/audit moves next to galmuri's existing `audit` + `distill` skills under a shared Socratic frame. This is a public-API breaking change. diff --git a/README.ko.md b/README.ko.md index cee7e6c..1c11282 100644 --- a/README.ko.md +++ b/README.ko.md @@ -2,7 +2,7 @@ > Claude Code 플러그인 — 자율 구현 엔진 -![version](https://img.shields.io/badge/version-0.3.0-blue) +![version](https://img.shields.io/badge/version-0.4.0-blue) ![license](https://img.shields.io/badge/license-MIT-green) ![claude-code](https://img.shields.io/badge/claude--code-plugin-purple) ![tests](https://img.shields.io/badge/tests-145%20passing-brightgreen) @@ -16,18 +16,17 @@ | Skill | Command | Role | |-------|---------|------| -| **forki** | `/harnish:forki` | 의사결정 강제 (2지선택 + D/E/V/R + trade-off, HITL 전용) | | **drafti-feature** | `/harnish:drafti-feature` | 기획 기반 구현 명세 PRD 생성 | | **drafti-architect** | `/harnish:drafti-architect` | 기술 주도 설계 PRD 생성 | | **impl** | `/harnish:impl` | 자율 구현 엔진 — "harnish" 엔진 (시딩 + ralph 루프 + 앵커링 + 경험축적) | -> **점검 스킬 이전**: `ralphi`는 자매 플러그인 **galmuri**로 졸업했다 (`galmuri:ralphi`). harnish는 완료 후 점검 단계에서 이를 cross-plugin으로 호출한다. +> **의사결정·점검 스킬 이전**: `forki`(`galmuri:forki`)와 `ralphi`(`galmuri:ralphi`)는 자매 플러그인 **galmuri**로 졸업했다. harnish는 필요한 지점에서 이를 cross-plugin으로 호출한다. 각 스킬은 **독립 궤도**에서 동작하며, 오직 **공유 아티팩트(파일)** 로만 연결된다. ``` -forki ──→ 2지선택 강제 (D/E/V/R + trade-off, HITL 전용) - ↓ +galmuri:forki ──→ 2지선택 강제 (자매 플러그인, PRD 이전 단계) + ↓ drafti ──→ docs/prd-*.md ──→ harnish ──→ 구현 코드 │ └── .harnish/ (작업 좌표 + 경험 축적, 사용자 프로젝트 CWD) @@ -57,7 +56,7 @@ npx skills add jazz1x/harnish --skill impl # 단일 스킬만 설치 예상 출력: ``` -✓ Installed jazz1x/harnish — 4 skills (forki, drafti-feature, drafti-architect, impl) +✓ Installed jazz1x/harnish — 3 skills (drafti-feature, drafti-architect, impl) ``` ### Option 2 — Claude Code 네이티브 플러그인 @@ -72,13 +71,12 @@ Claude Code 세션 안에서: 예상 출력: ``` -✓ Installed harnish@0.3.0 — 4 skills registered (forki, drafti-feature, drafti-architect, impl) +✓ Installed harnish@0.4.0 — 3 skills registered (drafti-feature, drafti-architect, impl) ``` `/plugin list` 로 확인. 아래 슬래시 명령들이 호출 가능해야 함: ``` -/harnish:forki /harnish:drafti-feature /harnish:drafti-architect /harnish:impl @@ -126,18 +124,7 @@ PRD 경로나 작업 설명 없이 호출하면 harnish 가 먼저 묻는다: ## Usage -### 0. 의사결정 강제 (forki) - -``` -사용자: /harnish:forki -→ "어떤 결정이 필요한가요? 고민 중인 상황을 설명해주세요." - -사용자: "Postgres와 MongoDB 중 뭐 써야 하지?" -→ forki가 2지선택으로 정리 → A/B 사용자 확정 -→ D/E/V/R 표 8칸 사용자에게 채우라고 요청 -→ trade-off 도출 → 최종 선택은 사용자 (LLM은 결정 못 함) -→ 선택의 구조적 이유 출력 -``` +> 의사결정 강제는 `galmuri:forki`로 이전됨 ([galmuri](https://github.com/jazz1x/galmuri) 설치 필요). PRD 작성 이전 단계에서 2지선택을 강제할 때 사용한다. ### 1. PRD 생성 (설계) @@ -233,7 +220,7 @@ Stop → promote-pending.sh (dedup) → harnish-assets.jsonl | `pattern` | 사용자가 "이 패턴 기억해" 라고 했거나 반복 성공 구조 감지 | | `guardrail` | 반복 실패에서 규칙이 도출됐을 때 (예: "503 시 항상 backoff 재시도") | | `snippet` | 그대로 인용할 가치가 있는 재사용 코드 조각 | -| `decision` | 이후로 가져갈 만한 forki 결과 | +| `decision` | 이후로 가져갈 만한 `galmuri:forki` 결과 | | `compressed` | 관련 자산 여러 개를 하나로 머지 (임계치 도달 시 자동 제안) | 자산 조회 / 관리: @@ -267,10 +254,10 @@ bash scripts/migrate.sh # 스키마 최신 ```bash mkdir -p .claude/skills -cp -r /path/to/harnish/skills/forki .claude/skills/ +cp -r /path/to/harnish/skills/impl .claude/skills/ ``` -해당 스킬이 `forki` 로 호출 가능 (플러그인 네임스페이스 없음). `forki` 대신 `impl`, `drafti-feature`, `drafti-architect` 중 어느 것도 가능. +해당 스킬이 `impl` 로 호출 가능 (플러그인 네임스페이스 없음). `impl` 대신 `drafti-feature`, `drafti-architect` 중 어느 것도 가능. ### B. 자체 플러그인 마켓으로 포크 @@ -298,7 +285,7 @@ git -C /path/to/harnish pull # 업데이트 - **harnish** = harness + ish (자율 구현 엔진) - impl 내부의 ralph 루프는 심슨 가족의 캐릭터 '랄프 위검'에서 따왔다 — 포기하지 않고 끈질기게 시도한다는 의미 - **drafti** = draft + i (PRD 생성 — drafti-feature + drafti-architect) -- **forki** = fork + i (의사결정 강제 — 2지선택 + D/E/V/R + trade-off, HITL 전용) +- **forki** = fork + i (의사결정 강제) — **[galmuri](https://github.com/jazz1x/galmuri)로 이전** - **ralphi** = ralph + i (점검) — **[galmuri](https://github.com/jazz1x/galmuri)로 이전** ## Triad diff --git a/README.md b/README.md index 9be1630..0918385 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > Claude Code plugin — autonomous implementation engine -![version](https://img.shields.io/badge/version-0.3.0-blue) +![version](https://img.shields.io/badge/version-0.4.0-blue) ![license](https://img.shields.io/badge/license-MIT-green) ![claude-code](https://img.shields.io/badge/claude--code-plugin-purple) ![tests](https://img.shields.io/badge/tests-145%20passing-brightgreen) @@ -16,18 +16,17 @@ | Skill | Command | Role | |-------|---------|------| -| **forki** | `/harnish:forki` | Decision forcing (binary fork + D/E/V/R + trade-off, HITL only) | | **drafti-feature** | `/harnish:drafti-feature` | Planning-based implementation spec PRD | | **drafti-architect** | `/harnish:drafti-architect` | Tech-driven design PRD generation | | **impl** | `/harnish:impl` | Autonomous implementation engine — the "harnish" engine (seeding + ralph loop + anchoring + experience) | -> **Inspection moved**: `ralphi` has graduated to the sibling plugin **galmuri** (`galmuri:ralphi`). harnish now calls it cross-plugin in its post-Done step. +> **Decision & inspection moved**: `forki` (`galmuri:forki`) and `ralphi` (`galmuri:ralphi`) have graduated to the sibling plugin **galmuri**. harnish now calls them cross-plugin where needed. Each skill operates in an **independent orbit**, connected only through **shared artifacts (files)**. ``` -forki ──→ forces a binary decision (D/E/V/R + trade-off, HITL only) - ↓ +galmuri:forki ──→ forces a binary decision (sibling plugin, pre-PRD) + ↓ drafti ──→ docs/prd-*.md ──→ harnish ──→ implementation code │ └── .harnish/ (work coordinates + experience, in user project CWD) @@ -57,7 +56,7 @@ npx skills add jazz1x/harnish --skill impl # install a single skill Expected output: ``` -✓ Installed jazz1x/harnish — 4 skills (forki, drafti-feature, drafti-architect, impl) +✓ Installed jazz1x/harnish — 3 skills (drafti-feature, drafti-architect, impl) ``` ### Option 2 — Claude Code native plugin @@ -72,13 +71,12 @@ Inside a Claude Code session: Expected output: ``` -✓ Installed harnish@0.3.0 — 4 skills registered (forki, drafti-feature, drafti-architect, impl) +✓ Installed harnish@0.4.0 — 3 skills registered (drafti-feature, drafti-architect, impl) ``` -Verify with `/plugin list`. The four slash commands below should be invocable: +Verify with `/plugin list`. The three slash commands below should be invocable: ``` -/harnish:forki /harnish:drafti-feature /harnish:drafti-architect /harnish:impl @@ -126,18 +124,7 @@ In a new session, simply say "continue where I left off" — harnish restores co ## Usage -### 0. Decision Forcing (forki) - -``` -User: /harnish:forki -→ "What decision do you need to make? Describe the situation." - -User: "Should we use Postgres or MongoDB for this?" -→ forki frames as binary → asks user to confirm A/B -→ asks user to fill the D/E/V/R table (8 cells) -→ surfaces trade-off → asks user to commit (LLM cannot decide) -→ outputs the structural reason for the choice -``` +> Decision forcing has moved to `galmuri:forki` (install [galmuri](https://github.com/jazz1x/galmuri)). Use it pre-PRD when a binary fork needs to be surfaced. ### 1. PRD Generation (Design) @@ -234,7 +221,7 @@ Every accumulated learning is recorded in `.harnish/harnish-assets.jsonl` (one J | `pattern` | User says "remember this pattern" or recurring success structure detected | | `guardrail` | A rule emerges from repeated failures (e.g. "always retry with backoff on 503") | | `snippet` | Reusable code fragment worth quoting verbatim | -| `decision` | A forki output worth carrying forward | +| `decision` | A `galmuri:forki` output worth carrying forward | | `compressed` | Multiple related assets merged into one summary (auto-suggested at threshold) | Inspect / manage assets: @@ -268,10 +255,10 @@ Three ways to use this repo as a base: ```bash mkdir -p .claude/skills -cp -r /path/to/harnish/skills/forki .claude/skills/ +cp -r /path/to/harnish/skills/impl .claude/skills/ ``` -The skill is available as `forki` (no plugin namespace). Replace `forki` with any of: `impl`, `drafti-feature`, `drafti-architect`. +The skill is available as `impl` (no plugin namespace). Replace `impl` with any of: `drafti-feature`, `drafti-architect`. ### B. Fork as your own plugin marketplace @@ -299,7 +286,7 @@ git -C /path/to/harnish pull # update later - **harnish** = harness + ish (autonomous implementation engine) - The ralph loop inside impl is named after Ralph Wiggum from The Simpsons — keep trying, don't give up - **drafti** = draft + i (PRD generation — drafti-feature + drafti-architect) -- **forki** = fork + i (decision forcing — binary fork + D/E/V/R + trade-off, HITL only) +- **forki** = fork + i (decision forcing) — **moved to [galmuri](https://github.com/jazz1x/galmuri)** - **ralphi** = ralph + i (inspection) — **moved to [galmuri](https://github.com/jazz1x/galmuri)** ## Triad diff --git a/VERSION b/VERSION index 0d91a54..1d0ba9e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.3.0 +0.4.0 diff --git a/VERSIONING.md b/VERSIONING.md index 5527ac7..74f18ef 100644 --- a/VERSIONING.md +++ b/VERSIONING.md @@ -38,7 +38,6 @@ harnish/ └── skills/ ├── drafti-architect/SKILL.md ← frontmatter version: X.Y.Z ├── drafti-feature/SKILL.md ← frontmatter version: X.Y.Z - ├── forki/SKILL.md ← frontmatter version: X.Y.Z └── impl/SKILL.md ← frontmatter version: X.Y.Z ``` diff --git a/scripts/test-all.sh b/scripts/test-all.sh index 6b1bd78..a72040b 100755 --- a/scripts/test-all.sh +++ b/scripts/test-all.sh @@ -1040,7 +1040,7 @@ echo "${BOLD}[SKILL version 일관성]${NC}" EXPECTED_V=$(jq -r .version "$HARNISH_ROOT/.claude-plugin/plugin.json" 2>/dev/null || echo missing) VERSION_OK=true -for skill in impl forki drafti-architect drafti-feature; do +for skill in impl drafti-architect drafti-feature; do for ext in md ko.md; do V=$(awk '/^version:/ {print $2; exit}' "$HARNISH_ROOT/skills/$skill/SKILL.$ext" 2>/dev/null || echo "missing") if [[ "$V" != "$EXPECTED_V" ]]; then @@ -1050,7 +1050,7 @@ for skill in impl forki drafti-architect drafti-feature; do done done if $VERSION_OK; then - pass "4개 SKILL × (md + ko.md) frontmatter version == $EXPECTED_V" + pass "3개 SKILL × (md + ko.md) frontmatter version == $EXPECTED_V" fi # ════════════════════════════════════════ diff --git a/skills/drafti-architect/SKILL.ko.md b/skills/drafti-architect/SKILL.ko.md index 77199f9..8b9ccb8 100644 --- a/skills/drafti-architect/SKILL.ko.md +++ b/skills/drafti-architect/SKILL.ko.md @@ -1,6 +1,6 @@ --- name: drafti-architect -version: 0.3.0 +version: 0.4.0 description: > 기술 설계 PRD 생성기. 기획 문서 없이 기술 문제 정의만으로 구현 가능한 PRD를 생성한다. 트리거: "drafti-architect", "drafti", "drafti 설계", "설계해", "아키텍처 PRD", diff --git a/skills/drafti-architect/SKILL.md b/skills/drafti-architect/SKILL.md index 2aa0580..6dbb71c 100644 --- a/skills/drafti-architect/SKILL.md +++ b/skills/drafti-architect/SKILL.md @@ -1,6 +1,6 @@ --- name: drafti-architect -version: 0.3.0 +version: 0.4.0 description: > Technical design PRD generator. Creates an implementation-ready PRD from a technical problem definition alone, without a planning document. Triggers: "drafti-architect", "drafti", "drafti 설계", "설계해", "design this", "아키텍처 PRD", "architecture PRD", diff --git a/skills/drafti-feature/SKILL.ko.md b/skills/drafti-feature/SKILL.ko.md index 1a5f1a8..ba60bdb 100644 --- a/skills/drafti-feature/SKILL.ko.md +++ b/skills/drafti-feature/SKILL.ko.md @@ -1,6 +1,6 @@ --- name: drafti-feature -version: 0.3.0 +version: 0.4.0 description: > 기획 기반 구현 명세 PRD 생성기. 기획 요구사항을 구현 가능한 명세로 변환한다. 트리거: "drafti-feature", "drafti", "drafti 피쳐", "이 기획서로 PRD 만들어", "피쳐 PRD", diff --git a/skills/drafti-feature/SKILL.md b/skills/drafti-feature/SKILL.md index bd5d56a..a3fe452 100644 --- a/skills/drafti-feature/SKILL.md +++ b/skills/drafti-feature/SKILL.md @@ -1,6 +1,6 @@ --- name: drafti-feature -version: 0.3.0 +version: 0.4.0 description: > Planning-based implementation spec PRD generator. Converts planning requirements into an implementation-ready spec. Triggers: "drafti-feature", "drafti", "drafti 피쳐", "이 기획서로 PRD 만들어", "create PRD from this planning doc", diff --git a/skills/forki/SKILL.ko.md b/skills/forki/SKILL.ko.md deleted file mode 100644 index b5ae4c9..0000000 --- a/skills/forki/SKILL.ko.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -name: forki -version: 0.3.0 -description: > - 의사결정 강제 스킬. 문제를 역할 분해(Decision/Execution/Validation/Recovery)로 - 2지선택으로 환원, trade-off를 드러내고 단일 선택을 강제. - 트리거: "forki", "결정", "선택", "어느 쪽", "두 길", "갈피", "trade-off", "둘 중 뭐", - "이전에 결정한", "다시 결정", "결정 기록", - "decide", "decision", "choose between", "fork", "torn between", - "past decision", "decided before", "record decision". - 스코프: 모든 도메인. PRD 이전, 구현 이전. -ssl: - logical: - writes: ["/tmp/forki-{ts}.md", ".harnish/assets/decision-{date}.jsonl"] - idempotent: true - rollback: "Step 8 is opt-out (append-only); Step 6 verdict stands regardless" ---- - -# forki — 의사결정 강제 - -패턴: **2지선택 → 역할 분해 → trade-off → 강제 선택**. -설명 스킬이 아니라 **결정 스킬**. - -## 모드 — HITL 전용 - -| 분류 | Steps | LLM 권한 | -|---|---|---| -| Auto query | 0 (조회) | 전권 | -| Flow gate | 0 (분기) | 없음 — `trust` / `reopen` | -| Verdict gate | 1, 3, 6 | 없음 — 사용자가 진술 | -| Confirmation gate | 2, 5 | 제안만 | -| Scaffold (생략 가능) | 4, 7 | 제안, 사용자 `skip` | -| Side effect (opt-out) | 8 | `y` / `n` | - -LLM은 제안, 사용자가 다음 단계 전 확인. 자율 모드 없음. - -> **Bash 컨벤션**: 각 Bash 호출은 새 subshell. 이 스킬의 모든 bash 블록 (`SKILL.md`와 `references/` 양쪽)이 자기 안에서 `HARNISH_ROOT="${CLAUDE_PLUGIN_ROOT}"`를 인라인 선언. - -## References (한 번 로드, 재사용) - -| 파일 | 첫 로드 시점 | 용도 | -|---|---|---| -| `references/protocol.md` | Step 1 (첫 HITL) | 모든 HITL 프롬프트, 응답 규칙 파싱, 보고 템플릿 | -| `references/asset.md` | Step 0 진입, 또는 Step 0 생략 시 Step 8 진입 | `.harnish/` query/record bash 블록 | - -각 reference는 **forki 호출당 최대 1회** 로드되며 이후 모든 step에서 재사용. 전체 read/write 목록은 아래 **Context Budget** 참조. - -## Step 0: 과거 결정 조회 (선택) - -→ `references/asset.md`를 로드하고 거기 문서화된 Step 0 query 블록을 **실행**한다. 전체 분기 로직 (`trust` / `reopen` / `.harnish/` 부재 시 생략 / 매칭 없을 시 생략)은 `asset.md`에 산다. - -## Step 1: 2지선택 - -정확히 **2개**. 3개 이상 → "A 한다 vs 그 외 전부"로 압축. "상황에 따라" → 사용자에게 제약을 묻는다. - -→ `references/protocol.md`의 **Step 1 prompt**로 HITL. 명시적 확인 대기. 출력: `A vs B`, 한 줄. - -## Step 2: 한 줄 환원 - -한 문장으로 압축: *"누가 X를 실행하는가?"* / *"누가 X를 책임지는가?"* / *"X가 일어나면 무엇이 변하는가?"* - -→ `references/protocol.md`의 **Step 2 prompt**로 HITL. 거부 → 대안 제안. 또 거부 → Step 1로 (2지선택 자체가 잘못됨). - -## Step 3: 역할 분해 (D/E/V/R) - -**진입 시** 첫 줄에 출력: `Step 3 attempt {n}/3`. -`{n}`은 첫 Step 3 진입 시 1, Step 5/6/7에서 back-jump마다 +1. `attempt 3/3`이면 **마지막** 허용 진입 (back-jump 2회 한도). 이 상태에서 또 back-jump하려고 하면 → 종료: *"forki could not converge after 2 back-jumps. forki 밖의 추가 컨텍스트가 필요합니다."* - -각 옵션에 대해 4가지 역할 모두 채움: - -| 역할 | 질문 | -|---|---| -| Decision | 누가 판단? | -| Execution | 누가 실행? | -| Validation | 누가 검증? | -| Recovery | 누가 복구? | - -→ `references/protocol.md`의 **Step 3 prompt**로 HITL. LLM 초안 제안 가능, 사용자가 모든 칸 확인/덮어쓰기. 빈 `?` → 빈 칸만 다시 묻기. - -## Step 4: 3가지 예시 (scaffold) - -→ `references/protocol.md`의 **Step 4 prompt**로 HITL. 너무 구체적이거나 사용자가 `skip`이면 생략. 보고에 생략 사실 기록. - -## Step 5: Trade-off - -``` -A: gains {X}, loses {Y} -B: gains {Y}, loses {X} -``` - -축: 유연성↔안정성, 속도↔안전, 자율↔통제. - -→ `references/protocol.md`의 **Step 5 prompt**로 HITL. -- "X는 신경 안 써" → 그 축 지우고 새로 제안 (Step 5 내). -- 두 옵션이 같은 걸 얻거나 잃으면 → 진짜 trade-off 아님 → Step 3로 back-jump. - -## Step 6: 강제 선택 - -> **선택**: Option {A|B}. 이유: {구조적 이유 한 줄}. - -→ `references/protocol.md`의 **Step 6 prompt**로 HITL. LLM은 사용자 대신 답할 수 **없고**, 선호를 시사할 수도 **없다**. *"네가 골라"* → 답: *"forki는 너 대신 결정할 수 없습니다."* - -진짜 못 고르면 → Step 3로 back-jump. - -## Step 7: 이해 검증 (scaffold) - -→ `references/protocol.md`의 **Step 7 prompt**로 HITL. 3개 다 못 답하면 → Step 3로 back-jump. `skip`이면 생략. - -## Step 8: Decision 자산 기록 (부수효과, opt-out) - -**Trigger**: Step 6에서 verdict가 나온 후에만 (Step 7도 생략 안 됐으면 그 후) 실행. 더 이른 step에서 forki가 abort하면 (counter 3/3, 사용자 `Stop`, Step 0 `trust` 재사용 등) Step 8은 **실행되지 않음**. - -→ `references/asset.md` 로드해서 sub-step 8.0 / 8.1 / 8.2 (pre-check, HITL, 작성+기록) 사용. - -부수효과지 게이트 아님: Step 6 verdict는 Step 8 결과와 무관하게 유효. - -## Context Budget - -forki는 **사고** 스킬이지 읽기 스킬이 아니다. - -Reference 로드: 위의 **References** 섹션 참조 (단일 출처). - -파일시스템 I/O: - -| 동작 | 시점 | -|---|---| -| `.harnish/assets/*.jsonl` 읽기 (태그 필터) | Step 0만. 디렉토리 없으면 생략. | -| `/tmp/forki-{ts}.md` 작성 | Step 8 sub-step 8.2만, `y` 확인 후. | -| `.harnish/assets/decision-{date}.jsonl` append (1줄) | Step 8 sub-step 8.2만. | - -최대 2개 reference 동시 컨텍스트 (`protocol.md` + `asset.md`). - -## 금지 - -- Step 1에서 2개 초과 옵션 -- verdict gate (Step 1, 3, 6) 어느 것이라도 건너뛰기 -- Step 4 / 7을 게이트로 취급 -- Step 6에서 LLM이 최종 선택 -- `응` / `ok` / `yes`를 확정으로 해석. 항상 재질문. -- 침묵 위에 진행 -- `둘 다` / `상황에 따라` / `나중에` 최종 선택 -- 결정 전 "정보 더" 파일 읽기 (사용자 명시 요청 없는 한) -- 두 옵션이 같은 걸 얻거나 잃는 trade-off -- forki가 `.harnish/` 초기화 -- 사용자 `n`인데 자산 기록. opt-out 존중. -- HITL 프롬프트나 보고 템플릿을 이 파일에 인라인 — `references/protocol.md`에 산다 -- "참고로..." 식 보충 정보 -- 장황한 결정 보고 diff --git a/skills/forki/SKILL.md b/skills/forki/SKILL.md deleted file mode 100644 index 4c83c26..0000000 --- a/skills/forki/SKILL.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -name: forki -version: 0.3.0 -description: > - Decision-forcing skill. Reduces a problem to a binary fork via role decomposition - (Decision / Execution / Validation / Recovery), surfaces trade-offs, forces a single choice. - Triggers: "forki", "결정", "선택", "어느 쪽", "두 길", "갈피", "trade-off", "둘 중 뭐", - "이전에 결정한", "다시 결정", "결정 기록", - "decide", "decision", "choose between", "fork", "torn between", - "past decision", "decided before", "record decision". - Scope: any domain. Pre-PRD, pre-implementation. -ssl: - logical: - writes: ["/tmp/forki-{ts}.md", ".harnish/assets/decision-{date}.jsonl"] - idempotent: true - rollback: "Step 8 is opt-out (append-only); Step 6 verdict stands regardless" ---- - -# forki — Decision Forcing - -Pattern: **binary → roles → trade-off → forced choice**. -This is a decision skill, not an explanation skill. - -## Entry Check - -If invoked with no context (no decision topic, no problem description): -→ Ask: "어떤 결정이 필요한가요? 고민 중인 상황을 설명해주세요." -→ Wait for user response before proceeding to Step 0. - -## Mode — HITL only - -| Category | Steps | LLM authority | -|---|---|---| -| Auto query | 0 (query) | Full | -| Flow gate | 0 (decision) | None — `trust` / `reopen` | -| Verdict gate | 1, 3, 6 | None — user states it | -| Confirmation gate | 2, 5 | Propose only | -| Scaffold (skippable) | 4, 7 | Propose, user `skip` | -| Side effect (opt-out) | 8 | `y` / `n` | - -LLM proposes; user confirms before next step. No autonomous mode. - -> **Bash convention**: each Bash invocation is a fresh subshell. Every bash block in this skill (across `SKILL.md` and `references/`) re-declares `HARNISH_ROOT="${CLAUDE_PLUGIN_ROOT}"` inline. - -## References (load once, reuse) - -| File | First loaded at | Used for | -|---|---|---| -| `references/protocol.md` | Step 1 (first HITL) | All HITL prompts, response rule parsing, report templates | -| `references/asset.md` | Step 0 entry, or Step 8 entry if Step 0 was skipped | Bash query/record blocks for `.harnish/` | - -Each reference is loaded **at most once per forki invocation** and reused across all subsequent steps. See **Context Budget** below for the exhaustive read/write inventory. - -## Step 0: Past-Decision Query (optional) - -→ Load `references/asset.md` and **execute** the Step 0 query block as documented there. The full branching logic (`trust` / `reopen` / skip on absent / skip on no match) lives in `asset.md`. - -## Step 1: Binary - -Exactly **2 options**. 3+ → collapse to "do A vs everything else". "It depends" → ask user to constrain. - -→ HITL via **Step 1 prompt** in `references/protocol.md`. Wait for explicit confirmation. Output: `A vs B`, one line. - -## Step 2: One-Line Reduction - -Compress to one sentence: *"Who executes X?"* / *"Who owns X?"* / *"What changes when X?"* - -→ HITL via **Step 2 prompt** in `references/protocol.md`. Reject → propose alternative. Reject again → back to Step 1 (binary is wrong). - -## Step 3: Role Decomposition (D/E/V/R) - -**On entry**, output first line: `Step 3 attempt {n}/3`. -`{n}` starts at 1 on first Step 3 entry; +1 on each back-jump from Step 5/6/7. On `attempt 3/3`, this is the **last** allowed run (2 back-jumps total). If forki would back-jump to Step 3 again from this attempt, abort instead: *"forki could not converge after 2 back-jumps. Gather more context outside this skill."* - -Fill all 4 roles per option: - -| Role | Question | -|---|---| -| Decision | Who judges? | -| Execution | Who acts? | -| Validation | Who verifies? | -| Recovery | Who fixes when broken? | - -→ HITL via **Step 3 prompt** in `references/protocol.md`. LLM may draft; user confirms or overrides each cell. Empty `?` → re-ask only those cells. - -## Step 4: Three Examples (scaffold) - -→ HITL via **Step 4 prompt** in `references/protocol.md`. Skip when concrete enough or user says `skip`. Record skip in report. - -## Step 5: Trade-off - -``` -A: gains {X}, loses {Y} -B: gains {Y}, loses {X} -``` - -Axes: flexibility↔stability, speed↔safety, autonomy↔control. - -→ HITL via **Step 5 prompt** in `references/protocol.md`. -- User says "don't care about X" → strike axis, propose new (stay in Step 5). -- Both options gain/lose the same → not real trade-off → back-jump to Step 3. - -## Step 6: Forced Choice - -> **Choice**: Option {A|B}. Reason: {one structural reason}. - -→ HITL via **Step 6 prompt** in `references/protocol.md`. LLM **must not** answer for the user, **must not** signal a preference. *"You choose"* → reply: *"forki cannot decide for you."* - -User truly cannot choose → back-jump to Step 3. - -## Step 7: Comprehension Check (scaffold) - -→ HITL via **Step 7 prompt** in `references/protocol.md`. Cannot answer all 3 → back-jump to Step 3. Skip on `skip`. - -## Step 8: Record as Decision Asset (side effect, opt-out) - -**Trigger**: runs only after Step 6 reaches a verdict (and Step 7 if not skipped). If forki aborts at any earlier step (counter 3/3, user `Stop`, Step 0 `trust` reuse, etc.), Step 8 does **not** run. - -→ Load `references/asset.md` for sub-steps 8.0 / 8.1 / 8.2 (pre-check, HITL, write+record). - -Side effect, not gate: the Step 6 verdict stands regardless of Step 8 outcome. - -## Context Budget - -forki is a **thinking** skill, not a reading skill. - -Reference loading: see **References** section above (single source of truth). - -Filesystem I/O: - -| Operation | When | -|---|---| -| Read `.harnish/assets/*.jsonl` (tag-filtered) | Step 0 only. Skip if directory absent. | -| Write `/tmp/forki-{ts}.md` | Step 8 sub-step 8.2 only, after `y` confirmation. | -| Append `.harnish/assets/decision-{date}.jsonl` (1 line) | Step 8 sub-step 8.2 only. | - -Maximum 2 references in context simultaneously (`protocol.md` + `asset.md`). - -## Prohibited - -- More than 2 options in Step 1 -- Skipping any verdict gate (Steps 1, 3, 6) -- Treating Steps 4 / 7 as gates -- LLM picking the final choice in Step 6 -- Interpreting `yes` / `ok` / `응` as confirmation. Always re-ask. -- Proceeding on silence -- `Both` / `depends` / `later` as final choice -- Reading files to "gather more info" (without explicit user request) -- Trade-offs where both options gain / lose the same thing -- Initializing `.harnish/` from forki -- Recording an asset on user `n`. Honor opt-out. -- Inlining HITL prompts or report templates in this file — they live in `references/protocol.md` -- "FYI..." style supplementary information -- Verbose decision reports diff --git a/skills/forki/references/asset.ko.md b/skills/forki/references/asset.ko.md deleted file mode 100644 index e79ce40..0000000 --- a/skills/forki/references/asset.ko.md +++ /dev/null @@ -1,66 +0,0 @@ -# forki — 자산 영구화 (Step 0 + Step 8 상세) - -> `forki/SKILL.md`가 Step 0(과거 결정 조회) 또는 Step 8(자산 기록) 진입 시 로드. - -## Step 0 — 과거 결정 조회 - -```bash -HARNISH_ROOT="${CLAUDE_PLUGIN_ROOT}" -bash "$HARNISH_ROOT/scripts/query-assets.sh" --types decision --tags "{주제}" --format text --base-dir "$(pwd)/.harnish" 2>/dev/null || true -``` - -- `.harnish/`가 없거나 출력이 비어있으면(매칭 없음) 생략. -- 매칭이 있으면 → `references/protocol.md`의 Step 0 HITL 프롬프트로 사용자에게 제시. -- `trust` → forki 종료, **Reused** 보고 템플릿 출력 (`references/protocol.md` 참조). -- `reopen` → 정상적으로 Step 1로 진행. - -## Step 8 — Decision 자산 기록 - -### 8.0 — Pre-check - -CWD에 `.harnish/`가 없으면 → Step 8 전체 생략. 보고 `not-persisted: no .harnish in CWD`. **forki는 `.harnish/`를 초기화하지 않는다.** - -### 8.1 — HITL 프롬프트 (어떤 쓰기 동작보다도 먼저) - -LLM이 기본 태그를 먼저 제안한 후 (kebab-case, binary 주제에서 유도) `references/protocol.md`의 Step 8 프롬프트로 묻는다. - -분기: -- `n` → Step 8 종료, 보고 `skipped (user opt-out)`. **파일 작성 금지.** -- `edit-tags` → 묻기: *"태그? (콤마, kebab-case)"* → 그것 사용. -- `y` → 제안된 기본 태그 사용. - -`y`와 `edit-tags` 두 경우 모두 결과 태그 문자열 = `TAGS` (LLM이 literal 문자열로 보유, shell 변수 아님). - -### 8.2 — body 작성 + 자산 기록 (단일 bash 호출) - -치환 전 LLM이 해야 할 것: -- `TAGS`와 `TITLE`: 안의 `"`, `$`, `` ` ``, `\` 각각 앞에 `\` 추가 (bash 더블쿼트 안에서 안전) -- `BODY_CONTENT`: 어느 라인도 정확히 `FORKI_REPORT_EOF`와 일치하지 않게. 일치하면 그 라인을 다시 생성하여 문자열을 깨뜨림 (예: 두 줄로 분할). heredoc 태그 이름을 바꾸지 **말 것**. - -그 후 **단일** bash 블록 실행: - -```bash -HARNISH_ROOT="${CLAUDE_PLUGIN_ROOT}" -BODY="/tmp/forki-$(date -u +%Y%m%dT%H%M%SZ).md" -cat > "$BODY" <<'FORKI_REPORT_EOF' -{BODY_CONTENT} -FORKI_REPORT_EOF -if bash "$HARNISH_ROOT/scripts/record-asset.sh" --type decision --tags "{TAGS}" --title "{TITLE}" --body-file "$BODY" --base-dir "$(pwd)/.harnish"; then - echo "FORKI_RESULT: recorded" -else - echo "FORKI_RESULT: record-failed (body kept at $BODY)" -fi -``` - -heredoc 태그가 quoted (`'FORKI_REPORT_EOF'`)이므로 `BODY_CONTENT` 안의 `$`나 backtick은 확장되지 않는다. timestamp는 같은 bash 호출 안에서 계산 (사전 치환 단계 없음). - -`FORKI_RESULT:` 줄을 읽고 default 보고의 Asset 섹션에 그대로 기록 (`references/protocol.md` 참조). - -**부수효과지 게이트 아님**: Step 6 verdict는 Step 8 결과와 무관하게 유효. - -## 무엇이 어디에 쓰이는가 - -| 파일 | 포맷 | 목적 | -|---|---|---| -| `/tmp/forki-{ts}.md` | Markdown | 보고 본문 전체, `record-asset.sh --body-file`에 전달 | -| `.harnish/assets/decision-{date}.jsonl` | JSONL (1줄/asset) | 영구 자산 저장소, Step 0가 조회 | diff --git a/skills/forki/references/asset.md b/skills/forki/references/asset.md deleted file mode 100644 index 61a9b8b..0000000 --- a/skills/forki/references/asset.md +++ /dev/null @@ -1,66 +0,0 @@ -# forki — Asset Persistence (Step 0 + Step 8 details) - -> Loaded by `forki/SKILL.md` when entering Step 0 (past-decision query) or Step 8 (record-as-asset). - -## Step 0 — Past-Decision Query - -```bash -HARNISH_ROOT="${CLAUDE_PLUGIN_ROOT}" -bash "$HARNISH_ROOT/scripts/query-assets.sh" --types decision --tags "{topic}" --format text --base-dir "$(pwd)/.harnish" 2>/dev/null || true -``` - -- Skip if `.harnish/` is absent or output is empty (no match). -- If a match exists → present it to the user via the Step 0 HITL prompt (see `references/protocol.md`). -- `trust` → end forki, emit the **Reused** report template (see `references/protocol.md`). -- `reopen` → proceed to Step 1 normally. - -## Step 8 — Record as Decision Asset - -### 8.0 — Pre-check - -`.harnish/` absent in CWD → skip the entire step. Report `not-persisted: no .harnish in CWD`. **Never initialize** `.harnish/` from forki. - -### 8.1 — HITL prompt (must come before any write) - -LLM proposes default tags first (kebab-case, derived from the binary topic), then asks per the Step 8 prompt in `references/protocol.md`. - -Branches: -- `n` → end Step 8, report `skipped (user opt-out)`. **No file written.** -- `edit-tags` → ask: *"What tags? (comma, kebab-case)"* → use those. -- `y` → use the proposed default tags. - -In both `y` and `edit-tags`, the resulting tag string is `TAGS` (LLM holds it as a literal string, not a shell variable). - -### 8.2 — Write body and record (single bash invocation) - -Before substituting placeholders, LLM must: -- `TAGS` and `TITLE`: prepend `\` to each of `"`, `$`, `` ` ``, `\` (safe inside bash double quotes) -- `BODY_CONTENT`: ensure no line equals exactly `FORKI_REPORT_EOF`. If it does, regenerate that line with the string broken (e.g., split across two lines). Do **not** rename the heredoc tag. - -Then run **one** bash block: - -```bash -HARNISH_ROOT="${CLAUDE_PLUGIN_ROOT}" -BODY="/tmp/forki-$(date -u +%Y%m%dT%H%M%SZ).md" -cat > "$BODY" <<'FORKI_REPORT_EOF' -{BODY_CONTENT} -FORKI_REPORT_EOF -if bash "$HARNISH_ROOT/scripts/record-asset.sh" --type decision --tags "{TAGS}" --title "{TITLE}" --body-file "$BODY" --base-dir "$(pwd)/.harnish"; then - echo "FORKI_RESULT: recorded" -else - echo "FORKI_RESULT: record-failed (body kept at $BODY)" -fi -``` - -The heredoc tag is quoted (`'FORKI_REPORT_EOF'`) so `$` and backticks inside `BODY_CONTENT` are not expanded. The timestamp is computed inside the same bash invocation (no precompute). - -Read the `FORKI_RESULT:` line and report accordingly in the Asset section of the default report (see `references/protocol.md`). - -**Side effect, not gate**: the Step 6 verdict stands regardless of Step 8 outcome. - -## What gets written where - -| File | Format | Purpose | -|---|---|---| -| `/tmp/forki-{ts}.md` | Markdown | Full report body, passed to `record-asset.sh --body-file` | -| `.harnish/assets/decision-{date}.jsonl` | JSONL (1 line per asset) | Persistent asset store, queried by Step 0 | diff --git a/skills/forki/references/protocol.ko.md b/skills/forki/references/protocol.ko.md deleted file mode 100644 index 25130d1..0000000 --- a/skills/forki/references/protocol.ko.md +++ /dev/null @@ -1,115 +0,0 @@ -# forki — 프로토콜 (HITL 프롬프트 + 응답 규칙 + 보고 포맷) - -> `forki/SKILL.md`가 HITL 프롬프트 발행, 응답 파싱, 보고 출력 시마다 로드. - -## HITL 프롬프트 (step별) - -### Step 0 prompt — 과거 결정 발견 시 -> *"{날짜}에 결정함: {title}. 다시 열까요, 과거 선택을 신뢰할까요? (reopen / trust)"* - -### Step 1 prompt — 2지선택 확인 -> *"선택을 다음과 같이 읽었습니다: **A) {옵션 A}** vs **B) {옵션 B}**. 확인 또는 정정해주세요."* - -### Step 2 prompt — 환원 확인 -> *"환원된 형태: *{한 문장}*. 진짜 질문 맞나요?"* - -### Step 3 prompt — D/E/V/R 채우기 (8칸) -> "다음 표를 채워주세요. 이름, 시스템, 또는 '아무도 없음'. 빈 칸 금지." -> ``` -> | 역할 | Option A | Option B | -> |-------------|----------|----------| -> | Decision | ? | ? | -> | Execution | ? | ? | -> | Validation | ? | ? | -> | Recovery | ? | ? | -> ``` - -### Step 4 prompt — 예시 (scaffold) -> *"이 D/E/V/R 구조를 공유하는 3가지 사례: 1. {사례}, 2. {사례}, 3. {사례}. 와닿나요, 다른 거? (`skip`이면 건너뜀.)"* - -### Step 5 prompt — Trade-off 확인 -> *"Trade-off 초안: A는 {X} 얻고 {Y} 잃고; B는 {Y} 얻고 {X} 잃음. 너에게 의미 있는 비용 맞나요?"* - -### Step 6 prompt — 강제 선택 (THE 게이트) -> *"표와 trade-off를 보고 **어느 쪽?** A 또는 B로 답하세요. '둘 다', '상황에 따라' 안 됩니다."* - -### Step 7 prompt — 이해 검증 (scaffold) -> *"빠른 확인 (`skip`): 1. {X}는 무엇? 2. A/B 차이? 3. 각 옵션에서 누가 무엇?"* - -### Step 8 prompt — 자산 기록 opt-in -> *"기본 태그: `{tag1},{tag2}`. 이 결정을 자산으로 기록할까요? (y / n / edit-tags)"* - -## 사용자 응답 해석 규칙 - -모든 HITL 프롬프트에 적용. - -**명확 (진행)**: -- `A` / `B` / `Option A` → 적절한 위치에서 선택 또는 확정 -- 표 셀 직접 수정 / 명시적 덮어쓰기 → 그대로 사용 -- `응 근데 X 바꿔` → 변경 적용 후 재확인 - -**모호 (재질문 필수)**: -- `응` / `그래` / `오케이` / `ㅇㅇ` / `Yeah` / `OK` → **확정 아님**. 해당 항목 다시 묻기. -- `둘 다` / `어느 쪽이든` / `상관없어` → Step 6에서 무효. 다시 진술: *"A 또는 B."* -- `상황에 따라` → 묻기: *"어떤 상황?"* — 그게 Step 1 입력. -- `네가 골라` / `알아서 해줘` → 답: *"forki는 너 대신 결정할 수 없습니다. A 또는 B를 선택하세요."* -- `몰라` / `I don't know` (Step 3 셀) → 묻기: *"답이 '아무도 없음'인가요, 더 생각해봐야 하나요?"* — `아무도 없음` 또는 이름이 나올 때만 진행. -- 침묵 / 무관한 응답 → 같은 프롬프트 1회 반복. 2번 무시되면 종료: *"forki 일시정지. {항목}에 대한 입장이 생기면 재개하세요."* - -**탈출 (종료)**: -- `그만` / `취소` → `forki aborted at Step {N}`로 종료. -- `다시` → Step 1로 복귀. - -## 보고 포맷 - -### Default -``` -## forki Decision - -### Binary -A: {한 줄} -B: {한 줄} - -### Reduction -{한 문장} - -### Roles -| 역할 | A | B | -|-------------|---|---| -| Decision | {누구} | {누구} | -| Execution | {누구} | {누구} | -| Validation | {누구} | {누구} | -| Recovery | {누구} | {누구} | - -### Examples (해당시) -1. {사례} — {적용} | 2. {사례} — {적용} | 3. {사례} — {적용} - -### Trade-off -A: gains {X}, loses {Y} -B: gains {Y}, loses {X} - -### Choice -**Option {A|B}** — {이유} - -### Comprehension (해당시) -Q1: {답} | Q2: {답} | Q3: {답} - -### Asset -{recorded | skipped (user opt-out) | not-persisted: no .harnish in CWD | record-failed: {짧은 사유}} -``` - -**Scaffold 생략시**: 섹션 본문 → `_skipped_`. - -### Reused (Step 0 → trust) -``` -## forki Decision (reused) -Source: .harnish/assets/decision-{date}.jsonl -Title: {title} | Date: {date} -``` - -### Aborted -``` -## forki Decision (aborted) -At Step {N} — {사유: user stop / 2 ignored prompts / restart / could not converge after 3 back-jumps}. -마지막 확정: {요약} -``` diff --git a/skills/forki/references/protocol.md b/skills/forki/references/protocol.md deleted file mode 100644 index 5e252bc..0000000 --- a/skills/forki/references/protocol.md +++ /dev/null @@ -1,115 +0,0 @@ -# forki — Protocol (HITL Prompts + Response Rules + Report Format) - -> Loaded by `forki/SKILL.md` whenever a HITL prompt is issued or a response is parsed or a report is emitted. - -## HITL Prompts (per step) - -### Step 0 prompt — past-decision found -> *"Decided on {date}: {title}. Re-open, or trust the past choice? (reopen / trust)"* - -### Step 1 prompt — binary confirmation -> *"I'm reading the choice as: **A) {opt A}** vs **B) {opt B}**. Confirm, or correct me."* - -### Step 2 prompt — reduction confirmation -> *"Reduced form: *{one sentence}*. Is this the real question?"* - -### Step 3 prompt — D/E/V/R fill (8 cells) -> "Fill in this table. Use a name, system, or 'nobody'. Empty not allowed." -> ``` -> | Role | Option A | Option B | -> |-------------|----------|----------| -> | Decision | ? | ? | -> | Execution | ? | ? | -> | Validation | ? | ? | -> | Recovery | ? | ? | -> ``` - -### Step 4 prompt — examples (scaffold) -> *"Three example cases that share this D/E/V/R structure: 1. {case}, 2. {case}, 3. {case}. Resonate, or different? (Reply `skip` to skip.)"* - -### Step 5 prompt — trade-off confirmation -> *"Trade-off draft: A gains {X} loses {Y}; B gains {Y} loses {X}. Match what matters?"* - -### Step 6 prompt — forced choice (THE gate) -> *"Based on the table and trade-off, **which one?** Answer A or B. No 'both', no 'depends'."* - -### Step 7 prompt — comprehension check (scaffold) -> *"Quick check (`skip` to skip): 1. What is {X}? 2. Difference between A/B? 3. Who does what under each?"* - -### Step 8 prompt — asset record opt-in -> *"Default tags: `{tag1},{tag2}`. Record this decision as an asset? (y / n / edit-tags)"* - -## User Response Interpretation Rules - -Apply at every HITL prompt. - -**Clear (proceed)**: -- `A` / `B` / `Option A` → use as choice or confirmation as appropriate -- Edited table cells / explicit overrides → use verbatim -- `Yes, but change X to Y` → apply the change, re-confirm - -**Ambiguous (must re-ask)**: -- `Yeah` / `OK` / `Sure` / `ㅇㅇ` / `응` → **not a confirmation**. Re-ask the specific item. -- `Both` / `Either` / `Doesn't matter` → invalid for Step 6. Re-state: *"Pick A or B."* -- `Depends` → ask: *"Depends on what?"* — that constraint becomes a Step 1 input. -- `You choose` / `Up to you` → reply: *"forki cannot decide for you. Pick A or B."* -- `I don't know` / `몰라` (Step 3 cell) → ask: *"Is the answer 'nobody', or do you need to think more?"* — only proceed on `nobody` or a name. -- Silence / unrelated → re-ask once. After 2 ignored prompts, abort: *"forki paused. Resume when you have a position on {item}."* - -**Escape (terminate)**: -- `Stop` / `Cancel` → end with `forki aborted at Step {N}`. -- `Restart` → return to Step 1. - -## Report Format - -### Default -``` -## forki Decision - -### Binary -A: {one-line} -B: {one-line} - -### Reduction -{one sentence} - -### Roles -| Role | A | B | -|-------------|---|---| -| Decision | {who} | {who} | -| Execution | {who} | {who} | -| Validation | {who} | {who} | -| Recovery | {who} | {who} | - -### Examples (when applicable) -1. {case} — {how} | 2. {case} — {how} | 3. {case} — {how} - -### Trade-off -A: gains {X}, loses {Y} -B: gains {Y}, loses {X} - -### Choice -**Option {A|B}** — {reason} - -### Comprehension (when applicable) -Q1: {ans} | Q2: {ans} | Q3: {ans} - -### Asset -{recorded | skipped (user opt-out) | not-persisted: no .harnish in CWD | record-failed: {brief}} -``` - -**Skipped scaffold**: replace the section body with `_skipped_`. - -### Reused (Step 0 → trust) -``` -## forki Decision (reused) -Source: .harnish/assets/decision-{date}.jsonl -Title: {title} | Date: {date} -``` - -### Aborted -``` -## forki Decision (aborted) -At Step {N} — {reason: user stop / 2 ignored prompts / restart / could not converge after 3 back-jumps}. -Last confirmed: {brief} -``` diff --git a/skills/impl/SKILL.ko.md b/skills/impl/SKILL.ko.md index f4fcbee..b563c52 100644 --- a/skills/impl/SKILL.ko.md +++ b/skills/impl/SKILL.ko.md @@ -1,6 +1,6 @@ --- name: impl -version: 0.3.0 +version: 0.4.0 description: > 자율 구현 엔진 ("harnish" 엔진). PRD→태스크 분해, ralph 루프 자율 실행, 세션 간 맥락 유지, 경험 축적. 트리거: "impl", "harnish", "harnish 시작", "harnish 돌려", "harnish 이어서", diff --git a/skills/impl/SKILL.md b/skills/impl/SKILL.md index 8f1bdbe..7ab05ba 100644 --- a/skills/impl/SKILL.md +++ b/skills/impl/SKILL.md @@ -1,6 +1,6 @@ --- name: impl -version: 0.3.0 +version: 0.4.0 description: > Autonomous implementation engine (the "harnish" engine). PRD to task decomposition, ralph loop autonomous execution, cross-session context preservation, experience accumulation. Triggers: "impl", "harnish", "harnish 시작", "harnish 돌려", "harnish 이어서",