{"id":"309146a5-f1b4-46b3-90a6-fceaed02f7c0","entityType":"agent","slug":"clawhub-chenyuan99-fleece","name":"fleece","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chenyuan99-fleece","canonicalPath":"/agent/clawhub-chenyuan99-fleece","generatedAt":"2026-10-10T17:36:43.066Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":null},"description":"Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli. Skill: fleece Owner: chenyuan99 Summary: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes,","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.4K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17ej20pbgf1t4n63yvq27gzh183fzvq:fleece","sourceUrl":"https://clawhub.ai/chenyuan99/fleece","homepage":"https://clawhub.ai/chenyuan99/skills/fleece","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chenyuan99/fleece","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chenyuan99/skills/fleece","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":63,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, applicati"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":null},"stars":null,"forks":null,"downloads":1397,"packageName":null,"latestVersion":"1.6.1","tractionLabel":"1.4K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T14:04:15.736Z","lastCrawledAt":"2026-10-10T14:04:15.736Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T14:04:15.736Z","lastVerifiedAt":null,"highlights":[{"version":"1.6.1","createdAt":"2026-08-04T19:12:22.707Z","changelog":"Automated publish from ba1268f4027707c7df196b0b18a746afaf71284c","fileCount":96,"zipByteSize":200701},{"version":"1.6.0","createdAt":"2026-05-19T00:10:25.866Z","changelog":"Fix description frontmatter (remove embedded quotes); add metadata block; sync with skills.sh registry format; distribute to 55+ agents via npx skills add chenyuan99/fleece","fileCount":44,"zipByteSize":76483},{"version":"1.5.1","createdAt":"2026-05-19T00:07:06.103Z","changelog":"Automated publish from 384fd5ff8dcc1012d5f7cd2a5098d79db7faa242","fileCount":43,"zipByteSize":75089},{"version":"1.5.0","createdAt":"2026-05-18T23:11:28.462Z","changelog":"Add spending profile system: fleece profile show/set/unset/fields; wallet, roi, and recommend auto-inject profile context","fileCount":2,"zipByteSize":3485},{"version":"1.4.0","createdAt":"2026-05-18T23:08:29.949Z","changelog":"Add profile system: fleece profile show/set/unset/fields; wallet, roi, and recommend auto-inject profile context","fileCount":2,"zipByteSize":3144},{"version":"1.3.0","createdAt":"2026-05-18T21:19:35.546Z","changelog":"MCC-enriched workflows across all skills: wallet gap analysis, precise rates lookup, MCC-informed recommendations, merchant trigger phrases","fileCount":2,"zipByteSize":3145},{"version":"1.2.1","createdAt":"2026-05-18T21:13:35.634Z","changelog":"Add fleece-mcc skill for merchant category code lookup","fileCount":2,"zipByteSize":2614},{"version":"1.2.0","createdAt":"2026-05-18T21:11:19.314Z","changelog":"Add fleece mcc: offline MCC code lookup with wallet cross-reference","fileCount":2,"zipByteSize":2614}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17ej20pbgf1t4n63yvq27gzh183fzvq:fleece","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T17:36:43.063Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chenyuan99-fleece/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":null},"readme":"Skill: fleece\n\nOwner: chenyuan99\n\nSummary: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\n\nTags: amex:1.6.0, brave-search:1.6.0, capital-one:1.6.0, chase:1.6.0, citi:1.6.0, credit-cards:1.6.0, dining:1.6.0, finance:1.6.0, gas:1.6.0, groceries:1.6.0, latest:1.6.1, mcc:1.6.0, merchant-category:1.6.0, miles:1.6.0, points:1.6.0, profile:1.6.0, recommendations:1.6.0, research:1.6.0, rewards:1.6.0, transfer-partners:1.6.0, travel:1.6.0, wallet:1.6.0\n\nVersion history:\n\nv1.6.1 | 2026-08-04T19:12:22.707Z | user\n\nAutomated publish from ba1268f4027707c7df196b0b18a746afaf71284c\n\nv1.6.0 | 2026-05-19T00:10:25.866Z | user\n\nFix description frontmatter (remove embedded quotes); add metadata block; sync with skills.sh registry format; distribute to 55+ agents via npx skills add chenyuan99/fleece\n\nv1.5.1 | 2026-05-19T00:07:06.103Z | user\n\nAutomated publish from 384fd5ff8dcc1012d5f7cd2a5098d79db7faa242\n\nv1.5.0 | 2026-05-18T23:11:28.462Z | user\n\nAdd spending profile system: fleece profile show/set/unset/fields; wallet, roi, and recommend auto-inject profile context\n\nv1.4.0 | 2026-05-18T23:08:29.949Z | user\n\nAdd profile system: fleece profile show/set/unset/fields; wallet, roi, and recommend auto-inject profile context\n\nv1.3.0 | 2026-05-18T21:19:35.546Z | user\n\nMCC-enriched workflows across all skills: wallet gap analysis, precise rates lookup, MCC-informed recommendations, merchant trigger phrases\n\nv1.2.1 | 2026-05-18T21:13:35.634Z | user\n\nAdd fleece-mcc skill for merchant category code lookup\n\nv1.2.0 | 2026-05-18T21:11:19.314Z | user\n\nAdd fleece mcc: offline MCC code lookup with wallet cross-reference\n\nv1.1.1 | 2026-05-18T20:49:03.111Z | user\n\nFront-load conversational query language in description for better search ranking\n\nv1.1.0 | 2026-05-18T20:42:10.841Z | user\n\nImproved SEO: richer description with issuer names and use-case keywords, added example trigger phrases\n\nv1.0.3 | 2026-05-18T20:36:40.780Z | user\n\nAdd flights and hotels redemption commands\n\nv1.0.2 | 2026-05-18T20:30:32.227Z | user\n\nAdd flights and hotels redemption commands (merged from pointsyeah-cli)\n\nv1.0.1 | 2026-05-18T17:19:50.368Z | user\n\nAutomated publish from 24d64e6bfae68d1f52346643b0871d4a5400ec4e\n\nv1.0.0 | 2026-05-18T17:10:39.112Z | auto\n\n- Initial release of Fleece: a CLI tool for live US credit card research using Brave Search.\n- Provides full credit card reports, earning rates, transfer partners, statement credits, recent news, card comparisons, wallet/portfolio analysis, ROI calculations, and personalized recommendations.\n- All command outputs are in JSON for easy programmatic use.\n- Supports stdin piping for card names and profiles.\n- Covers major US issuers including Amex, Chase, Citi, Capital One, and more.\n\nArchive index:\n\nArchive v1.6.1: 96 files, 200701 bytes\n\nFiles: Advertiser Disclosure.md (777b), app.yaml (43b), assets/default_card.svg (786b), CLAUDE.md (7202b), cli.py (32854b), db.py (9974b), docs/CNAME (12b), docs/commands.html (47580b), docs/DESIGN.md (4492b), docs/index.html (40378b), docs/ios.html (23648b), docs/privacy-policy.html (11636b), docs/robots.txt (66b), docs/SEO.md (9250b), docs/sitemap.xml (747b), fleece.py (11244b), GEMINI.md (1851b), image_service.py (5843b), install.sh (3832b), ios/apple-foundation-models.md (11792b), ios/appstore-metadata.md (5826b), ios/chat-feature-discussion.md (6037b), ios/decision-log.md (8136b), ios/FleeceApp/AppState.swift (8369b), ios/FleeceApp/Assets.xcassets/AppIcon.appiconset/Contents.json (205b), ios/FleeceApp/Assets.xcassets/Contents.json (60b), ios/FleeceApp/Config.swift (275b), ios/FleeceApp/ContentView.swift (1469b), ios/FleeceApp/FleeceApp.swift (1484b), ios/FleeceApp/Intents/AskFleeceIntent.swift (4279b), ios/FleeceApp/Managers/LocationManager.swift (2110b), ios/FleeceApp/Managers/NotificationManager.swift (3202b), ios/FleeceApp/Managers/PlacesService.swift (2293b), ios/FleeceApp/Models/ChatMessage.swift (820b), ios/FleeceApp/Models/CreditCard.swift (1624b), ios/FleeceApp/Models/FeeCalendarWidgetData.swift (1278b), ios/FleeceApp/Models/FleeceWidgetData.swift (1186b), ios/FleeceApp/Models/MCCCategory.swift (2684b), ios/FleeceApp/Models/NearbyPlace.swift (1350b), ios/FleeceApp/Models/Recommendation.swift (622b), ios/FleeceApp/Models/SpendingProfile.swift (1485b), ios/FleeceApp/Services/CardDatabase.swift (18186b), ios/FleeceApp/Services/CardExplanationService.swift (2329b), ios/FleeceApp/Services/CardRecommender.swift (2131b), ios/FleeceApp/Services/ChatService.swift (7111b), ios/FleeceApp/Services/ChatTools.swift (8106b), ios/FleeceApp/Services/KnowledgeBase.swift (26957b), ios/FleeceApp/Services/WalletDetectionService.swift (2349b), ios/FleeceApp/Views/AskView.swift (8899b), ios/FleeceApp/Views/HomeView.swift (7236b), ios/FleeceApp/Views/RecommendationCardView.swift (8355b), ios/FleeceApp/Views/SettingsView.swift (9122b), ios/FleeceApp/Views/WalletView.swift (7359b), ios/FleeceWidget/FleeceWidget.swift (14830b), ios/ios-features-backlog.md (10451b), ios/ios-known-issues.md (10883b), ios/project.yml (3226b), ios/README.md (3929b), ios/release.sh (1122b), kb/benefits/lounge-access.md (4981b), kb/benefits/travel-protections.md (6703b), kb/card/business.md (5084b), kb/card/personal.md (7660b), kb/index.md (7573b), kb/redemption/valuations.md (7493b), kb/rules/application.md (6243b), kb/transfer/partners.md (8869b), LICENSE (1066b), migrate.py (960b), pages/credit_cards.py (14618b), pages/my_credit_cards.py (15313b), plan.md (5732b), pointsyeah.py (1477b), prompts/agent_system_prompt.py (1502b), pyproject.toml (1136b), README.md (4786b), reference/Analyzer.md (0b), requirements-test.txt (25b), requirements.txt (188b), skill-card.md (2674b)\n\nFile v1.6.1:SKILL.md\n\n---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.6.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\", \"Do Bilt points transfer to Hyatt?\"\n- **Point valuations**: \"How much are Chase UR points worth?\", \"Best way to redeem Amex MR?\", \"What CPP can I get from Hyatt?\", \"Is it worth transferring to Flying Blue?\"\n- **Application rules**: \"What is Chase 5/24?\", \"Can I get the Sapphire bonus again?\", \"Am I eligible for the Amex Gold offer?\", \"How long before I can apply for Citi again?\", \"Does the Amex once-per-lifetime rule apply here?\"\n- **Lounge access**: \"Which cards get me into Centurion Lounges?\", \"Does Venture X include Priority Pass?\", \"Best card for airport lounge access?\", \"Can I bring guests to Chase Sapphire Lounges?\"\n- **Travel protections**: \"Does Sapphire Reserve cover rental cars?\", \"What trip delay coverage does Amex Platinum have?\", \"Which card has the best travel insurance?\", \"Does Freedom Flex have cell phone protection?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\", \"My preferred airline is United MileagePlus\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and research commands become personalised.\n\n```bash\n# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields\n```\n\nOnce set, spend values are pulled automatically:\n```bash\n# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece recommend \"travel rewards\"\n```\n\n## MCC-enriched workflow\n\nThe bundled MCC dataset (981 codes, offline) enables a precise end-to-end flow:\n\n```\nfleece wallet            → coverage map, overlaps, gaps, next-card suggestions\nfleece mcc 5411          → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap\n```\n\n**Common MCCs to know:**\n\n| MCC  | Category | Typical card bonus |\n|------|----------|--------------------|\n| 5411 | Grocery Stores | Amex Gold 4x, BofA Cash Rewards 3% |\n| 5812 | Restaurants | Amex Gold 4x, CSP 3x |\n| 5814 | Fast Food | Varies — not always same as 5812 |\n| 5541 | Gas Stations | Citi Custom Cash 5x, BofA 3% |\n| 4511 | Airlines | Amex Platinum 5x, CSR 3x |\n| 7011 | Hotels | Amex Platinum 5x (Amex Travel), CSR 3x |\n| 4111 | Transit / Commuter | CSR 3x, Bilt 3x |\n| 5912 | Drugstores | Chase Freedom Flex 3x |\n\nUse `fleece mcc <code>` (no API key needed) to resolve any MCC before running a rates or wallet query.\n\n## Prerequisites\n\n```bash\n# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>\n```\n\n## Commands\n\n### Full card report\n```bash\nfleece card \"<card name>\" --json\n```\nReturns fees, welcome offer, earning rates, credits, benefits, and strategy.\n\n### Earning rates\n```bash\nfleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json\n```\n\n### Transfer partners\n```bash\nfleece partners \"<card name>\" --json\n```\nReturns airline and hotel partners with ratios and transfer timing.\n\n### Statement credits\n```bash\nfleece credits \"<card name>\" --json\n```\nReturns all credits with amounts, cadence, and enrollment requirements.\n\n### Recent news (past month)\n```bash\nfleece news \"<card name>\" --json\n```\nFreshness-filtered to the past month.\n\n### Side-by-side comparison\n```bash\nfleece compare \"<card A>\" \"<card B>\" --json\nfleece compare \"<card A>\" \"<card B>\" --aspects \"fees,rewards,credits\" --json\n```\n\n### Portfolio / wallet analysis\n```bash\nfleece wallet --json\n```\nFetches live earning-rate data for every card in the local wallet DB, then\nreturns structured research for computing a coverage map. Requires BRAVE_API_KEY.\n\nJSON output:\n```json\n{\n  \"command\": \"wallet\",\n  \"cards\": [\"Amex Gold\", \"Chase Sapphire Preferred\"],\n  \"research\": {\n    \"Amex Gold\": \"<snippet>\",\n    \"Chase Sapphire Preferred\": \"<snippet>\"\n  },\n  \"profile\": \"dining $500/mo, travel $300/mo ...\",\n  \"analysis_prompt\": \"Using the research above, compute: 1. Category coverage map ...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nManage the wallet with the `cards` subcommand (no API key needed):\n```bash\nfleece cards list                              # list saved cards with annual fees\nfleece cards add \"Chase Sapphire Preferred\" --fee \"$95\"\nfleece cards remove \"Amex Gold\"\n```\n\n### First-year ROI\n```bash\nfleece roi \"<card name>\" --travel <monthly $> --dining <monthly $> --other <monthly $> --json\n```\n\n### Profile-based recommendations\n```bash\nfleece recommend \"<spending profile>\" --json\nfleece recommend \"<spending profile>\" --preferences \"<preferences>\" --json\n```\n\n## Output format\n\nEvery command with `--json` returns:\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"...\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nOn error, `ok` is `false` and `error` contains the message. Always check `ok` before using `result`.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Search / tool error (Brave API failure) |\n| `2` | `BRAVE_API_KEY` not set |\n\n## Stdin piping\n\nThe primary argument on any single-card command accepts `-` to read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | fleece card - --json\necho \"high dining spend\" | fleece recommend - --json\n```\n\n## Coverage\n\nSupports all major US issuers: Amex, Bank of America, Barclays, Bilt, Capital One,\nChase, Citi, Discover, Robinhood, U.S. Bank, Wells Fargo.\n\n## Redemption — PointsYeah URL generation\n\nNo API key required. These commands generate best-effort PointsYeah deep-link URLs\nand optionally open them in the browser. Pure stdlib, no external calls.\n\n### Flight search\n```bash\nfleece flights JFK LAX --date 2026-06-01 --json\nfleece flights JFK LHR --date 2026-06-01 --return 2026-06-15 --adults 2 --cabin business --open\n```\n\nOptions: `--date` (required), `--return`, `--adults` (default 1), `--cabin` (economy | premium-economy | business | first), `--open`, `--json`\n\n### Hotel search\n```bash\nfleece hotels \"Tokyo\" --checkin 2026-06-01 --checkout 2026-06-07 --json\nfleece hotels \"Jersey City\" --checkin 2026-04-10 --checkout 2026-04-12 --guests 2 --rooms 1 --open\n```\n\nOptions: `--checkin` (required), `--checkout` (required), `--guests` (default 1), `--rooms` (default 1), `--open`, `--json`\n\n### JSON output format\n```json\n{\n  \"command\": \"flights\",\n  \"origin\": \"JFK\", \"destination\": \"LAX\", \"date\": \"2026-06-01\",\n  \"return_date\": null, \"adults\": 1, \"cabin\": \"economy\",\n  \"url\": \"https://www.pointsyeah.com/?type=flights&...\",\n  \"ok\": true, \"error\": null\n}\n```\n\n> PointsYeah does not publish a stable deep-link spec. If the URL stops working,\n> the query parameters still serve as a useful manual search reference.\n\nFile v1.6.1:skills/fleece-gmail-spend/SKILL.md\n\n---\nname: fleece-gmail-spend\ndescription: Analyze purchase receipts, order confirmations, travel bookings, subscriptions, and refund emails in a connected Gmail account to estimate spending habits, then compare those habits with cards saved in the Fleece wallet. Use for Gmail-based consumption analysis, spend-category summaries, card-position reviews, missed-rewards estimates, wallet coverage gaps, best-card-by-category guidance, and proposed Fleece spending-profile updates.\n---\n\n# Fleece Gmail Spend\n\nCombine read-only Gmail evidence with Fleece wallet data to show how well the user's current cards fit actual spending. Treat email-derived totals as estimates, not a bank-statement substitute.\n\n## Workflow\n\n1. Establish the analysis window. Use the user's dates; otherwise analyze the most recent 90 days and state that scope.\n2. Read the current Fleece position before recommending changes:\n   ```bash\n   fleece cards list --json\n   fleece profile show --json\n   ```\n3. Search Gmail for transaction evidence. Prefer Gmail-native search, then batch-read shortlisted messages. Start with queries such as:\n   ```text\n   newer_than:90d (subject:(receipt OR order OR purchase OR invoice) OR from:(uber.com doordash.com instacart.com amazon.com))\n   newer_than:90d (subject:(booking OR itinerary OR reservation) OR from:(airbnb.com expedia.com))\n   newer_than:90d subject:(refund OR refunded OR cancellation)\n   ```\n   Adapt merchant and issuer terms to the mailbox. Search broad categories separately when one query would truncate coverage.\n4. Extract only the transaction date, merchant, amount, currency, likely category, order status, and source message ID. Do not expose full message bodies or unrelated personal data.\n5. Normalize and deduplicate:\n   - Count the final charged total once, not order, shipping, and delivery updates separately.\n   - Subtract confirmed refunds and exclude canceled orders.\n   - Separate taxes, tips, and fees only when clearly itemized; otherwise retain the final total.\n   - Keep non-USD transactions separate unless a reliable conversion amount appears in the email.\n   - Exclude marketing offers, reward summaries, balance notices, and statements that duplicate itemized receipts.\n6. Classify spending into Fleece profile categories: dining, groceries, travel, gas, and other. Mark uncertain classifications and avoid inventing MCCs. Use `fleece mcc <code> --wallet --json` only when an MCC is explicitly present.\n7. Calculate monthly estimates using only covered days. Report total captured spend, monthly average, category share, recurring merchants or subscriptions, and evidence coverage.\n8. Compare the observed mix with current cards:\n   ```bash\n   fleece wallet --json\n   ```\n   If `BRAVE_API_KEY` is unavailable, use saved card reward metadata and label the comparison partial. Do not guess current benefits or annual fees.\n9. Identify the best current card for each observed category, weak or overlapping coverage, explicit card misuse, and conservative missed-rewards ranges. Recommend a new card only when the gain exceeds annual fees and switching complexity.\n10. Propose Fleece profile updates, but do not write them without explicit confirmation. After confirmation, use one command per field:\n    ```bash\n    fleece profile set dining_monthly <amount>\n    fleece profile set groceries_monthly <amount>\n    fleece profile set travel_monthly <amount>\n    fleece profile set gas_monthly <amount>\n    fleece profile set other_monthly <amount>\n    ```\n\n## Safety and Evidence Rules\n\n- Keep Gmail access read-only. Never send, label, archive, delete, or otherwise modify mail.\n- Never request or reveal full card numbers, security codes, passwords, or authentication codes. Use last four digits only to map an explicit purchase to a saved card.\n- Do not persist a transaction ledger unless the user explicitly asks. Prefer aggregates.\n- Distinguish evidence from inference. Gmail receipts undercount cash purchases, merchants that do not email, shared-account purchases, and deleted mail.\n- Do not claim a purchase used a particular card unless the receipt identifies it.\n- Do not recommend applying for, closing, or product-changing a card solely from a short or low-coverage sample.\n\n## Output\n\nLead with the wallet-fit conclusion, then provide:\n\n1. Scope and coverage: dates, messages reviewed, usable transactions, exclusions, and currencies.\n2. Spending profile: category totals, monthly estimates, share, and confidence.\n3. Current-card fit: best card by category, overlaps, gaps, and observed misuse.\n4. Estimated upside: conservative missed-rewards range and assumptions.\n5. Actions: card-use changes first, profile updates requiring confirmation, then at most two new-card candidates when justified.\n\nUse tables when comparing three or more categories. Include aggregate provenance such as message counts and representative merchants, not private message content.\n\n## Failure Modes\n\n- If Gmail is unavailable, ask the user to connect the correct Gmail account or provide an exported receipt list.\n- If the Fleece wallet is empty, ask the user to add cards with `fleece cards add`; still provide the spending summary.\n- If search coverage is sparse, broaden the date window or merchant queries and report low confidence.\n- If live card research is unavailable, stop at a partial wallet comparison and offer the exact command to rerun after `BRAVE_API_KEY` is configured.\n\nFile v1.6.1:skills/fleece/SKILL.md\n\n---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.6.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\", \"Do Bilt points transfer to Hyatt?\"\n- **Point valuations**: \"How much are Chase UR points worth?\", \"Best way to redeem Amex MR?\", \"What CPP can I get from Hyatt?\", \"Is it worth transferring to Flying Blue?\"\n- **Application rules**: \"What is Chase 5/24?\", \"Can I get the Sapphire bonus again?\", \"Am I eligible for the Amex Gold offer?\", \"How long before I can apply for Citi again?\", \"Does the Amex once-per-lifetime rule apply here?\"\n- **Lounge access**: \"Which cards get me into Centurion Lounges?\", \"Does Venture X include Priority Pass?\", \"Best card for airport lounge access?\", \"Can I bring guests to Chase Sapphire Lounges?\"\n- **Travel protections**: \"Does Sapphire Reserve cover rental cars?\", \"What trip delay coverage does Amex Platinum have?\", \"Which card has the best travel insurance?\", \"Does Freedom Flex have cell phone protection?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\", \"My preferred airline is United MileagePlus\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and research commands become personalised.\n\n```bash\n# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields\n```\n\nOnce set, spend values are pulled automatically:\n```bash\n# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece recommend \"travel rewards\"\n```\n\n## MCC-enriched workflow\n\nThe bundled MCC dataset (981 codes, offline) enables a precise end-to-end flow:\n\n```\nfleece wallet            → coverage map, overlaps, gaps, next-card suggestions\nfleece mcc 5411          → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap\n```\n\n**Common MCCs to know:**\n\n| MCC  | Category | Typical card bonus |\n|------|----------|--------------------|\n| 5411 | Grocery Stores | Amex Gold 4x, BofA Cash Rewards 3% |\n| 5812 | Restaurants | Amex Gold 4x, CSP 3x |\n| 5814 | Fast Food | Varies — not always same as 5812 |\n| 5541 | Gas Stations | Citi Custom Cash 5x, BofA 3% |\n| 4511 | Airlines | Amex Platinum 5x, CSR 3x |\n| 7011 | Hotels | Amex Platinum 5x (Amex Travel), CSR 3x |\n| 4111 | Transit / Commuter | CSR 3x, Bilt 3x |\n| 5912 | Drugstores | Chase Freedom Flex 3x |\n\nUse `fleece mcc <code>` (no API key needed) to resolve any MCC before running a rates or wallet query.\n\n## Prerequisites\n\n```bash\n# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>\n```\n\n## Commands\n\n### Full card report\n```bash\nfleece card \"<card name>\" --json\n```\nReturns fees, welcome offer, earning rates, credits, benefits, and strategy.\n\n### Earning rates\n```bash\nfleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json\n```\n\n### Transfer partners\n```bash\nfleece partners \"<card name>\" --json\n```\nReturns airline and hotel partners with ratios and transfer timing.\n\n### Statement credits\n```bash\nfleece credits \"<card name>\" --json\n```\nReturns all credits with amounts, cadence, and enrollment requirements.\n\n### Recent news (past month)\n```bash\nfleece news \"<card name>\" --json\n```\nFreshness-filtered to the past month.\n\n### Side-by-side comparison\n```bash\nfleece compare \"<card A>\" \"<card B>\" --json\nfleece compare \"<card A>\" \"<card B>\" --aspects \"fees,rewards,credits\" --json\n```\n\n### Portfolio / wallet analysis\n```bash\nfleece wallet --json\n```\nFetches live earning-rate data for every card in the local wallet DB, then\nreturns structured research for computing a coverage map. Requires BRAVE_API_KEY.\n\nJSON output:\n```json\n{\n  \"command\": \"wallet\",\n  \"cards\": [\"Amex Gold\", \"Chase Sapphire Preferred\"],\n  \"research\": {\n    \"Amex Gold\": \"<snippet>\",\n    \"Chase Sapphire Preferred\": \"<snippet>\"\n  },\n  \"profile\": \"dining $500/mo, travel $300/mo ...\",\n  \"analysis_prompt\": \"Using the research above, compute: 1. Category coverage map ...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nManage the wallet with the `cards` subcommand (no API key needed):\n```bash\nfleece cards list                              # list saved cards with annual fees\nfleece cards add \"Chase Sapphire Preferred\" --fee \"$95\"\nfleece cards remove \"Amex Gold\"\n```\n\n### First-year ROI\n```bash\nfleece roi \"<card name>\" --travel <monthly $> --dining <monthly $> --other <monthly $> --json\n```\n\n### Profile-based recommendations\n```bash\nfleece recommend \"<spending profile>\" --json\nfleece recommend \"<spending profile>\" --preferences \"<preferences>\" --json\n```\n\n## Output format\n\nEvery command with `--json` returns:\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"...\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nOn error, `ok` is `false` and `error` contains the message. Always check `ok` before using `result`.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Search / tool error (Brave API failure) |\n| `2` | `BRAVE_API_KEY` not set |\n\n## Stdin piping\n\nThe primary argument on any single-card command accepts `-` to read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | fleece card - --json\necho \"high dining spend\" | fleece recommend - --json\n```\n\n## Coverage\n\nSupports all major US issuers: Amex, Bank of America, Barclays, Bilt, Capital One,\nChase, Citi, Discover, Robinhood, U.S. Bank, Wells Fargo.\n\n## Redemption — PointsYeah URL generation\n\nNo API key required. These commands generate best-effort PointsYeah deep-link URLs\nand optionally open them in the browser. Pure stdlib, no external calls.\n\n### Flight search\n```bash\nfleece flights JFK LAX --date 2026-06-01 --json\nfleece flights JFK LHR --date 2026-06-01 --return 2026-06-15 --adults 2 --cabin business --open\n```\n\nOptions: `--date` (required), `--return`, `--adults` (default 1), `--cabin` (economy | premium-economy | business | first), `--open`, `--json`\n\n### Hotel search\n```bash\nfleece hotels \"Tokyo\" --checkin 2026-06-01 --checkout 2026-06-07 --json\nfleece hotels \"Jersey City\" --checkin 2026-04-10 --checkout 2026-04-12 --guests 2 --rooms 1 --open\n```\n\nOptions: `--checkin` (required), `--checkout` (required), `--guests` (default 1), `--rooms` (default 1), `--open`, `--json`\n\n### JSON output format\n```json\n{\n  \"command\": \"flights\",\n  \"origin\": \"JFK\", \"destination\": \"LAX\", \"date\": \"2026-06-01\",\n  \"return_date\": null, \"adults\": 1, \"cabin\": \"economy\",\n  \"url\": \"https://www.pointsyeah.com/?type=flights&...\",\n  \"ok\": true, \"error\": null\n}\n```\n\n> PointsYeah does not publish a stable deep-link spec. If the URL stops working,\n> the query parameters still serve as a useful manual search reference.\n\nFile v1.6.1:ios/README.md\n\n# Fleece iOS App\n\nNative SwiftUI iPhone app that:\n\n1. Tracks your location with CoreLocation\n2. Uses **Apple MapKit `MKLocalSearch`** (free, no API key) to identify the store you're in\n3. Maps `MKPointOfInterestCategory` → **MCC category** (dining, groceries, gas, hotels, etc.)\n4. Ranks all cards by effective reward rate for that category\n5. Fires a **local push notification**: *\"Use Amex Gold · 4x Dining = 7.2% back (Amex MR)\"*\n\n**Zero per-request cost.** All place lookups stay on-device via Apple's MapKit framework.\n\n---\n\n## Setup\n\nNo API keys needed. Just:\n\n1. Open Xcode → create a new **iOS App** project\n   - Product Name: `FleeceApp`\n   - Interface: **SwiftUI** / Language: **Swift**\n   - Bundle ID: `io.getfleece.app`\n\n2. Drag all `.swift` files from this directory into the Project Navigator (preserving folder groups)\n\n3. Replace the generated `Info.plist` with the one in this directory\n\n4. Under **Signing & Capabilities**, add:\n   - **Background Modes → Location updates** (optional, for background detection)\n\n5. Build and run on a physical device (CoreLocation requires real hardware)\n\n---\n\n## Architecture\n\n```\nFleeceApp/\n├── FleeceApp.swift          — App entry; requests location + notification permissions\n├── ContentView.swift        — TabView: Home / Wallet / Settings\n├── AppState.swift           — Central @ObservableObject: orchestrates search + wallet\n├── Config.swift             — Detection radius, notification cooldown constants\n│\n├── Views/\n│   ├── HomeView.swift               — MapKit map + current place banner + card scroll\n│   ├── RecommendationCardView.swift — Horizontal card chips + full recommendations sheet\n│   ├── WalletView.swift             — Add/remove cards from wallet\n│   └── SettingsView.swift           — App info (no API key needed)\n│\n├── Managers/\n│   ├── LocationManager.swift     — CLLocationManager wrapper (@MainActor)\n│   ├── PlacesService.swift       — MKLocalSearch wrapper (free, actor)\n│   └── NotificationManager.swift — UNUserNotificationCenter, 5-min cooldown\n│\n├── Models/\n│   ├── MCCCategory.swift   — MKPointOfInterestCategory → MCC mapping\n│   ├── CreditCard.swift    — Card model + Color(hex:) extension\n│   ├── NearbyPlace.swift   — Place model + MKMapItem conversion\n│   └── Recommendation.swift — Ranked recommendation result\n│\n└── Services/\n    ├── CardDatabase.swift   — 9 hard-coded US cards (Chase, Amex, Citi, CapOne, Bilt)\n    └── CardRecommender.swift — Sorts cards by effective rate, wallet cards first\n```\n\n## MKPointOfInterestCategory → MCCCategory Mapping\n\n| MCCCategory | MKPointOfInterestCategory values |\n|---|---|\n| Dining | restaurant, cafe, bakery, brewery, winery, nightlife |\n| Groceries | foodMarket |\n| Gas | gasStation |\n| Hotels | hotel |\n| Flights | airport |\n| Transit | publicTransport |\n| Drugstore | pharmacy |\n| Entertainment | movieTheater, stadium, musicVenue, amusementPark, bowling, zoo, aquarium |\n| Shopping | store, clothing |\n\n## Card Database (9 cards)\n\n| Card | Top Category | Effective Rate |\n|---|---|---|\n| Amex Gold | Dining / Groceries | 4x → 7.2% |\n| Amex Platinum | Flights / Hotels | 5x → 10% |\n| Chase Sapphire Reserve | Dining / Travel | 3x → 4.5% |\n| Chase Sapphire Preferred | Dining / Groceries | 3x → 3.75% |\n| Chase Freedom Unlimited | Dining / Drugstore | 3x → 3% + 1.5x base |\n| Amex Blue Cash Preferred | Groceries / Streaming | 6x → 6% cash |\n| Bilt Mastercard | Dining | 3x → 4.5% |\n| Capital One Venture X | Hotels / Flights | 10x → 17% |\n| Citi Double Cash | Everything | 2x → 2% cash |\n\n## Notification Example\n\n```\nTitle:  🍽️ Ippudo Ramen NYC\nBody:   Use Gold Card · 4x Dining = 7.2% back (Amex MR)\nAction: View All Cards  →  opens RecommendationsSheetView\n```\n\nFile v1.6.1:README.md\n\n# Fleece — Credit Card Research & Redemption\n\n[![PyPI version](https://img.shields.io/pypi/v/fleece-cli?color=FFD100&label=fleece-cli)](https://pypi.org/project/fleece-cli/)\n[![PyPI downloads](https://img.shields.io/pypi/dm/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![Python](https://img.shields.io/pypi/pyversions/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-FFD100.svg)](https://github.com/chenyuan99/fleece/blob/main/LICENSE)\n[![Publish to PyPI](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml/badge.svg)](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml)\n[![ClawHub](https://img.shields.io/badge/ClawHub-fleece%401.5.0-FFD100)](https://clawhub.ai)\n[![Website](https://img.shields.io/website?url=https%3A%2F%2Fgetfleece.io&color=FFD100&label=getfleece.io)](https://getfleece.io/)\n\n> Find the best card for deal saviors.\n\nFleece is a free, open-source credit card research and award redemption toolkit. It provides live data via Brave Search — no stale training data. Every command outputs clean JSON, making it easy to plug into AI agent workflows.\n\n---\n\n## Quick Start\n\n```bash\npip install fleece-cli\nexport BRAVE_API_KEY=<your_key>   # optional — offline commands work without it\n\nfleece card \"Amex Gold\"           # full card report\nfleece wallet                     # portfolio analysis\nfleece mcc 5812                   # MCC lookup (no API key needed)\nfleece flights JFK NRT --date 2026-06-01 --cabin business --open\n```\n\n### Install as an agent skill (55+ agents)\n\n```bash\nnpx skills add chenyuan99/fleece\n```\n\nWorks with Claude Code, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, Codex, Warp, Kiro, and more — all from one command.\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Fees, welcome offer, earning rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, and timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side card comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps |\n| `fleece roi \"<name>\"` | First-year ROI estimate |\n| `fleece recommend \"<profile>\"` | Personalized card recommendations |\n\n### Offline (no API key needed)\n\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Look up a Merchant Category Code (981 codes bundled) |\n| `fleece mcc <code> --wallet` | Cross-reference MCC with your saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile set <field> <value>` | Save your spending profile |\n| `fleece profile show` | View your profile |\n\nAll commands support `--json` for agent-friendly output and `-` to read from stdin.\n\n## Spending Profile\n\nSet your profile once — `fleece wallet`, `fleece roi`, and `fleece recommend` use it automatically:\n\n```bash\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set annual_fee_tolerance 550\n\nfleece roi \"Amex Gold\"      # spend values pulled from profile\nfleece wallet               # gap analysis tailored to your spend\n```\n\n## AI Agent Integration\n\n### Universal (55+ agents) — recommended\n```bash\nnpx skills add chenyuan99/fleece\n```\nInstalls to Claude Code, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, Codex, Warp, Kiro, Continue, and Junie in one command.\n\n### Platform-specific\n```bash\nbash install.sh --claude    # Claude Code slash commands\nbash install.sh --agents    # OpenClaw / Codex SKILL.md\nbash install.sh --gemini    # Gemini CLI (GEMINI.md)\nbash install.sh --copilot   # GitHub Copilot\nbash install.sh --cursor    # Cursor\nbash install.sh --windsurf  # Windsurf\nbash install.sh --all       # everything above\n```\n\n### ClawHub Registry\n```bash\nclawhub install fleece   # fleece@1.5.0\n```\n\n## Chatbot\n\nA Streamlit conversational interface is also included:\n\n```bash\npip install -r requirements.txt\nOPENAI_API_KEY=<key> streamlit run fleece.py\n```\n\n## Development\n\n```bash\ngit clone https://github.com/chenyuan99/fleece.git\ncd fleece\npip install -e .\nexport BRAVE_API_KEY=<your_key>\nfleece --help\n```\n\n### Running tests\n```bash\npip install pytest\npytest -q\n```\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n## Author\n\n[@chenyuan99](https://github.com/chenyuan99) · [getfleece.io](https://getfleece.io/)\n\nFile v1.6.1:_meta.json\n\n{\n  \"ownerId\": \"kn78p1g6xzcqm9fyegreqrft0n80bazp\",\n  \"slug\": \"fleece\",\n  \"version\": \"1.6.1\",\n  \"publishedAt\": 1785870742707\n}\n\nFile v1.6.1:Advertiser Disclosure.md\n\nAdvertiser Disclosure:\nSome of the card links and other products that appear on this website are from companies which AskSebby will earn an affiliate commission or referral bonus. AskSebby is part of an affiliate sales network and receives compensation for sending traffic to partner sites, such as CreditCards.com. This compensation may impact how and where products appear on this site (including, for example, the order in which they appear). This site does not include all credit card companies or all available credit card offers.\n\nEditorial Note:\nOpinions expressed here are the author's alone, not those of any bank, credit card issuer, airlines or hotel chain, vendors or companies, and have not been reviewed, approved, or otherwise endorsed by any of these entities.\n\nFile v1.6.1:CLAUDE.md\n\n# Fleece — Credit Card Research & Redemption\n\n## Project Overview\n\n**Fleece** is a credit card research and award redemption toolkit. Tagline: \"Find the best card for deal saviors.\"\n\nIt has two surfaces:\n1. **Streamlit chatbot** (`fleece.py`) — conversational AI assistant backed by OpenAI\n2. **CLI** (`cli.py`) — 13 commands for card research, wallet analysis, MCC lookup, spending profile, and award redemption\n\nPublished on PyPI as [`fleece-cli`](https://pypi.org/project/fleece-cli/) · current version **0.4.0**\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|---|---|\n| Chatbot frontend | Streamlit |\n| Chatbot LLM | OpenAI (gpt-3.5-turbo, gpt-4, gpt-4o) via LangChain |\n| Chatbot memory | ConversationEntityMemory |\n| CLI framework | Typer |\n| Live research | Brave Search API |\n| Card portfolio | SQLite (`fleece.db`) via `db.py` |\n| MCC dataset | Bundled `mcc_codes.jsonl` (981 codes, offline) |\n| Redemption URLs | `pointsyeah.py` (pure stdlib, no deps) |\n| Language | Python 3.11+ |\n\n---\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Full card report — fees, welcome offer, rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month, freshness-filtered) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps, next-card suggestions |\n| `fleece roi \"<name>\"` | First-year ROI estimate by spend profile |\n| `fleece recommend \"<profile>\"` | Card recommendations for a spending profile |\n\n### Redemption & Profile (no API key needed — work fully offline)\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Offline MCC code lookup (981 codes bundled). Add `--wallet` to cross-reference saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile show` | Display spending profile |\n| `fleece profile set <field> <value>` | Set a profile field |\n| `fleece profile unset <field>` | Clear a profile field |\n| `fleece profile fields` | List all 10 profile fields |\n\nAll commands support `--json` for agent-friendly output and `-` to read arguments from stdin.\n\n### BRAVE_API_KEY\nOptional at startup — checked only when a research command actually runs. `mcc`, `flights`, `hotels`, and `profile` work with no key set.\n\n### Spending Profile\nStored in `fleece.db` (table: `profile`). Fields: `dining_monthly`, `groceries_monthly`, `travel_monthly`, `gas_monthly`, `other_monthly`, `annual_fee_tolerance`, `points_programs`, `home_airport`, `goal`, `preferences`.\n\nOnce set, profile context is automatically injected into:\n- `fleece roi` — pulls spend values when flags not passed\n- `fleece wallet` — tailors gap analysis to the user's actual spend\n- `fleece recommend` — prepends profile context to the search query\n\n---\n\n## Key Files\n\n| File | Purpose |\n|---|---|\n| `cli.py` | Main CLI entry point (Typer app) |\n| `fleece.py` | Streamlit chatbot app |\n| `db.py` | SQLite helpers for card portfolio and spending profile (`fleece.db`) |\n| `pointsyeah.py` | PointsYeah URL generation (pure stdlib, merged from archived `pointsyeah-cli`) |\n| `mcc_codes.jsonl` | Bundled MCC dataset (981 codes, source: greggles/mcc-codes) |\n| `tools/brave_client.py` | Brave Search API client |\n| `tools/credit_card_tools.py` | LangChain tools for the chatbot |\n| `pyproject.toml` | Package config — hatchling build, `fleece` entry point |\n| `install.sh` | Installs skills for Claude Code, OpenClaw, Gemini CLI, Copilot, Cursor, Windsurf |\n| `SKILL.md` | Root-level skill file for `npx skills add chenyuan99/fleece` (skills.sh registry) |\n| `skills/fleece/SKILL.md` | skills.sh directory structure copy |\n| `GEMINI.md` | Gemini CLI project context |\n| `.github/copilot-instructions.md` | GitHub Copilot instructions |\n| `.cursor/rules/fleece.mdc` | Cursor IDE rule |\n| `.windsurfrules` | Windsurf rules |\n\n---\n\n## Agent Skills\n\n### Universal install (55+ agents) — recommended\n```bash\nnpx skills add chenyuan99/fleece\n```\nInstalls to Claude Code, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, Codex, Warp, Kiro, Continue, Junie, and more in one command. Requires a valid `SKILL.md` at `skills/fleece/SKILL.md` in the repo root (already present).\n\n### Claude Code (`/.claude/skills/`)\n13 slash commands installed via `bash install.sh --claude`:\n\n**Research:** `/fleece-card` `/fleece-rates` `/fleece-partners` `/fleece-credits` `/fleece-news` `/fleece-compare` `/fleece-wallet` `/fleece-roi` `/fleece-recommend`\n\n**Redemption:** `/fleece-mcc` `/fleece-flights` `/fleece-hotels`\n\n**Profile:** `/fleece-profile`\n\n### Platform-specific install flags\n| Flag | Platform | File installed |\n|---|---|---|\n| `--claude` | Claude Code | `.claude/skills/fleece-*.md` |\n| `--agents` | OpenClaw / Codex | `.agents/skills/fleece/SKILL.md` |\n| `--gemini` | Gemini CLI | `GEMINI.md` |\n| `--copilot` | GitHub Copilot | `.github/copilot-instructions.md` |\n| `--cursor` | Cursor | `.cursor/rules/fleece.mdc` |\n| `--windsurf` | Windsurf | `.windsurfrules` |\n| `--all` | All of the above | — |\n\n### ClawHub / OpenClaw (`/.agents/skills/fleece/SKILL.md`)\nPublished on ClawHub as `fleece@1.6.0`. Install via `clawhub install fleece` or `bash install.sh --agents`.\n\n### skills.sh / Vercel Agent Skills Registry\n`SKILL.md` at repo root and `skills/fleece/SKILL.md` enable `npx skills add chenyuan99/fleece`. Installs to 55+ agents in one command.\n\n> **IMPORTANT:** The frontmatter `description` field must never contain embedded quotes — they silently break YAML parsing in both ClawHub's vector indexer and the skills.sh CLI. Always use plain unquoted text.\n\n---\n\n## CI/CD\n\n| Workflow | Trigger | Action |\n|---|---|---|\n| `publish.yml` | Push `v*` tag | Build and publish to PyPI via OIDC trusted publishing |\n| `publish-skills.yml` | Push to `main` touching `.agents/skills/` or `.claude/skills/` | Publish to ClawHub via `CLAWHUB_TOKEN` secret |\n\nGitHub environment `pypi` is required for the PyPI workflow (OIDC).\n\n---\n\n## Landing Page\n\n`docs/` is served as GitHub Pages at **https://getfleece.io/**.\n\nContains `index.html`, `sitemap.xml`, `robots.txt`. Submitted to Google Search Console. JSON-LD structured data included.\n\nSEO notes tracked in `docs/SEO.md`.\n\n---\n\n## Infrastructure Notes\n\n- **Databricks**: No resources available. Do not suggest Databricks solutions until provisioned.\n- **pointsyeah-cli**: Archived. All functionality merged into fleece (`pointsyeah.py`, `fleece flights`, `fleece hotels`).\n\n---\n\n## Development Notes\n\n- Author: Yuan Chen\n- Created: March 16, 2025\n- Chatbot uses custom CSS styling (`style.css`)\n- OpenAI API key entered via Streamlit sidebar — not stored\n\n---\n\n## Git Workflow\n\n**Always ask before pushing.** Do not run `git push` without explicit user confirmation. Commits are fine, but pushing to remote requires approval each time.\n\nFile v1.6.1:docs/DESIGN.md\n\n# Fleece — Design Notes\n\nDesign decisions, rationale, and reference for `docs/index.html`.\n\n---\n\n## Color Palette\n\n| Token | Hex | Usage |\n|---|---|---|\n| `--yellow` | `#FFD100` | Primary accent — buttons, badges, logo, highlights |\n| `--black` | `#111111` | Hero background, nav, footer, dark sections |\n| `--white` | `#FFFFFF` | Primary page background, cards |\n| `--gray` | `#F5F5F3` | Alternate section background (About, Workflows) |\n| `--mid` | `#555555` | Secondary text, descriptions |\n| `--border` | `#E0E0E0` | Card borders, dividers |\n\n### Spirit Airlines tribute\n\nThe yellow (`#FFD100`) and black (`#111111`) palette is used **in honor of Spirit Airlines**, whose signature colors and ultra-low-cost spirit directly inspired this project. Spirit's wind-down page (`spiritrestructuring.com`) was also the primary design reference for the layout's restraint and whitespace philosophy.\n\n---\n\n## Typography\n\n| Role | Font | Weight |\n|---|---|---|\n| Headings, labels, badges | [Oswald](https://fonts.google.com/specimen/Oswald) | 400 / 600 / 700 |\n| Body, descriptions, nav | [Source Sans 3](https://fonts.google.com/specimen/Source+Sans+3) | 400 / 600 |\n| Code, CLI examples | `'Courier New', monospace` | — |\n\nOswald and Source Sans 3 are the same font pairing used by Spirit Airlines (Oswald for bold headings, Source Sans for body). Loaded via Google Fonts with `preconnect` for performance.\n\n---\n\n## Design Philosophy\n\nInspired by two references:\n\n### Spirit Airlines (`spiritrestructuring.com`)\n- **White as the dominant background** — yellow is an accent, not wallpaper\n- **Extreme restraint** — few sections, generous whitespace, one idea per block\n- **Dark hero** — black/dark top section contrasts with white content beneath\n- **Pill buttons with chevron arrows** — matching Spirit's \"Learn More →\" style\n- **Minimal footer** — logo, copyright, one link\n\n### OpenClaw (`openclaw.ai`)\n- **Workflow-first content** — show real end-to-end examples, not just feature lists\n- **Code blocks as CTAs** — install commands and CLI examples front and center\n- **Stats strip** — quick-scan numbers for credibility at a glance\n- **Community signals** — open issue CTA, GitHub link, open-source emphasis\n- **Agent integration section** — explicit cards for each platform\n\n---\n\n## Page Structure\n\n```\nNAV           dark bg, yellow logo, pill GitHub CTA\nHERO          dark bg, #1 badges, h1, install box with version chips\nFEATURE CARDS white bg, 3 columns (Chatbot / CLI Research / Redemption)\nSTATS STRIP   dark bg, 4 numbers (13 commands, 981 MCCs, 0 keys, MIT)\nWORKFLOWS     gray bg, 4 end-to-end code examples\nABOUT         gray bg, two paragraphs, dual CTA buttons\nAGENT INT.    white bg, 3 cards (Claude Code / OpenClaw / ClawHub)\nCOMMANDS      white bg, split layout — links left, command list right\nFOOTNOTE      dark bg, † ranking source + Spirit tribute\nFOOTER        dark bg, logo, copyright, MIT license link\n```\n\n---\n\n## Key Components\n\n### `#1` Ranking Badges\nYellow Oswald-font pills above the hero h1. Reference source: ClawHub vector search registry, `fleece@1.5.0`, May 2026. The `†` superscript links to the footnote explaining the source so the claim is transparent.\n\n### Hero Install Box\nDark card (`#1a1a1a`) on the dark hero background — a subtle card-within-card pattern. Contains the `pip install fleece-cli` command, version/Python/license chips, and the BRAVE_API_KEY optionality note.\n\n### Workflow Cards\nEach has a label pill (yellow on black), a plain-English question, and a two-step CLI code block showing the actual commands and output. Inspired by OpenClaw's \"What People Are Building\" section.\n\n### Command List\nTwo-column: links (install, skills, contact) on the left; command rows on the right. Highlighted commands (yellow `cmd-name`) indicate no API key required.\n\n### Footnote\nSingle dark-gray line below the footer. Contains:\n1. `†` ranking attribution (ClawHub, version, date)\n2. Spirit Airlines color tribute\n\n---\n\n## Responsive Breakpoint\n\n`@media (max-width: 768px)` — hero, feature cards, agent cards, and contact section all collapse to single column.\n\n---\n\n## SEO\n\n- Title: \"Fleece — Credit Card Research CLI & Rewards Optimizer\"\n- Meta description: 155 chars, includes `pip install fleece-cli` CTA\n- Canonical: `https://getfleece.io/`\n- JSON-LD: `SoftwareApplication` schema\n- Open Graph + Twitter Card\n- Google Search Console verified\n- Sitemap: `sitemap.xml`\n- Full SEO change log: `docs/SEO.md`\n\nFile v1.6.1:docs/SEO.md\n\n# ClawHub Skill SEO Log\n\nTracking description changes, tag updates, and search ranking results for the `fleece` skill on ClawHub.\n\n---\n\n## v1.0.0 — Initial publish (2026-05-18)\n\n**Description:**\n> Fleece credit card research CLI. Provides live US credit card data via Brave Search — full reports, earning rates, transfer partners, statement credits, recent news, card comparisons, portfolio analysis, ROI estimates, and profile-based recommendations. Install with `pip install fleece-cli`. Use whenever you need current credit card information.\n\n**Tags:** `latest`\n\n**Search results:**\n| Query | Rank | Score |\n|---|---|---|\n| `credit card` | #13 | 0.701 |\n\n**Issues identified:**\n- Generic name \"Fleece\" gives no signal to vector search\n- Description truncated in results — key terms buried\n- No categorical tags\n- Zero results for conversational queries like \"what card should I use for dining\"\n\n---\n\n## v1.1.0 — Keyword-rich description + tags (2026-05-18)\n\n**Changes:**\n- Rewrote description to front-load issuer names (Chase, Amex, Citi, Capital One, Bilt) and reward types (points, miles, cash back, annual fees, welcome bonuses, transfer partners)\n- Added \"Use this skill when...\" section with 8 natural-language trigger phrases near top of SKILL.md body\n- Added 14 categorical tags\n\n**Tags:** `latest, credit-cards, rewards, points, miles, travel, finance, research, amex, chase, citi, capital-one, brave-search, wallet, transfer-partners`\n\n**Search results:**\n| Query | Rank | Score |\n|---|---|---|\n| `credit card research` | **#1** | 0.817 |\n| `credit card redemption` | **#1** | 0.782 |\n| `credit card` | #13 | 0.702 |\n| `what card should I use for dining` | — | no results |\n\n---\n\n## v1.1.1 — Conversational query language (2026-05-18)\n\n**Changes:**\n- Rewrote description opening to directly mirror user query phrasing:\n  > \"What credit card should I use for dining, travel, groceries, or gas?\" — Fleece answers this with live data...\n- Added `recommendations`, `dining`, `groceries`, `gas` tags\n\n**Rationale:** Vector search scores on embedding similarity — starting the description with the exact question users ask maximizes cosine similarity for that query bucket.\n\n**Tags:** `latest, credit-cards, rewards, points, miles, travel, finance, research, amex, chase, citi, capital-one, brave-search, wallet, transfer-partners, recommendations, dining, groceries, gas`\n\n**Search results:**\n| Query | Rank | Score |\n|---|---|---|\n| `credit card research` | **#1** | 0.817 |\n| `credit card redemption` | **#1** | 0.782 |\n| `what card should I use for dining` | — | no results (below threshold) |\n\n**Note:** ClawHub has a minimum score threshold (~0.6–0.7). Conversational queries fall below it for all skills — not specific to fleece. Vector index update lag (~minutes) observed between publish and ranking change.\n\n---\n\n## v1.2.0 — MCC command added (2026-05-18)\n\n**Changes:**\n- Added `fleece mcc` command (offline MCC code lookup + wallet cross-reference)\n- Added `mcc`, `merchant-category` tags\n\n**Tags:** added `mcc, merchant-category`\n\n---\n\n## v1.2.1 — Claude skill for MCC published (2026-05-18)\n\n**Changes:**\n- Added `fleece-mcc.md` Claude Code skill\n- No description change\n\n---\n\n## v1.3.0 — MCC-enriched workflows across all skills (2026-05-18)\n\n**Changes:**\n- Added merchant lookup as an explicit trigger phrase in agent SKILL.md:\n  > \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- Added MCC workflow table to agent SKILL.md mapping common codes to typical card bonuses (5411 groceries, 5812 restaurants, 5541 gas, 4511 airlines, 7011 hotels, 4111 transit, 5912 drugstores)\n- **fleece-wallet**: added post-gap-analysis MCC flow (`fleece mcc <code> --wallet`)\n- **fleece-rates**: added MCC precision tip (5812 vs 5814 vs 5411 distinctions)\n- **fleece-recommend**: added MCC-informed spending profile workflow\n- **fleece-compare**: added MCC-precise comparison example\n\n**Rationale:** MCC lookup answers \"what card should I use at [merchant]?\" with precision. Cross-referencing wallet gaps with MCC codes turns vague category gaps into specific merchant-level card recommendations. Adding merchant phrasing to trigger phrases broadens the query surface the skill matches.\n\n**Tags:** unchanged from v1.2.1\n\n---\n\n## v1.4.0 — Profile system added (2026-05-18)\n\n**Changes:**\n- Added `fleece profile` command (show/set/unset/fields — no API key needed)\n- `fleece wallet`, `fleece roi`, and `fleece recommend` now auto-inject profile context\n- Added `fleece-profile.md` Claude Code skill\n- Added `profile` tag\n- Agent SKILL.md: added \"Spending profile\" trigger phrase and profile setup section\n\n**Tags:** added `profile`\n\n---\n\n## v1.5.0 — Profile section in agent SKILL.md (2026-05-18)\n\n**Changes:**\n- Expanded agent SKILL.md with full profile documentation: setup workflow, field list, auto-injection behaviour for wallet/roi/recommend\n- No description change\n\n**Rationale:** Adding profile as a trigger phrase (\"Save my spending habits\", \"Remember I spend $600/month on dining\") broadens the query surface to match users who want to personalise their research experience.\n\n**Tags:** unchanged from v1.4.0\n\n---\n\n## v1.6.0 — skills.sh / Vercel Agent Skills registry (2026-05-19)\n\n**Changes:**\n- Fixed SKILL.md frontmatter: removed embedded quotes from description (broke YAML parsing — ClawHub and skills.sh CLI silently failed to parse)\n- Added `metadata` block (`author: chenyuan99`, `version: \"1.5.0\"`) matching skills.sh format\n- Added root-level `SKILL.md` and `skills/fleece/SKILL.md` for `npx skills add chenyuan99/fleece`\n- Distributed to 6 additional platforms: Gemini CLI, GitHub Copilot, Cursor, Windsurf (via `install.sh` flags and dedicated files)\n- `npx skills add chenyuan99/fleece` now installs across **55+ agents** including Claude Code, Cursor, Copilot, Gemini CLI, Windsurf, Cline, Codex, Warp, Kiro, Continue, Junie\n\n**Rationale:** The skills.sh / Vercel Agent Skills registry is platform-agnostic and installs to 55+ agents in one command. This is the highest-leverage distribution channel — broader reach than ClawHub, GitHub stars, or individual platform files. The YAML quote fix was the only blocker.\n\n**Key lesson:** Embedded quotes in YAML frontmatter description (`\"What credit card...\"`) silently break parsing in both ClawHub's vector indexer and the skills.sh CLI. Always use plain unquoted text for the description field.\n\n**Tags:** unchanged from v1.5.0\n\n---\n\n## Observations & lessons\n\n1. **Description is the primary ranking signal** — ClawHub's vector search indexes the frontmatter `description` field. The body content appears to have lower weight. Front-load the highest-value keywords.\n\n2. **Conversational queries hit a threshold floor** — queries phrased as full sentences (\"what card should I use for...\") return 0 results across all skills, suggesting the registry-wide similarity is below ClawHub's cutoff for this query type. Not a fleece-specific problem.\n\n3. **Intent buckets explain everything about the `credit card` ranking** — this deserves a full explanation.\n\n   ClawHub uses vector search: queries and skill descriptions are both converted into embedding vectors, and skills are ranked by cosine similarity (how close the vectors are in meaning). The word \"credit card\" alone is semantically dominated by the **payment intent** — *\"give my agent a credit card to spend with\"* — because that's the majority use case on ClawHub. The top results (`CreditClaw`, `CashClaw`, `Chase Bank`, `Shop Paper`) all say some variation of *\"Give your Claw Agent a credit card — spend anywhere.\"*\n\n   Fleece serves a completely different intent: **research** — *\"help me find the best rewards card, compare fees, analyze my wallet.\"* These two meanings of \"credit card\" live in different regions of the embedding space. Our description is semantically distant from the payment cluster no matter how many times we say \"credit card.\"\n\n   **Analogy:** searching \"Python\" on a coding forum returns programming results; searching \"Python\" on a nature forum returns snakes. Same word, different intent, different vector neighborhood. We cannot rank #1 for \"credit card\" without misrepresenting what Fleece does — and we shouldn't try.\n\n   **The right strategy is owning our intent bucket:**\n\n   | Query | Intent | Our rank | Score |\n   |---|---|---|---|\n   | `credit card` | Give agent a payment card | #13 | 0.713 |\n   | `credit card research` | Find best rewards card | **#1** | 0.827 |\n   | `credit card redemption` | Redeem points/miles | **#1** | 0.786 |\n\n   Users searching \"credit card research\" or \"credit card redemption\" are exactly our audience. Users searching \"credit card\" generally want payment capability — not our product. Ranking #1 in the right buckets is more valuable than ranking #5 in the wrong one.\n\n4. **Tags are for filtering, not ranking** — adding tags didn't move needle on search scores but helps with tag-based browsing.\n\n5. **Index update lag** — ClawHub rebuilds vector embeddings asynchronously after publish. The `inspect` summary field reflects the old content until the rebuild completes. Wait ~5–10 minutes before testing ranking changes.\n\nFile v1.6.1:GEMINI.md\n\n# Fleece — Credit Card Research CLI\n\nFleece is a CLI for live US credit card research and award redemption. Use it whenever the user asks about credit cards, rewards, transfer partners, MCC codes, or award flights/hotels.\n\n## Install\n\n```bash\npip install fleece-cli\nexport BRAVE_API_KEY=<key>   # required for research commands\n```\n\n## When to invoke Fleece\n\n- \"What are the benefits of [card]?\" → `fleece card \"<name>\" --json`\n- \"Which card earns most on [category]?\" → `fleece rates \"<name>\" --category <cat> --json`\n- \"What cards can I transfer Chase points to?\" → `fleece partners \"<name>\" --json`\n- \"What credits does [card] have?\" → `fleece credits \"<name>\" --json`\n- \"Compare [card A] vs [card B]\" → `fleece compare \"<A>\" \"<B>\" --json`\n- \"Analyze my wallet\" → `fleece wallet --json`\n- \"Is [card] worth it for me?\" → `fleece roi \"<name>\" --json`\n- \"What's the best card for my spending?\" → `fleece recommend \"<profile>\" --json`\n- \"What card should I use at [merchant]?\" → `fleece mcc <code> --wallet --json`\n- \"Find business class flights JFK to NRT\" → `fleece flights JFK NRT --date <YYYY-MM-DD> --cabin business --open`\n- \"Search hotels in Tokyo\" → `fleece hotels \"Tokyo\" --checkin <date> --checkout <date> --open`\n- \"What is my spending profile?\" → `fleece profile show --json`\n\n## Key facts\n\n- All commands output JSON with `--json` — parse `result` field, check `ok` before using\n- `mcc`, `flights`, `hotels`, and `profile` work **offline** — no API key needed\n- `fleece wallet` auto-loads saved cards from `fleece.db` with no arguments\n- Spending profile auto-enriches `wallet`, `roi`, and `recommend` once set\n\n## Common MCCs\n\n| MCC | Category |\n|---|---|\n| 5411 | Grocery Stores |\n| 5812 | Restaurants |\n| 5541 | Gas Stations |\n| 4511 | Airlines |\n| 7011 | Hotels |\n| 4111 | Transit |\n| 5912 | Drugstores |\n\nFile v1.6.1:ios/apple-foundation-models.md\n\n# Apple Foundation Models in Fleece\n\nHow Fleece uses Apple's on-device language model (`FoundationModels` framework, iOS 26+).\n\n---\n\n## Current Usage\n\n### Card explanation (implemented)\n\nWhen the user opens the recommendations sheet on iOS 26 with Apple Intelligence enabled, `CardExplanationService` generates a one-sentence explanation of why each card is the top pick at the current merchant.\n\n```swift\n// Services/CardExplanationService.swift\n@available(iOS 26.0, *)\nactor CardExplanationService {\n    func explanation(for recommendation: CardRecommendation) async -> String? {\n        guard SystemLanguageModel.default.isAvailable else { return nil }\n        let session = LanguageModelSession()\n        let response = try await session.respond(to: buildPrompt(recommendation))\n        return response.content\n    }\n}\n```\n\n**Result shown in `RecommendationRowView`:**\n> *\"Earns 4x Amex MR on every dining dollar — worth 7.2¢ each.\"*\n\n**Fallback:** if Apple Intelligence is unavailable, the row shows the static multiplier and rate with no explanation — no empty space, no error.\n\n---\n\n## Chat Tab Architecture (planned)\n\n### Two primitives, one session\n\nThe Ask tab uses both Foundation Models features together in a **single session**:\n\n| Primitive | Role |\n|---|---|\n| **Tool calling** | Fetches ground-truth data (wallet, MCC, ROI) — model can't hallucinate facts |\n| **`@Generable`** | Constrains the response to a typed Swift struct — drives the UI directly and extracts spend data in the same pass |\n\nRunning one session instead of two avoids competing for the Neural Engine. The `@Generable` schema adds only a handful of tokens — negligible overhead.\n\n---\n\n## `@Generable` Response Schema\n\nThe model's entire response — answer, card recommendation, and spend extraction — is returned as a single typed struct:\n\n```swift\n@available(iOS 26.0, *)\n@Generable\nstruct FleeceResponse {\n    @Guide(description: \"Direct answer to the user's question, max 40 words. Never mention internal tool calls.\")\n    var answer: String\n\n    @Guide(description: \"The recommended card name from the wallet, nil if not a card recommendation question\")\n    var recommendedCard: String?\n\n    @Guide(description: \"Effective reward rate as a percentage e.g. 7.2, nil if not applicable\")\n    var effectiveRate: Double?\n\n    @Guide(description: \"One short follow-up question to refine the recommendation, nil if the answer is complete\")\n    var followUp: String?\n\n    // ── Spend extraction — baked into every response, no second session needed ──\n    @Guide(description: \"Monthly dining spend in USD if the user mentioned it in this message, else nil\")\n    var diningMonthly: Double?\n\n    @Guide(description: \"Monthly grocery spend in USD if the user mentioned it in this message, else nil\")\n    var groceriesMonthly: Double?\n\n    @Guide(description: \"Monthly travel spend in USD if the user mentioned it in this message, else nil\")\n    var travelMonthly: Double?\n\n    @Guide(description: \"Monthly gas spend in USD if the user mentioned it in this message, else nil\")\n    var gasMonthly: Double?\n}\n```\n\nAfter each turn, the UI reads `answer` and the optional card fields to render the response, then silently updates `SpendingProfile` from the spend fields — **one inference pass, zero extra sessions**.\n\n---\n\n## Tools (3 — all offline, all grounded)\n\n### `GetWalletCardsTool`\nReturns the user's wallet cards with multipliers — prevents card name / rate hallucination.\n\n```swift\n@available(iOS 26.0, *)\nstruct GetWalletCardsTool: Tool {\n    static let name = \"get_wallet_cards\"\n    static let description = \"Returns all credit cards in the user's Fleece wallet with reward multipliers per spend category\"\n    var cards: [CreditCard]\n\n    func call(context: ToolContext) async throws -> ToolOutput {\n        let wallet = cards.filter(\\.isInWallet)\n        guard !wallet.isEmpty else { return ToolOutput(\"No cards in wallet.\") }\n        let summary = wallet.map { card in\n            \"\\(card.name) (\\(card.issuer), $\\(card.annualFee)/yr, \\(card.pointsProgram)): \" +\n            card.categoryMultipliers.sorted { $0.value > $1.value }\n                .map { \"\\(Int($0.value))x \\($0.key)\" }.joined(separator: \", \") +\n            \", \\(card.baseMultiplier)x everything else\"\n        }.joined(separator: \"\\n\")\n        return ToolOutput(summary)\n    }\n}\n```\n\n### `LookupMCCTool`\nReverse-looks up any of the 981 bundled MCC codes — fully offline.\n\n```swift\n@available(iOS 26.0, *)\nstruct LookupMCCTool: Tool {\n    static let name = \"lookup_mcc\"\n    static let description = \"Returns the merchant category name for a 4-digit MCC code\"\n\n    @Parameter(description: \"4-digit MCC code e.g. '5812'\")\n    var code: String\n\n    func call(context: ToolContext) async throws -> ToolOutput {\n        for category in MCCCategory.allCases {\n            if category.mccCodes.contains(code) {\n                return ToolOutput(\"MCC \\(code) → \\(category.rawValue) \\(category.emoji)\")\n            }\n        }\n        return ToolOutput(\"MCC \\(code) not found in local database.\")\n    }\n}\n```\n\n### `GetCardROITool`\nLocal first-year ROI math for any card in `CardDatabase` — no Brave search, no network.\n\n```swift\n@available(iOS 26.0, *)\nstruct GetCardROITool: Tool {\n    static let name = \"get_card_roi\"\n    static let description = \"Calculates first-year net value for a card given monthly spend amounts\"\n\n    @Parameter(description: \"Card name e.g. 'Amex Gold'\")\n    var cardName: String\n    @Parameter(description: \"Monthly dining spend in USD (0 if unknown)\")\n    var diningMonthly: Double\n    @Parameter(description: \"Monthly grocery spend in USD (0 if unknown)\")\n    var groceriesMonthly: Double\n    @Parameter(description: \"Monthly travel spend in USD (0 if unknown)\")\n    var travelMonthly: Double\n    @Parameter(description: \"Monthly gas spend in USD (0 if unknown)\")\n    var gasMonthly: Double\n    @Parameter(description: \"Monthly other spend in USD (0 if unknown)\")\n    var otherMonthly: Double\n\n    func call(context: ToolContext) async throws -> ToolOutput {\n        guard let card = CardDatabase.all.first(where: {\n            $0.name.localizedCaseInsensitiveContains(cardName)\n        }) else { return ToolOutput(\"Card '\\(cardName)' not found.\") }\n\n        let spend: [(MCCCategory, Double)] = [\n            (.dining, diningMonthly), (.groceries, groceriesMonthly),\n            (.hotels, travelMonthly), (.gas, gasMonthly), (.other, otherMonthly),\n        ]\n        let annualRewards = spend.reduce(0.0) { sum, pair in\n            sum + pair.1 * card.multiplier(for: pair.0) * card.pointValueCents / 100 * 12\n        }\n        let net = annualRewards - Double(card.annualFee)\n        return ToolOutput(\n            \"\\(card.name) ($\\(card.annualFee)/yr): \" +\n            \"annual rewards ≈ $\\(String(format: \"%.0f\", annualRewards)), \" +\n            \"net = \\(net >= 0 ? \"+\" : \"\")$\\(String(format: \"%.0f\", net))\"\n        )\n    }\n}\n```\n\n---\n\n## Spending Profile Persistence\n\nMirrors `fleece profile` in the CLI (SQLite) — stored in `UserDefaults` on iOS.\n\n**Write path:** spend fields in `FleeceResponse` — extracted automatically by `@Generable` every turn. If the user mentions `$600 dining`, `diningMonthly = 600` comes back in the response struct. No tool call, no second session.\n\n**Read path:** injected into the system prompt at session creation — model starts every session already knowing the user's spend.\n\n```swift\n// UserDefaults-backed profile\nstruct SpendingProfile: Codable {\n    var diningMonthly:    Double = 0\n    var groceriesMonthly: Double = 0\n    var travelMonthly:    Double = 0\n    var gasMonthly:       Double = 0\n    var otherMonthly:     Double = 0\n\n    static func load() -> SpendingProfile {\n        guard let data = UserDefaults.standard.data(forKey: \"spendingProfile\"),\n              let p = try? JSONDecoder().decode(SpendingProfile.self, from: data)\n        else { return SpendingProfile() }\n        return p\n    }\n\n    func save() {\n        UserDefaults.standard.set(try? JSONEncoder().encode(self), forKey: \"spendingProfile\")\n    }\n\n    mutating func update(from response: FleeceResponse) {\n        if let v = response.diningMonthly     { diningMonthly = v }\n        if let v = response.groceriesMonthly  { groceriesMonthly = v }\n        if let v = response.travelMonthly     { travelMonthly = v }\n        if let v = response.gasMonthly        { gasMonthly = v }\n    }\n\n    var isEmpty: Bool { diningMonthly == 0 && groceriesMonthly == 0 &&\n                        travelMonthly == 0 && gasMonthly == 0 }\n\n    var summary: String {\n        [(diningMonthly, \"dining\"), (groceriesMonthly, \"groceries\"),\n         (travelMonthly, \"travel\"), (gasMonthly, \"gas\")]\n            .filter { $0.0 > 0 }\n            .map { \"$\\(Int($0.0))/mo \\($0.1)\" }\n            .joined(separator: \", \")\n    }\n}\n```\n\nA **Profile screen in Settings** lets the user view and manually edit values — same as `fleece profile show` / `fleece profile set` in the CLI.\n\n---\n\n## Wiring It Together\n\n```swift\n@available(iOS 26.0, *)\nfunc makeSession(cards: [CreditCard]) -> LanguageModelSession {\n    let profile = SpendingProfile.load()\n\n    let instructions = \"\"\"\n    You are a concise credit card expert for the Fleece app.\n    Always call get_wallet_cards before making card recommendations.\n    Use get_card_roi when the user asks about value or whether a card is worth it.\n    Never invent card names, rates, or fees — only use values from tools.\n    Keep answers under 40 words.\n    \\(profile.isEmpty ? \"\" : \"\\nUser spending profile: \\(profile.summary)\")\n    \"\"\"\n\n    return LanguageModelSession(\n        tools: [GetWalletCardsTool(cards: cards), LookupMCCTool(), GetCardROITool()],\n        instructions: instructions\n    )\n}\n\n// Per-turn call — one inference pass for answer + spend extraction\n@available(iOS 26.0, *)\nfunc respond(to message: String, session: LanguageModelSession) async throws -> FleeceResponse {\n    let response = try await session.respond(to: message, generating: FleeceResponse.self)\n\n    // Persist any spend data the model extracted — zero extra inference\n    var profile = SpendingProfile.load()\n    profile.update(from: response)\n    if !profile.isEmpty { profile.save() }\n\n    return response\n}\n```\n\n**Full session lifecycle:**\n```\nSession created (once per chat open)\n  └─ SpendingProfile injected into system prompt\n\nEach turn:\n  User message\n    → tool calls if needed (wallet, MCC, ROI)\n    → @Generable FleeceResponse generated\n    → UI renders answer + card chip\n    → SpendingProfile.update() saves any new spend data silently\n\nApp relaunched:\n  └─ SpendingProfile loaded from UserDefaults\n  └─ New session starts with full spending context — no questions asked\n```\n\n---\n\n## Availability & Fallback\n\n| iOS | Device | Apple Intelligence | Chat tab behaviour |\n|---|---|---|---|\n| iOS 26+ | iPhone 15 Pro / 16+ | On | Full chat with tool calling + `@Generable` |\n| iOS 26+ | iPhone 15 Pro / 16+ | Off | \"Requires Apple Intelligence\" message |\n| iOS 17–25 | Any | N/A | \"Requires iOS 26\" message |\n\nAll features gated with `#available(iOS 26.0, *)` + `SystemLanguageModel.default.isAvailable`.\n\n---\n\n## References\n\n- [FoundationModels framework — Apple Developer](https://developer.apple.com/documentation/foundationmodels)\n- [Tool calling — Apple Developer](https://developer.apple.com/documentation/foundationmodels/tool)\n- [`@Generable` structured output — Apple Developer](https://developer.apple.com/documentation/foundationmodels/generable)\n- [Managing context window size — TN3193](https://developer.apple.com/documentation/technotes/tn3193-managing-on-device-foundation-model-context-window)\n- [WWDC 2025 — Explore the Foundation Models framework](https://developer.apple.com/videos/wwdc2025)\n\nArchive v1.6.0: 44 files, 76483 bytes\n\nFiles: Advertiser Disclosure.md (777b), app.yaml (43b), assets/default_card.svg (786b), CLAUDE.md (5434b), cli.py (24129b), db.py (8404b), docs/CNAME (12b), docs/DESIGN.md (4492b), docs/index.html (36696b), docs/robots.txt (66b), docs/SEO.md (7963b), docs/sitemap.xml (263b), fleece.py (11244b), GEMINI.md (1851b), image_service.py (5843b), install.sh (3540b), KnowledgeCatalog.json (0b), LICENSE (1066b), migrate.py (960b), MyCards.json (0b), pages/credit_cards.py (14618b), pages/my_credit_cards.py (15313b), plan.md (5732b), pointsyeah.py (1477b), prompts/agent_system_prompt.py (1502b), pyproject.toml (1136b), README.md (4202b), reference/Analyzer.md (0b), requirements-test.txt (25b), requirements.txt (188b), skill-card.md (2603b), SKILL.md (7351b), skills/fleece/SKILL.md (7351b), style.css (6127b), test_fleece.py (13380b), tests/__init__.py (0b), tests/test_brave_client.py (4592b), tests/test_cli.py (11129b), tests/test_pointsyeah.py (1108b), tests/test_tools.py (6471b), tools/__init__.py (75b), tools/brave_client.py (2087b), tools/credit_card_tools.py (11279b), _meta.json (125b)\n\nFile v1.6.0:SKILL.md\n\n---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, and transfer partners for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.5.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and all research commands become personalised.\n\n```bash\n# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields\n```\n\nOnce set, spend values are pulled automatically:\n```bash\n# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece wallet\nfleece recommend \"travel rewards\"\n```\n\n## MCC-enriched workflow\n\nThe bundled MCC dataset (981 codes, offline) enables a precise end-to-end flow:\n\n```\nfleece wallet          → identify category gaps\nfleece mcc 5411        → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap\n```\n\n**Common MCCs to know:**\n\n| MCC  | Category | Typical card bonus |\n|------|----------|--------------------|\n| 5411 | Grocery Stores | Amex Gold 4x, BofA Cash Rewards 3% |\n| 5812 | Restaurants | Amex Gold 4x, CSP 3x |\n| 5814 | Fast Food | Varies — not always same as 5812 |\n| 5541 | Gas Stations | Citi Custom Cash 5x, BofA 3% |\n| 4511 | Airlines | Amex Platinum 5x, CSR 3x |\n| 7011 | Hotels | Amex Platinum 5x (Amex Travel), CSR 3x |\n| 4111 | Transit / Commuter | CSR 3x, Bilt 3x |\n| 5912 | Drugstores | Chase Freedom Flex 3x |\n\nUse `fleece mcc <code>` (no API key needed) to resolve any MCC before running a rates or wallet query.\n\n## Prerequisites\n\n```bash\n# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>\n```\n\n## Commands\n\n### Full card report\n```bash\nfleece card \"<card name>\" --json\n```\nReturns fees, welcome offer, earning rates, credits, benefits, and strategy.\n\n### Earning rates\n```bash\nfleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json\n```\n\n### Transfer partners\n```bash\nfleece partners \"<card name>\" --json\n```\nReturns airline and hotel partners with ratios and transfer timing.\n\n### Statement credits\n```bash\nfleece credits \"<card name>\" --json\n```\nReturns all credits with amounts, cadence, and enrollment requirements.\n\n### Recent news (past month)\n```bash\nfleece news \"<card name>\" --json\n```\nFreshness-filtered to the past month.\n\n### Side-by-side comparison\n```bash\nfleece compare \"<card A>\" \"<card B>\" --json\nfleece compare \"<card A>\" \"<card B>\" --aspects \"fees,rewards,credits\" --json\n```\n\n### Portfolio / wallet analysis\n```bash\nfleece wallet \"<card 1>\" \"<card 2>\" \"<card 3>\" --json\n```\nReturns coverage map, overlaps, gaps, and next-card suggestions.\n\n### First-year ROI\n```bash\nfleece roi \"<card name>\" --travel <monthly $> --dining <monthly $> --other <monthly $> --json\n```\n\n### Profile-based recommendations\n```bash\nfleece recommend \"<spending profile>\" --json\nfleece recommend \"<spending profile>\" --preferences \"<preferences>\" --json\n```\n\n## Output format\n\nEvery command with `--json` returns:\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"...\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nOn error, `ok` is `false` and `error` contains the message. Always check `ok` before using `result`.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Search / tool error (Brave API failure) |\n| `2` | `BRAVE_API_KEY` not set |\n\n## Stdin piping\n\nThe primary argument on any single-card command accepts `-` to read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | fleece card - --json\necho \"high dining spend\" | fleece recommend - --json\n```\n\nThe `wallet` command accepts `-` as its sole argument to read newline-delimited card names:\n```bash\nprintf \"Amex Gold\\nChase Freedom Unlimited\\nBilt\\n\" | fleece wallet - --json\n```\n\n## Coverage\n\nSupports all major US issuers: Amex, Bank of America, Barclays, Bilt, Capital One,\nChase, Citi, Discover, Robinhood, U.S. Bank, Wells Fargo.\n\n## Redemption — PointsYeah URL generation\n\nNo API key required. These commands generate best-effort PointsYeah deep-link URLs\nand optionally open them in the browser. Pure stdlib, no external calls.\n\n### Flight search\n```bash\nfleece flights JFK LAX --date 2026-06-01 --json\nfleece flights JFK LHR --date 2026-06-01 --return 2026-06-15 --adults 2 --cabin business --open\n```\n\nOptions: `--date` (required), `--return`, `--adults` (default 1), `--cabin` (economy | premium-economy | business | first), `--open`, `--json`\n\n### Hotel search\n```bash\nfleece hotels \"Tokyo\" --checkin 2026-06-01 --checkout 2026-06-07 --json\nfleece hotels \"Jersey City\" --checkin 2026-04-10 --checkout 2026-04-12 --guests 2 --rooms 1 --open\n```\n\nOptions: `--checkin` (required), `--checkout` (required), `--guests` (default 1), `--rooms` (default 1), `--open`, `--json`\n\n### JSON output format\n```json\n{\n  \"command\": \"flights\",\n  \"origin\": \"JFK\", \"destination\": \"LAX\", \"date\": \"2026-06-01\",\n  \"return_date\": null, \"adults\": 1, \"cabin\": \"economy\",\n  \"url\": \"https://www.pointsyeah.com/?type=flights&...\",\n  \"ok\": true, \"error\": null\n}\n```\n\n> PointsYeah does not publish a stable deep-link spec. If the URL stops working,\n> the query parameters still serve as a useful manual search reference.\n\nFile v1.6.0:skills/fleece/SKILL.md\n\n---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, and transfer partners for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.5.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and all research commands become personalised.\n\n```bash\n# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields\n```\n\nOnce set, spend values are pulled automatically:\n```bash\n# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece wallet\nfleece recommend \"travel rewards\"\n```\n\n## MCC-enriched workflow\n\nThe bundled MCC dataset (981 codes, offline) enables a precise end-to-end flow:\n\n```\nfleece wallet          → identify category gaps\nfleece mcc 5411        → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap\n```\n\n**Common MCCs to know:**\n\n| MCC  | Category | Typical card bonus |\n|------|----------|--------------------|\n| 5411 | Grocery Stores | Amex Gold 4x, BofA Cash Rewards 3% |\n| 5812 | Restaurants | Amex Gold 4x, CSP 3x |\n| 5814 | Fast Food | Varies — not always same as 5812 |\n| 5541 | Gas Stations | Citi Custom Cash 5x, BofA 3% |\n| 4511 | Airlines | Amex Platinum 5x, CSR 3x |\n| 7011 | Hotels | Amex Platinum 5x (Amex Travel), CSR 3x |\n| 4111 | Transit / Commuter | CSR 3x, Bilt 3x |\n| 5912 | Drugstores | Chase Freedom Flex 3x |\n\nUse `fleece mcc <code>` (no API key needed) to resolve any MCC before running a rates or wallet query.\n\n## Prerequisites\n\n```bash\n# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>\n```\n\n## Commands\n\n### Full card report\n```bash\nfleece card \"<card name>\" --json\n```\nReturns fees, welcome offer, earning rates, credits, benefits, and strategy.\n\n### Earning rates\n```bash\nfleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json\n```\n\n### Transfer partners\n```bash\nfleece partners \"<card name>\" --json\n```\nReturns airline and hotel partners with ratios and transfer timing.\n\n### Statement credits\n```bash\nfleece credits \"<card name>\" --json\n```\nReturns all credits with amounts, cadence, and enrollment requirements.\n\n### Recent news (past month)\n```bash\nfleece news \"<card name>\" --json\n```\nFreshness-filtered to the past month.\n\n### Side-by-side comparison\n```bash\nfleece compare \"<card A>\" \"<card B>\" --json\nfleece compare \"<card A>\" \"<card B>\" --aspects \"fees,rewards,credits\" --json\n```\n\n### Portfolio / wallet analysis\n```bash\nfleece wallet \"<card 1>\" \"<card 2>\" \"<card 3>\" --json\n```\nReturns coverage map, overlaps, gaps, and next-card suggestions.\n\n### First-year ROI\n```bash\nfleece roi \"<card name>\" --travel <monthly $> --dining <monthly $> --other <monthly $> --json\n```\n\n### Profile-based recommendations\n```bash\nfleece recommend \"<spending profile>\" --json\nfleece recommend \"<spending profile>\" --preferences \"<preferences>\" --json\n```\n\n## Output format\n\nEvery command with `--json` returns:\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"...\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nOn error, `ok` is `false` and `error` contains the message. Always check `ok` before using `result`.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Search / tool error (Brave API failure) |\n| `2` | `BRAVE_API_KEY` not set |\n\n## Stdin piping\n\nThe primary argument on any single-card command accepts `-` to read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | fleece card - --json\necho \"high dining spend\" | fleece recommend - --json\n```\n\nThe `wallet` command accepts `-` as its sole argument to read newline-delimited card names:\n```bash\nprintf \"Amex Gold\\nChase Freedom Unlimited\\nBilt\\n\" | fleece wallet - --json\n```\n\n## Coverage\n\nSupports all major US issuers: Amex, Bank of America, Barclays, Bilt, Capital One,\nChase, Citi, Discover, Robinhood, U.S. Bank, Wells Fargo.\n\n## Redemption — PointsYeah URL generation\n\nNo API key required. These commands generate best-effort PointsYeah deep-link URLs\nand optionally open them in the browser. Pure stdlib, no external calls.\n\n### Flight search\n```bash\nfleece flights JFK LAX --date 2026-06-01 --json\nfleece flights JFK LHR --date 2026-06-01 --return 2026-06-15 --adults 2 --cabin business --open\n```\n\nOptions: `--date` (required), `--return`, `--adults` (default 1), `--cabin` (economy | premium-economy | business | first), `--open`, `--json`\n\n### Hotel search\n```bash\nfleece hotels \"Tokyo\" --checkin 2026-06-01 --checkout 2026-06-07 --json\nfleece hotels \"Jersey City\" --checkin 2026-04-10 --checkout 2026-04-12 --guests 2 --rooms 1 --open\n```\n\nOptions: `--checkin` (required), `--checkout` (required), `--guests` (default 1), `--rooms` (default 1), `--open`, `--json`\n\n### JSON output format\n```json\n{\n  \"command\": \"flights\",\n  \"origin\": \"JFK\", \"destination\": \"LAX\", \"date\": \"2026-06-01\",\n  \"return_date\": null, \"adults\": 1, \"cabin\": \"economy\",\n  \"url\": \"https://www.pointsyeah.com/?type=flights&...\",\n  \"ok\": true, \"error\": null\n}\n```\n\n> PointsYeah does not publish a stable deep-link spec. If the URL stops working,\n> the query parameters still serve as a useful manual search reference.\n\nFile v1.6.0:README.md\n\n# Fleece — Credit Card Research & Redemption\n\n[![PyPI version](https://img.shields.io/pypi/v/fleece-cli?color=FFD100&label=fleece-cli)](https://pypi.org/project/fleece-cli/)\n[![PyPI downloads](https://img.shields.io/pypi/dm/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![Python](https://img.shields.io/pypi/pyversions/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-FFD100.svg)](https://github.com/chenyuan99/fleece/blob/main/LICENSE)\n[![Publish to PyPI](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml/badge.svg)](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml)\n[![ClawHub](https://img.shields.io/badge/ClawHub-fleece%401.5.0-FFD100)](https://clawhub.ai)\n[![Website](https://img.shields.io/website?url=https%3A%2F%2Fgetfleece.io&color=FFD100&label=getfleece.io)](https://getfleece.io/)\n\n> Find the best card for deal saviors.\n\nFleece is a free, open-source credit card research and award redemption toolkit. It provides live data via Brave Search — no stale training data. Every command outputs clean JSON, making it easy to plug into AI agent workflows.\n\n---\n\n## Quick Start\n\n```bash\npip install fleece-cli\nexport BRAVE_API_KEY=<your_key>   # optional — offline commands work without it\n\nfleece card \"Amex Gold\"           # full card report\nfleece wallet                     # portfolio analysis\nfleece mcc 5812                   # MCC lookup (no API key needed)\nfleece flights JFK NRT --date 2026-06-01 --cabin business --open\n```\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Fees, welcome offer, earning rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, and timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side card comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps |\n| `fleece roi \"<name>\"` | First-year ROI estimate |\n| `fleece recommend \"<profile>\"` | Personalized card recommendations |\n\n### Offline (no API key needed)\n\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Look up a Merchant Category Code (981 codes bundled) |\n| `fleece mcc <code> --wallet` | Cross-reference MCC with your saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile set <field> <value>` | Save your spending profile |\n| `fleece profile show` | View your profile |\n\nAll commands support `--json` for agent-friendly output and `-` to read from stdin.\n\n## Spending Profile\n\nSet your profile once — `fleece wallet`, `fleece roi`, and `fleece recommend` use it automatically:\n\n```bash\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set annual_fee_tolerance 550\n\nfleece roi \"Amex Gold\"      # spend values pulled from profile\nfleece wallet               # gap analysis tailored to your spend\n```\n\n## AI Agent Integration\n\n### Claude Code\n```bash\nbash install.sh --claude\n# Installs 13 slash commands: /fleece-card /fleece-wallet /fleece-mcc ...\n```\n\n### OpenClaw / Codex\n```bash\nbash install.sh --agents\n# Installs .agents/skills/fleece/SKILL.md\n```\n\n### ClawHub Registry\n```bash\nclawhub install fleece   # fleece@1.5.0\n```\n\n## Chatbot\n\nA Streamlit conversational interface is also included:\n\n```bash\npip install -r requirements.txt\nOPENAI_API_KEY=<key> streamlit run fleece.py\n```\n\n## Development\n\n```bash\ngit clone https://github.com/chenyuan99/fleece.git\ncd fleece\npip install -e .\nexport BRAVE_API_KEY=<your_key>\nfleece --help\n```\n\n### Running tests\n```bash\npip install pytest\npytest -q\n```\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n## Author\n\n[@chenyuan99](https://github.com/chenyuan99) · [getfleece.io](https://getfleece.io/)\n\nFile v1.6.0:_meta.json\n\n{\n  \"ownerId\": \"kn78p1g6xzcqm9fyegreqrft0n80bazp\",\n  \"slug\": \"fleece\",\n  \"version\": \"1.6.0\",\n  \"publishedAt\": 1779149425866\n}\n\nFile v1.6.0:Advertiser Disclosure.md\n\nAdvertiser Disclosure:\nSome of the card links and other products that appear on this website are from companies which AskSebby will earn an affiliate commission or referral bonus. AskSebby is part of an affiliate sales network and receives compensation for sending traffic to partner sites, such as CreditCards.com. This compensation may impact how and where products appear on this site (including, for example, the order in which they appear). This site does not include all credit card companies or all available credit card offers.\n\nEditorial Note:\nOpinions expressed here are the author's alone, not those of any bank, credit card issuer, airlines or hotel chain, vendors or companies, and have not been reviewed, approved, or otherwise endorsed by any of these entities.\n\nFile v1.6.0:CLAUDE.md\n\n# Fleece — Credit Card Research & Redemption\n\n## Project Overview\n\n**Fleece** is a credit card research and award redemption toolkit. Tagline: \"Find the best card for deal saviors.\"\n\nIt has two surfaces:\n1. **Streamlit chatbot** (`fleece.py`) — conversational AI assistant backed by OpenAI\n2. **CLI** (`cli.py`) — 13 commands for card research, wallet analysis, MCC lookup, spending profile, and award redemption\n\nPublished on PyPI as [`fleece-cli`](https://pypi.org/project/fleece-cli/) · current version **0.4.0**\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|---|---|\n| Chatbot frontend | Streamlit |\n| Chatbot LLM | OpenAI (gpt-3.5-turbo, gpt-4, gpt-4o) via LangChain |\n| Chatbot memory | ConversationEntityMemory |\n| CLI framework | Typer |\n| Live research | Brave Search API |\n| Card portfolio | SQLite (`fleece.db`) via `db.py` |\n| MCC dataset | Bundled `mcc_codes.jsonl` (981 codes, offline) |\n| Redemption URLs | `pointsyeah.py` (pure stdlib, no deps) |\n| Language | Python 3.11+ |\n\n---\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Full card report — fees, welcome offer, rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month, freshness-filtered) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps, next-card suggestions |\n| `fleece roi \"<name>\"` | First-year ROI estimate by spend profile |\n| `fleece recommend \"<profile>\"` | Card recommendations for a spending profile |\n\n### Redemption & Profile (no API key needed — work fully offline)\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Offline MCC code lookup (981 codes bundled). Add `--wallet` to cross-reference saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile show` | Display spending profile |\n| `fleece profile set <field> <value>` | Set a profile field |\n| `fleece profile unset <field>` | Clear a profile field |\n| `fleece profile fields` | List all 10 profile fields |\n\nAll commands support `--json` for agent-friendly output and `-` to read arguments from stdin.\n\n### BRAVE_API_KEY\nOptional at startup — checked only when a research command actually runs. `mcc`, `flights`, `hotels`, and `profile` work with no key set.\n\n### Spending Profile\nStored in `fleece.db` (table: `profile`). Fields: `dining_monthly`, `groceries_monthly`, `travel_monthly`, `gas_monthly`, `other_monthly`, `annual_fee_tolerance`, `points_programs`, `home_airport`, `goal`, `preferences`.\n\nOnce set, profile context is automatically injected into:\n- `fleece roi` — pulls spend values when flags not passed\n- `fleece wallet` — tailors gap analysis to the user's actual spend\n- `fleece recommend` — prepends profile context to the search query\n\n---\n\n## Key Files\n\n| File | Purpose |\n|---|---|\n| `cli.py` | Main CLI entry point (Typer app) |\n| `fleece.py` | Streamlit chatbot app |\n| `db.py` | SQLite helpers for card portfolio and spending profile (`fleece.db`) |\n| `pointsyeah.py` | PointsYeah URL generation (pure stdlib, merged from archived `pointsyeah-cli`) |\n| `mcc_codes.jsonl` | Bundled MCC dataset (981 codes, source: greggles/mcc-codes) |\n| `tools/brave_client.py` | Brave Search API client |\n| `tools/credit_card_tools.py` | LangChain tools for the chatbot |\n| `pyproject.toml` | Package config — hatchling build, `fleece` entry point |\n| `install.sh` | Installs Claude Code skills and/or agent skill |\n\n---\n\n## Agent Skills\n\n### Claude Code (`/.claude/skills/`)\n13 slash commands installed via `bash install.sh --claude`:\n\n**Research:** `/fleece-card` `/fleece-rates` `/fleece-partners` `/fleece-credits` `/fleece-news` `/fleece-compare` `/fleece-wallet` `/fleece-roi` `/fleece-recommend`\n\n**Redemption:** `/fleece-mcc` `/fleece-flights` `/fleece-hotels`\n\n**Profile:** `/fleece-profile`\n\n### ClawHub / OpenClaw (`/.agents/skills/fleece/SKILL.md`)\nPublished on ClawHub as `fleece@1.5.0`. Install via `clawhub install fleece` or `bash install.sh --agents`.\n\n---\n\n## CI/CD\n\n| Workflow | Trigger | Action |\n|---|---|---|\n| `publish.yml` | Push `v*` tag | Build and publish to PyPI via OIDC trusted publishing |\n| `publish-skills.yml` | Push to `main` touching `.agents/skills/` or `.claude/skills/` | Publish to ClawHub via `CLAWHUB_TOKEN` secret |\n\nGitHub environment `pypi` is required for the PyPI workflow (OIDC).\n\n---\n\n## Landing Page\n\n`docs/` is served as GitHub Pages at **https://getfleece.io/**.\n\nContains `index.html`, `sitemap.xml`, `robots.txt`. Submitted to Google Search Console. JSON-LD structured data included.\n\nSEO notes tracked in `docs/SEO.md`.\n\n---\n\n## Infrastructure Notes\n\n- **Databricks**: No resources available. Do not suggest Databricks solutions until provisioned.\n- **pointsyeah-cli**: Archived. All functionality merged into fleece (`pointsyeah.py`, `fleece flights`, `fleece hotels`).\n\n---\n\n## Development Notes\n\n- Author: Yuan Chen\n- Created: March 16, 2025\n- Chatbot uses custom CSS styling (`style.css`)\n- OpenAI API key entered via Streamlit sidebar — not stored\n\nFile v1.6.0:docs/DESIGN.md\n\n# Fleece — Design Notes\n\nDesign decisions, rationale, and reference for `docs/index.html`.\n\n---\n\n## Color Palette\n\n| Token | Hex | Usage |\n|---|---|---|\n| `--yellow` | `#FFD100` | Primary accent — buttons, badges, logo, highlights |\n| `--black` | `#111111` | Hero background, nav, footer, dark sections |\n| `--white` | `#FFFFFF` | Primary page background, cards |\n| `--gray` | `#F5F5F3` | Alternate section background (About, Workflows) |\n| `--mid` | `#555555` | Secondary text, descriptions |\n| `--border` | `#E0E0E0` | Card borders, dividers |\n\n### Spirit Airlines tribute\n\nThe yellow (`#FFD100`) and black (`#111111`) palette is used **in honor of Spirit Airlines**, whose signature colors and ultra-low-cost spirit directly inspired this project. Spirit's wind-down page (`spiritrestructuring.com`) was also the primary design reference for the layout's restraint and whitespace philosophy.\n\n---\n\n## Typography\n\n| Role | Font | Weight |\n|---|---|---|\n| Headings, labels, badges | [Oswald](https://fonts.google.com/specimen/Oswald) | 400 / 600 / 700 |\n| Body, descriptions, nav | [Source Sans 3](https://fonts.google.com/specimen/Source+Sans+3) | 400 / 600 |\n| Code, CLI examples | `'Courier New', monospace` | — |\n\nOswald and Source Sans 3 are the same font pairing used by Spirit Airlines (Oswald for bold headings, Source Sans for body). Loaded via Google Fonts with `preconnect` for performance.\n\n---\n\n## Design Philosophy\n\nInspired by two references:\n\n### Spirit Airlines (`spiritrestructuring.com`)\n- **White as the dominant background** — yellow is an accent, not wallpaper\n- **Extreme restraint** — few sections, generous whitespace, one idea per block\n- **Dark hero** — black/dark top section contrasts with white content beneath\n- **Pill buttons with chevron arrows** — matching Spirit's \"Learn More →\" style\n- **Minimal footer** — logo, copyright, one link\n\n### OpenClaw (`openclaw.ai`)\n- **Workflow-first content** — show real end-to-end examples, not just feature lists\n- **Code blocks as CTAs** — install commands and CLI examples front and center\n- **Stats strip** — quick-scan numbers for credibility at a glance\n- **Community signals** — open issue CTA, GitHub link, open-source emphasis\n- **Agent integration section** — explicit cards for each platform\n\n---\n\n## Page Structure\n\n```\nNAV           dark bg, yellow logo, pill GitHub CTA\nHERO          dark bg, #1 badges, h1, install box with version chips\nFEATURE CARDS white bg, 3 columns (Chatbot / CLI Research / Redemption)\nSTATS STRIP   dark bg, 4 numbers (13 commands, 981 MCCs, 0 keys, MIT)\nWORKFLOWS     gray bg, 4 end-to-end code examples\nABOUT         gray bg, two paragraphs, dual CTA buttons\nAGENT INT.    white bg, 3 cards (Claude Code / OpenClaw / ClawHub)\nCOMMANDS      white bg, split layout — links left, command list right\nFOOTNOTE      dark bg, † ranking source + Spirit tribute\nFOOTER        dark bg, logo, copyright, MIT license link\n```\n\n---\n\n## Key Components\n\n### `#1` Ranking Badges\nYellow Oswald-font pills above the hero h1. Reference source: ClawHub vector search registry, `fleece@1.5.0`, May 2026. The `†` superscript links to the footnote explaining the source so the claim is transparent.\n\n### Hero Install Box\nDark card (`#1a1a1a`) on the dark hero background — a subtle card-within-card pattern. Contains the `pip install fleece-cli` command, version/Python/license chips, and the BRAVE_API_KEY optionality note.\n\n### Workflow Cards\nEach has a label pill (yellow on black), a plain-English question, and a two-step CLI code block showing the actual commands and output. Inspired by OpenClaw's \"What People Are Building\" section.\n\n### Command List\nTwo-column: links (install, skills, contact) on the left; command rows on the right. Highlighted commands (yellow `cmd-name`) indicate no API key required.\n\n### Footnote\nSingle dark-gray line below the footer. Contains:\n1. `†` ranking attribution (ClawHub, version, date)\n2. Spirit Airlines color tribute\n\n---\n\n## Responsive Breakpoint\n\n`@media (max-width: 768px)` — hero, feature cards, agent cards, and contact section all collapse to single column.\n\n---\n\n## SEO\n\n- Title: \"Fleece — Credit Card Research CLI & Rewards Optimizer\"\n- Meta description: 155 chars, includes `pip install fleece-cli` CTA\n- Canonical: `https://getfleece.io/`\n- JSON-LD: `SoftwareApplication` schema\n- Open Graph + Twitter Card\n- Google Search Console verified\n- Sitemap: `sitemap.xml`\n- Full SEO change log: `docs/SEO.md`\n\nFile v1.6.0:docs/SEO.md\n\n# ClawHub Skill SEO Log\n\nTracking description changes, tag updates, and search ranking results for the `fleece` skill on ClawHub.\n\n---\n\n## v1.0.0 — Initial publish (2026-05-18)\n\n**Description:**\n> Fleece credit card research CLI. Provides live US credit card data via Brave Search — full reports, earning rates, transfer partners, statement credits, recent news, card comparisons, portfolio analysis, ROI estimates, and profile-based recommendations. Install with `pip install fleece-cli`. Use whenever you need current credit card information.\n\n**Tags:** `latest`\n\n**Search results:**\n| Query | Rank | Score |\n|---|---|---|\n| `credit card` | #13 | 0.701 |\n\n**Issues identified:**\n- Generic name \"Fleece\" gives no signal to vector search\n- Description truncated in results — key terms buried\n- No categorical tags\n- Zero results for conversational queries like \"what card should I use for dining\"\n\n---\n\n## v1.1.0 — Keyword-rich description + tags (2026-05-18)\n\n**Changes:**\n- Rewrote description to front-load issuer names (Chase, Amex, Citi, Capital One, Bilt) and reward types (points, miles, cash back, annual fees, welcome bonuses, transfer partners)\n- Added \"Use this skill when...\" section with 8 natural-language trigger phrases near top of SKILL.md body\n- Added 14 categorical tags\n\n**Tags:** `latest, credit-cards, rewards, points, miles, travel, finance, research, amex, chase, citi, capital-one, brave-search, wallet, transfer-partners`\n\n**Search results:**\n| Query | Rank | Score |\n|---|---|---|\n| `credit card research` | **#1** | 0.817 |\n| `credit card redemption` | **#1** | 0.782 |\n| `credit card` | #13 | 0.702 |\n| `what card should I use for dining` | — | no results |\n\n---\n\n## v1.1.1 — Conversational query language (2026-05-18)\n\n**Changes:**\n- Rewrote description opening to directly mirror user query phrasing:\n  > \"What credit card should I use for dining, travel, groceries, or gas?\" — Fleece answers this with live data...\n- Added `recommendations`, `dining`, `groceries`, `gas` tags\n\n**Rationale:** Vector search scores on embedding similarity — starting the description with the exact question users ask maximizes cosine similarity for that query bucket.\n\n**Tags:** `latest, credit-cards, rewards, points, miles, travel, finance, research, amex, chase, citi, capital-one, brave-search, wallet, transfer-partners, recommendations, dining, groceries, gas`\n\n**Search results:**\n| Query | Rank | Score |\n|---|---|---|\n| `credit card research` | **#1** | 0.817 |\n| `credit card redemption` | **#1** | 0.782 |\n| `what card should I use for dining` | — | no results (below threshold) |\n\n**Note:** ClawHub has a minimum score threshold (~0.6–0.7). Conversational queries fall below it for all skills — not specific to fleece. Vector index update lag (~minutes) observed between publish and ranking change.\n\n---\n\n## v1.2.0 — MCC command added (2026-05-18)\n\n**Changes:**\n- Added `fleece mcc` command (offline MCC code lookup + wallet cross-reference)\n- Added `mcc`, `merchant-category` tags\n\n**Tags:** added `mcc, merchant-category`\n\n---\n\n## v1.2.1 — Claude skill for MCC published (2026-05-18)\n\n**Changes:**\n- Added `fleece-mcc.md` Claude Code skill\n- No description change\n\n---\n\n## v1.3.0 — MCC-enriched workflows across all skills (2026-05-18)\n\n**Changes:**\n- Added merchant lookup as an explicit trigger phrase in agent SKILL.md:\n  > \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- Added MCC workflow table to agent SKILL.md mapping common codes to typical card bonuses (5411 groceries, 5812 restaurants, 5541 gas, 4511 airlines, 7011 hotels, 4111 transit, 5912 drugstores)\n- **fleece-wallet**: added post-gap-analysis MCC flow (`fleece mcc <code> --wallet`)\n- **fleece-rates**: added MCC precision tip (5812 vs 5814 vs 5411 distinctions)\n- **fleece-recommend**: added MCC-informed spending profile workflow\n- **fleece-compare**: added MCC-precise comparison example\n\n**Rationale:** MCC lookup answers \"what card should I use at [merchant]?\" with precision. Cross-referencing wallet gaps with MCC codes turns vague category gaps into specific merchant-level card recommendations. Adding merchant phrasing to trigger phrases broadens the query surface the skill matches.\n\n**Tags:** unchanged from v1.2.1\n\n---\n\n## v1.4.0 — Profile system added (2026-05-18)\n\n**Changes:**\n- Added `fleece profile` command (show/set/unset/fields — no API key needed)\n- `fleece wallet`, `fleece roi`, and `fleece recommend` now auto-inject profile context\n- Added `fleece-profile.md` Claude Code skill\n- Added `profile` tag\n- Agent SKILL.md: added \"Spending profile\" trigger phrase and profile setup section\n\n**Tags:** added `profile`\n\n---\n\n## v1.5.0 — Profile section in agent SKILL.md (2026-05-18)\n\n**Changes:**\n- Expanded agent SKILL.md with full profile documentation: setup workflow, field list, auto-injection behaviour for wallet/roi/recommend\n- No description change\n\n**Rationale:** Adding profile as a trigger phrase (\"Save my spending habits\", \"Remember I spend $600/month on dining\") broadens the query surface to match users who want to personalise their research experience.\n\n**Tags:** unchanged from v1.4.0\n\n---\n\n## Observations & lessons\n\n1. **Description is the primary ranking signal** — ClawHub's vector search indexes the frontmatter `description` field. The body content appears to have lower weight. Front-load the highest-value keywords.\n\n2. **Conversational queries hit a threshold floor** — queries phrased as full sentences (\"what card should I use for...\") return 0 results across all skills, suggesting the registry-wide similarity is below ClawHub's cutoff for this query type. Not a fleece-specific problem.\n\n3. **Intent buckets explain everything about the `credit card` ranking** — this deserves a full explanation.\n\n   ClawHub uses vector search: queries and skill descriptions are both converted into embedding vectors, and skills are ranked by cosine similarity (how close the vectors are in meaning). The word \"credit card\" alone is semantically dominated by the **payment intent** — *\"give my agent a credit card to spend with\"* — because that's the majority use case on ClawHub. The top results (`CreditClaw`, `CashClaw`, `Chase Bank`, `Shop Paper`) all say some variation of *\"Give your Claw Agent a credit card — spend anywhere.\"*\n\n   Fleece serves a completely different intent: **research** — *\"help me find the best rewards card, compare fees, analyze my wallet.\"* These two meanings of \"credit card\" live in different regions of the embedding space. Our description is semantically distant from the payment cluster no matter how many times we say \"credit card.\"\n\n   **Analogy:** searching \"Python\" on a coding forum returns programming results; searching \"Python\" on a nature forum returns snakes. Same word, different intent, different vector neighborhood. We cannot rank #1 for \"credit card\" without misrepresenting what Fleece does — and we shouldn't try.\n\n   **The right strategy is owning our intent bucket:**\n\n   | Query | Intent | Our rank | Score |\n   |---|---|---|---|\n   | `credit card` | Give agent a payment card | #13 | 0.713 |\n   | `credit card research` | Find best rewards card | **#1** | 0.827 |\n   | `credit card redemption` | Redeem points/miles | **#1** | 0.786 |\n\n   Users searching \"credit card research\" or \"credit card redemption\" are exactly our audience. Users searching \"credit card\" generally want payment capability — not our product. Ranking #1 in the right buckets is more valuable than ranking #5 in the wrong one.\n\n4. **Tags are for filtering, not ranking** — adding tags didn't move needle on search scores but helps with tag-based browsing.\n\n5. **Index update lag** — ClawHub rebuilds vector embeddings asynchronously after publish. The `inspect` summary field reflects the old content until the rebuild completes. Wait ~5–10 minutes before testing ranking changes.\n\nFile v1.6.0:GEMINI.md\n\n# Fleece — Credit Card Research CLI\n\nFleece is a CLI for live US credit card research and award redemption. Use it whenever the user asks about credit cards, rewards, transfer partners, MCC codes, or award flights/hotels.\n\n## Install\n\n```bash\npip install fleece-cli\nexport BRAVE_API_KEY=<key>   # required for research commands\n```\n\n## When to invoke Fleece\n\n- \"What are the benefits of [card]?\" → `fleece card \"<name>\" --json`\n- \"Which card earns most on [category]?\" → `fleece rates \"<name>\" --category <cat> --json`\n- \"What cards can I transfer Chase points to?\" → `fleece partners \"<name>\" --json`\n- \"What credits does [card] have?\" → `fleece credits \"<name>\" --json`\n- \"Compare [card A] vs [card B]\" → `fleece compare \"<A>\" \"<B>\" --json`\n- \"Analyze my wallet\" → `fleece wallet --json`\n- \"Is [card] worth it for me?\" → `fleece roi \"<name>\" --json`\n- \"What's the best card for my spending?\" → `fleece recommend \"<profile>\" --json`\n- \"What card should I use at [merchant]?\" → `fleece mcc <code> --wallet --json`\n- \"Find business class flights JFK to NRT\" → `fleece flights JFK NRT --date <YYYY-MM-DD> --cabin business --open`\n- \"Search hotels in Tokyo\" → `fleece hotels \"Tokyo\" --checkin <date> --checkout <date> --open`\n- \"What is my spending profile?\" → `fleece profile show --json`\n\n## Key facts\n\n- All commands output JSON with `--json` — parse `result` field, check `ok` before using\n- `mcc`, `flights`, `hotels`, and `profile` work **offline** — no API key needed\n- `fleece wallet` auto-loads saved cards from `fleece.db` with no arguments\n- Spending profile auto-enriches `wallet`, `roi`, and `recommend` once set\n\n## Common MCCs\n\n| MCC | Category |\n|---|---|\n| 5411 | Grocery Stores |\n| 5812 | Restaurants |\n| 5541 | Gas Stations |\n| 4511 | Airlines |\n| 7011 | Hotels |\n| 4111 | Transit |\n| 5912 | Drugstores |\n\nFile v1.6.0:plan.md\n\n# cli.py — Fleece Companion CLI Plan\n\n## Purpose\n\nA Typer-based CLI that exposes Fleece's credit card research tools as shell commands.\nPrimary consumers: AI agents (Claude Code, OpenAI Codex, future agentic tools) that need\nto query live credit card data without running the Streamlit UI. Also usable by humans.\n\n---\n\n## Design Philosophy\n\n**Agent-first, human-friendly.**\n\nAgents need:\n- Machine-readable output (JSON) they can parse without regex\n- Deterministic exit codes (0 = success, 1 = tool error, 2 = config error)\n- No interactive prompts — all inputs via args/flags\n- Self-describing `--help` text so agents can discover commands without docs\n- Stdin piping support for chaining commands\n\nHumans need:\n- Readable plain-text output by default\n- Sensible defaults (no flags required for simple queries)\n- Fast feedback on missing API key\n\n---\n\n## Command Structure\n\n```\nfleece <command> [args] [options]\n```\n\n### Commands\n\n| Command | Args | Key Flags | Description |\n|---|---|---|---|\n| `card` | `name` | `--json` | Full card report (fees, offer, earnings, credits, benefits) |\n| `rates` | `name` | `--category`, `--json` | Earning rates, optionally filtered by spend category |\n| `partners` | `name` | `--json` | Transfer partners with ratios |\n| `credits` | `name` | `--json` | Statement credits and perks |\n| `news` | `name` | `--json` | Changes in the past month |\n| `compare` | `card-a`, `card-b` | `--aspects`, `--json` | Side-by-side comparison |\n| `wallet` | `cards...` | `--json` | Portfolio gap/overlap analysis (variadic: multiple cards) |\n| `roi` | `name` | `--travel`, `--dining`, `--other`, `--json` | First-year ROI given monthly spend |\n| `recommend` | `profile` | `--preferences`, `--json` | Card recommendations for a spending profile |\n\n### Global Options (on every command)\n\n| Flag | Default | Description |\n|---|---|---|\n| `--json / -j` | False | Emit JSON instead of plain text |\n| `--api-key` | env | Override `BRAVE_API_KEY` (fallback to `.env`) |\n| `--no-dotenv` | False | Skip loading `.env` file |\n\n---\n\n## Output Format\n\n### Plain text (default — human)\nRaw string result from the research tool, printed to stdout.\n\n### JSON mode (`--json`)\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"Chase Sapphire Preferred\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nErrors always emit JSON with `\"ok\": false` and `\"error\": \"<message>\"` to stderr,\nregardless of `--json` flag, so agents can always parse failure.\n\n---\n\n## Exit Codes\n\n| Code | Meaning |\n|---|---|\n| `0` | Success |\n| `1` | Search/tool error (Brave API failure, timeout) |\n| `2` | Configuration error (missing API key) |\n\n---\n\n## File Structure\n\n```\nfleece/\n├── cli.py                  # NEW: Typer app, all commands\n├── tools/\n│   ├── brave_client.py     # existing\n│   ├── credit_card_tools.py # existing — cli.py calls tool fns directly, not via LangChain\n│   └── __init__.py\n├── requirements.txt        # add: typer[all]\n└── tests/\n    └── test_cli.py         # NEW: CLI tests via typer.testing.CliRunner\n```\n\n### Key architectural decision\n`cli.py` calls the underlying search functions in `tools/brave_client.py` **directly**,\nbypassing the LangChain tool wrappers. This avoids pulling in the full LangChain agent\nstack for a simple CLI query. The LangChain `@tool` decorators stay on\n`credit_card_tools.py` for the Streamlit agent — the CLI is a thinner layer.\n\n---\n\n## Implementation Steps\n\n### Step 1 — Add typer to requirements.txt\n`typer[all]>=0.12.0` (includes `rich` for pretty output)\n\n### Step 2 — Create cli.py skeleton\n- `app = typer.Typer(name=\"fleece\", help=\"Fleece credit card research CLI\")`\n- Shared `_get_wrapper(api_key, freshness)` helper that loads `.env`, resolves key, exits\n  with code 2 if missing\n- Shared `_emit(result, as_json, command, query)` helper that prints plain or JSON\n\n### Step 3 — Implement simple single-arg commands\n`card`, `rates`, `partners`, `credits`, `news` — each is ~10 lines:\n1. Build wrapper via `_get_wrapper()`\n2. Call `search_and_format(wrapper, query)`\n3. Call `_emit(result, ...)`\n\n### Step 4 — Implement multi-arg commands\n- `compare` — takes two positional args, calls `search_and_format` twice, merges output\n- `wallet` — variadic `cards: list[str]`, loops over each card\n- `roi` — float flags `--travel`, `--dining`, `--other`; calls search + formats spend math\n- `recommend` — takes `profile` positional + optional `--preferences`\n\n### Step 5 — Add stdin support\nIf a command's primary arg is `-`, read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | python cli.py card -\n```\nUseful for agent pipelines.\n\n### Step 6 — Write tests/test_cli.py\nUse `typer.testing.CliRunner` to invoke each command with a mocked `search_and_format`.\nTest: success path, JSON output, missing API key (exit code 2), search error (exit code 1).\n\n---\n\n## Usage Examples\n\n### Human\n```bash\npython cli.py card \"Chase Sapphire Preferred\"\npython cli.py compare \"Amex Gold\" \"Chase Sapphire Preferred\"\npython cli.py roi \"Chase Sapphire Preferred\" --travel 500 --dining 300 --other 1000\npython cli.py wallet \"Amex Platinum\" \"Chase Freedom Unlimited\" \"Bilt\"\n```\n\n### Agent / piped\n```bash\npython cli.py card \"Chase Sapphire Preferred\" --json | jq '.result'\npython cli.py recommend \"high dining and travel spend\" --preferences \"no annual fee\" --json\necho \"Amex Gold\" | python cli.py rates -\n```\n\n### Claude Code skill\nA future `/card-research` skill could shell out to `cli.py` for live data,\nrather than re-implementing the Brave search logic in a prompt.\n\n---\n\n## Out of Scope (for now)\n- Auth / user accounts\n- Persistent caching of search results\n- Card database / local storage\n- Streaming output\n\nFile v1.6.0:skill-card.md\n\n## Description: <br>\nFleece is a credit card research and redemption CLI for rewards rates, fees, welcome bonuses, statement credits, transfer partners, wallet analysis, ROI estimates, recommendations, merchant category codes, and award travel search. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[chenyuan99](https://clawhub.ai/user/chenyuan99) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, agents, and credit card rewards users use Fleece to query current US card information, compare card portfolios, analyze spending profiles, and generate JSON-friendly redemption research workflows. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Fleece can store personal card inventory, spending habits, travel goals, credit limits, expiration dates, and other profile details. <br>\nMitigation: Enter only the minimum profile data needed, avoid full account details, and review or remove local profile data when it is no longer needed. <br>\nRisk: Personalized research may send profile or card context to external services such as Brave Search or OpenAI. <br>\nMitigation: Avoid entering sensitive financial details, keep API keys scoped to this use case, and review prompts or command inputs before running personalized searches. <br>\nRisk: Running the Streamlit app on a shared server can expose debug, history, image-fetching, or stored-profile behavior to other users. <br>\nMitigation: Prefer local execution for personal finance research and harden access controls, history handling, and image-fetching behavior before shared deployment. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/chenyuan99/fleece) <br>\n- [PyPI Package](https://pypi.org/project/fleece-cli/) <br>\n- [Project Website](https://getfleece.io/) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with CLI examples and JSON command-output expectations] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Commands commonly return JSON with ok and error fields; some workflows require BRAVE_API_KEY or OPENAI_API_KEY.] <br>\n\n## Skill Version(s): <br>\n1.6.0 (source: ClawHub release) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.6.0:app.yaml\n\ncommand: ['streamlit', 'run', 'fleece.py']\n\nArchive v1.5.1: 43 files, 75089 bytes\n\nFiles: Advertiser Disclosure.md (777b), app.yaml (43b), assets/default_card.svg (786b), CLAUDE.md (5434b), cli.py (24129b), db.py (8404b), docs/CNAME (12b), docs/DESIGN.md (4492b), docs/index.html (36696b), docs/robots.txt (66b), docs/SEO.md (7963b), docs/sitemap.xml (263b), fleece.py (11244b), GEMINI.md (1851b), image_service.py (5843b), install.sh (3540b), KnowledgeCatalog.json (0b), LICENSE (1066b), migrate.py (960b), MyCards.json (0b), pages/credit_cards.py (14618b), pages/my_credit_cards.py (15313b), plan.md (5732b), pointsyeah.py (1477b), prompts/agent_system_prompt.py (1502b), pyproject.toml (1136b), README.md (4202b), reference/Analyzer.md (0b), requirements-test.txt (25b), requirements.txt (188b), SKILL.md (7351b), skills/fleece/SKILL.md (7351b), style.css (6127b), test_fleece.py (13380b), tests/__init__.py (0b), tests/test_brave_client.py (4592b), tests/test_cli.py (11129b), tests/test_pointsyeah.py (1108b), tests/test_tools.py (6471b), tools/__init__.py (75b), tools/brave_client.py (2087b), tools/credit_card_tools.py (11279b), _meta.json (125b)\n\nFile v1.5.1:SKILL.md\n\n---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, and transfer partners for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.5.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and all research commands become personalised.\n\n```bash\n# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields\n```\n\nOnce set, spend values are pulled automatically:\n```bash\n# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece wallet\nfleece recommend \"travel rewards\"\n```\n\n## MCC-enriched workflow\n\nThe bundled MCC dataset (981 codes, offline) enables a precise end-to-end flow:\n\n```\nfleece wallet          → identify category gaps\nfleece mcc 5411        → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap\n```\n\n**Common MCCs to know:**\n\n| MCC  | Category | Typical card bonus |\n|------|----------|--------------------|\n| 5411 | Grocery Stores | Amex Gold 4x, BofA Cash Rewards 3% |\n| 5812 | Restaurants | Amex Gold 4x, CSP 3x |\n| 5814 | Fast Food | Varies — not always same as 5812 |\n| 5541 | Gas Stations | Citi Custom Cash 5x, BofA 3% |\n| 4511 | Airlines | Amex Platinum 5x, CSR 3x |\n| 7011 | Hotels | Amex Platinum 5x (Amex Travel), CSR 3x |\n| 4111 | Transit / Commuter | CSR 3x, Bilt 3x |\n| 5912 | Drugstores | Chase Freedom Flex 3x |\n\nUse `fleece mcc <code>` (no API key needed) to resolve any MCC before running a rates or wallet query.\n\n## Prerequisites\n\n```bash\n# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>\n```\n\n## Commands\n\n### Full card report\n```bash\nfleece card \"<card name>\" --json\n```\nReturns fees, welcome offer, earning rates, credits, benefits, and strategy.\n\n### Earning rates\n```bash\nfleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json\n```\n\n### Transfer partners\n```bash\nfleece partners \"<card name>\" --json\n```\nReturns airline and hotel partners with ratios and transfer timing.\n\n### Statement credits\n```bash\nfleece credits \"<card name>\" --json\n```\nReturns all credits with amounts, cadence, and enrollment requirements.\n\n### Recent news (past month)\n```bash\nfleece news \"<card name>\" --json\n```\nFreshness-filtered to the past month.\n\n### Side-by-side comparison\n```bash\nfleece compare \"<card A>\" \"<card B>\" --json\nfleece compare \"<card A>\" \"<card B>\" --aspects \"fees,rewards,credits\" --json\n```\n\n### Portfolio / wallet analysis\n```bash\nfleece wallet \"<card 1>\" \"<card 2>\" \"<card 3>\" --json\n```\nReturns coverage map, overlaps, gaps, and next-card suggestions.\n\n### First-year ROI\n```bash\nfleece roi \"<card name>\" --travel <monthly $> --dining <monthly $> --other <monthly $> --json\n```\n\n### Profile-based recommendations\n```bash\nfleece recommend \"<spending profile>\" --json\nfleece recommend \"<spending profile>\" --preferences \"<preferences>\" --json\n```\n\n## Output format\n\nEvery command with `--json` returns:\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"...\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nOn error, `ok` is `false` and `error` contains the message. Always check `ok` before using `result`.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Search / tool error (Brave API failure) |\n| `2` | `BRAVE_API_KEY` not set |\n\n## Stdin piping\n\nThe primary argument on any single-card command accepts `-` to read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | fleece card - --json\necho \"high dining spend\" | fleece recommend - --json\n```\n\nThe `wallet` command accepts `-` as its sole argument to read newline-delimited card names:\n```bash\nprintf \"Amex Gold\\nChase Freedom Unlimited\\nBilt\\n\" | fleece wallet - --json\n```\n\n## Coverage\n\nSupports all major US issuers: Amex, Bank of America, Barclays, Bilt, Capital One,\nChase, Citi, Discover, Robinhood, U.S. Bank, Wells Fargo.\n\n## Redemption — PointsYeah URL generation\n\nNo API key required. These commands generate best-effort PointsYeah deep-link URLs\nand optionally open them in the browser. Pure stdlib, no external calls.\n\n### Flight search\n```bash\nfleece flights JFK LAX --date 2026-06-01 --json\nfleece flights JFK LHR --date 2026-06-01 --return 2026-06-15 --adults 2 --cabin business --open\n```\n\nOptions: `--date` (required), `--return`, `--adults` (default 1), `--cabin` (economy | premium-economy | business | first), `--open`, `--json`\n\n### Hotel search\n```bash\nfleece hotels \"Tokyo\" --checkin 2026-06-01 --checkout 2026-06-07 --json\nfleece hotels \"Jersey City\" --checkin 2026-04-10 --checkout 2026-04-12 --guests 2 --rooms 1 --open\n```\n\nOptions: `--checkin` (required), `--checkout` (required), `--guests` (default 1), `--rooms` (default 1), `--open`, `--json`\n\n### JSON output format\n```json\n{\n  \"command\": \"flights\",\n  \"origin\": \"JFK\", \"destination\": \"LAX\", \"date\": \"2026-06-01\",\n  \"return_date\": null, \"adults\": 1, \"cabin\": \"economy\",\n  \"url\": \"https://www.pointsyeah.com/?type=flights&...\",\n  \"ok\": true, \"error\": null\n}\n```\n\n> PointsYeah does not publish a stable deep-link spec. If the URL stops working,\n> the query parameters still serve as a useful manual search reference.\n\nFile v1.5.1:skills/fleece/SKILL.md\n\n---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, and transfer partners for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.5.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and all research commands become personalised.\n\n```bash\n# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields\n```\n\nOnce set, spend values are pulled automatically:\n```bash\n# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece wallet\nfleece recommend \"travel rewards\"\n```\n\n## MCC-enriched workflow\n\nThe bundled MCC dataset (981 codes, offline) enables a precise end-to-end flow:\n\n```\nfleece wallet          → identify category gaps\nfleece mcc 5411        → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap\n```\n\n**Common MCCs to know:**\n\n| MCC  | Category | Typical card bonus |\n|------|----------|--------------------|\n| 5411 | Grocery Stores | Amex Gold 4x, BofA Cash Rewards 3% |\n| 5812 | Restaurants | Amex Gold 4x, CSP 3x |\n| 5814 | Fast Food | Varies — not always same as 5812 |\n| 5541 | Gas Stations | Citi Custom Cash 5x, BofA 3% |\n| 4511 | Airlines | Amex Platinum 5x, CSR 3x |\n| 7011 | Hotels | Amex Platinum 5x (Amex Travel), CSR 3x |\n| 4111 | Transit / Commuter | CSR 3x, Bilt 3x |\n| 5912 | Drugstores | Chase Freedom Flex 3x |\n\nUse `fleece mcc <code>` (no API key needed) to resolve any MCC before running a rates or wallet query.\n\n## Prerequisites\n\n```bash\n# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>\n```\n\n## Commands\n\n### Full card report\n```bash\nfleece card \"<card name>\" --json\n```\nReturns fees, welcome offer, earning rates, credits, benefits, and strategy.\n\n### Earning rates\n```bash\nfleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json\n```\n\n### Transfer partners\n```bash\nfleece partners \"<card name>\" --json\n```\nReturns airline and hotel partners with ratios and transfer timing.\n\n### Statement credits\n```bash\nfleece credits \"<card name>\" --json\n```\nReturns all credits with amounts, cadence, and enrollment requirements.\n\n### Recent news (past month)\n```bash\nfleece news \"<card name>\" --json\n```\nFreshness-filtered to the past month.\n\n### Side-by-side comparison\n```bash\nfleece compare \"<card A>\" \"<card B>\" --json\nfleece compare \"<card A>\" \"<card B>\" --aspects \"fees,rewards,credits\" --json\n```\n\n### Portfolio / wallet analysis\n```bash\nfleece wallet \"<card 1>\" \"<card 2>\" \"<card 3>\" --json\n```\nReturns coverage map, overlaps, gaps, and next-card suggestions.\n\n### First-year ROI\n```bash\nfleece roi \"<card name>\" --travel <monthly $> --dining <monthly $> --other <monthly $> --json\n```\n\n### Profile-based recommendations\n```bash\nfleece recommend \"<spending profile>\" --json\nfleece recommend \"<spending profile>\" --preferences \"<preferences>\" --json\n```\n\n## Output format\n\nEvery command with `--json` returns:\n```json\n{\n  \"command\": \"card\",\n  \"query\": \"...\",\n  \"result\": \"...\",\n  \"ok\": true,\n  \"error\": null\n}\n```\n\nOn error, `ok` is `false` and `error` contains the message. Always check `ok` before using `result`.\n\n## Exit codes\n\n| Code | Meaning |\n|------|---------|\n| `0` | Success |\n| `1` | Search / tool error (Brave API failure) |\n| `2` | `BRAVE_API_KEY` not set |\n\n## Stdin piping\n\nThe primary argument on any single-card command accepts `-` to read from stdin:\n```bash\necho \"Chase Sapphire Preferred\" | fleece card - --json\necho \"high dining spend\" | fleece recommend - --json\n```\n\nThe `wallet` command accepts `-` as its sole argument to read newline-delimited card names:\n```bash\nprintf \"Amex Gold\\nChase Freedom Unlimited\\nBilt\\n\" | fleece wallet - --json\n```\n\n## Coverage\n\nSupports all major US issuers: Amex, Bank of America, Barclays, Bilt, Capital One,\nChase, Citi, Discover, Robinhood, U.S. Bank, Wells Fargo.\n\n## Redemption — PointsYeah URL generation\n\nNo API key required. These commands generate best-effort PointsYeah deep-link URLs\nand optionally open them in the browser. Pure stdlib, no external calls.\n\n### Flight search\n```bash\nfleece flights JFK LAX --date 2026-06-01 --json\nfleece flights JFK LHR --date 2026-06-01 --return 2026-06-15 --adults 2 --cabin business --open\n```\n\nOptions: `--date` (required), `--return`, `--adults` (default 1), `--cabin` (economy | premium-economy | business | first), `--open`, `--json`\n\n### Hotel search\n```bash\nfleece hotels \"Tokyo\" --checkin 2026-06-01 --checkout 2026-06-07 --json\nfleece hotels \"Jersey City\" --checkin 2026-04-10 --checkout 2026-04-12 --guests 2 --rooms 1 --open\n```\n\nOptions: `--checkin` (required), `--checkout` (required), `--guests` (default 1), `--rooms` (default 1), `--open`, `--json`\n\n### JSON output format\n```json\n{\n  \"command\": \"flights\",\n  \"origin\": \"JFK\", \"destination\": \"LAX\", \"date\": \"2026-06-01\",\n  \"return_date\": null, \"adults\": 1, \"cabin\": \"economy\",\n  \"url\": \"https://www.pointsyeah.com/?type=flights&...\",\n  \"ok\": true, \"error\": null\n}\n```\n\n> PointsYeah does not publish a stable deep-link spec. If the URL stops working,\n> the query parameters still serve as a useful manual search reference.\n\nFile v1.5.1:README.md\n\n# Fleece — Credit Card Research & Redemption\n\n[![PyPI version](https://img.shields.io/pypi/v/fleece-cli?color=FFD100&label=fleece-cli)](https://pypi.org/project/fleece-cli/)\n[![PyPI downloads](https://img.shields.io/pypi/dm/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![Python](https://img.shields.io/pypi/pyversions/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-FFD100.svg)](https://github.com/chenyuan99/fleece/blob/main/LICENSE)\n[![Publish to PyPI](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml/badge.svg)](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml)\n[![ClawHub](https://img.shields.io/badge/ClawHub-fleece%401.5.0-FFD100)](https://clawhub.ai)\n[![Website](https://img.shields.io/website?url=https%3A%2F%2Fgetfleece.io&color=FFD100&label=getfleece.io)](https://getfleece.io/)\n\n> Find the best card for deal saviors.\n\nFleece is a free, open-source credit card research and award redemption toolkit. It provides live data via Brave Search — no stale training data. Every command outputs clean JSON, making it easy to plug into AI agent workflows.\n\n---\n\n## Quick Start\n\n```bash\npip install fleece-cli\nexport BRAVE_API_KEY=<your_key>   # optional — offline commands work without it\n\nfleece card \"Amex Gold\"           # full card report\nfleece wallet                     # portfolio analysis\nfleece mcc 5812                   # MCC lookup (no API key needed)\nfleece flights JFK NRT --date 2026-06-01 --cabin business --open\n```\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Fees, welcome offer, earning rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, and timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side card comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps |\n| `fleece roi \"<name>\"` | First-year ROI estimate |\n| `fleece recommend \"<profile>\"` | Personalized card recommendations |\n\n### Offline (no API key needed)\n\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Look up a Merchant Category Code (981 codes bundled) |\n| `fleece mcc <code> --wallet` | Cross-reference MCC with your saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile set <field> <value>` | Save your spending profile |\n| `fleece profile show` | View your profile |\n\nAll commands support `--json` for agent-friendly output and `-` to read from stdin.\n\n## Spending Profile\n\nSet your profile once — `fleece wallet`, `fleece roi`, and `fleece recommend` use it automatically:\n\n```bash\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set annual_fee_tolerance 550\n\nfleece roi \"Amex Gold\"      # spend values pulled from profile\nfleece wallet               # gap analysis tailored to your spend\n```\n\n## AI Agent Integration\n\n### Claude Code\n```bash\nbash install.sh --claude\n# Installs 13 slash commands: /fleece-card /fleece-wallet /fleece-mcc ...\n```\n\n### OpenClaw / Codex\n```bash\nbash install.sh --agents\n# Installs .agents/skills/fleece/SKILL.md\n```\n\n### ClawHub Registry\n```bash\nclawhub install fleece   # fleece@1.5.0\n```\n\n## Chatbot\n\nA Streamlit conversational interface is also included:\n\n```bash\npip install -r requirements.txt\nOPENAI_API_KEY=<key> streamlit run fleece.py\n```\n\n## Development\n\n```bash\ngit clone https://github.com/chenyuan99/fleece.git\ncd fleece\npip install -e .\nexport BRAVE_API_KEY=<your_key>\nfleece --help\n```\n\n### Running tests\n```bash\npip install pytest\npytest -q\n```\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n## Author\n\n[@chenyuan99](https://github.com/chenyuan99) · [getfleece.io](https://getfleece.io/)\n\nFile v1.5.1:_meta.json\n\n{\n  \"ownerId\": \"kn78p1g6xzcqm9fyegreqrft0n80bazp\",\n  \"slug\": \"fleece\",\n  \"version\": \"1.5.1\",\n  \"publishedAt\": 1779149226103\n}\n\nFile v1.5.1:Advertiser Disclosure.md\n\nAdvertiser Disclosure:\nSome of the card links and other products that appear on this website are from companies which AskSebby will earn an affiliate commission or referral bonus. AskSebby is part of an affiliate sales network and receives compensation for sending traffic to partner sites, such as CreditCards.com. This compensation may impact how and where products appear on this site (including, for example, the order in which they appear). This site does not include all credit card companies or all available credit card offers.\n\nEditorial Note:\nOpinions expressed here are the author's alone, not those of any bank, credit card issuer, airlines or hotel chain, vendors or companies, and have not been reviewed, approved, or otherwise endorsed by any of these entities.\n\nFile v1.5.1:CLAUDE.md\n\n# Fleece — Credit Card Research & Redemption\n\n## Project Overview\n\n**Fleece** is a credit card research and award redemption toolkit. Tagline: \"Find the best card for deal saviors.\"\n\nIt has two surfaces:\n1. **Streamlit chatbot** (`fleece.py`) — conversational AI assistant backed by OpenAI\n2. **CLI** (`cli.py`) — 13 commands for card research, wallet analysis, MCC lookup, spending profile, and award redemption\n\nPublished on PyPI as [`fleece-cli`](https://pypi.org/project/fleece-cli/) · current version **0.4.0**\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n|---|---|\n| Chatbot frontend | Streamlit |\n| Chatbot LLM | OpenAI (gpt-3.5-turbo, gpt-4, gpt-4o) via LangChain |\n| Chatbot memory | ConversationEntityMemory |\n| CLI framework | Typer |\n| Live research | Brave Search API |\n| Card portfolio | SQLite (`fleece.db`) via `db.py` |\n| MCC dataset | Bundled `mcc_codes.jsonl` (981 codes, offline) |\n| Redemption URLs | `pointsyeah.py` (pure stdlib, no deps) |\n| Language | Python 3.11+ |\n\n---\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Full card report — fees, welcome offer, rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month, freshness-filtered) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps, next-card suggestions |\n| `fleece roi \"<name>\"` | First-year ROI estimate by spend profile |\n| `fleece recommend \"<profile>\"` | Card recommendations for a spending profile |\n\n### Redemption & Profile (no API key needed — work fully offline)\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Offline MCC code lookup (981 codes bundled). Add `--wallet` to cross-reference saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile show` | Display spending profile |\n| `fleece profile set <field> <value>` | Set a profile field |\n| `fleece profile unset <field>` | Clear a profile field |\n| `fleece profile fields` | List all 10 profile fields |\n\nAll commands support `--json` for agent-friendly output and `-` to read arguments from stdin.\n\n### BRAVE_API_KEY\nOptional at startup — checked only when a research command actually runs. `mcc`, `flights`, `hotels`, and `profile` work with no key set.\n\n### Spending Profile\nStored in `fleece.db` (table: `profile`). Fields: `dining_monthly`, `groceries_monthly`, `travel_monthly`, `gas_monthly`, `other_monthly`, `annual_fee_tolerance`, `points_programs`, `home_airport`, `goal`, `preferences`.\n\nOnce set, profile context is automatically injected into:\n- `fleece roi` — pulls spend values when flags not passed\n- `fleece wallet` — tailors gap analysis to the user's actual spend\n- `fleece recommend` — prepends profile context to the search query\n\n---\n\n## Key Files\n\n| File | Purpose |\n|---|---|\n| `cli.py` | Main CLI entry point (Typer app) |\n| `fleece.py` | Streamlit chatbot app |\n| `db.py` | SQLite helpers for card portfolio and spending profile (`fleece.db`) |\n| `pointsyeah.py` | PointsYeah URL generation (pure stdlib, merged from archived `pointsyeah-cli`) |\n| `mcc_codes.jsonl` | Bundled MCC dataset (981 codes, source: greggles/mcc-codes) |\n| `tools/brave_client.py` | Brave Search API client |\n| `tools/credit_card_tools.py` | LangChain tools for the chatbot |\n| `pyproject.toml` | Package config — hatchling build, `fleece` entry point |\n| `install.sh` | Installs Claude Code skills and/or agent skill |\n\n---\n\n## Agent Skills\n\n### Claude Code (`/.claude/skills/`)\n13 slash commands installed via `bash install.sh --claude`:\n\n**Research:** `/fleece-card` `/fleece-rates` `/fleece-partners` `/fleece-credits` `/fleece-news` `/fleece-compare` `/fleece-wallet` `/fleece-roi` `/fleece-recommend`\n\n**Redemption:** `/fleece-mcc` `/fleece-flights` `/fleece-hotels`\n\n**Profile:** `/fleece-profile`\n\n### ClawHub / OpenClaw (`/.agents/skills/fleece/SKILL.md`)\nPublished on ClawHub as `fleece@1.5.0`. Install via `clawhub install fleece` or `bash install.sh --agents`.\n\n---\n\n## CI/CD\n\n| Workflow | Trigger | Action |\n|---|---|---|\n| `publish.yml` | Push `v*` tag | Build and publish to PyPI via OIDC trusted publishing |\n| `publish-skills.yml` | Push to `main` touching `.agents/skills/` or `.claude/skills/` | Publish to ClawHub via `CLAWHUB_TOKEN` secret |\n\nGitHub environment `pypi` is required for the PyPI workflow (OIDC).\n\n---\n\n## Landing Page\n\n`docs/` is served as GitHub Pages at **https://getfleece.io/**.\n\nContains `index.html`, `sitemap.xml`, `robots.txt`. Submitted to Google Search Console. JSON-LD structured data included.\n\nSEO notes tracked in `docs/SEO.md`.\n\n---\n\n## Infrastructure Notes\n\n- **Databricks**: No resources available. Do not suggest Databricks solutions until provisioned.\n- **pointsyeah-cli**: Archived. All functionality merged into fleece (`pointsyeah.py`, `fleece flights`, `fleece hotels`).\n\n---\n\n## Development Notes\n\n- Author: Yuan Chen\n- Created: March 16, 2025\n- Chatbot uses custom CSS styling (`style.css`)\n- OpenAI API key entered via Streamlit sidebar — not stored\n\nFile v1.5.1:docs/DESIGN.md\n\n# Fleece — Design Notes\n\nDesign decisions, rationale, and reference for `docs/index.html`.\n\n---\n\n## Color Palette\n\n| Token | Hex | Usage |\n|---|---|---|\n| `--yellow` | `#FFD100` | Primary accent — buttons, badges, logo, highlights |\n| `--black` | `#111111` | Hero background, nav, footer, dark sections |\n| `--white` | `#FFFFFF` | Primary page background, cards |\n| `--gray` | `#F5F5F3` | Alternate section background (About, Workflows) |\n| `-\n\nArchive v1.5.0: 2 files, 3485 bytes\n\nFiles: SKILL.md (7406b), _meta.json (125b)\n\nArchive v1.4.0: 2 files, 3144 bytes\n\nFiles: SKILL.md (6429b), _meta.json (125b)\n\nArchive v1.3.0: 2 files, 3145 bytes\n\nFiles: SKILL.md (6429b), _meta.json (125b)\n\nArchive v1.2.1: 2 files, 2614 bytes\n\nFiles: SKILL.md (5273b), _meta.json (125b)\n\nArchive v1.2.0: 2 files, 2614 bytes\n\nFiles: SKILL.md (5273b), _meta.json (125b)\n\nArchive v1.1.1: 2 files, 2612 bytes\n\nFiles: SKILL.md (5273b), _meta.json (125b)\n\nArchive v1.1.0: 2 files, 2585 bytes\n\nFiles: SKILL.md (5207b), _meta.json (125b)","readmeExcerpt":"Skill: fleece Owner: chenyuan99 Summary: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes,","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Set profile fields (no API key needed)\nfleece profile set dining_monthly 600\nfleece profile set travel_monthly 300\nfleece profile set groceries_monthly 400\nfleece profile set annual_fee_tolerance 550\nfleece profile set home_airport JFK\nfleece profile set goal \"business class to Tokyo 2027\"\nfleece profile set points_programs \"Amex MR, Chase UR\"\n\n# View current profile\nfleece profile show --json\n\n# List all available fields\nfleece profile fields"},{"language":"bash","snippet":"# No need to pass --dining or --travel flags\nfleece roi \"Amex Gold\"\nfleece recommend \"travel rewards\""},{"language":"text","snippet":"fleece wallet            → coverage map, overlaps, gaps, next-card suggestions\nfleece mcc 5411          → confirm \"Grocery Stores, Supermarkets\"\nfleece mcc 5411 --wallet → find best card for that exact merchant type\nfleece recommend \"grocery stores, gas, transit\"  → suggest a card to fill the gap"},{"language":"bash","snippet":"# Install once\npip install fleece-cli\n\n# Set in environment or .env file\nexport BRAVE_API_KEY=<your_key>"},{"language":"bash","snippet":"fleece card \"<card name>\" --json"},{"language":"bash","snippet":"fleece rates \"<card name>\" --json\nfleece rates \"<card name>\" --category \"<dining|travel|groceries|gas>\" --json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.6.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\", \"Do Bilt points transfer to Hyatt?\"\n- **Point valuations**: \"How much are Chase UR points worth?\", \"Best way to redeem Amex MR?\", \"What CPP can I get from Hyatt?\", \"Is it worth transferring to Flying Blue?\"\n- **Application rules**: \"What is Chase 5/24?\", \"Can I get the Sapphire bonus again?\", \"Am I eligible for the Amex Gold offer?\", \"How long before I can apply for Citi again?\", \"Does the Amex once-per-lifetime rule apply here?\"\n- **Lounge access**: \"Which cards get me into Centurion Lounges?\", \"Does Venture X include Priority Pass?\", \"Best card for airport lounge access?\", \"Can I bring guests to Chase Sapphire Lounges?\"\n- **Travel protections**: \"Does Sapphire Reserve cover rental cars?\", \"What trip delay coverage does Amex Platinum have?\", \"Which card has the best travel insurance?\", \"Does Freedom Flex have cell phone protection?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\", \"My preferred airline is United MileagePlus\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and research commands become personalised.\n\n```bash\n# Set profile fields (no API key neede"},{"path":"skills/fleece-gmail-spend/SKILL.md","content":"---\nname: fleece-gmail-spend\ndescription: Analyze purchase receipts, order confirmations, travel bookings, subscriptions, and refund emails in a connected Gmail account to estimate spending habits, then compare those habits with cards saved in the Fleece wallet. Use for Gmail-based consumption analysis, spend-category summaries, card-position reviews, missed-rewards estimates, wallet coverage gaps, best-card-by-category guidance, and proposed Fleece spending-profile updates.\n---\n\n# Fleece Gmail Spend\n\nCombine read-only Gmail evidence with Fleece wallet data to show how well the user's current cards fit actual spending. Treat email-derived totals as estimates, not a bank-statement substitute.\n\n## Workflow\n\n1. Establish the analysis window. Use the user's dates; otherwise analyze the most recent 90 days and state that scope.\n2. Read the current Fleece position before recommending changes:\n   ```bash\n   fleece cards list --json\n   fleece profile show --json\n   ```\n3. Search Gmail for transaction evidence. Prefer Gmail-native search, then batch-read shortlisted messages. Start with queries such as:\n   ```text\n   newer_than:90d (subject:(receipt OR order OR purchase OR invoice) OR from:(uber.com doordash.com instacart.com amazon.com))\n   newer_than:90d (subject:(booking OR itinerary OR reservation) OR from:(airbnb.com expedia.com))\n   newer_than:90d subject:(refund OR refunded OR cancellation)\n   ```\n   Adapt merchant and issuer terms to the mailbox. Search broad categories separately when one query would truncate coverage.\n4. Extract only the transaction date, merchant, amount, currency, likely category, order status, and source message ID. Do not expose full message bodies or unrelated personal data.\n5. Normalize and deduplicate:\n   - Count the final charged total once, not order, shipping, and delivery updates separately.\n   - Subtract confirmed refunds and exclude canceled orders.\n   - Separate taxes, tips, and fees only when clearly itemized; otherwise retain the final total.\n   - Keep non-USD transactions separate unless a reliable conversion amount appears in the email.\n   - Exclude marketing offers, reward summaries, balance notices, and statements that duplicate itemized receipts.\n6. Classify spending into Fleece profile categories: dining, groceries, travel, gas, and other. Mark uncertain classifications and avoid inventing MCCs. Use `fleece mcc <code> --wallet --json` only when an MCC is explicitly present.\n7. Calculate monthly estimates using only covered days. Report total captured spend, monthly average, category share, recurring merchants or subscriptions, and evidence coverage.\n8. Compare the observed mix with current cards:\n   ```bash\n   fleece wallet --json\n   ```\n   If `BRAVE_API_KEY` is unavailable, use saved card reward metadata and label the comparison partial. Do not guess current benefits or annual fees.\n9. Identify the best current card for each observed category, weak or overlapping coverage, explicit card misuse, and conserv"},{"path":"skills/fleece/SKILL.md","content":"---\nname: fleece\ndescription: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli.\nmetadata:\n  author: chenyuan99\n  version: \"1.6.0\"\n---\n\n# Fleece — Credit Card Research & Redemption\n\nUse this skill when the user asks about:\n- **Specific cards**: \"What are the Amex Gold benefits?\", \"Is the Chase Sapphire Preferred worth it?\", \"What changed with the Citi Double Cash?\"\n- **Earning rates**: \"Which card earns the most on dining?\", \"What's the best card for groceries?\"\n- **Transfer partners**: \"Where can I transfer Chase Ultimate Rewards?\", \"What airlines does Amex transfer to?\", \"Do Bilt points transfer to Hyatt?\"\n- **Point valuations**: \"How much are Chase UR points worth?\", \"Best way to redeem Amex MR?\", \"What CPP can I get from Hyatt?\", \"Is it worth transferring to Flying Blue?\"\n- **Application rules**: \"What is Chase 5/24?\", \"Can I get the Sapphire bonus again?\", \"Am I eligible for the Amex Gold offer?\", \"How long before I can apply for Citi again?\", \"Does the Amex once-per-lifetime rule apply here?\"\n- **Lounge access**: \"Which cards get me into Centurion Lounges?\", \"Does Venture X include Priority Pass?\", \"Best card for airport lounge access?\", \"Can I bring guests to Chase Sapphire Lounges?\"\n- **Travel protections**: \"Does Sapphire Reserve cover rental cars?\", \"What trip delay coverage does Amex Platinum have?\", \"Which card has the best travel insurance?\", \"Does Freedom Flex have cell phone protection?\"\n- **Statement credits**: \"How do I use the Amex Gold dining credit?\", \"What credits does the Venture X have?\"\n- **Wallet optimization**: \"Which card should I use for travel?\", \"What gaps does my wallet have?\"\n- **Card recommendations**: \"Best travel credit card for beginners\", \"No annual fee cash back card\"\n- **ROI / value**: \"Is the Amex Platinum worth the $695 fee?\", \"First-year value of the Sapphire Preferred\"\n- **Award redemptions**: \"Find business class flights JFK to Tokyo\", \"Search hotels in Paris with points\"\n- **Merchant lookup**: \"What card should I use at Costco?\", \"Which card earns the most at gas stations?\", \"What MCC is a pharmacy?\"\n- **Spending profile**: \"Set up my profile\", \"Save my spending habits\", \"Remember I spend $600/month on dining\", \"My preferred airline is United MileagePlus\"\n\nLive US credit card data via Brave Search. All commands output JSON for programmatic use.\n\n## Spending profile\n\nThe user's spending profile is stored in `fleece.db` and automatically injected into `fleece wallet`, `fleece roi`, and `fleece recommend`. Set it up once and research commands become personalised.\n\n```bash\n# Set profile fields (no API key neede"},{"path":"ios/README.md","content":"# Fleece iOS App\n\nNative SwiftUI iPhone app that:\n\n1. Tracks your location with CoreLocation\n2. Uses **Apple MapKit `MKLocalSearch`** (free, no API key) to identify the store you're in\n3. Maps `MKPointOfInterestCategory` → **MCC category** (dining, groceries, gas, hotels, etc.)\n4. Ranks all cards by effective reward rate for that category\n5. Fires a **local push notification**: *\"Use Amex Gold · 4x Dining = 7.2% back (Amex MR)\"*\n\n**Zero per-request cost.** All place lookups stay on-device via Apple's MapKit framework.\n\n---\n\n## Setup\n\nNo API keys needed. Just:\n\n1. Open Xcode → create a new **iOS App** project\n   - Product Name: `FleeceApp`\n   - Interface: **SwiftUI** / Language: **Swift**\n   - Bundle ID: `io.getfleece.app`\n\n2. Drag all `.swift` files from this directory into the Project Navigator (preserving folder groups)\n\n3. Replace the generated `Info.plist` with the one in this directory\n\n4. Under **Signing & Capabilities**, add:\n   - **Background Modes → Location updates** (optional, for background detection)\n\n5. Build and run on a physical device (CoreLocation requires real hardware)\n\n---\n\n## Architecture\n\n```\nFleeceApp/\n├── FleeceApp.swift          — App entry; requests location + notification permissions\n├── ContentView.swift        — TabView: Home / Wallet / Settings\n├── AppState.swift           — Central @ObservableObject: orchestrates search + wallet\n├── Config.swift             — Detection radius, notification cooldown constants\n│\n├── Views/\n│   ├── HomeView.swift               — MapKit map + current place banner + card scroll\n│   ├── RecommendationCardView.swift — Horizontal card chips + full recommendations sheet\n│   ├── WalletView.swift             — Add/remove cards from wallet\n│   └── SettingsView.swift           — App info (no API key needed)\n│\n├── Managers/\n│   ├── LocationManager.swift     — CLLocationManager wrapper (@MainActor)\n│   ├── PlacesService.swift       — MKLocalSearch wrapper (free, actor)\n│   └── NotificationManager.swift — UNUserNotificationCenter, 5-min cooldown\n│\n├── Models/\n│   ├── MCCCategory.swift   — MKPointOfInterestCategory → MCC mapping\n│   ├── CreditCard.swift    — Card model + Color(hex:) extension\n│   ├── NearbyPlace.swift   — Place model + MKMapItem conversion\n│   └── Recommendation.swift — Ranked recommendation result\n│\n└── Services/\n    ├── CardDatabase.swift   — 9 hard-coded US cards (Chase, Amex, Citi, CapOne, Bilt)\n    └── CardRecommender.swift — Sorts cards by effective rate, wallet cards first\n```\n\n## MKPointOfInterestCategory → MCCCategory Mapping\n\n| MCCCategory | MKPointOfInterestCategory values |\n|---|---|\n| Dining | restaurant, cafe, bakery, brewery, winery, nightlife |\n| Groceries | foodMarket |\n| Gas | gasStation |\n| Hotels | hotel |\n| Flights | airport |\n| Transit | publicTransport |\n| Drugstore | pharmacy |\n| Entertainment | movieTheater, stadium, musicVenue, amusementPark, bowling, zoo, aquarium |\n| Shopping | store, clothing |\n\n## Card Database (9 cards)\n\n| Card | Top Category | Effect"},{"path":"README.md","content":"# Fleece — Credit Card Research & Redemption\n\n[![PyPI version](https://img.shields.io/pypi/v/fleece-cli?color=FFD100&label=fleece-cli)](https://pypi.org/project/fleece-cli/)\n[![PyPI downloads](https://img.shields.io/pypi/dm/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![Python](https://img.shields.io/pypi/pyversions/fleece-cli?color=FFD100)](https://pypi.org/project/fleece-cli/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-FFD100.svg)](https://github.com/chenyuan99/fleece/blob/main/LICENSE)\n[![Publish to PyPI](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml/badge.svg)](https://github.com/chenyuan99/fleece/actions/workflows/publish.yml)\n[![ClawHub](https://img.shields.io/badge/ClawHub-fleece%401.5.0-FFD100)](https://clawhub.ai)\n[![Website](https://img.shields.io/website?url=https%3A%2F%2Fgetfleece.io&color=FFD100&label=getfleece.io)](https://getfleece.io/)\n\n> Find the best card for deal saviors.\n\nFleece is a free, open-source credit card research and award redemption toolkit. It provides live data via Brave Search — no stale training data. Every command outputs clean JSON, making it easy to plug into AI agent workflows.\n\n---\n\n## Quick Start\n\n```bash\npip install fleece-cli\nexport BRAVE_API_KEY=<your_key>   # optional — offline commands work without it\n\nfleece card \"Amex Gold\"           # full card report\nfleece wallet                     # portfolio analysis\nfleece mcc 5812                   # MCC lookup (no API key needed)\nfleece flights JFK NRT --date 2026-06-01 --cabin business --open\n```\n\n### Install as an agent skill (55+ agents)\n\n```bash\nnpx skills add chenyuan99/fleece\n```\n\nWorks with Claude Code, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, Codex, Warp, Kiro, and more — all from one command.\n\n## CLI Commands\n\n### Research (requires `BRAVE_API_KEY`)\n\n| Command | Description |\n|---|---|\n| `fleece card \"<name>\"` | Fees, welcome offer, earning rates, credits, benefits |\n| `fleece rates \"<name>\"` | Earning rates by spend category |\n| `fleece partners \"<name>\"` | Transfer partners, ratios, and timing |\n| `fleece credits \"<name>\"` | Statement credits and perks |\n| `fleece news \"<name>\"` | Recent changes (past month) |\n| `fleece compare \"<A>\" \"<B>\"` | Side-by-side card comparison |\n| `fleece wallet` | Portfolio analysis — coverage, overlaps, gaps |\n| `fleece roi \"<name>\"` | First-year ROI estimate |\n| `fleece recommend \"<profile>\"` | Personalized card recommendations |\n\n### Offline (no API key needed)\n\n| Command | Description |\n|---|---|\n| `fleece mcc <code>` | Look up a Merchant Category Code (981 codes bundled) |\n| `fleece mcc <code> --wallet` | Cross-reference MCC with your saved cards |\n| `fleece flights <ORIGIN> <DEST> --date <YYYY-MM-DD>` | PointsYeah award flight search URL |\n| `fleece hotels \"<location>\" --checkin <date> --checkout <date>` | PointsYeah award hotel search URL |\n| `fleece profile set <field> <value>` | Save your spending profile |\n| `fleece profile show` | View your "}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes, and search award flights and hotels. Install with pip install fleece-cli. Skill: fleece Owner: chenyuan99 Summary: Credit card research and redemption CLI. Looks up rewards rates, annual fees, welcome bonuses, statement credits, transfer partners, point valuations, application rules, lounge access, and travel protections for Chase, Amex, Citi, Capital One, Bilt, and all major US issuers. Compare cards, analyze wallet gaps, estimate ROI, get recommendations, look up merchant category codes,","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1435,"uniquenessScore":48,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T14:04:15.736Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T17:36:43.066Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}