@yeongjaeyou/claude-code-config 0.23.0 → 0.24.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/.claude/agents/web-researcher.md +5 -5
- package/.claude/commands/gh/decompose-issue.md +40 -5
- package/.claude/guidelines/ml-guidelines.md +15 -0
- package/.claude/hooks/auto-format-python.py +53 -0
- package/.claude/settings.json +24 -0
- package/.claude/skills/interview-methodology/SKILL.md +10 -1
- package/package.json +1 -1
- package/.mcp.json +0 -35
|
@@ -60,12 +60,12 @@ findings:
|
|
|
60
60
|
- title: "finding title"
|
|
61
61
|
summary: "summary"
|
|
62
62
|
url: "https://..."
|
|
63
|
-
date: "
|
|
63
|
+
date: "2026-01-15"
|
|
64
64
|
reliability: high | medium | low
|
|
65
65
|
sources:
|
|
66
66
|
- url: "https://..."
|
|
67
67
|
title: "source title"
|
|
68
|
-
date: "
|
|
68
|
+
date: "2026-01-15"
|
|
69
69
|
platform: "github"
|
|
70
70
|
confidence: 0.8 # 0.0-1.0 (information sufficiency)
|
|
71
71
|
```
|
|
@@ -80,7 +80,7 @@ conflicts:
|
|
|
80
80
|
- "Reddit recommends A, but official docs recommend B"
|
|
81
81
|
suggested_followups:
|
|
82
82
|
- platform: "arxiv"
|
|
83
|
-
query: "benchmark comparison
|
|
83
|
+
query: "benchmark comparison 2026"
|
|
84
84
|
reason: "Need performance data"
|
|
85
85
|
```
|
|
86
86
|
|
|
@@ -345,8 +345,8 @@ When conflicts remain unresolved:
|
|
|
345
345
|
|
|
346
346
|
| Source | Position | Date | Reliability |
|
|
347
347
|
|--------|----------|------|-------------|
|
|
348
|
-
| [Official Docs](URL) | Recommends approach A |
|
|
349
|
-
| [Reddit](URL) | Approach B more practical |
|
|
348
|
+
| [Official Docs](URL) | Recommends approach A | 2026-01 | HIGH |
|
|
349
|
+
| [Reddit](URL) | Approach B more practical | 2025-06 | MEDIUM |
|
|
350
350
|
|
|
351
351
|
**Analysis**: Official docs recommend A, but community finds B more effective in practice. Choose based on your situation.
|
|
352
352
|
```
|
|
@@ -19,7 +19,7 @@ Break down large work items into manageable, independent issues. Follow project
|
|
|
19
19
|
- If non-code work (docs/infra) → Inform: "TDD not required. (Reason: Non-code work)"
|
|
20
20
|
- If TDD selected: Add `<!-- TDD: enabled -->` marker to each issue body
|
|
21
21
|
4. Analyze work: Understand core requirements and objectives
|
|
22
|
-
5. Decompose work: Split major tasks into
|
|
22
|
+
5. Decompose work: Split major tasks into **context-completable units** - each issue should be completable in a single Claude session without context switching. Group related features together rather than splitting by individual functions
|
|
23
23
|
6. Analyze dependencies: Identify prerequisite tasks
|
|
24
24
|
7. Suggest milestone name: Propose a milestone to group decomposed tasks
|
|
25
25
|
8. Check related PRs (optional): Run `gh pr list --state closed --limit 20` for similar work references (skip if none)
|
|
@@ -33,6 +33,33 @@ Break down large work items into manageable, independent issues. Follow project
|
|
|
33
33
|
- If project exists: Ask user via AskUserQuestion whether to add issues
|
|
34
34
|
- If yes: Run `gh project item-add <project-number> --owner <owner> --url <issue-url>` for each issue
|
|
35
35
|
|
|
36
|
+
## Issue Sizing Principle
|
|
37
|
+
|
|
38
|
+
### Context-Completable Units
|
|
39
|
+
Each issue should be designed to be **completable in a single Claude session**:
|
|
40
|
+
|
|
41
|
+
- **Group related features** rather than splitting by individual functions
|
|
42
|
+
- **Minimize context switching** - all necessary information should be within the issue
|
|
43
|
+
- **Include implementation details** - specific enough that no external lookup is needed during execution
|
|
44
|
+
|
|
45
|
+
### Sizing Guidelines
|
|
46
|
+
|
|
47
|
+
| Good (Context-Completable) | Bad (Over-Fragmented) |
|
|
48
|
+
|---------------------------|----------------------|
|
|
49
|
+
| "Add user authentication with login/logout/session" | "Add login button", "Add logout button", "Add session handling" (3 separate issues) |
|
|
50
|
+
| "Implement CRUD API for products" | "Add create endpoint", "Add read endpoint", "Add update endpoint", "Add delete endpoint" (4 separate issues) |
|
|
51
|
+
| "Setup CI/CD pipeline with test and deploy stages" | "Add test stage", "Add deploy stage" (2 separate issues) |
|
|
52
|
+
|
|
53
|
+
### Issue Content Depth
|
|
54
|
+
Since issues are larger, content must be **more detailed**:
|
|
55
|
+
|
|
56
|
+
1. **Implementation order** - numbered steps for execution sequence
|
|
57
|
+
2. **File-by-file changes** - specific modifications per file
|
|
58
|
+
3. **Code snippets** - key patterns or structures to implement
|
|
59
|
+
4. **Edge cases** - known gotchas or considerations
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
36
63
|
## Milestone Description Guidelines
|
|
37
64
|
|
|
38
65
|
Milestone description must include:
|
|
@@ -59,12 +86,20 @@ Examples (vary by project, for reference only):
|
|
|
59
86
|
|
|
60
87
|
**Purpose**: [Why this is needed]
|
|
61
88
|
|
|
62
|
-
**
|
|
63
|
-
|
|
64
|
-
|
|
89
|
+
**Implementation Steps** (in order):
|
|
90
|
+
1. [ ] Step 1 - description with specific details
|
|
91
|
+
2. [ ] Step 2 - description with specific details
|
|
92
|
+
3. [ ] Step 3 - description with specific details
|
|
65
93
|
|
|
66
94
|
**Files to modify**:
|
|
67
|
-
- `path/filename` -
|
|
95
|
+
- `path/filename` - Specific change (add/modify/remove what)
|
|
96
|
+
- `path/filename2` - Specific change with code pattern if needed
|
|
97
|
+
|
|
98
|
+
**Key Implementation Details**:
|
|
99
|
+
```
|
|
100
|
+
// Include code snippets, patterns, or structures when helpful
|
|
101
|
+
// This reduces need for external lookup during execution
|
|
102
|
+
```
|
|
68
103
|
|
|
69
104
|
**Completion criteria**:
|
|
70
105
|
- [ ] Implementation complete (all tasks checked)
|
|
@@ -47,6 +47,21 @@ img = annotator.annotate(img, detections) # BGR colors on RGB image -> inverted
|
|
|
47
47
|
plt.imshow(img)
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
### Exception: Ultralytics YOLO
|
|
51
|
+
|
|
52
|
+
Ultralytics YOLO handles BGR to RGB conversion internally. Do NOT manually convert before passing to YOLO.
|
|
53
|
+
|
|
54
|
+
```python
|
|
55
|
+
# Correct: Pass BGR directly to YOLO (handles conversion internally)
|
|
56
|
+
img = cv2.imread(path) # BGR
|
|
57
|
+
results = yolo_model(img) # YOLO converts BGR->RGB internally
|
|
58
|
+
|
|
59
|
+
# Wrong: Manual conversion causes double conversion
|
|
60
|
+
img = cv2.imread(path)
|
|
61
|
+
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Unnecessary
|
|
62
|
+
results = yolo_model(img) # YOLO converts again -> RGB->BGR (inverted)
|
|
63
|
+
```
|
|
64
|
+
|
|
50
65
|
## Ultralytics WandB Integration
|
|
51
66
|
|
|
52
67
|
Ultralytics YOLO has WandB disabled by default.
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Auto-fix Python files with ruff after Write/Edit operations."""
|
|
3
|
+
|
|
4
|
+
import json
|
|
5
|
+
import sys
|
|
6
|
+
import subprocess
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def main():
|
|
11
|
+
"""Main hook handler."""
|
|
12
|
+
try:
|
|
13
|
+
data = json.load(sys.stdin)
|
|
14
|
+
except json.JSONDecodeError:
|
|
15
|
+
sys.exit(0)
|
|
16
|
+
|
|
17
|
+
file_path = data.get("tool_input", {}).get("file_path")
|
|
18
|
+
if not file_path:
|
|
19
|
+
sys.exit(0)
|
|
20
|
+
|
|
21
|
+
# Only process Python files
|
|
22
|
+
if not file_path.endswith((".py", ".pyi")):
|
|
23
|
+
sys.exit(0)
|
|
24
|
+
|
|
25
|
+
# Skip if file doesn't exist
|
|
26
|
+
if not os.path.isfile(file_path):
|
|
27
|
+
sys.exit(0)
|
|
28
|
+
|
|
29
|
+
project_dir = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
|
30
|
+
|
|
31
|
+
try:
|
|
32
|
+
# Lint fix
|
|
33
|
+
subprocess.run(
|
|
34
|
+
["uv", "run", "ruff", "check", "--fix", file_path],
|
|
35
|
+
cwd=project_dir,
|
|
36
|
+
capture_output=True,
|
|
37
|
+
timeout=30,
|
|
38
|
+
)
|
|
39
|
+
# Format
|
|
40
|
+
subprocess.run(
|
|
41
|
+
["uv", "run", "ruff", "format", file_path],
|
|
42
|
+
cwd=project_dir,
|
|
43
|
+
capture_output=True,
|
|
44
|
+
timeout=30,
|
|
45
|
+
)
|
|
46
|
+
except (subprocess.TimeoutExpired, FileNotFoundError):
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
sys.exit(0)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
if __name__ == "__main__":
|
|
53
|
+
main()
|
package/.claude/settings.json
CHANGED
|
@@ -10,6 +10,30 @@
|
|
|
10
10
|
}
|
|
11
11
|
]
|
|
12
12
|
}
|
|
13
|
+
],
|
|
14
|
+
"PreToolUse": [
|
|
15
|
+
{
|
|
16
|
+
"matcher": "Edit|Write",
|
|
17
|
+
"hooks": [
|
|
18
|
+
{
|
|
19
|
+
"type": "command",
|
|
20
|
+
"command": "python3 -c \"import json,sys; p=json.load(sys.stdin).get('tool_input',{}).get('file_path',''); blocked=['.env','.env.local','package-lock.json','.git/','secrets']; sys.exit(2 if any(b in p for b in blocked) else 0)\"",
|
|
21
|
+
"timeout": 5
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"PostToolUse": [
|
|
27
|
+
{
|
|
28
|
+
"matcher": "Edit|Write",
|
|
29
|
+
"hooks": [
|
|
30
|
+
{
|
|
31
|
+
"type": "command",
|
|
32
|
+
"command": "python3 .claude/hooks/auto-format-python.py",
|
|
33
|
+
"timeout": 60
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
13
37
|
]
|
|
14
38
|
}
|
|
15
39
|
}
|
|
@@ -140,11 +140,20 @@ Each option should explain implications, not just the choice itself.
|
|
|
140
140
|
When you've gathered sufficient information:
|
|
141
141
|
1. Summarize all requirements back to the user
|
|
142
142
|
2. Ask for confirmation using AskUserQuestion
|
|
143
|
-
3. Write the comprehensive spec to
|
|
143
|
+
3. Write the comprehensive spec to `.claude/spec/{YYYY-MM-DD}-{feature-name}.md`
|
|
144
|
+
- Date: Interview completion date (ISO format)
|
|
145
|
+
- Feature name: kebab-case (e.g., `dark-mode`, `user-authentication`)
|
|
146
|
+
- Create `.claude/spec/` directory if it doesn't exist
|
|
144
147
|
4. The spec should be detailed enough for implementation without further questions
|
|
145
148
|
|
|
146
149
|
## Spec Output Format
|
|
147
150
|
|
|
151
|
+
**File path**: `.claude/spec/{YYYY-MM-DD}-{feature-name}.md`
|
|
152
|
+
|
|
153
|
+
**Examples**:
|
|
154
|
+
- `.claude/spec/2026-01-20-dark-mode.md`
|
|
155
|
+
- `.claude/spec/2026-01-20-api-rate-limiting.md`
|
|
156
|
+
|
|
148
157
|
After interview completion, write a spec file with:
|
|
149
158
|
|
|
150
159
|
```markdown
|
package/package.json
CHANGED
package/.mcp.json
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"mcpdocs": {
|
|
4
|
-
"type": "stdio",
|
|
5
|
-
"command": "npx",
|
|
6
|
-
"args": [
|
|
7
|
-
"@hapus/mcp-cache",
|
|
8
|
-
"uvx",
|
|
9
|
-
"--from",
|
|
10
|
-
"mcpdoc",
|
|
11
|
-
"mcpdoc",
|
|
12
|
-
"--urls",
|
|
13
|
-
"ClaudeCode:https://code.claude.com/docs/llms.txt",
|
|
14
|
-
"Cursor:https://docs.cursor.com/llms.txt",
|
|
15
|
-
"--allowed-domains",
|
|
16
|
-
"*"
|
|
17
|
-
]
|
|
18
|
-
},
|
|
19
|
-
"deepwiki": {
|
|
20
|
-
"type": "http",
|
|
21
|
-
"url": "https://mcp.deepwiki.com/mcp"
|
|
22
|
-
},
|
|
23
|
-
"serena": {
|
|
24
|
-
"type": "stdio",
|
|
25
|
-
"command": "uvx",
|
|
26
|
-
"args": [
|
|
27
|
-
"--from",
|
|
28
|
-
"git+https://github.com/oraios/serena",
|
|
29
|
-
"serena-mcp-server",
|
|
30
|
-
"--enable-web-dashboard",
|
|
31
|
-
"false"
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|