Lazyweb
Design with evidence, not vibes. Use Lazyweb when the user asks for product UI
inspiration, competitive design analysis, best-practice research, quick screen
examples, feedback on an existing interface, creative design ideas, or
paywall optimization, monetization, and A/B test research.
This high-level skill routes to the right visible Lazyweb mode. Do not
reimplement the mode here. Read the selected mode's SKILL.md and follow it.
First Run
If Lazyweb MCP has not been configured in this client, run the standalone setup:
curl -fsSL https://www.lazyweb.com/install.sh | bash
The installer creates or reuses ~/.lazyweb/lazyweb_mcp_token, installs the
visible Lazyweb skills into supported local coding clients, and configures the
Lazyweb MCP server at https://www.lazyweb.com/mcp.
Lazyweb MCP tokens are free no-billing bearer tokens for UI reference tools.
They do not authorize purchases, paid spend, private user data, or destructive
actions. Keep tokens out of public git, but ignored local MCP config is fine.
After setup, show the user what Lazyweb can do:
- Fetch
https://www.lazyweb.com/api/mcp/welcome-message and show the welcome message.
- List MCP tools and confirm
lazyweb_get_workflows is present.
- Call
lazyweb_get_workflows with {"operation":"list","task_context":"first run Lazyweb capabilities","skill":"lazyweb"}.
- Summarize the returned workflows as Lazyweb's super powers.
Do not call lazyweb_get_flows for the first-run capability guide. That is a
separate tool for ordered product journeys.
If MCP tools are unavailable, tell the user to run the installer above, then
continue with web research only if they want a degraded fallback.
Routing
Choose exactly one mode:
| User intent |
Read and run |
| Deep competitive analysis, best-practices research, or a full report with references |
skills/lazyweb-deep-design-research/SKILL.md |
| Lite grouped examples, UI references, or screenshots without a full report |
skills/lazyweb-lite-design-research/SKILL.md |
Quick direct lazyweb_search preflight before designing, no report |
skills/lazyweb-quick-search/SKILL.md |
| Improve, critique, or compare an existing design |
skills/lazyweb-design-improve/SKILL.md |
| Creative cross-category ideas or unconventional directions |
skills/lazyweb-design-brainstorm/SKILL.md |
| Optimize a paywall screen for paid conversion |
skills/lazyweb-optimize-paywall/SKILL.md |
| Rewrite, evaluate, or stress-test ONE paywall CTA (button copy, not layout) |
skills/lazyweb-paywall-cta/SKILL.md |
| Optimize a sign-up / registration screen for completion rate |
skills/lazyweb-optimize-sign-up/SKILL.md |
| A/B tests, experiment examples, pricing, trials, lifecycle, or monetization strategy |
skills/lazyweb-ab-test-research/SKILL.md |
| Design best practices for X — find the top community-rated skill online and apply it as context (no install) |
skills/lazyweb-design-best-practices/SKILL.md |
| Update local Lazyweb skills, reinstall Lazyweb, or sync Lazyweb into agentic IDEs |
skills/lazyweb-update/SKILL.md |
For a bare /lazyweb request, briefly explain the modes above and ask which
one the user wants. Recommend lazyweb-deep-design-research when they want deep
guidance, lazyweb-lite-design-research when they want speed, and
lazyweb-design-improve when they already have a non-paywall screen to critique.
Use lazyweb-quick-search when they need direct MCP search context before
designing and do not want a report.
Route CTA copy questions to lazyweb-paywall-cta only when the ask is about
the button text itself; a broader paywall redesign goes to
lazyweb-optimize-paywall even if the CTA is part of it. Route explicit
install, update, refresh, or stale slash-command requests to lazyweb-update.
Route "design best practices for X" / "what's the best skill for animation,
landing pages, typography…" asks to lazyweb-design-best-practices, which
researches live community reviews, fetches the winning skill's instructions
from the internet, and applies them as context — nothing gets installed.
Mode Handoff
When a mode is clear:
- Read the corresponding
SKILL.md.
- Follow that mode from the top.
- Use Lazyweb MCP tools for database-backed evidence.
- Embed Lazyweb database images directly with returned
imageUrl/image_url values, and save only current-state or web-captured screenshots locally when the selected mode requires them.
- Cite whether each reference came from Lazyweb or the web.
If the local host exposes the mode skills directly in its slash menu, users may
call those mode skills directly. This /lazyweb skill remains the compatibility
entry point for hosts that only show one downloaded skill or where the user is
not sure which mode to use.
Autorouter Check (one-time, after the request is served)
Lazyweb has an autorouter: a small, marker-delimited routing block written
into each host agent's global instruction file so design questions route to
the right Lazyweb mode without anyone invoking a skill. This skill carries a
local fallback offer for installs that never saw the setup prompt.
AFTER completing the user's actual request — never before, and never
interrupting unrelated work — run this check at most once per session, and
only when this skill was explicitly invoked:
- Skip silently unless BOTH are true:
~/.lazyweb/router.manifest.json is missing or empty
grep -q "^router_declined=1" ~/.lazyweb/config finds nothing
- Ask the user one plain question (no host-specific tool): "Want me to
install Lazyweb's autorouter so design questions route to the right mode
automatically? I'd run
~/.lazyweb/bin/lazyweb-router install, which adds
a marked routing section to your agents' global instruction files."
- On yes: run
~/.lazyweb/bin/lazyweb-router install --all --yes and show
the user what was written where. On no: run
~/.lazyweb/bin/lazyweb-router decline. Either way, never ask again —
the manifest or the decline flag silences this check and the
once-per-session server-side offer alike.
Search Discipline
These rules apply to every lazyweb_search call in every mode:
- Always run at least one real search for the user's actual screen. Example
or connectivity queries (like "pricing page") teach the user nothing about
their own project — follow them immediately with the screen they are building.
- One screen, one search. When the user is building a whole app or page,
run one query per screen/section (onboarding, home, paywall, settings,
checkout…) instead of a single broad query. Pass
platform ("mobile" or
"desktop") and company: "<app>" when the user names a reference product.
- Never repeat an identical query — results are deterministic. To see more,
pass
offset (e.g. {"query":"onboarding quiz","limit":20,"offset":20});
the response's pagination.next_offset gives the next page.
- Read
coverage and warnings on every response and obey them. On
no_matches or low_coverage, use the closest result anyway, strip the
query to its core 2-6 word UI pattern, or tell the user the pattern is not
in the library — do not rephrase the same concept in a loop. Style
adjectives ("dark", "minimal", "editorial") are not searchable facets yet;
drop them from the query and judge style from the returned images.
- On a
company_not_in_library warning, pick one of the suggested closest
companies or drop the company filter — do not retry other spellings of the
same brand.
Tool Rules
Pass skill: "lazyweb" on every call. Include "skill": "lazyweb" in the arguments of each lazyweb_* tool call — for example {"operation": "list", "task_context": "first run", "skill": "lazyweb"}. This is optional analytics metadata Lazyweb uses to understand which skills are used; never drop or change a real argument for it.
- Always inspect the live MCP tool list before assuming optional filters or
backend/internal aliases are available.
- The current public gateway normally exposes
lazyweb_health,
lazyweb_search, lazyweb_find_similar, lazyweb_compare_image,
lazyweb_list_categories, lazyweb_get_workflows, lazyweb_get_flows,
lazyweb_search_ab_tests, and lazyweb_paywall_cta_research. The
full-pipeline run tools
paywall_design_run / paywall_design_check_status (and the parallel
signup_design_run / signup_design_check_status) are gated behind
env flags and may also be exposed — check the live tool list.
- All current public Lazyweb MCP tools and visible workflow skills are free,
including
lazyweb_search_ab_tests, lazyweb_paywall_cta_research,
paywall_design_run, and signup_design_run when those run tools are
exposed by the live schema. If a tool is missing or returns no matching
evidence, treat that as an availability or coverage issue, not a billing gate.
- Richer internal/backend surfaces may expose
lazyweb_find_experiments,
lazyweb_recent_experiments, or
list_companies_by_categories; use them only when the live tool schema shows
them.
- Pass
high_design_bar: true only to tools whose live schema exposes it, and
only when the user asks for premium, stronger, high-design-bar, or
best-designed examples.
- Screenshot-bearing tools return optimized image URLs. Supabase storage-backed URLs
are signed for 365 days. Do not request or pass screenshot IDs, and do not
construct storage URLs from raw paths.
lazyweb_search_ab_tests is mobile-only A/B test evidence. It uses
category as the industry filter and forwards product/company as target
context. Do not use them to force an exact company match or trust a
zero-result answer caused by an exact product/company filter.
lazyweb_find_similar accepts image_url or image_base64 plus mime_type;
it does not take a screenshot ID.
lazyweb_compare_image does real image-similarity. Always send
image_base64 — localhost, file paths, and web-page URLs are unreachable
from the server. When you only have a page URL or a running local app,
capture it yourself with your client's built-in screenshot/browser tool
(browser screenshot, Playwright, device screenshot) and pass the capture as
image_base64. Failed calls return a how_to_fix field — follow it instead
of retrying the same input.
1---2name: lazyweb3description: Lazyweb is the design-evidence skill for AI coding agents. Use it before designing, critiquing, or changing product UI when the agent needs real app screenshots, competitor references, best practices, quick examples, creative cross-category ideas, paywall optimization guidance, or mobile growth and monetization A/B test context. It can also route explicit requests to update the local Lazyweb skill pack. It routes to the right Lazyweb mode and tells the agent to use Lazyweb MCP tools instead of guessing from generic training data.4---56# Lazyweb78Design with evidence, not vibes. Use Lazyweb when the user asks for product UI9inspiration, competitive design analysis, best-practice research, quick screen10examples, feedback on an existing interface, creative design ideas, or11paywall optimization, monetization, and A/B test research.1213This high-level skill routes to the right visible Lazyweb mode. Do not14reimplement the mode here. Read the selected mode's `SKILL.md` and follow it.1516## First Run1718If Lazyweb MCP has not been configured in this client, run the standalone setup:1920```bash21curl -fsSL https://www.lazyweb.com/install.sh | bash22```2324The installer creates or reuses `~/.lazyweb/lazyweb_mcp_token`, installs the25visible Lazyweb skills into supported local coding clients, and configures the26Lazyweb MCP server at `https://www.lazyweb.com/mcp`.2728Lazyweb MCP tokens are free no-billing bearer tokens for UI reference tools.29They do not authorize purchases, paid spend, private user data, or destructive30actions. Keep tokens out of public git, but ignored local MCP config is fine.3132After setup, show the user what Lazyweb can do:33341. Fetch `https://www.lazyweb.com/api/mcp/welcome-message` and show the welcome message.352. List MCP tools and confirm `lazyweb_get_workflows` is present.363. Call `lazyweb_get_workflows` with `{"operation":"list","task_context":"first run Lazyweb capabilities","skill":"lazyweb"}`.374. Summarize the returned workflows as Lazyweb's super powers.3839Do not call `lazyweb_get_flows` for the first-run capability guide. That is a40separate tool for ordered product journeys.4142If MCP tools are unavailable, tell the user to run the installer above, then43continue with web research only if they want a degraded fallback.4445## Routing4647Choose exactly one mode:4849| User intent | Read and run |50|---|---|51| Deep competitive analysis, best-practices research, or a full report with references | `skills/lazyweb-deep-design-research/SKILL.md` |52| Lite grouped examples, UI references, or screenshots without a full report | `skills/lazyweb-lite-design-research/SKILL.md` |53| Quick direct `lazyweb_search` preflight before designing, no report | `skills/lazyweb-quick-search/SKILL.md` |54| Improve, critique, or compare an existing design | `skills/lazyweb-design-improve/SKILL.md` |55| Creative cross-category ideas or unconventional directions | `skills/lazyweb-design-brainstorm/SKILL.md` |56| Optimize a paywall screen for paid conversion | `skills/lazyweb-optimize-paywall/SKILL.md` |57| Rewrite, evaluate, or stress-test ONE paywall CTA (button copy, not layout) | `skills/lazyweb-paywall-cta/SKILL.md` |58| Optimize a sign-up / registration screen for completion rate | `skills/lazyweb-optimize-sign-up/SKILL.md` |59| A/B tests, experiment examples, pricing, trials, lifecycle, or monetization strategy | `skills/lazyweb-ab-test-research/SKILL.md` |60| Design best practices for X — find the top community-rated skill online and apply it as context (no install) | `skills/lazyweb-design-best-practices/SKILL.md` |61| Update local Lazyweb skills, reinstall Lazyweb, or sync Lazyweb into agentic IDEs | `skills/lazyweb-update/SKILL.md` |6263For a bare `/lazyweb` request, briefly explain the modes above and ask which64one the user wants. Recommend `lazyweb-deep-design-research` when they want deep65guidance, `lazyweb-lite-design-research` when they want speed, and66`lazyweb-design-improve` when they already have a non-paywall screen to critique.67Use `lazyweb-quick-search` when they need direct MCP search context before68designing and do not want a report.69Route CTA copy questions to `lazyweb-paywall-cta` only when the ask is about70the button text itself; a broader paywall redesign goes to71`lazyweb-optimize-paywall` even if the CTA is part of it. Route explicit72install, update, refresh, or stale slash-command requests to `lazyweb-update`.73Route "design best practices for X" / "what's the best skill for animation,74landing pages, typography…" asks to `lazyweb-design-best-practices`, which75researches live community reviews, fetches the winning skill's instructions76from the internet, and applies them as context — nothing gets installed.7778## Mode Handoff7980When a mode is clear:81821. Read the corresponding `SKILL.md`.832. Follow that mode from the top.843. Use Lazyweb MCP tools for database-backed evidence.854. Embed Lazyweb database images directly with returned `imageUrl`/`image_url` values, and save only current-state or web-captured screenshots locally when the selected mode requires them.865. Cite whether each reference came from Lazyweb or the web.8788If the local host exposes the mode skills directly in its slash menu, users may89call those mode skills directly. This `/lazyweb` skill remains the compatibility90entry point for hosts that only show one downloaded skill or where the user is91not sure which mode to use.9293## Autorouter Check (one-time, after the request is served)9495Lazyweb has an autorouter: a small, marker-delimited routing block written96into each host agent's global instruction file so design questions route to97the right Lazyweb mode without anyone invoking a skill. This skill carries a98local fallback offer for installs that never saw the setup prompt.99100AFTER completing the user's actual request — never before, and never101interrupting unrelated work — run this check at most once per session, and102only when this skill was explicitly invoked:1031041. Skip silently unless BOTH are true:105 - `~/.lazyweb/router.manifest.json` is missing or empty106 - `grep -q "^router_declined=1" ~/.lazyweb/config` finds nothing1072. Ask the user one plain question (no host-specific tool): "Want me to108 install Lazyweb's autorouter so design questions route to the right mode109 automatically? I'd run `~/.lazyweb/bin/lazyweb-router install`, which adds110 a marked routing section to your agents' global instruction files."1113. On yes: run `~/.lazyweb/bin/lazyweb-router install --all --yes` and show112 the user what was written where. On no: run113 `~/.lazyweb/bin/lazyweb-router decline`. Either way, never ask again —114 the manifest or the decline flag silences this check and the115 once-per-session server-side offer alike.116117## Search Discipline118119These rules apply to every `lazyweb_search` call in every mode:120121- **Always run at least one real search for the user's actual screen.** Example122 or connectivity queries (like "pricing page") teach the user nothing about123 their own project — follow them immediately with the screen they are building.124- **One screen, one search.** When the user is building a whole app or page,125 run one query per screen/section (onboarding, home, paywall, settings,126 checkout…) instead of a single broad query. Pass `platform` ("mobile" or127 "desktop") and `company: "<app>"` when the user names a reference product.128- **Never repeat an identical query** — results are deterministic. To see more,129 pass `offset` (e.g. `{"query":"onboarding quiz","limit":20,"offset":20}`);130 the response's `pagination.next_offset` gives the next page.131- **Read `coverage` and `warnings` on every response and obey them.** On132 `no_matches` or `low_coverage`, use the closest result anyway, strip the133 query to its core 2-6 word UI pattern, or tell the user the pattern is not134 in the library — do not rephrase the same concept in a loop. Style135 adjectives ("dark", "minimal", "editorial") are not searchable facets yet;136 drop them from the query and judge style from the returned images.137- **On a `company_not_in_library` warning**, pick one of the suggested closest138 companies or drop the company filter — do not retry other spellings of the139 same brand.140141## Tool Rules142143**Pass `skill: "lazyweb"` on every call.** Include `"skill": "lazyweb"` in the arguments of each `lazyweb_*` tool call — for example `{"operation": "list", "task_context": "first run", "skill": "lazyweb"}`. This is optional analytics metadata Lazyweb uses to understand which skills are used; never drop or change a real argument for it.144145- Always inspect the live MCP tool list before assuming optional filters or146 backend/internal aliases are available.147- The current public gateway normally exposes `lazyweb_health`,148 `lazyweb_search`, `lazyweb_find_similar`, `lazyweb_compare_image`,149 `lazyweb_list_categories`, `lazyweb_get_workflows`, `lazyweb_get_flows`,150 `lazyweb_search_ab_tests`, and `lazyweb_paywall_cta_research`. The151 full-pipeline run tools152 `paywall_design_run` / `paywall_design_check_status` (and the parallel153 `signup_design_run` / `signup_design_check_status`) are gated behind154 env flags and may also be exposed — check the live tool list.155- All current public Lazyweb MCP tools and visible workflow skills are free,156 including `lazyweb_search_ab_tests`, `lazyweb_paywall_cta_research`,157 `paywall_design_run`, and `signup_design_run` when those run tools are158 exposed by the live schema. If a tool is missing or returns no matching159 evidence, treat that as an availability or coverage issue, not a billing gate.160- Richer internal/backend surfaces may expose `lazyweb_find_experiments`,161 `lazyweb_recent_experiments`, or162 `list_companies_by_categories`; use them only when the live tool schema shows163 them.164- Pass `high_design_bar: true` only to tools whose live schema exposes it, and165 only when the user asks for premium, stronger, high-design-bar, or166 best-designed examples.167- Screenshot-bearing tools return optimized image URLs. Supabase storage-backed URLs168 are signed for 365 days. Do not request or pass screenshot IDs, and do not169 construct storage URLs from raw paths.170- `lazyweb_search_ab_tests` is mobile-only A/B test evidence. It uses171 `category` as the industry filter and forwards `product`/`company` as target172 context. Do not use them to force an exact company match or trust a173 zero-result answer caused by an exact product/company filter.174- `lazyweb_find_similar` accepts `image_url` or `image_base64` plus `mime_type`;175 it does not take a screenshot ID.176- `lazyweb_compare_image` does real image-similarity. Always send177 `image_base64` — localhost, file paths, and web-page URLs are unreachable178 from the server. When you only have a page URL or a running local app,179 capture it yourself with your client's built-in screenshot/browser tool180 (browser screenshot, Playwright, device screenshot) and pass the capture as181 `image_base64`. Failed calls return a `how_to_fix` field — follow it instead182 of retrying the same input.