尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Rule-based synergy analysis for Magic: The Gathering Commander decks. Every claim is a sentence read off printed oracle text, and no model runs at analysis time.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Paste a Commander decklist and see which of your cards actually work together, with the sentence that says why. Free, no account, nothing stored. Paste a list, or a Moxfield or Archidekt link, at edhseer.cards.
Every pairing in your deck, in a sentence you can check. Not a score and not "people also play". A claim that names both cards and the mechanism:
"When Siege-Gang Commander dies, Skullclamp draws you 2 cards"
Open both cards. If the printed text does not say this, the claim is wrong, and a wrong claim is a bug you can report with two card names.
What your commander works with. Your commander in the middle and every card it works with around it, grouped by what the link is. Tap a card to read how, or put any card in the middle and follow its links from there.
What to fix, biggest payoff first. Card draw, interaction and answers counted against benchmarks, with the gap stated in cards: "You are 2 short on interaction. Add ~2; most cost 2–4 mana."
Mana you can plan around. Land count, colour sources, and the odds of casting each of your hardest spells on curve, from 2,000 simulated games.
Your game plan. The themes your deck leans on, and the pairs behind each one.
Bracket, roles and combos. Where the deck sits, what each card is doing, and the combos it already holds, from Commander Spellbook.
| What your deck does | What to fix, biggest payoff first |
|---|---|
Every commander, every card and every Commander precon has a page of its own. A precon's page says how well its cards work together and which swaps make them work together more; a commander's shows what works with it, over every card a deck it leads could legally hold.
| A page per commander | A page per precon |
|---|---|
Start anywhere: Skullclamp · Krenko, Mob Boss · Atraxa, Praetors' Voice · Inalla, Archmage Ritualist · Edgar Markov · Yuna, Grand Summoner · every precon · or browse every commander.
It reads the cards, not the crowd. Nothing comes from card names, popularity or which cards show up together in other people's decks. Every claim comes from printed rules text, so a card no one plays and a staple in every deck are read the same way.
No AI when you analyse a deck. A model reads each card's oracle text exactly once, offline, and turns it into structured clauses. Everything after that is plain rules: the same deck always gets the same report, and every sentence traces back to a line on a card.
It says nothing rather than guess. A card it cannot read is listed as unread. A pairing it cannot verify is refused. A silent wrong answer is worse than a missing one.
And it is measured, not asserted. Every change to the engine is scored against a frozen panel of card pairs a person has judged by hand:
| measure | result |
|---|---|
| synergy-claim precision | 98.7% [97.1, 99.5] on 421 live claims |
| retention of pairs judged real | 91.4% — 383 held, 36 lost |
| judged against | 895 frozen card pairs, every claim hand-judged by a human |
| calibration corpus | 71 real decks |
Measured 2026-09-08 by npx tsx packages/instruments/src/panel-score.ts, which is free to re-run.
The two numbers only mean anything together. A tool that deleted every claim it was unsure of would score 100% on the first and collapse on the second. And retention is not recall: the panel was built from claims this engine already made, so it cannot see a pairing that was never claimed.
A pairing is found when something one card causes is something another card cares about: Krenko makes Goblin tokens enter, Impact Tremors cares about creatures entering, so the two pair. Farseek puts a land onto the battlefield, Enduring Courage cares about a creature entering, so they do not.
flowchart LR
subgraph offline ["Once per card, offline"]
A["Oracle<br/>text"] --> B["Segment"]
B --> C["Normalize<br/>a model<br/>(paid)"]
C --> D["Derive<br/>causes and<br/>cares about"]
end
subgraph browser ["In your browser"]
E["Your<br/>deck"] --> F["Match"]
F --> G["Report"]
end
D --> F
style C fill:#7c2d12,color:#fff
style D fill:#14532d,color:#fff
style F fill:#1e3a8a,color:#fff
Only the red step costs money, and the project pays it once per card. The rest re-runs for free, which is why a wrong claim can be fixed and re-measured the same day.
The full story, for players and for engineers, is at edhseer.cards/how-it-works. The tour with the code is docs/HOW-IT-WORKS.md.
Working, measured, and under active development: a deterministic engine with a regression panel, several ratchets, and a habit of recording the measurement beside every change.
| package | what it does |
|---|---|
@edh-seer/data | Scryfall + MTGJSON ingestion, MongoDB corpus, name resolution |
@edh-seer/tagger | oracle text → clauses (the paid step) → derived tags (free) |
@edh-seer/matcher | pairings, reasons, archetypes, mana math, build benchmarks, combos |
@edh-seer/engine | scoring, ratings, per-card impact |
@edh-seer/cli | terminal deck report |
@edh-seer/instruments | the measuring tools: panel score, population diffs, recall samples |
@edh-seer/web | the site: a React/Vite app that analyses in the browser, and the Pages Functions that prerender card pages |
@edh-seer/import-worker | the Cloudflare Worker that imports Moxfield and Archidekt decks |
Node 24 (.nvmrc; nvm use picks it up) is all the test suite needs:
npm install
npm test # 4,342 tests, green on 2026-09-25. No database, no network, no API key
Running the engine on real decks needs MongoDB holding the card corpus:
npx tsx packages/cli/src/main.ts <decklist.txt> # a deck report in the terminal
npx tsx packages/matcher/src/bin/build-static.ts # the card shards the site reads
npm run dev -w @edh-seer/web # the site, on :5173
How to get the corpus, and everything else about running it, is in the runbook.
Start at docs/, or go straight to what you need:
| document | what it covers |
|---|---|
| How it works | the tour: a printed card to a synergy graph, with diagrams and a worked example |
| edhseer.cards/how-it-works | the same story on the site: a player's half, then an engineer's half, with the figures above held to this README by a test |
| Stage 1 — Segmentation | oracle text into numbered clauses, free |
| Stage 2 — Normalization | the model, once per card. The only paid step |
| Stage 3 — Derivation | clauses into game events, plus what no card prints |
| Stage 4 — Matching | what one card causes against what another cares about, and every reason a claim is refused |
| Schema reference | every vocabulary, constant and field. Generated from the source and gated by a test |
| Runbook | what to run, what it costs, how to measure it afterwards |
| Engineering log | what was measured, on what day, and what it cost |
Contributing: CONTRIBUTING.md. Found a wrong pairing? Report it with the two card names and the sentence the report printed. It is the most useful issue this project can receive.
MIT — see LICENSE.
Card data from Scryfall and MTGJSON. Combo data from Commander Spellbook. Magic: The Gathering is a trademark of Wizards of the Coast. This project is unaffiliated with them.