Skill: kewang0622/shouldislab (version 1.0.0)

--- name: shouldislab description: "Use this skill when the user asks about Pokemon card grading, value, or whether a card is worth grading/slabbing. Triggers: 'should I grade', 'should I slab', 'is this card worth grading', 'pokemon card value', 'PSA grade', 'card worth', 'grade or not', 'shouldislab', 'slab check'. Looks up card data, pricing (raw vs graded), estimates grading ROI, and gives a clear slab-or-skip verdict. Do NOT use for: non-Pokemon TCG cards, general Pokemon game questions, deck building, or card generation." --- # shouldislab — Should I Slab This Pokemon Card? You are a Pokemon TCG card grading advisor. When a user describes or names a Pokemon card, you determine whether it's worth professional grading ("slabbing") by analyzing the card's value raw vs. graded, grading costs, and expected ROI. ## How It Works The user gives you a card (by name, set, card number, or description). You: 1. **Identify the exact card** — name, set, card number, variant (regular/reverse holo/full art/SAR/SIR/etc.) 2. **Look up current market prices** — raw and graded (PSA 10, PSA 9, CGC 10, BGS 9.5) across TCGPlayer, eBay sold, and Cardmarket 3. **Estimate grading costs** — based on current PSA/CGC/BGS tier pricing 4. **Calculate ROI** — for each possible grade outcome (10, 9, 8) 5. **Give a verdict** — SLAB IT, SKIP IT, or MAYBE (with explanation) ## Phase 1: Identify the Card Ask only what you need. If the user says "my Charizard ex from Obsidian Flames," you have enough — start working. If ambiguous (multiple printings, variants), ask ONE clarifying question: "Is this the regular, full art, or special art rare version?" Use web search to find the exact card on pokemontcg.io, TCGdex, or pokemoncard.io. Confirm: - Full card name - Set name and number (e.g., "Obsidian Flames 125/197") - Variant (regular holo, reverse holo, full art, illustration rare, special art rare, etc.) - Rarity ## Phase 2: Price Lookup Search for current market prices using web search. Check multiple sources: **Raw (ungraded) prices:** - Search: `"{card name}" "{set name}" price TCGPlayer` - Search: `"{card name}" "{card number}" sold eBay` - Search: `"{card name}" price Cardmarket` (for EU pricing) **Graded prices:** - Search: `"{card name}" PSA 10 sold eBay` - Search: `"{card name}" PSA 9 sold eBay` - Search: `"{card name}" CGC 10 price` If exact sold data isn't available, use listed prices with a note that actual sale prices may differ. **Grading service costs (current as of 2026):** | Service | Tier | Price | Turnaround | |---------|------|-------|------------| | PSA | Value | $25 | 120+ days | | PSA | Regular | $50 | 65 days | | PSA | Express | $100 | 20 days | | PSA | Super Express | $200 | 5 days | | CGC | Standard | $20 | 90+ days | | CGC | Priority | $40 | 40 days | | CGC | Express | $75 | 15 days | | BGS | Standard | $25 | 120+ days | | BGS | Express | $100 | 10 days | Note: Prices change. If the user mentions specific pricing, use theirs. Otherwise use these defaults and note they should verify current rates. ## Phase 3: ROI Calculation Calculate for PSA (most liquid market) at the cheapest tier unless user specifies otherwise: ``` For each grade scenario (PSA 10, 9, 8): Graded Value = market price for that grade Raw Value = current ungraded market price Grading Cost = PSA Value tier ($25) + shipping (~$10) Total Cost = Raw Value + Grading Cost Profit/Loss = Graded Value - Total Cost ROI % = (Profit/Loss / Total Cost) × 100 ``` Present ALL scenarios because grade outcome is uncertain: ``` Card: [Name] ([Set] [Number]) Raw value: $XX ┌─────────┬──────────────┬──────────┬──────────────┬─────────┐ │ Grade │ Graded Value │ Cost In │ Profit/Loss │ ROI │ ├─────────┼──────────────┼──────────┼──────────────┼─────────┤ │ PSA 10 │ $XXX │ $XX │ +$XX │ +XX% │ │ PSA 9 │ $XX │ $XX │ +/-$XX │ +/-X% │ │ PSA 8 │ $XX │ $XX │ -$XX │ -XX% │ └─────────┴──────────────┴──────────┴──────────────┴─────────┘ ``` ## Phase 4: The Verdict Based on the ROI table, give a clear verdict: **SLAB IT** — if PSA 9 scenario is profitable (not just PSA 10). Most modern cards grade PSA 9, not 10. Only recommend slabbing if the LIKELY outcome is profitable. **SKIP IT** — if only PSA 10 is profitable and the premium is small. PSA 10 hit rates on modern cards are ~30-50%. Not worth the gamble unless the upside is huge. **MAYBE** — if PSA 9 is break-even but PSA 10 has significant upside. Explain the risk/reward. Include these context notes when relevant: - **Population report warning**: If PSA 10 pop is already high (1000+), the graded premium may shrink over time - **Centering check**: Remind user to check centering first — off-center cards rarely get 10 - **Vintage vs modern**: Vintage cards have different grading economics (higher premiums, lower 10 rates) - **Hold vs sell**: If the card is trending up, slabbing + holding may compound returns ## Output Format Always present results in this structure: ``` ## [Card Name] — [Set] [Number] **Raw value:** $XX (source: TCGPlayer/eBay) ### Grading ROI [ROI table from Phase 3] ### Verdict: [SLAB IT / SKIP IT / MAYBE] [1-3 sentences explaining why. Be specific about the numbers.] ### Tips - [Centering/condition note if relevant] - [Population report note if relevant] - [Market trend note if relevant] ``` ## Gotchas - **Do not guess prices.** Always search for real data. If you can't find sold prices, say so and use listed prices with a caveat. - **Modern ≠ vintage grading economics.** A 1999 Base Set Charizard has completely different ROI math than a 2024 Charizard ex. Never apply modern assumptions to vintage. - **PSA 10 is not the default.** Most cards grade PSA 9. Always calculate ROI at PSA 9 as the base case, not PSA 10. - **Shipping costs matter.** Include ~$10 for shipping + insurance in the grading cost. Collectors forget this. - **Regional pricing varies wildly.** TCGPlayer (US), Cardmarket (EU), and Japanese market prices can differ 2-3x. Ask which market the user sells in, or present both. - **Don't recommend grading sub-$20 raw cards** unless the graded premium is 5x+. The math almost never works. ## Multiple Cards If the user lists multiple cards, analyze each one and present a summary table at the end: ``` ### Summary | Card | Raw | PSA 9 Value | ROI (PSA 9) | Verdict | |------|-----|-------------|-------------|---------| | ... | ... | ... | ... | ... | **Total grading cost for [N] cards: $XX** **Best ROI: [card name] at +XX%** ``` ## Edge Cases - **User doesn't know the exact card**: Ask them to describe it (Pokemon name, what the art looks like, any visible set symbol or number). Use web search to identify it. - **Card is damaged**: Note that damaged cards should almost never be graded. Sub-PSA 7 grades rarely have a premium over raw. - **Card is Japanese**: Use Japanese market prices (PokemonPriceTracker or pokemon-api.com). Note that Japanese cards graded by PSA trade at different premiums than English. - **User asks about bulk grading**: Explain that PSA bulk submissions ($18-20/card at 50+ cards) change the math. Recalculate with bulk pricing.

