An open API service indexing awesome lists of open source software.

https://github.com/yesonsys03-web/vibelign

AI coding safety CLI for vibe coding workflows. Checkpoints, undo, anchors, MCP, and secret protection for Claude Code, Cursor, Codex, and OpenCode.
https://github.com/yesonsys03-web/vibelign

ai-coding ai-safety claude-code cli code-safety codex cursor developer-tools mcp python vibe-coding vibelign

Last synced: 2 days ago
JSON representation

AI coding safety CLI for vibe coding workflows. Checkpoints, undo, anchors, MCP, and secret protection for Claude Code, Cursor, Codex, and OpenCode.

Awesome Lists containing this project

README

          


VibeLign Banner


๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ย |ย  ๐Ÿ‡บ๐Ÿ‡ธ English





PyPI
GitHub Release
Python
MIT
AI Tools

---

# ๐ŸŽฎ VibeLign โ€” AI ์ฝ”๋”ฉ์˜ ์•ˆ์ „์žฅ์น˜

VibeLign(`vibelign`)์€ ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ ์ž‘์—…์„ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” AI ์ฝ”๋”ฉ ์•ˆ์ „ **CLI + ๋ฐ์Šคํฌํ†ฑ GUI** ์˜ˆ์š”.
ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ณดํ˜ธ, ์ฒดํฌํฌ์ธํŠธ ์ €์žฅ, ๋˜๋Œ๋ฆฌ๊ธฐ, ์•ต์ปค ๊ด€๋ฆฌ, ์ปค๋ฐ‹ ์ „ ๋น„๋ฐ€์ •๋ณด ์ฐจ๋‹จ์„ ๋„์™€์ค˜์š”.

