{"id":"f3dbba1d-ebba-4ba5-b289-06e57f319fbe","entityType":"agent","slug":"clawhub-voronindenis5-expiry-tracker","name":"expiry-tracker","canonicalUrl":"https://www.xpersona.co/agent/clawhub-voronindenis5-expiry-tracker","canonicalPath":"/agent/clawhub-voronindenis5-expiry-tracker","generatedAt":"2026-10-10T05:40:09.097Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T23:01:04.260Z","emptyReason":null},"description":"Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually. Skill: expiry-tracker Owner: voronindenis5 Summary: Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually. Tags: latest:0.1.1 Version history: v0.1.1 | 2026-08-14T06:19:00.138Z | auto - Removed the skill card file (skill-card.md). - No functional or user-facing changes were made. v0.1.0 | 2026-08-1","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:expiry-tracker","sourceUrl":"https://clawhub.ai/voronindenis5/expiry-tracker","homepage":"https://clawhub.ai/voronindenis5/skills/expiry-tracker","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/voronindenis5/expiry-tracker","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/voronindenis5/skills/expiry-tracker","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:01:04.260Z","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-09T23:01:04.260Z","emptyReason":null},"stars":null,"forks":null,"downloads":1916,"packageName":null,"latestVersion":"0.1.1","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:01:04.235Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T23:01:04.260Z","lastCrawledAt":"2026-10-09T23:01:04.235Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T23:01:04.235Z","lastVerifiedAt":null,"highlights":[{"version":"0.1.1","createdAt":"2026-08-14T06:19:00.138Z","changelog":"- Removed the skill card file (skill-card.md). - No functional or user-facing changes were made.","fileCount":10,"zipByteSize":13080},{"version":"0.1.0","createdAt":"2026-08-11T11:57:27.453Z","changelog":"Initial release of expiry-tracker. - Track food expiry dates by scanning receipts or adding items manually. - Receive daily alerts and \"use this today\" suggestions to help reduce food waste. - Maintain an inventory of perishable items with detailed expiry tracking. - Commands include adding, removing, listing, and generating waste reports. - Supports bulk adding items from receipt text and infers expiry dates by food category.","fileCount":10,"zipByteSize":13026}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17b6amkd3wzqgg640v03a9r1n83gxs1:expiry-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-voronindenis5-expiry-tracker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-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-10T05:40:09.096Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-tracker/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-voronindenis5-expiry-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-09T23:01:04.260Z","emptyReason":null},"readme":"Skill: expiry-tracker\n\nOwner: voronindenis5\n\nSummary: Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually.\n\nTags: latest:0.1.1\n\nVersion history:\n\nv0.1.1 | 2026-08-14T06:19:00.138Z | auto\n\n- Removed the skill card file (skill-card.md).\n- No functional or user-facing changes were made.\n\nv0.1.0 | 2026-08-11T11:57:27.453Z | auto\n\nInitial release of expiry-tracker.\n\n- Track food expiry dates by scanning receipts or adding items manually.\n- Receive daily alerts and \"use this today\" suggestions to help reduce food waste.\n- Maintain an inventory of perishable items with detailed expiry tracking.\n- Commands include adding, removing, listing, and generating waste reports.\n- Supports bulk adding items from receipt text and infers expiry dates by food category.\n\nArchive index:\n\nArchive v0.1.1: 10 files, 13080 bytes\n\nFiles: LICENSE (1070b), README.md (1835b), references (0b), references/recipe-hints.md (2682b), references/shelf-life.md (2718b), scripts (0b), scripts/expiry_tracker.py (13201b), skill-card.md (2169b), SKILL.md (3627b), _meta.json (133b)\n\nFile v0.1.1:SKILL.md\n\n---\nname: expiry-tracker\ndescription: \"Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually.\"\nversion: 1.0.0\nauthor: Denis Voronin\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [food, expiry, grocery, waste-reduction, household, tracker]\n    related_skills: [leftover-chef, receipt-raccoon]\n---\n\n# Expiry Tracker\n\n## Overview\n\nFood waste is a massive problem — the average household throws away 30% of the food they buy. Most of it spoils simply because people forget what's in the fridge and when it expires.\n\nExpiry Tracker solves this by maintaining a simple inventory of perishable items with their expiry dates, then proactively suggesting what to cook before things go bad.\n\n## When to Use\n\n- After grocery shopping — add items to track\n- Daily check — \"what expires soon?\"\n- Before cooking — \"what should I use today?\"\n- When planning meals for the week\n- Before traveling — check what needs to be consumed first\n\n**Don't use for:** Non-perishables (pasta, rice, canned goods with 1+ year shelf life), frozen items (unless thawing).\n\n## Commands\n\n```bash\n# Add an item\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --expiry 2026-08-15\n\n# List items expiring soon\npython scripts/expiry_tracker.py list --days 3\n\n# Get today's \"use this first\" suggestions\npython scripts/expiry_tracker.py today\n\n# Remove consumed/expired item\npython scripts/expiry_tracker.py remove \"milk\"\n\n# Show full inventory sorted by expiry\npython scripts/expiry_tracker.py inventory\n\n# Weekly summary / waste report\npython scripts/expiry_tracker.py report\n\n# Bulk add from receipt text\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt\"\n```\n\n## How It Works\n\n1. Items are stored in `~/.expiry_tracker.json` — a simple JSON database\n2. Each item has: name, category, purchase date, expiry date, quantity, optional note\n3. Default shelf life is inferred from category (dairy=7d, meat=3d, bread=5d, etc.)\n4. `today` command shows items expiring within 48h, sorted by urgency\n5. `report` shows waste statistics: how much expired vs consumed\n\n## Default Shelf Life by Category\n\n| Category | Days | Examples |\n|----------|------|----------|\n| Dairy | 7 | Milk, yogurt, cheese |\n| Meat | 3 | Chicken, beef, pork, fish |\n| Produce-Leafy | 4 | Spinach, lettuce, herbs |\n| Produce-Root | 14 | Carrots, potatoes, onions |\n| Produce-Fruit | 7 | Berries, bananas, apples |\n| Bakery | 5 | Bread, pastries, tortillas |\n| Deli | 5 | Cold cuts, prepared salads |\n| Eggs | 21 | Eggs |\n| Condiments | 180 | Opened sauces, dressings |\n| Tofu | 7 | Tofu, tempeh |\n\n## Common Pitfalls\n\n1. **Forgetting to remove consumed items.** Always run `remove` when you eat something, otherwise the waste report is inaccurate.\n\n2. **Overly optimistic expiry dates.** \"Best before\" ≠ \"goes bad on.\" Use smell/visual check before tossing. The tracker errs on the side of caution.\n\n3. **Not adding items on shopping day.** The tracker is only as good as its data. Make it a habit to batch-add after unpacking groceries.\n\n4. **Ignoring the `today` command.** Set up a daily cron/reminder to check it every morning.\n\n## Verification Checklist\n\n- [ ] Database file created at `~/.expiry_tracker.json`\n- [ ] `add` command works with both `--days` and `--expiry` flags\n- [ ] `list --days 3` shows only items expiring within 3 days\n- [ ] `today` shows actionable suggestions\n- [ ] `report` shows waste statistics\n- [ ] `batch` mode parses comma-separated items correctly\n\nFile v0.1.1:README.md\n\n# Expiry Tracker 🥛⏰\n\n> Track food expiry dates, get daily alerts, reduce food waste.\n\n## The Problem\n\nThe average household throws away **30% of the food they buy**. Most of it spoils because people forget what's in the fridge and when it expires.\n\n## The Solution\n\nA simple command-line tool that:\n- 📦 Tracks perishable items with expiry dates\n- ⏰ Alerts you before food goes bad\n- 💡 Suggests what to cook with soon-to-expire items\n- 📊 Generates waste reports so you can spot patterns\n\n## Quick Start\n\n```bash\n# Add items after grocery shopping\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --days 3\npython scripts/expiry_tracker.py add \"spinach\"  # auto: 4 days (leafy greens)\n\n# Or batch add from a receipt\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt, spinach, berries\"\n\n# Check what needs attention today\npython scripts/expiry_tracker.py today\n\n# Full inventory\npython scripts/expiry_tracker.py inventory\n\n# Mark items as consumed or wasted\npython scripts/expiry_tracker.py remove \"milk\"           # consumed\npython scripts/expiry_tracker.py remove \"spinach\" --wasted  # tossed\n\n# Weekly waste report\npython scripts/expiry_tracker.py report\n```\n\n## Features\n\n- **Auto-categorization**: 10 food categories with keyword matching\n- **Smart defaults**: Knows that chicken lasts 3 days, carrots 14 days\n- **Recipe hints**: Suggests how to use soon-to-expire items\n- **Waste tracking**: Records what was consumed vs wasted for pattern analysis\n- **No dependencies**: Pure Python stdlib, runs anywhere\n\n## Installation\n\n```bash\ngit clone https://github.com/voronindenis5/expiry-tracker.git\ncd expiry-tracker\npython scripts/expiry_tracker.py today\n```\n\nData is stored in `~/.expiry_tracker.json`.\n\n## License\n\nMIT © Denis Voronin\n\nFile v0.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn75wwn4x6djaf28jbykeamazd81gtdp\",\n  \"slug\": \"expiry-tracker\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1786688340138\n}\n\nFile v0.1.1:references/recipe-hints.md\n\n# Recipe Hints by Category\n\nWhen food is about to expire, the tracker suggests ways to use it. This document explains the logic.\n\n## Urgency Levels\n\n| Emoji | Days Left | Action |\n|-------|-----------|--------|\n| 🔴 | Expired | Toss or compost — do NOT consume if spoiled |\n| 🟠 | 0 days | Cook TODAY or freeze |\n| 🟡 | 1-2 days | Plan a meal around it tomorrow |\n| 🟢 | 3-5 days | No rush, but keep in mind |\n| ⚪ | 6+ days | Plenty of time |\n\n## Category → Recipe Suggestions\n\n### Dairy (milk, yogurt, cheese)\n- **Smoothie**: Blend milk/yogurt with frozen fruit\n- **Creamy pasta**: Make a béchamel or carbonara\n- **Baking**: Yogurt in muffins/cakes, cheese in casseroles\n- **Freeze**: Cheese freezes well shredded, milk can be frozen (use for cooking)\n\n### Meat (chicken, beef, fish)\n- **Cook immediately**: This is the #1 item to not let expire\n- **Freeze**: If you can't cook today, freeze it right now\n- **Meal prep**: Cook a large batch, portion, refrigerate/freeze\n- **Soup/stew**: Perfect for meat that's 1-2 days from expiry\n\n### Produce-Leafy (spinach, lettuce, herbs)\n- **Big salad**: Use all the greens in one meal\n- **Stir-fry**: Wilted greens are perfect for stir-fry\n- **Smoothie**: Spinach/kale blend invisibly into fruit smoothies\n- **Pesto**: Basil, cilantro → blitz with oil, nuts, garlic\n- **Freeze**: Wash, dry, freeze in bags → use directly in cooked dishes\n\n### Produce-Fruit (berries, bananas)\n- **Smoothie**: The universal solution for overripe fruit\n- **Baking**: Bananas → banana bread, berries → muffins/crumble\n- **Freeze**: All fruit freezes well — perfect for future smoothies\n- **Jam**: Quick stovetop jam with berries\n\n### Bakery (bread, pastries)\n- **Croutons**: Cube, toss with oil, bake — lasts weeks\n- **Bread pudding**: Use stale bread + eggs + milk\n- **French toast**: Breakfast solution for old bread\n- **Freeze**: Slice bread first, then freeze — toast from frozen\n\n### Eggs\n- **Hard-boil**: Extends life by 7 more days\n- **Frittata**: Use up eggs + any expiring veg/meat/cheese\n- **Baking**: Cakes, muffins, quiches\n- **Freeze**: Crack, whisk, freeze in ice cube trays (1 cube ≈ 1 egg)\n\n### Tofu\n- **Stir-fry**: Quick and forgiving\n- **Scramble**: Tofu scramble as egg substitute\n- **Freeze**: Freezing changes texture (more chewy) — great for stir-fry\n\n## Waste Reduction Strategy\n\n1. **Shop with a list** — don't overbuy\n2. **First In, First Out (FIFO)** — rotate fridge so oldest is in front\n3. **Weekly \"clean-out\" meal** — make soup/stir-fry with everything expiring\n4. **Track your waste patterns** — if you always waste spinach, buy less or buy frozen\n5. **Compost** what truly can't be saved\n\nFile v0.1.1:references/shelf-life.md\n\n# Default Shelf Life & Category Detection\n\n## How Categories Work\n\nThe tracker automatically categorizes items based on keyword matching against the item name. Each category has a default shelf life in days.\n\n## Category → Shelf Life Table\n\n| Category | Default Days | Keywords |\n|----------|-------------|----------|\n| Dairy | 7 | milk, yogurt, cheese, cream, butter, kefir, sour cream, cottage cheese |\n| Meat | 3 | chicken, beef, pork, fish, turkey, bacon, sausage, ham, steak, ground, lamb, duck, shrimp, salmon |\n| Produce-Leafy | 4 | spinach, lettuce, salad, kale, arugula, herbs, cilantro, parsley, basil, spring onion |\n| Produce-Root | 14 | carrot, potato, onion, garlic, ginger, beet, turnip, radish, sweet potato, leek |\n| Produce-Fruit | 7 | berry, banana, apple, orange, lemon, lime, grape, mango, pineapple, peach, plum, pear, avocado, tomato, strawberry, blueberry |\n| Bakery | 5 | bread, bagel, tortilla, bun, roll, pastry, cake, muffin, croissant, pancake, naan, pita |\n| Deli | 5 | cold cut, salami, prosciutto, ham slice, prepared salad, coleslaw, hummus, tzatziki |\n| Eggs | 21 | egg |\n| Condiments | 180 | sauce, dressing, ketchup, mustard, mayo, relish, chutney, jam, jelly |\n| Tofu | 7 | tofu, tempeh, seitan |\n| Other | 7 | (fallback for unrecognized items) |\n\n## Real-World Shelf Life Notes\n\nThese are **conservative estimates** for fridge storage at 4°C:\n\n### Dairy\n- Milk: 7 days opened, 10+ days unopened\n- Yogurt: 7-14 days (smell test is reliable)\n- Hard cheese: 3-4 weeks (mold on surface is OK for hard cheeses, cut 1cm around)\n- Soft cheese: 7-10 days\n- Butter: 2-3 weeks in fridge, months in freezer\n\n### Meat (refrigerated, not frozen)\n- Chicken: 1-2 days raw, 3-4 days cooked\n- Beef/Pork: 3-5 days raw\n- Fish: 1-2 days raw\n- Bacon: 7 days opened\n\n### Produce\n- Berries: 3-5 days (mold spreads fast — check daily)\n- Bananas: 3-5 days on counter, freeze when ripe\n- Leafy greens: 3-5 days (spinach goes fast, kale lasts longer)\n- Root veg: 2-4 weeks (potatoes need dark+cool, not fridge)\n- Tomatoes: 3-5 days on counter (fridge kills flavor but extends life)\n\n### Tips for Extending Life\n- **Freeze** meat on day of purchase if not cooking within 2 days\n- **Store herbs** like flowers in water (basil, cilantro)\n- **Wrap greens** in paper towel to absorb moisture\n- **Keep bananas** away from other fruit (ethylene gas)\n- **Don't wash berries** until ready to eat\n\n## Adding Custom Categories\n\nTo add a custom category, simply use `--days` when adding:\n\n```bash\npython expiry_tracker.py add \"kimchi\" --days 30\npython expiry_tracker.py add \"sourdough starter\" --days 365\n```\n\nThe tracker will still try to categorize for reporting, but the expiry date is what matters for alerts.\n\nFile v0.1.1:skill-card.md\n\n## Description:\n\nTrack food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[voronindenis5](https://clawhub.ai/user/voronindenis5)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users and household-focused agents use this skill to track perishable groceries, surface items expiring soon, suggest ways to use them, and reduce avoidable food waste.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill stores grocery inventory and notes in ~/.expiry_tracker.json.\n\nMitigation: Review the local storage location before use and avoid entering sensitive personal details in grocery item notes.\n\nRisk: The remove workflow uses fuzzy matching and can affect waste reporting if the wrong item is selected.\n\nMitigation: Review the matched item before confirming removal, especially when inventory contains similarly named items.\n\nRisk: Expiry dates are planning estimates, not food safety determinations.\n\nMitigation: Check actual food condition and storage history before eating, freezing, composting, or discarding items.\n\n## Reference(s):\n\n- [GitHub repository](https://github.com/voronindenis5/expiry-tracker)\n- [ClawHub skill page](https://clawhub.ai/voronindenis5/skills/expiry-tracker)\n- [Default Shelf Life & Category Detection](references/shelf-life.md)\n- [Recipe Hints by Category](references/recipe-hints.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, guidance]\n\n**Output Format:** [Markdown with inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Single-stream user guidance for maintaining a local grocery expiry inventory.]\n\n## Skill Version(s):\n\n0.1.1 (source: server release metadata)\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\nFile v0.1.1:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Denis Voronin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v0.1.0: 10 files, 13026 bytes\n\nFiles: LICENSE (1070b), README.md (1835b), references (0b), references/recipe-hints.md (2682b), references/shelf-life.md (2718b), scripts (0b), scripts/expiry_tracker.py (13201b), skill-card.md (2016b), SKILL.md (3627b), _meta.json (133b)\n\nFile v0.1.0:SKILL.md\n\n---\nname: expiry-tracker\ndescription: \"Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually.\"\nversion: 1.0.0\nauthor: Denis Voronin\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [food, expiry, grocery, waste-reduction, household, tracker]\n    related_skills: [leftover-chef, receipt-raccoon]\n---\n\n# Expiry Tracker\n\n## Overview\n\nFood waste is a massive problem — the average household throws away 30% of the food they buy. Most of it spoils simply because people forget what's in the fridge and when it expires.\n\nExpiry Tracker solves this by maintaining a simple inventory of perishable items with their expiry dates, then proactively suggesting what to cook before things go bad.\n\n## When to Use\n\n- After grocery shopping — add items to track\n- Daily check — \"what expires soon?\"\n- Before cooking — \"what should I use today?\"\n- When planning meals for the week\n- Before traveling — check what needs to be consumed first\n\n**Don't use for:** Non-perishables (pasta, rice, canned goods with 1+ year shelf life), frozen items (unless thawing).\n\n## Commands\n\n```bash\n# Add an item\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --expiry 2026-08-15\n\n# List items expiring soon\npython scripts/expiry_tracker.py list --days 3\n\n# Get today's \"use this first\" suggestions\npython scripts/expiry_tracker.py today\n\n# Remove consumed/expired item\npython scripts/expiry_tracker.py remove \"milk\"\n\n# Show full inventory sorted by expiry\npython scripts/expiry_tracker.py inventory\n\n# Weekly summary / waste report\npython scripts/expiry_tracker.py report\n\n# Bulk add from receipt text\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt\"\n```\n\n## How It Works\n\n1. Items are stored in `~/.expiry_tracker.json` — a simple JSON database\n2. Each item has: name, category, purchase date, expiry date, quantity, optional note\n3. Default shelf life is inferred from category (dairy=7d, meat=3d, bread=5d, etc.)\n4. `today` command shows items expiring within 48h, sorted by urgency\n5. `report` shows waste statistics: how much expired vs consumed\n\n## Default Shelf Life by Category\n\n| Category | Days | Examples |\n|----------|------|----------|\n| Dairy | 7 | Milk, yogurt, cheese |\n| Meat | 3 | Chicken, beef, pork, fish |\n| Produce-Leafy | 4 | Spinach, lettuce, herbs |\n| Produce-Root | 14 | Carrots, potatoes, onions |\n| Produce-Fruit | 7 | Berries, bananas, apples |\n| Bakery | 5 | Bread, pastries, tortillas |\n| Deli | 5 | Cold cuts, prepared salads |\n| Eggs | 21 | Eggs |\n| Condiments | 180 | Opened sauces, dressings |\n| Tofu | 7 | Tofu, tempeh |\n\n## Common Pitfalls\n\n1. **Forgetting to remove consumed items.** Always run `remove` when you eat something, otherwise the waste report is inaccurate.\n\n2. **Overly optimistic expiry dates.** \"Best before\" ≠ \"goes bad on.\" Use smell/visual check before tossing. The tracker errs on the side of caution.\n\n3. **Not adding items on shopping day.** The tracker is only as good as its data. Make it a habit to batch-add after unpacking groceries.\n\n4. **Ignoring the `today` command.** Set up a daily cron/reminder to check it every morning.\n\n## Verification Checklist\n\n- [ ] Database file created at `~/.expiry_tracker.json`\n- [ ] `add` command works with both `--days` and `--expiry` flags\n- [ ] `list --days 3` shows only items expiring within 3 days\n- [ ] `today` shows actionable suggestions\n- [ ] `report` shows waste statistics\n- [ ] `batch` mode parses comma-separated items correctly\n\nFile v0.1.0:README.md\n\n# Expiry Tracker 🥛⏰\n\n> Track food expiry dates, get daily alerts, reduce food waste.\n\n## The Problem\n\nThe average household throws away **30% of the food they buy**. Most of it spoils because people forget what's in the fridge and when it expires.\n\n## The Solution\n\nA simple command-line tool that:\n- 📦 Tracks perishable items with expiry dates\n- ⏰ Alerts you before food goes bad\n- 💡 Suggests what to cook with soon-to-expire items\n- 📊 Generates waste reports so you can spot patterns\n\n## Quick Start\n\n```bash\n# Add items after grocery shopping\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --days 3\npython scripts/expiry_tracker.py add \"spinach\"  # auto: 4 days (leafy greens)\n\n# Or batch add from a receipt\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt, spinach, berries\"\n\n# Check what needs attention today\npython scripts/expiry_tracker.py today\n\n# Full inventory\npython scripts/expiry_tracker.py inventory\n\n# Mark items as consumed or wasted\npython scripts/expiry_tracker.py remove \"milk\"           # consumed\npython scripts/expiry_tracker.py remove \"spinach\" --wasted  # tossed\n\n# Weekly waste report\npython scripts/expiry_tracker.py report\n```\n\n## Features\n\n- **Auto-categorization**: 10 food categories with keyword matching\n- **Smart defaults**: Knows that chicken lasts 3 days, carrots 14 days\n- **Recipe hints**: Suggests how to use soon-to-expire items\n- **Waste tracking**: Records what was consumed vs wasted for pattern analysis\n- **No dependencies**: Pure Python stdlib, runs anywhere\n\n## Installation\n\n```bash\ngit clone https://github.com/voronindenis5/expiry-tracker.git\ncd expiry-tracker\npython scripts/expiry_tracker.py today\n```\n\nData is stored in `~/.expiry_tracker.json`.\n\n## License\n\nMIT © Denis Voronin\n\nFile v0.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn75wwn4x6djaf28jbykeamazd81gtdp\",\n  \"slug\": \"expiry-tracker\",\n  \"version\": \"0.1.0\",\n  \"publishedAt\": 1786449447453\n}\n\nFile v0.1.0:references/recipe-hints.md\n\n# Recipe Hints by Category\n\nWhen food is about to expire, the tracker suggests ways to use it. This document explains the logic.\n\n## Urgency Levels\n\n| Emoji | Days Left | Action |\n|-------|-----------|--------|\n| 🔴 | Expired | Toss or compost — do NOT consume if spoiled |\n| 🟠 | 0 days | Cook TODAY or freeze |\n| 🟡 | 1-2 days | Plan a meal around it tomorrow |\n| 🟢 | 3-5 days | No rush, but keep in mind |\n| ⚪ | 6+ days | Plenty of time |\n\n## Category → Recipe Suggestions\n\n### Dairy (milk, yogurt, cheese)\n- **Smoothie**: Blend milk/yogurt with frozen fruit\n- **Creamy pasta**: Make a béchamel or carbonara\n- **Baking**: Yogurt in muffins/cakes, cheese in casseroles\n- **Freeze**: Cheese freezes well shredded, milk can be frozen (use for cooking)\n\n### Meat (chicken, beef, fish)\n- **Cook immediately**: This is the #1 item to not let expire\n- **Freeze**: If you can't cook today, freeze it right now\n- **Meal prep**: Cook a large batch, portion, refrigerate/freeze\n- **Soup/stew**: Perfect for meat that's 1-2 days from expiry\n\n### Produce-Leafy (spinach, lettuce, herbs)\n- **Big salad**: Use all the greens in one meal\n- **Stir-fry**: Wilted greens are perfect for stir-fry\n- **Smoothie**: Spinach/kale blend invisibly into fruit smoothies\n- **Pesto**: Basil, cilantro → blitz with oil, nuts, garlic\n- **Freeze**: Wash, dry, freeze in bags → use directly in cooked dishes\n\n### Produce-Fruit (berries, bananas)\n- **Smoothie**: The universal solution for overripe fruit\n- **Baking**: Bananas → banana bread, berries → muffins/crumble\n- **Freeze**: All fruit freezes well — perfect for future smoothies\n- **Jam**: Quick stovetop jam with berries\n\n### Bakery (bread, pastries)\n- **Croutons**: Cube, toss with oil, bake — lasts weeks\n- **Bread pudding**: Use stale bread + eggs + milk\n- **French toast**: Breakfast solution for old bread\n- **Freeze**: Slice bread first, then freeze — toast from frozen\n\n### Eggs\n- **Hard-boil**: Extends life by 7 more days\n- **Frittata**: Use up eggs + any expiring veg/meat/cheese\n- **Baking**: Cakes, muffins, quiches\n- **Freeze**: Crack, whisk, freeze in ice cube trays (1 cube ≈ 1 egg)\n\n### Tofu\n- **Stir-fry**: Quick and forgiving\n- **Scramble**: Tofu scramble as egg substitute\n- **Freeze**: Freezing changes texture (more chewy) — great for stir-fry\n\n## Waste Reduction Strategy\n\n1. **Shop with a list** — don't overbuy\n2. **First In, First Out (FIFO)** — rotate fridge so oldest is in front\n3. **Weekly \"clean-out\" meal** — make soup/stir-fry with everything expiring\n4. **Track your waste patterns** — if you always waste spinach, buy less or buy frozen\n5. **Compost** what truly can't be saved\n\nFile v0.1.0:references/shelf-life.md\n\n# Default Shelf Life & Category Detection\n\n## How Categories Work\n\nThe tracker automatically categorizes items based on keyword matching against the item name. Each category has a default shelf life in days.\n\n## Category → Shelf Life Table\n\n| Category | Default Days | Keywords |\n|----------|-------------|----------|\n| Dairy | 7 | milk, yogurt, cheese, cream, butter, kefir, sour cream, cottage cheese |\n| Meat | 3 | chicken, beef, pork, fish, turkey, bacon, sausage, ham, steak, ground, lamb, duck, shrimp, salmon |\n| Produce-Leafy | 4 | spinach, lettuce, salad, kale, arugula, herbs, cilantro, parsley, basil, spring onion |\n| Produce-Root | 14 | carrot, potato, onion, garlic, ginger, beet, turnip, radish, sweet potato, leek |\n| Produce-Fruit | 7 | berry, banana, apple, orange, lemon, lime, grape, mango, pineapple, peach, plum, pear, avocado, tomato, strawberry, blueberry |\n| Bakery | 5 | bread, bagel, tortilla, bun, roll, pastry, cake, muffin, croissant, pancake, naan, pita |\n| Deli | 5 | cold cut, salami, prosciutto, ham slice, prepared salad, coleslaw, hummus, tzatziki |\n| Eggs | 21 | egg |\n| Condiments | 180 | sauce, dressing, ketchup, mustard, mayo, relish, chutney, jam, jelly |\n| Tofu | 7 | tofu, tempeh, seitan |\n| Other | 7 | (fallback for unrecognized items) |\n\n## Real-World Shelf Life Notes\n\nThese are **conservative estimates** for fridge storage at 4°C:\n\n### Dairy\n- Milk: 7 days opened, 10+ days unopened\n- Yogurt: 7-14 days (smell test is reliable)\n- Hard cheese: 3-4 weeks (mold on surface is OK for hard cheeses, cut 1cm around)\n- Soft cheese: 7-10 days\n- Butter: 2-3 weeks in fridge, months in freezer\n\n### Meat (refrigerated, not frozen)\n- Chicken: 1-2 days raw, 3-4 days cooked\n- Beef/Pork: 3-5 days raw\n- Fish: 1-2 days raw\n- Bacon: 7 days opened\n\n### Produce\n- Berries: 3-5 days (mold spreads fast — check daily)\n- Bananas: 3-5 days on counter, freeze when ripe\n- Leafy greens: 3-5 days (spinach goes fast, kale lasts longer)\n- Root veg: 2-4 weeks (potatoes need dark+cool, not fridge)\n- Tomatoes: 3-5 days on counter (fridge kills flavor but extends life)\n\n### Tips for Extending Life\n- **Freeze** meat on day of purchase if not cooking within 2 days\n- **Store herbs** like flowers in water (basil, cilantro)\n- **Wrap greens** in paper towel to absorb moisture\n- **Keep bananas** away from other fruit (ethylene gas)\n- **Don't wash berries** until ready to eat\n\n## Adding Custom Categories\n\nTo add a custom category, simply use `--days` when adding:\n\n```bash\npython expiry_tracker.py add \"kimchi\" --days 30\npython expiry_tracker.py add \"sourdough starter\" --days 365\n```\n\nThe tracker will still try to categorize for reporting, but the expiry date is what matters for alerts.\n\nFile v0.1.0:skill-card.md\n\n## Description:\n\nTrack food expiry dates from grocery receipts, get daily alerts before food goes bad, receive use-this-today suggestions, and reduce food waste.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[voronindenis5](https://clawhub.ai/user/voronindenis5)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nExternal users and household-focused agents use this skill to maintain a local inventory of perishable groceries, identify items expiring soon, and produce waste reports that support meal planning.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill stores grocery inventory and waste history locally in ~/.expiry_tracker.json.\n\nMitigation: Review, protect, or delete that local file on shared or managed computers when the data should not persist.\n\nRisk: Expiry and recipe guidance may be too general for a specific item or storage condition.\n\nMitigation: Use the tracker as a reminder aid and apply normal food-safety checks before consuming or discarding food.\n\n## Reference(s):\n\n- [Server-resolved GitHub repository](https://github.com/voronindenis5/expiry-tracker)\n- [ClawHub skill page](https://clawhub.ai/voronindenis5/skills/expiry-tracker)\n- [Default Shelf Life & Category Detection](references/shelf-life.md)\n- [Recipe Hints by Category](references/recipe-hints.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, shell commands, guidance, configuration]\n\n**Output Format:** [Markdown with inline shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Commands may create or update a local JSON inventory at ~/.expiry_tracker.json.]\n\n## Skill Version(s):\n\n0.1.0 (source: server release metadata; artifact frontmatter reports 1.0.0)\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\nFile v0.1.0:LICENSE\n\nMIT License\n\nCopyright (c) 2026 Denis Voronin\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","readmeExcerpt":"Skill: expiry-tracker Owner: voronindenis5 Summary: Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually. Tags: latest:0.1.1 Version history: v0.1.1 | 2026-08-14T06:19:00.138Z | auto - Removed the skill card file (skill-card.md). - No functional or user-facing changes were made. v0.1.0 | 2026-08-1","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Add an item\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --expiry 2026-08-15\n\n# List items expiring soon\npython scripts/expiry_tracker.py list --days 3\n\n# Get today's \"use this first\" suggestions\npython scripts/expiry_tracker.py today\n\n# Remove consumed/expired item\npython scripts/expiry_tracker.py remove \"milk\"\n\n# Show full inventory sorted by expiry\npython scripts/expiry_tracker.py inventory\n\n# Weekly summary / waste report\npython scripts/expiry_tracker.py report\n\n# Bulk add from receipt text\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt\""},{"language":"bash","snippet":"# Add items after grocery shopping\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --days 3\npython scripts/expiry_tracker.py add \"spinach\"  # auto: 4 days (leafy greens)\n\n# Or batch add from a receipt\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt, spinach, berries\"\n\n# Check what needs attention today\npython scripts/expiry_tracker.py today\n\n# Full inventory\npython scripts/expiry_tracker.py inventory\n\n# Mark items as consumed or wasted\npython scripts/expiry_tracker.py remove \"milk\"           # consumed\npython scripts/expiry_tracker.py remove \"spinach\" --wasted  # tossed\n\n# Weekly waste report\npython scripts/expiry_tracker.py report"},{"language":"bash","snippet":"git clone https://github.com/voronindenis5/expiry-tracker.git\ncd expiry-tracker\npython scripts/expiry_tracker.py today"},{"language":"bash","snippet":"python expiry_tracker.py add \"kimchi\" --days 30\npython expiry_tracker.py add \"sourdough starter\" --days 365"},{"language":"bash","snippet":"# Add an item\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --expiry 2026-08-15\n\n# List items expiring soon\npython scripts/expiry_tracker.py list --days 3\n\n# Get today's \"use this first\" suggestions\npython scripts/expiry_tracker.py today\n\n# Remove consumed/expired item\npython scripts/expiry_tracker.py remove \"milk\"\n\n# Show full inventory sorted by expiry\npython scripts/expiry_tracker.py inventory\n\n# Weekly summary / waste report\npython scripts/expiry_tracker.py report\n\n# Bulk add from receipt text\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt\""},{"language":"bash","snippet":"# Add items after grocery shopping\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --days 3\npython scripts/expiry_tracker.py add \"spinach\"  # auto: 4 days (leafy greens)\n\n# Or batch add from a receipt\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt, spinach, berries\"\n\n# Check what needs attention today\npython scripts/expiry_tracker.py today\n\n# Full inventory\npython scripts/expiry_tracker.py inventory\n\n# Mark items as consumed or wasted\npython scripts/expiry_tracker.py remove \"milk\"           # consumed\npython scripts/expiry_tracker.py remove \"spinach\" --wasted  # tossed\n\n# Weekly waste report\npython scripts/expiry_tracker.py report"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: expiry-tracker\ndescription: \"Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually.\"\nversion: 1.0.0\nauthor: Denis Voronin\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [food, expiry, grocery, waste-reduction, household, tracker]\n    related_skills: [leftover-chef, receipt-raccoon]\n---\n\n# Expiry Tracker\n\n## Overview\n\nFood waste is a massive problem — the average household throws away 30% of the food they buy. Most of it spoils simply because people forget what's in the fridge and when it expires.\n\nExpiry Tracker solves this by maintaining a simple inventory of perishable items with their expiry dates, then proactively suggesting what to cook before things go bad.\n\n## When to Use\n\n- After grocery shopping — add items to track\n- Daily check — \"what expires soon?\"\n- Before cooking — \"what should I use today?\"\n- When planning meals for the week\n- Before traveling — check what needs to be consumed first\n\n**Don't use for:** Non-perishables (pasta, rice, canned goods with 1+ year shelf life), frozen items (unless thawing).\n\n## Commands\n\n```bash\n# Add an item\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --expiry 2026-08-15\n\n# List items expiring soon\npython scripts/expiry_tracker.py list --days 3\n\n# Get today's \"use this first\" suggestions\npython scripts/expiry_tracker.py today\n\n# Remove consumed/expired item\npython scripts/expiry_tracker.py remove \"milk\"\n\n# Show full inventory sorted by expiry\npython scripts/expiry_tracker.py inventory\n\n# Weekly summary / waste report\npython scripts/expiry_tracker.py report\n\n# Bulk add from receipt text\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt\"\n```\n\n## How It Works\n\n1. Items are stored in `~/.expiry_tracker.json` — a simple JSON database\n2. Each item has: name, category, purchase date, expiry date, quantity, optional note\n3. Default shelf life is inferred from category (dairy=7d, meat=3d, bread=5d, etc.)\n4. `today` command shows items expiring within 48h, sorted by urgency\n5. `report` shows waste statistics: how much expired vs consumed\n\n## Default Shelf Life by Category\n\n| Category | Days | Examples |\n|----------|------|----------|\n| Dairy | 7 | Milk, yogurt, cheese |\n| Meat | 3 | Chicken, beef, pork, fish |\n| Produce-Leafy | 4 | Spinach, lettuce, herbs |\n| Produce-Root | 14 | Carrots, potatoes, onions |\n| Produce-Fruit | 7 | Berries, bananas, apples |\n| Bakery | 5 | Bread, pastries, tortillas |\n| Deli | 5 | Cold cuts, prepared salads |\n| Eggs | 21 | Eggs |\n| Condiments | 180 | Opened sauces, dressings |\n| Tofu | 7 | Tofu, tempeh |\n\n## Common Pitfalls\n\n1. **Forgetting to remove consumed items.** Always run `remove` when you eat something, otherwise the waste report is inaccurate.\n\n2. **Overly optimistic expiry dates.** \"Best before\" ≠ \"goes bad on.\" Use smell/visual check before tossing. The tracker "},{"path":"README.md","content":"# Expiry Tracker 🥛⏰\n\n> Track food expiry dates, get daily alerts, reduce food waste.\n\n## The Problem\n\nThe average household throws away **30% of the food they buy**. Most of it spoils because people forget what's in the fridge and when it expires.\n\n## The Solution\n\nA simple command-line tool that:\n- 📦 Tracks perishable items with expiry dates\n- ⏰ Alerts you before food goes bad\n- 💡 Suggests what to cook with soon-to-expire items\n- 📊 Generates waste reports so you can spot patterns\n\n## Quick Start\n\n```bash\n# Add items after grocery shopping\npython scripts/expiry_tracker.py add \"milk\" --days 7\npython scripts/expiry_tracker.py add \"chicken breast\" --days 3\npython scripts/expiry_tracker.py add \"spinach\"  # auto: 4 days (leafy greens)\n\n# Or batch add from a receipt\npython scripts/expiry_tracker.py batch \"milk, eggs, bread, chicken, yogurt, spinach, berries\"\n\n# Check what needs attention today\npython scripts/expiry_tracker.py today\n\n# Full inventory\npython scripts/expiry_tracker.py inventory\n\n# Mark items as consumed or wasted\npython scripts/expiry_tracker.py remove \"milk\"           # consumed\npython scripts/expiry_tracker.py remove \"spinach\" --wasted  # tossed\n\n# Weekly waste report\npython scripts/expiry_tracker.py report\n```\n\n## Features\n\n- **Auto-categorization**: 10 food categories with keyword matching\n- **Smart defaults**: Knows that chicken lasts 3 days, carrots 14 days\n- **Recipe hints**: Suggests how to use soon-to-expire items\n- **Waste tracking**: Records what was consumed vs wasted for pattern analysis\n- **No dependencies**: Pure Python stdlib, runs anywhere\n\n## Installation\n\n```bash\ngit clone https://github.com/voronindenis5/expiry-tracker.git\ncd expiry-tracker\npython scripts/expiry_tracker.py today\n```\n\nData is stored in `~/.expiry_tracker.json`.\n\n## License\n\nMIT © Denis Voronin"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75wwn4x6djaf28jbykeamazd81gtdp\",\n  \"slug\": \"expiry-tracker\",\n  \"version\": \"0.1.1\",\n  \"publishedAt\": 1786688340138\n}"},{"path":"references/recipe-hints.md","content":"# Recipe Hints by Category\n\nWhen food is about to expire, the tracker suggests ways to use it. This document explains the logic.\n\n## Urgency Levels\n\n| Emoji | Days Left | Action |\n|-------|-----------|--------|\n| 🔴 | Expired | Toss or compost — do NOT consume if spoiled |\n| 🟠 | 0 days | Cook TODAY or freeze |\n| 🟡 | 1-2 days | Plan a meal around it tomorrow |\n| 🟢 | 3-5 days | No rush, but keep in mind |\n| ⚪ | 6+ days | Plenty of time |\n\n## Category → Recipe Suggestions\n\n### Dairy (milk, yogurt, cheese)\n- **Smoothie**: Blend milk/yogurt with frozen fruit\n- **Creamy pasta**: Make a béchamel or carbonara\n- **Baking**: Yogurt in muffins/cakes, cheese in casseroles\n- **Freeze**: Cheese freezes well shredded, milk can be frozen (use for cooking)\n\n### Meat (chicken, beef, fish)\n- **Cook immediately**: This is the #1 item to not let expire\n- **Freeze**: If you can't cook today, freeze it right now\n- **Meal prep**: Cook a large batch, portion, refrigerate/freeze\n- **Soup/stew**: Perfect for meat that's 1-2 days from expiry\n\n### Produce-Leafy (spinach, lettuce, herbs)\n- **Big salad**: Use all the greens in one meal\n- **Stir-fry**: Wilted greens are perfect for stir-fry\n- **Smoothie**: Spinach/kale blend invisibly into fruit smoothies\n- **Pesto**: Basil, cilantro → blitz with oil, nuts, garlic\n- **Freeze**: Wash, dry, freeze in bags → use directly in cooked dishes\n\n### Produce-Fruit (berries, bananas)\n- **Smoothie**: The universal solution for overripe fruit\n- **Baking**: Bananas → banana bread, berries → muffins/crumble\n- **Freeze**: All fruit freezes well — perfect for future smoothies\n- **Jam**: Quick stovetop jam with berries\n\n### Bakery (bread, pastries)\n- **Croutons**: Cube, toss with oil, bake — lasts weeks\n- **Bread pudding**: Use stale bread + eggs + milk\n- **French toast**: Breakfast solution for old bread\n- **Freeze**: Slice bread first, then freeze — toast from frozen\n\n### Eggs\n- **Hard-boil**: Extends life by 7 more days\n- **Frittata**: Use up eggs + any expiring veg/meat/cheese\n- **Baking**: Cakes, muffins, quiches\n- **Freeze**: Crack, whisk, freeze in ice cube trays (1 cube ≈ 1 egg)\n\n### Tofu\n- **Stir-fry**: Quick and forgiving\n- **Scramble**: Tofu scramble as egg substitute\n- **Freeze**: Freezing changes texture (more chewy) — great for stir-fry\n\n## Waste Reduction Strategy\n\n1. **Shop with a list** — don't overbuy\n2. **First In, First Out (FIFO)** — rotate fridge so oldest is in front\n3. **Weekly \"clean-out\" meal** — make soup/stir-fry with everything expiring\n4. **Track your waste patterns** — if you always waste spinach, buy less or buy frozen\n5. **Compost** what truly can't be saved"},{"path":"references/shelf-life.md","content":"# Default Shelf Life & Category Detection\n\n## How Categories Work\n\nThe tracker automatically categorizes items based on keyword matching against the item name. Each category has a default shelf life in days.\n\n## Category → Shelf Life Table\n\n| Category | Default Days | Keywords |\n|----------|-------------|----------|\n| Dairy | 7 | milk, yogurt, cheese, cream, butter, kefir, sour cream, cottage cheese |\n| Meat | 3 | chicken, beef, pork, fish, turkey, bacon, sausage, ham, steak, ground, lamb, duck, shrimp, salmon |\n| Produce-Leafy | 4 | spinach, lettuce, salad, kale, arugula, herbs, cilantro, parsley, basil, spring onion |\n| Produce-Root | 14 | carrot, potato, onion, garlic, ginger, beet, turnip, radish, sweet potato, leek |\n| Produce-Fruit | 7 | berry, banana, apple, orange, lemon, lime, grape, mango, pineapple, peach, plum, pear, avocado, tomato, strawberry, blueberry |\n| Bakery | 5 | bread, bagel, tortilla, bun, roll, pastry, cake, muffin, croissant, pancake, naan, pita |\n| Deli | 5 | cold cut, salami, prosciutto, ham slice, prepared salad, coleslaw, hummus, tzatziki |\n| Eggs | 21 | egg |\n| Condiments | 180 | sauce, dressing, ketchup, mustard, mayo, relish, chutney, jam, jelly |\n| Tofu | 7 | tofu, tempeh, seitan |\n| Other | 7 | (fallback for unrecognized items) |\n\n## Real-World Shelf Life Notes\n\nThese are **conservative estimates** for fridge storage at 4°C:\n\n### Dairy\n- Milk: 7 days opened, 10+ days unopened\n- Yogurt: 7-14 days (smell test is reliable)\n- Hard cheese: 3-4 weeks (mold on surface is OK for hard cheeses, cut 1cm around)\n- Soft cheese: 7-10 days\n- Butter: 2-3 weeks in fridge, months in freezer\n\n### Meat (refrigerated, not frozen)\n- Chicken: 1-2 days raw, 3-4 days cooked\n- Beef/Pork: 3-5 days raw\n- Fish: 1-2 days raw\n- Bacon: 7 days opened\n\n### Produce\n- Berries: 3-5 days (mold spreads fast — check daily)\n- Bananas: 3-5 days on counter, freeze when ripe\n- Leafy greens: 3-5 days (spinach goes fast, kale lasts longer)\n- Root veg: 2-4 weeks (potatoes need dark+cool, not fridge)\n- Tomatoes: 3-5 days on counter (fridge kills flavor but extends life)\n\n### Tips for Extending Life\n- **Freeze** meat on day of purchase if not cooking within 2 days\n- **Store herbs** like flowers in water (basil, cilantro)\n- **Wrap greens** in paper towel to absorb moisture\n- **Keep bananas** away from other fruit (ethylene gas)\n- **Don't wash berries** until ready to eat\n\n## Adding Custom Categories\n\nTo add a custom category, simply use `--days` when adding:\n\n```bash\npython expiry_tracker.py add \"kimchi\" --days 30\npython expiry_tracker.py add \"sourdough starter\" --days 365\n```\n\nThe tracker will still try to categorize for reporting, but the expiry date is what matters for alerts."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually. Skill: expiry-tracker Owner: voronindenis5 Summary: Track food expiry dates from grocery receipts. Get daily alerts before food goes bad, 'use this today' suggestions, and reduce food waste. Scan receipts or add items manually. Tags: latest:0.1.1 Version history: v0.1.1 | 2026-08-14T06:19:00.138Z | auto - Removed the skill card file (skill-card.md). - No functional or user-facing changes were made. v0.1.0 | 2026-08-1","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1643,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:01:04.260Z","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-09T23:01:04.260Z","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-10T05:40:09.097Z","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"}]}}}