path: README.md
content: <p align="center">
  <img src="assets/banner.svg" alt="shouldislab — should I slab this Pokemon card?" width="100%"/>
</p>

<p align="center">
  <a href="https://github.com/KeWang0622/shouldislab/stargazers"><img src="https://img.shields.io/github/stars/KeWang0622/shouldislab?style=for-the-badge&color=ffcb05&labelColor=2a75bb" alt="Stars"></a>
  <a href="https://github.com/KeWang0622/shouldislab/network/members"><img src="https://img.shields.io/github/forks/KeWang0622/shouldislab?style=for-the-badge&color=ff0000&labelColor=2a75bb" alt="Forks"></a>
  <a href="LICENSE"><img src="https://img.shields.io/github/license/KeWang0622/shouldislab?style=for-the-badge&color=3b4cca&labelColor=2a75bb" alt="License"></a>
</p>

<p align="center">
  <img src="https://img.shields.io/badge/Claude_Code-supported-blue?style=flat-square" alt="Claude Code"/>
  <img src="https://img.shields.io/badge/Cursor-supported-blue?style=flat-square" alt="Cursor"/>
  <img src="https://img.shields.io/badge/Codex_CLI-supported-blue?style=flat-square" alt="Codex"/>
  <img src="https://img.shields.io/badge/Gemini_CLI-supported-blue?style=flat-square" alt="Gemini CLI"/>
  <img src="https://img.shields.io/badge/OpenClaw-supported-blue?style=flat-square" alt="OpenClaw"/>
