Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{
"name": "harnish",
"source": "./",
"description": "자율 구현 엔진. PRD 생성(drafti) → 자율 구현(harnish). 점검(ralphi)은 galmuri로 이관."
"description": "자율 구현 엔진. PRD 생성(drafti) → 자율 구현(harnish). 의사결정(forki)·점검(ralphi)은 galmuri로 이관."
}
]
}
4 changes: 2 additions & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 변경.
Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
35 changes: 11 additions & 24 deletions README.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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 네이티브 플러그인
Expand All @@ -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
Expand Down Expand Up @@ -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 생성 (설계)

Expand Down Expand Up @@ -233,7 +220,7 @@ Stop → promote-pending.sh (dedup) → harnish-assets.jsonl
| `pattern` | 사용자가 "이 패턴 기억해" 라고 했거나 반복 성공 구조 감지 |
| `guardrail` | 반복 실패에서 규칙이 도출됐을 때 (예: "503 시 항상 backoff 재시도") |
| `snippet` | 그대로 인용할 가치가 있는 재사용 코드 조각 |
| `decision` | 이후로 가져갈 만한 forki 결과 |
| `decision` | 이후로 가져갈 만한 `galmuri:forki` 결과 |
| `compressed` | 관련 자산 여러 개를 하나로 머지 (임계치 도달 시 자동 제안) |

자산 조회 / 관리:
Expand Down Expand Up @@ -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. 자체 플러그인 마켓으로 포크

Expand Down Expand Up @@ -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
Expand Down
37 changes: 12 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.3.0
0.4.0
1 change: 0 additions & 1 deletion VERSIONING.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
```

Expand Down
4 changes: 2 additions & 2 deletions scripts/test-all.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

# ════════════════════════════════════════
Expand Down
2 changes: 1 addition & 1 deletion skills/drafti-architect/SKILL.ko.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: drafti-architect
version: 0.3.0
version: 0.4.0
description: >
기술 설계 PRD 생성기. 기획 문서 없이 기술 문제 정의만으로 구현 가능한 PRD를 생성한다.
트리거: "drafti-architect", "drafti", "drafti 설계", "설계해", "아키텍처 PRD",
Expand Down
2 changes: 1 addition & 1 deletion skills/drafti-architect/SKILL.md
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
2 changes: 1 addition & 1 deletion skills/drafti-feature/SKILL.ko.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
name: drafti-feature
version: 0.3.0
version: 0.4.0
description: >
기획 기반 구현 명세 PRD 생성기. 기획 요구사항을 구현 가능한 명세로 변환한다.
트리거: "drafti-feature", "drafti", "drafti 피쳐", "이 기획서로 PRD 만들어", "피쳐 PRD",
Expand Down
2 changes: 1 addition & 1 deletion skills/drafti-feature/SKILL.md
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
Loading
Loading