/SKILL.md
Track daily calorie and macro intake for Rajiv and Jasleen using LIVE verified data from the FatSecret MCP server at https://rajivfood.duckdns.org/mcp. TRIGGER PHRASES: ADD: "add R", "+ R", "add Rajiv", "log R", "add J", "+ J", "add Jasleen", "log J" or just "add [food]" with no R/J → ask who then continue DATE: "add R to dd-mm [food]", "add J to dd-mm [food]" VIEW: "calorie R dd-mm", "calorie J dd-mm", "day R", "day J", "summary R", "summary J" DELETE: "delete R [entry_id]", "delete J [entry_id]" UPDATE: "update R [entry_id]", "update J [entry_id]" WEIGHT: "weight R [kg]", "weight J [kg]"
npx skillsauth add rjvrai01-beep/calorie-counter calorie-counterInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Track daily food for Rajiv and Jasleen using LIVE FatSecret data via
https://rajivfood.duckdns.org/mcp. All nutrition values, confidence scores
and verification links come from this MCP server — never from Claude's own knowledge.
FatSecret:delete_food_entry — never just redraw table without it| Person | Weekday (Mon–Fri) | Weekend (Sat–Sun) | |---------|-------------------|-------------------| | Rajiv | 1,650 kcal | 2,100 kcal | | Jasleen | 1,650 kcal | 2,100 kcal |
Extract from user message:
add R 100 gm rice → rice, 100gadd R rice 100g → rice, 100gadd R 2 rotis and dal → roti × 2, dal × 1add J 1 cup poha → poha, 1 cupadd R chicken biryani 250gm → chicken biryani, 250gadd J poha → poha, default servingBuild:
foods list: individual food names → e.g. ["rice"] or ["roti", "dal"]qty_map: quantity per food → e.g. {"rice": "100g"} or {"roti": "2 pieces"}Call: FatSecret:search_multi_food
Input: {
foods: ["rice"], ← individual food names only
qty_map: {"rice": "100g"}, ← quantities mapped per food
region: "IN"
}
The server returns structured blocks including:
TABLE_ROW: — pre-formatted markdown table row (copy this DIRECTLY)CONFIDENCE: — score/100 + emojiFATSECRET_URL: — verification linkSTATUS: — AUTO_LOG, CONFIRM, or MANUAL_PICKAct on STATUS:
AUTO_LOG → copy TABLE_ROW into calorie table, then call log_foodCONFIRM → show user: "I found '[food name]' for '[query]' — correct? (y/n)"
If yes → copy TABLE_ROW_IF_CONFIRMED, call log_foodMANUAL_PICK → show ALT options by number, wait for user choiceThen call log_food for each confirmed item:
Call: FatSecret:get_food { food_id: "[id from search result]" }
→ gets serving_id and exact per-serving nutrition
Call: FatSecret:log_food {
food_id: "[id]",
serving_id: "[default serving_id from get_food]",
quantity: [number],
meal: "[meal]",
date: "[YYYY-MM-DD]"
}
Finally always call:
Call: FatSecret:get_day_summary {
date: "[YYYY-MM-DD]",
calorie_target: 1650
}
Use the TOTALS_ROW and PCT_ROW from this response for the table footer.
Header (bold): Rajiv DD-MM Calorie Counter or Jasleen DD-MM Calorie Counter
Exact column order — always 8 columns (# is row number prefix):
| # | Food Name | Qty | Calories | Protein (g) | Fat (g) | Carbs (g) | Confidence | FatSecret Link | |---|-----------|-----|----------|-------------|---------|-----------|------------|----------------|
Confidence column:
TABLE_ROW in server response88/100 ✅ or 65/100 ⚠️ or 35/100 ❌FatSecret Link column:
TABLE_ROW in server response[🔗 View](https://foods.fatsecret.com/...)Nutrition values:
TABLE_ROW in server responseCopy TOTALS_ROW from get_day_summary response EXACTLY:
| **TOTAL** | — | — | — | — | **ΣCal** | **ΣP g** | **ΣF g** | **ΣC g** |
Copy PCT_ROW from get_day_summary response EXACTLY:
| **% of 1650** | — | — | — | — | **XX%** | **P:XX%** | **F:XX%** | **C:XX%** |
Then on a new line below the table: Remaining: XXX kcal ✅ FatSecret REST API — Global Database (Live)
If get_day_summary response contains WARNING: line → copy it below the table as-is.
add R to DD-MM food:
→ Call get_diary(date) first → loads existing TABLE_ROWs → append new food"day R" / "summary R" / "calorie R today":
→ Call get_day_summary(today, 1650)
→ Build table using ALL_ITEMS_TABLE_ROWS from response
→ Show with TOTALS_ROW and PCT_ROW
"calorie R DD-MM":
→ Call get_diary(date)
→ Build table using TABLE_ROW entries from response
Delete triggers — any of these phrases mean the user wants to remove a food:
MANDATORY delete flow — always follow these exact steps:
IF user gives a food name (not an entry_id):
Step A: Call FatSecret:get_diary { date: today }
→ Find the entry where food_entry_name matches the food name
→ Get its food_entry_id
Step B: Confirm with user:
"I found [food name] with entry_id [id] — delete it? (y/n)"
Step C: If yes → Call FatSecret:delete_food_entry { entry_id: "[id]" }
IF user gives an entry_id directly:
Step A: Call FatSecret:delete_food_entry { entry_id: "[id]" }
ALWAYS after deletion:
Call FatSecret:get_day_summary { date: today, calorie_target: 1650 }
Show updated table with the deleted row removed
Show updated TOTAL and % rows
NEVER handle deletion by manually redrawing the table without calling delete_food_entry.
NEVER say "the skill doesn't have a delete function" — it does, via FatSecret:delete_food_entry.
"update R [entry_id] [new_qty] [meal]":
→ Call get_diary to get serving_id for that entry
→ Call update_food_entry(entry_id, serving_id, new_qty, meal)
→ Call get_day_summary to refresh
→ Show updated table
"weight R 72.5":
→ Call log_weight(72.5, today)
→ Reply: "⚖️ 72.5 kg logged for Rajiv on DD-MM"
Every successful add:
✅ FatSecret REST API — Global Database (Live)User types: add R 100 gm rice lunch
Skill does:
search_multi_food(foods=["rice"], qty_map={"rice":"100g"}, region="IN")| White Rice (Cooked) | 100g | 91/100 ✅ | [🔗 View](https://foods.fatsecret.com/calories-nutrition/generic/white-rice-cooked) | 130 | 2.7 | 0.3 | 28.0 |Rajiv 15-06 Calorie Counter
| # | Food Name | Qty | Calories | Protein (g) | Fat (g) | Carbs (g) | Confidence | FatSecret Link | |---|-----------|-----|----------|-------------|---------|-----------|------------|----------------| | 1 | White Rice (Cooked) | 100g | 91/100 ✅ | 🔗 View | 130 | 2.7 | 0.3 | 28.0 | | | TOTAL | — | — | — | 130 | 2.7 | 0.3 | 28.0 | | | % of 1650 | — | — | — | 7.9% | P:8% | F:2% | C:90% |
Remaining: 1,520 kcal ✅ FatSecret REST API — Global Database (Live)
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.