virtual-insanity
← 리포트 목록

Claude Code 플러그인 · 훅 · MCP · 설정 · 메모리

2026-04-24 handover [handover, plugins, hooks, mcp, settings, memory]

Claude Code 플러그인 · 훅 · MCP · 설정 · 메모리

1. 설치된 플러그인

이름 버전 출처 용도
claude-mem 10.6.2 thedotmack 장기 메모리 + mcp-search 서버 제공
everything-claude-code 1.9.0 everything-claude-code 확장 스킬/명령 모음
superpowers 5.0.7 claude-plugins-official 워크플로·디버깅·개발 스킬 모음
telegram 0.0.6 claude-plugins-official 텔레그램 채널 설정·접근 스킬
figma 2.1.7 claude-plugins-official Figma 디자인 연동
code-review-graph 1.8.3 code-review-graph 코드 리뷰 그래프 시각화

설치 경로: ~/.claude/plugins/cache/{org}/{name}/{version}/
설치 메타: ~/.claude/plugins/installed_plugins.json


2. 훅 카탈로그

SessionStart

스크립트 역할
vault-context-loader.sh 볼트 컨텍스트 사전 빌드 파일(vault-context.md) 로딩
knowledge-graph-loader.py 지식그래프 노드 요약 주입
companion-event.sh companion 상태 파일 업데이트
active-work-cleanup.py active-work.json TTL 초과 항목 정리
session-memory-loader.py 전날/당일 세션 로그 50줄·2000자 단기 메모리 주입
post-compact-context.sh matcher=compact 시만 실행, 컴팩션 후 컨텍스트 재로딩
cmux-claude-hook.sh cmux 이벤트 브로드캐스트
cmux-otel-emit.sh OTel Collector로 세션 이벤트 전송

UserPromptSubmit

스크립트 역할
prompt-model-gate.py 모델 트리거 키워드 감지 → additionalContext 주입

PreToolUse (전체)

스크립트 matcher 역할
loop-guard.py * 루프 감지 + 드리프트 경고
companion-event.sh * companion 상태 업데이트
tier-gate.py Bash 위험 명령 등급 차단 (Tier 1~4)
mcp-rate-limit.sh mcp__* MCP 호출 60초당 20회 제한
large-file-guard.sh Read 대형 파일 읽기 경고
skill-enforcer.py Bash|Edit|Write 작업 유형 감지 → 스킬 사용 권고

PostToolUse

스크립트 matcher 역할
companion-event.sh * companion 상태 업데이트
audit-log.sh Bash 명령어 감사 로그 기록
ops-deploy-gate.sh Edit|Write 운영 프로세스 코드 수정 시 재시작/검증 체크리스트 강제
webapp-restart.sh Edit|Write webapp/ 파일 수정 시 Flask 서버 자동 재시작
cross-model-review.sh Edit|Write .py/.js/.ts 5줄 이상 diff → Codex 교차검증 (30초 타임아웃)
skill-usage-log.sh Skill 스킬 실행 기록 (Hermes 자기개선용)

Stop

스크립트 역할
companion-event.sh companion 상태 업데이트
stop-verify.sh 6단계 PreCompletionChecklist 검증 (timeout 180s)
stop-checkpoint.sh 세션 상태 체크포인트 저장 (git diff 요약)
cmux-claude-hook.sh cmux 이벤트 브로드캐스트
cmux-otel-emit.sh OTel 이벤트 전송

Notification

스크립트 역할
cmux-claude-hook.sh cmux 이벤트 브로드캐스트
cmux-otel-emit.sh OTel 이벤트 전송

3. MCP 서버

공식 연동 (OAuth/Remote)

서버 엔드포인트 상태 용도
claude.ai Google Drive drivemcp.googleapis.com 연결됨 구글 드라이브 읽기/쓰기
claude.ai Gmail gmailmcp.googleapis.com 연결됨 메일 검색·레이블·초안
claude.ai Google Calendar calendarmcp.googleapis.com 연결됨 일정 조회·생성
claude.ai n8n mangd.app.n8n.cloud 인증 필요 n8n 워크플로 자동화
claude.ai S&P Global kfinance.kensho.com 인증 필요 S&P 금융 데이터

