κ°μΈμ© κ°λ° μλν λ° μμ°μ± λꡬ ν€νΈ - κ°μΈ νλ‘μ νΈμ μ€λ¬΄ νλ‘μ νΈ λͺ¨λ μ§μ
- 컀맨λ: μμ£Ό μ¬μ©νλ μμ μ μν μ¬λμ 컀맨λ
- μμ΄μ νΈ: μ½λ 리뷰, ν μ€νΈ μμ± μ λ¬Έ AI μμ΄μ νΈ
- μ€ν¬: 리ν©ν λ§, μ΅μ ν, νμ§ κ²μ¦ μλ νμ±ν μ€ν¬
- ν : νμΌ λ³κ²½ κ²μ¦, λ‘κΉ μ΄λ²€νΈ νΈλ€λ¬
- MCP ν΅ν©: μΈλΆ μλΉμ€ μ°λ (Serena, Playwright, 4.5v Vision)
- ADR μμ€ν : μν€ν μ² μμ¬κ²°μ κΈ°λ‘ μλν
- SPEC μμ€ν : νΌμ² μ€ν λ¬Έμν λ° λ³κ²½ μΆμ (EARS κΈ°λ°)
- TRUST 5: νμ§ κ²μ΄νΈ μλν
# Claude Codeμμ μ€ν
/plugin marketplace add choiho8621/set-tools# νλ¬κ·ΈμΈ λλ ν λ¦¬λ‘ μ΄λ
cd /path/to/set-tools
# μ€μΉ μ€ν¬λ¦½νΈ μ€ν
npm run link-plugin
# λλ μ§μ μ€ν
bash scripts/link.sh# Claude Code νλ¬κ·ΈμΈ λλ ν 리μ 볡μ¬
cp -r /path/to/set-tools ~/.claude/plugins/set-tools
# Claude Code μ¬μμ# Claude Codeμμ λ€μ 컀맨λ μ¬μ© κ°λ₯ νμΈ
/project-init
/spec-create
/quality-check
/trust-validate
/adr-createset-tools/
βββ .claude-plugin/
β βββ plugin.json # νλ¬κ·ΈμΈ λ§€λνμ€νΈ
βββ commands/ # μ¬λμ 컀맨λ
β βββ adr-create.md # ADR μμ±
β βββ adr-list.md # ADR λͺ©λ‘
β βββ spec-create.md # SPEC μμ± (3-file structure)
β βββ spec-update.md # SPEC λ³κ²½ λ° CHANGELOG μ
λ°μ΄νΈ
β βββ spec-diff.md # SPEC λ²μ λΉκ΅
β βββ spec-list.md # SPEC λͺ©λ‘ μ‘°ν
β βββ quality-check.md # TRUST 5 νμ§ κ²μ¦
β βββ trust-validate.md # LSP νμ§ κ²μ΄νΈ
βββ agents/ # AI μμ΄μ νΈ
β βββ code-reviewer.md
β βββ test-generator.md
βββ skills/ # μλ νμ±ν μ€ν¬
β βββ adr-generator/ # ADR μλ μμ±
β βββ spec-generator/ # SPEC μλ μμ± (EARS)
β βββ spec-updater/ # SPEC λ³κ²½ μΆμ (CHANGELOG)
β βββ trust-validator/ # TRUST 5 νμ§ κ²μ¦
βββ hooks/ # μ΄λ²€νΈ νΈλ€λ¬
β βββ hooks.json
β βββ scripts/
β βββ validate-change.sh
β βββ check-command.sh
β βββ log-prompt.sh
βββ scripts/ # ν¬νΌ μ νΈλ¦¬ν°
β βββ create-adr.sh # ADR νμΌ μμ± μ€ν¬λ¦½νΈ
β βββ adr-template.md # ADR ν
νλ¦Ώ
β βββ create-spec.sh # SPEC νμΌ μμ± μ€ν¬λ¦½νΈ
β βββ spec-template.md # SPEC μꡬμ¬ν ν
νλ¦Ώ (EARS)
β βββ plan-template.md # ꡬν κ³ν ν
νλ¦Ώ
β βββ acceptance-template.md # μΈμ κΈ°μ€ ν
νλ¦Ώ (Given/When/Then)
β βββ check-quality.sh # TRUST 5 νμ§ κ²μ¦ μ€ν¬λ¦½νΈ
β βββ helper.sh
βββ .trust.example.yaml # TRUST 5 μ€μ μμ
βββ README.md
ADR κ΄λ¦¬
/adr-create- μλ‘μ΄ ADR λ¬Έμ μμ± (λνν)/adr-list- λͺ¨λ ADR λͺ©λ‘ νμ
SPEC κ΄λ¦¬ (EARS κΈ°λ°)
/spec-create- μλ‘μ΄ νΌμ² SPEC μμ± (3-file ꡬ쑰)/spec-update- SPEC λ³κ²½ λ° CHANGELOG μλ μ λ°μ΄νΈ/spec-diff- SPEC λ²μ λ³ λ³κ²½μ¬ν λΉκ΅/spec-list- λͺ¨λ SPEC λͺ©λ‘ λ° μν μ‘°ν
TRUST 5 νμ§ κ΄λ¦¬
/quality-check- TRUST 5 νμ§ κ²μ¦ μ€ν--tested: ν μ€νΈ 컀λ²λ¦¬μ§ κ²μ¦ (85%+)--readable: κ°λ μ± κ²μ¦ (0 lint errors)--unified: ν΅μΌμ± κ²μ¦ (0 format issues)--secured: 보μ κ²μ¦ (0 vulnerabilities)--trackable: μΆμ κ°λ₯μ± κ²μ¦ (Conventional Commits)--fix: μλ μμ κ°λ₯ν νλͺ© μμ
/trust-validate- LSP νμ§ κ²μ΄νΈ κ²μ¦--phase plan: κΈ°μ€μ μΊ‘μ²--phase run: νκ· λ°©μ§ κ²μ¦--phase sync: μ΅μ’ νμ§ νμΈ
Claude Codeκ° μλμΌλ‘ νΈμΆνλ μ λ¬Έ μμ΄μ νΈ:
- Code Reviewer: μ λ¬Έ μ½λ 리뷰 λ° νμ§ λΆμ
- Test Generator: ν¬κ΄μ μΈ ν μ€νΈ μ€μνΈ μμ±
λ€μ μμ μ μλ νμ±ν:
μμ¬κ²°μ & λ¬Έμν
- ADR Generator: μ€μν μμ¬κ²°μ μ΄ νμν λ μλμΌλ‘ μ μνκ³ μ²΄κ³μ μΌλ‘ λμλ립λλ€
- "μ΄λ€ λ°©μμ μ¨μΌ ν κΉ?" κ°μ μ§λ¬Έμ μλ μλ΅
- μ¬λ μλ μ§λ¬Έμ ν΅ν΄ κ²°μ μ λͺ ννκ²
- κ²°μ κ³Όμ μ ADR λ¬Έμλ‘ μλ μ 리
- SPEC Generator: νΌμ² κ°λ° μ EARS νμμΌλ‘ μꡬμ¬ν μ μ λμ
- "μλ‘μ΄ κΈ°λ₯ κ°λ°ν κ²" β μλμΌλ‘ νΌμ² μ΄ν΄ μ§λ¬Έ
- EARS 5κ°μ§ μ νμΌλ‘ μꡬμ¬ν μμ±
- 3-file ꡬ쑰 (spec.md, plan.md, acceptance.md) μμ±
- SPEC Updater: μ€ν λ³κ²½ κ°μ§ λ° CHANGELOG μλ μ
λ°μ΄νΈ
- "μꡬμ¬ν λ³κ²½" β μλμΌλ‘ λ²μ κ²°μ
- Semantic Versioning (Major/Minor/Patch)
- λ³κ²½ μ΄μ μ μν₯ λΆμ κΈ°λ‘
νμ§ κ΄λ¦¬
- TRUST Validator: μ½λ λ³κ²½ μ TRUST 5 νμ§ κΈ°μ€ μλ κ²μ¦
- μ½λ λ³κ²½ κ°μ§ β μλμΌλ‘ νμ§ κ²μ¦
- 5κ°μ§ νμ§ μμΉ κ²μ¦ (Tested, Readable, Unified, Secured, Trackable)
- LSP νμ§ κ²μ΄νΈ (Plan/Run/Sync λ¨κ³)
- μλ μμ κ°λ₯ν νλͺ© μλ μμ
μ½λ νμ§
- μ½λ 리ν©ν λ§
- μ±λ₯ μ΅μ ν
- μ½λ νλν
- 볡μ‘λ κ°μ
EARS (Easy Approach to Requirements Syntax) λ°©λ²λ‘ μ μ°¨μ©ν 3-file κ΅¬μ‘°λ‘ νΌμ² μ€νμ κ΄λ¦¬ν©λλ€:
docs/specs/{feature-name}/
βββ spec.md # EARS νμ μꡬμ¬ν
βββ plan.md # ꡬν κ³ν
βββ acceptance.md # Given/When/Then μΈμ κΈ°μ€
βββ CHANGELOG.md # λ³κ²½ μ΄λ ₯
- Ubiquitous (보νΈμ ): "μμ€ν μ ~ν΄μΌ νλ€" - νμ μ°ΈμΈ μꡬμ¬ν
- Event-driven (μ΄λ²€νΈ κΈ°λ°): "WHEN ~νλ©΄, IF ~λΌλ©΄, THEN ~ν΄μΌ νλ€" - μ΄λ²€νΈ μλ΅
- State-driven (μν κΈ°λ°): "WHILE ~μΈ λμ, ~ν΄μΌ νλ€" - μν μ μ§
- Unwanted (λ°λμ§νμ§ μμ): "μμ€ν μ ~νλ©΄ μ λλ€" - κΈμ§λ λμ
- Optional (μ νμ ): "κ°λ₯νλ€λ©΄, ~ν΄μΌ νλ€" - nice-to-have
- DRAFT - μꡬμ¬ν μμ§ μ€
- ACTIVE - μꡬμ¬ν νμ , ꡬν μ€λΉ μλ£
- IN_PROGRESS - ꡬν μ§ν μ€
- COMPLETED - ꡬν μλ£ λ° μΈμ κΈ°μ€ ν΅κ³Ό
- REJECTED - νΌμ² μ·¨μ λλ κ±°λΆ
# μλ‘μ΄ νΌμ² μ€ν μμ±
/spec-create
# Feature name: shopping-cart
# Description: μ¬μ©μκ° κ΅¬λ§€ν μ νμ μμ μ μ₯νκ³ μλμ κ΄λ¦¬νλ©° κ²°μ λ‘ λμ΄κ° μ μλ κΈ°λ₯
# docs/specs/shopping-cart/ λλ ν 리 μμ±
# - spec.md: EARS νμμΌλ‘ μꡬμ¬ν μ μ (18κ° μꡬμ¬ν)
# - plan.md: ꡬν κ³ν (21 tasks, 51 hours)
# - acceptance.md: Given/When/Then ν
μ€νΈ μλλ¦¬μ€ (9 scenarios)
# μꡬμ¬ν λ³κ²½ μ
/spec-update
# μλμΌλ‘ CHANGELOG.mdμ λ³κ²½ μ΄λ ₯ κΈ°λ‘TRUST 5 νμ§ νλ μμν¬λ‘ μλμΌλ‘ μ½λ νμ§μ 보μ₯ν©λλ€:
-
T - Tested (ν μ€νΈ μλ£)
- ν μ€νΈ 컀λ²λ¦¬μ§ 85% μ΄μ
- νμ μλ¬ 0κ°
- μ€ν¨νλ ν μ€νΈ 0κ°
-
R - Readable (κ°λ μ±)
- Lint μλ¬ 0κ°
- λͺ νν λ€μ΄λ°
- μ μ ν μ£Όμ
-
U - Unified (ν΅μΌμ±)
- μΌκ΄λ μ½λ ν¬λ§·ν
- νλ‘μ νΈ νμ€ μ€μ
- EARS νμ μꡬμ¬ν μ€μ
-
S - Secured (보μ)
- OWASP Top 10 μ€μ
- 보μ μ·¨μ½μ 0κ°
- μν¬λ¦Ώ λ ΈμΆ 0κ°
-
T - Trackable (μΆμ κ°λ₯μ±)
- Conventional Commits νμ
- CHANGELOG μ λ°μ΄νΈ
- μ΄μ/PR μ°Έμ‘°
- κΈ°μ€ μν μΊ‘μ²
.trust-baseline.jsonμμ±- κΈ°μ‘΄ μλ¬/κ²½κ³ μ κΈ°λ‘
- νκ· λ°©μ§ κ²μ¦
- μ μλ¬ 0κ° (νμ)
- κ²½κ³ μ¦κ° β€ 5κ°
- μ΅μ’ νμ§ νμΈ
- μ΄ μλ¬ 0κ°
- μ΄ κ²½κ³ β€ 10κ°
# μ 체 νμ§ κ²μ¦
/quality-check
# νΉμ νλͺ©λ§ κ²μ¦
/quality-check --tested # ν
μ€νΈ 컀λ²λ¦¬μ§λ§
/quality-check --secured # 보μλ§
# LSP νμ§ κ²μ΄νΈ
/trust-validate --phase plan # μμ
μμ μ
/trust-validate --phase run # λ³κ²½ μ€κ°μ€κ°
/trust-validate --phase sync # μλ£ ν
# μλ μμ
/quality-check --fix# pre-commit: Run λ¨κ³ κ²μ¦
pre-commit β /trust-validate --phase run
# pre-push: Sync λ¨κ³ κ²μ¦
pre-push β /trust-validate --phase sync# .trust.yaml
tested:
min_coverage: 85
lsp_gates:
run:
max_new_errors: 0
sync:
max_errors: 0
max_warnings: 10νμ¬ ν΅ν©λ MCP μλ²:
mcp__serena__find_symbol: μ¬λ³Ό κ²μmcp__serena__replace_symbol_body: μ¬λ³Ό λ΄μ© κ΅μ²΄mcp__serena__get_symbols_overview: νμΌ κ°μmcp__serena__search_for_pattern: ν¨ν΄ κ²μmcp__serena__list_memories: λ©λͺ¨λ¦¬ κ΄λ¦¬mcp__serena__write_memory: λ©λͺ¨λ¦¬ μ μ₯
mcp__playwright__browser_navigate: νμ΄μ§ μ΄λmcp__playwright__browser_snapshot: μ κ·Όμ± μ€λ μ·mcp__playwright__browser_click: ν΄λ¦mcp__playwright__browser_type: ν μ€νΈ μ λ ₯mcp__playwright__browser_take_screenshot: μ€ν¬λ¦°μ·
mcp__4_5v_mcp__analyze_image: μ΄λ―Έμ§ URL λΆμ
mcp__web_reader__webReader: URLμμ μ½ν μΈ μΆμΆ
μλμΌλ‘ μν:
- νμΌ μ°κΈ° μ λ³κ²½ μ¬ν κ²μ¦
- Bash λͺ λ Ή λ‘κΉ (κ°μ¬ μΆμ )
- ν둬ννΈ λΆμ μΆμ
.claude-plugin/plugin.jsonμμ 컀μ€ν°λ§μ΄μ¦:
- νλ¬κ·ΈμΈ λ©νλ°μ΄ν°
- μ»΄ν¬λνΈ κ²½λ‘
- ν μ€μ
- MCP μλ² μ€μ
commands/μ μ .md νμΌ μμ±:
---
name: your-command
description: 컀맨λ μ€λͺ
---
컀맨λ ꡬν λ΄μ©...agents/μ μ .md νμΌ μμ±:
---
description: μμ΄μ νΈ μ λ¬Έ λΆμΌ
capabilities:
- κΈ°λ₯ 1
- κΈ°λ₯ 2
---
μμ΄μ νΈ μ§μμ¬ν...skills/μ μ λλ ν 리μ SKILL.md μμ±:
---
name: μ€ν¬ μ΄λ¦
description: νμ±ν 쑰건
version: 1.0.0
---
μ€ν¬ μ§μμ¬ν...hooks/hooks.jsonμ νλͺ© μΆκ°:
{
"EventName": [{
"matcher": "ToolPattern",
"hooks": [{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/hooks/scripts/script.sh"
}]
}]
}${CLAUDE_PLUGIN_ROOT}: λͺ¨λ κ²½λ‘μ νκ²½λ³μ μ¬μ©- Kebab-case λͺ λͺ : μΌκ΄λ νμΌ/λλ ν 리 λͺ λͺ
- λͺ νν μ€λͺ : λͺ¨λ μ»΄ν¬λνΈμ λͺ νν λ¬Έμν
- μλ¬ νΈλ€λ§: ν μ μ μ ν μλ¬ μ²λ¦¬
- λ‘κΉ : λλ²κΉ μ μν ν¬κ΄μ μΈ λ‘κΉ
MIT
κ°μΈμ©μΌλ‘ μ μλμ΄ μ€λ¬΄ νλ‘μ νΈμμλ νμ©
SPEC μμ€ν : EARS νμ μꡬμ¬ν μ μ TRUST 5 μμ€ν : LSP νμ§ κ²μ΄νΈ μλν