coding-buddy-mcp 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +33 -105
- package/package.json +1 -1
- package/scripts/buddy-hook.sh +116 -0
package/dist/index.js
CHANGED
|
@@ -7,111 +7,39 @@ import { z } from "zod";
|
|
|
7
7
|
// 두 글의 37개 액션아이템을 전부 Claude 행동 규칙으로 인코딩.
|
|
8
8
|
// =============================================================================
|
|
9
9
|
const INSTRUCTIONS = `
|
|
10
|
-
You
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
======================================================================
|
|
44
|
-
END OF CRITICAL GATE — SPECIFICITY
|
|
45
|
-
======================================================================
|
|
46
|
-
|
|
47
|
-
======================================================================
|
|
48
|
-
CRITICAL GATE 2 — MODEL SELECTION (MANDATORY)
|
|
49
|
-
======================================================================
|
|
50
|
-
|
|
51
|
-
After the request passes the specificity check, you MUST call the analyze_task tool
|
|
52
|
-
BEFORE starting any work. This is NOT optional.
|
|
53
|
-
|
|
54
|
-
Steps:
|
|
55
|
-
1. Call analyze_task with the user's task description
|
|
56
|
-
2. Present the result naturally in Korean:
|
|
57
|
-
- "이 작업은 [model]이 적합합니다. [이유]"
|
|
58
|
-
- If current model doesn't match → "현재 [current]를 사용 중인데, 이 작업은 [recommended]가 적합합니다. 새 세션에서 /model [recommended] 로 바꾸시면 비용을 절약할 수 있습니다."
|
|
59
|
-
- If current model matches → briefly confirm and proceed
|
|
60
|
-
3. THEN start working on the task
|
|
61
|
-
|
|
62
|
-
You MUST call analyze_task even for simple tasks — it only takes one tool call
|
|
63
|
-
and saves the user significant money by recommending the right model.
|
|
64
|
-
|
|
65
|
-
Model pricing reference:
|
|
66
|
-
- Haiku ($1/$5 per 1M tokens): typos, renaming, formatting, simple lookups
|
|
67
|
-
- Sonnet ($15/$75 per 1M tokens): features, bug fixes, tests, code review
|
|
68
|
-
- Opus ($15/$75 per 1M tokens): architecture, migrations, complex refactors
|
|
69
|
-
- Mid-session model change = cache break = 10x cost spike → ALWAYS suggest new session
|
|
70
|
-
|
|
71
|
-
======================================================================
|
|
72
|
-
END OF CRITICAL GATE — MODEL SELECTION
|
|
73
|
-
======================================================================
|
|
74
|
-
|
|
75
|
-
## 3. SESSION DISCIPLINE
|
|
76
|
-
- ONE session = ONE focused task. When topic changes → suggest: "새 작업이니 새 세션에서 하는 게 효율적입니다"
|
|
77
|
-
- Conversation getting long → suggest: "/compact 한번 해주세요 (토큰 절약)"
|
|
78
|
-
- Task complete → suggest: "/clear 또는 새 세션 시작 추천합니다"
|
|
79
|
-
- Use compaction-surviving keywords in your messages: "todo:", "next:", "pending:", "remaining:"
|
|
80
|
-
- Always write FULL file paths (e.g., src/auth/login.ts) — paths with extensions survive compaction
|
|
81
|
-
- Resume within 5 min of leaving: "claude --resume latest" (cache still alive)
|
|
82
|
-
- Want to try two approaches? Suggest session fork
|
|
83
|
-
- Remind user periodically: "/cost 로 비용 확인해보세요"
|
|
84
|
-
|
|
85
|
-
## 4. CACHE PROTECTION — cache_read is 10x cheaper than input ($1.50 vs $15)
|
|
86
|
-
The Anthropic server cache expires after 5 minutes. When cache is alive, input costs drop 10x.
|
|
87
|
-
WARN the user BEFORE these cache-breaking actions:
|
|
88
|
-
- Model change mid-session → "캐시가 깨집니다. 새 세션에서 모델을 바꾸세요"
|
|
89
|
-
- CLAUDE.md edit during session → "세션 시작 전에 CLAUDE.md를 수정하세요. 지금 수정하면 캐시가 깨집니다"
|
|
90
|
-
- MCP server add/remove during session → "MCP 변경은 세션 시작 전에 하세요"
|
|
91
|
-
- If user seems to have returned after a break → "잠시 쉬고 오셨나요? 캐시가 만료됐을 수 있어서 첫 요청 비용이 좀 더 나올 수 있습니다"
|
|
92
|
-
|
|
93
|
-
## 5. OUTPUT EFFICIENCY
|
|
94
|
-
- Output tokens cost 5x more than input ($75 vs $15 per 1M). Keep responses SHORT.
|
|
95
|
-
- Don't summarize what you just did. Don't repeat the user's question.
|
|
96
|
-
- Read ONLY the needed section of files, not entire files.
|
|
97
|
-
- Unstable network (cafe WiFi etc)? Warn: "네트워크가 불안정하면 큰 작업은 피하세요. 타임아웃 → 재시도 → 이중 과금 가능"
|
|
98
|
-
- Claude Code retries failed requests up to 2 times. Worst case: 3x billing for one request.
|
|
99
|
-
|
|
100
|
-
## 6. PRODUCTIVITY
|
|
101
|
-
- Complex tasks → suggest Plan Mode first: "먼저 Plan Mode에서 계획 세울까요? 파일 수정 없이 분석만 합니다"
|
|
102
|
-
- Multiple independent subtasks → use sub-agents in parallel (Explore agents for research, general-purpose for implementation)
|
|
103
|
-
- After code changes → suggest the pipeline: "/diff → /commit → /pr"
|
|
104
|
-
- No CLAUDE.md in project? → call setup_project tool for full recommendations
|
|
105
|
-
- Only enable NEEDED MCP servers. Each MCP's tool definitions consume tokens on EVERY request.
|
|
106
|
-
- Suggest permission mode matching task type:
|
|
107
|
-
- Review only: claude --permission-mode read-only
|
|
108
|
-
- Development: claude --permission-mode workspace-write
|
|
109
|
-
- Automation: configure settings.json allow list for common tools
|
|
110
|
-
|
|
111
|
-
## 7. WHEN TO CALL TOOLS
|
|
112
|
-
- analyze_task: At the start of EACH new task (model + approach recommendation)
|
|
113
|
-
- setup_project: When project lacks CLAUDE.md, or user asks about setup optimization
|
|
114
|
-
- cost_reference: When user asks about pricing, or when justifying model recommendation
|
|
10
|
+
You have a Coding Buddy. A UserPromptSubmit hook injects IMPORTANT hints before each message.
|
|
11
|
+
You MUST follow every IMPORTANT hint from the hook — they come from the user's configured rules.
|
|
12
|
+
|
|
13
|
+
Additionally, follow these rules while working:
|
|
14
|
+
|
|
15
|
+
## 비용 최적화
|
|
16
|
+
- Output은 input보다 5배 비싸다 ($75 vs $15/1M). 응답을 짧게 유지하라.
|
|
17
|
+
- 파일 전체를 읽지 말고 필요한 섹션만 읽어라.
|
|
18
|
+
- 불필요한 요약을 하지 마라 ("제가 한 작업을 정리하면..." 금지).
|
|
19
|
+
- Thinking 토큰도 output 단가로 과금된다. 단순 작업에 과도한 사고는 낭비다.
|
|
20
|
+
|
|
21
|
+
## 캐시 보호
|
|
22
|
+
- 5분 자리비움 후 복귀 시 → "캐시가 만료됐을 수 있습니다"
|
|
23
|
+
- 네트워크 불안정 시 → "큰 작업은 피하세요. 타임아웃→재시도→이중과금 가능"
|
|
24
|
+
|
|
25
|
+
## 세션 관리
|
|
26
|
+
- 작업 완료 후 → "/clear 또는 새 세션을 추천합니다"
|
|
27
|
+
- 대화 길어지면 → "/compact 한번 해주세요"
|
|
28
|
+
- 5분 이내 이어하기 → "claude --resume latest"
|
|
29
|
+
- 두 가지 방향 시도 → 세션 fork 제안
|
|
30
|
+
- /cost 로 비용 확인 주기적으로 안내
|
|
31
|
+
|
|
32
|
+
## 압축 생존
|
|
33
|
+
- 메시지에 todo:, next:, pending: 키워드 사용 (압축 후에도 보존됨)
|
|
34
|
+
- 파일 경로를 정확히 언급 (src/auth/login.ts 형태, 최대 8개 보존됨)
|
|
35
|
+
|
|
36
|
+
## 생산성
|
|
37
|
+
- 독립적 다중 작업 → 서브에이전트로 병렬 실행
|
|
38
|
+
- 코드 변경 완료 후 → "/diff → /commit → /pr 파이프라인" 안내
|
|
39
|
+
- CLAUDE.md 없는 프로젝트 → setup_project 도구 호출 또는 /init 제안
|
|
40
|
+
- 권한 모드: 리뷰=read-only, 개발=workspace-write
|
|
41
|
+
- settings.json에 자주 쓰는 도구 자동 허용 안내
|
|
42
|
+
- 필요한 MCP만 켜라 (각 MCP 도구 정의가 매 요청 토큰 차지)
|
|
115
43
|
`;
|
|
116
44
|
// =============================================================================
|
|
117
45
|
// Task Complexity Analysis — 작업 복잡도 판단 로직
|
package/package.json
CHANGED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Coding Buddy - UserPromptSubmit Hook
|
|
3
|
+
# 37개 액션아이템 중 강제성이 필요한 항목을 훅으로 실행한다.
|
|
4
|
+
# 매 유저 프롬프트마다 실행되어 Claude에게 리마인더를 주입한다.
|
|
5
|
+
|
|
6
|
+
INPUT=$(cat)
|
|
7
|
+
PROMPT=$(echo "$INPUT" | python3 -c "
|
|
8
|
+
import sys,json
|
|
9
|
+
d = json.load(sys.stdin)
|
|
10
|
+
print(d.get('message', d.get('prompt', d.get('content', d.get('text', '')))))
|
|
11
|
+
" 2>/dev/null)
|
|
12
|
+
|
|
13
|
+
if [ -z "$PROMPT" ]; then
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
LOWER=$(echo "$PROMPT" | tr '[:upper:]' '[:lower:]')
|
|
18
|
+
HINTS=""
|
|
19
|
+
|
|
20
|
+
# ==========================================================
|
|
21
|
+
# 1. 모호한 요청 감지 (도구 폭발 방지)
|
|
22
|
+
# ==========================================================
|
|
23
|
+
HAS_PATH=false
|
|
24
|
+
echo "$PROMPT" | grep -qE '[a-zA-Z0-9_-]+/[a-zA-Z0-9_.-]+\.[a-zA-Z]{1,5}' && HAS_PATH=true
|
|
25
|
+
echo "$PROMPT" | grep -qE '\.[tj]sx?$|\.(rs|py|go|json|md|css|html|vue|svelte)' && HAS_PATH=true
|
|
26
|
+
|
|
27
|
+
VAGUE=false
|
|
28
|
+
if [ "$HAS_PATH" = false ]; then
|
|
29
|
+
if echo "$LOWER" | grep -qiE '버그.*(찾|fix)|리팩토링|refactor|개선|improve|테스트.*작성|write.*test|에러가 나|error|코드.*리뷰|review|설명해|explain.*code|분석해|analyz'; then
|
|
30
|
+
VAGUE=true
|
|
31
|
+
fi
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
if [ "$VAGUE" = true ]; then
|
|
35
|
+
HINTS="${HINTS}IMPORTANT: 이 요청은 구체적이지 않습니다. 도구를 호출하지 말고 파일 경로와 증상을 먼저 물어보세요. 모호한 요청은 4+턴 10+도구호출로 비용이 낭비됩니다.\n"
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# ==========================================================
|
|
39
|
+
# 2. 주제 변경 감지 (세션 분리)
|
|
40
|
+
# ==========================================================
|
|
41
|
+
if echo "$LOWER" | grep -qiE '그건 됐고|이제 다른|다음으로|다른 작업|다른 거|이건 끝|이건 됐|넘어가|다음 할|다른 주제|그만하고|전환|switch to|move on|next task|different thing|change topic'; then
|
|
42
|
+
HINTS="${HINTS}IMPORTANT: 주제가 바뀌는 것 같습니다. 반드시 이렇게 안내하세요: '새 작업이니 새 세션에서 시작하는 게 효율적입니다. 한 세션에 한 작업이 비용과 품질 모두 유리합니다.'\n"
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
# ==========================================================
|
|
46
|
+
# 3. 작업 복잡도 분석 → 모델 추천
|
|
47
|
+
# ==========================================================
|
|
48
|
+
COMPLEXITY="medium"
|
|
49
|
+
if echo "$LOWER" | grep -qiE '오타|typo|rename|이름.*변경|format|포맷|간단|simple|삭제.*줄|주석|comment|import|복사|copy|move file|간단히|quick'; then
|
|
50
|
+
COMPLEXITY="simple"
|
|
51
|
+
elif echo "$LOWER" | grep -qiE 'migrat|마이그레이션|architect|아키텍처|전체.*리팩|redesign|rewrite|스키마|schema|from scratch|전체 구조|시스템.*설계|데이터베이스|다시 만들|overhaul'; then
|
|
52
|
+
COMPLEXITY="complex"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
case $COMPLEXITY in
|
|
56
|
+
simple)
|
|
57
|
+
MODEL_REC="Haiku (\$1/\$5 per 1M)"
|
|
58
|
+
MODEL_CMD="/model haiku"
|
|
59
|
+
;;
|
|
60
|
+
complex)
|
|
61
|
+
MODEL_REC="Opus (\$15/\$75 per 1M)"
|
|
62
|
+
MODEL_CMD="/model opus"
|
|
63
|
+
;;
|
|
64
|
+
*)
|
|
65
|
+
MODEL_REC="Sonnet (\$15/\$75 per 1M)"
|
|
66
|
+
MODEL_CMD="/model sonnet"
|
|
67
|
+
;;
|
|
68
|
+
esac
|
|
69
|
+
|
|
70
|
+
if [ "$VAGUE" = false ]; then
|
|
71
|
+
HINTS="${HINTS}IMPORTANT: 응답 첫 줄에 반드시 포함 → 💡 모델 추천: ${MODEL_REC}. 현재 모델이 다르면 새 세션에서 ${MODEL_CMD} 을 안내하세요.\n"
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
# ==========================================================
|
|
75
|
+
# 4. 복잡한 작업 → Plan Mode 제안
|
|
76
|
+
# ==========================================================
|
|
77
|
+
if [ "$COMPLEXITY" = "complex" ]; then
|
|
78
|
+
HINTS="${HINTS}IMPORTANT: 복잡한 작업입니다. 반드시 Plan Mode를 먼저 제안하세요: '먼저 Plan Mode에서 영향받는 파일을 파악한 후 실행하는 게 효율적입니다.'\n"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# ==========================================================
|
|
82
|
+
# 5. CLAUDE.md 수정 감지 → 캐시 브레이크 경고
|
|
83
|
+
# ==========================================================
|
|
84
|
+
if echo "$LOWER" | grep -qiE 'claude\.md.*(수정|추가|변경|편집|update|edit|modify|add)|claude\.md.*rule|규칙.*claude'; then
|
|
85
|
+
HINTS="${HINTS}IMPORTANT: CLAUDE.md 수정은 캐시 브레이크를 유발합니다. 반드시 경고하세요: '세션 시작 전에 CLAUDE.md를 수정하세요. 지금 수정하면 캐시가 깨져서 비용이 10배 올라갑니다.'\n"
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
# ==========================================================
|
|
89
|
+
# 6. 모델 변경 요청 감지 → 캐시 브레이크 경고
|
|
90
|
+
# ==========================================================
|
|
91
|
+
if echo "$LOWER" | grep -qiE '모델.*(바꿔|변경|전환|switch)|haiku로|sonnet으로|opus로|change.*model|switch.*model'; then
|
|
92
|
+
HINTS="${HINTS}IMPORTANT: 세션 중 모델 변경은 캐시 브레이크(비용 10배)를 유발합니다. 반드시 안내: '새 세션에서 모델을 바꾸세요. 세션 중간에 바꾸면 캐시가 깨집니다.'\n"
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
# ==========================================================
|
|
96
|
+
# 7. MCP 변경 감지 → 캐시 브레이크 경고
|
|
97
|
+
# ==========================================================
|
|
98
|
+
if echo "$LOWER" | grep -qiE 'mcp.*(추가|삭제|켜|끄|설정|변경|add|remove|enable|disable)'; then
|
|
99
|
+
HINTS="${HINTS}IMPORTANT: MCP 변경은 캐시 브레이크를 유발합니다. 안내: 'MCP 설정은 세션 시작 전에 하세요.'\n"
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
# ==========================================================
|
|
103
|
+
# 8. 전체 프로젝트 탐색 요청 → 범위 축소 유도
|
|
104
|
+
# ==========================================================
|
|
105
|
+
if echo "$LOWER" | grep -qiE '전체 구조|프로젝트 전체|전체 파일|모든 파일|entire project|all files|whole project|전체.*파악|프로젝트.*설명'; then
|
|
106
|
+
HINTS="${HINTS}IMPORTANT: 전체 프로젝트 탐색은 비용이 큽니다. 구체적인 디렉토리나 파일을 지정하도록 안내하세요.\n"
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
# ==========================================================
|
|
110
|
+
# 출력
|
|
111
|
+
# ==========================================================
|
|
112
|
+
if [ -n "$HINTS" ]; then
|
|
113
|
+
printf "$HINTS"
|
|
114
|
+
fi
|
|
115
|
+
|
|
116
|
+
exit 0
|