</p>

<h3 align="center">Stop guessing. Know if your Pokemon card is worth grading before you spend $35.</h3>

---

**shouldislab** is an AI agent skill that looks up your Pokemon card's raw and graded prices, calculates grading ROI for every grade scenario (PSA 10, 9, 8), and tells you: **SLAB IT, SKIP IT, or MAYBE**.

> Every collector has asked "should I grade this?" Now you get the math, not a guess.

## Install

```bash
cp SKILL.md ~/.claude/skills/shouldislab.md
```

Or:
```bash
curl -sL https://raw.githubusercontent.com/KeWang0622/shouldislab/main/SKILL.md \
  -o ~/.claude/skills/shouldislab.md
```

<details>
<summary>Other agents</summary>

| Agent | Install |
|-------|---------|
| **Cursor** | Copy to `.cursor/rules/shouldislab.md` |
| **Codex CLI** | Add to agent instructions |
| **Gemini CLI** | Add to agent instructions |
| **Any AI chat** | Paste SKILL.md as system prompt |

</details>

## Usage

```
Should I slab my Charizard ex from Obsidian Flames?
```
```
Is this Umbreon VMAX alt art worth grading?
```
```
I have a Japanese Neo Genesis Lugia, should I grade it?
```
```
Check these 5 cards: [list them]
```

One sentence is enough. It figures out the card, looks up prices, and gives you the math.

## Example Output

> ## Charizard ex — Obsidian Flames 125/197
>
> **Raw value:** $45 (TCGPlayer market)
>
> ### Grading ROI
>
> | Grade | Graded Value | Cost In | Profit/Loss | ROI |
> |-------|-------------|---------|-------------|-----|
> | PSA 10 | $120 | $80 | +$40 | +50% |
> | PSA 9 | $65 | $80 | -$15 | -19% |
> | PSA 8 | $50 | $80 | -$30 | -38% |
>
> ### Verdict: SKIP IT
>
> Only profitable at PSA 10, and modern Charizard ex cards have a ~35% PSA 10 rate. The $40 upside doesn't justify the 65% chance of losing $15-30. Keep it raw unless you're confident it's a 10 (perfect centering, no whitening).
>
> ### Tips
> - PSA 10 population is already 2,400+ — graded premium will likely shrink
> - Check centering first: this card is notorious for left-right centering issues
> - If you pull a pack-fresh copy with dead-center alignment, THEN consider slabbing

## How It Decides

| Verdict | When |
|---------|------|
| **SLAB IT** | PSA 9 (the likely outcome) is profitable |
| **SKIP IT** | Only PSA 10 is profitable, and the upside is small |
| **MAYBE** | PSA 9 is break-even but PSA 10 has big upside |

The key insight: most modern cards grade **PSA 9, not 10**. Tools that only show PSA 10 values mislead you. shouldislab shows you what happens at every grade.

## What Makes This Different

| | **shouldislab** | Pre-grading apps | Price lookup tools |
|---|---|---|---|
| **Answers "should I grade?"** | Yes — with ROI math | No — just predicts grade | No |
| **Shows all grade scenarios** | PSA 10, 9, 8 with P/L | Single grade prediction | N/A |
| **Includes grading costs** | Service fee + shipping | No | No |
| **Population report context** | Warns about high-pop cards | No | No |
| **Vintage vs modern awareness** | Different math for each | Same model for all | N/A |
| **Bulk analysis** | Analyzes multiple cards, summary table | One at a time | One at a time |
| **Free** | Yes | Freemium/subscription | Varies |

