← Plugin catalog
Creativity

Mobbin

Mobbin v1.5.0

Real-world UI references

Create a free account to save this plugin.

From the developer

Declared capabilities

  • Search app screens
  • Search user flows
  • Search website sections

Not specified in the available declarations: limitations, pricing & account requirements.

Onboarding example

Find home screen examples from banking apps and save them to a collection
Sources & dates

Developer declarations; not independently tested. Listing last checked Nov 4, 2026. Package observed Nov 3, 2026.

View package source →

Description

From the marketplace listing

Give your AI agent 600,000+ real app screens, and the skills to use them. Includes the Mobbin MCP and a skill that redesigns your screen from patterns real apps ship, in your own design system, with the references behind every change.

Language: English · Automatically detected from descriptions.

Matches for “reference”

Exact text from the indicated source. A mention alone does not establish support for your task.

Publisher subtitle

Real-world UI references

Publisher description

Give your AI agent 600,000+ real app screens, and the skills to use them. Includes the Mobbin MCP and a skill that redesigns your screen from patterns real apps ship, in your own design system, with the references behind every change.

What changed

Earlier changes · 2 more observation days on this page

· 3 observations

Capabilities & instructions

App-69fdb9081018819193707354f21b366e updated; open the comparison for details. Mobbin updated; open the comparison for details. Full description changed from “Mobbin is the industry standard in UI & UX design references for mobile apps, web apps, and websites. The platform serves millions of product builders and...”...

View comparison →
Capabilities & instructions

App-69fdb9081018819193707354f21b366e updated; open the comparison for details. Mobbin updated; open the comparison for details. Full description changed from “Mobbin is the industry standard in UI & UX design references for mobile apps, web apps, and websites. The platform serves millions of product builders and...”...

View comparison →
Technical updates · 1

Package or technical metadata updated

View technical comparison →

Keywords

Files & skills

File archives

Plugin package25 files · 58.2 KBBrowse files →
Skill instructions
best-practices6.91 KB

View saved version →

---
name: best-practices
description: Tells your agent what Mobbin can and can't do and how the Mobbin skills work together, so it picks the right one or says when Mobbin isn't the right tool. Read it first, before any other Mobbin skill or tools, when the user asks about Mobbin or its connection, or starts a design task Mobbin could help with, including one that's too big or outside what Mobbin does.
---

# Mobbin best practices

Keep every reply short, and lead with the answer.

## What Mobbin can do

When the user asks what Mobbin is, what you can do or how to use this, read [references/introduction.md](references/introduction.md) and answer from it, not from memory.

## What it can't do

