Operator onboarding
Skill mohitkhandelwal242/ai-pm-operator/.claude/skills/operator-onboarding
First-run setup for AI-PM Operator. Detects a fresh install, infers the user's business from the surrounding repo, asks a short set of questions, then writes business.json / .env / team.json and tailors every skill to the user's business. Use on first launch, when config is missing, or when the user says 'set up', 'onboard', 'configure', 'get started', or '/onboard'.From its SKILL.md
npx -y skills add mohitkhandelwal242/ai-pm-operator --skill operator-onboardingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.4 KB, ~2.3k tokens by cl100k_base, as published. Nobody here has run it
AI-PM Operator — Onboarding
Your job: take someone who just pulled this repo and get them from zero to a working, business-tailored AI-PM Operator in one short conversation. They could be a PM at any kind of company (B2B SaaS, consumer app, marketplace, e-commerce, fintech, dev tools…). Nothing here is specific to any one business — you learn theirs and configure accordingly.
Run this when: business.json is missing, .env is missing, the user asks to "set up / onboard / configure", or --reconfigure is passed.
Step 0 — Detect state
ls -la .env business.json team.json 2>/dev/null
- If
.envandbusiness.jsonboth exist and--reconfigurewas NOT passed → tell the user they're already set up, show/operator-onboarding --reconfigureto redo, and stop. - Otherwise continue.
Copy templates if the working files don't exist yet:
[ -f business.json ] || cp business.json.template business.json 2>/dev/null
[ -f .env ] || cp .env.example .env 2>/dev/null
Step 1 — Infer the business from the repo (do this BEFORE asking)
Scan the surrounding working directory so your questions are smart, not generic. Don't dump raw output — infer.
- Tech stack & platforms: look for
package.json,requirements.txt,go.mod,build.gradle/AndroidManifest.xml,Podfile/*.xcodeproj,composer.json,Dockerfile. - Product signals: read
README.md,package.json(name/description), landing copy,/docs, app store config — infer product name, what it does, who it's for. - Repo/Jira hints:
git remote -v, existing branches, any Jira keys in commit messages (git log --oneline -30).
Form a draft hypothesis: "Looks like you're building {product}, a {business_type} in {industry} for {target_users}, on {platforms}." You'll confirm this with the user rather than asking from scratch.
Step 1b — Show value FIRST (read-only, no credentials needed)
Before asking for any credentials, prove the Operator is worth configuring. Produce ONE quick, impressive, read-only artifact using only what's already on hand — nothing that needs Jira/Confluence/API keys:
- If there's a backlog/spec/notes file or the user can paste a few raw feature ideas → run a mini
/prioritize(RICE/ICE on what they paste) or draft a quick PRD outline for one idea. - Or, from the repo + your business hypothesis, produce a 5-bullet "first-week PM plan" tailored to their business.
- Or, if they name 2-3 competitors, give a quick positioning read.
Keep it under a minute and end with: "That's a taste — connect your tools next and I can do this against your real Jira / analytics / customers." This is the activation moment; don't skip it.
Step 2 — Confirm the business profile (ask, pre-filled with your inference)
Use AskUserQuestion for the structured choices, plain prompts for free text. Pre-fill everything you inferred — the user should mostly be confirming.
Collect (write into business.json):
- company.name, company.product_name, company.one_liner
- company.business_type — offer:
B2B SaaS,Consumer mobile/web app,Marketplace / platform,E-commerce / D2C(plus Other) - company.industry (free text, e.g. fintech, health, dev tools)
- company.revenue_model —
Subscription,Transaction/commission,Ads,One-time/licenses(plus Other) - company.target_users (free text)
- company.primary_platforms — multi-select:
web,ios,android,api/backend - company.website_domain
- metrics.north_star + metrics.key_metrics — suggest sensible defaults per business_type (e.g. SaaS → MRR, activation, churn; marketplace → GMV, liquidity, take rate; consumer app → DAU/MAU, retention, installs) and let them edit.
- competitors — ask for 2-5: name, website domain, and (if they have a mobile app) Android package / iOS id. If they don't know, leave
competitors: []— competitor skills will prompt later. - stack — confirm issue tracker (default Jira), docs (default Confluence, optional), analytics (GA4 optional), and list their main code repos if relevant.
- context_notes — one free-text field for anything else that helps (positioning, current focus, constraints).
Write business.json with the confirmed values (valid JSON, drop the _comment).
Step 3 — Connect tools (credentials → .env)
Walk through credentials, skipping anything they don't use. For each, explain what it unlocks, let them skip, AND tell them exactly where to find it (this is the #1 place people get stuck — don't make them go hunting):
- Jira (most skills):
JIRA_URL,JIRA_EMAIL,JIRA_TOKEN,JIRA_PROJECT_KEY.- Where: URL =
https://<your-company>.atlassian.net. Token = create one at https://id.atlassian.com/manage-profile/security/api-tokens ("Create API token"). Project key = the prefix on your issue IDs (e.g.PROJinPROJ-123), visible in any Jira ticket or Project settings → Details. - Validate by fetching the project; on success show the project name.
- Where: URL =
- Confluence (publishing reports, optional):
CONFLUENCE_SPACE_KEY,CONFLUENCE_PARENT_PAGE_ID,CONFLUENCE_CLOUD_ID.- Where: Space key = the short code in a Confluence URL
/wiki/spaces/<KEY>/.... Parent page id = open the page you want reports filed under; the number in its URL/pages/<ID>/.... Cloud id = visithttps://<your-company>.atlassian.net/_edge/tenant_info(it returns yourcloudId).
- Where: Space key = the short code in a Confluence URL
- Analytics (optional):
GA4_PROPERTY_ID+GOOGLE_APPLICATION_CREDENTIALS,GSC_PROPERTY_URL.- Where: GA4 property id = GA4 → Admin → Property settings (a 9-digit number). GSC url = the property as shown in Search Console (e.g.
https://acme.com). Service-account JSON: GA4 → Admin → grant the service account "Viewer".
- Where: GA4 property id = GA4 → Admin → Property settings (a 9-digit number). GSC url = the property as shown in Search Console (e.g.
- Project domain: set
PROJECT_DOMAIN=company.website_domain,PROJECT_KEY= the Jira project key.
Prefer running python3 tools/setup-wizard.py for the credential + validation flow if the user wants a guided script; otherwise write .env directly. Either way, confirm .env, business.json, and team.json are in .gitignore.
Step 4 — Team roster (team.json)
Ask for the key people they work with (name, alias, email, role, domains). 2-4 is plenty to start. Don't make them hunt for Atlassian account IDs — if Jira is configured, auto-resolve each person's atlassianId for them from their name/email:
python3 tools/jira-api.py lookup "[email protected]" # returns the accountId
Fill atlassianId from the lookup; only ask manually if the lookup finds nothing. Write team.json. If they want to skip, write an empty roster [] and note they can add people later.
Step 5 — Tailor the skills to their business
This is what makes it theirs. Using business.json:
- Competitor tracking: write
.claude/knowledge/competitor-audit/competitors.md+scan-urls.jsonfrom theircompetitorslist andbusiness_type(derive discovery search queries from their industry/space — NOT any fixed vertical). If no competitors given, leave a template and tell them/competitor-trackerwill help add some. - Metrics skills (monthly analysis, performance, weekly metrics): note their
metrics.key_metricsandrevenue_modelso reports speak their language. - Platform-specific skills: if they have no mobile app, mark
play-console-insightsas not-applicable; if no website, mark SEO/analytics skills optional.
Don't rewrite the skill files — they read business.json at runtime. Just generate the per-business data files above.
Step 5b — Register the install (disclosed analytics)
Tell the user plainly: "AI-PM Operator sends the maker a non-sensitive business summary (company/product name, business type, industry, platforms) so they can see what kinds of businesses use it — never your credentials or team data. You can opt out by setting OPERATOR_TELEMETRY=off in .env." Then register the install:
python3 tools/telemetry.py install
If they opted out, skip the call. Do not treat this as optional/hidden — it must be disclosed.
Step 6 — Readiness summary
Show a concise table: each skill → ✅ ready / ⚠️ needs {credential} / — not applicable to your business. End with 2-3 concrete first commands tailored to them, e.g.:
- "
/scrum-master— audit your {PROJECT_KEY} board" - "
/prd-generator— draft a spec for your next feature" - "
/competitor-tracker— first pulse on {their competitors}"
Confirm: "You're set up. Re-run /operator-onboarding --reconfigure any time your business or tools change."
Principles
- Infer first, ask second. Respect their time — confirm hypotheses, don't interrogate.
- Everything optional degrades gracefully. Skipped credentials just mark those skills inactive; the rest work.
- No vertical assumptions. Never hardcode an industry, competitor, or metric set — always derive from
business.json. - Local only. All config stays on their machine and gitignored.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.