/plugin uninstall hams@hamstern
/plugin marketplace remove hamstern
/plugin marketplace add edu-openskill/hamstern
/plugin install hams@hamsternClaude Code ์ ๋ชจ๋ ์ธ์
์์ ๋์จ ๊ฒฐ์ ์ฌํญยท์ธ์
distillยทHTML mockup ์ ์ฌ์ฉ์ ๊ฐ์ธ์ GitHub repo ํ๋(hamstern-data)์ UUID ๊ฒฉ๋ฆฌ๋ก ๋์ ์ ์ฅํ๊ณ , ์ด๋ ๋๋ฐ์ด์ค์์๋ dashboard ๋ก ์กฐํํ๊ณ ํ์ํ ๋ ํ๊ธฐํ๋ ์์คํ
.
AI ์ ๋ํํ ๋ด์ฉยท๊ฒฐ์ ์ฌํญยทHTML ๋ชฉ์ ์ ํด๋ํฐยท๋ฐ์คํฌํ์ฑยท๋ค์ค ์ปดํจํฐ CLI ์์ ํ ๊ณณ(
hamstern-dataprivate repo)์ ๋ชจ์ผ๊ณ , ํ์ํ ๋ ๋ช ์์ ์ผ๋ก ๊ฐ์ ธ์จ๋ค. git-as-DB ํจํด, ์ธ๋ถ SaaS ์์กด 0, CLAUDE.md ๋น-์ค์ผ.
Claude ์ ํ ๋ํ์ ๊ฒฐ๊ณผ๋ฌผ์ ํ๋ฐ์ฑ์ด๋ค. /clear ํ ๋ฒ์ด๋ฉด ์ฌ๋ผ์ง๊ณ , ๋๋ฐ์ด์ค๋ฅผ ๋ฐ๊พธ๋ฉด ๋ค์ ์์. hamstern ์ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ ์ค ๊ฒฐ์ ์ฌํญยท์ธ์
์์ฝยทHTML ๋ชฉ์
๋ง ๊ณจ๋ผ ์ฌ์ฉ์ personal repo ์ ๋์ ํด ๋๋ค. ์ด๋ค ํด๋ผ์ฐ๋ SaaS ๋ ๊ฑฐ์น์ง ์๊ณ , ๋ชจ๋ ๊ฒ git history ๋ก ๋จ๋๋ค.
- Multi-device โ ํด๋ํฐ ๋ธ๋ผ์ฐ์ ๋ก dashboard ์ด์ด ๊ฒฐ์ ์ฌํญ ์กฐํ. ๋ค๋ฅธ ์ปดํจํฐ์์ clone ๋ง ํ๋ฉด ๋๊ธฐํ.
- Multi-project โ ํ hamstern-data ์ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ UUID ๊ฒฉ๋ฆฌ. dashboard ๊ฐ ํ๋ก์ ํธ ์ ํ UI.
- Plain Markdown โ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋์ด ์ฝ์ ์ ์๋
.md. lock-in 0.
# 1. GitHub ์์ private repo `hamstern-data` ์์ฑ (์ด๋ฆ์ ์์ , ๊ถ์ฅ: ๋ณธ์ธ ์ด๋ฆ ๋๋ hamstern-data)
# git clone ๋ก ์ฌ์ฉ์ ๋จธ์ ์ (๊ธฐ๋ณธ ์์น: ~/.claude/hamstern-data)
# 2. plugin ์ค์น (Claude Code marketplace)
/plugin install hamstern
# 3. ์ฒซ ํ๋ก์ ํธ ์์ฑ
/hams:init "๋ด ์ฒซ ํ๋ก์ ํธ"
# โ UUID ๋ฐ๊ธ + hamstern-data/projects/{uuid}/ scaffolding
# โ ~/.config/hamstern/active-project.json ์ active ๋ฐ์ธ๋ฉ
# โ commit + push๋ค๋ฅธ ๋๋ฐ์ด์ค ์ถ๊ฐ๋ hamstern-data clone ํ /hams:link "ํ๋ก์ ํธ ์ด๋ฆ".
| ๋ช ๋ น | ์ญํ |
|---|---|
/hams:init |
์ hamstern ํ๋ก์ ํธ ์์ฑ (UUID + scaffolding) |
/hams:link |
๊ธฐ์กด ํ๋ก์ ํธ๋ก active ๋ฐ์ธ๋ฉ (๋ถ๋ถ ์ด๋ฆ ๋งค์นญ) |
/hams:record |
์ธ์
distill โ sessions/{id}.md + decisions.md atomic dual-write |
/hams:remind |
๊ฒฐ์ ์ฌํญ + ์ต๊ทผ ์ธ์
ํ๊ธฐ (๊ธฐ๋ณธ N=2, 8KB cap; --deep N=5; --mockups) |
/hams:save-mockup |
HTML/์ด๋ฏธ์ง mockup ์ hamstern-data ์ cross-session ๋ณด์กด |
/hams:dashboard |
local serve ๊ธฐ๋ณธ, --publish ๋ก gh-pages multi-project dashboard |
/hams:audit-decisions |
๊ฒฐ์ ์ฌํญ ํ๋น์ฑ ์ฌ๊ฒํ (๋๋ dashboard [ร] ์ ํด๋ฆฝ๋ณด๋ ๋ช
๋ น ํ๋ฆ) |
/hams:why |
ํ์์ ๊ทผ๋ณธ ์์ธ ์ถ๋ก โ ์ฌ๋ฐ ์ ์๊ตฌ ๋ฃฐ๋ก ๊ฒฉ์ |
/hams:rule |
ํ๋ก์ ํธ ์๊ตฌ ๋ฃฐ ๊ด๋ฆฌ (add/list/edit/remove/promote) โ .claude/rules/ |
/hams:deeptalk |
Socratic ํ ๋ก ๋ชจ๋ (์ฝ๋ ์์ ์์ด ํธ๋ ์ด๋์คํ ํ์) |
/hams:diary |
๋ก์ปฌ ๋งํฌ๋ค์ด โ GitHub Pages ๋ธ๋ก๊ทธ ๊ฒ์ (๋ณ๋ ํ๋ฆ) |
- GitHub ์์ ์ repo ์์ฑ:
hamstern-data(private ๊ถ์ฅ) - ์ฌ์ฉ์ ๋จธ์ ์ clone (๊ธฐ๋ณธ ์์น:
~/.claude/hamstern-data) - Claude ์ธ์
์์:
/hams:init "ํ๋ก์ ํธ ์ด๋ฆ" - ์๋์ผ๋ก UUID ๋ฐ๊ธ โ
hamstern-data/projects/{uuid}/scaffolding โ active ๋ฐ์ธ๋ฉ โ commit + push - (์ต์
) GitHub Settings โ Pages โ main
/docsํ์ฑํ โ/hams:dashboard --publish๋ก ํด๋ํฐ ๋ฑ์์ ์กฐํ ๊ฐ๋ฅ
์ง๊ธ ์ธ์ ์์ ๋์ถ๋ ๊ฒฐ์ ยท์คํจยท์ด๋ฆฐ์ง๋ฌธ์ distill ํด์ ๋ ๊ณณ์ atomic ์ผ๋ก ์ด๋ค:
hamstern-data/projects/{uuid}/sessions/{id}.mdโ ์ธ์ ๋ณ full distillhamstern-data/projects/{uuid}/decisions.mdโ ๊ฒฐ์ ๋ง append (์๋ dedup)
ํธ์ถ ์์ : ๊ตต์งํ ๊ฒฐ์ ์ ๋๋ธ ์งํ, /clear ์ง์ . Claude Code CLI + Desktop ์์ชฝ ๋์ (Desktop ์์ FS ์ฐ๊ธฐ ์คํจ ์ ๋์ผ ๋งํฌ๋ค์ด์ ์ฑํ
์ ์ถ๋ ฅ โ CLI ์์ ๋ณต๋ถ).
/clear ํ ๊ฒฐ์ ์ฌํญ์ด ํ์ํด์ง๋ฉด ๋ช
์์ ์ผ๋ก ํธ์ถ. ์๋ ์ฃผ์
์์.
/hams:remind # ๋ชจ๋ decisions + ์ต๊ทผ N=2 sessions (8KB cap)
/hams:remind --deep # N=5 sessions
/hams:remind --mockups # mockup ๋ฉํ๋ ํฌํจ์ ์๋ ์ฃผ์ ์ ์ ํ๋๊ฐ:
/clear= ์ง์ง ์ปจํ ์คํธ ๋น์ฐ๊ธฐ. ์๋ ์ฃผ์ ์ GC ํจ๊ณผ๋ฅผ ๋ฐ๊ฐ์ํด.- ๊ฐ๋ฒผ์ด ์ง๋ฌธ์ ๋น ์ปจํ ์คํธ๊ฐ ๋ ๋น ๋ฅด๊ณ ์ ํ.
- ์ฌ์ฉ์๊ฐ ์์์ ์ผ๋ก "์ง๊ธ ์ด ๊ฒฐ์ ๋ค์ด ์ ์ฉ ์ค" ์์ ์ธ์งํ๋ ๊ฒ ํต์ ๋ ฅ์ ์ ๋ฆฌ.
SessionStart ํ
์๋ ์ฃผ์
์ ํ๊ธฐ. CLAUDE.md ๋ ๊ฑด๋๋ฆฌ์ง ์์ โ ๊ฒฐ์ ์ฌํญ์ ํธ์ถํ ๊ทธ ์ธ์
์๋ง ๋ค์ด๊ฐ๊ณ , ๋ค๋ฅธ ํฐ๋ฏธ๋ยท๋๋ฐ์ด์ค์ ์ํฅ 0.
UI ์ค์ผ์นยท์๋ฎฌ๋ ์ดํฐยท๋์ HTML ์ cross-session ๋ณด์กด.
/hams:save-mockup ./sketch.html "๋ก๊ทธ์ธ ํ๋ฉด v2"
# โ hamstern-data/projects/{uuid}/mockups/{slug}.html ์ ์ฅ
# โ mockups/_index.json ๊ฐฑ์
# โ (gh-pages ํ์ฑ ์) ์ฆ์ URL ๋ฐ๊ธ/hams:remind --mockups ๋ก ๋ค๋ฅธ ์ธ์
์์๋ ๋ฉํยท๋งํฌ ํ๊ธฐ.
๊ธฐ๋ณธ ๋์์ local serve โ ์ธ๋ถ ์์กด 0 ์ผ๋ก ์ฆ์ ๋์:
/hams:dashboard # ๋์ ํฌํธ + ๋ธ๋ผ์ฐ์ ์๋ ์คํ, multi-project view
/hams:dashboard --publish # docs/data/ ๋ฒ๋ค + commitยทpush โ gh-pages ๊ฒ์View ๊ตฌ์กฐ:
- ๋ฉ์ธ ํ์ด์ง: ํ๋ก์ ํธ ๋ชฉ๋ก (
projects/_index.json๊ธฐ๋ฐ) + ๊ฒ์ - per-project 4-column view: sessions / decisions / mockups / decisions-log
CDN ์์กด์ฑ: marked.js + DOMPurify 2๊ฐ. ๊ทธ ์ธ stdlib only.
dashboard ์ ๊ฒฐ์ ์ [ร] ํด๋ฆญ โ ํด๋ฆฝ๋ณด๋์ ๋ค์์ด ๋ณต์ฌ๋จ:
/hams:audit-decisions remove "<text>" --project-uuid <UUID>๋ค์ Claude ์ธ์
์ ๋ถ์ฌ๋ฃ์ด ์คํ โ decisions.md ์์ ํด๋น ์ค ์ญ์ + decisions-log.md ์ ์ ๊ฑฐ ์ด๋ฒคํธ append โ ๋ค์ dashboard publish ์ ๋ฐ์.
/hams:link "๋ก๊ทธ์ธ" # ๋ถ๋ถ ์ด๋ฆ ๋งค์นญ โ ํ๋ณด 1๊ฐ๋ฉด ์ฆ์ ๋ฐ์ธ๋ฉ
/hams:link # ์ธ์ ์์ผ๋ฉด ์ ์ฒด ๋ชฉ๋ก + ์ ํ~/.config/hamstern/active-project.json ๊ฐฑ์ . ๋๋ฐ์ด์ค๋ณ ์บ์ โ multi-device ๊ฐ ๊ฐ์ ๋ค๋ฅธ active ๊ฐ๋ฅ.
/hams:audit-decisions
# โ active ํ๋ก์ ํธ์ ๋ชจ๋ ๊ฒฐ์ ์ฌํญ์ Opus ๋ถ์์ผ๋ก 1๊ฐ์ฉ ๊ฒํ
# โ [k] Keep / [m] Modify / [d] Delete / [s] Skipactive-project.json ์์ UUID + path ์๋ resolve. dashboard [ร] ์ remove "<text>" ํ์๊ณผ ๋ณ๊ฐ ์ฌ์ฉ ์ฌ๋ก.
ํ๋ก์ ํธ์ ๋ฐ๋ณต๋๋ ์ค์๋ฅผ ์๊ตฌ ์์น์ผ๋ก ์ ํํ๋ 2๋จ๊ณ ์์คํ .
| ๊ฒฝ๋ก | ์๋ ๋ก๋ | ์ฉ๋ |
|---|---|---|
.claude/rules/{topic}.md |
session_start (eager) | ํฌ์ธํฐ (5~7์ค) |
.claude/rules/references/{topic}/* |
lazy | ๋ณธ๋ฌธ (ํธ๋ฆฌ๊ฑฐ ๋งค์นญ ์ Claude ๊ฐ Read) |
.hamstern/why/rules/{topic}.md |
โ | ์ ์ ๋ณด๊ด์ (๊ฒฉ์ ์ ) |
๊ฒฝ๋ก 1 โ ์ง๋จํ /hams:why:
1ํ์ฐจ = ๊ทผ๋ณธ ์์ธ ๋์ถ + ์ ์ ์ ์ฅ. 2ํ์ฐจ(๊ฐ์ ์์น ์ฌ๋ฐ) = ์๋ ๊ฒฉ์ ์ ์.
๊ฒฝ๋ก 2 โ ์ง์ ๋ฑ๋ก /hams:rule add:
๋ํ ์ค ๋์ถํ ํจํด์ ์ฆ์ ์๊ตฌํ.
/hams:rule add # ์ปจํ
์คํธ์์ ์๋ ์ถ์ถ โ 1์ฐจ ์ด์ โ ๊ฒ์ โ ์๊ตฌ
/hams:rule list # ๋ชฉ๋ก
/hams:rule edit {topic} # ์์
/hams:rule remove {topic} # ์ญ์
/hams:rule promote {topic} # ์ ์ โ ์๊ตฌ ์๋ ๊ฒฉ์์ค๊ณ ์์น: CLAUDE.md ์ ๋ ์ ๊ฑด๋๋ฆผ ยท ํฌ์ธํฐ ์๊ฒยท๋ณธ๋ฌธ lazy ยท ์ฌ์ฉ์ ํ์ โ ์ง์ ๋ฑ๋ก, ์ง๋จ ๊ฒฐ๊ณผ โ ๊ฒฉ์ ์ฌ๋ค๋ฆฌ.
์ฌ์ฉ์๊ฐ ๊ฒฐ๋ก ยท๊ตฌํ์ ๊ฐ์ํ์ง ์๊ณ ์๊ฒฌยทํธ๋ ์ด๋์คํ๋ฅผ ๊ตํํ๋ ค ํ ๋. ์ฝ๋ ์์ ์์ด ์ฃผ์ ํ์. ์์ฐ ํธ๋ฆฌ๊ฑฐ: "์ด๋ป๊ฒ ์๊ฐํด?", "๋ ์๊ฒฌ์?", "๊ฐ์ด ์๊ฐํด๋ณด์".
hamstern-data ์ ๋ถ๋ฆฌ๋ ๋๊ตฌ. ๋ก์ปฌ .md / .html ์ GitHub Pages ๊ฐ์ธ ๋ธ๋ก๊ทธ๋ก ๊ฒ์.
/hams:diary config repo https://github.com/myuser/my-blog.git
/hams:diary publish ./hello.md ์ผ์
/hams:diary edit hello-world
/hams:diary option # ํ ํ๋ฉด ์ฌ์ฉ๋ฒ3 ์๋ธ๋ช
๋ น (publish ยท edit ยท config) + 5 ๋์์ธ ํ
ํ๋ฆฟ (minimal ยท tech ยท lecture ยท notebook ยท magazine). ๊ฒ์ (Pagefind) ยท ๋๊ธ (giscus) ํตํฉ. ์์ธํ ์ฌ์ฉ๋ฒ์ skills/diary/SKILL.md.
์ฌ์ฉ์ ๋๋ฐ์ด์ค (CLI / Desktop / ๋ชจ๋ฐ์ผ ๋ธ๋ผ์ฐ์ )
โ /hams:record ยท /hams:save-mockup
hamstern-data/ (์ฌ์ฉ์ personal GitHub repo, private)
โโโ meta.json # schema_version, created_at
โโโ projects/
โ โโโ _index.json # UUID โ {name, last_active, counts}
โ โโโ {uuid}/
โ โโโ decisions.md # ๊ฒฐ์ ๋ง (์๋ dedup)
โ โโโ decisions-log.md # append-only ์ ๊ฑฐ ์ด๋ฒคํธ
โ โโโ sessions/{id}.md # ์ธ์
๋ณ full distill
โ โโโ mockups/
โ โโโ _index.json
โ โโโ {slug}.html
โโโ docs/ # gh-pages dashboard (--publish ์)
โโโ index.html ยท app.js ยท style.css
โโโ data/ (build.py ์ฐ์ถ)
| Cloud DB (Supabase ๋ฑ) | hamstern (git-as-DB) | |
|---|---|---|
| ์ฐ๊ธฐ | API call | git commit + push |
| ์ฝ๊ธฐ | API call | git clone / fetch |
| ๊ฒ์ | SQL/full-text | dashboard ๋๋ ripgrep |
| ์ธ๋ถ ์์กด | SaaS account | GitHub ๋ง |
| ๋น์ฉ | ์ฌ์ฉ๋ | 0 (private repo) |
| ์ด๋ ฅ | DB log | git history (์๋) |
| Multi-device sync | server-side | git pull/push |
| Lock-in | provider ์ข ์ | plain markdown |
| ํ๊ฒฝ | ์ฐ๊ธฐ | ์ฝ๊ธฐ |
|---|---|---|
| Claude Code CLI | โ | โ |
| Claude Desktop App | โ (FS write ๊ฐ๋ฅ ์) | โ |
| Cloud Claude.ai/code | โ (PAT ํ์) | โ |
| ํด๋ํฐ ๋ธ๋ผ์ฐ์ | โ | โ
(dashboard --publish URL) |
meta.json:{schema_version, created_at}projects/_index.json:{ {uuid}: {name, last_active, decision_count, session_count, mockup_count} }mockups/_index.json:{ {slug}: {title, created_at, source} }decisions.md:## {category}ํค๋ +- {text} <!-- session: {id} -->์คdecisions-log.md:## removedํค๋ + ์ ๊ฑฐ ์ด๋ฒคํธ append-onlysessions/{id}.md:## ๊ฒฐ์ /## ์คํจ/## ์ด๋ฆฐ ์ง๋ฌธ3-์น์
~/.config/hamstern/active-project.json (๋๋ฐ์ด์ค๋ณ):
{ "uuid": "...", "hamstern_data_path": "/home/user/.claude/hamstern-data" }- bash โ Python
-c๋ณด๊ฐ escape: single quote ์์ ์ฑ ์ฝํจ (์ค์ฌ์ฉ ์ํ ๋ฎ์, hardening ๋ฐฑ๋ก๊ทธ) - uuidv7 fallback (Python <3.13): non-strict shape
- merge conflict ์๋ ํด๊ฒฐ ์์ โ ์ ๋๋ฐ์ด์ค ๋์ push ์ ์ฌ์ฉ์ ์๋ ํด๊ฒฐ
- gh-pages publish ํ์ฑํ๋ 1ํ์ฑ manual (Settings โ Pages โ main /docs)
- Sub-A (2026-04-26) โ Rules system (
/hams:why+/hams:rule), 2-๊ฒฝ๋ก ๋ฑ๋ก (์ง๋จํ / ์ง์ ) - Sub-B (2026-04-26~) โ diary (๋ธ๋ก๊ทธ ๊ฒ์), 3 ์๋ธ๋ช ๋ น + 5 ํ ํ๋ฆฟ + ๊ฒ์ยท๋๊ธ
- Sub-C (2026-05-23) โ
/hams:record์ ์ค, hooks ์ ๋ถ ์ ๊ฑฐ, 3-tier โ 2-tier ํํํ - Sub-D (2026-05-23) โ Dashboard static gh-pages + ๋ธ๋ผ์ฐ์ ํธ์ง UI (
[ร]ํด๋ฆฝ๋ณด๋ ํ๋ฆ) - Sub-E (2026-05-23) โ Dashboard local serve ๊ธฐ๋ณธ, dynamic port + path traversal ์ฐจ๋จ
- Sub-project F (2026-05-24) โ hamstern-data repo + UUID per project (git-as-DB) โ ํต์ฌ ๋น์ ์คํ. ์ ๊ท skill (
init/link/save-mockup) + multi-project dashboard
- Hardening pass โ bash โ Python ๋ณด๊ฐ escape ๊ฒฌ๊ณ ํ,
uuid7ํ์ค ์ฑํ (Python 3.13+) - Hybrid index โ Supabase ๊ฐ์ ๊ฐ๋ฒผ์ด read-only index ๋ก ํด๋ํฐ ๊ฒ์ ์๋ต ๊ฐ์ (์ ํ)
- Mobile PWA โ dashboard ์ offline-first PWA ํ (์๋น์ค ์์ปค + ์บ์)
- Conflict-aware sync โ ์ ๋๋ฐ์ด์ค ๋์ push ์ ์ฌ์ฉ์์๊ฒ ๋จธ์ง ํ๋ณด ์ ์
- Decision graph โ ๊ฒฐ์ ์ฌํญ ๊ฐ ์์กด ๊ด๊ณ ์๊ฐํ (Graphviz / mermaid)
๋ด๋ถ ๋๊ตฌ. PR / issue ํ์. docs/conventions.md ์ ์ ์ฅ์ ๋ ์ด์์ยท๊ฒฝ๋ก ํด์ ๊ท์ฝ์ ๋ฐ๋ฅธ๋ค.
์ฌ๋์ ๋ช ๋ น์ด๋ ๋ชจ๋ ์ฝ๋ก ํ๊ธฐ (
/hams:<name>) โ Claude Code ๊ณต์ plugin skill invocation ํ์ค.