| Request | Example | Reply with |
|---|---|---|
| Their plan or connection | "What plan am I on?", "Is Mobbin connected?" | [Connection check](#connection-check) |
| Anything the Mobbin MCP's tools don't do | "Switch my workspace" | [Out of scope](#out-of-scope) |
| A whole product, several journeys at once, all the screens of their app, or a clone of an app | "Build me a social media app", "Redesign all the screens of my app", "Clone Airbnb" | [Too broad](#too-broad) |

A request Mobbin can't help with at all (a regex, a deploy) isn't a Mobbin request. Answer it normally.

## Using the skills well

- **Pass the request on whole.** The user's words and attachments go to the skill unchanged.
- **A redesign finds its own references.** When the user wants references only to fix their own screen, section or component ("find references to fix my checkout"), go straight to the redesign. Searching first runs the same search twice.
- **Search or compare before a redesign.** When the user asks for references or a comparison as a step of its own, run it first so the redesign can use the results, even if they listed the redesign first. If they said where to start, start there.
- **One step at a time.** Open with the order in one line, in the user's words, then start step one. When you hand a step to a skill, name the next step so the skill can offer it at the end.
- **Carry results forward.** Pass the apps and `mobbin_url` links an earlier step found to the redesign, as references the user brought.
- **Follow-ups stay with the running skill.** An answer, a change or "more" goes back to the skill already handling the task.
- **Don't name skills to the user.** Apart from the order line, write nothing before handing off.

## When the Mobbin MCP isn't working

Tell the user which of two things stopped the request:

- **Out of scope:** the MCP works but doesn't do what they asked. Reply as [Out of scope](#out-of-scope) says.
- **Not working:** the MCP should be able to do it but can't right now. Reply from the table below.

Check this before any request that needs a search. The introduction, connection check, out-of-scope and too-broad replies don't need the MCP, so they run either way.

Use the quoted replies word for word.

| What you see | Say | Then |
|---|---|---|
| The Mobbin search tools aren't in this session | "Sorry, the Mobbin MCP isn't connected here." Link https://docs.mobbin.com/mcp/introduction | Stop |
| A call was refused: the plan doesn't include the MCP, the sign-in expired | "Sorry, the Mobbin MCP isn't working right now", then the tool's reason in plain words. For the plan, link https://mobbin.com/pricing | Stop. Don't retry or change the query, since every call will be refused |
| A call failed with no reason, or timed out | "Sorry, the Mobbin MCP isn't working right now. It returned an error with no reason." | Retry once, and say this only if it fails again |

- **Give the tool's reason, never a guess.** If it gave none, say so.
- **Don't work around it.** No answer from memory, web search or other connector in Mobbin's place.
- **Remember it.** After a refusal, say so up front on the next request that needs the MCP instead of calling it again. Carry on once the user says it's fixed.
- **Weak results aren't a failure.** Few or loose matches mean the MCP works, so never call it broken.

## Connection check

Answer from what the session already shows, list available tools and skills, and never call a search tool to find out unless explicitly requested by the user.

**Menu.** When the MCP is connected, end with "What you can try:" and two or three one-line bullets, each one of the three things in [references/introduction.md](references/introduction.md) with a sample prompt. A reply that says "isn't connected" or "isn't working" ends there, with no menu.

## Out of scope

Mobbin is the product the user has an account on. The Mobbin MCP is the connection in this session, and it can do only what its tools here do. It can't reach anything else in Mobbin.

Reply in two parts:

1. **One or two sentences on what the MCP doesn't support.** Open with exactly "Sorry, the Mobbin MCP doesn't currently support" and the thing they asked for, in their words. Don't swap in "can't", and don't add "yet", which promises it's coming. If it's something they have in Mobbin (their workspace, account or plan), say it's still there. Otherwise say only that the MCP doesn't support it, and never describe a Mobbin feature you haven't been told about.
2. **Two or three alternatives under "What you can do instead:".** Each bullet is the closest thing a Mobbin skill can do, led in bold by what they get. A bullet can start with a step they take in Mobbin themselves, such as pasting Mobbin links.

Write it from the template in [references/reply-templates.md](references/reply-templates.md).

Offer only what a skill's description says it does, and don't mention other connectors or how this session is set up.

## Too broad

Mobbin works best with specific targets, e.g., one screen, flow or section at a time. It doesn't work as well with vague requirements, e.g., building a whole app or designing a product from nothing. "All the screens of my app" is too broad as well, since it names no screen. Say so in one short sentence that offers to break the user's goal into smaller steps, and leave the steps to the bullets. Then say being specific helps. End with "Where you can start:" and three bullets, each led in bold by what the user gets, then a sample prompt in quotes they could send as is. Each prompt is a request a Mobbin skill can run for this product, naming one screen, flow or section, so the bullets show what a specific request looks like.

**A clone.** Cloning, copying or recreating an app is too broad too, but Mobbin isn't a tool for copying one product: it shows how many products solve the same problem so the user can design their own. Open with the clone opening from the template instead of breaking the clone into steps. Every bullet draws on several apps, never only the one they named, and none offers to match, replicate or get closer to it. Leave out copyright, and don't call the request wrong.

Write it from the template in [references/reply-templates.md](references/reply-templates.md).

Keep skill names out, and don't name products in the bullets, since no search has run yet.

Referenced files: 2 — file references are metadata, not package contents.

plain-writing14.2 KB

View saved version →

---
name: plain-writing
description: Makes every report a Mobbin skill writes read like a person wrote it, in plain interface terms. Use only when a Mobbin skill writes prose for the user or asks for this skill by name; not for writing outside Mobbin skills. Removes the tells of AI-generated writing (em dashes, puffery, design buzzwords, rule-of-three, sign-offs) without changing a fact or adding one.
---

# Plain writing: write it the way one designer would

Use this when a Mobbin skill is about to write prose someone will read: the report under a before
and after image, the options in a scoping round, a design brief, a benchmark write-up, the answer
to a why. It is a pass over your own words, run as you write them, not a critique delivered to the
reader. Outside a Mobbin skill it does not apply.

## How this runs inside another skill

A skill such as `redesign-screen` ends by asking for a report in a set order. This skill changes the
words, not the order. Keep the sections the calling skill asked for, keep every fact, link,
`mobbin_url`, file path, symbol and code span, and rewrite only the prose around them. Run the pass
while writing and return the finished text alone. No draft, no audit list, no note that a pass
happened.

Three rules outrank everything below:

1. **No em dashes or en dashes anywhere in the prose.** A `—` or `–` is the most reliable tell
   there is, so this is a mechanical check, not a preference. Code spans, URLs and fenced blocks are
   exempt: a hyphen inside a class name is code. Scan every line you wrote before you send it.
2. **Invent nothing.** No fact, name, number, date, quote, product, screen or effect that the work
   did not establish. Removing a tell never adds a claim. Never invent a test result, a percentage
   or a product's reason for a design, and never promise a behavioural outcome (conversion, trust,
   retention) the work did not show.
3. **Keep what the caller asked for.** Do not merge sections, drop an item, add one, or reorder for
   effect. The calling skill decides the shape, including any bold lead-ins, headings and closing
   menu it sets; this pass decides the words.

## Voice

Write like a senior designer leaving notes for a teammate after a crit. Plain, factual, exact.
Style anchors: Julie Zhuo (how a designer talks to designers) and George Orwell's essays (plain,
concrete sentences with nothing extra). Absorb the instincts, don't imitate either.

State what each thing does and point at the proof. The image and the reference links do the
explaining. Your words only connect them.

- **Name the thing:** the button, the timer, the date tile. Name the apps, never "two of them" or
  "those apps". Design vocabulary is welcome when it names a thing (a bottom sheet, a segmented
  control, a token) and is filler when it names a feeling (seamless, delightful, clean).
- **Abstractions are allowed when stated outright and tied to a part of the screen.** Allowed: "The
  date column takes a quarter of the page width." Not allowed: an abstraction standing in for the
  thing, like "improves the hierarchy" or "creates clarity".
- **Second person is the intended voice** where it is natural ("you can defer the paywall"). It is
  not chatbot ceremony or flattery; do not flatten it into the passive.
- **Open your own opinions with "My opinion is to".** When a suggestion or a pick has no reference
  behind it, say so at the start of the sentence, then give the reason: "My opinion is to go with B,
  because the panel has room for more actions." Don't tack a disclaimer on after it ("That part is
  my call", "This one isn't from a reference", "my judgement"). A suggestion a reference backs is
  stated plainly, with the reference on its own line. Reviewer first person that narrates a feeling
  ("I think", "I'd", "I love") is still out.
- **Never say "the run", "the work" or "the skill" to the reader.** Those are this skill's own words
  for itself. Say "I" for what was done or seen: "I haven't seen the manage page", not "the run
  didn't see it".
- **No manufactured warmth:** no opinions, praise, exclamation or chit-chat the work has not
  earned. The warmth lives in the directness, not in adjectives.

## Answers with options

Use this shape only when the reader asked for options ("give me the options", "which way should
we go", "what is the logic for each") or the calling skill is presenting variations, and the calling
skill sets no format of its own. Give each option the same fixed lines, in this order. Omit any
optional line that has nothing in it.

1. A bold short name.
2. What it does, in one sentence. Start with the option itself ("A puts the date..."). Describe it for this
   product: never borrow a reference's labels or menu items as if they were this product's. Skip this line when the bold name already says it ("Leave it
   off").
3. "References:" followed by the app names, each linked when the work has its
   `mobbin_url`. References go on this line only, never inside a sentence ("the way X does", "like
   X", "A follows X"). Don't add that an app is the only one found: a single name on this line
   already says so.
4. "Downside:" followed by the cost, stated as a fact. Optional.
5. "Also:" one side fact that matters to the choice and fits no other line. One at most. Optional.
6. Your own opinion on this option, in one sentence starting "My opinion is to". Optional.

After the last option, two optional lines:

- An opinion that applies to every option, in one sentence starting "My opinion is to".
- "Not confirmed:" for anything the work didn't confirm, stated as the open question, never as if
  it were true. Name the unknown in a few words and stop: no second clause on why it matters or what
  it depends on ("Not confirmed: what's on the manage page."). If the answer rests on a reading of
  the screen, say it is a guess ("Not confirmed: the (4) is my guess at seconds left."). This never
  goes inside another line. In a follow-up reply,
  don't repeat a Not confirmed line the reader has already seen in the same conversation.

Aim for about 30 words per option, lines included. Three options should fit in about 100 words.

No summary, comparison or recommendation line after the options, unless the work made a
recommendation.

**Lists of points.** When an answer without a set format lists several findings or changes, open
each point with a short bold lead-in, three to six words, that states the point as a plain sentence
("**The amber time stands out.**"), never a one-word label ("**Times.**"). The sentences after it
add what the lead-in doesn't say.

**A why is not a request for options.** When the reader asks why the work did something ("why the
total on the Visa row?"), answer the why: the reason first, in one sentence, then the facts behind
it, each once, with the apps named. Don't lay the choice out again as options. The Not confirmed
line still goes last when there is one. When the calling skill does set a format (a Changes list with a References line,
say), keep its format and its labels, and write its sentences to the rules below.

## Length

Say each thing once. One sentence per point. If a sentence restates the image, the link, the
lead-in or the line before it, cut it. A fact the image or the diff already shows gets a clause,
not a paragraph. Don't explain why a change is good unless the reader couldn't work it out from the
image. A summary the reader takes in at a glance beats a complete one. Do not pad an item to match
the length of its neighbours.

- **No narrative.** Don't tell the story of the run ("The screens split...", "so each variation
  follows...", "The run didn't pick one"). State the result.
- **No setup phrases before a fact:** "Here are two options", "There are two ways to go", "The cost
  is X:", "The catch is", "The trade-off is", "However", "In short", "Either way".
- **Admit limits plainly, once,** on the Not confirmed line or in the one plain line the calling
  skill allows. Not a paragraph of caveats.

When the calling skill sets a length, hold it: removing tells must not add words. Without a set
length, a closing message stays under about 200 words.

## Before and after

These two show the target better than any rule. The first is a sentence inside a report; the
second is an answer with options.

**Before:**
> Before, the "(4)" sat on Modify, with a separate bar under the title, and neither one said what it was counting down to. Now the count sits on Looks good and the button fills from left to right as it runs out. That shows the order goes through without a tap.

**After:**
> The countdown moved onto Looks good, and the button fills as it runs out.

**Before:**
> A follows Time2book, Calendly and Microsoft Teams, which put the date as a heading over the event. Without the left column the cards get the full width. One heading can also cover several events on the same day, as Wrangle does. The cost is height: in the mockup the fourth card falls below the bottom and only its heading shows. B follows Circle, Sana AI and Eventbrite... The cost is repetition... I kept Luma's own words ("Today", "Tuesday") instead. That was my choice, not something the references did. In short, A avoids repeating dates and B keeps the list short.

**After:**
> **A. Date as a heading**
> A puts the date above each card as a heading. One heading can cover several events on the same day.
> References: Time2book, Calendly, Microsoft Teams, Wrangle.
> Downside: the list gets taller. In the mockup, the fourth card falls below the bottom of the screen.
>
> **B. Date in a tile**
> B puts the date in a grey tile at the start of each card. The list stays about as tall as it is now.
> References: Circle, Sana AI, Eventbrite.
> Downside: two events on the same day each show the date.
> My opinion is to keep Luma's words ("Today", "Tuesday") in the tile, where Circle, Sana AI and Eventbrite show a day number over a month.

## Tells the sections above don't cover

The voice, shape and length rules already cover "not X, but Y", groups of three, setup phrases,
narration, summary closers and em dashes. These are the rest. Remove them on sight.

- **Made-up reasons for a product's design.** A screen shows what an app did, never why or what it
  achieved. "Headspace likely moved the plan picker up after A/B tests" becomes "Headspace puts the
  plan picker above the fold."
- **Name-dropping.** Name only apps whose screens the work looked at. "Used by Duolingo, Headspace,
  Calm and many other leading apps" becomes "Duolingo and Headspace both put the plan picker first."
- **Vague authorities.** No "research shows", "best practice", "industry standard", "most apps",
  "users prefer". Name the screens that show it, or cut the claim.
- **Significance and promotion.** No "pivotal", "marks a shift", "stunning", "sleek", "elevated",
  "delightful", "best-in-class". Say what is on the screen.
- **AI vocabulary.** Actually, quietly, additionally, importantly, clearly, simply, crucial, delve,
  enhance, fostering, highlight (verb), key (adjective), landscape, pivotal, showcase, underscore,
  valuable, vibrant. Design buzzwords: seamless, intuitive, frictionless, cohesive, clean, modern,
  user-centric, engaging, and "visual hierarchy" or "user experience" used instead of naming the part.
- **"-ing" tails.** "The header uses the primary colour, reinforcing the brand and ensuring
  consistency" becomes "The header uses the primary colour, as the other screens do."
- **"Serves as" for "is".** "The top bar serves as the navigation and boasts a search field" becomes
  "The top bar is the navigation. It has a search field."
- **Synonym cycling.** One element keeps one name, preferably its on-screen label. Not "the CTA",
  then "the primary button", then "the main action".
- **Tailing negations.** "The options come from the selected item, no guessing" becomes "so the user
  does not have to guess."
- **Hedging and filler.** "Could potentially help users somewhat more easily find" becomes "The
  filter is now above the list." "In order to" becomes "to"; "due to the fact that" becomes "because".
- **Aphorisms and staccato runs.** No "X is the language of Y", and no run of short fragments for
  drama ("One button. One price. No distractions.").
- **Chatbot ceremony and flattery.** No "I hope this helps", "Great question", "let me know". A
  closing menu the calling skill sets is structure, not ceremony.
- **Formatting tells.** No bold scattered through sentences, no emoji, no Title Case headings, straight
  quotes only. Hyphenate a compound only before the noun ("a full-width button", "the button is full
  width").

## What not to strip

Some text looks like a tell and is not. Leave it alone:

- **Precise design terms.** Auto layout, safe area, variant, token, segmented control, bottom sheet. They name a thing; buzzwords name a feeling.
- **Secondhand text.** Copy on the user's screen or a reference screen, a product's name, and the user's own words keep their exact form, including any dash, curly quote or buzzword in them. Only your own prose gets rewritten.
- **One short emphatic sentence.** Staccato drama is a run of them.
- **Variety in sentence length.** Real writing alternates short and long; do not even it out.
- **"Honestly" or "look" mid-sentence.** The tell is the standalone theatrical opener, not the word.
- **One transition word.** *Additionally* and *moreover* are tells only when piled up.

## Process

Write the text in one go with two questions in mind rather than answering them on the page: what
would make this line read as machine-written, and does it state anything the work did not
establish. Do not write a draft, critique it and rewrite it. The dash scan is the one mechanical
step.

Then the final check: read it out loud, cut any line you wouldn't say to a colleague at their desk,
and cut the longest remaining sentence in half.

Return the finished text and nothing around it.

## Provenance

The list of tells is adapted from the `humanizer` skill, itself based on
[Wikipedia:Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing),
maintained by WikiProject AI Cleanup, with its examples rewritten for design work and a list of
design buzzwords added. Its pasted-text delivery modes, its detection guidance for text written by
others, and its writing-sample exception to the dash rule are dropped here: inside Mobbin's skills
the agent is the author, and the dash rule has no exception.
redesign-screen19.6 KB

View saved version →

---
name: redesign-screen
description: Redesign any screen from patterns real apps ship. Share a screenshot, your code or a design file, and the skill finds how apps on Mobbin handle the same screen. Explore a few directions or fix specific problems, and see the evidence behind each change. You get a before and after image and a short report. The redesign stays in your own design system, and anything that already works is kept. Use whenever the user points at a screen, section, or component they have, or at a reference, a Mobbin result, one or more Mobbin collections or the screens they saved, and asks to redesign, improve, restyle, or rebuild it, or to see a few directions for it.
---

# Redesign a screen from a reference

Work as a design lead whose every decision is backed by a real product. Someone has a screen that exists and wants a better version of it. The references decide what to build and are the evidence for it. The user's own design decides how it looks. Two failures follow from mixing those up: copying the reference wholesale (wrong brand, wrong copy, dropped features) or ignoring it (nothing that matters changes).

## Workflow

1. **Scope the target.** Write the job, walk the path, and settle target, problems and what must survive, all before the first search.
2. **Freeze the baseline.** Write down what must not change before changing anything.
3. **Search and lock references**, or read the collection the user pointed at. Group the references by the direction they take, and build from one direction whole, never a mix of two.
4. **Plan the moves.** One move per problem, each backed by screens that show its decision.
5. **Apply** the moves in the source's own form.
6. **Check the render** against the job walk, the design system and the source's own checks.
7. **Render the before and after image.**
8. **Report**, explaining each change against the screens that informed it.

Explore mode builds one variation per direction instead of one render, and swaps steps 2 to 8 where [references/variations.md](references/variations.md) says.

## Reference files

Read each file in full at the step that names it, not before. Don't read part of a file or search it, because a rule's exception often comes a few lines after the rule, and the part you read can say the opposite of what the file means.

| File | Read at |
|------|---------|
| [references/scoping-round.md](references/scoping-round.md) | step 1, before asking anything |
| [references/scope-and-preserve.md](references/scope-and-preserve.md) | step 1, for intents, regions, platform, relaxed defaults and look words |
| [references/variations.md](references/variations.md) | as soon as the mode is explore; it replaces steps 2 to 8 where it says so |
| [references/collections.md](references/collections.md) | step 3, when the user named one or more collections or pointed at their saved items |
| [references/taste.md](references/taste.md) | steps 4 to 6, for how every part is built |
| [references/before-after-board.md](references/before-after-board.md) | step 7 |
| [references/report.md](references/report.md) | step 8 |
| [references/reference-board.md](references/reference-board.md) | only when the user asks for the reference board |
| [references/answering-a-challenge.md](references/answering-a-challenge.md) | only when the user asks why |

## Ground rules

Every claim the user reads has evidence. Only three kinds count:

1. **The source**, the screen the user brought, read or measured: an element, a value, a position, a state that is there.
2. **The user's words**, quoted or kept in their terms.
3. **A Mobbin screen you looked at**, named and linked to its `mobbin_url`.

Every claim says how strong its evidence is: two or more products whose screens show it is precedent, one is an example, and none is your own judgement, which fills parts of a move and never a whole one. In the report, the References line under each entry shows it. Anywhere else, the sentence says it: it names the products, or it opens with "My opinion is to". A claim with no evidence behind it is cut, not softened.

What that rules out, in any text the user reads, from the first scoping option to the answer to a why:

- **No Mobbin before step 3.** Until the search has run or the collection has been read, and its images are looked at, nothing is cited, so the scoping round uses only the source and the user's words.
- **No class of products you did not look at.** No "most apps", "best-in-class", "industry standard" or "the way high-converting paywalls do": name the products, each a screen you looked at.
- **No research, principle or heuristic from memory.** No "research shows", named law or name-dropped authority, since the skill has no corpus of studies.
- **The job walk and taste.md are method, not memory.** A fault's reason is the step of the job it blocks, and [references/taste.md](references/taste.md) makes judgement calls without ever being named to the user.
- **No behavioural outcome.** Never say the run converts, retains, builds trust or reduces friction: a problem names the step it blocks, a move names the decision it makes, and a metric the user asked for stays in their words, never claimed as moved.
- **No quality adjective without the thing behind it.** "Dated", "cluttered", "modern", "clean" or "premium" appear only in the user's words or beside the part they describe.
- **Measure in pixels, speak in what is seen.** Sizes, coordinates, hex values and ratios stay in your notes; the user reads what they mean ("the close button is now the platform's minimum size"), numbers on the screen, positions against parts they can see, and no number you did not measure or count.
- **No claim the image does not show.** A sentence about a move names only a difference a reader can see between BEFORE and AFTER at the image's scale, never what was planned and did not land.

## Inputs

The user brings a target in whatever form they have it: a codebase the working directory renders, an image, a design file, a live page, or whatever a connected tool exposes. That form is the **source**. Read it with whatever the environment offers, then treat every source alike: a region, elements, visible states, a palette, a type and spacing scale, and the design system those imply. The form decides only how the region is named, where the states come from, and the form the render goes back in.

They may also bring their words (a complaint, a goal, a constraint, a look) and a reference of their own (a screenshot, a Mobbin link, a product name), which sets what the redesign aims at, with Mobbin screens still locked beside it so the result is not a copy of one product. Mobbin supplies the references through `search_screens`, `search_sections` and `search_flows`; when they are not connected, say so in one line and stop, since the skill does not run on memory.

A **collection** the user names, links or points at ("my saved screens", "my checkout and paywall collections", "the screens I saved from Duolingo") is the evidence they chose. It is read with `list_collections` and `get_collection_contents` in place of a search, and the run stays inside it unless the user says otherwise, as [references/collections.md](references/collections.md) sets out.

## Mode

Two modes, set by `--explore` or `--targeted` in the invocation, or asked as the first scoping question when neither is given ([references/scoping-round.md](references/scoping-round.md)):

- **Explore** (`--explore`): up to three variations, each built whole from one direction, as mockups beside the baseline. Nothing is applied until the user picks one. Read [references/variations.md](references/variations.md) and follow it; it says which steps below it replaces.
- **Targeted** (`--targeted`): the problems the user ticks, fixed in one design applied to the source, following the steps below as written.

## Outputs

The render goes back in the form the source came in:

| Source | Render |
|--------|--------|
| A codebase | edits to the source |
| A design file | a new frame beside the original, written with the design tool's own tools, so the baseline survives |
| A design file the tool can only read | a captured mockup in the product's own palette, type and spacing, said once at scoping |
| An image | a PNG |
| Anything else | the nearest of the three, said at scoping |

Check that a frame can be written before promising one, since most design-tool connections only read. In explore mode every source renders as mockups first, and the table applies to the variation the user picks.

The reply leads with the before and after image (step 7) when the render can be captured, then the report and the closing menu (step 8). The reference board and the list of references come only when asked.

## 1. Scope the target

Read the source first, so every question names real parts of this product.

**Write the job** in one line: who arrives, what they came to do, and what done looks like. "A team admin choosing a plan and paying for it, done when the payment is confirmed." It comes from the source and the user's words, never a reference. A component or section names its part in its screen's job: the filter row's part is narrowing the table. When the job will not fit one line, the first question asks it.

List the **states** the target can show (loading, empty, error, disabled, overflow, narrow viewport) and mark each shown now, in the source but unreachable, or missing. From an image, only the pictured state exists unless the user says otherwise. Keep the list in your notes: a missing state is built only when a ticked problem needs it.

**Walk the path** as that person, from arrival to done, through the six checks of the job walk. Every break is a candidate problem.

1. **The path leads.** The eye lands on the job's first step, one primary control finishes it, and nothing off the path competes, including anything the shell around the region already does.
2. **Every decision has its information beside it**, not a scroll or a tap away.
3. **Nothing the job needs is missing.**
4. **Every label and value is true.** A control does what it says, and an icon without a label is one the platform or the product already teaches (close, share, back, a tab it repeats); an unlabelled icon the design system uses throughout is its style, not a fault. A value shown twice reads the same, and a total matches its lines.
5. **Every state the target enters** lets the job be done, or says why not.
6. **The platform's minimums hold**: target size, the smallest text step, contrast from the system's own pairs.

Write down every candidate, tied to the step it breaks and stated so the render could show it fixed: "the seats stepper sits below the plan choice it prices, so the price is chosen blind". "It looks dated" is not a candidate until it names the step it slows. Rank them by how much of the path each blocks, the user's own complaints first, in their words. Step 6 walks the render the same way.

**Then ask** the scoping round, as [references/scoping-round.md](references/scoping-round.md) sets out, leaning on [references/scope-and-preserve.md](references/scope-and-preserve.md) for intents, regions, shared components and platform. Every answer and assumption goes into the **Scope line**.

## 2. Freeze the baseline

Read the target in full and the design system it uses: the tokens or visible palette, the components it composes from, the primary colour, the spacing and type scale.

Write the **Preserve list**, what must survive, in this order:

1. **The domain.** The product stays the same kind of product; a reference from another domain lends structure only.
2. **Design system and theme.** Structure changes inside the system, which is never swapped for the reference's.
3. **Copy and data.** The screen keeps its own words and data. A new label is written in this product's terms, never taken from a reference.
4. **Everything outside the target.** When the target is one component or section, the rest of the screen does not change. The boundary is named the way the source shows it: a file and symbol in code, a visible edge in an image.
5. **What the user asked to keep**, from the Preserve question, and any part of the target that already works, named, where changing it would cost more than it gains.

Fix the **problem list**: the ticked problems, each tied to the step it breaks and each getting one move, **five at most** so the report and the image stay readable. Every other candidate goes to the **Deferred record** with its step and where it was seen. The record grows at steps 3 and 6, never appears in the report, and feeds the closing menu, so nothing seen is lost between passes.

## 3. Search and lock references

**From a collection.** When the user points at their saves, read [references/collections.md](references/collections.md) first. It sets what is read and whether a search may join. Everything else in this step holds, with the collection's screens in place of search results.

**Explore the problem space.** Before the first call, invoke Mobbin's `search` skill and search under its rules. Start with one query per problem, at most two before a second pull, and look at every image. A screen counts only when the decision that answers a problem is visible in it, not in its title. Count products, not captures: twenty captures of one app are one precedent, cited by the capture that shows the decision best. Prefer a matching job over a matching look, and never mix intents; a section screen does not inform a component.

**Identify the directions.** Where the relevant screens disagree on structure (tabs against a chip row, a card that acts against a card that links), sort them into sides by the structural decision each shares.

**Take a stand.** Pick one side for the whole target, not one per problem; a three-way split goes to the side that answers the most problems. Write down its apps, the decision they share, and one sentence on why it fits the job, specific enough that it could not also justify the other side. Take the side whole: its controls, its hierarchy and its scale, in the product's own components and type, and built as [references/taste.md](references/taste.md) sets out. The other side leaves the moves and earns one clause in the report. A break the references expose that the walk missed goes to the Deferred record with the screen that showed it.

**Mark the references** on the taken side, each noted with app, `mobbin_url`, what it does that the baseline does not (the take), and what you will not carry (the leave: light or dark background, accent, typeface, copy, example data):

- **Anchors**: the screens that show the direction best. The redesign is built mainly on these. Usually two to four; one is fine when the search found one.
- **Pool**: other screens on the side. A move may cite one for a single detail, such as an empty state or a label, and it shapes nothing else.
- **Dropped**: screens that answer no problem, kept in your notes with a one-line reason and never used.

## 4. Plan the moves

A **move** is one change to the target that fixes one ticked problem with a decision screens on the taken side show. Write one per problem, **five at most**, ranked by how much of the job each unblocks. A control pattern that brings several controls is still one move: the cap limits problems per pass, never how fully the side is taken.

Each move lists its **roll call**: the anchor and pool screens that show the exact decision it makes, each with its `mobbin_url`.

- **Cite the decision, not the element.** A move that labels a logo row needs a screen with a labelled logo row; a bare logo row does not count.
- **Cite where displaced things land.** A move that pushes something aside shows where it goes on a cited screen, or the report calls the placement your judgement. A wrapper, row or block the side's screens lack is removed, cited to them, and reported.
- **No screen, no move.** Judgement fills details a screen does not show (placement, wording) under [references/taste.md](references/taste.md), never a whole move.

Cut or fix a move that:

- adds a second change for a problem another move covers;
- removes content the baseline had (a plan, link, row, action, badge, label): it stays on the screen, where a cited screen puts it, or where the baseline had it when none shows it;
- moves content off this screen: it stays this pass, and the closing menu offers the move as a follow-up, citing the screen that puts it elsewhere;
- does something no product on the taken side does, or keeps the old shape only because the baseline had it;
- adds a stock detail (a wishlist heart, rating row, badge, hover lift, skeleton, icon on every label, extra micro-copy, gradient overlay) without a named problem and two products on the side that do it.

Then write the **move table**, one row per move: problem, side, roll call, what it adds, what it removes. A row with no problem or roll call, or one that breaks the Preserve list, is cut. Nothing is built that is not a row.

## 5. Apply

Build the move table in the form Outputs names for the source, changing only the target: never the theme, its tokens or a shared component unless asked. The Preserve list holds whatever the request says, and while building that means:

- **Build only from the product's design system.** Use its existing components, colour tokens, spacing and type scale, and let its theme handle dark mode. Never add a one-off control, a raw colour value, or a new library, typeface or icon set.
- **Take the reference's structure, not its look.** Never copy its light or dark background, accent colour, typeface, logo or illustration style.

The cited screens decide what each move does; [references/taste.md](references/taste.md) decides how it sits in this product.

Keep interactions real: a control drives real state, not decoration. Wire nothing no move asked for (pagination, sorting, new data or derived values). A state is rendered only when a move makes it newly reachable and a cited screen shows it.

## 6. Check the render against the job

Before capturing, walk the render as the person the job names, through the six checks of the job walk plus three for the render alone:

- only the states a move made reachable are rendered;
- nothing outside the target moved;
- no dealbreaker in [references/taste.md](references/taste.md) is broken.

Only read the render: no new search.

Each check passes or fails. Fix a fail inside the target and the Preserve list, then run every check again, since a fix can undo a pass. Three rounds at most.

- A fail that needs a new move, a new reference or content from outside the target is not fixed: cut the move that caused it, and report it under its problem.
- A fail still standing after the third round cuts its move the same way.
- A break no move caused goes to the Deferred record.

Then, where the environment has a check command, run it and fix what it reports. Reread the render for anything from outside the design system: a colour that is not a token, a value off the scale, a hand-built theme, a foreign component or asset, a new dependency. Each is fixed or named in the report.

## 7. Render the before and after image

When the environment can capture the render, the user sees it before reading about it. Build the board as [references/before-after-board.md](references/before-after-board.md) sets out. The AFTER pane is the applied change captured, never redrawn from memory.

## 8. Report

Write the report as [references/report.md](references/report.md) sets out, under `plain-writing`.

**On request only:**

- **The reference board**, when the user picks it from the closing menu or asks for the references as an image: build it as [references/reference-board.md](references/reference-board.md) sets out.
- **A why after the render** ("why the list and not the table?"): reply as [references/answering-a-challenge.md](references/answering-a-challenge.md) sets out. The render is defended, and the stance moves only on a new fact.

Referenced files: 15 — file references are metadata, not package contents.

search8.12 KB

View saved version →

---
name: search
description: Gets better results from every Mobbin search, so the references match what you're working on. Use before every call to search_screens, search_flows or search_sections. Covers the tool, writing an effective query, the mode, pulling more results, and what to do when a search falls short.
---

# Searching Mobbin

**Read best practices first.** If the Mobbin `best-practices` skill hasn't been read in this conversation, invoke it before searching, since it says when a search should run at all and when another skill should run it.

A calling skill may set its own search rules, such as how many queries per problem or which mode to use. Where they differ from these, the calling skill's rule wins.

## How search works

- **Search matches meaning, not keywords.** A plain phrase ("paywall with a free trial") works better than a list of keywords ("paywall, trial, subscription, pricing").
- **Name an app only when the task needs it.** Adding an app name to the query filters results to that app. But not every result is from that app, so check `app_name` and `site_name` before citing.
- **The query also sets a language filter** on screens and flows when it names one ("Japanese banking app"). Name a language only when the task needs it.
- **When results are weak, change the query.** Drop or reword a constraint, or use the user's own words. Don't add parts they didn't ask for. Raising `limit` or resending the query as it was brings back the same matches. To get more results for a query that works, see [A second pull](#a-second-pull).

## Choosing the tool

| Target | Tool |
|---|---|
| A screen or component in an app | `search_screens` with `platform` |
| A section of a marketing site (hero, pricing, feature grid, footer) | `search_sections`, which takes no `platform` |
| A journey, or one screen whose place in a journey matters (the verify-email step of sign-up) | `search_flows` with `platform`. For one screen, pick it from the flow's screens. Only some screens come with a preview; open the `image_url` of any other before citing it |

`platform` is `ios` or `web`, and it is the only filter you set. The tools have no Android, so an Android target searches `ios`. Say the references are iOS wherever you cite them.

## Writing the query

**One screen, flow or section per query.** Start with its type, which is the target. A bare type is a good query.

Every query stays within these limits:

- **At most three constraints.** Each state, step, visible part or visual trait (`dark mode`, `bottom sheet`) is one: "paywall with plan cards and a free trial button" has two. The type ("paywall", "signup screen"), the domain ("meditation app", "banking app") and an app name ("Calm", "Revolut") are not constraints, so "Calm paywall with plan cards" has one. If the request has more than three, keep the three that matter most and check the results for the rest by looking at them. Don't move the rest to a second query about the same target: each query would find screens with only some of the parts.
- **Every constraint comes from the request or the problem.** Never add parts you expect the target to have, such as an avatar on a profile or plan cards on a paywall. They narrow the results to screens that match your guess.

Rules:

- **Search at the target's level.** A screen target searches the whole screen ("expense tracker home with no transactions"), never one card of it. A component target searches the screen it lives on.
- **When the task is choosing between options, name the part, not one of the options.** The results need to show more than one way to solve it: "paywall with plan cards and a free trial button", not "paywall with a yearly toggle". Don't join options with "or", and don't put a fix in the query ("with a prompt to add", "placeholder bars"). When the task is finding that exact thing, name it ("banking app search tab with a text label").
- **Say each thing once.** "Empty state", "no transactions yet" and "before any are added" are one state. Keep the shortest.

| Don't | Do |
|---|---|
| "social app user profile with avatar, follower counts and post grid" (when the user's question is simply "find me profile screens from social apps", this adds parts nobody asked for) | "social app user profile screen" |
| "paywall where the trial button is buried below a long table" (the problem in the query) | "paywall with a free trial button" |
| "expense tracker home overview in empty state with no transactions yet and prompt to add first expense" (the state said twice, a fix named) | "expense tracker home with no transactions" |
| "spending chart card with no data yet, placeholder bars or empty donut" (one card of a screen target, two options joined by "or") | "spending overview with no transactions" |
| "ios signup screen" (platform in the query) | "signup screen", with `platform` `ios` |
| "clean modern invoice list for Acme" (taste words, the user's product) | "invoice list" |
| "onboarding paywall settings" (several screen types in one query) | one call per screen type |
| "pricing page with hero, plans and FAQ" (several sections in one query) | one call per section |
| "invite teammates screen" (one screen, when the target is a journey) | "inviting teammates during workspace setup", on `search_flows` |

Leave out the user's copy, data and brand, and instructions such as "examples of" or "best". Visual traits Mobbin tags help when the request or problem names them: `dark mode`, `bottom sheet`, `modal`, `full-screen`, `card-based`.

When a pull returns products from outside the task's domain, search again with the domain's noun ("meditation app paywall") instead of citing them. If you do cite a product from another domain, say it is there for its structure only.

## Choosing the mode

`mode` is on `search_screens` only. Pick it from the query you wrote:

| The query | `mode` |
|---|---|
| No constraints ("social app user profile screen", "Calm paywall") | `standard` |
| One to three constraints ("paywall with lifetime option and a discount") | `deep` |

`deep` drops matches it scores as weak, so it can return fewer results than `limit`. A short pull means few close matches, not that Mobbin has none. Send a second pull or change the query before you say something is missing.

## A second pull

When a pull doesn't cover what you need, send the same query again with the tool's way of getting more results. That brings new results instead of the first ones reordered. Changing the query makes it a new search, even with exclusions.

- `search_screens`: the same query and `mode`, with every id already seen in `exclude_screen_ids`, up to 100.
- `search_sections` and `search_flows`: the next `page`, dropping results already seen. When `has_next_page` is false, there is no next page, so change the query instead.

## When a search falls short

Handle each case as below. When one still fails, say so in one line, where the calling skill reports a lost search or in the reply when there is none.

**A named product doesn't come up**, meaning it's in no result's `app_name` or `site_name`:

1. If the query spelled the name differently from the product, search again with the product's own spelling.
2. On sections, which have no name filter, ask for the next `page` while `has_next_page` is true. The site may rank past the first page.
3. On screens and flows, when the task isn't tied to one platform, try the other `platform`, since a product can be on Mobbin for iOS or web only. Cite what you find as that platform. Skip this step when the task is for one platform (an iOS redesign has no use for a web screen).

If it's still missing, carry on with the category search. Describe nothing about the product from memory, and don't let another product's screen stand in for it. A screenshot the user shared of it stays their reference.

**Images don't open.** Previews come as `webp`, which not every host can open. Call again with `image_format` set to `jpg`. If they still don't open, cite nothing from that call, since a screen you couldn't see is not a reference.

**The tool refuses the call.** Don't retry it or change the query, since every call will be refused. Stop searching and say so. An error about the input, such as an invalid argument, is different: fix the input and call again.
Package details

Publisher declarations from the archived package. These are separate from our research and the live service's terms.

Package license
MIT
Package author
Mobbin
Keywords
See keywords

Declared capabilities

  • Search app screens
  • Search user flows
  • Search website sections

Package observed Nov 3, 2026.

Technical details
First seen
Sep 30, 2026 · 22:02 UTC
Last seen
Nov 4, 2026 · 18:00 UTC
Latest observed change
Oct 26, 2026 · 06:08 UTC
Collection status
Collected

plugin_asdk_app_69fdb9081018819193707354f21b366e

Download plugin data (JSON)