{"_id":"grocer-cli","_rev":"5-95778b88a79f79320b1797c693301f59","name":"grocer-cli","dist-tags":{"latest":"2.4.0"},"versions":{"2.0.0":{"name":"grocer-cli","version":"2.0.0","keywords":[],"author":"","license":"ISC","_id":"grocer-cli@2.0.0","maintainers":[{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"}],"bin":{"grocer":"src/index.js"},"dist":{"shasum":"fcf781d45bc1c51e55d5a74526c72577df989de6","tarball":"https://registry.npmjs.org/grocer-cli/-/grocer-cli-2.0.0.tgz","fileCount":42,"integrity":"sha512-k+3ty+rATjCpAXYCejMWgH/a7AAixeZu81l+qmgv+pf+GxX2bO9aP8K9LOZeWfggkXM2IT5F97I07wKISO9E1Q==","signatures":[{"sig":"MEUCIEIOBwg1dt7Y06lvaG1APaKoVdxWNcdo3zMyPKk616dKAiEAnfRJBxV3TpId5UybJdr1gLEialkpQUpMenLUPytJu+M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1482107},"main":"src/index.js","type":"module","gitHead":"882db3e6e70cbf6f9ec0444e32ab7ff28d81628f","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node src/index.js"},"_npmUser":{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"},"repository":{"url":"http://local_proxy@127.0.0.1:33613/git/sieteunoseis/kroger-cli","type":"git"},"_npmVersion":"10.9.0","description":"CLI tool for interacting with grocery store APIs — search products, manage recipes, and add to cart","directories":{},"_nodeVersion":"22.17.0","dependencies":{"open":"^11.0.0","chalk":"^5.6.2","dotenv":"^17.3.1","express":"^5.2.1","commander":"^14.0.3","rss-parser":"^3.13.0","better-sqlite3":"^12.8.0","@inquirer/prompts":"^8.3.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/grocer-cli_2.0.0_1774207438278_0.3073331235468617","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"grocer-cli","version":"2.1.0","keywords":["grocery","kroger","fred-meyer","cli","shopping","cart"],"author":{"name":"sieteunoseis"},"license":"ISC","_id":"grocer-cli@2.1.0","maintainers":[{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"}],"homepage":"https://github.com/sieteunoseis/grocer-cli#readme","bugs":{"url":"https://github.com/sieteunoseis/grocer-cli/issues"},"bin":{"grocer":"src/index.js"},"dist":{"shasum":"7f712e2b594e82e5f994c48467c04bbee0a971ef","tarball":"https://registry.npmjs.org/grocer-cli/-/grocer-cli-2.1.0.tgz","fileCount":43,"integrity":"sha512-BZiV+Zkdjux469KsY4xrvBQnZlFFBnSap255Q7U27EcTQYI0ILL5jZEQr/DfmcTjDoZWb9tBTasrh2OQRpJxHQ==","signatures":[{"sig":"MEUCIFuJcC52Fa1EDPpZbXZYva+Bas9PjCHfnra/gmTkYeAtAiEA03kvTMStELe+pB7l1YOZc2sXsAGpK7zgpZpFiWFnMKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/grocer-cli@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178335},"main":"src/index.js","type":"module","engines":{"node":">=22.5.0"},"gitHead":"5b06c96846ee32a9d2ed3f68285e4f2ee75b9eb1","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node src/index.js","build:skill":"node scripts/build-skill.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:402d9162-24e6-48c7-b2fe-e895c08cbf88"}},"repository":{"url":"git+https://github.com/sieteunoseis/grocer-cli.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool for interacting with grocery store APIs — search products, manage recipes, and add to cart","directories":{},"_nodeVersion":"22.22.1","dependencies":{"open":"^11.0.0","chalk":"^5.6.2","dotenv":"^17.3.1","express":"^5.2.1","commander":"^14.0.3","rss-parser":"^3.13.0","@inquirer/prompts":"^8.3.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/grocer-cli_2.1.0_1774284600572_0.6586691051063183","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"grocer-cli","version":"2.2.0","keywords":["grocery","kroger","fred-meyer","cli","shopping","cart"],"author":{"name":"sieteunoseis"},"license":"ISC","_id":"grocer-cli@2.2.0","maintainers":[{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"}],"homepage":"https://github.com/sieteunoseis/grocer-cli#readme","bugs":{"url":"https://github.com/sieteunoseis/grocer-cli/issues"},"bin":{"grocer-cli":"src/index.js"},"dist":{"shasum":"e83a27b23ca0691ca9b65bfc4532608502c51236","tarball":"https://registry.npmjs.org/grocer-cli/-/grocer-cli-2.2.0.tgz","fileCount":42,"integrity":"sha512-y03jDHdyuzcCWTxE4MjA2BP2sFUPzFsJgaMYSoayubBhJ5sDrkx3Vr7LtfE22Fe1rtA78E3TM+4IoiwW51TJFw==","signatures":[{"sig":"MEYCIQDN7j1JVk7pk3EzXyZdA9FuFElNOFhGCCRnTyQMLrMD8QIhAIWlUu+of5BGydF7EU46tOrOuPtQbs74S4M4d0Ijn8ro","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/grocer-cli@2.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178836},"main":"src/index.js","type":"module","engines":{"node":">=22.5.0"},"gitHead":"b199126b7466ba674afe224c1584cb646eff9ea3","scripts":{"test":"echo \"Error: no test specified\" && exit 1","start":"node src/index.js","build:skill":"node scripts/build-skill.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:402d9162-24e6-48c7-b2fe-e895c08cbf88"}},"repository":{"url":"git+https://github.com/sieteunoseis/grocer-cli.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool for interacting with grocery store APIs — search products, manage recipes, and add to cart","directories":{},"_nodeVersion":"22.22.1","dependencies":{"open":"^11.0.0","chalk":"^5.6.2","dotenv":"^17.3.1","express":"^5.2.1","commander":"^14.0.3","rss-parser":"^3.13.0","@inquirer/prompts":"^8.3.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/grocer-cli_2.2.0_1774285590953_0.630002058527577","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"grocer-cli","version":"2.3.0","keywords":["grocery","kroger","fred-meyer","cli","shopping","cart"],"author":{"name":"sieteunoseis"},"license":"ISC","_id":"grocer-cli@2.3.0","maintainers":[{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"}],"homepage":"https://github.com/sieteunoseis/grocer-cli#readme","bugs":{"url":"https://github.com/sieteunoseis/grocer-cli/issues"},"bin":{"grocer-cli":"src/index.js"},"dist":{"shasum":"01a73974e7145f11f2617e4d0317d6f4883c7363","tarball":"https://registry.npmjs.org/grocer-cli/-/grocer-cli-2.3.0.tgz","fileCount":47,"integrity":"sha512-f5JpsPT3Gi/XwywMcfMNLJBBwqHsyt/tOFT0yQ1MmREWcDxrIDKRPxLMtt1UyloggbZdNNVSpU4VO1iAQ4TL5Q==","signatures":[{"sig":"MEUCIQC6QiZSuNFFt1u3UrgS/4YU30wB1BpWqNhVtpgrcd9rDAIgMResg0Kv3LWAzkVGByC8I55jtls5qnjtsl4eeiQQBHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/grocer-cli@2.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":209654},"main":"src/index.js","type":"module","engines":{"node":">=22.5.0"},"gitHead":"30ce5269615c586c05407d37f4496c17effa2125","scripts":{"test":"node --test 'test/unit/*.test.js'","start":"node src/index.js","build:skill":"node scripts/build-skill.js","test:integration":"node --test 'test/integration/*.test.js'"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:402d9162-24e6-48c7-b2fe-e895c08cbf88"}},"repository":{"url":"git+https://github.com/sieteunoseis/grocer-cli.git","type":"git"},"_npmVersion":"11.12.0","description":"CLI tool for interacting with grocery store APIs — search products, manage recipes, and add to cart","directories":{},"_nodeVersion":"22.22.1","dependencies":{"open":"^11.0.0","chalk":"^5.6.2","dotenv":"^17.3.1","express":"^5.2.1","commander":"^14.0.3","rss-parser":"^3.13.0","@inquirer/prompts":"^8.3.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/grocer-cli_2.3.0_1774288682251_0.7226315942991053","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"grocer-cli","version":"2.4.0","description":"CLI tool for interacting with grocery store APIs — search products, manage recipes, and add to cart","type":"module","main":"src/index.js","bin":{"grocer-cli":"src/index.js"},"scripts":{"start":"node src/index.js","build:skill":"node scripts/build-skill.js","test":"node --test 'test/unit/*.test.js'","test:integration":"node --test 'test/integration/*.test.js'"},"repository":{"type":"git","url":"git+https://github.com/sieteunoseis/grocer-cli.git"},"keywords":["grocery","kroger","fred-meyer","cli","shopping","cart"],"author":{"name":"sieteunoseis"},"license":"ISC","engines":{"node":">=22.5.0"},"dependencies":{"@inquirer/prompts":"^8.3.2","chalk":"^5.6.2","commander":"^14.0.3","dotenv":"^17.3.1","express":"^5.2.1","open":"^11.0.0","rss-parser":"^3.13.0"},"gitHead":"d111d650443ad957b175a59c7ff04a4a7141b05c","_id":"grocer-cli@2.4.0","bugs":{"url":"https://github.com/sieteunoseis/grocer-cli/issues"},"homepage":"https://github.com/sieteunoseis/grocer-cli#readme","_nodeVersion":"22.22.1","_npmVersion":"11.12.0","dist":{"integrity":"sha512-8/9NitmPE85VNXfpKf7Atxu73kLWF/7iGe89UnNmKBC5WUFfJStTJQNDroJQDZuLR/FNpD/TtcwiDycC2sjabg==","shasum":"ec464409fdd298ef57c169b934b1c85eb7f5402e","tarball":"https://registry.npmjs.org/grocer-cli/-/grocer-cli-2.4.0.tgz","fileCount":47,"unpackedSize":217080,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/grocer-cli@2.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDXt2HWOwQnX6wtJeXV5SYMqFkmTYpRr7uXOebpxwl6rQIgG/d0nEOTrH0It0CSfND+BvXaWfHrUitqQCOJP0AOlQ4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:402d9162-24e6-48c7-b2fe-e895c08cbf88"}},"directories":{},"maintainers":[{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/grocer-cli_2.4.0_1774290874614_0.4206493923208745"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-22T19:23:58.277Z","modified":"2026-03-23T18:34:35.024Z","2.0.0":"2026-03-22T19:23:58.564Z","2.1.0":"2026-03-23T16:50:00.755Z","2.2.0":"2026-03-23T17:06:31.113Z","2.3.0":"2026-03-23T17:58:02.400Z","2.4.0":"2026-03-23T18:34:34.739Z"},"bugs":{"url":"https://github.com/sieteunoseis/grocer-cli/issues"},"author":{"name":"sieteunoseis"},"license":"ISC","homepage":"https://github.com/sieteunoseis/grocer-cli#readme","keywords":["grocery","kroger","fred-meyer","cli","shopping","cart"],"repository":{"type":"git","url":"git+https://github.com/sieteunoseis/grocer-cli.git"},"description":"CLI tool for interacting with grocery store APIs — search products, manage recipes, and add to cart","maintainers":[{"name":"sieteunoseis","email":"jeremy.worden@gmail.com"}],"readme":"# grocer-cli\n\nA chain-agnostic command-line tool for interacting with grocery store APIs — search products, manage recipes, track purchases, subscribe to recipe feeds, and budget your grocery spending.\n\n**Supported chains:** Kroger (and Kroger family: Ralphs, Fred Meyer, Harris Teeter, etc.)\n\n## Install\n\n```bash\nnpm install -g grocer-cli\n```\n\nRequires Node.js >= 22.5.0 (uses the built-in `node:sqlite` module).\n\n## Add Skills\n\nSkills teach Claude how to use grocer-cli on your behalf. They do **not** install the CLI — you need both.\n\n### Claude Code (recommended)\n\n```bash\nnpx skills add sieteunoseis/grocer-cli\n```\n\n### Claude Desktop\n\nDownload the [`grocery-cart-manager.skill`](https://github.com/sieteunoseis/grocer-cli/releases/latest/download/grocery-cart-manager.skill) file from the [latest release](https://github.com/sieteunoseis/grocer-cli/releases/latest). Open it and Claude Desktop will prompt you to add the skill.\n\nOr set it up manually:\n\n1. Open Claude Desktop\n2. Go to **Customize > Skills > +**\n3. Fill in:\n   - **Skill name:** `grocery-cart-manager`\n   - **Description:** `Help manage grocery shopping with the grocer-cli tool. Use when the user asks about grocery lists, recipes, shopping, adding items to cart, or fixing unavailable items.`\n   - **Instructions:** Copy from [docs/CLAUDE-BROWSER-INTEGRATION.md](docs/CLAUDE-BROWSER-INTEGRATION.md#option-2-claude-desktop-with-skill)\n\n## Claude Code + Chrome\n\nFor a fully automated workflow (no copy/paste), use Claude Code with Chrome:\n\n```bash\nclaude --chrome\n```\n\nWhen you're on your store's cart page, Claude can:\n\n- Read your cart and cross-reference against saved recipes\n- Identify missing ingredients and suggest `grocer-cli` commands to add them\n- Spot unavailable items and suggest replacements\n\nSee [docs/CLAUDE-BROWSER-INTEGRATION.md](docs/CLAUDE-BROWSER-INTEGRATION.md) for full details.\n\n## Setup\n\n1. Run the interactive setup:\n\n```bash\ngrocer-cli init\n```\n\nThis walks you through:\n\n- Choosing your grocery chain (e.g. Kroger, Fred Meyer, Ralphs)\n- Entering your API credentials\n- Getting started\n\n2. Log in via OAuth:\n\n```bash\ngrocer-cli login\n```\n\n3. Find and set your preferred store:\n\n```bash\ngrocer-cli locations 98101 --set\n```\n\n## Usage\n\n### Products\n\n```bash\ngrocer-cli search \"organic milk\"\ngrocer-cli search \"chicken breast\" --brand \"Simple Truth\" --limit 5\ngrocer-cli product <productId>\n```\n\n### Recipes\n\nCreate and manage local recipes, then add all ingredients to your cart in one step.\n\n```bash\ngrocer-cli recipe create \"Taco Tuesday\" --description \"Weekly taco night\"\ngrocer-cli recipe list\ngrocer-cli recipe show 1\ngrocer-cli recipe add-item 1 \"Ground Beef\" --product-id 0001234567890 --quantity 2\ngrocer-cli recipe remove-item 3\ngrocer-cli recipe delete 1\n```\n\n### Recipe Feeds\n\nSubscribe to RSS feeds from your favorite food blogs. The CLI extracts ingredients automatically so you can search and shop for them.\n\n```bash\n# Subscribe to a recipe blog\ngrocer-cli feeds add https://www.budgetbytes.com/feed/\n\n# List your subscriptions\ngrocer-cli feeds list\n\n# Fetch new recipes from all feeds\ngrocer-cli feeds fetch\n\n# Browse recipes and view ingredients\ngrocer-cli feeds recipes\ngrocer-cli feeds recipes --feed 1 --limit 10\ngrocer-cli feeds show 42\n\n# Unsubscribe\ngrocer-cli feeds remove 1\n```\n\nExample workflow — discover a recipe and shop for it:\n\n```bash\ngrocer-cli feeds fetch                          # Grab latest recipes\ngrocer-cli feeds show 42                        # View ingredients\ngrocer-cli search \"chicken breast\"              # Find it at your store\ngrocer-cli cart add 0001234567890 --quantity 2   # Add to cart\ngrocer-cli export feed-recipe 42                # Or send to Instacart for delivery\n```\n\n### Cart\n\n```bash\ngrocer-cli cart add <upc> --quantity 2\ngrocer-cli cart add-recipe 1\n```\n\n### Purchases\n\nTrack what you've bought by importing receipt emails or logging manually.\n\n```bash\n# Import from a receipt email\ngrocer-cli purchases import receipt.eml\n\n# Log a purchase manually\ngrocer-cli purchases add \"Almond Milk\" --price 3.99 --quantity 2\n\n# View history\ngrocer-cli purchases list\ngrocer-cli purchases show 1\n\n# Spending stats — top items, monthly trends, total savings\ngrocer-cli purchases stats\n\n# Clean up\ngrocer-cli purchases delete 1\n```\n\nPair with a Gmail skill like [idanbeck/claude-skills](https://github.com/idanbeck/claude-skills) to auto-fetch receipt emails from your inbox.\n\n### Budget\n\nSet a weekly or biweekly grocery budget and track spending against it. The budget tracks automatically from your imported/logged purchases.\n\n```bash\n# Set a $150/week budget\ngrocer-cli budget set 150 --period weekly\n\n# Or biweekly\ngrocer-cli budget set 300 --period biweekly\n\n# Check how you're doing this period\ngrocer-cli budget status\n\n# View past periods\ngrocer-cli budget history\n```\n\nExample `budget status` output:\n\n```\nBudget Status\n\n  Period:    weekly (2026-03-21 → 2026-03-27)\n  Budget:    $150.00\n  Spent:     $107.80 (2 trips)\n  Remaining: $42.20\n\n  [██████████████████████░░░░░░░░] 72%\n\n  6 days left — ~$7.03/day remaining\n\n  Spending trend:  ▅█▇▆▃▅█▅\n                   01-25  03-21\n```\n\n`budget history` shows mini spark bars per period with a trend sparkline at the bottom.\n\n### Instacart Export\n\nExport recipes and shopping lists to [Instacart](https://www.instacart.com) for delivery. Works with any store Instacart supports (Fred Meyer, Kroger, etc.).\n\n```bash\n# Set up your Instacart API key (get one at developer portal)\ngrocer-cli config --instacart-key <your-key>\n\n# Export a local recipe — generates a shoppable Instacart link\ngrocer-cli export recipe 1\n\n# Export a feed recipe\ngrocer-cli export feed-recipe 42\n\n# Export a quick list of items\ngrocer-cli export list \"milk\" \"eggs\" \"bread\" \"chicken breast\"\n```\n\nThe generated link opens Instacart where you pick your store (e.g. Fred Meyer), review matched products, and check out for delivery.\n\n### Pantry / Best-By Tracking\n\nTrack what's in your fridge and when it expires. Items get estimated \"best by\" dates based on USDA/FDA shelf life guidelines (~120 common grocery items).\n\n```bash\n# Auto-track from a purchase — estimates best-by for each item\ngrocer-cli pantry track 1\n\n# Or add manually\ngrocer-cli pantry add \"milk\"\ngrocer-cli pantry add \"salmon\" --best-by 2026-03-23\n\n# Check what's expiring\ngrocer-cli pantry status\ngrocer-cli pantry expiring --days 3\n\n# Look up shelf life for any item\ngrocer-cli pantry shelf-life \"chicken breast\"\n#   chicken breast: ~2 days\n\n# Manage items\ngrocer-cli pantry consumed 3     # Mark as used\ngrocer-cli pantry extend 2 2026-03-28  # Adjust date\ngrocer-cli pantry toss 5         # Remove\ngrocer-cli pantry list            # Full list\n```\n\nExample `pantry status`:\n\n```\nPantry Status\n\n  3 fresh   2 expiring soon   0 expired\n  5 items tracked\n\n  Expiring soon:\n    Chicken Breast — best by 2026-03-21 (today)  [#2]\n    Bananas — best by 2026-03-24 (in 3d)  [#3]\n\n  Fresh:\n    2% Milk 1 Gal — best by 2026-03-26 (5d)  [#1]\n    Canned Black Beans — best by 2026-03-26 (5d)  [#4]\n```\n\n### Auth & Config\n\n```bash\ngrocer-cli login          # OAuth2 browser flow\ngrocer-cli logout         # Clear stored tokens\ngrocer-cli status         # Check auth status\ngrocer-cli config         # View configuration\n```\n\n**Session lifetime:** Access tokens expire after ~30 minutes, but the CLI automatically refreshes them using a long-lived refresh token whenever you run a command. You don't need to log in again unless the refresh token itself expires from extended inactivity (typically weeks without any CLI usage).\n\n## Adding a New Chain\n\nTo add support for a new grocery chain, create a provider in `src/providers/<chain>/` with:\n\n- `auth.js` — OAuth/authentication logic\n- `api.js` — API client (searchProducts, getProduct, searchLocations, addToCart, getProfile)\n- `receipt.js` — Receipt email parser (parseReceipt)\n- `index.js` — Provider definition with metadata and config fields\n\nThen register it in `src/index.js`:\n\n```javascript\nimport myChainProvider from \"./providers/mychain/index.js\";\nregisterProvider(\"mychain\", myChainProvider);\n```\n\n## Skills\n\nStandalone scripts in the `skills/` folder for quick workflows.\n\n## Data Storage\n\nAll data is stored locally in `~/.grocer-cli/`:\n\n- `config.json` — Chain selection, API credentials, and preferences\n- `grocer.db` — SQLite database for recipes, purchases, feeds, budget, and OAuth tokens\n","readmeFilename":"README.md"}