Communitygithub.com

Varnan-Tech/opendirectory

輸入您的產品(網址或描述),它會自動找出全球 5 家競爭對手,抓取他們實際的定價頁面,提取每個方案與價格,然後回傳一份完整的定價情報報告:市場主流定價模式、基準價格表、功能門檻分析、競爭定位圖,以及具體的產品定價策略建議。

opendirectory 是什麼?

這項技能專為需要進行競爭對手定價研究的產品經理、創業家與開發者設計。使用者只需提供自家產品的網址或一段描述,技能便會自動執行多階段流程:首先確認環境相依性與 API 金鑰,然後根據使用者輸入(網址或描述)抓取產品頁面或使用使用者提供的文字進行產品分析,接著透過 DuckDuckGo 搜尋發現全球 5 家同領域競爭對手,並在使用者確認名單後,使用三層遞迴策略(直接抓取、Google 快取、DuckDuckGo 搜尋摘要)獲取每個競爭對手的定價頁面內容。最後,AI 會從這些內容中結構化地提取方案名稱、價格、功能限制與銷售模式,並基於這些「零幻覺」數據產出包含定價模式分析、基準價格表、功能門檻分析、競爭定位圖與具體定價建議的完整報告。此技能支援 Claude Code 與其他支援工具呼叫的 AI 代理平台,特別強調不依賴訓練知識,所有價格點與功能門檻都必須可追溯至實際抓取的頁面內容或搜尋摘要,確保分析結果的高度可信與實用性。

相容平台✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/pricing-finder

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

定價搜尋器 (Pricing Finder)

告訴它你的產品網址或描述。它會找出 5 家競爭對手,抓取它們實際的定價頁面,並回傳一份完整的定價情報報告:市場主流定價模式、基準價格表、功能門檻分析、競爭定位圖,以及具體的產品定價策略建議。

無需任何 API 金鑰。 完全依賴免費的 pip 套件即可執行。選用的 API 金鑰可提升分析品質。


零幻覺政策: 輸出中的每個價格點、方案名稱與功能門檻都必須能夠追溯到所抓取的定價頁面內容,或 DuckDuckGo 搜尋摘要。這適用於:

  • 競爭對手的價格:僅從抓取的頁面內容中逐字提取
  • 「聯絡銷售」:照實記錄,絕不估算或替換為數字
  • 方案名稱:完全複製於頁面,不重新詮釋
  • 功能列表:從頁面內容提取,不得依賴產品知識推斷
  • 定位觀察:僅根據基準價格表的數據推導

常見錯誤

代理人可能會想...為什麼這樣做不對
用估算價格填寫「聯絡銷售」永遠不要估算企業級定價。應確實記錄為「聯絡銷售」。
利用訓練知識填寫競爭對手價格每個價格都必須回溯至抓取的頁面內容或搜尋摘要。
跳過競爭對手確認步驟務必顯示發現的競爭對手並等待使用者確認。錯誤的競爭對手 = 錯誤的基準。
不參考基準數據就直接推薦價格每個價格推薦都必須引用基準價格表中的特定數字。
內容少於 500 字元時仍將頁面標記為高品質少於 500 字元表示頁面可能未被成功抓取 — 應將 data_quality 標記為 'low',並使用搜尋摘要作為備援。
在輸出中使用長破折號將所有長破折號取代為連字號。

每次執行前請先閱讀參考文件

cat references/pricing-models.md
cat references/extraction-guide.md
cat references/positioning-guide.md

步驟 1:環境檢查

echo "TAVILY_API_KEY:    ${TAVILY_API_KEY:+set (search quality enhanced)}${TAVILY_API_KEY:-not set, DuckDuckGo will be used (free)}"
echo "FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:+set (JS rendering enhanced)}${FIRECRAWL_API_KEY:-not set, requests+BS4 will be used (free)}"
echo ""
python3 -c "from ddgs import DDGS; import requests, bs4, html2text; print('Dependencies OK')" 2>/dev/null \
  || echo "ERROR: Missing dependencies. Run: pip install ddgs requests beautifulsoup4 html2text"