플러그인 MCP

서버 키 프로세스 용도
plugin:claude-mem:mcp-search mcp-server.cjs (Node) 장기 메모리 검색·타임라인·스마트 탐색
plugin:telegram:telegram bun run start 텔레그램 채널 설정 스킬용 MCP

커스텀 MCP (~/.openclaw/mcp-servers/)

서버 키 프로세스 용도
ron-pipeline Node OpenClaw 파이프라인 실행·상태 조회
dart Node DART 공시 검색 (OpenAPI)
kis-api Node 한국투자증권 OpenAPI (주가·선물·시장개요)
telegram-mcp Node 텔레그램 메시지 송수신 (@ronclawBot/DM)
stealth-browser Python (venv) CDP 기반 anti-bot 브라우저 자동화
tradingview-mcp Node TradingView Desktop 차트 제어

npm 패키지 MCP

서버 키 패키지 용도
context7 @upstash/context7-mcp 라이브러리 최신 문서 조회
obsidian-vault @modelcontextprotocol/server-filesystem ~/knowledge 볼트 파일 접근
agent-vault @modelcontextprotocol/server-filesystem ~/knowledge-agent 에이전트 볼트 접근
pinescript-mcp pinescript-mcp-server Pine Script 레퍼런스·예제 조회

4. 주요 settings 항목

settings.json 핵심 섹션

환경변수 (env) - OTEL_EXPORTER_OTLP_ENDPOINT: OTel Collector 로컬 엔드포인트 - CLAUDE_CODE_ENABLE_TELEMETRY: 텔레메트리 활성화 - CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS: 실험 기능 비활성화 - OTEL_RESOURCE_ATTRIBUTES: service.name=claude-code, agent.id=claude

전역 권한 허용 (permissions.allow)
Edit, Write, Bash, Read, Glob, Grep, WebFetch, WebSearch 전체 허용

settings.local.json 핵심 섹션

세부 허용 목록 (선별) - MCP 도구 개별 허용: obsidian-vault(읽기/쓰기), stealth-browser(spawn/navigate/script), telegram-mcp(send/get), kis-api, dart, ron-pipeline, context7, agent-vault(읽기/쓰기), tradingview 등 - 스킬 개별 허용: Skill(update-config), Skill(claude-api), vibesubin 계열 7개 - Bash 패턴 허용: 특정 경로 cp/ls/mv, claude mcp:*, claude auth:*, gh pr *


5. 메모리 체계

메모리 경로: ~/.claude/projects/-Users-ron/memory/
총 파일: 58개, 총 1446줄

인덱스

MEMORY.md (51줄): 각 파일의 한 줄 설명 + 링크 모음

타입별 분류

타입 개수 설명
feedback_* 42개 해리 피드백·교훈 기록 (행동 교정용)
project_* 14개 진행 중·완료 프로젝트 상태
harness-lessons 1개 세션 지시 실패 패턴 교훈
user_harry 1개 해리 프로필 (비개발자, 투자분석 중심)

주요 feedback 예시: model_fallback, subagent_parallel, restart_all_workers, verify_before_claim, simple_language, ir_mandatory, vault_write_rule, worktree_symlink_trap 등

주요 project 예시: openclaw_system, briefing_redesign, company_research_skill, hermes_migration, knowledge_graph, sector_compass, gmail_bond_pipeline

메모리 작성 규칙

  • MEMORY.md는 인덱스만 (링크 + 한 줄 설명)
  • 실제 내용은 개별 파일에 저장
  • 파일명: {type}_{topic}.md 형태
  • 새 교훈 발생 시 MEMORY.md 인덱스에 줄 추가 + 개별 파일 생성

