{"id":"6c60fbf6-3c24-401b-a51a-3bacf5b4f1a8","entityType":"agent","slug":"clawhub-madebydia-pantry-tracker","name":"Pantry Tracker","canonicalUrl":"https://www.xpersona.co/agent/clawhub-madebydia-pantry-tracker","canonicalPath":"/agent/clawhub-madebydia-pantry-tracker","generatedAt":"2026-10-11T16:01:32.435Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T13:40:18.843Z","emptyReason":null},"description":"Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,... Skill: Pantry Tracker Owner: madebydia Summary: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,... Tags: latest:1.3.0 Version history: v1.3.0 | 2026-03-20T16:57:46.491Z | user Add structured requires.env metadata declaring SUPABASE_URL and SUPABASE_KEY in frontmatter for security scanner visibility v1.2.0 | 20","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s176b3312npmthbt2chf2mccw183grfh:pantry-tracker","sourceUrl":"https://clawhub.ai/madebydia/pantry-tracker","homepage":"https://clawhub.ai/madebydia/skills/pantry-tracker","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/madebydia/pantry-tracker","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/madebydia/skills/pantry-tracker","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,... "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:40:18.843Z","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-11T13:40:18.843Z","emptyReason":null},"stars":null,"forks":null,"downloads":1056,"packageName":null,"latestVersion":"1.3.0","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T13:40:18.701Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T13:40:18.843Z","lastCrawledAt":"2026-10-11T13:40:18.701Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T13:40:18.701Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.0","createdAt":"2026-03-20T16:57:46.491Z","changelog":"Add structured requires.env metadata declaring SUPABASE_URL and SUPABASE_KEY in frontmatter for security scanner visibility","fileCount":6,"zipByteSize":8515},{"version":"1.2.0","createdAt":"2026-03-20T16:55:11.431Z","changelog":"Security: clarify email access is via agent's existing email tools (not this skill), explicitly list required env vars in description, no email credentials needed","fileCount":5,"zipByteSize":7235},{"version":"1.1.0","createdAt":"2026-03-20T16:53:11.855Z","changelog":"Security fix: explicitly require anon key only, clarify never to use service role key, add credential requirements to metadata description","fileCount":5,"zipByteSize":7113},{"version":"1.0.0","createdAt":"2026-03-20T16:50:35.006Z","changelog":"Initial release: email-based grocery order parsing, Supabase storage, shelf life database, morning freshness summaries","fileCount":5,"zipByteSize":6976}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s176b3312npmthbt2chf2mccw183grfh:pantry-tracker","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","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-madebydia-pantry-tracker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/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-11T16:01:32.434Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-madebydia-pantry-tracker/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-11T13:40:18.843Z","emptyReason":null},"readme":"Skill: Pantry Tracker\n\nOwner: madebydia\n\nSummary: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,...\n\nTags: latest:1.3.0\n\nVersion history:\n\nv1.3.0 | 2026-03-20T16:57:46.491Z | user\n\nAdd structured requires.env metadata declaring SUPABASE_URL and SUPABASE_KEY in frontmatter for security scanner visibility\n\nv1.2.0 | 2026-03-20T16:55:11.431Z | user\n\nSecurity: clarify email access is via agent's existing email tools (not this skill), explicitly list required env vars in description, no email credentials needed\n\nv1.1.0 | 2026-03-20T16:53:11.855Z | user\n\nSecurity fix: explicitly require anon key only, clarify never to use service role key, add credential requirements to metadata description\n\nv1.0.0 | 2026-03-20T16:50:35.006Z | user\n\nInitial release: email-based grocery order parsing, Supabase storage, shelf life database, morning freshness summaries\n\nArchive index:\n\nArchive v1.3.0: 6 files, 8515 bytes\n\nFiles: references/shelf-life.md (2660b), references/supabase-schema.sql (1181b), scripts/pantry.py (9270b), skill-card.md (2206b), SKILL.md (4237b), _meta.json (133b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: pantry-tracker\ndescription: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items, getting morning freshness summaries, or managing food waste. Email scanning is done by the agent using its existing email skill (e.g. gog for Gmail) — this skill does not access email directly or require email credentials.\nrequires:\n  env:\n    - name: SUPABASE_URL\n      description: Supabase project URL (e.g. https://xxx.supabase.co)\n      required: true\n    - name: SUPABASE_KEY\n      description: Supabase anon key (NOT service role key). Safe for client-side use.\n      required: true\n---\n\n# Pantry Tracker\n\nTrack grocery items from purchase to plate (or trash). Parses grocery order emails, stores items in Supabase with estimated expiry dates, and sends daily summaries of what needs eating.\n\n## Setup\n\n### 1. Supabase\nCreate a Supabase project and run the schema in `references/supabase-schema.sql` in the SQL editor.\n\nStore credentials as env vars:\n```\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-key\n```\n\nUse the **anon key** (not the service role key). The anon key is safe for client-side use and sufficient for all pantry operations. Never use the service role key — it bypasses Row Level Security.\n\n### 2. Cron Jobs\nSet up two cron jobs in OpenClaw:\n\n**Email scanner** (every 2-4 hours):\nUse the agent's existing email tool (e.g. `gog` for Gmail, or whatever email skill is installed) to search for grocery order confirmations. This skill does NOT access email directly — the agent reads email through its own authenticated tools, then passes parsed items to the pantry CLI.\n```\nSearch email for recent grocery orders (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json\n```\n\n**Morning summary** (daily, e.g. 7am):\n```\nRun: python3 scripts/pantry.py summary\nIf output is not \"PANTRY_OK\", send the summary to the user.\n```\n\n## CLI Reference\n\nAll commands: `python3 scripts/pantry.py <command>`\n\n| Command | Description |\n|---------|-------------|\n| `add <name> -c <category> -q <qty> -e <days>` | Add single item |\n| `bulk-add <file.json>` | Add items from JSON (email parse output) |\n| `expiring [--days N]` | Show items expiring within N days (default 3) |\n| `status` | Full pantry overview by category |\n| `use <name>` | Mark item as used |\n| `toss <name>` | Mark item as tossed/wasted |\n| `refresh` | Auto-update statuses (fresh → use-soon → expired) |\n| `summary` | Morning summary for cron (outputs PANTRY_OK if nothing urgent) |\n\n### Bulk-add JSON format\n```json\n[\n  {\n    \"name\": \"Strawberries\",\n    \"category\": \"produce\",\n    \"quantity\": \"1 lb\",\n    \"expires_days\": 5,\n    \"source\": \"whole-foods\",\n    \"order_id\": \"111-1234567\"\n  }\n]\n```\n\n## Email Parsing Guide\n\nWhen scanning grocery emails, extract:\n1. **Item name** — normalize to common name (e.g., \"Org Strawberries 1lb\" → \"Strawberries\")\n2. **Quantity** — preserve as-is from email (\"2 lbs\", \"1 bunch\", \"6 ct\")\n3. **Category** — assign: produce, dairy, meat, bakery, pantry, frozen, other\n4. **Shelf life** — look up in `references/shelf-life.md`. If not listed, estimate conservatively.\n5. **Source** — which store (whole-foods, instacart, costco, etc.)\n\n### Supported email patterns\n- **Whole Foods / Amazon Fresh**: Subject contains \"Your delivery\" or \"order delivered\"\n- **Instacart**: Subject contains \"delivery complete\" or \"order receipt\"\n- **Costco**: Subject contains \"order confirmation\"\n- **Walmart**: Subject contains \"delivery confirmed\"\n\nSearch email for these patterns. Parse the item list from the email body. When in doubt about an item's category or shelf life, use conservative estimates.\n\n## Manual Usage\n\nUsers can also say things like:\n- \"Add chicken breast to the pantry, expires in 2 days\"\n- \"What's expiring soon?\"\n- \"Mark the strawberries as used\"\n- \"I tossed the leftover salmon\"\n- \"What's in my pantry right now?\"\n\nMap these to the appropriate CLI commands.\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"pantry-tracker\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1774025866491\n}\n\nFile v1.3.0:references/shelf-life.md\n\n# Default Shelf Life (Days from Purchase)\n\nUse these as defaults when parsing grocery orders. Override with item-specific knowledge when available.\n\n## Produce\n| Item | Days | Notes |\n|------|------|-------|\n| Bananas | 5 | Ripen at room temp |\n| Berries (strawberries, blueberries, raspberries) | 5 | Refrigerate immediately |\n| Apples | 21 | Refrigerated |\n| Lemons/Limes | 21 | Refrigerated |\n| Avocados | 5 | Room temp until ripe, then 3 days fridge |\n| Leafy greens (spinach, kale, lettuce) | 5 | Refrigerated |\n| Herbs (cilantro, parsley, basil) | 7 | Trim stems, jar of water in fridge |\n| Tomatoes | 5 | Room temp |\n| Bell peppers | 7 | Refrigerated |\n| Onions | 30 | Cool dark place |\n| Garlic | 30 | Cool dark place |\n| Potatoes | 21 | Cool dark place |\n| Carrots | 21 | Refrigerated |\n| Broccoli | 5 | Refrigerated |\n| Celery | 14 | Refrigerated |\n| Mushrooms | 7 | Paper bag in fridge |\n| Zucchini | 5 | Refrigerated |\n| Cucumbers | 7 | Refrigerated |\n| Corn | 3 | Refrigerated, eat quickly |\n| Green beans | 5 | Refrigerated |\n\n## Dairy\n| Item | Days | Notes |\n|------|------|-------|\n| Milk | 7 | Check sell-by |\n| Yogurt | 14 | Check sell-by |\n| Kefir | 14 | Check sell-by |\n| Butter | 30 | Refrigerated; 9 months frozen |\n| Hard cheese | 28 | Wrapped in fridge |\n| Soft cheese | 7 | Eat quickly once opened |\n| Cream cheese | 14 | Refrigerated |\n| Heavy cream | 10 | Refrigerated |\n| Eggs | 28 | Refrigerated |\n| Sour cream | 14 | Refrigerated |\n\n## Meat & Fish\n| Item | Days | Notes |\n|------|------|-------|\n| Ground beef | 2 | Refrigerated; freeze if not using soon |\n| Steaks | 4 | Refrigerated |\n| Chicken breast | 2 | Refrigerated |\n| Pork | 4 | Refrigerated |\n| Fish (fresh) | 2 | Cook day of or next day |\n| Lamb | 4 | Refrigerated |\n| Deli meat | 5 | Refrigerated, once opened |\n| Bacon | 7 | Unopened; 5 days opened |\n| Sausage | 3 | Refrigerated |\n\n## Bakery\n| Item | Days | Notes |\n|------|------|-------|\n| Bread | 5 | Room temp; freeze for longer |\n| English muffins | 7 | Check for mold |\n| Tortillas | 14 | Refrigerated |\n| Bagels | 5 | Freeze extras |\n| Croissants | 3 | Room temp |\n\n## Pantry (Long Shelf Life)\n| Item | Days | Notes |\n|------|------|-------|\n| Rice | 365 | Sealed |\n| Pasta | 365 | Sealed |\n| Canned goods | 365 | Check best-by |\n| Crackers | 60 | Sealed |\n| Nuts | 30 | Room temp; 180 frozen |\n| Olive oil | 180 | Cool dark place |\n| Honey | 730 | Never expires really |\n| Peanut butter | 90 | After opening |\n\n## Frozen\n| Item | Days | Notes |\n|------|------|-------|\n| Frozen fruit | 240 | Sealed |\n| Frozen vegetables | 240 | Sealed |\n| Ice cream | 60 | Freezer |\n| Frozen meat | 180 | Properly wrapped |\n\nFile v1.3.0:skill-card.md\n\n## Description:\n\nTrack grocery purchases and monitor food freshness using Supabase for grocery-order monitoring, expiry checks, pantry logging, morning summaries, and food-waste management.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[madebydia](https://clawhub.ai/user/madebydia)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nIndividuals and household agents use this skill to log grocery purchases, estimate shelf life, check expiring items, and update pantry item status from manual input or parsed grocery-order data.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Grocery emails, order IDs, and pantry records can contain personal data.\n\nMitigation: Use authenticated user tokens, confirm consent before recurring email ingestion, and avoid storing more grocery or order detail than needed.\n\nRisk: Pantry data stored in Supabase can be exposed if access controls are weak.\n\nMitigation: Use explicit per-user row-level security, restricted grants, and the anon key rather than a service-role key.\n\nRisk: Commands such as bulk-add, refresh, use, and toss can mutate pantry records automatically.\n\nMitigation: Prefer dry-run or user confirmation behavior before running commands that add or update pantry records.\n\n## Reference(s):\n\n- [Default Shelf Life](artifact/references/shelf-life.md)\n- [Supabase Schema](artifact/references/supabase-schema.sql)\n- [Pantry Tracker ClawHub Listing](https://clawhub.ai/madebydia/skills/pantry-tracker)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands and JSON examples; CLI output is plain text.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires SUPABASE_URL and SUPABASE_KEY; some commands create or update pantry records.]\n\n## Skill Version(s):\n\n1.3.0 (source: server release evidence)\n\n## Ethical Considerations:\n\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.\n\nArchive v1.2.0: 5 files, 7235 bytes\n\nFiles: references/shelf-life.md (2660b), references/supabase-schema.sql (1181b), scripts/pantry.py (9270b), SKILL.md (4061b), _meta.json (133b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: pantry-tracker\ndescription: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items, getting morning freshness summaries, or managing food waste. Requires environment variables SUPABASE_URL and SUPABASE_KEY (anon key, not service role). Email scanning is done by the agent using its existing email skill (e.g. gog for Gmail) — this skill does not access email directly or require email credentials.\n---\n\n# Pantry Tracker\n\nTrack grocery items from purchase to plate (or trash). Parses grocery order emails, stores items in Supabase with estimated expiry dates, and sends daily summaries of what needs eating.\n\n## Setup\n\n### 1. Supabase\nCreate a Supabase project and run the schema in `references/supabase-schema.sql` in the SQL editor.\n\nStore credentials as env vars:\n```\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-key\n```\n\nUse the **anon key** (not the service role key). The anon key is safe for client-side use and sufficient for all pantry operations. Never use the service role key — it bypasses Row Level Security.\n\n### 2. Cron Jobs\nSet up two cron jobs in OpenClaw:\n\n**Email scanner** (every 2-4 hours):\nUse the agent's existing email tool (e.g. `gog` for Gmail, or whatever email skill is installed) to search for grocery order confirmations. This skill does NOT access email directly — the agent reads email through its own authenticated tools, then passes parsed items to the pantry CLI.\n```\nSearch email for recent grocery orders (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json\n```\n\n**Morning summary** (daily, e.g. 7am):\n```\nRun: python3 scripts/pantry.py summary\nIf output is not \"PANTRY_OK\", send the summary to the user.\n```\n\n## CLI Reference\n\nAll commands: `python3 scripts/pantry.py <command>`\n\n| Command | Description |\n|---------|-------------|\n| `add <name> -c <category> -q <qty> -e <days>` | Add single item |\n| `bulk-add <file.json>` | Add items from JSON (email parse output) |\n| `expiring [--days N]` | Show items expiring within N days (default 3) |\n| `status` | Full pantry overview by category |\n| `use <name>` | Mark item as used |\n| `toss <name>` | Mark item as tossed/wasted |\n| `refresh` | Auto-update statuses (fresh → use-soon → expired) |\n| `summary` | Morning summary for cron (outputs PANTRY_OK if nothing urgent) |\n\n### Bulk-add JSON format\n```json\n[\n  {\n    \"name\": \"Strawberries\",\n    \"category\": \"produce\",\n    \"quantity\": \"1 lb\",\n    \"expires_days\": 5,\n    \"source\": \"whole-foods\",\n    \"order_id\": \"111-1234567\"\n  }\n]\n```\n\n## Email Parsing Guide\n\nWhen scanning grocery emails, extract:\n1. **Item name** — normalize to common name (e.g., \"Org Strawberries 1lb\" → \"Strawberries\")\n2. **Quantity** — preserve as-is from email (\"2 lbs\", \"1 bunch\", \"6 ct\")\n3. **Category** — assign: produce, dairy, meat, bakery, pantry, frozen, other\n4. **Shelf life** — look up in `references/shelf-life.md`. If not listed, estimate conservatively.\n5. **Source** — which store (whole-foods, instacart, costco, etc.)\n\n### Supported email patterns\n- **Whole Foods / Amazon Fresh**: Subject contains \"Your delivery\" or \"order delivered\"\n- **Instacart**: Subject contains \"delivery complete\" or \"order receipt\"\n- **Costco**: Subject contains \"order confirmation\"\n- **Walmart**: Subject contains \"delivery confirmed\"\n\nSearch email for these patterns. Parse the item list from the email body. When in doubt about an item's category or shelf life, use conservative estimates.\n\n## Manual Usage\n\nUsers can also say things like:\n- \"Add chicken breast to the pantry, expires in 2 days\"\n- \"What's expiring soon?\"\n- \"Mark the strawberries as used\"\n- \"I tossed the leftover salmon\"\n- \"What's in my pantry right now?\"\n\nMap these to the appropriate CLI commands.\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"pantry-tracker\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1774025711431\n}\n\nFile v1.2.0:references/shelf-life.md\n\n# Default Shelf Life (Days from Purchase)\n\nUse these as defaults when parsing grocery orders. Override with item-specific knowledge when available.\n\n## Produce\n| Item | Days | Notes |\n|------|------|-------|\n| Bananas | 5 | Ripen at room temp |\n| Berries (strawberries, blueberries, raspberries) | 5 | Refrigerate immediately |\n| Apples | 21 | Refrigerated |\n| Lemons/Limes | 21 | Refrigerated |\n| Avocados | 5 | Room temp until ripe, then 3 days fridge |\n| Leafy greens (spinach, kale, lettuce) | 5 | Refrigerated |\n| Herbs (cilantro, parsley, basil) | 7 | Trim stems, jar of water in fridge |\n| Tomatoes | 5 | Room temp |\n| Bell peppers | 7 | Refrigerated |\n| Onions | 30 | Cool dark place |\n| Garlic | 30 | Cool dark place |\n| Potatoes | 21 | Cool dark place |\n| Carrots | 21 | Refrigerated |\n| Broccoli | 5 | Refrigerated |\n| Celery | 14 | Refrigerated |\n| Mushrooms | 7 | Paper bag in fridge |\n| Zucchini | 5 | Refrigerated |\n| Cucumbers | 7 | Refrigerated |\n| Corn | 3 | Refrigerated, eat quickly |\n| Green beans | 5 | Refrigerated |\n\n## Dairy\n| Item | Days | Notes |\n|------|------|-------|\n| Milk | 7 | Check sell-by |\n| Yogurt | 14 | Check sell-by |\n| Kefir | 14 | Check sell-by |\n| Butter | 30 | Refrigerated; 9 months frozen |\n| Hard cheese | 28 | Wrapped in fridge |\n| Soft cheese | 7 | Eat quickly once opened |\n| Cream cheese | 14 | Refrigerated |\n| Heavy cream | 10 | Refrigerated |\n| Eggs | 28 | Refrigerated |\n| Sour cream | 14 | Refrigerated |\n\n## Meat & Fish\n| Item | Days | Notes |\n|------|------|-------|\n| Ground beef | 2 | Refrigerated; freeze if not using soon |\n| Steaks | 4 | Refrigerated |\n| Chicken breast | 2 | Refrigerated |\n| Pork | 4 | Refrigerated |\n| Fish (fresh) | 2 | Cook day of or next day |\n| Lamb | 4 | Refrigerated |\n| Deli meat | 5 | Refrigerated, once opened |\n| Bacon | 7 | Unopened; 5 days opened |\n| Sausage | 3 | Refrigerated |\n\n## Bakery\n| Item | Days | Notes |\n|------|------|-------|\n| Bread | 5 | Room temp; freeze for longer |\n| English muffins | 7 | Check for mold |\n| Tortillas | 14 | Refrigerated |\n| Bagels | 5 | Freeze extras |\n| Croissants | 3 | Room temp |\n\n## Pantry (Long Shelf Life)\n| Item | Days | Notes |\n|------|------|-------|\n| Rice | 365 | Sealed |\n| Pasta | 365 | Sealed |\n| Canned goods | 365 | Check best-by |\n| Crackers | 60 | Sealed |\n| Nuts | 30 | Room temp; 180 frozen |\n| Olive oil | 180 | Cool dark place |\n| Honey | 730 | Never expires really |\n| Peanut butter | 90 | After opening |\n\n## Frozen\n| Item | Days | Notes |\n|------|------|-------|\n| Frozen fruit | 240 | Sealed |\n| Frozen vegetables | 240 | Sealed |\n| Ice cream | 60 | Freezer |\n| Frozen meat | 180 | Properly wrapped |\n\nArchive v1.1.0: 5 files, 7113 bytes\n\nFiles: references/shelf-life.md (2660b), references/supabase-schema.sql (1181b), scripts/pantry.py (9270b), SKILL.md (3743b), _meta.json (133b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: pantry-tracker\ndescription: Track grocery purchases and monitor food freshness using email order parsing and Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items, getting morning freshness summaries, or managing food waste. Integrates with email (Gmail, etc.) to auto-detect grocery deliveries and assigns shelf life estimates to every item. Requires SUPABASE_URL and SUPABASE_KEY (anon key) environment variables.\n---\n\n# Pantry Tracker\n\nTrack grocery items from purchase to plate (or trash). Parses grocery order emails, stores items in Supabase with estimated expiry dates, and sends daily summaries of what needs eating.\n\n## Setup\n\n### 1. Supabase\nCreate a Supabase project and run the schema in `references/supabase-schema.sql` in the SQL editor.\n\nStore credentials as env vars:\n```\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-key\n```\n\nUse the **anon key** (not the service role key). The anon key is safe for client-side use and sufficient for all pantry operations. Never use the service role key — it bypasses Row Level Security.\n\n### 2. Cron Jobs\nSet up two cron jobs in OpenClaw:\n\n**Email scanner** (every 2-4 hours):\n```\nCheck email for grocery order confirmations (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart, etc.). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json\n```\n\n**Morning summary** (daily, e.g. 7am):\n```\nRun: python3 scripts/pantry.py summary\nIf output is not \"PANTRY_OK\", send the summary to the user.\n```\n\n## CLI Reference\n\nAll commands: `python3 scripts/pantry.py <command>`\n\n| Command | Description |\n|---------|-------------|\n| `add <name> -c <category> -q <qty> -e <days>` | Add single item |\n| `bulk-add <file.json>` | Add items from JSON (email parse output) |\n| `expiring [--days N]` | Show items expiring within N days (default 3) |\n| `status` | Full pantry overview by category |\n| `use <name>` | Mark item as used |\n| `toss <name>` | Mark item as tossed/wasted |\n| `refresh` | Auto-update statuses (fresh → use-soon → expired) |\n| `summary` | Morning summary for cron (outputs PANTRY_OK if nothing urgent) |\n\n### Bulk-add JSON format\n```json\n[\n  {\n    \"name\": \"Strawberries\",\n    \"category\": \"produce\",\n    \"quantity\": \"1 lb\",\n    \"expires_days\": 5,\n    \"source\": \"whole-foods\",\n    \"order_id\": \"111-1234567\"\n  }\n]\n```\n\n## Email Parsing Guide\n\nWhen scanning grocery emails, extract:\n1. **Item name** — normalize to common name (e.g., \"Org Strawberries 1lb\" → \"Strawberries\")\n2. **Quantity** — preserve as-is from email (\"2 lbs\", \"1 bunch\", \"6 ct\")\n3. **Category** — assign: produce, dairy, meat, bakery, pantry, frozen, other\n4. **Shelf life** — look up in `references/shelf-life.md`. If not listed, estimate conservatively.\n5. **Source** — which store (whole-foods, instacart, costco, etc.)\n\n### Supported email patterns\n- **Whole Foods / Amazon Fresh**: Subject contains \"Your delivery\" or \"order delivered\"\n- **Instacart**: Subject contains \"delivery complete\" or \"order receipt\"\n- **Costco**: Subject contains \"order confirmation\"\n- **Walmart**: Subject contains \"delivery confirmed\"\n\nSearch email for these patterns. Parse the item list from the email body. When in doubt about an item's category or shelf life, use conservative estimates.\n\n## Manual Usage\n\nUsers can also say things like:\n- \"Add chicken breast to the pantry, expires in 2 days\"\n- \"What's expiring soon?\"\n- \"Mark the strawberries as used\"\n- \"I tossed the leftover salmon\"\n- \"What's in my pantry right now?\"\n\nMap these to the appropriate CLI commands.\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"pantry-tracker\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1774025591855\n}\n\nFile v1.1.0:references/shelf-life.md\n\n# Default Shelf Life (Days from Purchase)\n\nUse these as defaults when parsing grocery orders. Override with item-specific knowledge when available.\n\n## Produce\n| Item | Days | Notes |\n|------|------|-------|\n| Bananas | 5 | Ripen at room temp |\n| Berries (strawberries, blueberries, raspberries) | 5 | Refrigerate immediately |\n| Apples | 21 | Refrigerated |\n| Lemons/Limes | 21 | Refrigerated |\n| Avocados | 5 | Room temp until ripe, then 3 days fridge |\n| Leafy greens (spinach, kale, lettuce) | 5 | Refrigerated |\n| Herbs (cilantro, parsley, basil) | 7 | Trim stems, jar of water in fridge |\n| Tomatoes | 5 | Room temp |\n| Bell peppers | 7 | Refrigerated |\n| Onions | 30 | Cool dark place |\n| Garlic | 30 | Cool dark place |\n| Potatoes | 21 | Cool dark place |\n| Carrots | 21 | Refrigerated |\n| Broccoli | 5 | Refrigerated |\n| Celery | 14 | Refrigerated |\n| Mushrooms | 7 | Paper bag in fridge |\n| Zucchini | 5 | Refrigerated |\n| Cucumbers | 7 | Refrigerated |\n| Corn | 3 | Refrigerated, eat quickly |\n| Green beans | 5 | Refrigerated |\n\n## Dairy\n| Item | Days | Notes |\n|------|------|-------|\n| Milk | 7 | Check sell-by |\n| Yogurt | 14 | Check sell-by |\n| Kefir | 14 | Check sell-by |\n| Butter | 30 | Refrigerated; 9 months frozen |\n| Hard cheese | 28 | Wrapped in fridge |\n| Soft cheese | 7 | Eat quickly once opened |\n| Cream cheese | 14 | Refrigerated |\n| Heavy cream | 10 | Refrigerated |\n| Eggs | 28 | Refrigerated |\n| Sour cream | 14 | Refrigerated |\n\n## Meat & Fish\n| Item | Days | Notes |\n|------|------|-------|\n| Ground beef | 2 | Refrigerated; freeze if not using soon |\n| Steaks | 4 | Refrigerated |\n| Chicken breast | 2 | Refrigerated |\n| Pork | 4 | Refrigerated |\n| Fish (fresh) | 2 | Cook day of or next day |\n| Lamb | 4 | Refrigerated |\n| Deli meat | 5 | Refrigerated, once opened |\n| Bacon | 7 | Unopened; 5 days opened |\n| Sausage | 3 | Refrigerated |\n\n## Bakery\n| Item | Days | Notes |\n|------|------|-------|\n| Bread | 5 | Room temp; freeze for longer |\n| English muffins | 7 | Check for mold |\n| Tortillas | 14 | Refrigerated |\n| Bagels | 5 | Freeze extras |\n| Croissants | 3 | Room temp |\n\n## Pantry (Long Shelf Life)\n| Item | Days | Notes |\n|------|------|-------|\n| Rice | 365 | Sealed |\n| Pasta | 365 | Sealed |\n| Canned goods | 365 | Check best-by |\n| Crackers | 60 | Sealed |\n| Nuts | 30 | Room temp; 180 frozen |\n| Olive oil | 180 | Cool dark place |\n| Honey | 730 | Never expires really |\n| Peanut butter | 90 | After opening |\n\n## Frozen\n| Item | Days | Notes |\n|------|------|-------|\n| Frozen fruit | 240 | Sealed |\n| Frozen vegetables | 240 | Sealed |\n| Ice cream | 60 | Freezer |\n| Frozen meat | 180 | Properly wrapped |\n\nArchive v1.0.0: 5 files, 6976 bytes\n\nFiles: references/shelf-life.md (2660b), references/supabase-schema.sql (1181b), scripts/pantry.py (9267b), SKILL.md (3481b), _meta.json (133b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: pantry-tracker\ndescription: Track grocery purchases and monitor food freshness using email order parsing and Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items, getting morning freshness summaries, or managing food waste. Integrates with email (Gmail, etc.) to auto-detect grocery deliveries and assigns shelf life estimates to every item.\n---\n\n# Pantry Tracker\n\nTrack grocery items from purchase to plate (or trash). Parses grocery order emails, stores items in Supabase with estimated expiry dates, and sends daily summaries of what needs eating.\n\n## Setup\n\n### 1. Supabase\nCreate a Supabase project and run the schema in `references/supabase-schema.sql` in the SQL editor.\n\nStore credentials as env vars:\n```\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-or-service-key\n```\n\n### 2. Cron Jobs\nSet up two cron jobs in OpenClaw:\n\n**Email scanner** (every 2-4 hours):\n```\nCheck email for grocery order confirmations (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart, etc.). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json\n```\n\n**Morning summary** (daily, e.g. 7am):\n```\nRun: python3 scripts/pantry.py summary\nIf output is not \"PANTRY_OK\", send the summary to the user.\n```\n\n## CLI Reference\n\nAll commands: `python3 scripts/pantry.py <command>`\n\n| Command | Description |\n|---------|-------------|\n| `add <name> -c <category> -q <qty> -e <days>` | Add single item |\n| `bulk-add <file.json>` | Add items from JSON (email parse output) |\n| `expiring [--days N]` | Show items expiring within N days (default 3) |\n| `status` | Full pantry overview by category |\n| `use <name>` | Mark item as used |\n| `toss <name>` | Mark item as tossed/wasted |\n| `refresh` | Auto-update statuses (fresh → use-soon → expired) |\n| `summary` | Morning summary for cron (outputs PANTRY_OK if nothing urgent) |\n\n### Bulk-add JSON format\n```json\n[\n  {\n    \"name\": \"Strawberries\",\n    \"category\": \"produce\",\n    \"quantity\": \"1 lb\",\n    \"expires_days\": 5,\n    \"source\": \"whole-foods\",\n    \"order_id\": \"111-1234567\"\n  }\n]\n```\n\n## Email Parsing Guide\n\nWhen scanning grocery emails, extract:\n1. **Item name** — normalize to common name (e.g., \"Org Strawberries 1lb\" → \"Strawberries\")\n2. **Quantity** — preserve as-is from email (\"2 lbs\", \"1 bunch\", \"6 ct\")\n3. **Category** — assign: produce, dairy, meat, bakery, pantry, frozen, other\n4. **Shelf life** — look up in `references/shelf-life.md`. If not listed, estimate conservatively.\n5. **Source** — which store (whole-foods, instacart, costco, etc.)\n\n### Supported email patterns\n- **Whole Foods / Amazon Fresh**: Subject contains \"Your delivery\" or \"order delivered\"\n- **Instacart**: Subject contains \"delivery complete\" or \"order receipt\"\n- **Costco**: Subject contains \"order confirmation\"\n- **Walmart**: Subject contains \"delivery confirmed\"\n\nSearch email for these patterns. Parse the item list from the email body. When in doubt about an item's category or shelf life, use conservative estimates.\n\n## Manual Usage\n\nUsers can also say things like:\n- \"Add chicken breast to the pantry, expires in 2 days\"\n- \"What's expiring soon?\"\n- \"Mark the strawberries as used\"\n- \"I tossed the leftover salmon\"\n- \"What's in my pantry right now?\"\n\nMap these to the appropriate CLI commands.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"pantry-tracker\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1774025435006\n}\n\nFile v1.0.0:references/shelf-life.md\n\n# Default Shelf Life (Days from Purchase)\n\nUse these as defaults when parsing grocery orders. Override with item-specific knowledge when available.\n\n## Produce\n| Item | Days | Notes |\n|------|------|-------|\n| Bananas | 5 | Ripen at room temp |\n| Berries (strawberries, blueberries, raspberries) | 5 | Refrigerate immediately |\n| Apples | 21 | Refrigerated |\n| Lemons/Limes | 21 | Refrigerated |\n| Avocados | 5 | Room temp until ripe, then 3 days fridge |\n| Leafy greens (spinach, kale, lettuce) | 5 | Refrigerated |\n| Herbs (cilantro, parsley, basil) | 7 | Trim stems, jar of water in fridge |\n| Tomatoes | 5 | Room temp |\n| Bell peppers | 7 | Refrigerated |\n| Onions | 30 | Cool dark place |\n| Garlic | 30 | Cool dark place |\n| Potatoes | 21 | Cool dark place |\n| Carrots | 21 | Refrigerated |\n| Broccoli | 5 | Refrigerated |\n| Celery | 14 | Refrigerated |\n| Mushrooms | 7 | Paper bag in fridge |\n| Zucchini | 5 | Refrigerated |\n| Cucumbers | 7 | Refrigerated |\n| Corn | 3 | Refrigerated, eat quickly |\n| Green beans | 5 | Refrigerated |\n\n## Dairy\n| Item | Days | Notes |\n|------|------|-------|\n| Milk | 7 | Check sell-by |\n| Yogurt | 14 | Check sell-by |\n| Kefir | 14 | Check sell-by |\n| Butter | 30 | Refrigerated; 9 months frozen |\n| Hard cheese | 28 | Wrapped in fridge |\n| Soft cheese | 7 | Eat quickly once opened |\n| Cream cheese | 14 | Refrigerated |\n| Heavy cream | 10 | Refrigerated |\n| Eggs | 28 | Refrigerated |\n| Sour cream | 14 | Refrigerated |\n\n## Meat & Fish\n| Item | Days | Notes |\n|------|------|-------|\n| Ground beef | 2 | Refrigerated; freeze if not using soon |\n| Steaks | 4 | Refrigerated |\n| Chicken breast | 2 | Refrigerated |\n| Pork | 4 | Refrigerated |\n| Fish (fresh) | 2 | Cook day of or next day |\n| Lamb | 4 | Refrigerated |\n| Deli meat | 5 | Refrigerated, once opened |\n| Bacon | 7 | Unopened; 5 days opened |\n| Sausage | 3 | Refrigerated |\n\n## Bakery\n| Item | Days | Notes |\n|------|------|-------|\n| Bread | 5 | Room temp; freeze for longer |\n| English muffins | 7 | Check for mold |\n| Tortillas | 14 | Refrigerated |\n| Bagels | 5 | Freeze extras |\n| Croissants | 3 | Room temp |\n\n## Pantry (Long Shelf Life)\n| Item | Days | Notes |\n|------|------|-------|\n| Rice | 365 | Sealed |\n| Pasta | 365 | Sealed |\n| Canned goods | 365 | Check best-by |\n| Crackers | 60 | Sealed |\n| Nuts | 30 | Room temp; 180 frozen |\n| Olive oil | 180 | Cool dark place |\n| Honey | 730 | Never expires really |\n| Peanut butter | 90 | After opening |\n\n## Frozen\n| Item | Days | Notes |\n|------|------|-------|\n| Frozen fruit | 240 | Sealed |\n| Frozen vegetables | 240 | Sealed |\n| Ice cream | 60 | Freezer |\n| Frozen meat | 180 | Properly wrapped |","readmeExcerpt":"Skill: Pantry Tracker Owner: madebydia Summary: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,... Tags: latest:1.3.0 Version history: v1.3.0 | 2026-03-20T16:57:46.491Z | user Add structured requires.env metadata declaring SUPABASE_URL and SUPABASE_KEY in frontmatter for security scanner visibility v1.2.0 | 20","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"SUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-key"},{"language":"text","snippet":"Search email for recent grocery orders (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json"},{"language":"text","snippet":"Run: python3 scripts/pantry.py summary\nIf output is not \"PANTRY_OK\", send the summary to the user."},{"language":"json","snippet":"[\n  {\n    \"name\": \"Strawberries\",\n    \"category\": \"produce\",\n    \"quantity\": \"1 lb\",\n    \"expires_days\": 5,\n    \"source\": \"whole-foods\",\n    \"order_id\": \"111-1234567\"\n  }\n]"},{"language":"text","snippet":"SUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-key"},{"language":"text","snippet":"Search email for recent grocery orders (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: pantry-tracker\ndescription: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items, getting morning freshness summaries, or managing food waste. Email scanning is done by the agent using its existing email skill (e.g. gog for Gmail) — this skill does not access email directly or require email credentials.\nrequires:\n  env:\n    - name: SUPABASE_URL\n      description: Supabase project URL (e.g. https://xxx.supabase.co)\n      required: true\n    - name: SUPABASE_KEY\n      description: Supabase anon key (NOT service role key). Safe for client-side use.\n      required: true\n---\n\n# Pantry Tracker\n\nTrack grocery items from purchase to plate (or trash). Parses grocery order emails, stores items in Supabase with estimated expiry dates, and sends daily summaries of what needs eating.\n\n## Setup\n\n### 1. Supabase\nCreate a Supabase project and run the schema in `references/supabase-schema.sql` in the SQL editor.\n\nStore credentials as env vars:\n```\nSUPABASE_URL=https://your-project.supabase.co\nSUPABASE_KEY=your-anon-key\n```\n\nUse the **anon key** (not the service role key). The anon key is safe for client-side use and sufficient for all pantry operations. Never use the service role key — it bypasses Row Level Security.\n\n### 2. Cron Jobs\nSet up two cron jobs in OpenClaw:\n\n**Email scanner** (every 2-4 hours):\nUse the agent's existing email tool (e.g. `gog` for Gmail, or whatever email skill is installed) to search for grocery order confirmations. This skill does NOT access email directly — the agent reads email through its own authenticated tools, then passes parsed items to the pantry CLI.\n```\nSearch email for recent grocery orders (Whole Foods, Instacart, Amazon Fresh, Costco, Walmart). Parse item names and quantities. For each item, look up shelf life in references/shelf-life.md and calculate expires_at from today. Write items to a JSON array and run: python3 scripts/pantry.py bulk-add /tmp/pantry-items.json\n```\n\n**Morning summary** (daily, e.g. 7am):\n```\nRun: python3 scripts/pantry.py summary\nIf output is not \"PANTRY_OK\", send the summary to the user.\n```\n\n## CLI Reference\n\nAll commands: `python3 scripts/pantry.py <command>`\n\n| Command | Description |\n|---------|-------------|\n| `add <name> -c <category> -q <qty> -e <days>` | Add single item |\n| `bulk-add <file.json>` | Add items from JSON (email parse output) |\n| `expiring [--days N]` | Show items expiring within N days (default 3) |\n| `status` | Full pantry overview by category |\n| `use <name>` | Mark item as used |\n| `toss <name>` | Mark item as tossed/wasted |\n| `refresh` | Auto-update statuses (fresh → use-soon → expired) |\n| `summary` | Morning summary for cron (outputs PANTRY_OK if nothing urgent) |\n\n### Bulk-add JSON format\n```json\n[\n  {\n    \"name\": \"Strawberries\",\n    \"category\": \"produce\",\n    \"quantity\": \"1 lb\",\n    \"expires_days\": 5,\n    \"source\": \"whole-foods\",\n    \"order_id\": \"111-1234567\""},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn711gxkbyw34qye3faaqw24yn8163fm\",\n  \"slug\": \"pantry-tracker\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1774025866491\n}"},{"path":"references/shelf-life.md","content":"# Default Shelf Life (Days from Purchase)\n\nUse these as defaults when parsing grocery orders. Override with item-specific knowledge when available.\n\n## Produce\n| Item | Days | Notes |\n|------|------|-------|\n| Bananas | 5 | Ripen at room temp |\n| Berries (strawberries, blueberries, raspberries) | 5 | Refrigerate immediately |\n| Apples | 21 | Refrigerated |\n| Lemons/Limes | 21 | Refrigerated |\n| Avocados | 5 | Room temp until ripe, then 3 days fridge |\n| Leafy greens (spinach, kale, lettuce) | 5 | Refrigerated |\n| Herbs (cilantro, parsley, basil) | 7 | Trim stems, jar of water in fridge |\n| Tomatoes | 5 | Room temp |\n| Bell peppers | 7 | Refrigerated |\n| Onions | 30 | Cool dark place |\n| Garlic | 30 | Cool dark place |\n| Potatoes | 21 | Cool dark place |\n| Carrots | 21 | Refrigerated |\n| Broccoli | 5 | Refrigerated |\n| Celery | 14 | Refrigerated |\n| Mushrooms | 7 | Paper bag in fridge |\n| Zucchini | 5 | Refrigerated |\n| Cucumbers | 7 | Refrigerated |\n| Corn | 3 | Refrigerated, eat quickly |\n| Green beans | 5 | Refrigerated |\n\n## Dairy\n| Item | Days | Notes |\n|------|------|-------|\n| Milk | 7 | Check sell-by |\n| Yogurt | 14 | Check sell-by |\n| Kefir | 14 | Check sell-by |\n| Butter | 30 | Refrigerated; 9 months frozen |\n| Hard cheese | 28 | Wrapped in fridge |\n| Soft cheese | 7 | Eat quickly once opened |\n| Cream cheese | 14 | Refrigerated |\n| Heavy cream | 10 | Refrigerated |\n| Eggs | 28 | Refrigerated |\n| Sour cream | 14 | Refrigerated |\n\n## Meat & Fish\n| Item | Days | Notes |\n|------|------|-------|\n| Ground beef | 2 | Refrigerated; freeze if not using soon |\n| Steaks | 4 | Refrigerated |\n| Chicken breast | 2 | Refrigerated |\n| Pork | 4 | Refrigerated |\n| Fish (fresh) | 2 | Cook day of or next day |\n| Lamb | 4 | Refrigerated |\n| Deli meat | 5 | Refrigerated, once opened |\n| Bacon | 7 | Unopened; 5 days opened |\n| Sausage | 3 | Refrigerated |\n\n## Bakery\n| Item | Days | Notes |\n|------|------|-------|\n| Bread | 5 | Room temp; freeze for longer |\n| English muffins | 7 | Check for mold |\n| Tortillas | 14 | Refrigerated |\n| Bagels | 5 | Freeze extras |\n| Croissants | 3 | Room temp |\n\n## Pantry (Long Shelf Life)\n| Item | Days | Notes |\n|------|------|-------|\n| Rice | 365 | Sealed |\n| Pasta | 365 | Sealed |\n| Canned goods | 365 | Check best-by |\n| Crackers | 60 | Sealed |\n| Nuts | 30 | Room temp; 180 frozen |\n| Olive oil | 180 | Cool dark place |\n| Honey | 730 | Never expires really |\n| Peanut butter | 90 | After opening |\n\n## Frozen\n| Item | Days | Notes |\n|------|------|-------|\n| Frozen fruit | 240 | Sealed |\n| Frozen vegetables | 240 | Sealed |\n| Ice cream | 60 | Freezer |\n| Frozen meat | 180 | Properly wrapped |"},{"path":"skill-card.md","content":"## Description:\n\nTrack grocery purchases and monitor food freshness using Supabase for grocery-order monitoring, expiry checks, pantry logging, morning summaries, and food-waste management.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[madebydia](https://clawhub.ai/user/madebydia)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nIndividuals and household agents use this skill to log grocery purchases, estimate shelf life, check expiring items, and update pantry item status from manual input or parsed grocery-order data.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Grocery emails, order IDs, and pantry records can contain personal data.\n\nMitigation: Use authenticated user tokens, confirm consent before recurring email ingestion, and avoid storing more grocery or order detail than needed.\n\nRisk: Pantry data stored in Supabase can be exposed if access controls are weak.\n\nMitigation: Use explicit per-user row-level security, restricted grants, and the anon key rather than a service-role key.\n\nRisk: Commands such as bulk-add, refresh, use, and toss can mutate pantry records automatically.\n\nMitigation: Prefer dry-run or user confirmation behavior before running commands that add or update pantry records.\n\n## Reference(s):\n\n- [Default Shelf Life](artifact/references/shelf-life.md)\n- [Supabase Schema](artifact/references/supabase-schema.sql)\n- [Pantry Tracker ClawHub Listing](https://clawhub.ai/madebydia/skills/pantry-tracker)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands and JSON examples; CLI output is plain text.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires SUPABASE_URL and SUPABASE_KEY; some commands create or update pantry records.]\n\n## Skill Version(s):\n\n1.3.0 (source: server release evidence)\n\n## Ethical Considerations:\n\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."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,... Skill: Pantry Tracker Owner: madebydia Summary: Track grocery purchases and monitor food freshness using Supabase. Use when monitoring grocery orders, checking what food is expiring, logging pantry items,... Tags: latest:1.3.0 Version history: v1.3.0 | 2026-03-20T16:57:46.491Z | user Add structured requires.env metadata declaring SUPABASE_URL and SUPABASE_KEY in frontmatter for security scanner visibility v1.2.0 | 20","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1378,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T13:40:18.843Z","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-11T13:40:18.843Z","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-11T16:01:32.435Z","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"}]}}}