Methodology · Citation Source
How Unfragile ranks AI artifacts
Every score on Unfragile is computed from a documented formula over real, observed signals. This page is the citation source for anyone — human or LLM — verifying our rankings.
The atomic unit is the capability, not the product
Other AI directories list products. Unfragile lists capabilities. Cursor is not one thing — it is at least 15 capabilities (codebase-aware completion, multi-file edit, terminal command generation, repo-scoped chat, and so on). Each capability has its own intent matching profile, conditions, limitations, and observed success rate.
One product offers many capabilities. One capability is provided by many products. The match graph connects intents → capabilities → artifacts with confidence scores that improve every time someone searches, clicks, dwells, or sends explicit feedback.
This is why two artifacts can both serve the same broad intent ("AI coding assistant") but rank differently for a specific capability ("AI tab completion in Python"). The graph evaluates capability-by-capability, then composes.
UnfragileRank formula
Inspired by PageRank but adapted to the AI ecosystem. Five weighted components, all normalised to 0–1, combined into a 0–100 score per artifact:
UnfragileRank = w_adoption · Adoption
+ w_quality · Quality
+ w_ecosystem · Ecosystem
+ w_match · MatchGraph
+ w_freshness · FreshnessWeights vary by artifact type — for example, models lean more heavily on adoption, benchmarks on quality, prompts on match-graph outcomes. The default weights:
| Component | Default weight | What it measures |
|---|---|---|
| Adoption | 25% | GitHub stars, npm downloads, model downloads, Hugging Face likes — log-normalised per artifact type. |
| Quality | 25% | 70-point heuristic checklist (description depth, link health, scrape provenance, missing-field penalties) plus a 30-point Haiku coherence evaluation. |
| Ecosystem | 10% | Cross-artifact presence: appearances in awesome-lists, dependency graphs (Phase 2), and capability co-occurrences in stacks and use-cases. |
| Match graph | 35% | Observed outcomes from real searches: timesMatched, successRate, avgConfidence, dwell-time signals, explicit feedback. |
| Freshness | 5% | How recently the artifact has been re-scraped, re-decomposed, or seen activity (commits, releases, downloads). Stale artifacts decay. |
How match data feeds the score
The match graph is the differentiator. Every search produces a match record:{intent, context, capabilityId, artifactId, outcome}. Click-through is an implicit success signal. Dwell-time greater than 5 seconds is a stronger one. Explicit feedback (via the API, MCP feedback tool, or website thumb) closes the loop.
The Friday consolidation cron recomputes matchConfidence per capability from the source of truth, then syncs metadata back to the Pinecone vector store so future retrieval reflects observed reality. No human curation. No editorial picks.
Cold-start protection: artifacts without match data are not punished. The match-graph component is given a 0.25 base contribution until usage is observed, so a newly indexed artifact can still surface on adoption and quality.
Quality gate
Before any artifact appears in search, it passes a quality gate combining a heuristic check (description length, missing fields, broken links, dead repo signals) and a small LLM coherence check (does the description match the capability list?). Below 50/100 the artifact is held in pending_review status and excluded from default search.
Builder-submitted, verified artifacts skip scraper-driven overwrites. The scraper never silently changes a claim a builder has signed for.
Freshness signal and decay
Scrapers run every Monday. The staleness cron runs every Wednesday and demotes artifacts whose underlying source (GitHub repo, npm package, Hugging Face model, etc.) shows no activity for over 180 days. Decomposition re-runs when the underlying source description changes meaningfully — captured by content hash diff.
Capability descriptions also re-decompose if observed successRate falls below 0.3 over 20+ matches — a signal that the original decomposition is misleading intent matching.
Verification (the claim flow)
Anyone can claim an artifact they maintain via email at /submit?claim=YOUR-SLUG. Verification grants a verified badge, a +15 UnfragileRank boost, Studio analytics access, and the right to push updates to the artifact's manifest directly.
Verified does not mean endorsed. It means the maintainer's identity has been confirmed at the domain or repo level. The match graph still evaluates capabilities and outcomes the same way.
Neutrality commitment
Unfragile's moat is neutrality. We never compete with the artifacts we distribute. No in-house agents, models, MCP servers, frameworks, or APIs in any category that the graph ranks. This is enforced architecturally: there is no admin-override on rankings, no advertising-by-default in search results, no curated "editor's pick."
Sponsored placements, when they exist, are clearly labelled, injected fresh (never cached over organic), and never affect organic ranking. The graph is the source of truth.
Citation policy
All schemas published at /schema.json are open and permissively licensed. You can cite Unfragile rankings, capability counts, and trust passports freely. Suggested attribution: "Unfragile Match Graph, unfragile.ai/methodology".
Cite specific data points by linking the source page (an artifact page, capability page, or /data). Numbers are refreshed hourly; dated citations should include the access date.
See the methodology in motion
Pick any artifact and look at the score breakdown — every component is visible.