6. 인수인계 체크리스트

  • [ ] 플러그인 재설치: claude plugin install {org}/{name} 방식. installed_plugins.json 참고해 6개 순서대로 재설치
  • [ ] 훅 스크립트 이관: ~/.claude/hooks/ 22개 파일 전체 복사. Python 스크립트는 의존 라이브러리 확인
  • [ ] settings.json 치환 필요 항목: OTel endpoint, DART API key 경로(~/.openclaw/dart_api_key), KIS API 자격증명 경로
  • [ ] MCP 서버 재연결:
  • 커스텀 서버: ~/.openclaw/mcp-servers/ 디렉토리 전체 이관 + Node/Python 환경 설치
  • 플러그인 MCP: 플러그인 재설치 시 자동 등록
  • npm MCP: npx 명령 자동 다운로드
  • OAuth MCP: Google(Drive/Gmail/Calendar) 재인증 필요, n8n/S&P Global 인증 필요
  • [ ] 볼트 경로 고정값: obsidian-vault~/knowledge, agent-vault~/knowledge-agent. 새 기기에서 경로 수정 필요
  • [ ] cmux 훅 의존: cmux-claude-hook.sh, cmux-otel-emit.sh는 cmux 설치 선행 필요
  • [ ] webapp-restart.sh: WEBAPP_DIR 하드코딩(~/.openclaw/workspace/scripts/pipeline/webapp) 확인 필요

N1. 훅 작성 실전 예시

stdin/stdout 계약

PreToolUse/PostToolUse 훅은 stdin으로 JSON을 받고, stdout으로 JSON을 내보내며, exit code로 허용/차단을 결정한다.

stdin →  {"tool_name": "Bash", "tool_input": {"command": "rm -rf /"}}
stdout → {"hookSpecificOutput": {"hookEventName": "PreToolUse", "additionalContext": "경고 메시지"}}
exit 0 → 통과 (허용)
exit 1 → 차단 (도구 실행 거부)
exit 2 → 차단 + 오류 메시지

PreToolUse는 일반 텍스트 stdout을 무시함. 반드시 hookSpecificOutput.additionalContext에 담아야 Claude가 읽는다.

실제 예시: loop-guard.py (전체 소스 ~/.claude/hooks/loop-guard.py)

아래는 핵심 구조만 발췌. 전체 198줄.

#!/usr/bin/env python3
"""loop-guard.py — PreToolUse 훅: 루프 감지 + 드리프트 경고
stdin: {"tool_name":"...", "tool_input":{...}}
exit 0: 항상 통과 (경고만, 차단하지 않음)
"""
import sys, json, hashlib, os

SESSION_ID = os.environ.get("CLAUDE_SESSION_ID") or os.getenv("PPID", str(os.getppid()))
GUARD_FILE = f"/tmp/claude-guard-{SESSION_ID}.json"
LOOP_THRESHOLD = 3      # 동일 (도구+인수) 연속 허용 횟수
DRIFT_THRESHOLD = 80    # 전체 호출 경고 기준

def emit(warnings):
    """경고를 PreToolUse JSON 형식으로 출력"""
    print(json.dumps({
        "hookSpecificOutput": {
            "hookEventName": "PreToolUse",
            "additionalContext": "\n".join(warnings)
        }
    }))

def main():
    data = json.load(sys.stdin)
    tool_name = data.get("tool_name", "")
    # ... 상태 로드, 루프 감지, 드리프트 감지 ...
    if warnings:
        emit(warnings)
    sys.exit(0)  # 항상 0 — 경고만, 차단 없음

settings.json에 훅 등록하는 법

~/.claude/settings.json (실측 구조):

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/loop-guard.py",
            "timeout": 10000
          }
        ]
      },
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "python3 ~/.claude/hooks/tier-gate.py",
            "timeout": 5000
          }
        ]
      }
    ],
    "SessionStart": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/vault-context-loader.sh"
          }
        ]
      }
    ]
  }
}

matcher 값: *(전체), Bash, Edit, Write, Read, mcp__*(MCP 계열 전체), compact(컴팩션 이벤트).
timeout은 밀리초 단위. 미지정 시 기본값 적용.


N2. MCP 서버 추가 실전

설정 위치

MCP 서버는 ~/.claude.jsonmcpServers 섹션에 등록됨 (실측 확인).
~/.claude/settings.json에는 hooks/permissions만 있고, mcpServers는 없음.

