@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 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,8 @@
1
+ // Antigravity Lazyweb Skill
2
+ // This package contains a set of skills for Antigravity.
3
+ // Please refer to README.md for installation and usage instructions.
4
+
5
+ module.exports = {
6
+ name: "ag-lazyweb-skill",
7
+ description: "Antigravity Lazyweb Skill"
8
+ };
@@ -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.