{"id":24933,"plugin_id":"plugin_asdk_app_69457f8444848191918f7c00fea68076","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:18:49.884Z","digest":"3929903bf7e30ffac842e61b069a6874b5fa8e08a5c0101c40a7687fb1a3a4a7","against":5300,"payload":{"name":"project-setup","description":"Set a website up in Ubersuggest for the first time — create the project, describe the business, pick competitors, choose the topics and prompts tracked in AI answers, and select keywords to rank-track. Use when the user has no project yet, says they just signed up, asks how to get started, wants to track a site, add a domain, set up rank tracking, or start monitoring their brand in ChatGPT and other AI assistants.\n","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":667}],"skill_md_contents":"---\nname: project-setup\ndescription: >\n  Set a website up in Ubersuggest for the first time — create the project,\n  describe the business, pick competitors, choose the topics and prompts tracked\n  in AI answers, and select keywords to rank-track. Use when the user has no\n  project yet, says they just signed up, asks how to get started, wants to track\n  a site, add a domain, set up rank tracking, or start monitoring their brand in\n  ChatGPT and other AI assistants.\nargument-hint: \"<your website> [where your customers are]\"\n---\n\n# First-time project setup\n\n**Input:** `$ARGUMENTS` — the website to set up, and where its customers are. If\nthat placeholder is empty or still literal, take the website from what the user\nasked; if they named none, ask for the domain — nothing else is required.\n\nYou are setting up the thing every other Ubersuggest workflow reads from. A\nproject is what makes rankings, competitors and AI visibility trackable over\ntime; without one, every other skill can only look at public data.\n\n## Before you start\n\n1. **`auth_status`.** Setting a project up writes to the user's account, so it\n   needs login. Not logged in → ask for the connection and stop; there is no\n   version of this flow that works without it, and telling the user to create\n   the project in the web app instead just gives them the manual work.\n2. **`user_limits`.** Tells you how many projects, keywords, competitors,\n   locations and prompts the plan allows. Read it before promising anything —\n   on a free plan this is 1 project, 25 keywords, 2 competitors, 1 location and\n   10 prompts.\n3. **`list_projects`.** If the domain is already set up, say so and stop; this\n   skill is for a domain that has none. To change an existing one, use\n   `add_project_keywords`, `add_project_competitors` or `configure_brand`.\n4. **Resolve the market.** Ask where their customers are and call\n   `location_suggest` to get the real `loc_id`. Never guess one — a wrong id\n   silently tracks the wrong country, and the numbers look plausible. Default is\n   English / United States (2840) if the user does not care.\n\n## Running the setup\n\n`onboard_project` does the whole flow. It takes minutes of server work, so it\nreturns early with `done: false` and a `stage`. **Call it again, passing back\nevery field it returned** (`business_summary`, `competitors`, `topics`,\n`keywords`) — that is what stops it redoing work.\n\n```\nonboard_project({ domain, locations })\n  → stage: \"business_summary\" | \"generation\" | \"keywords\"   // keep calling\n  → stage: \"review\"                                          // STOP HERE\n  → stage: \"done\"                                            // project exists\n```\n\nWhile it works, say what it is doing — reading the site, finding competitors,\nwriting prompts, generating keywords. Do not go silent for minutes.\n\nIf it reports the analysis could not read the site, do not invent a business\nsummary. Ask the user what the business does, who it sells to, and what it\noffers, then pass `business_summary` yourself.\n\n## The review stage — never skip it\n\nWhen `stage` comes back `\"review\"`, **nothing has been created yet**, and you\nmust not call again with `confirm: true` on your own judgement. This is the one\npoint where the user decides what gets tracked.\n\nShow them, in plain language, not as raw JSON:\n\n- **The business summary** — is this actually what they do? It is what the AI\n  prompts and article generation are grounded on, so a wrong summary poisons\n  everything downstream.\n- **The competitors** — each domain, and say which ones you would question.\n  Suggested competitors are guesses from the site's content; the user knows\n  who they actually lose deals to.\n- **Each topic with its prompts** — this is the most important list on the\n  screen. The prompts *are* the measurement: visibility is defined as how often\n  the brand shows up in the answers to exactly these questions. Ask whether\n  these are how their customers would really ask.\n- **The keywords** — how many are selected and what the plan allows.\n\nThen read out anything in `notes`: lists get trimmed to the plan's limits, and\nthe user should hear what was dropped rather than discover it later.\n\nAsk what they want to change. To apply edits, call again with `confirm: true`\n**and** the corrected `competitors`, `topics` or `keywords` — what you pass wins\nover what was generated. Removing a prompt, renaming a topic or swapping a\ncompetitor is just sending the edited list.\n\nMention once, without labouring it: saving the brand spends one of the account's\nmonthly AI-visibility operations, and prompts can only be changed by replacing\nthe whole list — so fixing it now is free and fixing it later is not.\n\n## After it is done\n\nConfirm what exists now, and set expectations honestly:\n\n- Rank tracking and the first AI visibility report take **about a day** to\n  populate. Reading them immediately returns empty, and that is not a failure.\n- `site_audit` works right away and is the useful thing to do next.\n- `brand_config` shows what ended up tracked; `configure_brand` changes it.\n\nThen offer one next step, not a menu — usually the site audit, or\n`seo-action-plan` if they do not know what to do with any of it.\n\n## When things go wrong\n\n- **\"domain already exists\"** — the project is already there. `list_projects`,\n  then work with it instead of creating another.\n- **Project or brand limit reached** — the plan is full. Say which limit, and\n  that it means archiving something or upgrading. Do not retry.\n- **The project was created but the brand was not** — `notes` will say why\n  (usually no AI-visibility slot on the plan, or the monthly operations pool is\n  spent). The project is still fully usable; retry the brand later with\n  `configure_brand`.\n- **No topics were suggested** — the site gave the analyser nothing to work\n  with. Ask the user which two or three topics their customers ask about, then\n  use `industry_prompts` to write prompts for them and `configure_brand` to save.\n"},"changes":[{"path":"/included_files","type":"changed","before":[],"after":[{"relative_path":"agents/openai.yaml","size_in_bytes":667}]}],"summary":"Fields changed: 1. /included_files.","summary_kind":"deterministic","summary_metadata":{}}