실제 ~/.claude.json 예시 (실측 인용, 토큰/키 제외)

{
  "mcpServers": {
    "stealth-browser": {
      "command": "/Users/ron/.openclaw/mcp-servers/stealth-browser/venv/bin/python",
      "args": ["/Users/ron/.openclaw/mcp-servers/stealth-browser/src/server.py"]
    },
    "obsidian-vault": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/ron/knowledge"]
    },
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    },
    "ron-pipeline": {
      "command": "node",
      "args": ["/Users/ron/.openclaw/mcp-servers/ron-pipeline/index.js"]
    }
  }
}

패턴 요약: - Python venv 서버: command에 venv python 절대경로, args에 서버 스크립트 절대경로 - npm 패키지 서버: command: "npx", args: ["-y", "패키지명", ...추가인수] - Node 서버: command: "node", args: ["스크립트 절대경로"] - 환경변수 필요 시: "env": {"API_KEY": "값"} 추가 (토큰 직접 노출 금지, 파일 경로 참조 권장)

CLI로 추가하는 법

# npm 패키지 MCP
claude mcp add context7 npx -- -y @upstash/context7-mcp

# 로컬 Node 서버
claude mcp add ron-pipeline node /path/to/index.js

# 상태 확인
claude mcp list

N3. 메모리 4가지 타입 실제 예시

메모리 경로: ~/.claude/projects/-Users-ron/memory/

타입 1: user (사용자 프로필)

파일: user_harry.md

---
name: 해리 (Harry) 프로필
description: 오픈클로 시스템의 오너. 비개발자. 한국어 사용. 투자 분석 중심.
type: user
---

- 이름: 해리 (Harry), 텔레그램 @BooamRip, chat_id 492860021
- 비개발자 — 기술 용어 없이 쉽게 설명해야 함
- 한국어로 소통, 짧고 확실하게

타입 2: feedback (행동 교정)

파일: feedback_subagent_parallel.md

---
name: 서브에이전트 병렬 실행 선호
description: 구현 계획 실행 시 항상 서브에이전트 병렬 방식 사용, 실행방법 묻지 않기
type: feedback
---

구현 계획 실행 시 항상 서브에이전트 병렬 방식(subagent-driven-development)으로 진행한다.

**Why:** 해리가 매번 같은 선택을 하므로 묻지 않아도 됨.
**How to apply:** 계획서 작성 후 실행 방법을 묻지 말고 바로 서브에이전트 병렬 실행으로 진입한다.

타입 3: project (프로젝트 상태)

파일: project_hermes_codex_improvement_cycle.md

---
name: hermes + chatgpt-codex-proxy 개선 사이클
description: 2026-04-22~23. v0.1.0~v0.6.0 전 6개 릴리즈 완주.
type: project
originSessionId: 38639e2c-e515-478c-bfd9-726e71d9166c
---

