Skip to main content

Kroger shopping CLI

Project description

Kro-Get

Kro-Get is a terminal-first CLI/TUI for composing Kroger grocery carts from reusable lists and recurring staples. It helps you plan quickly, review clearly, and apply changes only when you say so.

Kro-Get TUI

It lets you:

  • keep grocery staples as reusable lists
  • search Kroger's catalog from the terminal
  • stage a proposal before anything changes
  • apply items to your cart with explicit confirmation
  • finish checkout in the browser by design

Kro-Get cannot place orders or charge you money. The most it can do is add items to your cart after you confirm.

Kro-Get TUI

Why Kro-Get exists

Re-adding the same groceries every week is tedious. Fully automated checkout is risky.

Kro-Get sits in the middle:

  • automation where it's safe
  • human confirmation where it matters

Everything is local-first, explicit, inspectable, and reversible.

Features

  • Terminal UI (TUI) for browsing, planning, and applying groceries
  • Reusable lists (Staples, Snacks, etc.)
  • Proposal workflow: add lists -> review -> apply
  • Search history for fast re-adds
  • Local state only (plain JSON, no telemetry)
  • Official Kroger API (no scraping)
  • Guardrails: dry-run by default, confirmation before cart mutation

Agent-friendly

Every CLI command supports --json output. That makes Kro-Get usable by CLI agents like Claude or Codex to search, plan, and propose carts on your behalf, while still keeping the final apply step explicit.

Install

Recommended (isolated, safe):

pipx install kroget

Alternative:

pip install kroget

Setup (2-3 minutes)

Kroger requires each user to register their own developer app credentials. Kro-Get does not ship shared secrets.

Step 1: Run setup

kroget setup

This will:

  • guide you through adding your credentials
  • open the Kroger developer portal
  • validate your config

Non-interactive (scripted) setup:

kroget setup \
  --client-id ... \
  --client-secret ... \
  --redirect-uri http://localhost:8400/callback \
  --location-id 01400441 \
  --no-open-portal \
  --no-run-login

Step 2: Log in

kroget auth login

This opens a browser once and stores a refresh token locally.

Verify

kroget doctor

Usage

Launch the TUI

kroget tui

Typical flow

  1. Search for items
  2. Save them to a list (Staples, Snacks, etc.)
  3. Add one or more lists to a proposal
  4. Review quantities and alternatives
  5. Apply -> items are added to your Kroger cart
  6. Checkout on the Kroger website

CLI examples

kroget products search milk --location-id <LOCATION_ID>
kroget lists list
kroget lists set-active Staples
kroget lists items list    # defaults to the active list
kroget lists items add Staples "Milk" --term "milk" --qty 1
kroget lists items propose Staples --location-id <LOCATION_ID> --out proposal.json
kroget proposal apply proposal.json --apply

Safety model

  • Kro-Get cannot checkout
  • Kro-Get cannot see your full cart
  • Kro-Get only adds items when you confirm
  • All state lives locally in ~/.kroget/
  • Tokens are stored with 0600 permissions

This is intentional.

Local data

Kro-Get stores plain JSON locally:

~/.kroget/
  config.json
  tokens.json
  lists.json
  sent_items.json

You can inspect, back up, or delete these at any time.

Requirements

  • Python 3.11+
  • A Kroger account
  • A free Kroger developer app registration

Non-goals (by design)

  • No checkout automation
  • No background scheduling
  • No telemetry or tracking
  • No cloud service dependency

This is a personal automation tool, not a SaaS.

Not affiliated

Kro-Get is not affiliated with Kroger. Use is subject to Kroger's API Terms of Service.

Developer quickstart

python -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
kroget doctor
kroget products search milk --location-id <LOCATION_ID>
kroget auth login
kroget cart add --location-id <LOCATION_ID> --product-id <UPC> --quantity 1 --apply

Releasing

Releases are tag-driven and follow Conventional Commits. Versions come from git tags via setuptools-scm.

Steps:

  1. Ensure commits follow Conventional Commits (e.g., fix: ..., feat: ...).
  2. Run cz bump to update CHANGELOG.md and create the tag.
  3. Push with git push --follow-tags, then git push.

Environment

Environment variables always override ~/.kroget/config.json. For local development, you can also create a .env in the repo root with:

KROGER_CLIENT_ID=...
KROGER_CLIENT_SECRET=...
KROGER_REDIRECT_URI=http://localhost:8400/callback
KROGER_BASE_URL=https://api.kroger.com

Curl debugging

Client credentials token:

curl -X POST 'https://api.kroger.com/v1/connect/oauth2/token' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic <base64(CLIENT_ID:CLIENT_SECRET)>' \
  -d 'grant_type=client_credentials&scope=product.compact'

Product search:

curl -X GET \
  'https://api.kroger.com/v1/products?filter.term=milk&filter.locationId=<LOCATION_ID>&filter.limit=10' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>'

Support

If Kro-Get saved you time or grocery brainpower, you can support my open-source work here ☕

Buy Me a Coffee

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kroget-0.2.3.tar.gz (359.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kroget-0.2.3-py3-none-any.whl (44.7 kB view details)

Uploaded Python 3

File details

Details for the file kroget-0.2.3.tar.gz.

File metadata

  • Download URL: kroget-0.2.3.tar.gz
  • Upload date:
  • Size: 359.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for kroget-0.2.3.tar.gz
Algorithm Hash digest
SHA256 6bd1a5b14fc06da8d1d2f6a1ec932d83f2f26cd09ee332bd12a615a3997048af
MD5 61e02b017555751c0eabf8c533832ce9
BLAKE2b-256 1058713506b74a79fecef64a70973f5ffaeddc1a85599711b5c5c1f5c934fcc4

See more details on using hashes here.

File details

Details for the file kroget-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: kroget-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 44.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.12

File hashes

Hashes for kroget-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5778ba1e60f096dade71dc64a29ce2a2b69f71b81039090c239180616a4b93fb
MD5 2f1e3dca9c5facfc27b7bf75240e2e21
BLAKE2b-256 da1217125f6f3f183b417cc1019379a6a572f724607ca3f1ab90796a412ab971

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page