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.3.0.tar.gz (360.4 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.3.0-py3-none-any.whl (45.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for kroget-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2934571e2f7365eebca26fc85e67ef12871d37d6ad954c62ebe65eee7d5fa3bc
MD5 522c624c0c5a9a37724c3575aeedb155
BLAKE2b-256 f269e63ab91475c55c33e2178fff0fb92ea153d2cfd3bf6aa1e1b2051228e949

See more details on using hashes here.

File details

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

File metadata

  • Download URL: kroget-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 45.3 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 929401da702b67fad1d17a569a063fbc55ae00871cb1db5ca46d5cb8d99b2b27
MD5 f27e19700dbf53ff1a6d3f5fc58d9219
BLAKE2b-256 4dcba5f6b7d8fb63bd09936e503fc49a990e9b0ebd9564c1af1097a21c55598a

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