@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.
Files changed (117) hide show
  1. package/.claude/settings.local.json +3 -1
  2. package/README.md +13 -13
  3. package/codex-cli-workspace/iteration-1/benchmark.json +122 -0
  4. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/eval_metadata.json +13 -0
  5. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/grading.json +52 -0
  6. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/outputs/response.md +163 -0
  7. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/with_skill/timing.json +5 -0
  8. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/grading.json +58 -0
  9. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/outputs/response.md +151 -0
  10. package/codex-cli-workspace/iteration-1/eval-1-ci-integration/without_skill/timing.json +5 -0
  11. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +13 -0
  12. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +52 -0
  13. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +86 -0
  14. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +5 -0
  15. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +58 -0
  16. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +164 -0
  17. package/codex-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +5 -0
  18. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/eval_metadata.json +13 -0
  19. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/grading.json +52 -0
  20. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/outputs/response.md +130 -0
  21. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/with_skill/timing.json +5 -0
  22. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/grading.json +64 -0
  23. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/outputs/response.md +209 -0
  24. package/codex-cli-workspace/iteration-1/eval-3-profiles-troubleshooting/without_skill/timing.json +5 -0
  25. package/codex-cli-workspace/iteration-1/review.html +1325 -0
  26. package/gemini-cli-workspace/iteration-1/benchmark.json +86 -0
  27. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/eval_metadata.json +37 -0
  28. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/grading.json +37 -0
  29. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/outputs/response.md +401 -0
  30. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/with_skill/timing.json +5 -0
  31. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/grading.json +37 -0
  32. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/outputs/response.md +405 -0
  33. package/gemini-cli-workspace/iteration-1/eval-1-cicd-setup/without_skill/timing.json +5 -0
  34. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/eval_metadata.json +37 -0
  35. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/grading.json +37 -0
  36. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/outputs/response.md +212 -0
  37. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/with_skill/timing.json +5 -0
  38. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/grading.json +37 -0
  39. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/outputs/response.md +427 -0
  40. package/gemini-cli-workspace/iteration-1/eval-2-mcp-server-config/without_skill/timing.json +5 -0
  41. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/eval_metadata.json +32 -0
  42. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/grading.json +32 -0
  43. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/outputs/response.md +171 -0
  44. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/with_skill/timing.json +5 -0
  45. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/grading.json +32 -0
  46. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/outputs/response.md +199 -0
  47. package/gemini-cli-workspace/iteration-1/eval-3-custom-slash-command/without_skill/timing.json +5 -0
  48. package/gemini-cli-workspace/iteration-1/review.html +1325 -0
  49. package/gemini-cli-workspace/iteration-2/benchmark.json +173 -0
  50. package/gemini-cli-workspace/iteration-2/benchmark.md +28 -0
  51. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/eval_metadata.json +37 -0
  52. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/grading.json +37 -0
  53. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/outputs/response.md +195 -0
  54. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/with_skill/timing.json +5 -0
  55. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/grading.json +37 -0
  56. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/outputs/response.md +377 -0
  57. package/gemini-cli-workspace/iteration-2/eval-1-cicd-setup/without_skill/timing.json +5 -0
  58. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/eval_metadata.json +37 -0
  59. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/grading.json +37 -0
  60. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/outputs/response.md +127 -0
  61. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/with_skill/timing.json +5 -0
  62. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/grading.json +37 -0
  63. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/outputs/response.md +164 -0
  64. package/gemini-cli-workspace/iteration-2/eval-2-mcp-server-config/without_skill/timing.json +5 -0
  65. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/eval_metadata.json +32 -0
  66. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/grading.json +32 -0
  67. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/outputs/response.md +91 -0
  68. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/with_skill/timing.json +5 -0
  69. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/grading.json +32 -0
  70. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/outputs/response.md +112 -0
  71. package/gemini-cli-workspace/iteration-2/eval-3-custom-slash-command/without_skill/timing.json +5 -0
  72. package/gemini-cli-workspace/iteration-2/eval-viewer.html +1325 -0
  73. package/package.json +1 -1
  74. package/screen-recording-workspace/evals.json +41 -0
  75. package/screen-recording-workspace/iteration-1/benchmark.json +102 -0
  76. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/eval_metadata.json +31 -0
  77. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/grading.json +11 -0
  78. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/outputs/demo.mp4 +0 -0
  79. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/with_skill/timing.json +5 -0
  80. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/grading.json +11 -0
  81. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/outputs/demo.mp4 +0 -0
  82. package/screen-recording-workspace/iteration-1/eval-0-fullscreen/without_skill/timing.json +5 -0
  83. package/screen-recording-workspace/iteration-1/eval-1-region-audio/eval_metadata.json +31 -0
  84. package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/grading.json +11 -0
  85. package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/outputs/region_capture.mp4 +0 -0
  86. package/screen-recording-workspace/iteration-1/eval-1-region-audio/with_skill/timing.json +5 -0
  87. package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/grading.json +11 -0
  88. package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/outputs/region_capture.mp4 +0 -0
  89. package/screen-recording-workspace/iteration-1/eval-1-region-audio/without_skill/timing.json +5 -0
  90. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/eval_metadata.json +31 -0
  91. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/grading.json +11 -0
  92. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/outputs/fallback_recording.mp4 +0 -0
  93. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/with_skill/timing.json +5 -0
  94. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/grading.json +11 -0
  95. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/fallback_recording.mp4 +0 -0
  96. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/outputs/record_screen.py +67 -0
  97. package/screen-recording-workspace/iteration-1/eval-2-python-fallback/without_skill/timing.json +5 -0
  98. package/screen-recording-workspace/iteration-1/review.html +1325 -0
  99. package/src/skills/codex-cli/SKILL.md +21 -11
  100. package/src/skills/codex-cli/evals/evals.json +47 -0
  101. package/src/skills/gemini-cli/SKILL.md +27 -13
  102. package/src/skills/gemini-cli/evals/evals.json +46 -0
  103. package/src/skills/gemini-cli/references/commands.md +21 -14
  104. package/src/skills/gemini-cli/references/configuration.md +23 -18
  105. package/src/skills/gemini-cli/references/headless-and-scripting.md +7 -17
  106. package/src/skills/gemini-cli/references/mcp-and-extensions.md +12 -6
  107. package/src/skills/notebook-lm/SKILL.md +1 -1
  108. package/src/skills/screen-recording/SKILL.md +243 -213
  109. package/src/skills/screen-recording/references/design-patterns.md +4 -2
  110. package/src/skills/screen-recording/references/ffmpeg-recording.md +473 -0
  111. package/src/skills/screen-recording/references/{approach1-programmatic.md → programmatic-generation.md} +45 -22
  112. package/src/skills/screen-recording/references/python-fallback.md +222 -0
  113. package/src/skills/tm-search/SKILL.md +242 -106
  114. package/src/skills/tm-search/evals/evals.json +23 -0
  115. package/src/skills/tm-search/references/scraping-fallback.md +60 -95
  116. package/src/skills/tm-search/scripts/tm_search.py +453 -375
  117. 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
