@biggora/claude-plugins 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +3 -1
- package/README.md +13 -13
- package/codex-cli-workspace/iteration-1/benchmark.json +122 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/eval_metadata.json +13 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/grading.json +52 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/outputs/response.md +163 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/timing.json +5 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/grading.json +58 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/outputs/response.md +151 -0
- package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/timing.json +5 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +13 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +52 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +86 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +5 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +58 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +164 -0
- package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +5 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/eval_metadata.json +13 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/grading.json +52 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/outputs/response.md +130 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/timing.json +5 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/grading.json +64 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/outputs/response.md +209 -0
- package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/timing.json +5 -0
- package/codex-cli-workspace/iteration-1/review.html +1325 -0
- package/gemini-cli-workspace/iteration-1/benchmark.json +86 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/eval_metadata.json +37 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/outputs/response.md +401 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/outputs/response.md +405 -0
- package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +37 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +212 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +427 -0
- package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/eval_metadata.json +32 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/grading.json +32 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/outputs/response.md +171 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/grading.json +32 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/outputs/response.md +199 -0
- package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-1/review.html +1325 -0
- package/gemini-cli-workspace/iteration-2/benchmark.json +173 -0
- package/gemini-cli-workspace/iteration-2/benchmark.md +28 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/eval_metadata.json +37 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/outputs/response.md +195 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/outputs/response.md +377 -0
- package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/eval_metadata.json +37 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/outputs/response.md +127 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/grading.json +37 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/outputs/response.md +164 -0
- package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/eval_metadata.json +32 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/grading.json +32 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/outputs/response.md +91 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/grading.json +32 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/outputs/response.md +112 -0
- package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/timing.json +5 -0
- package/gemini-cli-workspace/iteration-2/eval-viewer.html +1325 -0
- package/package.json +1 -1
- package/screen-recording-workspace/evals.json +41 -0
- package/screen-recording-workspace/iteration-1/benchmark.json +102 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/eval_metadata.json +31 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/grading.json +11 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/outputs/demo.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/timing.json +5 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/grading.json +11 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/outputs/demo.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/timing.json +5 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/eval_metadata.json +31 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/grading.json +11 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/outputs/region_capture.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/timing.json +5 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/grading.json +11 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/outputs/region_capture.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/timing.json +5 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/eval_metadata.json +31 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/grading.json +11 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/outputs/fallback_recording.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/timing.json +5 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/grading.json +11 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/fallback_recording.mp4 +0 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/record_screen.py +67 -0
- package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/timing.json +5 -0
- package/screen-recording-workspace/iteration-1/review.html +1325 -0
- package/src/skills/codex-cli/SKILL.md +21 -11
- package/src/skills/codex-cli/evals/evals.json +47 -0
- package/src/skills/gemini-cli/SKILL.md +27 -13
- package/src/skills/gemini-cli/evals/evals.json +46 -0
- package/src/skills/gemini-cli/references/commands.md +21 -14
- package/src/skills/gemini-cli/references/configuration.md +23 -18
- package/src/skills/gemini-cli/references/headless-and-scripting.md +7 -17
- package/src/skills/gemini-cli/references/mcp-and-extensions.md +12 -6
- package/src/skills/notebook-lm/SKILL.md +1 -1
- package/src/skills/screen-recording/SKILL.md +243 -213
- package/src/skills/screen-recording/references/design-patterns.md +4 -2
- package/src/skills/screen-recording/references/ffmpeg-recording.md +473 -0
- package/src/skills/screen-recording/references/{approach1-programmatic.md → programmatic-generation.md} +45 -22
- package/src/skills/screen-recording/references/python-fallback.md +222 -0
- package/src/skills/tm-search/SKILL.md +242 -106
- package/src/skills/tm-search/evals/evals.json +23 -0
- package/src/skills/tm-search/references/scraping-fallback.md +60 -95
- package/src/skills/tm-search/scripts/tm_search.py +453 -375
- package/src/skills/screen-recording/references/approach2-xvfb.md +0 -232
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "tm-search",
|
|
3
|
+
"evals": [
|
|
4
|
+
{
|
|
5
|
+
"id": 1,
|
|
6
|
+
"prompt": "I'm thinking of naming my startup 'NeonPulse'. Can you check if that's trademarked in the US?",
|
|
7
|
+
"expected_output": "Should search USPTO for 'NEONPULSE', report whether active trademarks exist, include legal disclaimer about consulting a trademark attorney",
|
|
8
|
+
"files": []
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": 2,
|
|
12
|
+
"prompt": "Look up trademark serial number 85073086 and tell me who owns it and what its status is",
|
|
13
|
+
"expected_output": "Should use the TSDR Details API to look up serial 85073086, return the owner (The Viking Corporation), status (Live/Registered, renewed), and class info",
|
|
14
|
+
"files": []
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": 3,
|
|
18
|
+
"prompt": "I need to validate a batch of brand name ideas against USPTO: CloudPeak, SkyBridge, NeonVault, AquaForge. Which ones are available?",
|
|
19
|
+
"expected_output": "Should search each keyword, report availability status for each, include delay between requests, provide a summary table, and include legal disclaimer",
|
|
20
|
+
"files": []
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
@@ -1,135 +1,100 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Browser Automation Fallback for tmsearch.uspto.gov
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The tmsearch.uspto.gov search backend uses an Elasticsearch API at
|
|
4
|
+
`https://tmsearch.uspto.gov/prod-stage-v1-0-0/` but it is protected by AWS WAF bot detection.
|
|
5
|
+
Direct HTTP requests (curl, requests, fetch) return `403` or `Missing Authentication Token`.
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
Browser automation is the only reliable way to perform keyword searches programmatically.
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
If the documented endpoints in SKILL.md fail, use browser DevTools (Network tab) on
|
|
9
|
-
https://tmsearch.uspto.gov/search/search-information to intercept the actual XHR/fetch requests
|
|
10
|
-
being made, then replicate those in code.
|
|
9
|
+
## Why Direct HTTP Doesn't Work
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
The site's `configuration.json` reveals:
|
|
12
|
+
- Search backend: `https://tmsearch.uspto.gov/prod-stage-v1-0-0/`
|
|
13
|
+
- WAF challenge script: loaded dynamically from `awsWafChallengeUrl`
|
|
14
|
+
- The browser must solve the WAF challenge to get a token that's sent with API requests
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
import time
|
|
17
|
-
|
|
18
|
-
HEADERS = {
|
|
19
|
-
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
|
|
20
|
-
"Accept": "application/json, text/plain, */*",
|
|
21
|
-
"Accept-Language": "en-US,en;q=0.9",
|
|
22
|
-
"Referer": "https://tmsearch.uspto.gov/search/search-information",
|
|
23
|
-
"Origin": "https://tmsearch.uspto.gov",
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
def search_trademark_web(keyword: str, status: str = "A", rows: int = 25) -> dict:
|
|
27
|
-
"""
|
|
28
|
-
Search USPTO trademark database.
|
|
29
|
-
status: "A" = active, "D" = dead, "" = all
|
|
30
|
-
"""
|
|
31
|
-
session = requests.Session()
|
|
32
|
-
|
|
33
|
-
# First GET the main page to get any session cookies
|
|
34
|
-
session.get("https://tmsearch.uspto.gov/search/search-information", headers=HEADERS)
|
|
35
|
-
|
|
36
|
-
# Attempt POST to backend
|
|
37
|
-
payload = {
|
|
38
|
-
"keyword": keyword.upper(),
|
|
39
|
-
"searchType": "1",
|
|
40
|
-
"statusType": status,
|
|
41
|
-
"pluralVariants": False,
|
|
42
|
-
"start": 0,
|
|
43
|
-
"rows": rows
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
response = session.post(
|
|
47
|
-
"https://tmsearch.uspto.gov/search/keyword",
|
|
48
|
-
json=payload,
|
|
49
|
-
headers=HEADERS,
|
|
50
|
-
timeout=30
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
if response.status_code == 200:
|
|
54
|
-
return response.json()
|
|
55
|
-
|
|
56
|
-
# If POST fails, try GET
|
|
57
|
-
params = {
|
|
58
|
-
"keyword": keyword.upper(),
|
|
59
|
-
"statusType": status,
|
|
60
|
-
"rows": rows,
|
|
61
|
-
"start": 0
|
|
62
|
-
}
|
|
63
|
-
response = session.get(
|
|
64
|
-
"https://tmsearch.uspto.gov/search/keyword",
|
|
65
|
-
params=params,
|
|
66
|
-
headers=HEADERS,
|
|
67
|
-
timeout=30
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
return response.json()
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## Selenium/Playwright Approach (Last Resort)
|
|
16
|
+
Any attempt to call the Elasticsearch endpoint directly will fail because the WAF token
|
|
17
|
+
is missing from the request.
|
|
74
18
|
|
|
75
|
-
|
|
19
|
+
## Playwright Approach (Recommended)
|
|
76
20
|
|
|
77
21
|
```python
|
|
78
22
|
from playwright.sync_api import sync_playwright
|
|
79
23
|
import json
|
|
80
24
|
|
|
81
|
-
def
|
|
25
|
+
def search_trademark(keyword: str, max_results: int = 25) -> dict:
|
|
26
|
+
"""Search USPTO trademarks by keyword using browser automation."""
|
|
27
|
+
results = {"totalFound": 0, "trademarks": []}
|
|
28
|
+
|
|
82
29
|
with sync_playwright() as p:
|
|
83
30
|
browser = p.chromium.launch(headless=True)
|
|
84
31
|
page = browser.new_page()
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
# Intercept API responses
|
|
32
|
+
|
|
88
33
|
def handle_response(response):
|
|
89
|
-
if "
|
|
34
|
+
if "prod-stage" in response.url and response.status == 200:
|
|
90
35
|
try:
|
|
91
36
|
data = response.json()
|
|
92
|
-
if "
|
|
93
|
-
|
|
94
|
-
|
|
37
|
+
if isinstance(data, dict) and "hits" in data:
|
|
38
|
+
hits = data.get("hits", {})
|
|
39
|
+
total = hits.get("total", {})
|
|
40
|
+
results["totalFound"] = total.get("value", 0) if isinstance(total, dict) else total
|
|
41
|
+
for hit in hits.get("hits", [])[:max_results]:
|
|
42
|
+
results["trademarks"].append(hit.get("_source", {}))
|
|
43
|
+
except Exception:
|
|
95
44
|
pass
|
|
96
|
-
|
|
45
|
+
|
|
97
46
|
page.on("response", handle_response)
|
|
98
47
|
page.goto("https://tmsearch.uspto.gov/search/search-information")
|
|
99
|
-
|
|
100
|
-
# Fill in search form
|
|
101
|
-
page.fill('input[placeholder*="search"]', keyword)
|
|
102
|
-
page.click('button[type="submit"]')
|
|
103
48
|
page.wait_for_load_state("networkidle")
|
|
104
|
-
|
|
49
|
+
|
|
50
|
+
search_input = page.locator('input[type="text"]').first
|
|
51
|
+
search_input.fill(keyword.upper())
|
|
52
|
+
search_input.press("Enter")
|
|
53
|
+
|
|
54
|
+
page.wait_for_load_state("networkidle")
|
|
55
|
+
page.wait_for_timeout(3000)
|
|
56
|
+
|
|
105
57
|
browser.close()
|
|
106
|
-
|
|
58
|
+
|
|
59
|
+
return results
|
|
107
60
|
```
|
|
108
61
|
|
|
109
62
|
## Install Playwright
|
|
63
|
+
|
|
110
64
|
```bash
|
|
111
65
|
pip install playwright
|
|
112
66
|
playwright install chromium
|
|
113
67
|
```
|
|
114
68
|
|
|
115
|
-
##
|
|
69
|
+
## TSDR Details API (No browser needed)
|
|
70
|
+
|
|
71
|
+
For looking up a single trademark by serial number, the TSDR Details API works with plain HTTP:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
curl -s "https://tmsearch.uspto.gov/tsdr-api-v1-0-0/tsdr-api?serialNumber=78787878" \
|
|
75
|
+
-H "Accept: application/json"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
This returns JSON with case status, owner info, classes, prosecution history, etc.
|
|
79
|
+
|
|
80
|
+
## Alternative: RapidAPI Wrapper
|
|
116
81
|
|
|
117
|
-
If
|
|
82
|
+
If browser automation is not practical, the RapidAPI unofficial wrapper provides reliable
|
|
83
|
+
keyword search with a simple REST API:
|
|
118
84
|
|
|
119
85
|
```bash
|
|
120
86
|
# Endpoint: https://uspto-trademark.p.rapidapi.com
|
|
121
87
|
# Requires: RapidAPI key (freemium plan available)
|
|
122
88
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
89
|
+
# Keyword search
|
|
90
|
+
curl "https://uspto-trademark.p.rapidapi.com/v1/trademarkSearch/APPLE/active" \
|
|
91
|
+
-H "x-rapidapi-host: uspto-trademark.p.rapidapi.com" \
|
|
92
|
+
-H "x-rapidapi-key: YOUR_RAPIDAPI_KEY"
|
|
127
93
|
|
|
128
94
|
# Availability check
|
|
129
|
-
curl
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
--header "x-rapidapi-key: YOUR_RAPIDAPI_KEY"
|
|
95
|
+
curl "https://uspto-trademark.p.rapidapi.com/v1/trademarkAvailable/CLOUDPEAK" \
|
|
96
|
+
-H "x-rapidapi-host: uspto-trademark.p.rapidapi.com" \
|
|
97
|
+
-H "x-rapidapi-key: YOUR_RAPIDAPI_KEY"
|
|
133
98
|
```
|
|
134
99
|
|
|
135
100
|
RapidAPI wrapper endpoints:
|
|
@@ -137,4 +102,4 @@ RapidAPI wrapper endpoints:
|
|
|
137
102
|
- `/v1/trademarkAvailable/{keyword}` — simple yes/no availability
|
|
138
103
|
- `/v1/ownerSearch/{owner_name}/{postcode}` — search by owner
|
|
139
104
|
- `/v1/serialSearch/{serial_number}` — lookup by serial number
|
|
140
|
-
- `/v1/batchTrademarkSearch` — multiple keywords (POST)
|
|
105
|
+
- `/v1/batchTrademarkSearch` — multiple keywords (POST)
|