2026-04-22 시작, v0.6.0까지 완주. hermes + chatgpt-codex-proxy 품질 개선 풀 사이클.
**다음 세션**: v0.7.0 Phase 2 Rework부터 재개 (7개 이슈 #45,#47~#49,#55,#58,#60)

타입 4: reference (참조 자료)

현재 이 메모리 디렉토리에는 reference 타입 파일이 없음 (확인 완료).
harness-lessons.md 가 사실상 레퍼런스 역할 수행 (type 필드 미지정).

MEMORY.md 인덱스 포맷

- [피드백 제목](파일명.md) — 한 줄 설명

예시:

- [서브에이전트 병렬 실행](feedback_subagent_parallel.md) — 구현은 항상 서브에이전트 병렬, 묻지 말고 바로 실행

메모리 파일 생성 규칙

  1. 파일명: {type}_{topic}.md (예: feedback_no_guessing.md, project_my_work.md)
  2. frontmatter 필수: name, description, type
  3. MEMORY.md에 인덱스 줄 추가 (링크 + 한 줄 설명)
  4. 실제 내용은 개별 파일에, MEMORY.md는 인덱스만

N4. 플러그인 카탈로그 상세

superpowers (5.0.7) — claude-plugins-official

TDD·디버깅·브레인스토밍 등 소프트웨어 개발 워크플로 스킬 모음. 설치하면 Claude가 코딩 작업 시 자동으로 스킬을 트리거한다.
핵심 스킬: test-driven-development, subagent-driven-development, systematic-debugging, writing-plans, executing-plans, verification-before-completion, dispatching-parallel-agents, using-git-worktrees.
동작 방식: 사용자가 코드 작업을 요청하면 스펙 확인 → 계획 작성 → 서브에이전트 병렬 실행 순서로 자동 진행. 직접 코드 작성보다 계획-실행 분리를 강제.

claude-mem (10.6.2) — thedotmack

세션 간 지속 메모리 DB + MCP 검색 서버 제공.
plugin:claude-mem:mcp-search MCP 서버를 통해 smart_search, timeline, get_observations 3-레이어 검색 워크플로 제공. 관찰(observation) 단위로 기억을 저장하고, 프로젝트별로 필터링 가능.
스킬: mem-search(검색), timeline-report(타임라인 리포트), make-plan(계획 생성), do(실행).

telegram (0.0.6) — claude-plugins-official

Telegram 봇을 Claude Code 세션에 연결하는 MCP 서버 플러그인. Bun 런타임 필요.
설치 후 /configure 스킬로 봇 토큰 입력 → plugin:telegram:telegram MCP 서버 자동 등록.
동작: 텔레그램 봇에 메시지 수신 시 Claude 세션으로 포워딩, Claude가 MCP 도구로 답장·리액션·수정 가능. 단일 DM 봇 기본, 멀티유저·그룹은 별도 설정.

figma (2.1.7) — claude-plugins-official

Figma MCP 서버 공식 통합. Figma 디자인 파일의 구조·컴포넌트·변수를 Claude가 읽고 코드 생성에 활용.
쓰기 기능(캔버스에 직접 생성·수정)은 remote 서버 전용, 현재 베타 무료.
제한: Starter/View 플랜은 월 6회 도구 호출 한도. Dev/Full 시트 Professional+ 플랜은 REST API와 동일 Tier 1 rate limit.

code-review-graph (1.8.3) — code-review-graph

Tree-sitter 기반 코드 구조 맵 빌드 + 증분 추적으로 코드 리뷰 시 토큰 낭비를 줄이는 도구.
매 작업마다 전체 코드베이스를 재독하는 대신, 변경된 파일·심볼만 정밀하게 컨텍스트 제공. MCP 서버 방식으로 동작.
효과: 동일 품질 리뷰에 약 6.8배 토큰 절감 (프로젝트 규모에 따라 다름).

everything-claude-code (1.9.0) — everything-claude-code

보안 감사·비밀 관리·CI/CD·리팩터 검증 등 실용 스킬 모음.
주요 스킬: vibesubin-audit-security(보안 감사), vibesubin-manage-secrets-env(환경변수 관리), vibesubin-setup-ci(CI/CD 설정), vibesubin-refactor-verify(리팩터 안전 검증).
safety-guard 계열 스킬로 위험 작업 전 체크리스트 강제 실행.


N5. installed_plugins.json 모순 확인 (실측)

결론: 파일 실존 확인 완료. 기존 문서(§1, 22줄)의 "존재" 기재가 맞음.

실제 경로: ~/.claude/plugins/installed_plugins.json
skills.md:380의 "없음" 기재는 오기 또는 설치 전 상태 기준으로 작성된 것으로 판단됨.

스키마 (실측)

{
  "version": 2,
  "plugins": {
    "{name}@{org}": [
      {
        "scope": "user",
        "installPath": "/Users/ron/.claude/plugins/cache/{org}/{name}/{version}",
        "version": "x.y.z",
        "installedAt": "ISO8601",
        "lastUpdated": "ISO8601",
        "gitCommitSha": "sha"
      }
    ]
  }
}

실제 내용 요약

플러그인 키 버전 최종 업데이트
claude-mem@thedotmack 10.6.2 2026-03-26
everything-claude-code@everything-claude-code 1.9.0 2026-03-26
superpowers@claude-plugins-official 5.0.7 2026-04-11
telegram@claude-plugins-official 0.0.6 2026-04-14
figma@claude-plugins-official 2.1.7 확인 필요
code-review-graph@code-review-graph 1.8.3 확인 필요

재설치 시 이 파일의 installPath를 기준으로 캐시 경로 확인.
현재 상태 확인: claude plugin list


N6. 장애 런북

런북 1: MCP 서버 연결 끊김 (disconnected)

증상: 도구 호출 시 "MCP server disconnected" 또는 응답 없음.
진단:

claude mcp list           # 상태 확인 (connected/disconnected)
ps aux | grep mcp         # 프로세스 생존 여부

복구:
1. claude mcp list로 어느 서버인지 특정
2. 해당 서버 프로세스 수동 종료 후 Claude 재시작 → 자동 재연결
3. OAuth 서버(Google Drive/Gmail/Calendar)는 재인증 필요: claude mcp auth {서버명}
4. 커스텀 서버는 의존 라이브러리·venv 활성화 상태 확인
5. 반복 발생 시 ~/.openclaw/mcp-servers/{name}/ 로그 확인

런북 2: 훅 무한 루프

증상: Claude 응답이 무한 대기, 같은 도구 호출이 반복.
진단: loop-guard.py/tmp/claude-guard-{SESSION_ID}.json에 상태 기록.

cat /tmp/claude-guard-*.json | python3 -m json.tool

복구:
1. 현재 세션 강제 종료 (Ctrl+C)
2. rm /tmp/claude-guard-*.json — 가드 상태 초기화
3. 루프 원인 파악: 어떤 도구가 반복됐는지 가드 파일 calls 배열 확인
4. 동일 루프 재발 시 해당 스크립트나 훅 timeout 단축 고려

런북 3: 메모리 파일 충돌 (수동 편집 vs 자동 저장)

증상: MEMORY.md 인덱스와 개별 파일 내용 불일치, 중복 항목.
진단:

ls -lt ~/.claude/projects/-Users-ron/memory/ | head -10   # 최근 수정 파일 확인

복구:
1. 메모리 파일은 git 추적 대상 아님 — 삭제 시 복구 불가
2. 충돌 시 MEMORY.md를 인덱스 기준으로 재정렬 (개별 파일이 실제 내용)
3. 중복 항목은 최신 날짜 기준으로 병합, 구 파일 삭제
4. 예방: 수동 편집 후 MEMORY.md 인덱스도 반드시 동기화

런북 4: 플러그인 업데이트 실패

증상: claude plugin update {name} 실패, 버전 불일치.
진단:

ls ~/.claude/plugins/cache/{org}/{name}/    # 캐시 디렉토리 상태
cat ~/.claude/plugins/installed_plugins.json | python3 -m json.tool

복구:
1. 캐시 클리어: rm -rf ~/.claude/plugins/cache/{org}/{name}/
2. 재설치: claude plugin install {org}/{name}
3. 재설치 후 claude plugin list로 버전 확인
4. MCP 서버 제공 플러그인(claude-mem, telegram)은 재설치 후 Claude 재시작 필요

런북 5: 세션 컨텍스트 소진

증상: "context window full" 또는 응답 품질 급격히 저하.
진단: 현재 모델 확인, 플러그인이 컨텍스트를 얼마나 소비하는지 파악.
복구:
1. 즉시 조치: Opus 1M 모델로 전환 (/model claude-opus-4-5 또는 설정 변경)
2. 플러그인 컨텍스트 절감: claude-memsmart_searchget_observations 순서로 필요한 관찰만 로드
3. superpowers 스킬이 많은 SYSTEM 컨텍스트를 주입함 — 단순 작업 시 플러그인 비활성화 고려
4. SessionStart 훅(vault-context-loader.sh, knowledge-graph-loader.py)이 컨텍스트를 자동 주입 — 컨텍스트 부족 시 post-compact-context.sh가 컴팩션 후 재로딩
5. 포기하거나 새 세션으로 미루지 않음 — Opus 1M 전환 후 계속 진행