elliot-stack 1.0.0 → 1.0.6

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.
@@ -1,124 +1,124 @@
1
- # gh CLI Patterns
2
-
3
- Reusable command templates for all GitHub API calls in this skill. Replace CAPS placeholders
4
- with actual values.
5
-
6
- ---
7
-
8
- ## Issue Metadata
9
-
10
- Fetch state, labels, comment count, timestamps:
11
- ```bash
12
- gh api repos/OWNER/REPO/issues/NUMBER --jq '{state: .state, labels: [.labels[].name], comments: .comments, updated: .updated_at, created: .created_at}'
13
- ```
14
-
15
- ## Issue Comments
16
-
17
- Last 3 comments with author, date, full body:
18
- ```bash
19
- gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[-3:] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
20
- ```
21
-
22
- All comments (for drafting — verify claims before posting):
23
- ```bash
24
- gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[] | {author: .user.login, date: .created_at, body: .body}'
25
- ```
26
-
27
- Comments since a date:
28
- ```bash
29
- gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '[.[] | select(.created_at > "DATE")] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
30
- ```
31
-
32
- **Truncation rules:** Never truncate comments on the primary issue being reviewed — technical
33
- details (addresses, error codes, test counts) get lost. For secondary fetches (known
34
- duplicates, upstream), `[0:1500]` is acceptable to manage context size.
35
-
36
- ## Issue Body
37
-
38
- Full issue body (read before commenting on unfamiliar issues):
39
- ```bash
40
- gh api repos/OWNER/REPO/issues/NUMBER --jq '.body'
41
- ```
42
-
43
- ## Search: Issues Involving User
44
-
45
- Open issues with recent activity:
46
- ```bash
47
- gh api "search/issues?q=involves:USERNAME+updated:>DATE+is:open" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at)]"'
48
- ```
49
-
50
- ## Search: Issues by Author
51
-
52
- ```bash
53
- gh api "search/issues?q=author:USERNAME+is:open&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
54
- ```
55
-
56
- ## Search: Issues by Commenter (excluding authored)
57
-
58
- ```bash
59
- gh api "search/issues?q=commenter:USERNAME+is:open+-author:USERNAME&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
60
- ```
61
-
62
- ## Search: Keyword Search for Duplicates
63
-
64
- Search for issues matching keywords, created after a specific date:
65
- ```bash
66
- gh api "search/issues?q=repo:OWNER/REPO+is:open+created:>DATE+KEYWORD1+KEYWORD2&per_page=10" --jq '.items[] | "#\(.number) — \(.title) [\(.created_at | split("T")[0])] @\(.user.login)"'
67
- ```
68
-
69
- Use multiple keyword variations per search to catch different phrasings. Example for an OAuth issue:
70
- - Search 1: `OAuth redirect MCP`
71
- - Search 2: `clientId mcp add`
72
- - Search 3: `Slack plugin authentication`
73
-
74
- ## Search: Recently Closed Issues
75
-
76
- ```bash
77
- gh api "search/issues?q=involves:USERNAME+is:closed+closed:>DATE&per_page=50&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [closed: \(.closed_at | split("T")[0])]"'
78
- ```
79
-
80
- ## Post Comment
81
-
82
- ```bash
83
- gh issue comment NUMBER --repo OWNER/REPO --body "$(cat <<'EOF'
84
- Comment body here.
85
- Supports **markdown**.
86
- EOF
87
- )"
88
- ```
89
-
90
- Always use heredoc (`<<'EOF'`) for comment bodies to handle special characters and newlines.
91
-
92
- ## Quick State Check
93
-
94
- Check if an issue is still open (fast, minimal data):
95
- ```bash
96
- gh api repos/OWNER/REPO/issues/NUMBER --jq '.state'
97
- ```
98
-
99
- ## PR Status Check
100
-
101
- ```bash
102
- gh api repos/OWNER/REPO/pulls/NUMBER --jq '{state: .state, merged: .merged, title: .title, updated: .updated_at}'
103
- ```
104
-
105
- ---
106
-
107
- ## Rate Limiting
108
-
109
- GitHub API has rate limits. If running many parallel requests:
110
- - Authenticated requests: 5000/hour
111
- - Search API: 30 requests/minute
112
- - If you hit limits, batch searches and add short delays between search batches
113
- - Metadata fetches (repos/OWNER/REPO/issues/NUMBER) don't count against search limits
114
-
115
- ## Parallel Execution Strategy
116
-
117
- To maximize speed, batch API calls by type:
118
-
119
- **Batch 1 (parallel):** All active issue metadata + comments (these are REST calls, not search)
120
- **Batch 2 (parallel):** All known duplicate/related issue checks (REST calls)
121
- **Batch 3 (parallel):** All keyword searches for new duplicates (search API — respect 30/min limit)
122
- **Batch 4 (parallel):** User involvement search + closed issue checks + upstream checks
123
-
124
- Batches 1 and 2 can run simultaneously. Batch 3 should start after a brief pause if Batch 1+2 included many calls. Batch 4 can run with Batch 1.
1
+ # gh CLI Patterns
2
+
3
+ Reusable command templates for all GitHub API calls in this skill. Replace CAPS placeholders
4
+ with actual values.
5
+
6
+ ---
7
+
8
+ ## Issue Metadata
9
+
10
+ Fetch state, labels, comment count, timestamps:
11
+ ```bash
12
+ gh api repos/OWNER/REPO/issues/NUMBER --jq '{state: .state, labels: [.labels[].name], comments: .comments, updated: .updated_at, created: .created_at}'
13
+ ```
14
+
15
+ ## Issue Comments
16
+
17
+ Last 3 comments with author, date, full body:
18
+ ```bash
19
+ gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[-3:] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
20
+ ```
21
+
22
+ All comments (for drafting — verify claims before posting):
23
+ ```bash
24
+ gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[] | {author: .user.login, date: .created_at, body: .body}'
25
+ ```
26
+
27
+ Comments since a date:
28
+ ```bash
29
+ gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '[.[] | select(.created_at > "DATE")] | .[] | {author: .user.login, date: (.created_at | split("T")[0]), body: .body}'
30
+ ```
31
+
32
+ **Truncation rules:** Never truncate comments on the primary issue being reviewed — technical
33
+ details (addresses, error codes, test counts) get lost. For secondary fetches (known
34
+ duplicates, upstream), `[0:1500]` is acceptable to manage context size.
35
+
36
+ ## Issue Body
37
+
38
+ Full issue body (read before commenting on unfamiliar issues):
39
+ ```bash
40
+ gh api repos/OWNER/REPO/issues/NUMBER --jq '.body'
41
+ ```
42
+
43
+ ## Search: Issues Involving User
44
+
45
+ Open issues with recent activity:
46
+ ```bash
47
+ gh api "search/issues?q=involves:USERNAME+updated:>DATE+is:open" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at)]"'
48
+ ```
49
+
50
+ ## Search: Issues by Author
51
+
52
+ ```bash
53
+ gh api "search/issues?q=author:USERNAME+is:open&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
54
+ ```
55
+
56
+ ## Search: Issues by Commenter (excluding authored)
57
+
58
+ ```bash
59
+ gh api "search/issues?q=commenter:USERNAME+is:open+-author:USERNAME&per_page=100&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at | split("T")[0])]"'
60
+ ```
61
+
62
+ ## Search: Keyword Search for Duplicates
63
+
64
+ Search for issues matching keywords, created after a specific date:
65
+ ```bash
66
+ gh api "search/issues?q=repo:OWNER/REPO+is:open+created:>DATE+KEYWORD1+KEYWORD2&per_page=10" --jq '.items[] | "#\(.number) — \(.title) [\(.created_at | split("T")[0])] @\(.user.login)"'
67
+ ```
68
+
69
+ Use multiple keyword variations per search to catch different phrasings. Example for an OAuth issue:
70
+ - Search 1: `OAuth redirect MCP`
71
+ - Search 2: `clientId mcp add`
72
+ - Search 3: `Slack plugin authentication`
73
+
74
+ ## Search: Recently Closed Issues
75
+
76
+ ```bash
77
+ gh api "search/issues?q=involves:USERNAME+is:closed+closed:>DATE&per_page=50&sort=updated" --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [closed: \(.closed_at | split("T")[0])]"'
78
+ ```
79
+
80
+ ## Post Comment
81
+
82
+ ```bash
83
+ gh issue comment NUMBER --repo OWNER/REPO --body "$(cat <<'EOF'
84
+ Comment body here.
85
+ Supports **markdown**.
86
+ EOF
87
+ )"
88
+ ```
89
+
90
+ Always use heredoc (`<<'EOF'`) for comment bodies to handle special characters and newlines.
91
+
92
+ ## Quick State Check
93
+
94
+ Check if an issue is still open (fast, minimal data):
95
+ ```bash
96
+ gh api repos/OWNER/REPO/issues/NUMBER --jq '.state'
97
+ ```
98
+
99
+ ## PR Status Check
100
+
101
+ ```bash
102
+ gh api repos/OWNER/REPO/pulls/NUMBER --jq '{state: .state, merged: .merged, title: .title, updated: .updated_at}'
103
+ ```
104
+
105
+ ---
106
+
107
+ ## Rate Limiting
108
+
109
+ GitHub API has rate limits. If running many parallel requests:
110
+ - Authenticated requests: 5000/hour
111
+ - Search API: 30 requests/minute
112
+ - If you hit limits, batch searches and add short delays between search batches
113
+ - Metadata fetches (repos/OWNER/REPO/issues/NUMBER) don't count against search limits
114
+
115
+ ## Parallel Execution Strategy
116
+
117
+ To maximize speed, batch API calls by type:
118
+
119
+ **Batch 1 (parallel):** All active issue metadata + comments (these are REST calls, not search)
120
+ **Batch 2 (parallel):** All known duplicate/related issue checks (REST calls)
121
+ **Batch 3 (parallel):** All keyword searches for new duplicates (search API — respect 30/min limit)
122
+ **Batch 4 (parallel):** User involvement search + closed issue checks + upstream checks
123
+
124
+ Batches 1 and 2 can run simultaneously. Batch 3 should start after a brief pause if Batch 1+2 included many calls. Batch 4 can run with Batch 1.
@@ -1,96 +1,96 @@
1
- # Tracker File Schema
2
-
3
- Defines the format and fields for `github-tracker.md`.
4
-
5
- ---
6
-
7
- ## File Header
8
-
9
- ```markdown
10
- # GitHub Issue Tracker
11
-
12
- GitHub username: **USERNAME**
13
-
14
- ## Config
15
-
16
- Tracked repos: all repos where I'm involved
17
- Excluded repos: none
18
-
19
- ---
20
- ```
21
-
22
- ## Config Section
23
-
24
- Plain English directives that control what the skill tracks and how it reports.
25
- The skill reads these on every run and respects them when filtering issues.
26
-
27
- Common directives:
28
- - `Tracked repos:` — which repos to include (default: all involving user)
29
- - `Excluded repos:` — repos to skip entirely (e.g., `ElliotDrel/*` to skip own repos)
30
- - Any other plain English instructions (e.g., "Don't show bot comments", "Focus on bugs only")
31
-
32
- The skill treats these as soft rules — it reads them and applies judgment. No rigid parsing.
33
-
34
- ## Active Issues Section
35
-
36
- Each issue entry under `## Active Issues (watching for updates)`:
37
-
38
- ```markdown
39
- ### owner/repo#NUMBER — Title
40
- - **Goal:** What the user wants from this issue (e.g., "Get my fix merged", "Get maintainer to respond", "Monitor for upstream fix"). Drives next-step recommendations.
41
- - **Role:** Author | Commenter | Mentioned (brief description of involvement)
42
- - **Filed:** YYYY-MM-DD (only if authored by user)
43
- - **Status as of YYYY-MM-DD:** Open/Closed. Labels: label1, label2. Summary of current state. N comments total.
44
- - **What to check:** Specific signals to watch for (e.g., "Any Anthropic response?")
45
- - **Related:** #other, #issues (cross-references found in comments)
46
- - **Upstream:** owner/repo#NUMBER (if tracking an upstream dependency)
47
- - **Crash instances:** (optional, for bug reports with multiple data points)
48
- 1. Description of instance
49
- 2. Description of instance
50
- - **Workaround:** Description of workaround (if applicable)
51
- - **Duplicates found (YYYY-MM-DD):**
52
- - **#NUMBER** — @author, "Title" (date). Why it's related/duplicate.
53
- - **Adjacent issues found (YYYY-MM-DD):**
54
- - **#NUMBER** — @author, "Title" (date). Why it's adjacent (same space, different problem).
55
- - **Next steps (now):** Immediate actions for this check-in.
56
- - **Future:** Things to monitor or do later.
57
- - **History:**
58
- - **YYYY-MM-DD:** Filed issue with 3 crash instances, upstream tracking in bun#28175
59
- - **YYYY-MM-DD:** Posted workaround (callbackPort: 3118 fix)
60
- - **YYYY-MM-DD:** Maintainer @user replied with fix proposal
61
- ```
62
-
63
- ### Field Rules
64
-
65
- - **"Status as of" date:** Always update to today's date during Phase 4.
66
- - **"Duplicates found" date:** Date when the duplicate was first identified. Don't change on subsequent check-ins.
67
- - **"Next steps (now)":** Clear after execution. If not executed, carry forward.
68
- - **"Future":** Accumulates over time. Remove items that become "Next steps (now)" or are no longer relevant.
69
- - **"Goal":** Set on first add, update if the user's intent changes. Use this to drive next-step recommendations — if the goal is "get merged" the next steps focus on what's blocking the merge; if "monitor for fix" the next steps focus on upstream signals.
70
- - **Role descriptions:** Keep brief. Examples: "confirmed bug + posted workaround", "shared skill + reported 64KB bug", "proposed configurable keybindings".
71
- - **"History:"** Append-only timestamped log. Format: `- **YYYY-MM-DD:** Action or event description`. Newest entries go last (chronological). Logs both our actions (filing, commenting, posting workarounds) and detected external events (maintainer replies, state changes, PRs merged). On initial filing, first entry must be: `- **YYYY-MM-DD:** Filed issue` (or `Added to tracker` if not authored by user).
72
-
73
- ## Closed / Resolved Section
74
-
75
- Each entry under `## Closed / Resolved`:
76
-
77
- ```markdown
78
- ### owner/repo#NUMBER — Title
79
- - Brief resolution note (merged, auto-closed as duplicate of #X, fixed in vX.Y.Z, etc.)
80
- - Date closed if notable.
81
- ```
82
-
83
- ## Morning Check-In Procedure Section
84
-
85
- Static section with reusable `gh` CLI commands. Update USERNAME if it changes. Otherwise don't modify.
86
-
87
- ---
88
-
89
- ## Update Rules
90
-
91
- 1. **Only update the tracker file in Phase 4, after user confirmation.**
92
- 2. **Preserve manually added content.** If the user added custom notes, crash data, workarounds, or other content not generated by this skill, keep it intact.
93
- 3. **Move issues between sections** when state changes (Active → Closed, or Closed → Active if reopened).
94
- 4. **Don't remove duplicate entries** — they're historical. Only add new ones.
95
- 5. **Keep "What to check" relevant.** Update if the situation changed (e.g., if Anthropic responded, change from "Any Anthropic response?" to "Follow up on Anthropic's suggestion?").
96
- 6. **Append new history entries. Never remove or edit existing history entries.**
1
+ # Tracker File Schema
2
+
3
+ Defines the format and fields for `github-tracker.md`.
4
+
5
+ ---
6
+
7
+ ## File Header
8
+
9
+ ```markdown
10
+ # GitHub Issue Tracker
11
+
12
+ GitHub username: **USERNAME**
13
+
14
+ ## Config
15
+
16
+ Tracked repos: all repos where I'm involved
17
+ Excluded repos: none
18
+
19
+ ---
20
+ ```
21
+
22
+ ## Config Section
23
+
24
+ Plain English directives that control what the skill tracks and how it reports.
25
+ The skill reads these on every run and respects them when filtering issues.
26
+
27
+ Common directives:
28
+ - `Tracked repos:` — which repos to include (default: all involving user)
29
+ - `Excluded repos:` — repos to skip entirely (e.g., `ElliotDrel/*` to skip own repos)
30
+ - Any other plain English instructions (e.g., "Don't show bot comments", "Focus on bugs only")
31
+
32
+ The skill treats these as soft rules — it reads them and applies judgment. No rigid parsing.
33
+
34
+ ## Active Issues Section
35
+
36
+ Each issue entry under `## Active Issues (watching for updates)`:
37
+
38
+ ```markdown
39
+ ### owner/repo#NUMBER — Title
40
+ - **Goal:** What the user wants from this issue (e.g., "Get my fix merged", "Get maintainer to respond", "Monitor for upstream fix"). Drives next-step recommendations.
41
+ - **Role:** Author | Commenter | Mentioned (brief description of involvement)
42
+ - **Filed:** YYYY-MM-DD (only if authored by user)
43
+ - **Status as of YYYY-MM-DD:** Open/Closed. Labels: label1, label2. Summary of current state. N comments total.
44
+ - **What to check:** Specific signals to watch for (e.g., "Any Anthropic response?")
45
+ - **Related:** #other, #issues (cross-references found in comments)
46
+ - **Upstream:** owner/repo#NUMBER (if tracking an upstream dependency)
47
+ - **Crash instances:** (optional, for bug reports with multiple data points)
48
+ 1. Description of instance
49
+ 2. Description of instance
50
+ - **Workaround:** Description of workaround (if applicable)
51
+ - **Duplicates found (YYYY-MM-DD):**
52
+ - **#NUMBER** — @author, "Title" (date). Why it's related/duplicate.
53
+ - **Adjacent issues found (YYYY-MM-DD):**
54
+ - **#NUMBER** — @author, "Title" (date). Why it's adjacent (same space, different problem).
55
+ - **Next steps (now):** Immediate actions for this check-in.
56
+ - **Future:** Things to monitor or do later.
57
+ - **History:**
58
+ - **YYYY-MM-DD:** Filed issue with 3 crash instances, upstream tracking in bun#28175
59
+ - **YYYY-MM-DD:** Posted workaround (callbackPort: 3118 fix)
60
+ - **YYYY-MM-DD:** Maintainer @user replied with fix proposal
61
+ ```
62
+
63
+ ### Field Rules
64
+
65
+ - **"Status as of" date:** Always update to today's date during Phase 4.
66
+ - **"Duplicates found" date:** Date when the duplicate was first identified. Don't change on subsequent check-ins.
67
+ - **"Next steps (now)":** Clear after execution. If not executed, carry forward.
68
+ - **"Future":** Accumulates over time. Remove items that become "Next steps (now)" or are no longer relevant.
69
+ - **"Goal":** Set on first add, update if the user's intent changes. Use this to drive next-step recommendations — if the goal is "get merged" the next steps focus on what's blocking the merge; if "monitor for fix" the next steps focus on upstream signals.
70
+ - **Role descriptions:** Keep brief. Examples: "confirmed bug + posted workaround", "shared skill + reported 64KB bug", "proposed configurable keybindings".
71
+ - **"History:"** Append-only timestamped log. Format: `- **YYYY-MM-DD:** Action or event description`. Newest entries go last (chronological). Logs both our actions (filing, commenting, posting workarounds) and detected external events (maintainer replies, state changes, PRs merged). On initial filing, first entry must be: `- **YYYY-MM-DD:** Filed issue` (or `Added to tracker` if not authored by user).
72
+
73
+ ## Closed / Resolved Section
74
+
75
+ Each entry under `## Closed / Resolved`:
76
+
77
+ ```markdown
78
+ ### owner/repo#NUMBER — Title
79
+ - Brief resolution note (merged, auto-closed as duplicate of #X, fixed in vX.Y.Z, etc.)
80
+ - Date closed if notable.
81
+ ```
82
+
83
+ ## Morning Check-In Procedure Section
84
+
85
+ Static section with reusable `gh` CLI commands. Update USERNAME if it changes. Otherwise don't modify.
86
+
87
+ ---
88
+
89
+ ## Update Rules
90
+
91
+ 1. **Only update the tracker file in Phase 4, after user confirmation.**
92
+ 2. **Preserve manually added content.** If the user added custom notes, crash data, workarounds, or other content not generated by this skill, keep it intact.
93
+ 3. **Move issues between sections** when state changes (Active → Closed, or Closed → Active if reopened).
94
+ 4. **Don't remove duplicate entries** — they're historical. Only add new ones.
95
+ 5. **Keep "What to check" relevant.** Update if the situation changed (e.g., if Anthropic responded, change from "Any Anthropic response?" to "Follow up on Anthropic's suggestion?").
96
+ 6. **Append new history entries. Never remove or edit existing history entries.**
@@ -1,58 +1,58 @@
1
- # GitHub Issue Tracker
2
-
3
- GitHub username: **USERNAME_HERE**
4
-
5
- ## Config
6
-
7
- <!-- Directives for the check-in skill. Write in plain English. Examples:
8
- - "Skip issues on my own repos (ElliotDrel/*)"
9
- - "Only track issues on anthropics/claude-code and oven-sh/bun"
10
- - "Don't show me bot comments or auto-close spam"
11
- -->
12
-
13
- Tracked repos: all repos where I'm involved
14
- Excluded repos: none
15
-
16
- ---
17
-
18
- ## Active Issues (watching for updates)
19
-
20
- <!-- For each issue you're tracking, use this format:
21
-
22
- ### owner/repo#NUMBER — Title
23
- - **Role:** Author | Commenter | Mentioned (brief description of involvement)
24
- - **Filed:** YYYY-MM-DD (if authored by you)
25
- - **Status as of YYYY-MM-DD:** Open/Closed. Labels: ... . Summary of current state.
26
- - **What to check:** What signals matter for this issue?
27
- - **Related:** #other, #issues (if any)
28
- - **Upstream:** owner/repo#NUMBER (if tracking an upstream dependency)
29
- - **Duplicates found (YYYY-MM-DD):**
30
- - **#NUMBER** — @author, "Title" (date). Why it's related.
31
- - **Next steps (now):** Immediate actions to take this check-in.
32
- - **Future:** Things to monitor or do later.
33
- - **History:**
34
- - **YYYY-MM-DD:** Filed issue (or "Added to tracker for monitoring")
35
- -->
36
-
37
- ## Closed / Resolved
38
-
39
- <!-- For each resolved issue:
40
-
41
- ### owner/repo#NUMBER — Title
42
- - Brief resolution note (merged, auto-closed as duplicate, etc.)
43
- -->
44
-
45
- ---
46
-
47
- ## Morning Check-In Procedure
48
-
49
- Run this to get a quick status update on all active issues:
50
-
51
- ```bash
52
- gh api search/issues?q=involves:USERNAME_HERE+updated:>$(python3 -c "import datetime; print((datetime.datetime.now()-datetime.timedelta(days=7)).strftime('%Y-%m-%d'))")+is:open --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at)]"'
53
- ```
54
-
55
- Then for each issue, check recent comments:
56
- ```bash
57
- gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[-3:] | .[] | "[\(.created_at)] @\(.user.login): \(.body[0:200])"'
58
- ```
1
+ # GitHub Issue Tracker
2
+
3
+ GitHub username: **USERNAME_HERE**
4
+
5
+ ## Config
6
+
7
+ <!-- Directives for the check-in skill. Write in plain English. Examples:
8
+ - "Skip issues on my own repos (ElliotDrel/*)"
9
+ - "Only track issues on anthropics/claude-code and oven-sh/bun"
10
+ - "Don't show me bot comments or auto-close spam"
11
+ -->
12
+
13
+ Tracked repos: all repos where I'm involved
14
+ Excluded repos: none
15
+
16
+ ---
17
+
18
+ ## Active Issues (watching for updates)
19
+
20
+ <!-- For each issue you're tracking, use this format:
21
+
22
+ ### owner/repo#NUMBER — Title
23
+ - **Role:** Author | Commenter | Mentioned (brief description of involvement)
24
+ - **Filed:** YYYY-MM-DD (if authored by you)
25
+ - **Status as of YYYY-MM-DD:** Open/Closed. Labels: ... . Summary of current state.
26
+ - **What to check:** What signals matter for this issue?
27
+ - **Related:** #other, #issues (if any)
28
+ - **Upstream:** owner/repo#NUMBER (if tracking an upstream dependency)
29
+ - **Duplicates found (YYYY-MM-DD):**
30
+ - **#NUMBER** — @author, "Title" (date). Why it's related.
31
+ - **Next steps (now):** Immediate actions to take this check-in.
32
+ - **Future:** Things to monitor or do later.
33
+ - **History:**
34
+ - **YYYY-MM-DD:** Filed issue (or "Added to tracker for monitoring")
35
+ -->
36
+
37
+ ## Closed / Resolved
38
+
39
+ <!-- For each resolved issue:
40
+
41
+ ### owner/repo#NUMBER — Title
42
+ - Brief resolution note (merged, auto-closed as duplicate, etc.)
43
+ -->
44
+
45
+ ---
46
+
47
+ ## Morning Check-In Procedure
48
+
49
+ Run this to get a quick status update on all active issues:
50
+
51
+ ```bash
52
+ gh api search/issues?q=involves:USERNAME_HERE+updated:>$(python3 -c "import datetime; print((datetime.datetime.now()-datetime.timedelta(days=7)).strftime('%Y-%m-%d'))")+is:open --jq '.items[] | "#\(.number) \(.repository_url | split("/") | .[-2:] | join("/")) — \(.title) [updated: \(.updated_at)]"'
53
+ ```
54
+
55
+ Then for each issue, check recent comments:
56
+ ```bash
57
+ gh api repos/OWNER/REPO/issues/NUMBER/comments --jq '.[-3:] | .[] | "[\(.created_at)] @\(.user.login): \(.body[0:200])"'
58
+ ```
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: repo-search
3
+ description: >-
4
+ Clone and search external GitHub repositories to answer questions about their
5
+ code. Use this skill whenever the user references a repo you don't have local
6
+ context for, asks about code in an external project, wants to compare
7
+ implementations across repos, or needs information from a codebase that isn't
8
+ in the current working directory. Also use when the user says things like
9
+ "check how X does it", "look at the source for Y", "search that repo",
10
+ "clone it and find...", or references a GitHub URL. If you're unsure whether
11
+ you have enough context about an external codebase to answer accurately,
12
+ use this skill to clone it and look.
13
+ ---
14
+
15
+ # Repo Search
16
+
17
+ Search external repositories by cloning them into a persistent sandbox and exploring with subagents.
18
+
19
+ ## Available repos
20
+
21
+ ```!
22
+ mkdir -p ~/repo-search-storage
23
+ echo "=== Repo Sandbox: ~/repo-search-storage ==="
24
+ echo ""
25
+ found=0
26
+ for dir in ~/repo-search-storage/*/; do
27
+ [ -d "$dir/.git" ] || continue
28
+ found=1
29
+ name=$(basename "$dir")
30
+ url=$(cd "$dir" && git remote get-url origin 2>/dev/null || echo "(no remote)")
31
+ echo "- $name → $url"
32
+ echo " Updating..."
33
+ (cd "$dir" && git pull --ff-only 2>&1) | sed 's/^/ /'
34
+ echo ""
35
+ done
36
+ if [ "$found" -eq 0 ]; then
37
+ echo "(no repos cached yet)"
38
+ fi
39
+ ```
40
+
41
+ Present the user with the repos listed above and offer to search any of them or clone a new one.
42
+
43
+ ## Finding the correct repo
44
+
45
+ Before cloning, you must have the exact GitHub URL. Follow these rules:
46
+
47
+ - **If the user gave a full GitHub URL** (e.g. `https://github.com/org/repo`), use it directly.
48
+ - **If the user gave only a name** (e.g. "openclaw", "langchain"), use WebSearch to find the correct GitHub repository URL first. Never guess a repo URL — confirm it via search.
49
+ - **Always verify** the search result matches what the user is asking about before cloning. It doesn't hurt to confirm with the user — "I found X repo, is that the one you meant?" — before spending time cloning. Wrong repo = wasted time and misleading answers.
50
+
51
+ ## Cloning
52
+
53
+ Once you have a confirmed URL, shallow clone into the sandbox:
54
+
55
+ ```bash
56
+ git clone --depth 1 <repo-url> ~/repo-search-storage/<repo-name>
57
+ ```
58
+
59
+ ## Searching
60
+
61
+ To explore a repo, spawn one or more **Haiku** subagents using the Agent tool with `model: "haiku"` and `subagent_type: "Explore"`. In the prompt, always include the **full absolute path** to the cloned repo (e.g. `C:/Users/2supe/repo-search-storage/gstack`) and tell the subagent to search within that directory. Without this, the subagent won't know where to look.
62
+
63
+ If the question spans multiple areas of the repo, spawn multiple subagents in parallel — each focused on a different aspect — to get answers faster.