> **๐Ÿ†• v2.2**: GUI โ†” Rust core ๋‹ค์ด๋ ‰ํŠธ ๋ธŒ๋ฆฌ์ง€(in-process, Python subprocess ์—†์ด ~80ms โ†’ <5ms), ํ†ตํ•ฉ ์—๋Ÿฌ ๋กœ๊ทธ ๋ทฐ + GitHub ์ด์Šˆ ์ž๋™ ๋ณด๊ณ , ์ž๋™ ๋ฐฑ์—… ์‹คํŒจ ๊ฐ€์‹œํ™”. [CHANGELOG](https://github.com/yesonsys03-web/VibeLign/blob/main/CHANGELOG.md) ์ฐธ๊ณ . v1 โ†’ v2 ์‚ฌ์šฉ์ž: [๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ](https://github.com/yesonsys03-web/VibeLign/blob/main/MIGRATION_v1_to_v2.md).

๋ฌธ์„œ: `https://yesonsys03-web.github.io/VibeLign/`
์ €์žฅ์†Œ: `https://github.com/yesonsys03-web/VibeLign`
์ด์Šˆ: `https://github.com/yesonsys03-web/VibeLign/issues`
๋ฆด๋ฆฌ์ฆˆ: `https://github.com/yesonsys03-web/VibeLign/releases`

> ### ์ด๋Ÿฐ ์  ์žˆ๋‚˜์š”?
>
> - AIํ•œํ…Œ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋‹ฌ๋ผ๊ณ  ํ–ˆ๋”๋‹ˆ **ํŒŒ์ผ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ์ผ์–ด์š”**
> - ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ `main.py` ํ•œ ํŒŒ์ผ์— ๋“ค์–ด์žˆ์–ด์š” โ€” **1000์ค„ ๋„˜์Œ, ๊ด€๋ฆฌ ๋ถˆ๊ฐ€๋Šฅ**
> - AI๊ฐ€ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ๊ฑด๋“œ๋ ค์„œ ์ด์ œ ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ๋ผ์š”
> - ๋˜๋Œ๋ฆฌ๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋ฐฉ๋ฒ•์„ ๋ชฐ๋ผ์š”
>
> **์ด๊ฑฐ๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ์–ด์š”!**

**๋ฐ์Šคํฌํ†ฑ ์•ฑ (macOS / Windows)** โ€” [๐Ÿ“ฅ ์ตœ์‹  ๋ฆด๋ฆฌ์ฆˆ ๋‹ค์šด๋กœ๋“œ](https://github.com/yesonsys03-web/VibeLign/releases/latest)

**Mac / Linux (CLI)**
```bash
pip install vibelign
vib start
```

**Windows** (PowerShell, CLI)
```powershell
# 1๋‹จ๊ณ„: uv ์„ค์น˜ โ€” ์ตœ์ดˆ 1ํšŒ, PATH ์ž๋™ ์„ค์ •, ๊ฒฝ๊ณ  ์—†์Œ
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# PowerShell ๊ป๋‹ค ์ผœ๊ณ :
uv tool install vibelign
vib start
```

![ํ€ต ์Šคํƒ€ํŠธ](https://raw.githubusercontent.com/yesonsys03-web/VibeLign/main/assets/quickstart_kr.jpeg)

---

## ๐Ÿค” VibeLign์ด ๋ญ”๊ฐ€์š”?

AI ์ฝ”๋”ฉ ๋„๊ตฌ(Claude Code, Cursor ๋“ฑ)๋Š” ์ฝ”๋“œ๋ฅผ ๋นจ๋ฆฌ ์ž‘์„ฑํ•ด์š”. ํ•˜์ง€๋งŒ **๋ฌธ์ œ**๊ฐ€ ์žˆ์–ด์š”:

| ๋ฌธ์ œ | VibeLign์ด ํ•ด๊ฒฐํ•ด์คŒ |
|------|---------------------|
| ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ `main.py`์— ๋“ค์–ด๊ฐ | AI๊ฐ€ **์•Œ์•„์„œ ์ •๋ฆฌ**ํ•˜๊ฒŒ ํ•จ |
| AI๊ฐ€ ์š”์ฒญํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๊ฑธ ํ•จ | **์ •ํ™•ํ•œ ์ˆ˜์ • ์š”์ฒญ**์„ ๋งŒ๋“ค์–ด์คŒ |
| ์ฝ”๋“œ๊ฐ€ ๋ง๊ฐ€์กŒ๋Š”๋ฐ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Œ | **์„ธ์ด๋ธŒ & ๋˜๋Œ๋ฆฌ๊ธฐ** ๊ธฐ๋Šฅ ์ œ๊ณต |

**์–ด๋–ค AI ๋„๊ตฌ์™€๋„ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์žˆ์–ด์š”**: Claude Code ยท Cursor ยท Codex ยท OpenCode

---

## ๐Ÿ“ ๋”ฑ 3๊ฐ€์ง€๋งŒ ๊ธฐ์–ตํ•˜์„ธ์š”

```
AI๊ฐ€ ์ฝ”๋”ฉํ•˜๊ธฐ ์ „ โ†’ vib checkpoint "์ž‘์—… ์ „" # ์„ธ์ด๋ธŒ
AI๊ฐ€ ๋ง์ณค์–ด โ†’ vib undo # ๋˜๋Œ๋ฆฌ๊ธฐ
๊ดœ์ฐฎ์•„์กŒ์–ด โ†’ vib checkpoint "์™„๋ฃŒ" # ๋‹ค์‹œ ์„ธ์ด๋ธŒ
```

> Git ๋ชฐ๋ผ๋„ ๋ผ์š”. ๊ทธ๋ƒฅ `vib`๋งŒ ์น˜๋ฉด ๋ผ์š”.

---

## ๐Ÿš€ 3๋‹จ๊ณ„๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

**Mac / Linux**
```bash
# 1. ์„ค์น˜
pip install vibelign

# 2. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™
cd my-project

# 3. ์‹œ์ž‘!
vib start
```

**Windows** (PowerShell)
```powershell
# 1. uv ์„ค์น˜ โ€” ์ตœ์ดˆ 1ํšŒ (PATH ์ž๋™ ์„ค์ •, ๊ฒฝ๊ณ  ์—†์Œ)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# PowerShell ๊ป๋‹ค ๋‹ค์‹œ ์ผœ๊ณ :

# 2. vibelign ์„ค์น˜
uv tool install vibelign

# 3. ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ ํ›„ ์‹œ์ž‘!
cd my-project
vib start
```

---

## ๐Ÿ“š ๋ชจ๋“  ๋ช…๋ น์–ด

### ๊ธฐ๋ณธ (๊ผญ ์•Œ์•„๋‘๊ธฐ)

| ๋ช…๋ น์–ด | ํ•˜๋Š” ์ผ |
|--------|---------|
| `vib start` | ์ฒ˜์Œ ํ•œ ๋ฒˆ๋งŒ! ํ”„๋กœ์ ํŠธ ์„ธํŒ… |
| `vib checkpoint "๋ฉ”์‹œ์ง€"` | ์ง€๊ธˆ ์ƒํƒœ ์ €์žฅ (๊ฒŒ์ž„ ์„ธ์ด๋ธŒ์ฒ˜๋Ÿผ) |
| `vib checkpoint` | ์ €์žฅํ•  ๋•Œ ๋ฉ”์‹œ์ง€ ์ž…๋ ฅํ•˜๋ผ๊ณ  ๋œธ |
| `vib undo` | ๋งˆ์ง€๋ง‰ ์„ธ์ด๋ธŒ ์ง€์ ์œผ๋กœ ๋Œ์•„๊ฐ |
| `vib history` | ์„ธ์ด๋ธŒ ๋ชฉ๋ก ๋ณด๊ธฐ |
| `vib backup-db-viewer --json` | Rust ๋ฐฑ์—… DB๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ํ™•์ธ |
| `vib backup-db-maintenance --json` | ๋ฐฑ์—… DB ํŒŒ์ผ ์ •๋ฆฌ ๊ณ„ํš์„ dry-run์œผ๋กœ ํ™•์ธ |
| `vib backup-db-maintenance --apply --json` | DB ํŒŒ์ผ ๋ฐฑ์—… ํ›„ WAL ์ •๋ฆฌ์™€ ์กฐ๊ฑด๋ถ€ DB ์••์ถ• ์‹คํ–‰ |

### AIํ•œํ…Œ ์ฝ”๋”ฉ ์š”์ฒญํ•  ๋•Œ

| ๋ช…๋ น์–ด | ํ•˜๋Š” ์ผ |
|--------|---------|
| `vib patch "๋ฒ„ํŠผ ์ถ”๊ฐ€ํ•ด์ค˜"` | AI์—๊ฒŒ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ• ์ง€ ์•Œ๋ ค์คŒ (ํ•œ๊ตญ์–ด OK!) |
| `vib anchor` | AI๊ฐ€ ์ˆ˜์ •ํ•ด๋„ ๋˜๋Š” ๊ณณ์„ ํ‘œ์‹œํ•ด์คŒ |
| `vib scan` | ํŒŒ์ผ ์ •๋ฆฌ + ์ตœ์‹  ์ƒํƒœ ํ™•์ธ |

### VibeLign patch ๊ทœ์น™

- ๋ณตํ•ฉ ์š”์ฒญ์€ `intent / source / destination / behavior_constraint`๋กœ ๋จผ์ € ๋ถ„ํ•ดํ•œ๋‹ค.
- `์‚ญ์ œ`์™€ `์ด๋™`์ด ๊ฐ™์ด ๋‚˜์˜ค๋ฉด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ„๋ช…ํžˆ ์‚ญ์ œ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๋™ + ๋ณด์กด์œผ๋กœ ๋ณธ๋‹ค.
- `source`์™€ `destination`์€ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ง๊ณ  ์—ญํ• ๋ณ„๋กœ ๋”ฐ๋กœ ํ•ด์„ํ•œ๋‹ค.
- patch contract๋‚˜ codespeak ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํ…Œ์ŠคํŠธ์™€ ๋ฌธ์„œ๋„ ๊ฐ™์ด ๊ฐฑ์‹ ํ•œ๋‹ค.
- ์šฉ์–ด๋Š” ๊ณตํ†ต ๋ฌธ์„œ์™€ glossary ๊ธฐ์ค€์œผ๋กœ ๋งž์ถ˜๋‹ค.

### ํ™•์ธํ•˜๊ณ  ๊ฒ€์ฆํ•  ๋•Œ

| ๋ช…๋ น์–ด | ํ•˜๋Š” ์ผ |
|--------|---------|
| `vib doctor` | ํ”„๋กœ์ ํŠธ ๊ฑด๊ฐ• ์ƒํƒœ ํ™•์ธ |
| `vib explain` | ๋ญ๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€ ์‰ฌ์šด ๋ง๋กœ ์„ค๋ช… |
| `vib guard` | ์ฝ”๋“œ๊ฐ€ ๋ง๊ฐ€์ง€์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ |
| `vib ask ํŒŒ์ผ๋ช….py` | ํŒŒ์ผ์ด ๋ญ˜ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด๋‹ฌ๋ผ๊ณ  ํ•จ |

### ํŒŒ์ผ ๋ณดํ˜ธ

| ๋ช…๋ น์–ด | ํ•˜๋Š” ์ผ |
|--------|---------|
| `vib protect ํŒŒ์ผ๋ช….py` | ์ค‘์š”ํ•œ ํŒŒ์ผ ์ž ๊ธˆ (AI๊ฐ€ ๋ชป ๊ฑด๋“œ๋ฆผ) |
| `vib protect --list` | ์ž ๊ทผ ํŒŒ์ผ ๋ชฉ๋ก ๋ณด๊ธฐ |
| `vib protect --remove ํŒŒ์ผ๋ช….py` | ์ž ๊ธˆ ํ•ด์ œ |
| `vib secrets --staged` | ์ง€๊ธˆ ์ปค๋ฐ‹ํ•  ๋‚ด์šฉ์—์„œ API ํ‚ค, ํ† ํฐ, `.env` ํŒŒ์ผ ์ฐจ๋‹จ |

### ์„ค์ • & ๋‚ด๋ณด๋‚ด๊ธฐ

| ๋ช…๋ น์–ด | ํ•˜๋Š” ์ผ |
|--------|---------|
| `vib config` | API ํ‚ค ์„ค์ • |
| `vib export claude` | Claude Code์šฉ ์„ค์ • ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ |
| `vib export cursor` | Cursor์šฉ ์„ค์ • ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ |
| `vib export opencode` | OpenCode์šฉ ์„ค์ • ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ |

### ๊ธฐํƒ€ ์œ ์šฉํ•œ ๊ฒƒ๋“ค

| ๋ช…๋ น์–ด | ํ•˜๋Š” ์ผ |
|--------|---------|
| `vib watch` | ํŒŒ์ผ ๋ณ€๊ฒฝ ์‹ค์‹œ๊ฐ„ ๊ฐ์‹œ |
| `vib bench` | ์•ต์ปค๊ฐ€ ์–ผ๋งˆ๋‚˜ ํšจ๊ณผ์ ์ธ์ง€ ํ…Œ์ŠคํŠธ |
| `vib manual` | ์ƒ์„ธ ์‚ฌ์šฉ ์„ค๋ช…์„œ ๋ณด๊ธฐ |
| `vib rules` | AI ๊ฐœ๋ฐœ ๊ทœ์น™ ์ „์ฒด ๋ณด๊ธฐ |
| `vib transfer` | AI ๋„๊ตฌ ์ „ํ™˜์šฉ `PROJECT_CONTEXT.md` ์ƒ์„ฑ |
| `vib transfer --handoff` | Session Handoff ๋ธ”๋ก ์ถ”๊ฐ€ โ€” ์ƒˆ AI๊ฐ€ ๋ฐ”๋กœ ์ด์–ด์„œ ์ž‘์—… ๊ฐ€๋Šฅ |
| `vib transfer --handoff --session-summary "์ž‘์—… ์š”์•ฝ" --first-next-action "๋‹ค์Œ ํ•  ์ผ"` | handoff ์š”์•ฝ๊ณผ ๋‹ค์Œ ์ž‘์—…์„ ์ง์ ‘ ์ง€์ • |
| `vib transfer --handoff --dry-run` | ํŒŒ์ผ ์ €์žฅ ์—†์ด handoff ๋‚ด์šฉ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ |
| `vib completion` | ํƒญ ๋ˆ„๋ฅด๋ฉด ์ž๋™์™„์„ฑ๋˜๊ฒŒ ์„ค์ • |
| `vib install` | ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•Œ๋ ค์คŒ |

---

## ๐Ÿ’ก ์ถ”์ฒœํ•˜๋Š” ํ๋ฆ„

```bash
# ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ
vib start

# AI๊ฐ€ ์ฝ”๋”ฉํ•˜๊ธฐ ์ „
vib checkpoint "๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์ „"
vib doctor --strict
vib patch "๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ๋งŒ๋“ค์–ด์ค˜"

# AI๊ฐ€ ์ฝ”๋”ฉํ•œ ํ›„
vib explain --write-report
vib guard --strict --write-report

# ๋‹ค ๋์œผ๋ฉด
vib checkpoint "๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์™„์„ฑ!"

# ์‹ค์ˆ˜ํ–ˆ์œผ๋ฉด
vib undo

# ํ† ํฐ ํ•œ๋„ ๋„๋‹ฌ ๋˜๋Š” AI ํˆด ์ „ํ™˜ ์ „์—
vib transfer --handoff # Session Handoff ๋ธ”๋ก ์ƒ์„ฑ
vib transfer --handoff --no-prompt --print # ์ž๋™ ์ƒ์„ฑ + ์ฝ˜์†” ์ถœ๋ ฅ
vib transfer --handoff --session-summary "ํ˜„์žฌ ์„ธ์…˜ ์ž‘์—…" --first-next-action "ํ…Œ์ŠคํŠธ ์žฌ์‹คํ–‰"
vib transfer --handoff --dry-run # ์ €์žฅ ์ „ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ
# ์ƒˆ AI์—๊ฒŒ: "PROJECT_CONTEXT.md ์ƒ๋‹จ์˜ Session Handoff ๋ธ”๋ก ๋จผ์ € ์ฝ์–ด์ค˜"
```

`transfer` ํ˜ธํ™˜์„ฑ: `--handoff`๋Š” `--compact` ๋˜๋Š” `--full`๊ณผ ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ `vib start`๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Git ์ €์žฅ์†Œ์—์„œ๋Š” ๋น„๋ฐ€์ •๋ณด ์ปค๋ฐ‹ ๋ณดํ˜ธ๋„ ์ž๋™์œผ๋กœ ์ผœ์ ธ์š”.
์ปค๋ฐ‹ ์ „์— ์ง€๊ธˆ ์˜ฌ๋ฆฌ๋ ค๋Š” ๋‚ด์šฉ์—์„œ API ํ‚ค, ํ† ํฐ, ๊ฐœ์ธํ‚ค, `.env` ๊ฐ™์€ ๋น„๋ฐ€์ •๋ณด ํŒŒ์ผ์„ ๊ฒ€์‚ฌํ•ด์„œ ์‹ค์ˆ˜ ์—…๋กœ๋“œ๋ฅผ ๋ง‰์•„์ค˜์š”.

```bash
# ํ•„์š”ํ•˜๋ฉด ์ˆ˜๋™ ๊ฒ€์‚ฌ๋„ ๊ฐ€๋Šฅ
vib secrets --staged
```

---

## ๐Ÿ”ง ์„ค์น˜ ๋ฐฉ๋ฒ•

### ๋ฐฉ๋ฒ• 1: uv (์ถ”์ฒœ, ๋น ๋ฆ„)
```bash
uv tool install vibelign
```

> **์„ค์น˜ ํ›„ "is not on your PATH" ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๋ฉด:**
> ```bash
> uv tool update-shell
> ```
> ๊ทธ ๋‹ค์Œ ํ„ฐ๋ฏธ๋„ ๊ป๋‹ค ๋‹ค์‹œ ์ผœ๋ฉด `vib` ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์š”.
> **bash ์‰˜**์„ ์“ด๋‹ค๋ฉด bash ์•ˆ์—์„œ `uv tool update-shell`์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜:
> ```bash
> echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc && source ~/.bashrc
> ```

### ๋ฐฉ๋ฒ• 2: pip
```bash
pip install vibelign
```

์„ค์น˜ํ•˜๋ฉด `vib`๋ž‘ `vibelign` ๋‘˜ ๋‹ค ์“ธ ์ˆ˜ ์žˆ์–ด์š”.

### ๋ฐฉ๋ฒ• 3: ๋ฐ์Šคํฌํ†ฑ ์•ฑ (GUI)

์ตœ์‹  `.dmg` (macOS, Apple Silicon) ๋˜๋Š” `.exe` / `.msi` (Windows) ๋ฅผ
[Releases ํŽ˜์ด์ง€](https://github.com/yesonsys03-web/VibeLign/releases/latest) ์—์„œ ๋ฐ›์œผ์„ธ์š”.
GUI ์—๋Š” `vib` ๋Ÿฐํƒ€์ž„์ด ํ•จ๊ป˜ ๋ฒˆ๋“ค๋ง ๋˜์–ด ์žˆ์–ด์„œ ๋ณ„๋„์˜ CLI ์„ค์น˜๊ฐ€ ํ•„์š” ์—†์–ด์š”.

> macOS ์ฒซ ์‹คํ–‰ ์‹œ "์•ฑ์ด ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค" ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ `xattr -rc vibelign-gui.app` ์‹คํ–‰
> (Apple ๊ณต์ฆ(notarization) ์—†์ด ๋ฐฐํฌ๋œ ad-hoc ์„œ๋ช…์ด๋ผ ์ •์ƒ์ ์ธ Gatekeeper ๊ฒฝ๊ณ ์˜ˆ์š”).

### Windows โ€” pip์œผ๋กœ ์„ค์น˜ ํ›„ `vib`๊ฐ€ ์•ˆ ๋  ๋•Œ

pip์œผ๋กœ ์„ค์น˜ํ•˜๋ฉด `vib.exe`๊ฐ€ Python `Scripts` ํด๋”์— ๋“ค์–ด๊ฐ€๋Š”๋ฐ, ์ด ํด๋”๊ฐ€ PATH์— ์—†์œผ๋ฉด `vib` ๋ช…๋ น์–ด๋ฅผ ์ธ์‹ ๋ชปํ•ด์š”.
์„ค์น˜ํ•  ๋•Œ ๋œจ๋Š” ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๊ฒฝ๋กœ๊ฐ€ ์ •ํ™•ํžˆ ๋‚˜์™€ ์žˆ์–ด์š”:

```
WARNING: The scripts vib.exe ... are installed in 'C:\Users\...\Scripts' which is not on PATH.
```

**์ˆ˜๋™์œผ๋กœ PATH ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•:**
1. `Win + R` โ†’ `sysdm.cpl` ์ž…๋ ฅ โ†’ ์—”ํ„ฐ
2. **๊ณ ๊ธ‰** ํƒญ โ†’ **ํ™˜๊ฒฝ ๋ณ€์ˆ˜**
3. **์‹œ์Šคํ…œ ๋ณ€์ˆ˜**์˜ `Path` โ†’ **ํŽธ์ง‘**
4. **์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ** ํด๋ฆญ ํ›„ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€์— ๋‚˜์˜จ `Scripts` ๊ฒฝ๋กœ ๋ถ™์—ฌ๋„ฃ๊ธฐ
- ์˜ˆ: `C:\Users\์‚ฌ์šฉ์ž์ด๋ฆ„\AppData\Local\Programs\Python\Python312\Scripts\`
5. ํ™•์ธ โ†’ PowerShell ์™„์ „ํžˆ ๊ป๋‹ค ๋‹ค์‹œ ์ผœ๊ธฐ

> **ํŒ:** `uv tool install vibelign`์„ ์“ฐ๋ฉด ์ด ๊ณผ์ •์ด ํ•„์š” ์—†์–ด์š” โ€” PATH ์ž๋™ ์„ค์ •.

---

## ๐Ÿ“– ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ์‹ถ์œผ๋ฉด

```bash
vib manual # ์ƒ์„ธ ์‚ฌ์šฉ ์„ค๋ช…์„œ
vib manual rules # AI ๊ฐœ๋ฐœ ๊ทœ์น™๋งŒ ๋ณด๊ธฐ
vib rules # rules๋ž‘ ๊ฐ™์Œ
```

---

## ๐ŸŽฏ ์šฐ๋ฆฌ ์•ฝ์†

> *"AI ์ฝ”๋”ฉ์€ ๋น ๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ์•ˆ์ „์žฅ์น˜ ์—†์œผ๋ฉด ๋งŒ๋“  ๊ฑธ ๋‹ค ๋‚ ๋ฆด ์ˆ˜ ์žˆ๋‹ค."*

VibeLign์ด ๋ณด์žฅํ•˜๋Š” ๊ฒƒ:
- โœ… 1์ดˆ ๋งŒ์— ์„ธ์ด๋ธŒ (`vib checkpoint "์„ค๋ช…"`)
- โœ… 1์ดˆ ๋งŒ์— ๋˜๋Œ๋ฆฌ๊ธฐ (`vib undo`)
- โœ… Git ๋ชฐ๋ผ๋„ ๋จ
- โœ… ์ดˆ๋ณด์ž๋„ ์‰ฝ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Œ

---

โญ **VibeLign์ด ์ฝ”๋“œ ์ €์žฅํ•ด์คฌ์œผ๋ฉด Star ํ•˜๋‚˜ ๋ถ€ํƒํ•ด์š” โ€” ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!**

---

## ๐Ÿ“‹ ์—…๋ฐ์ดํŠธ ๋‚ด์—ญ (Release Notes)

**v2.2.20** โ€” Code Explorer ์‚ฌ์ด๋“œ๋ฐ”์— docs ํŠธ๋ฆฌ + ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ปฌ๋Ÿฌ ๊ตฌ๋ถ„:

- ๐Ÿ“š **์‚ฌ์ด๋“œ๋ฐ”์— `docs/` ํด๋” + `.md` ๋ฏธ๋ฆฌ๋ณด๊ธฐ** โ€” ์—”์ง„ `project_scan`(์ฝ”๋“œ ๋ถ„์„ ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๊ณต์œ )๊ณผ ๋ณ„๋„๋กœ Tauri ์ „์šฉ `list_code_files` ์Šค์บ๋„ˆ๋ฅผ ์‹ ์„ค. `docs/superpowers/specs/*.md`, wiki, release notes ๋“ฑ์˜ Markdown ๋ฌธ์„œ๊ฐ€ ํŠธ๋ฆฌ์— ๋…ธ์ถœ๋˜๊ณ  ๋ทฐ์–ด์—์„œ Markdown ์–ธ์–ด ํƒœ๊ทธ๋กœ ์—ด๋ฆผ. anchor_tools/patch_suggester/doctor_v2/risk_analyzer ๋“ฑ ์ฝ”๋“œ ๋„๋ฉ”์ธ ๋ถ„์„์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€.
- ๐ŸŽจ **4์ƒ‰ ํƒญ ์นดํ…Œ๊ณ ๋ฆฌ ์ปฌ๋Ÿฌ๋ง** โ€” code(๋…น) / docs(์ฃผํ™ฉ) / tests(๋ณด๋ผ) / other(ํšŒ์ƒ‰). ํŒŒ์ผ์€ ํ™•์žฅ์žยท๊ฒฝ๋กœ(`.test.*`, `__tests__/`, `spec/`, `tests/`)๋กœ, ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ํ•˜์œ„ ํŒŒ์ผ ๋‹ค์ˆ˜๊ฒฐ๋กœ ์ž๋™ ํŒ์ •. ๊ฐ ํ–‰์— 4px ์™ผ์ชฝ ์•ก์„ผํŠธ ๋ฐ” + ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐฐ๊ฒฝ ํ‹ดํŠธ + ์นดํ…Œ๊ณ ๋ฆฌ ๋„ํŠธ โ€” ํ•œ๋ˆˆ์— ๊ตฌ๋ถ„.
- ๐Ÿงฉ **`vib/*.ts` ANCHOR ๋งˆ์ปค ์ผ๊ด„ ๋ณด๊ฐ•** โ€” GUI ๋„๋ฉ”์ธ ๋ชจ๋“ˆ 16๊ฐœ + DocsViewer ํ…Œ์ŠคํŠธ 2๊ฑด์— `// === ANCHOR: NAME_START === / _END ===` ์ถ”๊ฐ€. `vib guard --strict` ์˜ ์•ต์ปค ๊ฒฝ๊ณ„ ๊ฒ€์ฆ์ด GUI ์ „ ์˜์—ญ์— ์ ์šฉ๋จ.

**v2.2.19** โ€” GUI ์ฝ”๋“œ ํƒ์ƒ‰๊ธฐ (read-only ์†Œ์Šค ๋ทฐ์–ด):

- ๐ŸŒฒ **์ƒˆ `CODE EXPLORER` ํƒญ** โ€” ํ”„๋กœ์ ํŠธ ์†Œ์Šค ํŠธ๋ฆฌ๋ฅผ ํด๋” ๋‹จ์œ„๋กœ ํƒ์ƒ‰(1๋‹จ๊ณ„ ๊ธฐ๋ณธ ํŽผ์นจ, ๊ฒ€์ƒ‰ ์‹œ ์ž๋™ ํŽผ์นจ)ํ•˜๊ณ  ์„ ํƒ ํŒŒ์ผ์„ ๋ผ์ธ ๋ฒˆํ˜ธยท์–ธ์–ดยท์ค„์ˆ˜ยท๋ฐ”์ดํŠธ์™€ ํ•จ๊ป˜ read-only ๋กœ ๋ฏธ๋ฆฌ๋ณด๊ธฐ. ๊ฒ€์ƒ‰์€ ๊ฒฝ๋กœยท์นดํ…Œ๊ณ ๋ฆฌยทimport ๋งค์นญ. DocsViewer ์™€ ๋ถ„๋ฆฌ๋œ ๋„๋ฉ”์ธ์œผ๋กœ page/layout/tree/viewer/toolbar/line ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ  `App.tsx` ๋Š” ํƒญ ์—ฐ๊ฒฐ๋งŒ ๋‹ด๋‹น.
- ๐Ÿ”’ **Rust `read_code_file` command + `code_access.rs` ๊ฐ€๋“œ** โ€” ๋ฃจํŠธ ๋ฐ– ํƒˆ์ถœ(`..`, ์ ˆ๋Œ€๊ฒฝ๋กœ, Windows UNC/๋“œ๋ผ์ด๋ธŒ, symlink) ๊ฑฐ๋ถ€, hidden/generated ๋””๋ ‰ํ„ฐ๋ฆฌ(`.git`, `node_modules`, `target`โ€ฆ) ์ œ์™ธ, Windows ์˜ˆ์•ฝ ๋””๋ฐ”์ด์Šค๋ช…(`NUL`, `CON`, `COM1`โ€ฆ) ์ฐจ๋‹จ, ํ™•์žฅ์ž allowlist, ๋ฐ”์ด๋„ˆ๋ฆฌ/๋น„-UTF-8 ๊ฑฐ๋ถ€, ํฌ๊ธฐ ์บก(์ฝ”๋“œ 1MB / ๋ฐ์ดํ„ฐ 5MB). BOM strip + CRLF ์ •๊ทœํ™” + SHA-256 ํ•ด์‹œ.
- ๐Ÿงฉ **Diff ํ™•์žฅ seam (`CodeDiffViewer`)** โ€” red/green diff ์ปดํฌ๋„ŒํŠธ ๋ฏธ๋ฆฌ ๋ถ„๋ฆฌ, ์‹ค์ œ diff ์†Œ์Šค๊ฐ€ ๋ถ™๊ธฐ ์ „ v1 ์—์„œ๋Š” ๋น„ํ™œ์„ฑ(๋ฏธ๋งˆ์šดํŠธ).

**v2.2.18** โ€” ๊ธฐํš ๋ฌธ์„œ ์ฝ”๋“œ ๋™๊ธฐํ™” + GUI tsconfig ํ…Œ์ŠคํŠธ ์ œ์™ธ:

- ๐Ÿ“ **superpowers plan/spec ๋ฌธ์„œ 5๊ฐœ์— "ํ˜„์žฌ ๊ตฌํ˜„ ๋Œ€์กฐ ๋ฉ”๋ชจ (2026-05-14)" ์ถ”๊ฐ€** โ€” `mcp-host-llm-pivot-plan`, `๊ทœ์น™์ˆ˜์ •์•ˆ-3`, `์›ํด๋ฆญ์„ค์น˜-๊ธฐํš์•ˆ_์ดˆ์•ˆ`, `์ง€์‹์ €์žฅ๊ณ -๊ธฐํš์•ˆ`, `mcp-host-llm-pivot-eval-runbook` ์˜ ํ—ค๋”์— "์ง€๊ธˆ ์ฝ”๋“œ์™€ ์‹ค์ œ ๊ฒฉ์ฐจ" ๋ฅผ ๋ช…์‹œ. MCP primitive 2๊ฐœ mainlined ์‚ฌ์‹ค, `vib knowledge` ๋ฏธ๊ตฌํ˜„ ์‚ฌ์‹ค, `claude doctor` v1 ์„ฑ๊ณต ๊ธฐ์ค€ ์ œ์™ธ ์‚ฌ์‹ค ๋“ฑ์ด ๋ฌธ์„œ ์ƒ๋‹จ์—์„œ ๋ฐ”๋กœ ๋ณด์ž„. ๋ฏธ๋ž˜ ๋น„์ „๊ณผ v1 ํ˜„์‹ค์„ ๋ถ„๋ฆฌํ•ด ์ฝ๋„๋ก.
- ๐Ÿงน **`vibelign-gui/tsconfig.json` ์—์„œ ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์ œ์™ธ** โ€” `src/**/__tests__/**`, `*.test.{ts,tsx}`, `src/test/**` ๊ฐ€ `tsc && vite build` ์— ๋Œ๋ ค ๋“ค์–ด๊ฐ€ ๊ฐ€์งœ type error ๋ฅผ ๋ฟœ๋˜ ๋…ธ์ด์ฆˆ ์ •๋ฆฌ. `exclude` ํ•ญ๋ชฉ ์ถ”๊ฐ€๋กœ production ๋นŒ๋“œ๋งŒ ๊นจ๋—ํ•ด์ง€๊ณ  vitest ์‹คํ–‰์—๋Š” ์˜ํ–ฅ ์—†์Œ.

**v2.2.17** โ€” PyPI publish ํ ์ ์ฒด ํ•ด์†Œ (macos-13 โ†’ macos-latest):

- โšก **macOS wheel runner ๋ฅผ Apple Silicon ์œผ๋กœ ๊ต์ฒด** โ€” `macos-13` (Intel x86_64) runner pool ์ด GitHub Actions ์—์„œ ๋งŒ์„ฑ ํ ์ ์ฒด. v2.2.12 ๋ถ€ํ„ฐ PyPI publish ๊ฐ€ ์‹œ๊ฐ„ ๋‹จ์œ„๋กœ ๋ฌถ์˜€์Œ. `macos-latest` (Apple Silicon arm64) ๋Š” ์ดˆ ๋‹จ์œ„๋กœ ์žกํž˜. ํŠธ๋ ˆ์ด๋“œ์˜คํ”„: Intel Mac ์‚ฌ์šฉ์ž๋Š” PyPI binary wheel ๋Œ€์‹  sdist ๋กœ ์„ค์น˜ (Rust ํˆด์ฒด์ธ ํ•„์š”).

**v2.2.16** โ€” Phase 9 CI ๊ทธ๋ฆฐ์—… (MCP checkpoint handler ํ…Œ์ŠคํŠธ):

- ๐ŸŸข **`test_handle_checkpoint_create_*` 2๊ฑด ์‹คํŒจ fix** โ€” Rust ์—”์ง„ migration ์ž”์žฌ. `handle_checkpoint_create` ๊ฐ€ `file_count == 0` ๋„ `summary is None` ๊ณผ ๋™์ผํ•˜๊ฒŒ "blocked" ๋กœ audit. list-checkpoints ํ…Œ์ŠคํŠธ๊ฐ€ `router.list_checkpoints` ์‚ฌ์šฉํ•ด์„œ Rust ์—”์ง„ SQLite ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋„๋ก. v2.2.11 ๋ถ€ํ„ฐ ๋นจ๊ฐ›๋˜ Phase 9 cross-platform CI green.

**v2.2.15** โ€” post-commit hook v5: v3 ๋ถ„๊ธฐ ์ˆœ์„œ ๋ณต์›:

- ๐Ÿ” **์ž๋™ ๋ฐฑ์—… fallback ์ˆœ์„œ v3 ์œผ๋กœ ๋˜๋Œ๋ฆผ** โ€” v4 ์˜ "์ ˆ๋Œ€๊ฒฝ๋กœ ๋จผ์ €" ๊ตฌ์กฐ๊ฐ€ OpenCode + GPT-5.5 ๊ฐ™์€ ์ผ๋ถ€ LLM commit tool ์—์„œ ์ž๋™ ๋ฐฑ์—…์„ ์ „๋ถ€ ๋ˆ„๋ฝ์‹œํ‚ด (์‚ฌ์šฉ์ž ์‹ ๊ณ ๋กœ ์žฌํ˜„). v5 ๋Š” v3 ์™€ ๋™์ผํ•˜๊ฒŒ PATH ๋ถ„๊ธฐ๋ฅผ ์•ž์— ๋‘๊ณ , ์ ˆ๋Œ€๊ฒฝ๋กœ ๋ถ„๊ธฐ๋Š” ๋งˆ์ง€๋ง‰ fallback ์œผ๋กœ ๊ฐ•๋“ฑ โ€” PATH ๊ฐ€ ๋นˆ์•ฝํ•œ GUI commit tool ์ผ€์ด์Šค๋งŒ ์ปค๋ฒ„. marker v5 ๋กœ bump, v1-v4 hook ๋‹ค์Œ `vib start` ์—์„œ ์ž๋™ ๊ต์ฒด.

**v2.2.14** โ€” `RUST_ENGINE_INTEGRITY_FAILED` runtime self-heal:

- ๐Ÿ›Ÿ **๋ฒˆ๋“ค ์—”์ง„ integrity ๊ฐ€ macOS ์—์„œ ์ž๋™ ํšŒ๋ณต** โ€” v2.2.13 ์€ CI codesign step ๋งŒ ๋ณด๊ฐ•ํ•ด์„œ, ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ์ปฌ์—์„œ `npm run tauri build` (Intel/ARM Mac) ๋กœ ์ง์ ‘ ๋นŒ๋“œํ•œ GUI ์—์„  integrity check ๊ฐ€ ๊ทธ๋Œ€๋กœ ํญ๋ฐœ. ๋Ÿฐํƒ€์ž„์—์„œ `codesign --verify --strict` ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” binary ๋ฉด `.sha256` manifest ๋ฅผ ์ž๋™ ๊ฐฑ์‹ ํ•ด ํšŒ๋ณตํ•œ๋‹ค. Windows/Linux ๋Š” codesign ์‹ ๋ขฐ ์‹ ํ˜ธ๊ฐ€ ์—†์–ด tamper ๊ฒ€์‚ฌ ๊ทธ๋Œ€๋กœ ์œ ์ง€.

**v2.2.13** โ€” ์ž๋™ ๋ฐฑ์—… ์ •ํ•ฉ์„ฑ hotfix (GUI + GUI commit tool):

- ๐Ÿฉน **macOS GUI ์˜ `RUST_ENGINE_INTEGRITY_FAILED` ํ•ด์†Œ** โ€” `codesign --deep` ๊ฐ€ bundled `vibelign-engine` binary ์— ์„œ๋ช… blob ์„ ์ถ”๊ฐ€ํ•œ ํ›„ `.sha256` manifest ๊ฐ€ ์žฌ์ƒ์„ฑ๋˜์ง€ ์•Š์•„ ๋ชจ๋“  Rust ์—”์ง„ ํ˜ธ์ถœ (history, BACKUPS) ์ด integrity check ๋กœ ํญ๋ฐœํ•˜๋˜ ํšŒ๊ท€. CI ์—์„œ codesign ์งํ›„ manifest ๋ฅผ ์žฌ์ƒ์„ฑํ•˜๋„๋ก step ๋ณด๊ฐ•.
- ๐Ÿ”Œ **post-commit ์ž๋™ ๋ฐฑ์—…์ด `vib` PATH ์— ์˜์กดํ•˜์ง€ ์•Š์Œ** โ€” Sourcetree / VS Code / Tower ์˜ commit ์€ launchd PATH ๋งŒ ์ƒ์†ํ•ด `~/.local/bin` ์ด ๋น ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ”ํ•จ. ๋ชจ๋“  `command -v vib` fallback ์ด false โ†’ ์ž๋™ ๋ฐฑ์—… ๋ˆ„๋ฝ์ด๋˜ ํšŒ๊ท€. install ์‹œ์ ์— `vib` / `vibelign` / `python -m vibelign.cli.vib_cli` ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์บก์ฒ˜ํ•ด PATH ๋ถ„๊ธฐ๋ณด๋‹ค ๋จผ์ € ์‹œ๋„. marker v4 ๋กœ bump, v1-v3 hook ๋‹ค์Œ `vib start` ์—์„œ ์ž๋™ ๊ต์ฒด.
- ๐Ÿง **CI ์—์„œ Linux ๋นŒ๋“œ ์ œ์™ธ** โ€” wheel publish + Python smoke build ๊ฐ€ Ubuntu ์—์„œ ๋น ์ง. ํƒ€๊ฒŸ์€ macOS + Windows.

**v2.2.12** โ€” pre-commit hook ์œ ์—ฐํ™” (guard advisory + skip env):

- ๐ŸŸข **`vib guard --strict` ๊ฐ€ commit ์„ ๋ง‰์ง€ ์•Š์Œ** โ€” guard ์‹คํŒจ๋Š” stderr ์— ํ•œ ์ค„ ์•Œ๋ฆผ๋งŒ ์ถœ๋ ฅํ•˜๊ณ  commit ํ†ต๊ณผ. `vib secrets --staged` ๋Š” ๊ทธ๋Œ€๋กœ ์ฐจ๋‹จ (์‹œํฌ๋ฆฟ ๋ˆ„์ถœ์€ ๋น„๊ฐ€์—ญ, ๊ตฌ์กฐ drift ๋Š” ๊ฐ€์—ญ์ด๋ผ ๋น„๋Œ€์นญ). guard ๊ฐ€ ์žก๋˜ drift ๋Š” `vib doctor` / ๋‹ค์Œ ์ž‘์—…์—์„œ ๊ณ„์† ์žกํž˜.
- ๐Ÿšช **`VIBELIGN_SKIP_HOOK=1 git commit ...`** โ€” 1ํšŒ์šฉ ์šฐํšŒ (`--no-verify` ์˜๋„-๋ช…ํ™• ๋ฒ„์ „, vib ์ž์ฒด๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ).
- ๐Ÿ”’ **`VIBELIGN_STRICT_GUARD=1`** โ€” strict ํŒ€์šฉ opt-in. ์˜› ์ฐจ๋‹จ ๋™์ž‘ ๋ณต๊ท€.
- โ™ป๏ธ **๊ธฐ์กด hook ์ž๋™ ์žฌ์„ค์น˜** โ€” `secrets-pre-commit v1` / `pre-commit-enforcement v1`/`v2` ์–ด๋А marker ๋“  ๋‹ค์Œ `vib start` ์—์„œ v3 ๋กœ ์ž๋™ ๊ต์ฒด. ์ˆ˜๋™ ์ •๋ฆฌ ๋ถˆํ•„์š”.

**v2.2.11** โ€” GUI Patch ์นด๋“œ ๋…ธ์ถœ ์ œ๊ฑฐ (์ •ํ™•๋„ ๊ธฐ๋ฐ˜ deprecation):

- ๐Ÿšซ **Patch ์นด๋“œ ๊ธฐ๋ณธ ๋…ธ์ถœ์—์„œ ์ œ๊ฑฐ** โ€” v2.2.10 ์ธก์ •์—์„œ `vib patch` ์ž์—ฐ ๋ถ„ํฌ ์ •ํ™•๋„๊ฐ€ ์‚ฌ์šฉ์ž ์‹ค ์š”์ฒญ 7๊ฑด ์ค‘ 0๊ฑด์ด์—ˆ์Œ (ํ‚ค์›Œ๋“œ ํ•จ์ •: `--json` โ†’ ๋ฌด๊ด€ํ•œ Python docs ๋ช…๋ น ํŒŒ์ผ, `--preview` โ†’ ๋ฌด๊ด€ํ•œ backup-restore ํŒŒ์ผ). ์‚ฌ์šฉ์ž๊ฐ€ ์ถœ๋ ฅ์„ ๋ฌด๋น„ํŒ์ ์œผ๋กœ ๋”ฐ๋ฅผ ๊ฒฝ์šฐ ๋ฌด๊ด€ ํŒŒ์ผ์ด ์ž˜๋ชป ์ˆ˜์ •๋  ์œ„ํ—˜์ด ๊ฐ€์žฅ ํฐ surface ์˜€์Œ. ์‹ ๊ทœ/๊ธฐ์กด ์‚ฌ์šฉ์ž ๋ชจ๋‘ Home ์นด๋“œ ๋ชฉ๋ก์—์„œ ๋” ์ด์ƒ ๋ณด์ด์ง€ ์•Š์Œ. CLI `vib patch` ๋Š” ๊ทธ๋Œ€๋กœ ์œ ์ง€. ์ž์—ฐ์–ด ํŒจ์น˜๋Š” Claude Code / Cursor ์—์„œ ์ง์ ‘ (vibelign-mcp ๋Š” `vib start` ์‹œ ์ž๋™ ๋“ฑ๋ก).

**v2.2.10** โ€” MCP host-LLM pivot PoC + BACKUPS ํŽ˜์ด์ง€๋„ค์ด์…˜ + Explain ์นด๋“œ ์˜ต์…˜ ์ •๋ฆฌ:

- ๐Ÿง  **์‹ ๊ทœ MCP ๋„๊ตฌ** โ€” `anchor_read_content` (์•ต์ปค ๊ฒฝ๊ณ„ ์•ˆ ํ…์ŠคํŠธ read, path traversal ๋ฐฉ์ง€, `_START`/`_END` ์ ‘๋ฏธ์‚ฌ ์ž๋™ ์ •๊ทœํ™”) + `project_map_get` (ํ”„๋กœ์ ํŠธ ์นดํ…Œ๊ณ ๋ฆฌ/ํŒŒ์ผ/์•ต์ปค ์ธ๋ฑ์Šค ์ผ๊ด„ ๋ฐ˜ํ™˜). host LLM(Claude Code/Cursor)์ด ์‚ฌ์šฉ์ž ์ž์—ฐ์–ด ์š”์ฒญ โ†’ ์ •ํ™•ํ•œ `file:anchor` ๋งคํ•‘์„ ์ง์ ‘ ์ˆ˜ํ–‰. ์‚ฌ์šฉ์ž ์‹ค ์š”์ฒญ 6๊ฑด์—์„œ baseline `vib patch` 0/6 vs host LLM 6/6 ์ธก์ •.
- ๐Ÿ“‹ **BACKUPS ํŒŒ์ผ ๊ธฐ๋ก + DB Viewer rows ํŽ˜์ด์ง€๋„ค์ด์…˜** โ€” ํŽ˜์ด์ง€๋‹น 10๊ฐœ, "โ† ์ด์ „ / X / Y ํŽ˜์ด์ง€ ยท Mโ€“N / TOTAL / ๋‹ค์Œ โ†’" ํ‘ธํ„ฐ. ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ˆ„์ ๋˜์–ด๋„ ์˜ˆ์ „ ํ•ญ๋ชฉ ๋‹ค์‹œ ๋ณผ ์ˆ˜ ์žˆ์Œ. ๊ฒ€์ƒ‰์–ด ๋ณ€๊ฒฝ ์‹œ 1ํŽ˜์ด์ง€ ๋ฆฌ์…‹, ์„ ํƒ ํ•ญ๋ชฉ์ด ๋‹ค๋ฅธ ํŽ˜์ด์ง€์— ์žˆ์œผ๋ฉด ์ž๋™ ์ ํ”„.
- ๐Ÿงน **Explain ์นด๋“œ `--write-report` / `--json` ์˜ต์…˜ ์ œ๊ฑฐ** โ€” GUI ์นด๋“œ flags ์—์„œ๋งŒ ์ œ๊ฑฐ (CLI ์˜ ๋™์ผ ํ”Œ๋ž˜๊ทธ๋Š” ๊ทธ๋Œ€๋กœ ์ง€์›, ๋‹ค๋ฅธ ๋ช…๋ น์€ ์˜ํ–ฅ ์—†์Œ).
- ๐Ÿ“š ๋„๊ทธํ‘ธ๋”ฉ ์ฆ๊ฑฐ: `vib patch "gui ์ต์Šคํ”Œ๋ ˆ์ธ ์นด๋“œ์—์„œ --write-report --json ์˜ต์…˜์€ ์ œ๊ฑฐํ•ด์ค˜"` โ†’ `vib_docs_build_cmd.py` ๋ผ๋Š” ์™„์ „ ์—‰๋šฑํ•œ ํŒŒ์ผ์„ ์งš์Œ (JSON ํ‚ค์›Œ๋“œ ํ•จ์ •). ์‹ ๊ทœ MCP ๋„๊ตฌ๋กœ ์ž‘์—…ํ•˜๋Š” host LLM ์€ ์ •๋‹ต `commandData.ts` ์ฆ‰์‹œ ์งš์Œ. PR #5 description ๋ถ€๋ก ์ฐธ์กฐ.

**v2.2.9** โ€” v2.2.8 scroll-to-top ๋ฒ„ํŠผ์ด ์•ˆ ๋ณด์ด๋˜ ํŒจ์น˜:

- ๐Ÿ”ง **scroll-to-top ์ด ์‹ค์ œ scroll container ์ธ์‹** โ€” v2.2.8 ์˜ listener ๊ฐ€ `window.scrollY` ๋งŒ ๋ณด์•„ mac/Windows ์–‘์ชฝ์—์„œ ๋ฒ„ํŠผ์ด ์•ˆ ๋ณด์ด๋˜ issue. brutalism ๋ ˆ์ด์•„์›ƒ์ด `.page-content` (inner flex child) ์—์„œ scroll ํ•˜๋ฏ€๋กœ, v2.2.9 ๊ฐ€ document ์˜ capture-phase scroll listener + `.page-content.scrollTop` ์ง์ ‘ ์ฝ์Œ. ํด๋ฆญ๋„ inner container ์˜ scrollTo ํ˜ธ์ถœ.

**v2.2.8** โ€” GUI UX ์ˆ˜์ • ๋‘ ๊ฑด + scroll-to-top ๋ฒ„ํŠผ:

- ๐Ÿ”ง **๋ณต๊ตฌ ํ›„๋ณด ์ถ”์ฒœ โ€” ํ›„๋ณด๋ณ„ AI ์„ค๋ช… ํ‘œ์‹œ** โ€” LLM ์˜ candidate-specific `reason` ํ•„๋“œ๊ฐ€ rule-based ๊ทผ๊ฑฐ ์•„๋ž˜ ๋ณ„๋„๋กœ ํ‘œ์‹œ๋˜๋„๋ก ๋ณ€๊ฒฝ. 3 ํ›„๋ณด๊ฐ€ ๋™์ผํ•œ "๊ทผ๊ฑฐ" ๋ฌธ๊ตฌ๋ฅผ ๋ณด์ด๋˜ issue ํ•ด๊ฒฐ. rule-based 5 ํ•ญ๋ชฉ ๋ฌธ๊ตฌ๋„ ์นœํ™”ํ™” (์˜ˆ: "์ปค๋ฐ‹ ์งํ›„ ์ €์žฅ" โ†’ "์ฝ”๋“œ ์ €์žฅ ์งํ›„ ๋งŒ๋“  ๋ฐฑ์—…").
- ๐Ÿ”ง **CANVAS / RAW HTML ํ™”๋ฉด โ€” iframe ์„ธ๋กœ๊ฐ€ content/์•ฑ UI ์™€ ๋งž์ถฐ์ง** โ€” `CanvasViewPane` ์™€ `RawHtmlCanvasPane` ๋‘˜ ๋‹ค ํœด๋ฆฌ์Šคํ‹ฑ ์ถ”์ • fixed-height ์—์„œ `onLoad` content ์ธก์ • + `minHeight: calc(100vh - 200px)` ๋กœ ๋ณ€๊ฒฝ (sandbox ๋Š” scripts/forms ์—ฌ์ „ํžˆ disabled, `allow-same-origin` ๋งŒ ์ถ”๊ฐ€). ์งง์€ ๋ฌธ์„œ๋Š” ์•ฑ viewport ๋งŒํผ ์ฐจ์ง€, ๊ธด ๋ฌธ์„œ๋Š” ์™ผ์ชฝ ์‚ฌ์ด๋“œ์ฒ˜๋Ÿผ page natural scroll. iframe ์•ˆ ๋ณ„๋„ ์Šคํฌ๋กค๋ฐ” ์—†์Œ.
- โฌ†๏ธ **scroll-to-top floating ๋ฒ„ํŠผ** โ€” ํŽ˜์ด์ง€ ์Šคํฌ๋กค์ด 300px ๋„˜์œผ๋ฉด ์šฐํ•˜๋‹จ์— โ†‘ ๋ฒ„ํŠผ ํ‘œ์‹œ, ํด๋ฆญ ์‹œ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์ตœ์ƒ๋‹จ์œผ๋กœ ์ด๋™. ๋ชจ๋“  ํŽ˜์ด์ง€ ๊ณตํ†ต.

**v2.2.7** โ€” ๋ณต๊ตฌ ํ›„๋ณด ์ถ”์ฒœ ์ง€์—ฐ ~46% ๋‹จ์ถ•:

- ๐Ÿš€ **Recovery ํŒจ๋„ ๊ฐ€์†** โ€” "๋ณต๊ตฌ ํ›„๋ณด ์ถ”์ฒœ ๋ณด๊ธฐ" (Gemini AI ์ถ”์ฒœ) ์ฒซ ํ˜ธ์ถœ wall ์ด ~25s โ†’ ~13.6s ๋กœ ๋‹จ์ถ•. LLM prompt ์˜ commit_message ๋ณธ๋ฌธ์ด prompt 28KB ์˜ 49% ๋ฅผ ์ฐจ์ง€ํ•˜๋˜ ๊ฒƒ์„ subject ์ฒซ ์ค„ (200์ž cap) ๋งŒ ๋ณด๋‚ด๋„๋ก ๋ณ€๊ฒฝ. ์ถ”์ฒœ quality ๋Š” ๋ณด์กด (LLM ๊ฒฐ์ •์€ source/created_at/evidence_score/commit_boundary ๊ฐ™์€ metadata ์— ์˜์กด, verbose commit body ๋Š” unused).
- ๐Ÿ“ฆ **`score_path.rs` dormant library** โ€” `meaningful_overlap` Rust port + 5 parity tests + ipc variant ๊ฐ€ dormant library ๋กœ ์ถ”๊ฐ€. score_path ์ „์ฒด ํŠธ๋ž™์€ skip-rate ์ธก์ • ๊ฒฐ๊ณผ leaf-port batch ROI ~0 ์œผ๋กœ ยง9 retraction ๋์ง€๋งŒ artifact ๋Š” ๋ณด์กด (๋ฏธ๋ž˜ ์‚ฌ์šฉ + Python alias drift ์ž๋™ ๊ฐ์ง€).
- โœ… ์ธก์ •-์ฃผ๋„ lessons (stub-patch wall diff > cProfile cumtime, skip-rate trap, apples-to-apples harness) ์ด ๋ณธ ๋ฆด๋ฆฌ์ฆˆ์˜ prerequisite โ€” `docs/superpowers/plans/2026-05-13-*-plan.md` ยง9 ์ฐธ์กฐ.

**v2.2.6** โ€” GUI ๋ฉ”๋ชจ๋ฆฌ ์š”์•ฝ ๊ฐ€์† + tokenizer Rust ํ† ๋Œ€:

- ๐Ÿš€ **Phase 3 PoC consumer #13** โ€” `SessionMemoryCard` ๋งˆ์šดํŠธ๊ฐ€ Python sidecar ํ˜ธ์ถœ ๋Œ€์‹  in-process Rust (`callEngineDirect({command:"memory_summary_read"})`) ๋กœ ์ „ํ™˜๋˜์–ด ๋งˆ์šดํŠธ ์‹œ ~80 ms ์ง€์—ฐ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. audit ๋กœ๊ทธ parity ๋Š” ์™„์ „ํžˆ ๋ณด์กด๋ฉ๋‹ˆ๋‹ค.
- ๐Ÿ“ฆ **tokenizer Rust leaf port** โ€” `vibelign-core/src/tokenizer.rs` ๊ฐ€ `patch_suggester.py` ์˜ 6 ํ•œ๊ตญ์–ด ํ† ํฐ leaf ํ•จ์ˆ˜๋ฅผ dormant library ๋กœ ํฌํŒ…ํ–ˆ์Šต๋‹ˆ๋‹ค. `tests/fixtures/tokenizer_goldens/` (102 case ร— 6 ํ•จ์ˆ˜ = 612 byte-equal parity record) ๋กœ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
- โšก **`_normalize_korean_token` pre-sort** โ€” ๋งค ํ˜ธ์ถœ `sorted()` ๋ฅผ module-level ์ƒ์ˆ˜๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค. direct 1M iter 27% ๊ฐ€์†, recover preview wall ์€ noise (caller-side set ์ฒ˜๋ฆฌ๊ฐ€ wall dominate).
- โœ… **ํฌ๋กœ์Šคํ”Œ๋žซํผ pre-flight** โ€” Windows GNU cross-compile ์ด vibelign-core ์™€ vibelign-gui/src-tauri ์–‘์ชฝ์—์„œ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

**v2.2.5** โ€” ๋ฐ์Šคํฌํ†ฑ ๋ฆด๋ฆฌ์ฆˆ lockfile ์ˆ˜์ •:

- ๐Ÿ“ฆ **npm lockfile ๋ณต๊ตฌ** โ€” GUI package lock ์„ ์ •์ƒ ์žฌ์ƒ์„ฑํ•ด `npm ci` ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” `json5-2.2.4.tgz` ๋Œ€์‹  ์‹ค์ œ `json5@2.2.3` dependency ๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
- โœ… **๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ ์žฌ์‹œ๋„** โ€” ์‹คํŒจํ•œ v2.2.4 ๋ฐ์Šคํฌํ†ฑ GUI ๋ฆด๋ฆฌ์ฆˆ ์‹œ๋„๋ฅผ v2.2.5 ๊ฐ€ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

**v2.2.4** โ€” ๋ฐ์Šคํฌํ†ฑ ๋ฆด๋ฆฌ์ฆˆ ํ˜ธํ™˜์„ฑ ์ˆ˜์ •:

- ๐Ÿ› ๏ธ **Backup bridge ํ˜ธํ™˜์„ฑ** โ€” domain-module bridge ๋ฆฌํŒฉํ† ๋ง ์ดํ›„์—๋„ ๊ธฐ์กด GUI ํ™”๋ฉด์ด build ๋˜๋„๋ก legacy `backupCreate` export ๋ฅผ ๋ณต๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.
- โœ… **๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ ์žฌ์‹œ๋„** โ€” ์‹คํŒจํ•œ v2.2.3 ๋ฐ์Šคํฌํ†ฑ GUI ๋ฆด๋ฆฌ์ฆˆ ์‹œ๋„๋ฅผ v2.2.4 ๊ฐ€ ๋Œ€์ฒดํ•˜๋ฉฐ, ๋™์ผํ•œ bridge ๋ชจ๋“ˆํ™” ์ž‘์—…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

**v2.2.3** โ€” GUI bridge ๋ชจ๋“ˆํ™” + ๊ฐœ๋ฐœ ๋กœ๊ทธ ์ •๋ฆฌ:

- ๐Ÿงฉ **GUI vib bridge ๋ชจ๋“ˆํ™”** โ€” ๊ฑฐ๋Œ€ํ•œ `src/lib/vib.ts` command bridge ๋ฅผ domain module ๋กœ ๋‚˜๋ˆ„๋ฉด์„œ ๊ธฐ์กด `src/lib/vib` import ๊ฒฝ๋กœ๋Š” ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๐Ÿ›ก๏ธ **๊ณ„์•ฝ ๋ณด์กด ๋ฆฌํŒฉํ† ๋ง** โ€” Tauri command string, payload shape, Windows onboarding/env ๋™์ž‘, backup cache singleton ๋™์ž‘์„ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.
- ๐Ÿงน **Tauri dev ๋กœ๊ทธ ์ •๋ฆฌ** โ€” `npm run tauri dev` ๋•Œ ๋ณด์ด๋˜ Rust warning 2๊ฐœ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

**v2.2.2** โ€” DocsViewer HTML Canvas + Windows ์•ˆ์ •ํ™”:

- ๐Ÿงญ **Document Control Map Canvas** โ€” ์›๋ฌธ ์ˆœ์„œ Outline, Flow, Decisions, Actions, Risks, Glossary ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๊ณ  bullet ์ค‘์‹ฌ ์„น์…˜ preview ๋ˆ„๋ฝ์„ `body_preview` ๋กœ ๋ณด๊ฐ•.
- ๐Ÿงพ **Raw HTML artifact mode** โ€” ์„ ํƒ ๋ฌธ์„œ๋ฅผ sandboxed iframe ์˜ ์ฝ๊ธฐ ์‰ฌ์šด article-style HTML ๋กœ ๋ Œ๋”๋ง.
- ๐ŸชŸ **Split ํƒญ UX** โ€” ์ฐฝ ํญ๊ณผ ์ƒ๊ด€์—†์ด Split ํƒญ์„ ํ•ญ์ƒ ํ‘œ์‹œํ•˜๊ณ , ์ข์€ ์ฐฝ์—์„œ๋Š” ๋‚ด๋ถ€ ๋ ˆ์ด์•„์›ƒ๋งŒ 1์—ด๋กœ ๋ฐ˜์‘.
- โœจ **์„ ํƒ ํƒญ ํ•˜์ด๋ผ์ดํŠธ** โ€” Source/Easy/Canvas/Raw HTML/Split ์ค‘ ํ˜„์žฌ ํƒญ์„ ๊ฒ€์€ ๋ฐฐ๊ฒฝ + ์˜ค๋ Œ์ง€ ๊ทธ๋ฆผ์ž๋กœ ๊ฐ•์กฐ.
- ๐Ÿ› ๏ธ **Windows ๊ฒฝ๋กœ ์ˆ˜์ •** โ€” `C:\Repo` vs `c:\repo\...` ๊ฐ™์€ ๋Œ€์†Œ๋ฌธ์ž ์ฐจ์ด์—๋„ ์ถ”๊ฐ€ ๋ฌธ์„œ ์†Œ์Šค ํด๋” ์„ ํƒ์ด ์ •์ƒ ๋™์ž‘.

**v2.2.0** โ€” GUI ๋‹ค์ด๋ ‰ํŠธ ๋ธŒ๋ฆฌ์ง€ + ํ†ตํ•ฉ ์—๋Ÿฌ ๋กœ๊ทธ + ์ž๋™ ๋ฐฑ์—… ๊ฐ€์‹œ์„ฑ:

- ๐ŸŒ‰ **Tauri โ†” vibelign-core ๋‹ค์ด๋ ‰ํŠธ ๋ธŒ๋ฆฌ์ง€** โ€” GUI ๊ฐ€ Python `vib` ์„œ๋ธŒํ”„๋กœ์„ธ์Šค ์—†์ด in-process Rust ์—”์ง„์„ ์ง์ ‘ ํ˜ธ์ถœ. 6๊ฐœ GUI consumer ์˜ trivial ๋ช…๋ น wall time ์ด ~80ms โ†’ <5ms ๋กœ ๋‹จ์ถ•.
- ๐Ÿ› **GUI ํ†ตํ•ฉ ์—๋Ÿฌ ๋กœ๊ทธ ๋ทฐ** โ€” CLI/GUI ์—๋Ÿฌ๋ฅผ ํ•œ ํƒญ์— ํ†ตํ•ฉ, GitHub ์ด์Šˆ๋กœ ๋‹จ์ผ/๋‹ค์ค‘ ๋ณด๊ณ , ์ˆ˜์ • ์™„๋ฃŒ๋œ ์—๋Ÿฌ๋ฅผ ์ฆ‰์‹œ ์ •๋ฆฌํ•˜๋Š” ๋ฒ„ํŠผ.
- ๐Ÿ›Ÿ **์ž๋™ ๋ฐฑ์—… ์‹คํŒจ ๊ฐ€์‹œํ™”** โ€” post-commit hook ์ด ๋” ์ด์ƒ silent skip ํ•˜์ง€ ์•Š์Œ. ํ†ตํ•ฉ ์—๋Ÿฌ ๋กœ๊ทธ์— ์ž๋™ ๊ธฐ๋ก + git terminal ์— stderr ๋…ธ์ถœ.
- ๐Ÿ” **Rust secret_scan parity** โ€” `VIBELIGN_SECRET_SCAN_RUST=1` ์˜ตํŠธ์ธ ์‹œ Rust ๊ตฌํ˜„ ์‚ฌ์šฉ (10๊ฐœ ๊ณจ๋“  fixture ๋กœ Python ๊ณผ 1:1 parity ๋ณด์žฅ).
- ๐Ÿ› ๏ธ ๋‹ค์ˆ˜์˜ silent regression fix โ€” `vib memory show` race, `vib doctor | head` BrokenPipeError, integrity manifest ์ž๋™ ์žฌ์ƒ์„ฑ, GUI listener cleanup, ํ™ˆ ์นด๋“œ ๊ทธ๋ฆฌ๋“œ 1fr 1fr ๋ถˆ๊ท ํ˜• ์ˆ˜์ •.

**Rust/SQLite ์ฒดํฌํฌ์ธํŠธ ์—”์ง„** (v2.1 ์‹œ๋ฆฌ์ฆˆ):

- `vib checkpoint`, `vib history`, `vib undo`๊ฐ€ Rust/SQLite ์ฒดํฌํฌ์ธํŠธ ์—”์ง„์„ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค ์—”์ง„์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉด Python fallback์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
- ๊ธฐ์กด JSON ์ฒดํฌํฌ์ธํŠธ(`.vibelign/checkpoints/`)๋Š” ๋””์Šคํฌ์— ๋ณด์กดํ•˜์ง€๋งŒ ์ƒˆ SQLite ๊ธฐ๋ฐ˜ ์ด๋ ฅ์— ์ž๋™ import/๋ณ‘ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ์Šค๋ƒ…์ƒท์ด ํ•„์š”ํ•˜๋ฉด ์—…๊ทธ๋ ˆ์ด๋“œ ์ „์— `.vibelign/checkpoints/`๋ฅผ ๋ฐฑ์—…ํ•ด๋‘์„ธ์š”.

**v2.0.0** โ€” ๋ฐ์Šคํฌํ†ฑ GUI + MCP/Patch ๋ชจ๋“ˆํ™” + AI ์˜ตํŠธ์ธ:

- ๐Ÿ–ฅ๏ธ **VibeLign GUI (macOS / Windows)** โ€” Tauri ๊ธฐ๋ฐ˜ ๋ฐ์Šคํฌํ†ฑ ์•ฑ
- Doctor ํŽ˜์ด์ง€: ์›ํด๋ฆญ ์ง„๋‹จ + ์ž๋™ ์ ์šฉ
- ์•ต์ปค์นด๋“œ: ์•ต์ปค ์‚ฝ์ž… + intent/aliases ์žฌ์ƒ์„ฑ (์ฝ”๋“œ ๊ธฐ๋ฐ˜ / AI ๊ธฐ๋ฐ˜, `--force` ๋กœ ๊ธฐ์กด AI ๊ฒฐ๊ณผ ๋ฎ์–ด์“ฐ๊ธฐ)
- DocsViewer: ๋ฌธ์„œ๋ณ„ AI ์š”์•ฝ
- Settings: API ํ‚ค ๊ด€๋ฆฌ, AI ์˜ตํŠธ์ธ ์ „์—ญ ํ† ๊ธ€
- ๐Ÿ”Œ **MCP ์„œ๋ฒ„ ์žฌ๊ตฌ์„ฑ** โ€” `vibelign/mcp/` ์•„๋ž˜ dispatch/handlers/tool_specs ๋ถ„๋ฆฌ
- ๐Ÿงฉ **Patch ๋ชจ๋“ˆ ๋ถ„๋ฆฌ** โ€” `vibelign/patch/` (builder ยท handoff ยท preview ยท targeting ยท โ€ฆ)
- ๐Ÿค– **AI ์˜ตํŠธ์ธ** โ€” consent UI ์ œ๊ฑฐ, Settings ์ „์—ญ ํ† ๊ธ€ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ. Anthropic / OpenAI / Gemini ์ž๋™ ์„ ํƒ
- โšก **onedir ๋Ÿฐํƒ€์ž„** โ€” PyInstaller `onefile โ†’ onedir` ์ „ํ™˜์œผ๋กœ GUI ์ฝœ๋“œ์Šคํƒ€ํŠธ(1~3์ดˆ) ์ œ๊ฑฐ
- ๐Ÿท๏ธ **์•ต์ปค `_source` ํ•„๋“œ** โ€” `anchor_meta.json` ์— `code / ai / manual / ai_failed` ๊ตฌ๋ถ„ ๋„์ž…ํ•ด AI/์ˆ˜๋™ ๊ฒฐ๊ณผ๋ฅผ ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ์žฌ์ƒ์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ (`--force` ๋กœ ๋ฎ์–ด์“ฐ๊ธฐ ๊ฐ€๋Šฅ)
- โš ๏ธ **Breaking**: `vibelign.vib_cli` โ†’ `vibelign.cli.vib_cli`; `vibelign.mcp_server` โ†’ `vibelign.mcp.mcp_server`
- ์ž์„ธํ•œ ๋‚ด์šฉ์€ [CHANGELOG.md](https://github.com/yesonsys03-web/VibeLign/blob/main/CHANGELOG.md) ยท [MIGRATION_v1_to_v2.md](https://github.com/yesonsys03-web/VibeLign/blob/main/MIGRATION_v1_to_v2.md)

**v1.6.0** โ€” MCP ์„œ๋ฒ„ + AI ๊ฐœ๋ฐœ ๊ทœ์น™ ์‹œ์Šคํ…œ:

- `vib mcp` โ€” MCP(Model Context Protocol) ์„œ๋ฒ„ ์‹คํ–‰ (Claude Desktop ์—ฐ๋™)
- `vib start` โ€” Claude Code์™€ Cursor์— VibeLign MCP ์ž๋™ ๋“ฑ๋ก (๊ธฐ์กด Cursor MCP ์„œ๋ฒ„๋Š” ์œ ์ง€)
- `vib rules` โ€” AI ๊ฐœ๋ฐœ ๊ทœ์น™ ์ „์ฒด๋ฅผ CLI์—์„œ ๋ฐ”๋กœ ํ™•์ธ
- `vib manual rules` โ€” ๊ฐœ๋ฐœ ๊ทœ์น™ ์ƒ์„ธ ๋งค๋‰ด์–ผ
- Anchor intent system โ€” ์•ต์ปค์— ์˜๋„(intent) ์ •๋ณด ์ €์žฅ
- ํ•œ๊ตญ์–ด ํ† ํฌ๋‚˜์ด์ € โ€” patch ์š”์ฒญ์„ ํ•œ๊ตญ์–ด๋กœ๋„ ์ •ํ™•ํ•˜๊ฒŒ ํ•ด์„
- AI_DEV_SYSTEM โ€” ์œ ์ง€๋ณด์ˆ˜์„ฑ/ํ•จ์ˆ˜ ๋””์ž์ธ ๊ทœ์น™ ์ถ”๊ฐ€ (Section 6-1, 14)
- `vib scan` ๋ฒ„๊ทธ ์ˆ˜์ • โ€” set_intent ์†์„ฑ ๋ˆ„๋ฝ ํ•ด๊ฒฐ

**v1.5.32** โ€” ์ฒดํฌํฌ์ธํŠธ/๋˜๋Œ๋ฆฌ๊ธฐ UX ๊ฐœํŽธ + AI ์„ค์ • ํŒŒ์ผ ๋ณดํ˜ธ:

- `vib checkpoint` โ€” ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ ์ง€์›
- `vib undo` โ€” ๋ฒˆํ˜ธ ์„ ํƒ + ์ทจ์†Œ ์˜ต์…˜ `[0]`
- `vib history` โ€” ์ดˆ ๋‹จ์œ„ ํƒ€์ž„์Šคํƒฌํ”„ ํ‘œ์‹œ
- `vib start` โ€” ์ดˆ๋ณด์ž ์˜จ๋ณด๋”ฉ + ์ฒซ ์ฒดํฌํฌ์ธํŠธ ์ž๋™ ์ €์žฅ
- `vib export` โ€” AGENTS.md, CLAUDE.md, OPENCODE.md, .cursorrules ๋ณดํ˜ธ

**v1.5.0** โ€” ๋ฉ€ํ‹ฐ AI ํˆด ์„ค์ • ๋‚ด๋ณด๋‚ด๊ธฐ:

- `vib export claude` โ€” Claude Code์šฉ CLAUDE.md ์ƒ์„ฑ
- `vib export cursor` โ€” Cursor์šฉ .cursorrules ์ƒ์„ฑ
- `vib export opencode` โ€” OpenCode์šฉ OPENCODE.md ์ƒ์„ฑ
- `vib export antigravity` โ€” Codex/์—์ด์ „ํŠธ์šฉ AGENTS.md ์ƒ์„ฑ
- ๋‚ด๋ณด๋‚ธ ํŒŒ์ผ์— VibeLign ๋งˆ์ปค ์ถ”๊ฐ€ (๋ฎ์–ด์“ฐ๊ธฐ ๋ฐฉ์ง€)

**v1.1.0** โ€” ์ฝ”์•Œ๋ชป์„ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€:

- `vib init` โ€” VibeLign ์ดˆ๊ธฐํ™”/๋ฆฌ์…‹
- `vib start` โ€” ์ฒ˜์Œ ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ
- `vib checkpoint` / `vib undo` โ€” Git ์—†์ด ์„ธ์ด๋ธŒ & ๋˜๋Œ๋ฆฌ๊ธฐ
- `vib protect` โ€” ์ค‘์š” ํŒŒ์ผ ์ž ๊ธˆ
- `vib ask` โ€” ํŒŒ์ผ ์„ค๋ช… AI ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ
- `vib history` โ€” ์ฒดํฌํฌ์ธํŠธ ์ด๋ ฅ ๋ณด๊ธฐ

---

# ๋ผ์ด์„ ์Šค

MIT