coding-buddy-mcp 1.0.3 → 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 +30 -26
- package/package.json +1 -1
- package/scripts/buddy-hook.sh +116 -0
package/dist/index.js
CHANGED
|
@@ -7,35 +7,39 @@ import { z } from "zod";
|
|
|
7
7
|
// 두 글의 37개 액션아이템을 전부 Claude 행동 규칙으로 인코딩.
|
|
8
8
|
// =============================================================================
|
|
9
9
|
const INSTRUCTIONS = `
|
|
10
|
-
You have a Coding Buddy.
|
|
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.
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
If the request has NO file path, NO function name, and NO error message → ask for specifics. Do NOT call any tools.
|
|
14
|
-
- "버그 찾아줘" → respond: "어떤 파일에서 어떤 증상이 나오나요? 파일 경로와 증상을 알려주세요."
|
|
15
|
-
- "리팩토링 해줘" → respond: "어떤 파일을 리팩토링할까요?"
|
|
16
|
-
- "테스트 작성해줘" → respond: "어떤 파일/함수에 대한 테스트인가요?"
|
|
17
|
-
If the request IS specific (has a file path or function name) → go to Step 2.
|
|
13
|
+
Additionally, follow these rules while working:
|
|
18
14
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
Say this in 1 line, then proceed to Step 3.
|
|
15
|
+
## 비용 최적화
|
|
16
|
+
- Output은 input보다 5배 비싸다 ($75 vs $15/1M). 응답을 짧게 유지하라.
|
|
17
|
+
- 파일 전체를 읽지 말고 필요한 섹션만 읽어라.
|
|
18
|
+
- 불필요한 요약을 하지 마라 ("제가 한 작업을 정리하면..." 금지).
|
|
19
|
+
- Thinking 토큰도 output 단가로 과금된다. 단순 작업에 과도한 사고는 낭비다.
|
|
25
20
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
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 도구 정의가 매 요청 토큰 차지)
|
|
39
43
|
`;
|
|
40
44
|
// =============================================================================
|
|
41
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
|