一键导入
project-match
Detect the local project's brand URL and match it to an existing vibiz, or create one if none matches.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Detect the local project's brand URL and match it to an existing vibiz, or create one if none matches.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | project-match |
| description | Detect the local project's brand URL and match it to an existing vibiz, or create one if none matches. |
Whenever the user asks for a Vibiz tool that needs a target.vibiz, you should match the current local project against their existing vibizes — and only ask them which one to use if matching is ambiguous. This skill describes how.
Try in order, stop at the first one that yields a public, parseable URL:
package.json — read the homepage field. (Skip repository — that's a git URL, not a brand URL.)pyproject.toml — [project].urls.Homepage or [tool.poetry].homepage.Cargo.toml — [package].homepage.README.md / README.mdx — first 100 lines, find the first link of the form https?://<host> that is NOT:
shields.io, img.shields.io, badge.fury.io, flat.badgen.net)readthedocs.io, gitbook.com, docs.rs)[![ (markdown badge image)git remote get-url origin. If it's a GitHub repo, do NOT use it as the brand URL; instead ask the user "what's the public website for this project?" (Enter to skip.)Refuse private/local URLs: localhost, 127.0.0.1, *.local, *.internal, *.test. Tell the user the brand kit needs a public website.
Both sides (the detected URL + each vibiz's websiteUrl) get the same treatment:
1. lowercase
2. strip leading 'http://' or 'https://'
3. strip leading 'www.'
4. strip trailing '/'
5. take the host + first path segment only (drop query strings, hashes, deep paths)
Examples:
https://www.Stripe.com/ → stripe.comhttps://stripe.com/payments → stripe.com (we keep just the host for top-level brand sites)https://shop.example.com → shop.example.com (subdomains DO matter — different brand)list_vibizCall list_vibiz (returns [{ name, slug, websiteUrl, logoUrl }]). Apply the same normalization to each vibiz's websiteUrl. Compare strings.
Outcomes:
Exactly one match → tell the user "Matched this project to vibiz " and use target: { vibiz: "<slug>" } from then on. Do NOT ask them to pick.
Multiple matches (rare — same URL across vibizes) → list them and ask which one.
Zero matches → the project hasn't been onboarded. Offer:
I don't see a vibiz for
<url>yet. Want me to create one? (yes / no / use a different vibiz)
If yes → call vibiz_create_from_url({ websiteUrl }) (see /vibiz:onboard for the full flow).
Once you've matched, remember the slug for the rest of the session — don't re-detect on every command. (You can't write to a file from a slash command, but you can keep it in conversation context: state "using vibiz <slug> for this session" once, and reference it on later calls.)
name (free-form) — match on websiteUrl (canonical). Names collide; URLs don't.