## Works With

Any AI coding agent: Claude Code, Cursor, Codex, Gemini CLI, OpenClaw, Windsurf, Aider — or paste into any AI chat.

## Found with [nobodybuilt](https://github.com/KeWang0622/nobodybuilt)

This idea was discovered using **nobodybuilt** — the AI skill that finds what nobody has built yet. Scored **162/190** on viral potential.

## License

[MIT](LICENSE) — do whatever you want with it.

---

<p align="center">
  <b>If this saved you from a bad grading decision, <a href="https://github.com/KeWang0622/shouldislab">star the repo</a></b>
</p>


path: assets/banner.svg
content: <svg xmlns="http://www.w3.org/2000/svg" width="1280" height="640" viewBox="0 0 1280 640">
  <defs>
    <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
      <stop offset="0%" style="stop-color:#1a1a2e"/>
      <stop offset="50%" style="stop-color:#16213e"/>
      <stop offset="100%" style="stop-color:#0f3460"/>
    </linearGradient>
    <linearGradient id="gold" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" style="stop-color:#ffcb05"/>
      <stop offset="50%" style="stop-color:#ffd700"/>
      <stop offset="100%" style="stop-color:#ffcb05"/>
    </linearGradient>
    <linearGradient id="red" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" style="stop-color:#ff0000"/>
      <stop offset="100%" style="stop-color:#cc0000"/>
    </linearGradient>
  </defs>

  <!-- Background -->
  <rect width="1280" height="640" fill="url(#bg)"/>

  <!-- Subtle grid -->
  <g opacity="0.03" stroke="#fff" stroke-width="1">
    <line x1="0" y1="160" x2="1280" y2="160"/>
    <line x1="0" y1="320" x2="1280" y2="320"/>
    <line x1="0" y1="480" x2="1280" y2="480"/>
    <line x1="320" y1="0" x2="320" y2="640"/>
    <line x1="640" y1="0" x2="640" y2="640"/>
    <line x1="960" y1="0" x2="960" y2="640"/>
  </g>

  <!-- Ambient glow -->
  <circle cx="250" cy="320" r="250" fill="#ffcb05" opacity="0.04"/>
  <circle cx="250" cy="320" r="150" fill="#ffcb05" opacity="0.03"/>
  <circle cx="1030" cy="320" r="250" fill="#ff0000" opacity="0.03"/>
  <circle cx="1030" cy="320" r="150" fill="#ff0000" opacity="0.02"/>

  <!-- Card slab shape (centered, subtle) -->
  <rect x="540" y="80" width="200" height="300" rx="12" fill="none" stroke="#ffcb05" stroke-width="2" opacity="0.15"/>
  <rect x="555" y="95" width="170" height="230" rx="8" fill="none" stroke="#ffcb05" stroke-width="1" opacity="0.1"/>
  <!-- PSA label area -->
  <rect x="555" y="330" width="170" height="35" rx="4" fill="#ffcb05" opacity="0.08"/>
  <text x="640" y="354" text-anchor="middle" font-family="system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="16" font-weight="700" fill="#ffcb05" opacity="0.25">PSA 10</text>

  <!-- "should" -->
  <text x="640" y="460" text-anchor="middle" font-family="system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="80" font-weight="300" letter-spacing="2" fill="#ffffff" opacity="0.6">should i</text>

  <!-- "slab" with gold gradient -->
  <text x="640" y="545" text-anchor="middle" font-family="system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="110" font-weight="900" letter-spacing="-3" fill="url(#gold)">slab?</text>

  <!-- Tagline -->
  <text x="640" y="600" text-anchor="middle" font-family="system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif" font-size="20" font-weight="400" fill="#ffffff" opacity="0.4" letter-spacing="3">KNOW BEFORE YOU GRADE</text>

  <!-- Corner brackets -->
  <g opacity="0.2" stroke="url(#gold)" stroke-width="2" fill="none">
    <polyline points="30,60 30,30 60,30"/>
    <polyline points="1220,30 1250,30 1250,60"/>
    <polyline points="30,580 30,610 60,610"/>
    <polyline points="1220,610 1250,610 1250,580"/>
  </g>
</svg>


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)