@wbern/claude-instructions 1.9.0 → 1.11.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/LICENSE +21 -0
- package/README.md +21 -15
- package/bin/cli.js +265 -47
- package/downloads/with-beads/busycommit.md +16 -0
- package/downloads/with-beads/code-review.md +248 -0
- package/downloads/with-beads/commands-metadata.json +15 -1
- package/downloads/with-beads/commit.md +16 -0
- package/downloads/with-beads/gap.md +1 -0
- package/downloads/with-beads/plan.md +1 -2
- package/downloads/with-beads/worktree-add.md +68 -44
- package/downloads/with-beads/worktree-cleanup.md +74 -55
- package/downloads/without-beads/busycommit.md +16 -0
- package/downloads/without-beads/code-review.md +246 -0
- package/downloads/without-beads/commands-metadata.json +15 -1
- package/downloads/without-beads/commit.md +16 -0
- package/downloads/without-beads/gap.md +1 -0
- package/downloads/without-beads/worktree-add.md +68 -44
- package/downloads/without-beads/worktree-cleanup.md +74 -55
- package/package.json +4 -3
|
@@ -20,54 +20,71 @@ Clean up merged worktrees by finding the oldest merged branch, consolidating set
|
|
|
20
20
|
Additional info: $ARGUMENTS
|
|
21
21
|
|
|
22
22
|
<current_state>
|
|
23
|
-
Current branch:
|
|
24
|
-
Current worktrees:
|
|
23
|
+
Current branch: `git branch --show-current`
|
|
24
|
+
Current worktrees: `git worktree list`
|
|
25
25
|
</current_state>
|
|
26
26
|
|
|
27
27
|
<execution_steps>
|
|
28
28
|
<step_0>
|
|
29
|
-
<description>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
</
|
|
45
|
-
<
|
|
29
|
+
<description>Detect git hosting provider and available tools</description>
|
|
30
|
+
<detect_provider>
|
|
31
|
+
<check_remote_url>git remote get-url origin</check_remote_url>
|
|
32
|
+
<identify_host>
|
|
33
|
+
- github.com → GitHub
|
|
34
|
+
- gitlab.com → GitLab
|
|
35
|
+
- bitbucket.org → Bitbucket
|
|
36
|
+
- Other → Ask user
|
|
37
|
+
</identify_host>
|
|
38
|
+
</detect_provider>
|
|
39
|
+
<check_available_tools>
|
|
40
|
+
<list_mcp_servers>Check which git-hosting MCP servers are available (github, gitlab, etc.)</list_mcp_servers>
|
|
41
|
+
<check_cli>Check if gh/glab CLI is available as fallback</check_cli>
|
|
42
|
+
</check_available_tools>
|
|
43
|
+
<select_tool>
|
|
44
|
+
<if_single_mcp>If only one relevant MCP available, confirm with user</if_single_mcp>
|
|
45
|
+
<if_multiple>Let user choose which tool to use</if_multiple>
|
|
46
|
+
<if_told_earlier>If user specified tool earlier in conversation, use that without asking again</if_told_earlier>
|
|
47
|
+
<store_as>$GIT_HOST_TOOL (e.g., "github_mcp", "gitlab_mcp", "gh_cli")</store_as>
|
|
48
|
+
</select_tool>
|
|
49
|
+
|
|
50
|
+
<purpose>Detect git hosting provider and select appropriate tool for PR verification</purpose>
|
|
46
51
|
</step_0>
|
|
47
52
|
|
|
48
53
|
<step_1>
|
|
49
|
-
<description>
|
|
50
|
-
<
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
+
<description>Determine default branch and verify we're on it</description>
|
|
55
|
+
<find_default_branch>
|
|
56
|
+
<command>git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'</command>
|
|
57
|
+
<fallback>git remote show origin | grep 'HEAD branch' | cut -d: -f2 | tr -d ' '</fallback>
|
|
58
|
+
<store_as>$DEFAULT_BRANCH (typically "main" or "master")</store_as>
|
|
59
|
+
</find_default_branch>
|
|
60
|
+
<check_current_branch>git branch --show-current</check_current_branch>
|
|
61
|
+
<verify>Current branch must equal $DEFAULT_BRANCH</verify>
|
|
62
|
+
<error_if_not_default>Exit with error: "This command must be run from the default branch ($DEFAULT_BRANCH)"</error_if_not_default>
|
|
63
|
+
<purpose>Ensure we're consolidating to the default branch worktree</purpose>
|
|
54
64
|
</step_1>
|
|
55
65
|
|
|
56
66
|
<step_2>
|
|
57
67
|
<description>Get list of all worktrees</description>
|
|
58
68
|
<command>git worktree list --porcelain</command>
|
|
59
69
|
<parse_output>Extract worktree paths and branch names</parse_output>
|
|
60
|
-
<
|
|
70
|
+
<exclude_default>Filter out the default branch worktree from cleanup candidates</exclude_default>
|
|
61
71
|
<purpose>Identify all worktrees that could potentially be cleaned up</purpose>
|
|
62
72
|
</step_2>
|
|
63
73
|
|
|
64
74
|
<step_3>
|
|
65
75
|
<description>Find oldest worktree by directory age</description>
|
|
66
76
|
<get_worktree_ages>
|
|
67
|
-
<
|
|
68
|
-
<
|
|
77
|
+
<detect_platform>uname -s (returns "Darwin" for macOS, "Linux" for Linux)</detect_platform>
|
|
78
|
+
<command_macos>git worktree list | grep -v "\[$DEFAULT_BRANCH\]" | awk '{print $1}' > /tmp/worktrees-$$.txt && while IFS= read -r path; do echo "$(/usr/bin/stat -f '%Sm' -t '%Y-%m-%d %H:%M' "$path" 2>/dev/null)|$path"; done < /tmp/worktrees-$$.txt | sort; rm -f /tmp/worktrees-$$.txt</command_macos>
|
|
79
|
+
<command_linux>git worktree list | grep -v "\[$DEFAULT_BRANCH\]" | awk '{print $1}' > /tmp/worktrees-$$.txt && while IFS= read -r path; do echo "$(stat -c '%y' "$path" 2>/dev/null | cut -d. -f1)|$path"; done < /tmp/worktrees-$$.txt | sort; rm -f /tmp/worktrees-$$.txt</command_linux>
|
|
69
80
|
<purpose>List all worktrees sorted by directory modification time (oldest first)</purpose>
|
|
70
|
-
<
|
|
81
|
+
<critical_notes>
|
|
82
|
+
- Replace $DEFAULT_BRANCH with value from step_1 (e.g., "main" or "master")
|
|
83
|
+
- grep "\[branch\]" matches branch name in brackets, not paths containing the word
|
|
84
|
+
- Temp file approach avoids subshell parsing issues with piped while-loops
|
|
85
|
+
- /usr/bin/stat on macOS avoids homebrew stat conflicts
|
|
86
|
+
</critical_notes>
|
|
87
|
+
<expected_output_format>YYYY-MM-DD HH:MM|/full/path/to/worktree (oldest first)</expected_output_format>
|
|
71
88
|
</get_worktree_ages>
|
|
72
89
|
<filter_recent>
|
|
73
90
|
<exclude_new>For worktrees created within the last 24 hours, let user know that this worktree might not be worth cleaning</exclude_new>
|
|
@@ -78,28 +95,27 @@ Current worktrees: !git worktree list`
|
|
|
78
95
|
<important_note>DO NOT use "git branch --merged" to check merge status - it's unreliable</important_note>
|
|
79
96
|
<proceed_to_pr_check>Move directly to step 4 to verify PR merge status instead</proceed_to_pr_check>
|
|
80
97
|
</select_oldest>
|
|
81
|
-
<purpose>Identify oldest worktree candidate - actual merge verification happens via
|
|
98
|
+
<purpose>Identify oldest worktree candidate - actual merge verification happens via PR/MR in next step</purpose>
|
|
82
99
|
</step_3>
|
|
83
100
|
|
|
84
101
|
<step_4>
|
|
85
|
-
<description>Verify
|
|
102
|
+
<description>Verify PR/MR merge status (primary merge verification)</description>
|
|
86
103
|
<determine_repo>
|
|
87
104
|
<check_remote>git remote get-url origin</check_remote>
|
|
88
|
-
<parse_repo>Extract owner/repo from
|
|
89
|
-
<fallback>Use project repository from git remote (owner/repo format)</fallback>
|
|
105
|
+
<parse_repo>Extract owner/repo from remote URL</parse_repo>
|
|
90
106
|
</determine_repo>
|
|
91
107
|
<search_pr>
|
|
92
|
-
<tool>mcp__github__search_pull_requests</tool>
|
|
93
|
-
<query>
|
|
94
|
-
<purpose>Find PR for this branch targeting
|
|
108
|
+
<tool>Use $GIT_HOST_TOOL from step_0 (e.g., mcp__github__search_pull_requests, mcp__gitlab__*, or gh CLI)</tool>
|
|
109
|
+
<query>Find PRs/MRs where head={branch_name} and base=$DEFAULT_BRANCH</query>
|
|
110
|
+
<purpose>Find PR/MR for this branch targeting default branch</purpose>
|
|
95
111
|
<important>This is the PRIMARY way to verify if a branch was merged - NOT git commands</important>
|
|
96
112
|
</search_pr>
|
|
97
113
|
<verify_pr_merged>
|
|
98
114
|
<if_pr_found>
|
|
99
|
-
<get_pr_details>Use
|
|
100
|
-
<confirm_merged>Verify PR state is "closed" AND merged_at is not null AND base is "
|
|
101
|
-
<extract_issue_number>Look for issue references in PR title/body (e.g., #
|
|
102
|
-
<if_merged>Proceed with cleanup - this branch was definitively merged to
|
|
115
|
+
<get_pr_details>Use $GIT_HOST_TOOL to get full PR/MR info</get_pr_details>
|
|
116
|
+
<confirm_merged>Verify PR/MR state is "closed"/"merged" AND merged_at is not null AND base is "$DEFAULT_BRANCH"</confirm_merged>
|
|
117
|
+
<extract_issue_number>Look for issue references in PR title/body (e.g., #123, owner/repo#123)</extract_issue_number>
|
|
118
|
+
<if_merged>Proceed with cleanup - this branch was definitively merged to default branch</if_merged>
|
|
103
119
|
<if_not_merged>
|
|
104
120
|
<skip_worktree>This worktree is NOT merged - continue to next oldest worktree</skip_worktree>
|
|
105
121
|
<repeat_from_step_3>Go back and find the next oldest worktree to check</repeat_from_step_3>
|
|
@@ -110,15 +126,14 @@ Current worktrees: !git worktree list`
|
|
|
110
126
|
<continue_to_next>Continue checking next oldest worktree</continue_to_next>
|
|
111
127
|
</if_no_pr>
|
|
112
128
|
</verify_pr_merged>
|
|
113
|
-
<purpose>Use
|
|
129
|
+
<purpose>Use PR/MR status as the authoritative source for merge verification instead of unreliable git commands</purpose>
|
|
114
130
|
</step_4>
|
|
115
131
|
|
|
116
132
|
<step_4_5>
|
|
117
|
-
<description>Check and close related
|
|
133
|
+
<description>Check and close related issue</description>
|
|
118
134
|
<if_issue_found>
|
|
119
135
|
<get_issue_details>
|
|
120
|
-
<tool>
|
|
121
|
-
<method>get</method>
|
|
136
|
+
<tool>Use $GIT_HOST_TOOL to read issue details</tool>
|
|
122
137
|
<extract_repo>From issue reference (main-repo vs cross-repo)</extract_repo>
|
|
123
138
|
</get_issue_details>
|
|
124
139
|
<check_issue_state>
|
|
@@ -126,14 +141,13 @@ Current worktrees: !git worktree list`
|
|
|
126
141
|
<ask_close>Ask user: "Related issue #{number} is still open. Should I close it? (y/N)"</ask_close>
|
|
127
142
|
<if_yes_close>
|
|
128
143
|
<add_closing_comment>
|
|
129
|
-
<tool>
|
|
130
|
-
<body_template>Closing this issue as branch {branch_name} was merged to
|
|
131
|
-
<get_merge_date>Extract merge date from PR details</get_merge_date>
|
|
132
|
-
<get_pr_number>Use PR number from search results</get_pr_number>
|
|
144
|
+
<tool>Use $GIT_HOST_TOOL to add comment</tool>
|
|
145
|
+
<body_template>Closing this issue as branch {branch_name} was merged to {default_branch} on {merge_date} via PR/MR #{pr_number}.</body_template>
|
|
146
|
+
<get_merge_date>Extract merge date from PR/MR details</get_merge_date>
|
|
147
|
+
<get_pr_number>Use PR/MR number from search results</get_pr_number>
|
|
133
148
|
</add_closing_comment>
|
|
134
149
|
<close_issue>
|
|
135
|
-
<tool>
|
|
136
|
-
<method>update</method>
|
|
150
|
+
<tool>Use $GIT_HOST_TOOL to close issue</tool>
|
|
137
151
|
<state>closed</state>
|
|
138
152
|
<state_reason>completed</state_reason>
|
|
139
153
|
</close_issue>
|
|
@@ -215,17 +229,22 @@ Current worktrees: !git worktree list`
|
|
|
215
229
|
|
|
216
230
|
<important_notes>
|
|
217
231
|
|
|
218
|
-
- Uses
|
|
232
|
+
- Uses PR/MR merge status as the ONLY reliable way to verify if a branch was merged
|
|
219
233
|
- DOES NOT use "git branch --merged" command as it's unreliable for merge verification
|
|
220
|
-
- Only processes branches with PRs that were definitively merged to
|
|
221
|
-
- Skips worktrees without merged PRs and continues to next oldest candidate
|
|
222
|
-
- Checks and optionally closes related
|
|
234
|
+
- Only processes branches with PRs/MRs that were definitively merged to default branch
|
|
235
|
+
- Skips worktrees without merged PRs/MRs and continues to next oldest candidate
|
|
236
|
+
- Checks and optionally closes related issues
|
|
223
237
|
- Prioritizes oldest worktrees by directory age first for systematic cleanup
|
|
224
238
|
- Warns about very recent worktrees (created within 24 hours) to avoid cleaning active work
|
|
225
239
|
- Preserves useful development settings before deletion
|
|
226
240
|
- Requires explicit confirmation before any destructive actions
|
|
227
241
|
- Handles locked worktrees automatically
|
|
228
242
|
- Processes one worktree at a time to maintain control
|
|
229
|
-
- Must be run from
|
|
230
|
-
|
|
243
|
+
- Must be run from default branch for safety
|
|
244
|
+
|
|
245
|
+
Limitations:
|
|
246
|
+
|
|
247
|
+
- Assumes remote is named "origin" (most common convention)
|
|
248
|
+
- Supports macOS and Linux only (no Windows support)
|
|
249
|
+
- Requires MCP server or CLI for git hosting provider (GitHub, GitLab, etc.)
|
|
231
250
|
</important_notes>
|
|
@@ -15,6 +15,22 @@ Create multiple atomic git commits, committing the smallest possible logical uni
|
|
|
15
15
|
|
|
16
16
|
Include any of the following info if specified: $ARGUMENTS
|
|
17
17
|
|
|
18
|
+
## Commit Message Rules
|
|
19
|
+
|
|
20
|
+
Follows [Conventional Commits](https://www.conventionalcommits.org/) standard.
|
|
21
|
+
|
|
22
|
+
1. **Format**: `type(#issue): description`
|
|
23
|
+
- Use `#123` for local repo issues
|
|
24
|
+
- Use `owner/repo#123` for cross-repo issues
|
|
25
|
+
- Common types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`
|
|
26
|
+
|
|
27
|
+
2. **AI Credits**: **NEVER include AI credits in commit messages**
|
|
28
|
+
- No "Generated with Claude Code"
|
|
29
|
+
- No "Co-Authored-By: Claude" or "Co-Authored-By: Happy"
|
|
30
|
+
- Focus on the actual changes made, not conversation history
|
|
31
|
+
|
|
32
|
+
3. **Content**: Write clear, concise commit messages describing what changed and why
|
|
33
|
+
|
|
18
34
|
## Process
|
|
19
35
|
|
|
20
36
|
1. Run `git status` and `git diff` to review changes
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Code review using dynamic category detection and domain-specific analysis
|
|
3
|
+
argument-hint: (optional) [branch, PR#, or PR URL] - defaults to current branch
|
|
4
|
+
- Bash(git diff:*)
|
|
5
|
+
- Bash(git status:*)
|
|
6
|
+
- Bash(git log:*)
|
|
7
|
+
- Bash(git rev-parse:*)
|
|
8
|
+
- Bash(git merge-base:*)
|
|
9
|
+
- Bash(git branch:*)
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## General Guidelines
|
|
13
|
+
|
|
14
|
+
### Output Style
|
|
15
|
+
|
|
16
|
+
- **Never explicitly mention TDD** in code, comments, commits, PRs, or issues
|
|
17
|
+
- Write natural, descriptive code without meta-commentary about the development process
|
|
18
|
+
- The code should speak for itself - TDD is the process, not the product
|
|
19
|
+
|
|
20
|
+
# Code Review
|
|
21
|
+
|
|
22
|
+
Perform a code review using dynamic category detection.
|
|
23
|
+
|
|
24
|
+
## Phase 0: Setup & Categorization
|
|
25
|
+
|
|
26
|
+
### Determine What to Review
|
|
27
|
+
|
|
28
|
+
Parse the argument to determine the review target:
|
|
29
|
+
|
|
30
|
+
| Input | Action |
|
|
31
|
+
|-------|--------|
|
|
32
|
+
| No argument | Detect divergence point, confirm scope with user |
|
|
33
|
+
| Branch name | Use specified branch as base |
|
|
34
|
+
| PR number (e.g., `123`) | Fetch PR diff from GitHub |
|
|
35
|
+
| PR URL (e.g., `https://github.com/owner/repo/pull/123`) | Extract PR number and fetch diff |
|
|
36
|
+
|
|
37
|
+
**For GitHub PRs:**
|
|
38
|
+
|
|
39
|
+
1. Try GitHub MCP first: `mcp__github__pull_request_read` with `method: "get_diff"`
|
|
40
|
+
2. Fall back to `gh` CLI: `gh pr diff <number>`
|
|
41
|
+
3. If neither works, report error and stop
|
|
42
|
+
|
|
43
|
+
**For local branches (no argument or branch name provided):**
|
|
44
|
+
|
|
45
|
+
1. **Get current branch**: `git rev-parse --abbrev-ref HEAD`
|
|
46
|
+
|
|
47
|
+
2. **Check for uncommitted changes**: `git status --porcelain`
|
|
48
|
+
- If output is non-empty, note that uncommitted changes exist
|
|
49
|
+
|
|
50
|
+
3. **Detect divergence point** (skip if branch name was provided as argument):
|
|
51
|
+
- Get all local branches except current: `git branch --format='%(refname:short)'`
|
|
52
|
+
- For each branch, find merge-base: `git merge-base HEAD <branch>`
|
|
53
|
+
- Count commits from merge-base to HEAD: `git rev-list --count <merge-base>..HEAD`
|
|
54
|
+
- The branch with the **fewest commits back** (closest merge-base) is the likely parent
|
|
55
|
+
- If no other branches exist, fall back to `main`, `master`, or `develop` if they exist as remote tracking branches
|
|
56
|
+
|
|
57
|
+
4. **Confirm scope with user** using `AskUserQuestion`:
|
|
58
|
+
|
|
59
|
+
**Question 1 - "Review scope"** (header: "Base branch"):
|
|
60
|
+
- Option A: `From <detected-branch>` — "Review N commits since diverging from <branch>"
|
|
61
|
+
- Option B: `Different branch` — "Specify another branch to compare against"
|
|
62
|
+
- Option C: `Uncommitted only` — "Review only staged/unstaged changes, skip committed work"
|
|
63
|
+
|
|
64
|
+
**Question 2 - "Include uncommitted?"** (header: "Uncommitted", only ask if uncommitted changes exist AND user didn't pick option C):
|
|
65
|
+
- Option A: `Yes` — "Include N staged/unstaged files in review"
|
|
66
|
+
- Option B: `No` — "Review only committed changes"
|
|
67
|
+
|
|
68
|
+
5. **Collect changed files** based on user selection:
|
|
69
|
+
- From branch: `git diff --name-only <base>...HEAD`
|
|
70
|
+
- Uncommitted unstaged: `git diff --name-only`
|
|
71
|
+
- Uncommitted staged: `git diff --name-only --cached`
|
|
72
|
+
- Combine and deduplicate the file list
|
|
73
|
+
|
|
74
|
+
6. **If no changes**: Report "Nothing to review" and stop
|
|
75
|
+
|
|
76
|
+
### Categorize Files
|
|
77
|
+
|
|
78
|
+
Check for CLAUDE.md - if it exists, note any project-specific review patterns.
|
|
79
|
+
|
|
80
|
+
Categorize each changed file into ONE primary category based on these patterns:
|
|
81
|
+
|
|
82
|
+
| Category | File Patterns |
|
|
83
|
+
|----------|---------------|
|
|
84
|
+
| Frontend/UI | `*.tsx`, `*.jsx`, `components/`, `pages/`, `views/`, `*.vue` |
|
|
85
|
+
| Frontend/Styling | `*.css`, `*.scss`, `*.less`, `styles/`, `*.tailwind*`, `*.styled.*` |
|
|
86
|
+
| Backend/API | `routes/`, `api/`, `controllers/`, `services/`, `*.controller.*`, `*.service.*`, `*.resolver.*` |
|
|
87
|
+
| Backend/Data | `migrations/`, `models/`, `prisma/`, `schema.*`, `*.model.*`, `*.entity.*` |
|
|
88
|
+
| Tooling/Config | `scripts/`, `*.config.*`, `package.json`, `tsconfig.*`, `vite.*`, `webpack.*`, `eslint.*` |
|
|
89
|
+
| CI/CD | `.github/`, `.gitlab-ci.*`, `Dockerfile`, `docker-compose.*`, `*.yml` in CI paths |
|
|
90
|
+
| Tests | `*.test.*`, `*.spec.*`, `__tests__/`, `__mocks__/`, `*.stories.*` |
|
|
91
|
+
| Docs | `*.md`, `docs/`, `README*`, `CHANGELOG*` |
|
|
92
|
+
|
|
93
|
+
Output the categorization:
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
## Categorization
|
|
97
|
+
|
|
98
|
+
Base branch: <branch>
|
|
99
|
+
Total files changed: <n>
|
|
100
|
+
|
|
101
|
+
| Category | Files |
|
|
102
|
+
|----------|-------|
|
|
103
|
+
| <category> | <count> |
|
|
104
|
+
...
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Phase 1: Branch Brief
|
|
108
|
+
|
|
109
|
+
From the diff and recent commit messages (`git log <base>...HEAD --oneline`), infer:
|
|
110
|
+
|
|
111
|
+
- **Goal**: What this branch accomplishes (1-3 sentences)
|
|
112
|
+
- **Constraints**: Any implied requirements (security, performance, backwards compatibility)
|
|
113
|
+
- **Success checklist**: What must work after this change, what must not break
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
## Branch Brief
|
|
117
|
+
|
|
118
|
+
**Goal**: ...
|
|
119
|
+
**Constraints**: ...
|
|
120
|
+
**Checklist**:
|
|
121
|
+
- [ ] ...
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Phase 2: Category Reviews
|
|
125
|
+
|
|
126
|
+
For each detected category with changes, run a targeted review. Skip categories with no changes.
|
|
127
|
+
|
|
128
|
+
### Frontend/UI Review Criteria
|
|
129
|
+
|
|
130
|
+
- Accessibility: ARIA attributes, keyboard navigation, screen reader support
|
|
131
|
+
- Component patterns: Composition, prop drilling, context usage
|
|
132
|
+
- State management: Unnecessary re-renders, stale closures
|
|
133
|
+
- Performance: memo/useMemo/useCallback usage, lazy loading, bundle impact
|
|
134
|
+
|
|
135
|
+
### Frontend/Styling Review Criteria
|
|
136
|
+
|
|
137
|
+
- Responsive design: Breakpoints, mobile-first
|
|
138
|
+
- Design system: Token usage, consistent spacing/colors
|
|
139
|
+
- CSS specificity: Overly specific selectors, !important usage
|
|
140
|
+
- Theme support: Dark mode, CSS variables
|
|
141
|
+
|
|
142
|
+
### Backend/API Review Criteria
|
|
143
|
+
|
|
144
|
+
- Input validation: Sanitization, type checking, bounds
|
|
145
|
+
- Security: Authentication checks, authorization, injection risks
|
|
146
|
+
- Error handling: Proper status codes, meaningful messages, logging
|
|
147
|
+
- Performance: N+1 queries, missing indexes, pagination
|
|
148
|
+
|
|
149
|
+
### Backend/Data Review Criteria
|
|
150
|
+
|
|
151
|
+
- Migration safety: Reversibility, data preservation
|
|
152
|
+
- Data integrity: Constraints, foreign keys, nullability
|
|
153
|
+
- Index usage: Queries have appropriate indexes
|
|
154
|
+
- Backwards compatibility: Existing data still works
|
|
155
|
+
|
|
156
|
+
### Tooling/Config Review Criteria
|
|
157
|
+
|
|
158
|
+
- Breaking changes: Does this affect developer workflow?
|
|
159
|
+
- Dependency compatibility: Version conflicts, peer deps
|
|
160
|
+
- Build performance: Added build time, bundle size
|
|
161
|
+
|
|
162
|
+
### CI/CD Review Criteria
|
|
163
|
+
|
|
164
|
+
- Secrets exposure: Credentials in logs, env vars
|
|
165
|
+
- Pipeline efficiency: Caching, parallelization
|
|
166
|
+
- Failure handling: Notifications, rollback strategy
|
|
167
|
+
|
|
168
|
+
### Tests Review Criteria
|
|
169
|
+
|
|
170
|
+
- Coverage: Edge cases, error paths, boundaries
|
|
171
|
+
- Assertion quality: Specific assertions, not just "no error"
|
|
172
|
+
- Flaky patterns: Timing dependencies, order dependencies, shared state
|
|
173
|
+
|
|
174
|
+
### Docs Review Criteria
|
|
175
|
+
|
|
176
|
+
- Technical accuracy: Code examples work, APIs documented correctly
|
|
177
|
+
- Completeness: All new features documented
|
|
178
|
+
- Clarity: Easy to follow, good examples
|
|
179
|
+
|
|
180
|
+
**Output format per category:**
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
## <Category> Review (<n> files)
|
|
184
|
+
|
|
185
|
+
### file:line - [blocker|risky|nit] Title
|
|
186
|
+
Description of the issue and why it matters.
|
|
187
|
+
Suggested fix or question to investigate.
|
|
188
|
+
|
|
189
|
+
...
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Phase 3: Cross-Cutting Analysis
|
|
193
|
+
|
|
194
|
+
After reviewing all categories, check for cross-cutting issues:
|
|
195
|
+
|
|
196
|
+
- API changed but tests didn't update?
|
|
197
|
+
- New feature but no documentation?
|
|
198
|
+
- Migration added but no rollback tested?
|
|
199
|
+
- Config changed but README not updated?
|
|
200
|
+
- Security-sensitive code without corresponding test?
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
## Cross-Cutting Issues
|
|
204
|
+
|
|
205
|
+
- [ ] <issue description>
|
|
206
|
+
...
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Phase 4: Summary
|
|
210
|
+
|
|
211
|
+
### PR Description (draft)
|
|
212
|
+
|
|
213
|
+
Provide a ready-to-paste PR description:
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
## What changed
|
|
217
|
+
- <by category, 1-2 bullets each>
|
|
218
|
+
|
|
219
|
+
## Why
|
|
220
|
+
- <motivation>
|
|
221
|
+
|
|
222
|
+
## Testing
|
|
223
|
+
- <how to verify>
|
|
224
|
+
|
|
225
|
+
## Notes
|
|
226
|
+
- <migration steps, breaking changes, etc.>
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Review Checklist
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
## Before Merge
|
|
233
|
+
|
|
234
|
+
### Blockers (must fix)
|
|
235
|
+
- [ ] ...
|
|
236
|
+
|
|
237
|
+
### Risky (highlight to reviewers)
|
|
238
|
+
- [ ] ...
|
|
239
|
+
|
|
240
|
+
### Follow-ups (can defer)
|
|
241
|
+
- [ ] ...
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
Review target (branch name, PR number, or PR URL - leave empty for current branch): $ARGUMENTS
|
|
@@ -24,6 +24,20 @@
|
|
|
24
24
|
"category": "Workflow",
|
|
25
25
|
"order": 2
|
|
26
26
|
},
|
|
27
|
+
"code-review.md": {
|
|
28
|
+
"description": "Code review using dynamic category detection and domain-specific analysis",
|
|
29
|
+
"hint": "Review code",
|
|
30
|
+
"category": "Workflow",
|
|
31
|
+
"order": 35,
|
|
32
|
+
"_requested-tools": [
|
|
33
|
+
"Bash(git diff:*)",
|
|
34
|
+
"Bash(git status:*)",
|
|
35
|
+
"Bash(git log:*)",
|
|
36
|
+
"Bash(git rev-parse:*)",
|
|
37
|
+
"Bash(git merge-base:*)",
|
|
38
|
+
"Bash(git branch:*)"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
27
41
|
"commit.md": {
|
|
28
42
|
"description": "Create a git commit following project standards",
|
|
29
43
|
"hint": "Git commit",
|
|
@@ -111,7 +125,7 @@
|
|
|
111
125
|
"order": 1
|
|
112
126
|
},
|
|
113
127
|
"worktree-add.md": {
|
|
114
|
-
"description": "Add a new git worktree from branch name or
|
|
128
|
+
"description": "Add a new git worktree from branch name or issue URL, copy settings, install deps, and open in current IDE",
|
|
115
129
|
"hint": "Add worktree",
|
|
116
130
|
"category": "Worktree Management",
|
|
117
131
|
"order": 1
|
|
@@ -15,6 +15,22 @@ Create a git commit following project standards
|
|
|
15
15
|
|
|
16
16
|
Include any of the following info if specified: $ARGUMENTS
|
|
17
17
|
|
|
18
|
+
## Commit Message Rules
|
|
19
|
+
|
|
20
|
+
Follows [Conventional Commits](https://www.conventionalcommits.org/) standard.
|
|
21
|
+
|
|
22
|
+
1. **Format**: `type(#issue): description`
|
|
23
|
+
- Use `#123` for local repo issues
|
|
24
|
+
- Use `owner/repo#123` for cross-repo issues
|
|
25
|
+
- Common types: `feat`, `fix`, `docs`, `refactor`, `test`, `chore`
|
|
26
|
+
|
|
27
|
+
2. **AI Credits**: **NEVER include AI credits in commit messages**
|
|
28
|
+
- No "Generated with Claude Code"
|
|
29
|
+
- No "Co-Authored-By: Claude" or "Co-Authored-By: Happy"
|
|
30
|
+
- Focus on the actual changes made, not conversation history
|
|
31
|
+
|
|
32
|
+
3. **Content**: Write clear, concise commit messages describing what changed and why
|
|
33
|
+
|
|
18
34
|
## Process
|
|
19
35
|
|
|
20
36
|
1. Run `git status` and `git diff` to review changes
|
|
@@ -16,6 +16,7 @@ Analyze the current conversation context and identify things that have not yet b
|
|
|
16
16
|
1. **Incomplete implementations** - Code that was started but not finished
|
|
17
17
|
2. **Unused variables/results** - Values that were captured but never used
|
|
18
18
|
3. **Missing tests** - Functionality without test coverage
|
|
19
|
+
|
|
19
20
|
4. **User requests** - Things the user asked for that weren't fully completed
|
|
20
21
|
5. **TODO comments** - Any TODOs mentioned in conversation
|
|
21
22
|
6. **Error handling gaps** - Missing error cases or edge cases
|