@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.
@@ -60,12 +60,12 @@ findings:
60
60
  - title: "finding title"
61
61
  summary: "summary"
62
62
  url: "https://..."
63
- date: "2024-01-15"
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: "2024-01-15"
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 2024"
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 | 2024-01 | HIGH |
349
- | [Reddit](URL) | Approach B more practical | 2024-06 | MEDIUM |
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 smaller, manageable sub-tasks or issues. **Aim for optimal count over excessive issues (keep it manageable)**
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
- **Tasks**:
63
- - [ ] Specific requirement 1
64
- - [ ] Specific requirement 2
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` - Change description
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()
@@ -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 `SPEC.md` or a user-specified file
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yeongjaeyou/claude-code-config",
3
- "version": "0.23.0",
3
+ "version": "0.24.0",
4
4
  "description": "Claude Code CLI custom commands, agents, and skills",
5
5
  "bin": {
6
6
  "claude-code-config": "./bin/cli.js"
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
- }