elliot-stack 1.0.0 → 1.0.5
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/README.md +46 -0
- package/package.json +1 -1
- package/skills/better-title/SKILL.md +45 -45
- package/skills/better-title/scripts/rename.sh +55 -55
- package/skills/chris-voss/SKILL.md +78 -78
- package/skills/chris-voss/references/elliot-notes.md +120 -120
- package/skills/chris-voss/references/voss-principles.md +210 -210
- package/skills/github-issue-tracker/bin/tracker-tools.cjs +1358 -1358
- package/skills/github-issue-tracker/references/gh-cli-patterns.md +124 -124
- package/skills/github-issue-tracker/references/tracker-schema.md +96 -96
- package/skills/github-issue-tracker/tracker-template.md +58 -58
- package/skills/repo-search/SKILL.md +63 -0
|
@@ -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"`. Point them at the cloned repo path.
|
|
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.
|