- # Web Scraping Fallback for tmsearch.uspto.gov
1
+ # Browser Automation Fallback for tmsearch.uspto.gov
2
2
 
3
- Use this when the direct backend API calls return errors or unexpected responses.
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
- ## Background
7
+ Browser automation is the only reliable way to perform keyword searches programmatically.
6
8
 
7
- The tmsearch.uspto.gov frontend is a React SPA. The backend API it uses may change endpoint paths.
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
- ## Python Requests Approach
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
- ```python
15
- import requests
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
- If all HTTP approaches fail, use a headless browser to drive the UI directly:
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 search_with_playwright(keyword: str) -> list:
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
- results = []
86
-
87
- # Intercept API responses
32
+
88
33
  def handle_response(response):
89
- if "search" in response.url and response.status == 200:
34
+ if "prod-stage" in response.url and response.status == 200:
90
35
  try:
91
36
  data = response.json()
92
- if "trademarks" in data:
93
- results.extend(data["trademarks"])
94
- except:
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
- return results
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
- ## Alternative: Use RapidAPI Wrapper
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 USPTO direct access is problematic, the RapidAPI unofficial wrapper is reliable:
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
- curl --request GET \
124
- --url "https://uspto-trademark.p.rapidapi.com/v1/trademarkSearch/{KEYWORD}/active" \
125
- --header "x-rapidapi-host: uspto-trademark.p.rapidapi.com" \
126
- --header "x-rapidapi-key: YOUR_RAPIDAPI_KEY"
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 --request GET \
130
- --url "https://uspto-trademark.p.rapidapi.com/v1/trademarkAvailable/{KEYWORD}" \
131
- --header "x-rapidapi-host: uspto-trademark.p.rapidapi.com" \
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)