@giljae/ag-lazyweb-skill 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +80 -0
- package/README_KO.md +80 -0
- package/index.js +8 -0
- package/lazyweb-add-inspo-source/SKILL.md +167 -0
- package/lazyweb-design-brainstorm/SKILL.md +370 -0
- package/lazyweb-design-improve/SKILL.md +337 -0
- package/lazyweb-design-research/SKILL.md +365 -0
- package/lazyweb-quick-references/SKILL.md +300 -0
- package/lazyweb-remove-inspo-source/SKILL.md +43 -0
- package/package.json +30 -0
- package/scripts/install.sh +41 -0
- package/scripts/uninstall.sh +31 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 giljae
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of herby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Antigravity Lazyweb Skill
|
|
2
|
+
|
|
3
|
+
**Design with evidence, not vibes.**
|
|
4
|
+
|
|
5
|
+
This project is an optimized port of the original [lazyweb-skill](https://github.com/aboul3ata/lazyweb-skill) specifically for **Antigravity**. It enables Antigravity to perform deep design research, gather visual inspiration, and provide design critiques using the Lazyweb screenshot database.
|
|
6
|
+
|
|
7
|
+
## ๐ Key Features for Antigravity
|
|
8
|
+
|
|
9
|
+
- **Native Browser Integration**: Uses Antigravity's `browser_subagent` for high-fidelity live web captures.
|
|
10
|
+
- **Interactive Artifacts**: Generates research reports as premium Antigravity Artifacts for a beautiful preview experience.
|
|
11
|
+
- **Agentic Workflow**: Optimized `SKILL.md` instructions that leverage Antigravity's advanced reasoning and toolset.
|
|
12
|
+
|
|
13
|
+
## ๐ Available Skills
|
|
14
|
+
|
|
15
|
+
### ๐ Core Design Tools
|
|
16
|
+
- **`/lazyweb-design-research`**: **Deep Design Research**.
|
|
17
|
+
Identifies competitors, searches both Lazyweb and the live web, downloads reference screenshots, and produces a structured report including TL;DR, Examples, Findings, Patterns, Anti-Patterns, Unique Angles, and actionable Recommendations. Use for comprehensive competitive analysis and best practices research.
|
|
18
|
+
- **`/lazyweb-quick-references`**: **Visual Inspiration**.
|
|
19
|
+
Finds screenshots fast by searching Lazyweb and grouping results by design pattern. Lighter and faster than design-researchโbest used when you just need visual references without a full analysis.
|
|
20
|
+
- **`/lazyweb-design-improve`**: **Design Critique & Improvement**.
|
|
21
|
+
Captures a screenshot of your current design, finds similar high-quality screens from top apps, and generates 1-5 concrete improvement ideas, each backed by a real visual reference.
|
|
22
|
+
- **`/lazyweb-design-brainstorm`**: **Cross-pollination Brainstorm**.
|
|
23
|
+
Deliberately searches *outside* your industry category to find novel patterns. It helps you "zig when everyone zags" by bringing in ideas from gaming, entertainment, or social apps into your product's context.
|
|
24
|
+
|
|
25
|
+
### โ๏ธ Utility Tools
|
|
26
|
+
- **`/lazyweb-add-inspo-source`**: **Connect External Libraries**.
|
|
27
|
+
Allows you to connect external inspiration libraries (like Mobbin, Savee, etc.) so that Lazyweb design skills can include them in the research process.
|
|
28
|
+
- **`/lazyweb-remove-inspo-source`**: **Disconnect Library**.
|
|
29
|
+
Disconnects an external inspiration library from your Lazyweb workspace.
|
|
30
|
+
|
|
31
|
+
## โ๏ธ Setup & Installation
|
|
32
|
+
|
|
33
|
+
### 1. Get a Free Lazyweb Token
|
|
34
|
+
Run the following command in your terminal to generate and save a free Lazyweb MCP token:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
mkdir -p ~/.lazyweb
|
|
38
|
+
curl -k -sS -X POST https://www.lazyweb.com/api/mcp/install-token \
|
|
39
|
+
-H "content-type: application/json" \
|
|
40
|
+
-d '{}' | node -e 'let s="";process.stdin.on("data",d=>s+=d);process.stdin.on("end",()=>{
|
|
41
|
+
try {
|
|
42
|
+
const token = JSON.parse(s).token;
|
|
43
|
+
require("fs").writeFileSync(require("os").homedir() + "/.lazyweb/lazyweb_mcp_token", token);
|
|
44
|
+
console.log("โ
Token saved successfully to ~/.lazyweb/lazyweb_mcp_token");
|
|
45
|
+
} catch(e) {
|
|
46
|
+
console.error("โ Error parsing JSON:", e.message);
|
|
47
|
+
console.error("Response:", s);
|
|
48
|
+
}
|
|
49
|
+
})'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. Install to Antigravity
|
|
53
|
+
You can install these skills globally to your Antigravity environment using the provided script:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
./scripts/install.sh
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This will copy the skills to `~/.gemini/antigravity/skills/` and update your global `mcp_config.json`.
|
|
60
|
+
|
|
61
|
+
### 3. Uninstall
|
|
62
|
+
To remove the skills and cleanup the MCP configuration:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
./scripts/uninstall.sh
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## ๐ Usage Examples
|
|
69
|
+
|
|
70
|
+
- `"/lazyweb-design-research research how modern AI apps handle onboarding"`
|
|
71
|
+
- `"/lazyweb-quick-references show me examples of dark mode dashboards"`
|
|
72
|
+
- `"/lazyweb-design-improve how can I make this checkout flow better?"`
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### Credits
|
|
77
|
+
This project is based on the [lazyweb-skill](https://github.com/aboul3ata/lazyweb-skill) by aboul3ata. Ported and optimized for Antigravity by Antigravity.
|
|
78
|
+
|
|
79
|
+
## License
|
|
80
|
+
MIT
|
package/README_KO.md
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# ์ํฐ๊ทธ๋๋นํฐ ๋ ์ด์ง์น ์คํฌ (Antigravity Lazyweb Skill)
|
|
2
|
+
|
|
3
|
+
**๊ฐ(Vibe)์ด ์๋ ๊ทผ๊ฑฐ(Evidence)๋ก ๋์์ธํ์ธ์.**
|
|
4
|
+
|
|
5
|
+
์ด ํ๋ก์ ํธ๋ ์ค๋ฆฌ์ง๋ [lazyweb-skill](https://github.com/aboul3ata/lazyweb-skill)์ **์ํฐ๊ทธ๋๋นํฐ(Antigravity)** ํ๊ฒฝ์ ์ต์ ํํ์ฌ ํฌํ
ํ ๋ฒ์ ์
๋๋ค. ๋ ์ด์ง์น์ ๋ฐฉ๋ํ ์คํฌ๋ฆฐ์ท ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ์ฉํ์ฌ ์ํฐ๊ทธ๋๋นํฐ๊ฐ ์ฌ์ธต์ ์ธ ๋์์ธ ๋ฆฌ์์น, ์๊ฐ์ ์๊ฐ ์์ง, ๋์์ธ ๋นํ ๋ฑ์ ์ํํ ์ ์๊ฒ ํด์ค๋๋ค.
|
|
6
|
+
|
|
7
|
+
## ๐ ์ํฐ๊ทธ๋๋นํฐ ์ ์ฉ ์ฃผ์ ํน์ง
|
|
8
|
+
|
|
9
|
+
- **๋ค์ดํฐ๋ธ ๋ธ๋ผ์ฐ์ ํตํฉ**: ์ํฐ๊ทธ๋๋นํฐ ์ ์ฉ `browser_subagent`๋ฅผ ์ฌ์ฉํ์ฌ ์ค์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ๊ณ ํ์ง๋ก ์บก์ฒํฉ๋๋ค.
|
|
10
|
+
- **์ธํฐ๋ํฐ๋ธ ์ํฐํฉํธ**: ๋ฆฌ์์น ๋ณด๊ณ ์๋ฅผ ์ํฐ๊ทธ๋๋นํฐ ์ ์ฉ **Artifacts**๋ก ์์ฑํ์ฌ, ์ธ๋ จ๋ ๋ ์ด์์์์ ์ฆ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
|
|
11
|
+
- **์ต์ ํ๋ ์ํฌํ๋ก์ฐ**: ์ํฐ๊ทธ๋๋นํฐ์ ๋๊ตฌ์
๊ณผ ์ถ๋ก ๋ฅ๋ ฅ์ ์ต์ ํ๋ `SKILL.md` ์ง์นจ์ ์ ๊ณตํฉ๋๋ค.
|
|
12
|
+
|
|
13
|
+
## ๐ ์ฌ์ฉ ๊ฐ๋ฅํ ์คํฌ
|
|
14
|
+
|
|
15
|
+
### ๐ ํต์ฌ ๋์์ธ ๋๊ตฌ
|
|
16
|
+
- **`/lazyweb-design-research`**: **์ฌ์ธต ๋์์ธ ๋ฆฌ์์น**.
|
|
17
|
+
๊ฒฝ์์ฌ๋ฅผ ์๋ณํ๊ณ , ๋ ์ด์ง์น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์๊ฐ ์น์ ๋ชจ๋ ๊ฒ์ํ์ฌ ์๊ฐ์ ๋ ํผ๋ฐ์ค๋ฅผ ์์งํฉ๋๋ค. TL;DR, ์ฌ๋ก ๋ถ์, ์ฃผ์ ๋ฐ๊ฒฌ์ , ๋์์ธ ํจํด, ์ํฐ ํจํด, ๋
ํนํ ๊ด์ ๋ฐ ๊ตฌ์ฒด์ ์ธ ์ถ์ฒ์์ด ํฌํจ๋ ๊ตฌ์กฐํ๋ ๋ฆฌํฌํธ๋ฅผ ์์ฑํฉ๋๋ค. ๊ฒฝ์์ฌ ๋ถ์ ๋ฐ ๋ฒ ์คํธ ํ๋ํฐ์ค ์กฐ์ฌ์ ์ ํฉํฉ๋๋ค.
|
|
18
|
+
- **`/lazyweb-quick-references`**: **์๊ฐ์ ์๊ฐ ์์ง**.
|
|
19
|
+
๋ ์ด์ง์น์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋์์ธ ํจํด๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ ๋ณด์ฌ์ค๋๋ค. ์ ์ฒด์ ์ธ ๋ถ์๋ณด๋ค๋ ํน์ UI ํจํด(์: "SaaS ๊ฐ๊ฒฉ ํ์ด์ง")์ ์๊ฐ์ ์ฐธ๊ณ ์๋ฃ๊ฐ ๋น ๋ฅด๊ฒ ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
|
|
20
|
+
- **`/lazyweb-design-improve`**: **๋์์ธ ๋นํ ๋ฐ ๊ฐ์ **.
|
|
21
|
+
ํ์ฌ ๋์์ธ์ ์คํฌ๋ฆฐ์ท์ ์บก์ฒํ๊ณ , ์
๊ณ ์ต๊ณ ์์ค์ ์ฑ๋ค์์ ์ ์ฌํ ํ๋ฉด์ ์ฐพ์ 1~5๊ฐ์ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ ์์ด๋์ด๋ฅผ ์ ์ํฉ๋๋ค. ๊ฐ ์ ์์ ์ค์ ์๊ฐ์ ๋ ํผ๋ฐ์ค์ ์ฐ๊ฒฐ๋์ด ์ ๊ณต๋ฉ๋๋ค.
|
|
22
|
+
- **`/lazyweb-design-brainstorm`**: **์ฐฝ์์ ์์ด๋์ด ๋ธ๋ ์ธ์คํ ๋ฐ**.
|
|
23
|
+
์๋์ ์ผ๋ก ์ฌ์ฉ์์ ์ ํ ์นดํ
๊ณ ๋ฆฌ *์ธ๋ถ*์์ ์๋ก์ด ํจํด์ ๊ฒ์ํฉ๋๋ค. ํํ
ํฌ ์ฑ์ ๋ง๋ค ๋ ๊ฒ์, ์ํฐํ
์ธ๋จผํธ, ์์
์ฑ์ ๋์์ธ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ์ ์ ์ธ "์ฐจ๋ณํ ํฌ์ธํธ"๋ฅผ ๋์ถํ๋ ๋ฐ ๋์์ ์ค๋๋ค.
|
|
24
|
+
|
|
25
|
+
### โ๏ธ ์ ํธ๋ฆฌํฐ ๋๊ตฌ
|
|
26
|
+
- **`/lazyweb-add-inspo-source`**: **์ธ๋ถ ์๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๊ฒฐ**.
|
|
27
|
+
Mobbin, Savee ๋ฑ ์ธ๋ถ ๋์์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ ์ด์ง์น ๋ฆฌ์์น ํ๋ก์ธ์ค์ ํฌํจํ ์ ์๊ฒ ํฉ๋๋ค.
|
|
28
|
+
- **`/lazyweb-remove-inspo-source`**: **๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐ๊ฒฐ ํด์ **.
|
|
29
|
+
์ฐ๊ฒฐ๋ ์ธ๋ถ ๋์์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ํฌ์คํ์ด์ค์์ ์ ๊ฑฐํฉ๋๋ค.
|
|
30
|
+
|
|
31
|
+
## โ๏ธ ์ค์ ๋ฐ ์ค์น ๋ฐฉ๋ฒ
|
|
32
|
+
|
|
33
|
+
### 1. ๋ฌด๋ฃ ๋ ์ด์ง์น ํ ํฐ ๋ฐ๊ธ
|
|
34
|
+
ํฐ๋ฏธ๋์์ ์๋ ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ ๋ฌด๋ฃ Lazyweb MCP ํ ํฐ์ ์์ฑํ๊ณ ์ ์ฅํ์ธ์:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
mkdir -p ~/.lazyweb
|
|
38
|
+
curl -k -sS -X POST https://www.lazyweb.com/api/mcp/install-token \
|
|
39
|
+
-H "content-type: application/json" \
|
|
40
|
+
-d '{}' | node -e 'let s="";process.stdin.on("data",d=>s+=d);process.stdin.on("end",()=>{
|
|
41
|
+
try {
|
|
42
|
+
const token = JSON.parse(s).token;
|
|
43
|
+
require("fs").writeFileSync(require("os").homedir() + "/.lazyweb/lazyweb_mcp_token", token);
|
|
44
|
+
console.log("โ
ํ ํฐ์ด ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋์์ต๋๋ค: ~/.lazyweb/lazyweb_mcp_token");
|
|
45
|
+
} catch(e) {
|
|
46
|
+
console.error("โ JSON ํ์ฑ ์๋ฌ:", e.message);
|
|
47
|
+
console.error("์๋ต ๋ด์ฉ:", s);
|
|
48
|
+
}
|
|
49
|
+
})'
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 2. ์ํฐ๊ทธ๋๋นํฐ์ ์ค์น
|
|
53
|
+
์ ๊ณต๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์คํฌ๋ค์ ์ํฐ๊ทธ๋๋นํฐ ์ ์ญ ํ๊ฒฝ์ ์ค์นํ ์ ์์ต๋๋ค:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
./scripts/install.sh
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
์ด ์คํฌ๋ฆฝํธ๋ ์คํฌ๋ค์ `~/.gemini/antigravity/skills/` ๊ฒฝ๋ก๋ก ๋ณต์ฌํ๊ณ , ์ ์ญ `mcp_config.json` ํ์ผ์ ์
๋ฐ์ดํธํฉ๋๋ค.
|
|
60
|
+
|
|
61
|
+
### 3. ์ญ์ ๋ฐฉ๋ฒ
|
|
62
|
+
์ค์น๋ ์คํฌ์ ์ ๊ฑฐํ๊ณ MCP ์ค์ ์ ์์๋ณต๊ตฌํ๋ ค๋ฉด ๋ค์์ ์คํํ์ธ์:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
./scripts/uninstall.sh
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## ๐ ์ฌ์ฉ ์์
|
|
69
|
+
|
|
70
|
+
- `"/lazyweb-design-research ํ๋์ ์ธ AI ์ฑ๋ค์ ์จ๋ณด๋ฉ ๋ฐฉ์์ ์กฐ์ฌํด์ค"`
|
|
71
|
+
- `"/lazyweb-quick-references ๋คํฌ ๋ชจ๋ ๋์๋ณด๋ ์์๋ค์ ๋ณด์ฌ์ค"`
|
|
72
|
+
- `"/lazyweb-design-improve ์ด ๊ฒฐ์ ํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ๊ฐ์ ํ๋ฉด ์ข์๊น?"`
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### ํฌ๋ ๋ง
|
|
77
|
+
์ด ํ๋ก์ ํธ๋ aboul3ata์ [lazyweb-skill](https://github.com/aboul3ata/lazyweb-skill)์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ํฐ๊ทธ๋๋นํฐ ํ์ ์ํด ์ํฐ๊ทธ๋๋นํฐ ์ ์ฉ์ผ๋ก ํฌํ
๋ฐ ์ต์ ํ๋์์ต๋๋ค.
|
|
78
|
+
|
|
79
|
+
## ๋ผ์ด์ ์ค
|
|
80
|
+
MIT
|
package/index.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: lazyweb-add-inspo-source
|
|
3
|
+
description: |
|
|
4
|
+
Connect an external inspiration source (Mobbin, Savee, Dribbble, Behance, etc.)
|
|
5
|
+
as a first-class source in all Lazyweb design skills. Authenticates via headless
|
|
6
|
+
browser, persists session cookies, and registers the source so future design
|
|
7
|
+
research automatically includes it alongside Lazyweb.
|
|
8
|
+
Trigger on: "add inspo source", "add inspiration source", "connect Mobbin",
|
|
9
|
+
"connect Savee", "add design source", "connect inspiration", "add Dribbble",
|
|
10
|
+
"link Behance".
|
|
11
|
+
allowed-tools:
|
|
12
|
+
- Bash
|
|
13
|
+
- Read
|
|
14
|
+
- Write
|
|
15
|
+
- AskUserQuestion
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Add Inspiration Library
|
|
19
|
+
|
|
20
|
+
Connect an external design inspiration library so all Lazyweb design skills
|
|
21
|
+
(`/lazyweb-design-research`, `/lazyweb-design-improve`, `/lazyweb-design-brainstorm`,
|
|
22
|
+
`/lazyweb-quick-references`) search it alongside Lazyweb's database.
|
|
23
|
+
|
|
24
|
+
No adapters or scrapers needed โ Claude uses the browse tool to navigate the library
|
|
25
|
+
UI at search time, the same way it browses any website.
|
|
26
|
+
|
|
27
|
+
## Browse Setup
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
LB=""
|
|
31
|
+
# Check lazyweb-skill browse first
|
|
32
|
+
for _P in "$(pwd)/.claude/skills/lazyweb-skill/browse/dist/browse" ~/.claude/skills/lazyweb-skill/browse/dist/browse; do
|
|
33
|
+
[ -x "$_P" ] && LB="$_P" && break
|
|
34
|
+
done
|
|
35
|
+
# Fall back to gstack browse
|
|
36
|
+
if [ -z "$LB" ]; then
|
|
37
|
+
_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
38
|
+
[ -n "$_ROOT" ] && [ -x "$_ROOT/.claude/skills/gstack/browse/dist/browse" ] && LB="$_ROOT/.claude/skills/gstack/browse/dist/browse"
|
|
39
|
+
[ -z "$LB" ] && [ -x ~/.claude/skills/gstack/browse/dist/browse ] && LB=~/.claude/skills/gstack/browse/dist/browse
|
|
40
|
+
fi
|
|
41
|
+
[ -x "$LB" ] && echo "BROWSE_READY: $LB" || echo "NO_BROWSE"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
If `NO_BROWSE`: This skill requires the browse tool. Tell the user:
|
|
45
|
+
"Browse tool not found. Install it with: `cd ~/.claude/skills/lazyweb-skill/browse && ./setup`"
|
|
46
|
+
Then stop.
|
|
47
|
+
|
|
48
|
+
## Workflow
|
|
49
|
+
|
|
50
|
+
### 1. Ask Which Library
|
|
51
|
+
|
|
52
|
+
If the user didn't specify, ask which library to connect. Common options:
|
|
53
|
+
|
|
54
|
+
| Library | URL | Search URL |
|
|
55
|
+
|---------|-----|-----------|
|
|
56
|
+
| Mobbin | https://mobbin.com | https://mobbin.com/browse/ios/apps |
|
|
57
|
+
| Savee | https://savee.it | https://savee.it/search/ |
|
|
58
|
+
| Dribbble | https://dribbble.com | https://dribbble.com/search |
|
|
59
|
+
| Behance | https://www.behance.net | https://www.behance.net/search/projects |
|
|
60
|
+
| Awwwards | https://www.awwwards.com | https://www.awwwards.com/websites |
|
|
61
|
+
|
|
62
|
+
If the user wants a library not listed here, ask for:
|
|
63
|
+
- Name of the library
|
|
64
|
+
- Base URL
|
|
65
|
+
- Search URL (the page where you can type a search query)
|
|
66
|
+
|
|
67
|
+
### 2. Check If Already Connected
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
cat ~/.lazyweb/libraries.json 2>/dev/null || echo '{"libraries":[]}'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If the library is already in the list, tell the user it's already connected and ask
|
|
74
|
+
if they want to re-authenticate (useful if session expired).
|
|
75
|
+
|
|
76
|
+
### 3. Authenticate via Headless Browser
|
|
77
|
+
|
|
78
|
+
Navigate to the library and hand off to the user for login:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Open the library's login page
|
|
82
|
+
$LB goto "{url}"
|
|
83
|
+
|
|
84
|
+
# Hand off to visible Chrome so user can log in
|
|
85
|
+
$LB handoff "Log in to {name}. Close this window or press Enter when done."
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The handoff opens a visible Chrome window where the user can:
|
|
89
|
+
- Log in with email/password
|
|
90
|
+
- Complete OAuth flows
|
|
91
|
+
- Handle 2FA/CAPTCHA
|
|
92
|
+
|
|
93
|
+
After the user completes login:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Resume headless control with cookies preserved
|
|
97
|
+
$LB resume
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 4. Verify Authentication
|
|
101
|
+
|
|
102
|
+
Navigate to the search page and confirm we're logged in:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
$LB goto "{searchUrl}"
|
|
106
|
+
$LB snapshot -i
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Check the snapshot for signs of being logged in (user avatar, account menu, no login
|
|
110
|
+
prompts). If it looks like we're not authenticated, tell the user and offer to retry.
|
|
111
|
+
|
|
112
|
+
### 5. Test Search
|
|
113
|
+
|
|
114
|
+
Do a quick test search to confirm everything works:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
$LB snapshot -i
|
|
118
|
+
# Find the search input and type a test query
|
|
119
|
+
$LB fill @eN "pricing page"
|
|
120
|
+
$LB press Enter
|
|
121
|
+
# Wait briefly for results
|
|
122
|
+
$LB snapshot -i
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
If results load successfully, the connection works.
|
|
126
|
+
|
|
127
|
+
### 6. Save Library Config
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
mkdir -p ~/.lazyweb
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Read existing config, add the new library, write back:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"libraries": [
|
|
138
|
+
{
|
|
139
|
+
"name": "Mobbin",
|
|
140
|
+
"url": "https://mobbin.com",
|
|
141
|
+
"searchUrl": "https://mobbin.com/browse/ios/apps",
|
|
142
|
+
"addedAt": "2026-03-26"
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Write to `~/.lazyweb/libraries.json`.
|
|
149
|
+
|
|
150
|
+
### 7. Confirm to User
|
|
151
|
+
|
|
152
|
+
Tell the user:
|
|
153
|
+
- "{Name} is now connected as an inspiration source."
|
|
154
|
+
- "All Lazyweb design skills will now search {Name} alongside Lazyweb's database."
|
|
155
|
+
- "If your session expires, run `/lazyweb-add-inspo-source` again to reconnect."
|
|
156
|
+
- "To disconnect, run `/lazyweb-remove-inspo-source`."
|
|
157
|
+
|
|
158
|
+
## Important Notes
|
|
159
|
+
|
|
160
|
+
- **Session persistence**: Browse cookies persist within a server session (30 min idle
|
|
161
|
+
timeout). If the session expires between uses, the design skills will detect this
|
|
162
|
+
and prompt the user to reconnect.
|
|
163
|
+
- **No adapters**: Claude navigates each library's UI at search time using browse
|
|
164
|
+
snapshots and interactions. This means it works with any library, even ones that
|
|
165
|
+
redesign their UI.
|
|
166
|
+
- **Multiple libraries**: Users can connect as many libraries as they want. Each gets
|
|
167
|
+
searched during design research.
|