π μμ€ν λ©μμ§: μ΄ Skillμ΄ νΈμΆλλ©΄
[SEMO] Skill: semo-architecture-checker νΈμΆμμ€ν λ©μμ§λ₯Ό 첫 μ€μ μΆλ ₯νμΈμ.
semo-architecture-checker Skill
.claude λλ ν 리 ꡬ쑰 κ²μ¦ λ° μλ μμ
νΈμΆ λͺ¨λ
| λͺ¨λ | λμ | μ¬μ© μν© |
|------|------|----------|
| (κΈ°λ³Έ) | κ²μ¦ + μλ μμ | μλ νΈμΆ, μ
λ°μ΄νΈ ν |
| --check-only | κ²μ¦λ§ μν, μμ μν¨ | version-updater Phase 2μμ νΈμΆ |
--check-only λͺ¨λ
κ²μ¦λ§ μννκ³ μλ μμ νμ§ μμ΅λλ€:
μΆλ ₯ ν¬λ§· (version-updater νμ±μ©):
[SEMO] Skill: semo-architecture-checker --check-only μ€ν
## ꡬ쑰 κ²μ¦ κ²°κ³Ό
| νλͺ© | μν | λΉκ³ |
|------|------|------|
| semo-core | β
| μ‘΄μ¬ |
| semo-{pkg} | β
| semo-pm |
| CLAUDE.md | β
| μ¬λ§ν¬ μ ν¨ |
| _shared | β
| semo-core/_shared |
| agents/ | β οΈ | κΉ¨μ§ μ¬λ§ν¬ 2κ° |
| skills/ | β
| 8 symlinks |
| commands/SEMO | β | .merged λ§μ»€ λλ½ |
**κ²°κ³Ό**: β οΈ λ¬Έμ λ°κ²¬ (μλ μμ νμ)
κ²°κ³Ό μν:
β ꡬ쑰 μ μ- λͺ¨λ κ²μ¦ ν΅κ³Όβ οΈ λ¬Έμ λ°κ²¬- μμ νμ (version-updaterκ° κΈ°λ³Έ λͺ¨λλ‘ μ¬νΈμΆ κ²°μ )
Purpose
SEMOκ° μ€μΉλ .claude λλ ν 리μ ꡬ쑰λ₯Ό κ²μ¦νκ³ , λ¬Έμ λ°κ²¬ μ μλμΌλ‘ μμ ν©λλ€.
Trigger
/SEMO:healthλͺ λ Ήμ΄version-updaterμ λ°μ΄νΈ μλ£ ν μλ νΈμΆ- "μ¬λ§ν¬ νμΈ", ".claude νμΈ", "SEMO μν" ν€μλ
Workflow
1. ν¨ν€μ§ κ°μ§
# μ€μΉλ λͺ¨λ ν¨ν€μ§ κ°μ§
INSTALLED_PKGS=()
for p in po next qa meta pm backend infra design; do
[ -d ".claude/semo-$p" ] && INSTALLED_PKGS+=("$p")
done
# 첫 λ²μ§Έ ν¨ν€μ§λ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©
PKG="${INSTALLED_PKGS[0]:-}"
2. κ²μ¦ νλͺ©
| νλͺ© | κ²μ¦ | μμ | |------|------|------| | semo-core | λλ ν 리 μ‘΄μ¬ | - | | semo-{pkg} | λλ ν 리 μ‘΄μ¬ | - | | CLAUDE.md | μ¬λ§ν¬ μ ν¨μ± | μ¬μμ± | | _shared | μ¬λ§ν¬ μ ν¨μ± (semo-core/_shared) | μ¬μμ± | | agents/ | .merged λ§μ»€ + μ¬λ§ν¬ + λλ½ κ°μ§ | μ¬μμ± + μΆκ° | | skills/ | .merged λ§μ»€ + μ¬λ§ν¬ + λλ½ κ°μ§ | μ¬μμ± + μΆκ° | | commands/SEMO/ | .merged λ§μ»€ + μ¬λ§ν¬ + λλ½ κ°μ§ | μ¬μμ± + μΆκ° |
3. κ²μ¦ μ€ν
# κΉ¨μ§ μ¬λ§ν¬ νμ§
find .claude -type l ! -exec test -e {} \; -print 2>/dev/null
# .merged λ§μ»€ νμΈ
[ -f ".claude/agents/.merged" ] && echo "agents: OK" || echo "agents: MISSING"
[ -f ".claude/skills/.merged" ] && echo "skills: OK" || echo "skills: MISSING"
[ -f ".claude/commands/SEMO/.merged" ] && echo "commands/SEMO: OK" || echo "commands/SEMO: MISSING"
# _shared μ¬λ§ν¬ νμΈ (semo-core/_shared μ°Έμ‘°μ©)
if [ -L ".claude/_shared" ]; then
target=$(readlink ".claude/_shared")
[ "$target" = "semo-core/_shared" ] && echo "_shared: OK" || echo "_shared: WRONG_TARGET ($target)"
elif [ -d ".claude/_shared" ]; then
echo "_shared: DIRECTORY (should be symlink)"
else
echo "_shared: MISSING"
fi
# π΄ λλ½ μ¬λ§ν¬ κ°μ§ (NEW - Issue #7)
# semo-coreμ semo-{pkg}μ μ»΄ν¬λνΈκ° .claude/{dir}μ λͺ¨λ μ¬λ§ν¬λμ΄ μλμ§ νμΈ
for skill in .claude/semo-core/skills/*/; do
name=$(basename "$skill")
[ ! -e ".claude/skills/$name" ] && echo "skills: MISSING $name"
done
4. μλ μμ
λ¬Έμ λ°κ²¬ μ install-sax.shμ λμΌν λ‘μ§μΌλ‘ μμ :
# CLAUDE.md μμ
rm -f ".claude/CLAUDE.md"
ln -s "semo-$PKG/CLAUDE.md" ".claude/CLAUDE.md"
# _shared μ¬λ§ν¬ μμ
rm -rf ".claude/_shared"
ln -s "semo-core/_shared" ".claude/_shared"
# λ³ν© λλ ν 리 μμ
# β references/fix-logic.md μ°Έμ‘°
5. κ²°κ³Ό 보κ³
## .claude λλ ν 리 κ²μ¦ κ²°κ³Ό
| νλͺ© | μν | λΉκ³ |
|------|------|------|
| ν¨ν€μ§ | β
| semo-pm |
| CLAUDE.md | β
| semo-pm/CLAUDE.md |
| _shared | β
| semo-core/_shared |
| agents/ | β οΈ β β
| μ¬λ§ν¬ 2κ° μ¬μμ± |
| skills/ | β
| 8 symlinks |
| commands/SEMO | β β β
| λλ ν 리 μμ± + 4 symlinks |
**κ²°κ³Ό**: 2κ° νλͺ© μλ μμ λ¨
π΄ μΈμ μ¬μμ κΆμ₯
μ¬λ§ν¬ μ¬μ€μ νμλ μΈμ μ¬μμμ κΆμ₯ν©λλ€.
μ¬μμμ΄ νμν κ²½μ°
| μν© | μ¬μμ νμ | μ΄μ | |------|-------------|------| | μ¬λ§ν¬ λλ ν 리 β μ€μ λλ ν 리 λ³ν | β κΆμ₯ | Claude Codeκ° μΊμν κ²½λ‘ λ¬΄ν¨ν | | μ skill/agent μ¬λ§ν¬ μΆκ° | β κΆμ₯ | μ μ»΄ν¬λνΈ μΈμ νμ | | κΉ¨μ§ μ¬λ§ν¬ μμ | β οΈ μ ν | κΈ°μ‘΄ μΊμμ λ°λΌ λ€λ¦ | | .merged λ§μ»€λ§ μΆκ° | β λΆνμ | κ²½λ‘ λ³κ²½ μμ |
κ²°κ³Ό λ©μμ§μ μλ΄ ν¬ν¨
μ¬λ§ν¬κ° μ¬μ€μ λ κ²½μ° μλ μλ΄λ₯Ό μΆλ ₯:
β οΈ **μΈμ
μ¬μμ κΆμ₯**
μ¬λ§ν¬ κ΅¬μ‘°κ° λ³κ²½λμμ΅λλ€. Claude Codeκ° λ³κ²½λ κ²½λ‘λ₯Ό μΈμνλλ‘
**μ μΈμ
μ μμ**νλ κ²μ κΆμ₯ν©λλ€.
μ¬μμ λ°©λ²: Claude Code μ°½μ λ«κ³ λ€μ μ΄κΈ°
νλ¨ κΈ°μ€
# μ¬λ§ν¬ μ¬μ€μ μ¬λΆ κ°μ§
SYMLINK_CHANGED=false
# μ¬λ§ν¬ λλ ν λ¦¬κ° μ€μ λλ ν λ¦¬λ‘ λ³νλ κ²½μ°
if [ "$dir_was_symlink" = true ]; then
SYMLINK_CHANGED=true
fi
# μ μ¬λ§ν¬κ° μμ±λ κ²½μ°
if [ $new_symlinks_count -gt 0 ]; then
SYMLINK_CHANGED=true
fi
π΄ λ€μ€ ν¨ν€μ§ κ°μ§
νλμ νλ‘μ νΈμλ νλμ SEMO ν¨ν€μ§λ§ μ§μλ©λλ€.
κ²μ¦ λ‘μ§
INSTALLED_PKGS=()
for p in po next qa meta pm backend infra design; do
[ -d ".claude/semo-$p" ] && INSTALLED_PKGS+=("$p")
done
if [ ${#INSTALLED_PKGS[@]} -gt 1 ]; then
# λ€μ€ ν¨ν€μ§ κ²½κ³ μΆλ ₯
fi
μΆλ ₯ νμ
λ€μ€ ν¨ν€μ§κ° κ°μ§λ κ²½μ°:
π΄ **λ€μ€ ν¨ν€μ§ μ€μΉ κ°μ§**
μ€μΉλ ν¨ν€μ§: semo-next, semo-design
β οΈ νλμ νλ‘μ νΈμλ νλμ SEMO ν¨ν€μ§λ§ κΆμ₯λ©λλ€.
μΆ©λλ‘ μΈν΄ μΌλΆ κΈ°λ₯μ΄ μ μ λμνμ§ μμ μ μμ΅λλ€.
**ν΄κ²° λ°©λ²**: `./install-sax.sh {μνλν¨ν€μ§} --force`
κ²°κ³Ό ν μ΄λΈμ ν¬ν¨
λ€μ€ ν¨ν€μ§ κ°μ§ μ κ²μ¦ κ²°κ³Ό ν μ΄λΈ μλ¨μ κ²½κ³ μΆκ°:
| νλͺ© | μν | λΉκ³ | |------|------|------| | λ€μ€ ν¨ν€μ§ | π΄ | semo-next, semo-design λμ μ€μΉ | | semo-core | β | μ‘΄μ¬ | | ... | ... | ... |
π΄ Windows νκ²½ μ§μ
Windowsμμλ μ¬λ§ν¬ μμ±μ μ μ½μ΄ μμ΅λλ€.
μλ ν΄λ°± λμ
| μν© | λμ | |------|------| | μ¬λ§ν¬ μμ± μ±κ³΅ | μ μ μ¬λ§ν¬ μ¬μ© | | μ¬λ§ν¬ μμ± μ€ν¨ | νμΌ/λλ ν 리 볡μ¬λ‘ λ체 |
κ²°κ³Ό λ©μμ§
μ¬λ§ν¬ μ€ν¨ μ μλμ κ°μ΄ νμλ©λλ€:
| νλͺ© | μν | λΉκ³ |
|------|------|------|
| CLAUDE.md | β οΈ | 볡μ¬λ¨ (Windows) |
| agents/ | β οΈ | 3κ° λ³΅μ¬λ¨ |
β οΈ **Windows νκ²½ μλ¦Ό**
μΌλΆ μ¬λ§ν¬κ° νμΌ λ³΅μ¬λ‘ λ체λμμ΅λλ€.
μλ³Έ νμΌ μμ μ μλμΌλ‘ λ€μ μ€μΉν΄μΌ ν©λλ€.
μ¬λ§ν¬ μ¬μ©μ μν κ²½μ°
- κ°λ°μ λͺ¨λ νμ±ν: Windows μ€μ β κ°λ°μμ© β κ°λ°μ λͺ¨λ ON
- λλ κ΄λ¦¬μ κΆν μ€ν: ν°λ―Έλμ κ΄λ¦¬μ κΆνμΌλ‘ μ€ν
- μ¬μ€μΉ:
./install-sax.sh {ν¨ν€μ§} --force
λ³΅μ¬ λͺ¨λμ μ μ½
| νλͺ© | μ¬λ§ν¬ | λ³΅μ¬ | |------|--------|------| | μλ³Έ μμ μ μλ λ°μ | β | β | | λμ€ν¬ κ³΅κ° | μ μ½ | μΆκ° μ¬μ© | | SEMO μ λ°μ΄νΈ ν | μλ λ°μ | μ¬μ€μΉ νμ |
References
- Fix Logic - μλ μμ λ‘μ§ μμΈ