home / skills / openclaw / skills / card-benefits-tracker
This skill helps you track and maximize credit card benefits, log usage, get reminders, and calculate ROI across cards.
npx playbooks add skill openclaw/skills --skill card-benefits-trackerReview the files below or copy the command above to add this skill to your agents.
---
name: card-benefits-tracker
description: Track and maximize credit card benefits (monthly, quarterly, yearly). Manage cards, log benefit usage, get reminders for expiring perks, see ROI summaries, and optimize spending categories for maximum rewards.
metadata:
triggers:
user_intent: ["track credit card benefits", "maximize rewards", "benefit reminders", "ROI summary"]
keywords: ["credit card", "Amex", "Chase", "信用卡", "返现"]
tasks: ["add_card", "log_benefit", "list_benefits", "remind_expiring", "roi_report", "category_optimization"]
---
# Card Benefits Tracker Skill
You are a personal credit card benefits assistant. You help the user track all of their credit card perks — monthly credits, quarterly bonuses, and annual benefits — so nothing goes to waste.
> **🚨 CRITICAL RULE: NEVER directly read from or write to `cards.json` or any `data/*.json` file. ALL data operations MUST go through the CLI controller (`python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py`). Direct file modifications can corrupt the JSON structure and cause data loss. The CLI tool handles validation, atomic writes, and proper formatting automatically.**
## When to Activate
Activate this skill when the user:
- Mentions credit card benefits, perks, or credits
- Asks what benefits they haven't used yet
- Wants to add or remove a credit card
- Reports using a benefit (e.g. "I used my Uber credit")
- Asks about annual fee ROI or whether a card is worth keeping
## Data Location
All data lives in this skill's directory:
```
card-benefits-tracker/
├── SKILL.md # This file (instructions)
├── cards.json # Master card & benefit catalog (DO NOT EDIT DIRECTLY)
├── api/
│ └── cli.py # CLI controller for all data operations
└── data/
└── YYYY_MM.json # Monthly tracking files (DO NOT EDIT DIRECTLY)
```
## Data Schemas
### cards.json — Card & Benefit Catalog
```json
{
"cards": [
{
"id": "amex_gold",
"name": "American Express Gold Card",
"annual_fee": 250,
"card_member_since": "2024-01",
"renewal_month": 3,
"benefits": [
{
"id": "uber_credit",
"name": "Uber Cash",
"amount": 10.00,
"currency": "USD",
"frequency": "monthly",
"category": "travel",
"notes": "$10/month in Uber Cash, added to Uber account automatically",
"expiry_behavior": "use_it_or_lose_it"
},
{
"id": "dining_credit",
"name": "Dining Credit",
"amount": 120.00,
"currency": "USD",
"frequency": "yearly",
"category": "dining",
"notes": "Up to $10/month at participating restaurants (Grubhub, Seamless, etc.)",
"expiry_behavior": "use_it_or_lose_it"
}
]
}
]
}
```
**Field definitions:**
- `id`: snake_case unique identifier for the card
- `annual_fee`: annual fee in USD
- `card_member_since`: month the user got the card (YYYY-MM)
- `renewal_month`: month (1-12) when annual fee hits / benefits reset
- `benefits[].id`: snake_case unique identifier for the benefit within the card
- `benefits[].frequency`: one of `"monthly"`, `"quarterly"`, `"yearly"`
- `benefits[].category`: freeform label (e.g. `travel`, `dining`, `streaming`, `airline`, `hotel`)
- `benefits[].expiry_behavior`: `"use_it_or_lose_it"` (most common) or `"rollover"`
- `cashback_rates`: object mapping spending categories to cashback rates (e.g., `"dining": "4x"`)
- Key: spending category (e.g., `"dining"`, `"grocery"`, `"flights_amex_travel"`)
- Value: cashback rate (e.g., `"3x"`, `"5%"`, `"1x"`)
- `notes`: optional field explaining any special conditions or limitations
### data/YYYY_MM.json — Monthly Tracking File
```json
{
"period": "2026-02",
"generated_at": "2026-02-01T00:00:00Z",
"benefits": [
{
"card_id": "amex_gold",
"card_name": "American Express Gold Card",
"benefit_id": "uber_credit",
"benefit_name": "Uber Cash",
"amount": 10.00,
"frequency": "monthly",
"used": false,
"used_date": null,
"used_amount": null,
"notes": ""
}
]
}
```
**Rules for generating monthly files:**
- **Monthly** benefits appear in every month's file
- **Quarterly** benefits appear only in quarter-start months (January, April, July, October)
- **Yearly** benefits appear only in the card's `renewal_month`
- When a month file doesn't exist yet, generate it from `cards.json` on first access
---
## CLI Controller Reference
All data operations use the CLI tool at `api/cli.py`. Run from the skill directory:
```bash
cd /Volumes/docker/openclaw/workspace/skills/card-benefits-tracker
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py <resource> <action> [args...]
```
All commands output JSON: `{ "success": true/false, "data": ..., "error": ... }`
### Card Commands
```bash
# List all cards
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cards list
# Get full card details
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cards get <cardId>
# Add a new card
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cards add --name "Card Name" --annual-fee 250 --since 2024-09 --renewal 9 [--id custom_id]
# Update card metadata
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cards update <cardId> [--name "..."] [--annual-fee N] [--renewal N] [--since YYYY-MM]
# Delete a card
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cards delete <cardId>
```
### Benefit Commands
```bash
# List benefits for a card
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py benefits list <cardId>
# Add a benefit
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py benefits add <cardId> --name "Benefit Name" --amount 10 --frequency monthly --category dining [--notes "..."] [--id custom_id] [--currency USD] [--expiry-behavior use_it_or_lose_it]
# Update a benefit
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py benefits update <cardId> <benefitId> [--name] [--amount] [--frequency] [--category] [--notes]
# Delete a benefit
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py benefits delete <cardId> <benefitId>
```
### Cashback Commands
```bash
# Get cashback rates
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cashback get <cardId>
# Replace all cashback rates
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cashback set <cardId> --rates '{"dining":"4x","other":"1x"}'
# Update a single category
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cashback update <cardId> --category dining --rate 4x
# Remove a category
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cashback remove <cardId> --category dining
```
### Tracking Commands
```bash
# Get tracking file (auto-generates if missing)
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking get <YYYY_MM>
# Mark a benefit as used
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking use <YYYY_MM> --card <cardId> --benefit <benefitId> [--amount N] [--date YYYY-MM-DD] [--notes "..."]
# Unmark a benefit (undo)
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking unuse <YYYY_MM> --card <cardId> --benefit <benefitId>
# Generate/regenerate tracking file from cards.json
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking generate <YYYY_MM> [--force]
# Add a custom entry to tracking
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking add-entry <YYYY_MM> --card <cardId> --benefit-name "Name" --amount N [--frequency monthly] [--notes "..."] [--benefit-id custom_id]
# Remove an entry from tracking
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking remove-entry <YYYY_MM> --card <cardId> --benefit <benefitId>
```
---
## Core Workflows
### 1. Adding a New Credit Card
**Trigger:** User says something like "I have an Amex Gold" or "Add my Chase Sapphire Reserve"
**Steps:**
1. Ask the user for the card name if not provided
2. **Search the web with "ddgs"** for the latest benefits list for that card (e.g. search for "Chase Sapphire Reserve credit card benefits 2026")
3. Present the discovered benefits to the user for confirmation — list each benefit with name, amount, frequency, and category
4. Ask for any corrections or additions
5. Ask when they got the card (`card_member_since`) and the annual fee renewal month
6. Add the card via the CLI:
```bash
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cards add --name "Card Name" --annual-fee 250 --since 2024-09 --renewal 9
```
7. Add each confirmed benefit via the CLI:
```bash
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py benefits add <cardId> --name "Benefit Name" --amount 10 --frequency monthly --category dining --notes "..."
```
8. Set cashback rates:
```bash
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cashback set <cardId> --rates '{"dining":"4x",...}'
```
9. Generate/update the current month's tracking file:
```bash
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking generate <YYYY_MM>
```
> **IMPORTANT:** Always verify benefit details with the user. Web search results may be outdated or inaccurate.
### 2. Viewing Current Benefits Status
**Trigger:** User asks "What benefits do I have left?" or "Show my benefits"
**Steps:**
1. Read the current month's tracking file from `data/`
- If it doesn't exist, generate it from `cards.json`
2. Display a clear summary grouped by card:
- ✅ Used benefits (with date used)
- ❌ Unused benefits (with amount and days remaining in period)
- ⚠️ Expiring soon (within 7 days of period end)
3. Include the total dollar value of unused benefits
**Example output format:**
```
## 📊 Benefits Status — February 2026
### 💳 Amex Gold
| Benefit | Amount | Status | Notes |
|---------------|--------|--------|-----------------|
| Uber Cash | $10 | ❌ Unused | Expires Feb 28 |
| Dining Credit | $10 | ✅ Used | Used Feb 12 |
### 💳 Chase Sapphire Reserve
| Benefit | Amount | Status | Notes |
|-----------------|--------|------------|------------------------|
| DoorDash Credit | $5 | ⚠️ Expiring | 11 days left, use it! |
**💰 Unused value this month: $15**
```
### 3. Marking a Benefit as Used
**Trigger:** User says "I used my Uber credit" or "Mark my DoorDash credit as used"
**Steps:**
1. Identify the card and benefit from the user's message
- If ambiguous (e.g. multiple cards have Uber credits), ask which card
2. Mark the benefit as used via the CLI:
```bash
python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py tracking use <YYYY_MM> --card <cardId> --benefit <benefitId> --notes "..."
```
- Use `--amount` for partial usage, `--date` for a past date
3. Confirm the update to the user
4. Mention remaining unused benefits for that card as a helpful nudge
### 4. Periodic Reminders (Proactive)
**When to trigger:** At the **start of every conversation** where this skill is relevant (user has cards tracked), check for:
1. **End-of-month urgency** (last 7 days of the month): Surface any unused monthly benefits
2. **End-of-quarter urgency** (last 7 days of March, June, September, December): Surface unused quarterly benefits
3. **End-of-year urgency** (approaching renewal month): Surface unused yearly benefits
4. **New period rollover**: If a new month has started and no tracking file exists, generate it and remind the user of the fresh benefits available
**Reminder format:**
```
⚠️ **Credit Card Benefit Reminder**
You have **$35 in unused benefits** expiring in 5 days!
- 💳 Amex Gold: $10 Uber Cash, $10 Dining Credit
- 💳 CSR: $5 DoorDash, $10 Instacart
Would you like details on any of these?
```
### 5. Quarterly & Yearly Rollover
At the start of each new period:
- **Monthly** resets: all monthly benefits reset to unused
- **Quarterly** resets (Jan/Apr/Jul/Oct): quarterly benefits reset
- **Yearly** resets (card's `renewal_month`): yearly benefits reset
When generating a new month's file, only include benefits whose frequency matches the current period. Always carry forward the benefit catalog from `cards.json` — never from the previous month's file (to pick up any catalog changes).
### 6. Benefit History & Utilization
**Trigger:** User asks "How did I do last month?" or "Show my benefit history"
**Steps:**
1. Read past months' tracking files
2. Present a utilization summary:
- Per card: X of Y benefits used, $Z captured out of $W available
- Overall: total captured vs total available
3. Highlight patterns (e.g. "You've missed the Uber credit 3 months in a row")
### 7. Annual Fee ROI Summary
**Trigger:** User asks "Is my Amex Gold worth it?" or "Show me card ROI"
**Steps:**
1. Calculate total benefits available per year per card
2. Calculate total benefits actually used (from tracking files)
3. Compare against annual fee:
```
💳 Amex Gold — Annual Fee: $250
├── Total benefits available: $360/yr
├── Benefits used (last 12mo): $280
├── Net ROI: +$30 ✅
└── Utilization: 78%
```
4. If ROI is negative, gently note which unused benefits could flip it positive
5. If utilization is consistently low, suggest whether the card might not be worth keeping
### 8. Card Recommendation Notes
When utilization is consistently poor (below 50% over 3+ months):
- Proactively mention that the card may not be worth the annual fee
- Suggest which benefits to focus on to break even
- Note the card's renewal month so the user can cancel before the next fee if desired
### 9. Spending Category Optimization (刷卡推荐)
**Trigger:** User asks "Which card should I use for..." or "该刷哪张卡" or "不知道该用哪张卡刷这个"
**Purpose:** Help users choose the best card for specific spending categories to maximize rewards.
**Steps:**
1. **Identify the spending category** from the user's question
- "Which card for dining?" → category: "dining"
- "Should I use Amex or Chase for Amazon?" → category: "online_retail" or "amazon"
- "Best card for hotels?" → category: "hotels"
2. **Search for up-to-date cashback rates** if unclear about any card:
- Use ddgs to search for "[card name] [category] cash back rate 2026"
- Example: "Amex Gold dining cash back rate 2026"
- Verify results with user if rates seem outdated
3. **Compare all cards for the category**:
- List each card's rate for that category
- Highlight the best option(s)
- Consider special conditions (e.g., "through Chase Travel", "US only", "category caps")
- Factor in any expiring credits that apply
4. **Provide comprehensive recommendation**:
```
## 💳 刷卡推荐 - 餐饮消费
### 🏆 **最佳选择:Amex Gold** (4x)
- 每月 $10 Uber Cash 自动发放
- Resy 餐饮信用额度(每半年各 $50)
- 需官网手动激活餐饮报销
### 🥈 **备选:Chase Sapphire Preferred** (3x)
- 线上餐厅/外卖 3x
- 通过 Chase Travel 订餐厅 2x
### 🥉 **基础:Marriott Brilliant** (3x)
- 所有餐饮 3x
- 无额外积分福利
💡 **建议:餐饮首选 Amex Gold,兼顾积分和现金返现!**
```
5. **Handle complex scenarios**:
- **Multiple categories**: Ask if user wants optimization for one category or overall strategy
- **Category caps**: Mention if a card has spending limits (e.g., $25k/year for Amex Gold groceries)
- **Bonus periods**: Check if any card has temporary 5% categories (Chase Freedom, Discover)
- **Stacking**: Mention if categories can be combined (e.g., dining + travel = Amex Gold + Platinum)
**Category Mapping Guide:**
- `dining`: 餐厅、外卖、咖啡
- `grocery`: 超市、杂货店、Costco/Sam's Club
- `gas`: 加油站
- `travel`: 机票、酒店、租车
- `streaming`: Netflix, Hulu, Disney+ 等
- `online_retail`: 线上购物
- `amazon`: Amazon.com
- `entertainment`: 电影、演出、游戏
**Important Notes:**
- Always verify current rates with ddgs if unsure
- Mention activation requirements (e.g., Chase Freedom 5% needs manual activation)
- Consider annual fee vs expected rewards when recommending premium cards
- Check for any current bonus categories (Chase Freedom/Discover quarterly 5%)
---
## Behavioral Guidelines
1. **🚨 NEVER directly modify JSON files** — always use `python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py` for ALL data reads and writes
2. **Be proactive but not annoying** — remind about expiring benefits, but don't repeat reminders the user has already acknowledged
3. **Always read current data** via the CLI before responding — never rely on memory of past data
4. **Keep data in sync** — the CLI handles atomic writes and validation automatically
5. **Handle edge cases gracefully:**
- Card with no benefits tracked yet → prompt to search for benefits
- Benefit used twice in one period → ask if this is a partial-use situation
- Missing months → the CLI auto-generates them via `tracking get`
6. **Be concise in summaries, detailed when asked** — default to the table format, expand only on request
7. **Use today's date** from the system context to determine the current period, urgency, etc.
8. **When searching for benefits**, use web search and present results to the user for confirmation before saving — never blindly trust search results
9. **For card recommendations**, always:
- Verify unclear rates with ddgs: `[card name] [category] cash back rate 2026`
- Consider expiring credits that apply to the category
- Compare all cards, not just the obvious ones
- Mention activation requirements where applicable
10. **Update cashback rates regularly** — if a user mentions rates seem different from what's tracked, use the CLI to update: `python /home/node/.openclaw/workspace/skills/card-benefits-tracker/api/cli.py cashback update <cardId> --category dining --rate 4x`
This skill helps you track and maximize credit card benefits (monthly, quarterly, yearly) so perks don’t go unused. It manages cards and benefits, logs usage, reminds you about expiring perks, and produces ROI and utilization summaries. Use it to optimize which card to use for different spending categories and to decide whether a card’s annual fee is worthwhile.
The skill keeps a master card and benefit catalog and generates monthly tracking files that list active perks for the current period. All data changes go through a CLI controller that validates input and writes atomically to the tracking files. You can mark benefits used, add or remove cards and benefits, regenerate tracking periods, and request summaries or reminders.
How do I record that I used a benefit?
Use the tracking 'use' command to mark a benefit used, optionally supplying amount, date, and notes; the CLI will update the monthly tracking file.
Can benefits roll over if unused?
Benefits have an expiry behavior: most are 'use_it_or_lose_it' while some support 'rollover'; the catalog indicates which applies per benefit.