若缺少相依套件: 立即停止。告知使用者:「缺少 Python 相依套件。請執行以下指令安裝:pip install ddgs requests beautifulsoup4 html2text — 全部免費,無需註冊。然後再試一次。」

若僅缺少 API 金鑰: 繼續執行。DuckDuckGo 和 requests+BS4 是免費的預設選項。

產生產品縮寫:

PRODUCT_SLUG=$(python3 -c "
from urllib.parse import urlparse
import sys, re
url = 'URL_HERE'
if url.startswith('http'):
    host = urlparse(url).netloc.replace('www.', '')
    print(host.split('.')[0])
else:
    print(re.sub(r'[^a-z0-9]', '-', url[:30].lower()).strip('-'))
")
echo "Product slug: $PRODUCT_SLUG"

步驟 2:解析輸入內容

從對話中收集:

  • product_url:要抓取的網址(必要,除非使用者直接貼上描述文字)
  • geography:選擇性 — 美國 / 歐洲 / 印度 / 全球。預設:美國

若使用者僅提供貼上的描述文字(無網址): 略過步驟 3 和 4。直接跳至步驟 4(產品分析),並將貼上的文字當作 product_content。設定 page_source 為 user_description,並在 data_quality_flags 中註明。

若沒有網址也沒有描述: 詢問:「請提供您的產品或新創公司的網址?或貼上一段簡短描述:它做什麼、目標對象是誰、以及與眾不同之處。」


步驟 3:抓取產品頁面

主要方法:Firecrawl(若 FIRECRAWL_API_KEY 已設定)

curl -s -X POST https://api.firecrawl.dev/v1/scrape \
  -H "Authorization: Bearer $FIRECRAWL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "URL_HERE", "formats": ["markdown"], "onlyMainContent": true}' \
  | python3 -c "
import sys, json
d = json.load(sys.stdin)
content = d.get('data', {}).get('markdown', '') or d.get('markdown', '')
print(f'Fetched via Firecrawl: {len(content)} characters')
open('/tmp/pf-product-raw.md', 'w').write(content)
"

備援方法:requests + BS4(免費,隨時可用)

python3 << 'PYEOF'
import requests, html2text, random

USER_AGENTS = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
]
headers = {"User-Agent": random.choice(USER_AGENTS), "Accept": "text/html,application/xhtml+xml;q=0.9,*/*;q=0.8"}
resp = requests.get("URL_HERE", headers=headers, timeout=20, allow_redirects=True)
converter = html2text.HTML2Text()
converter.ignore_images = True
converter.body_width = 0
content = converter.handle(resp.text)[:8000]
print(f'Fetched via requests+BS4: {len(content)} characters')
open('/tmp/pf-product-raw.md', 'w').write(content)
PYEOF

檢查點:

python3 -c "
content = open('/tmp/pf-product-raw.md').read()
if len(content) < 200:
    print('ERROR: fewer than 200 characters fetched -- page may be JS-rendered')
else:
    print(f'Content OK: {len(content)} characters')
"

若內容少於 200 字元: 告知使用者:「產品頁面回傳的內容太少 — 該網站可能是由 JavaScript 渲染的。請貼上一段簡短描述:您的產品做什麼、目標對象是誰、以及與競爭對手有何不同。」


步驟 4:產品分析(AI)

印出頁面內容:

python3 -c "
content = open('/tmp/pf-product-raw.md').read()[:5000]
print('=== PRODUCT PAGE (first 5000 chars) ===')
print(content)
"

AI 指令: 分析上述產品頁面並提取以下資訊:

  • product_name:產品或公司名稱
  • one_line_description:它做什麼、目標對象、核心價值主張。少於 20 字。不使用行銷語言。
  • industry_taxonomy:l1(頂層:developer tools / fintech / healthtech / consumer / 等)、l2(領域:devops / payments / hr / 等)、l3(特定利基:CI/CD automation / embedded payments / async video / 等)
  • differentiators:正好 2-3 項讓此產品與眾不同的具體特點。這些將用於建議 — 請具體說明。不接受像「易於使用」這類泛泛之詞。
  • icp:buyer_persona(職位)、company_type、company_size
  • geography_bias:美國 / 歐洲 / 印度 / 全球
  • page_source:"live_page" 或 "user_description"

寫入 /tmp/pf-product-analysis.json:

python3 << 'PYEOF'
import json

analysis = {
    # 根據上述分析填入
    "product_name": "",
    "one_line_description": "",
    "industry_taxonomy": {"l1": "", "l2": "", "l3": ""},
    "differentiators": [],
    "icp": {"buyer_persona": "", "company_type": "", "company_size": ""},
    "geography_bias": "US",
    "page_source": "live_page"
}

json.dump(analysis, open('/tmp/pf-product-analysis.json', 'w'), indent=2)
print('Product analysis written.')
PYEOF

驗證:

python3 -c "
import json
a = json.load(open('/tmp/pf-product-analysis.json'))
print('Product:', a['product_name'])
print('Industry:', a['industry_taxonomy']['l1'], '>', a['industry_taxonomy']['l2'], '>', a['industry_taxonomy']['l3'])
print('Differentiators:')
for d in a['differentiators']:
    print(f'  - {d}')
"

步驟 4b:第一階段 — 競爭對手發現

ls scripts/research.py 2>/dev/null && echo "script found" || echo "ERROR: scripts/research.py not found -- cannot continue"
python3 scripts/research.py \
  --phase discover \
  --product-analysis /tmp/pf-product-analysis.json \
  --output /tmp/pf-competitors-raw.json

印出結果供 AI 審查:

python3 -c "
import json
data = json.load(open('/tmp/pf-competitors-raw.json'))
print(f'Searches run: {len(data[\"competitor_searches\"])}')
for s in data['competitor_searches']:
    print(f'\nQuery: {s[\"query\"]}')
    for r in s.get('results', [])[:6]:
        print(f'  - {r[\"title\"]} | {r[\"url\"]}')
        print(f'    {r.get(\"snippet\",\"\")[:150]}')
"

AI 指令: 閱讀上述搜尋結果。選出剛好 5 家符合以下條件的競爭對手公司:

  1. 出現在搜尋結果標題或摘要中
  2. 與被分析產品處於相同的 L3 利基市場
  3. 是實際的軟體產品(不是代理商、清單文章或評論網站)
  4. 彼此之間是不同的公司

對於每個競爭對手,請記錄:name、url、pricing_url(他們的定價頁面 — 若未在摘要中找到,則推測為 [url]/pricing)、description(從摘要中摘錄一句)、source_url。


步驟 5:競爭對手確認

python3 << 'PYEOF'
import json

analysis = json.load(open('/tmp/pf-product-analysis.json'))

# 填入:從上述搜尋結果中選出的 5 家競爭對手
candidates = [
    # {"name": str, "url": str, "pricing_url": str, "description": str, "source_url": str}
]

print(f"\nFound 5 competitors for {analysis['product_name']} in {analysis['industry_taxonomy']['l3']}:\n")
for i, c in enumerate(candidates, 1):
    print(f"  {i}. {c['name']} -- {c['description']}")
    print(f"     Product: {c['url']}")
    print(f"     Pricing: {c['pricing_url']}")

data = json.load(open('/tmp/pf-competitors-raw.json'))
data['competitor_candidates'] = candidates
json.dump(data, open('/tmp/pf-competitors-raw.json', 'w'), indent=2)
PYEOF

告知使用者:「這是我將從中獲取定價數據的 5 家競爭對手。您可以新增、移除或替換任何一家 — 或者說『看起來沒問題』以繼續。」

等待使用者確認。 若使用者編輯了清單,請相應更新候選項目。然後寫入確認後的清單:

python3 << 'PYEOF'
import json

# 填入:確認後的競爭對手清單(在使用者審閱後)
confirmed = [
    # {"name": str, "url": str, "pricing_url": str}
]

json.dump({"confirmed_competitors": confirmed}, open('/tmp/pf-competitors-confirmed.json', 'w'), indent=2)
print(f"Confirmed {len(confirmed)} competitors for pricing research.")
for c in confirmed:
    print(f"  - {c['name']} | pricing: {c['pricing_url']}")
PYEOF

步驟 6:第二階段 — 抓取定價頁面

python3 scripts/research.py \
  --phase fetch-pricing \
  --competitors /tmp/pf-competitors-confirmed.json \
  --output /tmp/pf-pricing-raw.json

這會使用三層遞迴策略抓取每個競爭對手的定價頁面:

  1. 直接抓取:requests + beautifulsoup4 + html2text
  2. Google 快取:webcache.googleusercontent.com/search?q=cache:[url]
  3. DuckDuckGo 搜尋:"[competitor]" pricing plans cost per month(摘要備援)

印出抓取摘要:

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-raw.json'))
print(f'Competitors fetched: {data[\"competitors_fetched\"]}')
print()
for r in data['results']:
    quality_label = {'high': 'GOOD', 'medium': 'OK', 'low': 'SNIPPET ONLY'}.get(r['data_quality'], r['data_quality'])
    print(f'  {r[\"name\"]:20} {r[\"source\"]:15} {r[\"content_length\"]:5} chars  [{quality_label}]')
"

若某競爭對手的 data_quality: low: 這表示定價頁面被阻擋或用 JavaScript 渲染。分析仍會使用搜尋摘要進行,但該競爭對手的信心水準將標記為較低。


步驟 7:定價提取(AI)

印出所有原始定價內容:

python3 -c "
import json
data = json.load(open('/tmp/pf-pricing-raw.json'))
for r in data['results']:
    print(f'\n=== {r[\"name\"]} (source: {r[\"source\"]}, quality: {r[\"data_quality\"]}) ===')
    print(f'Pricing URL: {r[\"pricing_url\"]}')
    print(r['content'][:4000])
    print('---')
"

AI 指令: 針對每個競爭對手,從上述內容中提取結構化的定價數據。請遵循 references/extraction-guide.md 中關於如何識別方案、價格、限制和行動呼籲按鈕的指導。

零幻覺規則:

  1. 僅從內容中逐字提取價格。如果內容中沒有某個價格,則寫 null。
  2. 將「聯絡銷售」照實記錄。絕不使用估算數字取代。
  3. data_quality: low 表示數據來自搜尋摘要 — 請提取存在的資訊,但不要用訓練知識填補缺口。
  4. 對於內容中未出現的任何欄位:請寫 "not found in page data"。
  5. 年度價格:請同時記錄每月等值金額以及年度總額。

寫入 /tmp/pf-pricing-extracted.json:

python3 << 'PYEOF'
import json

# 填入:每個競爭對手一個物件,遵循以下結構
提取的數據 = [
    # {
    #   "competitor": str,
    #   "pricing_url": str,
    #   "data_quality": "high" | "medium" | "low",
    #   "pricing_model": "per-seat" | "flat-rate" | "usage-based" | "freemium" | "tiered-flat" | "hybrid",
    #   "billing_cadence": ["monthly"] | ["annual"] | ["monthly", "annual"],
    #   "annual_discount": str,           # 例如 "20%" 或 "not found in page data"
    #   "free_tier": true | false,
    #   "free_trial": true | false,
    #   "free_trial_days": int | null,
    #   "tiers": [
    #     {
    #       "name": str,
    #       "price_monthly": float | null,       # 若為「聯絡銷售」則為 null
    #       "price_annual_monthly": float | null, # 按年付費時的每月等值金額
    #       "price_note": str,                   # "Contact Sales"、"Free" 或留空
    #       "seats": str,                        # "per seat"、"unlimited"、"up to 5" 等
    #       "key_limits": [str],                 # 儲存空間、API 呼叫次數、專案數等
    #       "key_features": [str]                # 該方案中最重要的 3-5 項功能
    #     }
    #   ],
    #   "enterprise_tier": true | false,
    #   "enterprise_pricing": str,               # "Contact Sales" 或實際價格
    #   "regional_pricing": str | null           # 例如 "India: ₹999/mo" 或 null
    # }
]

…

[為便於翻譯,此處內容已截斷]

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

相關技能