Agent skill
competitive-tracker
プロジェクト アプリの機能ポートフォリオを競合6アプリとMECEフレームワークで比較して ギャップ(欠けた機能)とポジション変化を追跡するスキル。 競合データはcompetitor-registry.jsonに構造化されており、四半期ごとDeep Researchで更新する。 v2.0: audit-runner.mjs 自動化スクリプト統合, JTBD Opportunity Score, 3-tier カバレッジ, フィードバックループ, Diff 追跡, 双方向比較(当社独自の差別化12個追跡) v3.0: 2-Phase LLM Pipeline 導入 (DR Markdown → Gemini 構造化抽出 → assessments 統合), registry v3 スキーマ (per-feature assessments + confidence_thresholds + extraction_log), dr-extractor.mjs (Gemini API ベース自動抽出), confidence ベース信頼度報告, --refresh-plan (更新必要優先順位リスト) "競合比較", "ベンチマーク", "業界標準チェック", "ポートフォリオチェック", "competitive", "ギャップ追跡" などの要求でトリガーされる。 <example> user: "競合と比較して" assistant: "competitive-trackerを使用してポートフォリオギャップを分析します" </example> <example> user: "業界標準と当社アプリの差確認して" assistant: "competitive-trackerを実行して業界標準対カバレッジを分析します" </example> <example> user: "/competitive-tracker --import" assistant: "Deep Research 結果をcompetitor-registry.jsonにパースします" </example>
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/other/other/competitive-tracker
SKILL.md
Competitive Tracker v3.0
核心コンセプト: "比較 → ギャップ発見 → 機会定量化 → 既存パイプライン接続"
このスキルは**検出(Detection), 定量化(Quantification), 接続(Connection)**を担当する。 優先順位/定義/実装は既存ツールに委任する。
SSOT (Single Source of Truth)
┌─────────────────────────────────────────────────────────────┐
│ SSOT 構造 │
├─────────────────────────────────────────────────────────────┤
│ docs/analysis/competitor-registry.json → 競合機能 DB │
│ docs/analysis/mece-feature-analysis.md → MECE 分析レポート │
│ docs/features/*/CONTEXT.json → 内部機能状態 │
│ docs/features/index.md → 機能リスト │
│ .claude/state/audit-snapshots/ → 監査履歴スナップショット │
└─────────────────────────────────────────────────────────────┘
⚠️ 原則:
- 競合データはcompetitor-registry.jsonでのみ管理
- ギャップ深刻度はregistryのgap_severity フィールドでのみ定義
- MECE レポートはaudit-runnerの--save 出力物
- Importance データはDeep Research 結果をregistryに統合
自動化エンジン: audit-runner.mjs v3.0
AI トークンコスト $0 — 決定論的(deterministic) Node.js スクリプト
# 基本実行 (全体レポート)
node .claude/scripts/audit-runner.mjs
# 主要CLI フラグ
node .claude/scripts/audit-runner.mjs --summary # カバレッジ要約のみ
node .claude/scripts/audit-runner.mjs --gaps-only # ギャップのみフィルタリング
node .claude/scripts/audit-runner.mjs --validate # マッピング整合性検証
node .claude/scripts/audit-runner.mjs --json # JSON 出力
node .claude/scripts/audit-runner.mjs --save # mece-feature-analysis.md 保存
node .claude/scripts/audit-runner.mjs --diff # 以前スナップショットと比較
node .claude/scripts/audit-runner.mjs --snapshot # スナップショットのみ保存 (レポートなし)
node .claude/scripts/audit-runner.mjs --recommend # MVP 推奨のみ出力
node .claude/scripts/audit-runner.mjs --no-recommend # MVP 推奨除外
node .claude/scripts/audit-runner.mjs --refresh-plan # 更新必要アプリ/機能優先順位リスト
3-tier カバレッジ指標
| 指標 | 公式 | 意味 |
|---|---|---|
| Binary | 機能存在有無 | "あるかないか" |
| Weighted | Σ(our_depth / competitor_max_depth) / N | "どれだけ深いか" |
| Effective | Binary × CONTEXT.json progress 平均 | "実際どれだけ完成したか" |
JTBD Opportunity Score (Strategyn ODI)
Opportunity = Importance + max(Importance - Satisfaction, 0)
範囲: 1.0 ~ 10.0
- 7.0+ → 🔴 核心投資領域
- 5.0~6.9 → 🟡 改善推奨
- < 5.0 → 🟢 現状維持可能
- Importance: Deep Research ベース学習者動機調査 (世宗学堂財団, Duolingo レポート, 学術研究)
- Satisfaction: registryのjtbd_satisfaction.matrix.hackathon_project 値
フィードバックループ検出
audit-runnerは2つの不一致を自動検出する:
- Registry 更新必要: CONTEXT.json progressが100%なのにregistryにdepth_gapで残っている場合
- 未登録機能: CONTEXT.jsonに進行中だがregistryにマッピングがない機能 (差別化登録候補)
トリガー条件
基本モード (監査)
- 定期チェック: "競合比較して", "ベンチマーク回して"
- 業界標準確認: "業界標準と差何?", "当社アプリ欠けた機能ある?"
- ポートフォリオ分析: "機能ポートフォリオチェック", "MECE 確認"
- ギャップ現状: "ギャップ追跡", "competitive tracker"
- 機会分析: "JTBD 分析", "機会スコア", "opportunity"
サブコマンド
| コマンド | 説明 |
|---|---|
| (基本) | audit-runner 実行 → 全体レポート |
--summary |
カバレッジ要約 + JTBD 機会順位のみ |
--gaps-only |
ギャップのみフィルタリングして報告 |
--validate |
registry ↔ CONTEXT.json マッピング整合性検証 |
--save |
mece-feature-analysis.md ファイル保存 |
--diff |
以前監査スナップショットと比較して変化点報告 |
--snapshot |
スナップショットのみ保存 (レポート省略) |
--recommend |
MVP 推奨のみ出力 (4要素複合スコアベース) |
--no-recommend |
MVP 推奨セクション除外 |
--refresh-plan |
更新必要アプリ/機能優先順位リスト (stale + low confidence) |
--json |
JSON 形式出力 (CI/CD 連携用) |
--import |
Deep Research マークダウンをregistry.jsonにパース |
--refresh |
/deep-research 実行案内 → --import 案内 |
--action |
ギャップに対するアクション提案 (MIS 候補登録含む) |
核心原則
1. このスキルは"検出 + 定量化 + 接続"をする
❌ このスキルがしないこと:
- 競合データ直接収集 (→ deep-research)
- ギャップの優先順位算出 (→ priority-analyzer)
- ギャップを機能として定義 (→ feature-architect)
- 機能実装 (→ feature-pilot)
✅ このスキルがすること:
- 内部機能 vs 競合機能比較 (3-tier カバレッジ)
- ギャップ/重複/変化検出
- JTBD Opportunity Scoreで機会定量化
- MVP 推奨 (4要素複合スコアベース自動推奨, --recommend)
- 双方向比較 (当社独自の差別化12個追跡)
- フィードバックループ検出 (registry ↔ CONTEXT.json 不一致)
- 発見されたギャップをmarket-intelligence-scanner 候補として接続提案
- mece-feature-analysis.md 自動更新 (--save)
- 監査スナップショット保存 + Diff 追跡
2. 批判的思考5段階適用
| 段階 | 質問 |
|---|---|
| 分解 | ギャップのカテゴリ別分布は? (Lifecycle × Domain) |
| 解決 | 各ギャップの深刻度とJTBD Opportunity Scoreは? |
| 検証 | 本当にギャップか、戦略的選択か? (AI 100% 戦略と衝突しないか?) |
| 統合 | 全体ポートフォリオカバレッジ率(3-tier)とポジションは? |
| 反省 | 競合データが最新か? Importance データ根拠は十分か? |
3. "全てのギャップを埋める必要はない"
ギャップ発見時3つに分類:
| 分類 | 意味 | アクション |
|---|---|---|
| 埋めるべきギャップ | 業界標準(4+アプリ)なのに当社だけない | → MIS 候補登録 |
| 戦略的選択 | 当社戦略と合わない (例: コミュニティ添削) | → registryに strategic_skip 表示 |
| 観察対象 | まだ標準ではないがトレンド | → モニタリング維持 |
ワークフロー
Phase 1: audit-runner 自動実行
# 基本: 全体レポート + スナップショット自動保存
node .claude/scripts/audit-runner.mjs
# レポート出力内容:
# 1. カバレッジ要約 (Binary/Weighted/Effective)
# 2. 🔴 緊急ギャップ (業界標準未カバー)
# 3. 🟡 Depth Gap (あるが競合より浅い)
# 4. 🎯 JTBD Opportunity Score 表
# 5. 🛡️ 当社独自の差別化12個
# 6. 📂 カテゴリ別ギャップ分布
# 7. 🔄 フィードバックループ通知
# 8. 🎯 MVP 推奨 (4要素複合スコア TOP 10 + 2×2 マトリックス)
# 9. 💡 推奨アクション
Phase 2: ユーザー決定
HIGH ギャップ:
→ "comp-025 (Speaking SRS)をmarket-intelligence-scanner 候補として登録しますか?"
→ 承認時: /market-intelligence-scanner --accept comp-025
→ その後: /feature-architect → /feature-pilot パイプラインで自動接続
戦略的skip:
→ "comp-029 (コミュニティ添削)はAI 100% 戦略と衝突します. Skip 処理しますか?"
→ 承認時: registryにstrategic_skip マーキング
JTBD 機会:
→ "culture (機会スコア7.0)が最優先投資領域です"
→ K-コンテンツ統合機能強化のためのfeature-architect 呼び出し提案
--add-competitor ワークフロー (competitor-importer.mjs)
AI トークンコスト $0 — 決定論的Node.js スクリプト (検証/統合/バックアップ)
新しい競合アプリをregistryに追加する7-Step パイプライン:
# Step 1: 空テンプレート生成 ($0)
node .claude/scripts/competitor-importer.mjs --generate-template rosetta
# → .claude/state/import-templates/rosetta-profile.json (64機能 + 8 JTBD 空値)
# Step 2: Deep Research ($1-2)
/deep-research --provider gemini "Rosetta Stone Korean 機能分析"
# Step 3: AIがテンプレート記入
# Deep Research 結果をベースにhas_feature/depth/evidence 作成
# Step 4: 検証 ($0)
node .claude/scripts/competitor-importer.mjs --validate .claude/state/import-templates/rosetta-profile.json
# Step 5: プレビュー ($0)
node .claude/scripts/competitor-importer.mjs --dry-run .claude/state/import-templates/rosetta-profile.json
# Step 6: 適用 ($0, 自動バックアップ)
node .claude/scripts/competitor-importer.mjs --apply .claude/state/import-templates/rosetta-profile.json
# Step 7: 影響度確認 ($0)
node .claude/scripts/audit-runner.mjs --diff
テンプレートスキーマ
{
"$schema": "competitor-app-profile-v1",
"generated_date": "2026-02-07",
"registry_feature_count": 64,
"app": {
"id": "rosetta",
"name": "Rosetta Stone",
"note": "Immersion-based learning",
"mau": "12M+"
},
"features": [
{
"registry_id": "comp-001",
"registry_name": "配置試験 / レベルテスト",
"category": "Onboarding",
"has_feature": true,
"depth": 3,
"evidence": "Rosetta Stone: Placement assessment..."
}
],
"jtbd_satisfaction": {
"listening": 3,
"speaking": 2,
"reading": 3,
"writing": 2,
"exam_prep": 2,
"culture": 1,
"habit": 3,
"retention": 3
},
"new_features": []
}
検証ルール (15個)
| コード | ルール | レベル |
|---|---|---|
| V01 | $schema = competitor-app-profile-v1 | ERROR |
| V02 | app.id フォーマット (小文字英数字/ハイフン/アンダースコア, 2-31文字) | ERROR |
| V03 | app.id 固有性 (registry 内重複不可) | ERROR |
| V04 | app.name 必須 | ERROR |
| V05 | features 数 = registry features 数 | ERROR |
| V06 | registry_feature_count staleness チェック | WARN |
| V07 | registry_idがregistryに存在 | ERROR |
| V08 | registry_id 重複不可 | ERROR |
| V09 | has_featureはboolean | ERROR |
| V10 | has_feature=true → depth 1-5 整数必須 | ERROR |
| V11 | has_feature=false → depthはnull | WARN |
| V12 | has_feature=true → evidence 作成推奨 | WARN |
| V13 | JTBD 8個職務 + スコア範囲 1-5 | ERROR/WARN |
| V14 | new_features.name 必須 | ERROR |
| V15 | 最低1個以上has_feature=true | WARN |
--remove-competitor <app_id>
競合アプリをregistryから完全削除:
# アプリリスト確認
node .claude/scripts/competitor-importer.mjs --list-apps
# 削除 (自動バックアップ)
node .claude/scripts/competitor-importer.mjs --remove-app <app_id>
削除時処理:
apps[]から除去- 全ての
features[].appsから除去 features[].app_depthから除去app_count,is_industry_standard再計算jtbd_satisfaction.matrixから除去summary再計算- 自動バックアップ →
.claude/state/import-backups/
ユーティリティコマンド
# 現在登録済みアプリリスト
node .claude/scripts/competitor-importer.mjs --list-apps
# 手動バックアップ
node .claude/scripts/competitor-importer.mjs --backup
2-Phase LLM Pipeline (dr-extractor.mjs)
Phase 1: DR Markdown → Gemini 構造化抽出 → profile-v2 JSON (コスト: ~$0.02-0.05/アプリ) Phase 2: profile → competitor-importer.mjs → registry 統合 (コスト: $0)
# Phase 1: DR 分析 → Gemini 構造化抽出
node .claude/scripts/dr-extractor.mjs --extract docs/research/rosetta-stone-analysis.md --app rosetta
# → .claude/state/import-templates/rosetta-profile.json
# 検討: 低信頼度項目ハイライト
node .claude/scripts/dr-extractor.mjs --review .claude/state/import-templates/rosetta-profile.json
# Phase 2: profile → registry 統合
node .claude/scripts/competitor-importer.mjs --validate .claude/state/import-templates/rosetta-profile.json
node .claude/scripts/competitor-importer.mjs --apply .claude/state/import-templates/rosetta-profile.json
# 影響度確認
node .claude/scripts/audit-runner.mjs --diff
# 更新必要リスト確認
node .claude/scripts/audit-runner.mjs --refresh-plan
Confidence モデル (4要素加重)
confidence = 0.4 × evidence_quality + 0.2 × source_freshness
+ 0.2 × cross_reference + 0.2 × extraction_clarity
evidence_quality: 証拠テキスト長(200字基準) + 具体的数値/表現有無
source_freshness: DR 生成日基準180日減衰
cross_reference: 既存registry アプリ数ベースクロス検証度
extraction_clarity: Gemini certainty 値直接使用
信頼度ベース報告 (audit-runner v3.0)
📊 信頼度報告 (Confidence Report)
┌─────────────────────┬───────┐
│ 総Assessment │ N個 │
│ 平均信頼度 │ 0.XX │
│ 🟢 High (≥0.80) │ N個 │
│ 🟡 Medium (0.50-79) │ N個 │
│ 🔴 Low (0.30-0.49) │ N個 │
│ ❌ Rejected (<0.30) │ N個 │
│ ⏰ Stale (90日+) │ N個 │
│ ⚠️ 根拠不足 │ N個 │
└─────────────────────┴───────┘
--import モード詳細 (レガシー)
⚠️ 構造化されたテンプレートベース
--add-competitorワークフローを推奨します。
Deep Research 結果(マークダウン)をregistry.jsonに変換:
入力
docs/analysis/deep-research-competitor-features.md
(またはユーザーが指定したDeep Research 結果ファイル)
処理
- マークダウンパース: アプリ別セクション → 機能抽出
- 既存registryと比較: 新規/変更/削除検出
- MECE カテゴリ自動マッピング (Lifecycle × Domain)
- Depth Score 算定 (1-5)
- JTBD タグ付け
- ユーザー確認後registry 更新
出力
## Import 結果
- 新規機能: N個追加
- 既存機能更新: N個
- 削除された機能: N個 (確認必要)
- registry 更新完了: YYYY-MM-DD
更新周期ガイド
| 活動 | 周期 | コスト | トリガー |
|---|---|---|---|
監査 (audit-runner.mjs) |
毎週 or 機能追加時 | $0 | 手動 or CI |
Diff 追跡 (--diff) |
隔週 | $0 | 手動 |
Deep Research 更新 (/deep-research + --import) |
四半期ごと | ~$1-2 | 手動 |
JTBD Importance 更新 (/deep-research JTBD クエリ) |
半期ごと | ~$1 | 手動 |
| Registry 鮮度通知 | 自動 | $0 | 90日経過時audit-runner 警告 |
既存ツール接続マップ
[半期ごと]
/deep-research --provider gemini "JTBD Importance 学習者動機調査"
└→ registry.jtbd_satisfaction.importance 手動更新
[四半期ごと]
/deep-research --provider gemini "競合機能更新2026"
└→ /competitive-tracker --import
└→ competitor-registry.json 更新
[毎週/随時]
node .claude/scripts/audit-runner.mjs ← $0 自動化
├→ ギャップレポート出力 (ターミナル)
├→ mece-feature-analysis.md 更新 (--save)
├→ 監査スナップショット保存 (--snapshot)
└→ HIGH ギャップ発見時:
└→ /market-intelligence-scanner (候補登録提案)
└→ --accept 時:
└→ /feature-architect (CONTEXT.json 生成)
└→ /feature-pilot (実装)
[優先順位調整必要時]
/priority-analyzer (全体ポートフォリオWSJF 再分析)
制限事項
| 制限 | 原因 | 緩和方法 |
|---|---|---|
| 競合非公開機能検出不可 | Deep Researchは公開情報のみ収集 | app-review-analyzerでユーザーレビューから新機能言及検出 |
| "業界標準"基準が恣意的 | 4+ アプリ保有 = 標準 | registryでthreshold 調整可能 |
| 四半期更新間死角 | Deep Research 周期的コスト | 主要競合更新ニュースモニタリング推奨 |
| 全てのギャップが価値あるわけではない | 戦略不一致ギャップ存在 | strategic_skip 分類でノイズ除去 |
| Importance データ主観性 | 学習者調査ベースだが定量的限界 | 半期ごとDeep Research 更新 + 多重ソースクロス検証 |
スキーマ: competitor-registry.json (v3)
{
"$schema": "competitor-registry-v3",
"last_updated": "ISO 8601 date",
"data_source": "出典説明",
"next_refresh_due": "ISO 8601 date",
"confidence_thresholds": {
"high": 0.80,
"medium": 0.50,
"low": 0.30,
"reject_below": 0.30,
"auto_approve_above": 0.80,
"stale_days": 90
},
"apps": [
{ "id": "string", "name": "string", "note": "string", "mau": "string" }
],
"features": [
{
"id": "comp-NNN",
"name": "機能名",
"category": "Speaking|Writing|Reading|...",
"sub_category": "詳細分類",
"lifecycle": "L1-L8|cross",
"domain": "D1-D8|P1-P8|cross",
"apps": ["app_id"],
"app_count": "number",
"is_industry_standard": "boolean (app_count >= 4)",
"app_depth": { "app_id": "1-5 depth score" },
"assessments": {
"app_id": {
"has_feature": "boolean",
"depth": "1-5|null",
"confidence": "0.0-1.0",
"evidence_excerpt": "string (最大200字)",
"source_id": "R-YYYY-MM-DD-competitor-{app_id}",
"last_verified": "ISO 8601 date"
}
},
"hackathon_project_coverage": "feature_id|null|feature_id-partial",
"hackathon_project_depth": "1-5|null",
"gap_severity": "HIGH|MEDIUM|LOW|null",
"gap_type": "missing|depth_gap|partial|null",
"jtbd": ["job_id"],
"strategic_skip": "boolean (optional)",
"strategic_skip_reason": "string (optional)",
"evidence": "根拠説明",
"detected_date": "ISO 8601 date"
}
],
"extraction_log": [
{
"source_id": "R-YYYY-MM-DD-competitor-{app_id}",
"app_id": "string",
"extracted_at": "ISO 8601 timestamp",
"model": "gemini-2.5-flash-preview-05-20",
"feature_count": "number",
"avg_confidence": "0.0-1.0",
"low_confidence_count": "number"
}
],
"our_differentiators": [...],
"jtbd_satisfaction": {
"jobs": [{ "id": "string", "name": "string" }],
"matrix": { "job_id": { "app_id": "1-5 score" } },
"importance": {
"_source": "Deep Research 出典",
"_methodology": "方法論説明",
"job_id": "1.0-5.0 importance score"
}
},
"summary": {
"total_features_tracked": "number",
"industry_standards": "number",
"our_gaps": { "HIGH": [], "MEDIUM": [], "LOW": [] },
"fully_covered": "number",
"partially_covered": "number",
"depth_gaps": "number",
"not_covered": "number",
"coverage_rate_binary": "string (%)",
"coverage_rate_weighted": "string (%)",
"our_unique_differentiators": "number"
}
}
v3 新規フィールド説明
| フィールド | 位置 | 説明 |
|---|---|---|
confidence_thresholds |
ルート | 信頼度閾値 (スキル別カスタマイズ可能) |
assessments |
features[].assessments | アプリ別個別評価 (confidence, evidence, source 含む) |
extraction_log |
ルート | Gemini 抽出履歴追跡 (監査/デバッグ用) |
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?