10개월 동안 매일 사용하며 정리한 Claude Code 완전 세팅: 스킬, 훅, 서브에이전트, MCP, 플러그인, 그리고 실제로 효과 있는 것들.
URL: https://x.com/affaanmustafa/status/2012378465664745795
10개월 동안 매일 사용하며 정리한 제 완전 세팅입니다: 스킬, 훅, 서브에이전트, MCP, 플러그인, 그리고 실제로 효과 있는 것들.
2월 실험적 롤아웃 때부터 Claude Code의 열성 사용자였고, Anthropic x Forum Ventures 해커톤에서
와 함께
Claude Code만으로 전적으로
우승했습니다.
cogsec
@affaanmustafa
NYC의
x
해커톤에서 우승했습니다. 주최해줘서 고마워요. 정말 좋은 이벤트였어요(그리고 Anthropic 크레딧 1만5천 달러도요).
그리고 저는 PMFProbe를 만들었습니다. 창업자들이 0 -> 1로 가서, 프리 MVP 단계에서 아이디어를 검증하도록 돕는 제품입니다. 더 많은 소식 곧 공개할게요.
스킬(Skills)은 규칙처럼 동작하며, 특정 스코프와 워크플로우로 제한됩니다. 특정 워크플로우를 실행해야 할 때 쓰는 프롬프트의 ‘축약형’입니다.
Opus 4.5로 길게 코딩한 뒤 죽은 코드와 흩어진 .md 파일을 정리하고 싶나요?
/refactor-clean을 실행하세요. 테스트가 필요하나요? /tdd, /e2e, /test-coverage. 스킬과 커맨드는 한 번의 프롬프트에서 서로 체이닝할 수 있습니다.
커맨드 체이닝
체크포인트마다 코드를맵(codemap)을 업데이트하는 스킬을 만들 수 있습니다. 이는 Claude가 탐색에 컨텍스트를 낭비하지 않고 코드베이스를 빠르게 이동할 수 있게 해줍니다.
~/.claude/skills/codemap-updater.md
커맨드(Commands)는 슬래시 커맨드를 통해 실행되는 스킬입니다. 겹치는 부분은 있지만 저장 위치가 다릅니다:
~/.claude/skills - 더 넓은 워크플로우 정의~/.claude/commands - 빠르게 실행 가능한 프롬프트bash# Example skill structure ~/.claude/skills/ pmx-guidelines.md # Project-specific patterns coding-standards.md # Language best practices tdd-workflow/ # Multi-file skill with README.md security-review/ # Checklist-based skill
훅(Hooks)은 특정 이벤트에서 발동하는 트리거 기반 자동화입니다. 스킬과 달리, 도구 호출(tool calls)과 라이프사이클 이벤트에만 제한됩니다.
예시: 오래 걸리는 커맨드 전에 tmux 리마인더
json{ "PreToolUse": [ { "matcher": "tool == \"Bash\" && tool_input.command matches \"(npm|pnpm|yarn|cargo|pytest)\"", "hooks": [ { "type": "command", "command": "if [ -z \"$TMUX\" ]; then echo '[Hook] Consider tmux for session persistence' >&2; fi" } ] } ] }
PostToolUse 훅을 실행하는 동안 Claude Code에서 받는 피드백 예시
팁: hookify 플러그인을 사용하면 JSON을 손으로 쓰지 않고 대화형으로 훅을 만들 수 있습니다. /hookify를 실행하고 원하는 동작을 설명하세요.
서브에이전트(Subagents)는 오케스트레이터(메인 Claude)가 제한된 스코프로 작업을 위임할 수 있는 프로세스입니다. 백그라운드 또는 포그라운드로 실행할 수 있어, 메인 에이전트의 컨텍스트를 비워줍니다.
서브에이전트는 스킬과도 잘 어울립니다. 일부 스킬을 실행할 수 있는 서브에이전트에게 작업을 위임하면, 서브에이전트가 그 스킬들을 자율적으로 사용해 작업할 수 있습니다. 또한 특정 도구 권한으로 샌드박싱(sandboxing)할 수도 있습니다.
bash# Example subagent structure ~/.claude/agents/ planner.md # Feature implementation planning architect.md # System design decisions tdd-guide.md # Test-driven development code-reviewer.md # Quality/security review security-reviewer.md # Vulnerability analysis build-error-resolver.md e2e-runner.md refactor-cleaner.md
적절한 스코핑을 위해 서브에이전트별로 허용 도구, MCP, 권한을 설정하세요.
.rules 폴더에는 Claude가 항상 따라야 하는 베스트 프랙티스를 담은 .md 파일이 들어갑니다. 두 가지 접근이 있습니다:
.md 파일bash~/.claude/rules/ security.md # No hardcoded secrets, validate inputs coding-style.md # Immutability, file organization testing.md # TDD workflow, 80% coverage git-workflow.md # Commit format, PR process agents.md # When to delegate to subagents performance.md # Model selection, context management
예시 규칙:
MCP는 Claude를 외부 서비스에 직접 연결합니다. API를 대체하는 것은 아니고, 그 위를 감싸는 프롬프트 기반 래퍼(prompt-driven wrapper)로서, 정보를 탐색하는 데 더 많은 유연성을 제공합니다.
예시: Supabase MCP를 쓰면 Claude가 특정 데이터를 가져오거나, 복사-붙여넣기 없이 상류에서 바로 SQL을 실행할 수 있습니다. 데이터베이스, 배포 플랫폼 등도 마찬가지입니다.
Supabase MCP가 public 스키마의 테이블 목록을 보여주는 예시
Claude 안의 Chrome: 브라우저를 Claude가 자율적으로 제어하게 해주는 내장 플러그인 MCP입니다. 클릭해가며 동작 방식을 확인할 수 있습니다.
MCP는 까다롭게 고르세요. 저는 모든 MCP를 사용자 설정에 넣되, 사용하지 않는 것은 전부 비활성화합니다. /plugins로 들어가 스크롤하거나 /mcp를 실행하세요.
컴팩트(compact) 하기 전 200k 컨텍스트 윈도우도, 너무 많은 도구를 활성화하면 70k 정도로 줄어들 수 있습니다. 성능이 크게 떨어집니다.
/plugins로 MCP 목록에 들어가 현재 설치된 것과 상태를 확인하는 모습
경험칙: 설정(config)에는 MCP를 20~30개 두되, 활성화는 10개 미만 / 활성 도구는 80개 미만을 유지하세요.
플러그인(Plugins)은 번거로운 수동 설정 대신, 도구를 쉽게 설치할 수 있도록 패키징합니다. 플러그인은 스킬 + MCP의 결합일 수도 있고, 훅/도구 묶음일 수도 있습니다.
플러그인 설치:
bash# Add a marketplace claude plugin marketplace add https://github.com/mixedbread-ai/mgrep # Open Claude, run /plugins, find new marketplace, install from there
새로 설치한 Mixedbread-Grep 마켓플레이스를 표시하는 화면
LSP 플러그인: 에디터 밖에서 Claude Code를 자주 실행한다면 특히 유용합니다. LSP(Language Server Protocol)는 IDE를 열지 않아도 실시간 타입 체크, 정의로 이동, 지능형 자동완성을 제공합니다.
bash# Enabled plugins example typescript-lsp@claude-plugins-official # TypeScript intelligence pyright-lsp@claude-plugins-official # Python type checking hookify@claude-plugins-official # Create hooks conversationally mgrep@Mixedbread-Grep # Better search than ripgrep
MCP와 같은 경고: 컨텍스트 윈도우를 주시하세요.
/fork - 큐에 메시지를 계속 쌓는 대신, 겹치지 않는 작업을 병렬로 처리하기 위해 대화를 포크
Git Worktrees - 충돌 없이 서로 겹치는 병렬 Claude를 위한 방법. 각 worktree는 독립 체크아웃입니다.
bashgit worktree add ../feature-branch feature-branch # Now run separate Claude instances in each worktree
tmux로 장시간 커맨드: Claude가 실행하는 로그/bash 프로세스를 스트리밍하고 모니터링합니다.
![]()
claude code로 프론트엔드와 백엔드 서버를 띄우고, tmux로 세션에 붙어 로그를 모니터링하는 모습
bashtmux new -s dev # Claude runs commands here, you can detach and reattach tmux attach -t dev
mgrep > grep: mgrep는 ripgrep/grep보다 크게 개선된 도구입니다. 플러그인 마켓플레이스로 설치한 뒤 /mgrep 스킬을 사용하세요. 로컬 검색과 웹 검색을 모두 지원합니다.
bashmgrep "function handleSubmit" # Local search mgrep --web "Next.js 15 app router changes" # Web search
GitHub Actions로 PR에 코드 리뷰를 설정하세요. 설정해두면 Claude가 PR을 자동으로 리뷰할 수 있습니다.
버그 수정 PR을 승인하는 Claude
위험한 작업에는 샌드박스 모드를 사용하세요. Claude는 실제 시스템에 영향을 주지 않는 제한된 환경에서 실행됩니다. (반대로 --dangerously-skip-permissions를 쓰면 권한 제한을 건너뛰고 Claude를 자유롭게 풀어주는데, 조심하지 않으면 파괴적일 수 있습니다.)
에디터는 필수는 아니지만, Claude Code 워크플로우에 긍정적/부정적 영향을 줄 수 있습니다. Claude Code는 어떤 터미널에서도 동작하지만, 좋은 에디터와 함께 쓰면 실시간 파일 추적, 빠른 네비게이션, 통합 커맨드 실행을 활용할 수 있습니다.
저는
Zed가 Claude Code와 잘 맞는 이유:
CMD+Shift+R로 커스텀 커맨드 드롭다운을 띄운 Zed 에디터.
팔로잉 모드는 오른쪽 아래의 과녁 아이콘으로 표시됩니다.
이것도 충분히 괜찮은 선택이고 Claude Code와 잘 동작합니다. 터미널 형태로 쓰면서 \ide를 통해 에디터와 자동 동기화하고 LSP 기능을 활성화할 수도 있습니다(요즘은 플러그인으로 다소 중복). 또는 에디터에 더 밀착된 익스텐션을 선택해, 에디터 UI와 매칭되는 형태로 사용할 수도 있습니다.
문서에서 직접 가져옴:
설치됨: (보통 한 번에 4~5개만 활성화해둡니다)
markdownralph-wiggum@claude-code-plugins # Loop automation frontend-design@claude-code-plugins # UI/UX patterns commit-commands@claude-code-plugins # Git workflow security-guidance@claude-code-plugins # Security checks pr-review-toolkit@claude-code-plugins # PR automation typescript-lsp@claude-plugins-official # TS intelligence hookify@claude-plugins-official # Hook creation code-simplifier@claude-plugins-official feature-dev@claude-code-plugins explanatory-output-style@claude-code-plugins code-review@claude-code-plugins context7@claude-plugins-official # Live documentation pyright-lsp@claude-plugins-official # Python types mgrep@Mixedbread-Grep # Better search
구성됨(사용자 레벨):
json{ "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"] }, "firecrawl": { "command": "npx", "args": ["-y", "firecrawl-mcp"] }, "supabase": { "command": "npx", "args": ["-y", "@supabase/mcp-server-supabase@latest", "--project-ref=YOUR_REF"] }, "memory": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-memory"] }, "sequential-thinking": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sequential-thinking"] }, "vercel": { "type": "http", "url": "https://mcp.vercel.com" }, "railway": { "command": "npx", "args": ["-y", "@railway/mcp-server"] }, "cloudflare-docs": { "type": "http", "url": "https://docs.mcp.cloudflare.com/mcp" }, "cloudflare-workers-bindings": { "type": "http", "url": "https://bindings.mcp.cloudflare.com/mcp" }, "cloudflare-workers-builds": { "type": "http", "url": "https://builds.mcp.cloudflare.com/mcp" }, "cloudflare-observability": { "type": "http", "url": "https://observability.mcp.cloudflare.com/mcp" }, "clickhouse": { "type": "http", "url": "https://mcp.clickhouse.cloud/mcp" }, "AbletonMCP": { "command": "uvx", "args": ["ableton-mcp"] }, "magic": { "command": "npx", "args": ["-y", "@magicuidesign/mcp@latest"] } }
프로젝트별 비활성화(컨텍스트 윈도우 관리):
markdown# In ~/.claude.json under projects.[path].disabledMcpServers disabledMcpServers: [ "playwright", "cloudflare-workers-builds", "cloudflare-workers-bindings", "cloudflare-observability", "cloudflare-docs", "clickhouse", "AbletonMCP", "context7", "magic" ]
이게 핵심입니다. MCP를 14개 구성해두되, 프로젝트당 실제로는 약 5~6개만 활성화합니다. 컨텍스트 윈도우를 건강하게 유지해줍니다.
json{ "PreToolUse": [ // tmux reminder for long-running commands { "matcher": "npm|pnpm|yarn|cargo|pytest", "hooks": ["tmux reminder"] }, // Block unnecessary .md file creation { "matcher": "Write && .md file", "hooks": ["block unless README/CLAUDE"] }, // Review before git push { "matcher": "git push", "hooks": ["open editor for review"] } ], "PostToolUse": [ // Auto-format JS/TS with Prettier { "matcher": "Edit && .ts/.tsx/.js/.jsx", "hooks": ["prettier --write"] }, // TypeScript check after edits { "matcher": "Edit && .ts/.tsx", "hooks": ["tsc --noEmit"] }, // Warn about console.log { "matcher": "Edit", "hooks": ["grep console.log warning"] } ], "Stop": [ // Audit for console.logs before session ends { "matcher": "*", "hooks": ["check modified files for console.log"] } ] }
사용자, 디렉터리, 더티 표시 포함 git 브랜치, 남은 컨텍스트 %, 모델, 시간, todo 개수를 표시:
내 Mac 루트 디렉터리에서의 statusline 예시
markdown~/.claude/rules/ security.md # Mandatory security checks coding-style.md # Immutability, file size limits testing.md # TDD, 80% coverage git-workflow.md # Conventional commits agents.md # Subagent delegation rules patterns.md # API response formats performance.md # Model selection (Haiku vs Sonnet vs Opus) hooks.md # Hook documentation
markdown~/.claude/agents/ planner.md # Break down features architect.md # System design tdd-guide.md # Write tests first code-reviewer.md # Quality review security-reviewer.md # Vulnerability scan build-error-resolver.md e2e-runner.md # Playwright tests refactor-cleaner.md # Dead code removal doc-updater.md # Keep docs synced
[
]
]
참고: 이 글은 상세 내용의 일부입니다. 사람들이 관심 있다면 구체적인 주제로 더 많은 글을 올릴지도 모르겠습니다.