Help us improve
Share bugs, ideas, or general feedback.
From claude-forge
Analyzes session changes to detect gaps in verification skills, dynamically creates or updates verify-* skills, and manages the project CLAUDE.md to keep skill coverage in sync.
npx claudepluginhub sangrokjung/claude-forge --plugin claude-forgeHow this skill is triggered β by the user, by Claude, or both
Slash command
/claude-forge:manage-skills [μ νμ¬ν: νΉμ μ€ν¬ μ΄λ¦ λλ μ§μ€ν μμ][μ νμ¬ν: νΉμ μ€ν¬ μ΄λ¦ λλ μ§μ€ν μμ]The summary Claude sees in its skill listing β used to decide when to auto-load this skill
νμ¬ μΈμ μμ λ³κ²½λ λ΄μ©μ λΆμνμ¬ κ²μ¦ μ€ν¬μ λ리ννΈλ₯Ό νμ§νκ³ μμ ν©λλ€:
Audits Claude Code skills against project state and usage, detects redundancies, consolidates/merges/archives safely with backups, confirmations, and rollbacks.
Refines and validates existing Claude Code skills for clarity, efficiency, and production readiness. Use for improving structure, best practices, token reduction, and production checks.
Creates, fixes, analyzes, and validates skills for AI agents. Includes scripts for structure checks, quality analysis, and character budget management.
Share bugs, ideas, or general feedback.
νμ¬ μΈμ μμ λ³κ²½λ λ΄μ©μ λΆμνμ¬ κ²μ¦ μ€ν¬μ λ리ννΈλ₯Ό νμ§νκ³ μμ ν©λλ€:
μ΄ μ€ν¬μ ~/.claude/skills/μ μ€μΉλ κΈλ‘λ² μ€ν¬μ
λλ€.
νλ‘μ νΈλ³ verify-* μ€ν¬μ κ° νλ‘μ νΈμ .claude/skills/μ μμ±λ©λλ€.
λ±λ‘ ν
μ΄λΈμ νλ‘μ νΈλ³ CLAUDE.mdμμ κ΄λ¦¬ν©λλ€.
| μ€ν¬ μ ν | μμΉ | μ΄μ |
|---|---|---|
| manage-skills (μ΄ μ€ν¬) | ~/.claude/skills/ | λͺ¨λ νλ‘μ νΈμμ κ³΅ν΅ μ¬μ© |
| verify-implementation | ~/.claude/skills/ | λͺ¨λ νλ‘μ νΈμμ κ³΅ν΅ μ¬μ© |
| verify-* (κ²μ¦ μ€ν¬) | νλ‘μ νΈ .claude/skills/ | νλ‘μ νΈλ³ κ·μΉ/ν¨ν΄ |
νμ¬ νλ‘μ νΈμ λ±λ‘λ κ²μ¦ μ€ν¬ λͺ©λ‘μ λλ€. μ μ€ν¬ μμ±/μμ μ μ΄ λͺ©λ‘μ μ λ°μ΄νΈν©λλ€.
μ°Έκ³ : μ΄ ν μ΄λΈμ κΈλ‘λ² λ 벨μ κΈ°λ³Έκ°μ λλ€. μ€μ νλ‘μ νΈλ³ λ±λ‘μ νλ‘μ νΈ CLAUDE.mdμ
## Verify SkillsμΉμ μμ κ΄λ¦¬λ©λλ€.
| μ€ν¬ | μ€λͺ | μ»€λ² νμΌ ν¨ν΄ |
|---|---|---|
(νλ‘μ νΈμμ /manage-skillsλ‘ μμ±λ¨) | (νλ‘μ νΈ μ§μΉ¨μ λ§λ μ€ν¬μ μμ±νλ €λ©΄ /manage-skillsλ₯Ό μ€ννμΈμ) | (μλμΌλ‘ κ²°μ λ¨) |
verify-* μ€ν¬μ μμ±νκΈ° μ μ κΈ°μ‘΄ μ λ¬Έ μμ΄μ νΈκ° ν΄λΉ λλ©μΈμ μ΄λ―Έ 컀λ²νλμ§ νμΈν©λλ€. μ€λ³΅ μμ±μ ν ν° λλΉμ΄λ©° κ²°κ³Ό μΆ©λμ μ λ°ν©λλ€.
| κΈ°μ‘΄ μμ΄μ νΈ | μ»€λ² λλ©μΈ | verify-* μ€ν¬ μμ± κΈμ§ |
|---|---|---|
| security-reviewer | 보μ μ·¨μ½μ , OWASP, CWE | verify-security, verify-auth-security |
| database-reviewer | DB μ€ν€λ§, 쿼리 μ΅μ ν, λ§μ΄κ·Έλ μ΄μ | verify-db, verify-schema, verify-migration |
| code-reviewer | μ½λ νμ§, λ€μ΄λ°, 볡μ‘λ | verify-code-quality, verify-naming |
| build-error-resolver | λΉλ μ€λ₯, νμ μ€λ₯ | verify-build, verify-types |
| e2e-runner | E2E ν μ€νΈ | verify-e2e |
μ verify-* μ€ν¬ μμ± μμ² μ:
IF μ μμ΄μ νΈ-λλ©μΈ λ§€νμ ν΄λΉνλ κ²½μ°:
β SKIP: "μ΄ λλ©μΈμ {μμ΄μ νΈλͺ
} μμ΄μ νΈκ° λ΄λΉν©λλ€" μλ΄
ELSE IF μμ΄μ νΈκ° μΌλΆλ§ 컀λ²νλ κ²½μ°:
β μμ΄μ νΈκ° 컀λ²νμ§ μλ λΆλΆλ§ verify-* μ€ν¬λ‘ μμ±
ELSE:
β μ μ μμ± μ§ν
νμ¬ μΈμ μμ λ³κ²½λ λͺ¨λ νμΌμ μμ§ν©λλ€:
# 컀λ°λμ§ μμ λ³κ²½μ¬ν
git diff HEAD --name-only
# νμ¬ λΈλμΉμ μ»€λ° (mainμμ λΆκΈ°λ κ²½μ°)
git log --oneline main..HEAD 2>/dev/null
# mainμμ λΆκΈ°λ μ΄νμ λͺ¨λ λ³κ²½μ¬ν
git diff main...HEAD --name-only 2>/dev/null
μ€λ³΅μ μ κ±°ν λͺ©λ‘μΌλ‘ ν©μΉ©λλ€. μ νμ μΈμλ‘ μ€ν¬ μ΄λ¦μ΄λ μμμ΄ μ§μ λ κ²½μ° κ΄λ ¨ νμΌλ§ νν°λ§ν©λλ€.
νμ: μ΅μμ λλ ν 리(첫 1-2 κ²½λ‘ μΈκ·Έλ¨ΌνΈ) κΈ°μ€μΌλ‘ νμΌμ κ·Έλ£Ήνν©λλ€:
## μΈμ
λ³κ²½μ¬ν κ°μ§
**μ΄ μΈμ
μμ Nκ° νμΌ λ³κ²½λ¨:**
| λλ ν 리 | νμΌ |
|----------|------|
| src/components | `Button.tsx`, `Modal.tsx` |
| src/server | `router.ts`, `handler.ts` |
| tests | `api.test.ts` |
| (루νΈ) | `package.json`, `.eslintrc.js` |
νλ‘μ νΈ CLAUDE.mdμ ## Verify Skills μΉμ
μμ λ±λ‘λ μ€ν¬ λͺ©λ‘μ μ½μ΅λλ€.
κΈλ‘λ² λ 벨μ λ±λ‘ ν
μ΄λΈλ μ°Έμ‘°ν©λλ€.
λ±λ‘λ μ€ν¬μ΄ 0κ°μΈ κ²½μ°, Step 4 (CREATE vs UPDATE κ²°μ )λ‘ λ°λ‘ μ΄λν©λλ€. λͺ¨λ λ³κ²½ νμΌμ΄ "UNCOVERED"λ‘ μ²λ¦¬λ©λλ€.
λ±λ‘λ μ€ν¬μ΄ 1κ° μ΄μμΈ κ²½μ°, κ° μ€ν¬μ .claude/skills/verify-<name>/SKILL.mdλ₯Ό μ½κ³ λ€μμμ μΆκ° νμΌ κ²½λ‘ ν¨ν΄μ μΆμΆν©λλ€:
Step 1μμ μμ§ν κ° λ³κ²½ νμΌμ λν΄, λ±λ‘λ μ€ν¬μ ν¨ν΄κ³Ό λμ‘°ν©λλ€. νμΌμ΄ μ€ν¬κ³Ό λ§€μΉλλ 쑰건:
### νμΌ -> μ€ν¬ λ§€ν
| μ€ν¬ | νΈλ¦¬κ±° νμΌ (λ³κ²½λ νμΌ) | μ‘μ
|
|------|--------------------------|------|
| verify-api | `router.ts`, `handler.ts` | CHECK |
| verify-ui | `Button.tsx` | CHECK |
| (μ€ν¬ μμ) | `package.json`, `.eslintrc.js` | UNCOVERED |
μν₯λ°μ(AFFECTED) κ° μ€ν¬(λ§€μΉλ λ³κ²½ νμΌμ΄ μλ μ€ν¬)μ λν΄, μ 체 SKILL.mdλ₯Ό μ½κ³ λ€μμ μ κ²ν©λλ€:
λ°κ²¬λ κ° κ°μ κΈ°λ‘ν©λλ€:
| μ€ν¬ | κ° μ ν | μμΈ |
|------|---------|------|
| verify-api | νμΌ λλ½ | `src/server/newHandler.ts`κ° Related Filesμ μμ |
| verify-ui | μ ν¨ν΄ | μ μ»΄ν¬λνΈκ° κ²μ¬λμ§ μλ κ·μΉμ μ¬μ© |
| verify-test | μ€λλ κ° | μ€μ νμΌμ ν
μ€νΈ λ¬λ ν¨ν΄μ΄ λ³κ²½λ¨ |
λ€μ κ²°μ νΈλ¦¬λ₯Ό μ μ©ν©λλ€:
컀λ²λμ§ μμ κ° νμΌ κ·Έλ£Ήμ λν΄:
IF κΈ°μ‘΄ μ λ¬Έ μμ΄μ νΈκ° ν΄λΉ λλ©μΈμ 컀λ²νλ κ²½μ°:
-> "μμ΄μ νΈ μμ"μΌλ‘ νμ (verify-* μ€ν¬ λΆνμ)
ELSE IF κΈ°μ‘΄ μ€ν¬μ λλ©μΈκ³Ό κ΄λ ¨λ νμΌμΈ κ²½μ°:
-> κ²°μ : κΈ°μ‘΄ μ€ν¬ UPDATE (컀λ²λ¦¬μ§ νμ₯)
ELSE IF 3κ° μ΄μμ κ΄λ ¨ νμΌμ΄ κ³΅ν΅ κ·μΉ/ν¨ν΄μ 곡μ νλ κ²½μ°:
-> κ²°μ : μ verify μ€ν¬ CREATE
ELSE:
-> "λ©΄μ "λ‘ νμ (μ€ν¬ λΆνμ)
κ²°κ³Όλ₯Ό μ¬μ©μμκ² μ μν©λλ€:
### μ μ μ‘μ
**μμ΄μ νΈ μμ** (Nκ°)
- `src/auth/*.ts` -- security-reviewer μμ΄μ νΈκ° 보μ κ²μ¦ λ΄λΉ
- `src/db/*.ts` -- database-reviewer μμ΄μ νΈκ° DB κ²μ¦ λ΄λΉ
**κ²°μ : κΈ°μ‘΄ μ€ν¬ UPDATE** (Nκ°)
- `verify-api` -- λλ½λ νμΌ μ°Έμ‘° 2κ° μΆκ°, νμ§ ν¨ν΄ μ
λ°μ΄νΈ
- `verify-test` -- μ μ€μ ν¨ν΄μ λν νμ§ λͺ
λ Ήμ΄ μ
λ°μ΄νΈ
**κ²°μ : μ μ€ν¬ CREATE** (Mκ°)
- μ μ€ν¬ νμ -- <ν¨ν΄ μ€λͺ
> μ»€λ² (Xκ° λ―Έμ»€λ² νμΌ)
**μ‘μ
λΆνμ:**
- `package.json` -- μ€μ νμΌ, λ©΄μ
- `README.md` -- λ¬Έμ, λ©΄μ
AskUserQuestionμ μ¬μ©νμ¬ νμΈν©λλ€:
μ¬μ©μκ° μ λ°μ΄νΈλ₯Ό μΉμΈν κ° μ€ν¬μ λν΄, νμ¬ SKILL.mdλ₯Ό μ½κ³ λμ νΈμ§μ μ μ©ν©λλ€:
κ·μΉ:
μμ -- Related Filesμ νμΌ μΆκ°:
## Related Files
| File | Purpose |
|------|---------|
| ... κΈ°μ‘΄ νλͺ© ... |
| `src/server/newHandler.ts` | μ ν¨μ± κ²μ¬κ° ν¬ν¨λ μ μμ² νΈλ€λ¬ |
μμ -- νμ§ λͺ λ Ήμ΄ μΆκ°:
### Step N: μ ν¨ν΄ κ²μ¦
**νμΌ:** `path/to/file.ts`
**κ²μ¬:** κ²μ¦ν λ΄μ©μ λν μ€λͺ
.
```bash
grep -n "pattern" path/to/file.ts
```
**μλ°:** μλͺ»λ κ²½μ°μ λͺ¨μ΅.
μ€μ: μ μ€ν¬μ μμ±ν λ, λ°λμ μ¬μ©μμκ² μ€ν¬ μ΄λ¦μ νμΈλ°μμΌ ν©λλ€.
μλ‘ μμ±ν κ° μ€ν¬μ λν΄:
μμ΄μ νΈ μ€λ³΅ νμΈ -- μ "μμ΄μ νΈ μ€λ³΅ κ°μ§" μΉμ μ λ§€ν ν μ΄λΈμ μ°Έμ‘°νμ¬ ν΄λΉ λλ©μΈμ μ λ¬Έ μμ΄μ νΈκ° μλμ§ νμΈ
νμ -- κ΄λ ¨ λ³κ²½ νμΌμ μ½μ΄ ν¨ν΄μ κΉμ΄ μ΄ν΄ν©λλ€
μ¬μ©μμκ² μ€ν¬ μ΄λ¦ νμΈ -- AskUserQuestionμ μ¬μ©ν©λλ€:
μ€ν¬μ΄ 컀λ²ν ν¨ν΄/λλ©μΈμ μ μνκ³ , μ¬μ©μμκ² μ΄λ¦μ μ 곡νκ±°λ νμΈνλλ‘ μμ²ν©λλ€.
μ΄λ¦ κ·μΉ:
verify-λ‘ μμν΄μΌ ν©λλ€ (μ: verify-auth, verify-api, verify-caching)verify- μ λμ¬ μμ΄ μ΄λ¦μ μ 곡νλ©΄ μλμΌλ‘ μμ μΆκ°νκ³ μ¬μ©μμκ² μ립λλ€verify-error-handling, verify_error_handling μλ)μμ± -- νλ‘μ νΈμ .claude/skills/verify-<name>/SKILL.mdλ₯Ό λ€μ ν
νλ¦Ώμ λ°λΌ μμ±ν©λλ€:
---
name: verify-<name>
description: <ν μ€ μ€λͺ
>. <νΈλ¦¬κ±° 쑰건> ν μ¬μ©.
disable-model-invocation: true
---
νμ μΉμ :
lsλ‘ κ²μ¦, νλ μ΄μ€νλ λΆκ°)3-way λκΈ°ν -- μ μ€ν¬ μμ± ν λ°λμ μλ 3κ° νμΌμ μ λ°μ΄νΈν©λλ€:
5a. μ΄ νμΌ μ체 (manage-skills/SKILL.md) μ
λ°μ΄νΈ:
| verify-<name> | <μ€λͺ
> | <μ»€λ² νμΌ ν¨ν΄> |5b. verify-implementation/SKILL.md μ
λ°μ΄νΈ:
| <λ²νΈ> | verify-<name> | <μ€λͺ
> |~/.claude/skills/verify-implementation/SKILL.md5c. νλ‘μ νΈ CLAUDE.md μ
λ°μ΄νΈ:
## Verify Skills ν
μ΄λΈμ μ μ€ν¬ νμ μΆκ°ν©λλ€## Skills μλμ ## Verify Skills μΉμ
μ μμ±ν©λλ€| verify-<name> | <ν μ€ μ€λͺ
> | <μ»€λ² νμΌ ν¨ν΄> |λͺ¨λ νΈμ§ ν:
ls <file-path> 2>/dev/null || echo "MISSING: <file-path>"
manage-skills/SKILL.mdμ λ±λ‘λ κ²μ¦ μ€ν¬ ν
μ΄λΈverify-implementation/SKILL.mdμ μ€ν λμ μ€ν¬ ν
μ΄λΈCLAUDE.mdμ Verify Skills ν
μ΄λΈμ΅μ’ λ³΄κ³ μλ₯Ό νμν©λλ€:
## μΈμ
μ€ν¬ μ μ§λ³΄μ λ³΄κ³ μ
### λΆμλ λ³κ²½ νμΌ: Nκ°
### μμ΄μ νΈ μμ: Aκ°
- `src/auth/*` -> security-reviewer (보μ κ²μ¦)
- `src/db/*` -> database-reviewer (DB κ²μ¦)
### μ
λ°μ΄νΈλ μ€ν¬: Xκ°
- `verify-<name>`: Nκ°μ μ κ²μ¬ μΆκ°, Related Files μ
λ°μ΄νΈ
- `verify-<name>`: μ ν¨ν΄μ λν νμ§ λͺ
λ Ήμ΄ μ
λ°μ΄νΈ
### μμ±λ μ€ν¬: Yκ°
- `verify-<name>`: <ν¨ν΄> 컀λ²
### 3-way λκΈ°ν μν:
- `manage-skills/SKILL.md`: λ±λ‘λ κ²μ¦ μ€ν¬ ν
μ΄λΈ μ
λ°μ΄νΈ
- `verify-implementation/SKILL.md`: μ€ν λμ μ€ν¬ ν
μ΄λΈ μ
λ°μ΄νΈ
- νλ‘μ νΈ `CLAUDE.md`: Verify Skills ν
μ΄λΈ μ
λ°μ΄νΈ
### μν₯μλ μ€ν¬: Zκ°
- (κ΄λ ¨ λ³κ²½μ¬ν μμ)
### λ―Έμ»€λ² λ³κ²½μ¬ν (μ μ© μ€ν¬ μμ):
- `path/to/file` -- λ©΄μ (μ¬μ )
μμ±λκ±°λ μ λ°μ΄νΈλ λͺ¨λ μ€ν¬μ λ€μμ κ°μΆμ΄μΌ ν©λλ€:
lsλ‘ κ²μ¦), νλ μ΄μ€νλκ° μλ κ²| File | Purpose |
|---|---|
~/.claude/skills/verify-implementation/SKILL.md | ν΅ν© κ²μ¦ μ€μΌμ€νΈλ μ΄ν° (μ΄ μ€ν¬μ΄ μ€ν λμ λͺ©λ‘μ κ΄λ¦¬) |
~/.claude/skills/manage-skills/SKILL.md | μ΄ νμΌ μ체 (λ±λ‘λ κ²μ¦ μ€ν¬ λͺ©λ‘μ κ΄λ¦¬) |
νλ‘μ νΈ CLAUDE.md | νλ‘μ νΈ μ§μΉ¨ (μ΄ μ€ν¬μ΄ Verify Skills μΉμ μ κ΄λ¦¬) |
~/.claude/skills/verification-engine/SKILL.md | κΈ°μ κ²μ¦ μμ§ (λΉλ/νμ /λ¦°νΈ/ν μ€νΈ - μ΄ μ€ν¬κ³Ό μνΈλ³΄μ) |
~/.claude/agents/ | μ λ¬Έ μμ΄μ νΈ λλ ν 리 (μ€λ³΅ κ°μ§ μ°Έμ‘°) |
λ€μμ λ¬Έμ κ° μλλλ€:
package-lock.json, yarn.lock, pnpm-lock.yaml, Cargo.lock, μλ μμ±λ λ§μ΄κ·Έλ μ΄μ
νμΌ, λΉλ μΆλ ₯λ¬Όμ μ€ν¬ 컀λ²λ¦¬μ§κ° λΆνμpackage.json/Cargo.tomlμ λ²μ λ²ν, λ¦°ν°/ν¬λ§€ν° μ€μ μ μ¬μν λ³κ²½μ μ μ€ν¬μ΄ λΆνμREADME.md, CHANGELOG.md, LICENSE λ±μ κ²μ¦μ΄ νμν μ½λ ν¨ν΄μ΄ μλfixtures/, __fixtures__/, test-data/)μ νλ‘λμ
μ½λκ° μλvendor/, node_modules/ λλ 볡μ¬λ λΌμ΄λΈλ¬λ¦¬ λλ ν 리μ νμΌμ μΈλΆ κ·μΉμ λ°λ¦.github/, .gitlab-ci.yml, Dockerfile λ±μ μΈνλΌμ΄λ©°, κ²μ¦ μ€ν¬μ΄ νμν μ ν리μΌμ΄μ
ν¨ν΄μ΄ μλ.claude/ λλ ν 리 νμΌ -- μ€ν¬, μμ΄μ νΈ, 컀맨λ, μ€μ νμΌμ λ©ν μ€μ μ΄λ©° verify-* μ€ν¬ λμμ΄ μλ| νλͺ© | verification-engine | manage-skills + verify-* |
|---|---|---|
| κ²μ¦ λμ | κΈ°μ μ μ ν©μ± (λΉλ, νμ , λ¦°νΈ, ν μ€νΈ) | ν¨ν΄/κ·μΉ μ€μ (μ½λ© κ·μΉ, μν€ν μ² ν¨ν΄, νλ‘μ νΈ κ·μ½) |
| μ€ν λ°©μ | μλΈμμ΄μ νΈ (fresh context) | μ§μ μ€ν λλ μλΈμμ΄μ νΈ (μ€ν¬ μμ λ°λΌ) |
| μλ μμ | Fixable 9μ’ μλ μμ | μ¬μ©μ μΉμΈ ν μμ |
| ν΅ν© μ§μ | /handoff-verify 컀맨λ | /verify-implementation 컀맨λ |
λ μμ€ν μ μνΈλ³΄μμ΄λ©° λμ²΄κ° μλλλ€: