Skip to main content
AIDiveForge AIDiveForge
📊

Competitor Feature Matrix

Research & Analysis · by AIDiveForge · Apr 20, 2026 · Beginner

Compare named competitors using current, source-linked evidence.

Get a normalized feature matrix with unknowns and retrieval dates.

Free · 2 KB · SKILL.md, instructions and example files. Requires the products, comparison criteria and browsing access for current claims.

A worked example

A small example to try before using your own data.

Input

{
  "criterion": "CSV export on the entry paid plan",
  "A_source": "Entry plan includes CSV export.",
  "B_source": "Export listed only for Enterprise."
}

Expected result

| Product | Entry paid plan CSV export | Evidence |
| A | Yes | A_source |
| B | Unknown | Enterprise support does not establish entry-plan support |

What to check: Do not turn missing entry-plan evidence into a definitive no; preserve plan scope.

Limits: A source can change after retrieval. No product purchase or subscription is made by this workflow.

Worked example included. Model-specific performance and vendor compatibility have not been benchmarked.

Installation options and other formats

Install this skill

An agent skill starts with SKILL.md. The ZIP also includes its examples and any helper scripts. Drop the file into your tool of choice — or pick a different format if you use Cursor, Windsurf, Copilot, or something else.

Download SKILL.md
python3 - <<'ADF_SKILL_INSTALL'
import hashlib, io, os, stat, tempfile, urllib.request, zipfile
from pathlib import Path, PurePosixPath
folder = "competitor-feature-matrix"
root = Path(os.environ.get('ADF_SKILL_ROOT', str(Path.home() / '.claude' / 'skills'))).expanduser()
destination = root / folder
if destination.exists() or destination.is_symlink():
    raise SystemExit('An installation already exists. Back it up and merge the ZIP deliberately.')
root.mkdir(parents=True, exist_ok=True)
request = urllib.request.Request("https://aidiveforge.com/skill/competitor-feature-matrix.zip", headers={'User-Agent': 'AIDiveForge-Resource-Installer/1.0 (+https://aidiveforge.com/skills/)'})
with urllib.request.urlopen(request, timeout=30) as response:
    data = response.read(8 * 1024 * 1024 + 1)
if len(data) > 8 * 1024 * 1024 or hashlib.sha256(data).hexdigest() != "838dad3b9ebade84fc5715ef9444856fe8ce8303d6aa99d756854997b70b7177":
    raise SystemExit('The download did not match this reviewed bundle. No files were installed.')
with zipfile.ZipFile(io.BytesIO(data)) as archive, tempfile.TemporaryDirectory(prefix='.adf-skill-', dir=root) as temporary:
    members = archive.infolist()
    if len(members) > 100 or sum(m.file_size for m in members) > 16 * 1024 * 1024:
        raise SystemExit('Unexpected archive size')
    for member in members:
        name = PurePosixPath(member.filename)
        if name.is_absolute() or '..' in name.parts or not name.parts or name.parts[0] != folder or '\\' in member.filename or stat.S_ISLNK(member.external_attr >> 16):
            raise SystemExit('Unsafe archive entry; nothing was installed')
        target = Path(temporary).joinpath(*name.parts)
        if member.is_dir():
            target.mkdir(parents=True, exist_ok=True)
        else:
            target.parent.mkdir(parents=True, exist_ok=True)
            with target.open('xb') as stream:
                stream.write(archive.read(member))
    staged = Path(temporary) / folder
    if not (staged / 'SKILL.md').is_file() or destination.exists() or destination.is_symlink():
        raise SystemExit('The skill could not be installed without replacing existing data')
    os.rename(staged, destination)
print('Installed the complete skill folder:', destination)
ADF_SKILL_INSTALL

Claude Code: ~/.claude/skills/competitor-feature-matrix/SKILL.md. Codex: ~/.codex/skills/competitor-feature-matrix/SKILL.md. Keep the complete ZIP folder when helper scripts are included.

🧠 Why it works

Do not turn missing entry-plan evidence into a definitive no; preserve plan scope.

⚙️ How it works

  1. Define each feature operationally so different plan names and marketing terms can be compared.
  1. Use first-party product, pricing and documentation pages. Record retrieval date, plan, currency and billing interval.
  1. Mark a feature yes, no or unknown only at the granularity the source supports.
  1. Keep per-seat, usage-based and annual prices distinct; do not manufacture a single comparable total without an explicit scenario.
  1. Link every consequential cell to its source and list unresolved checks before a buying decision.

Description

Get a normalized feature matrix with unknowns and retrieval dates.

Requires the products, comparison criteria and browsing access for current claims.

Limits: A source can change after retrieval. No product purchase or subscription is made by this workflow.

Recommended Use

Tools and workflow packs this skill pairs well with. Forge picks are auto-generated from category + capability signals; Community picks are added by people who've used the pairing.