CLI tool for shopping at Krónan.is, Iceland's grocery store chain. Uses the official Krónan Public API. Designed for both humans and AI agents.
gh) — required for the install commandbash
gh repo clone arnif/kronan-cli /tmp/kronan-cli && bash /tmp/kronan-cli/install.sh
What this does: clones the repo to /tmp/kronan-cli, then install.sh downloads a pre-built binary from the latest GitHub release and places it at ~/.local/bin/kronan (override with INSTALL_DIR).
To build from source instead:
bash
gh repo clone arnif/kronan-cli && cd kronan-cli
bun install && bun build --compile src/index.ts --outfile kronan
mv kronan ~/.local/bin/
install.sh executes on your machine and downloads a binary. Audit the repository and the script before running.~/.kronan/token. These are credentials for the Krónan Public API. Ensure the file is only readable by your user ( chmod 600 ~/.kronan/token).kronan me outputs your identity information (name and type - user or customer group). Be careful when sharing this output.First, create an access token:
Then save it with the CLI:
bash
kronan token <your-access-token>
The token will be validated and saved locally.
bash
kronan logout # Clear stored token
kronan status # Check authentication status
bash
kronan search "mjolk"
kronan search "epli" --limit 5
kronan search "braud" --json
bash
kronan product <sku>
kronan product 02500188 --json
bash
kronan categories # List all categories
kronan category 01-01-02-epli # Browse products in category
bash
kronan cart # View cart
kronan cart add <sku> [quantity] # Add item to cart
kronan cart clear # Clear all items from cart
bash
kronan orders # Recent orders
kronan orders --json # JSON output for parsing
kronan order <token> # Specific order details (use order token, not ID)
# Modify orders (before fulfillment)
kronan order delete-lines <token> <lineId1> [lineId2...]
kronan order lower-quantity <token> <lineIds...> --quantity N
kronan order toggle-substitution <token> <lineIds...>
bash
kronan lists # List all product lists
kronan lists create <name> [--description "..."] # Create new list
kronan lists view <token> # View list details
kronan lists delete <token> [--force] # Delete a list
kronan lists add <list-token> <sku> [qty] # Add item to list
kronan lists remove <list-token> <sku> # Remove item from list
kronan lists clear <token> [--force] # Clear all items
bash
kronan notes # View shopping note
kronan notes add [--text "..."] [--sku SKU] [--quantity N]
kronan notes update <line-token> [--text "..."] [--quantity N]
kronan notes remove <line-token> # Remove item
kronan notes toggle <line-token> # Mark complete/incomplete
kronan notes clear [--force] # Clear all items
kronan notes archived # View completed items
bash
kronan stats [--limit N] [--offset N] # View purchase history
kronan stats --include-ignored # Include hidden products
kronan stats ignore <id> # Hide product from stats
kronan stats unignore <id> # Unhide product
bash
kronan me # Show current identity (user or customer group)
kronan me --json
All commands support --json for structured output. This makes kronan-cli suitable as a tool for AI agents managing grocery shopping.
Important: Commands that change state can modify the user's real data. Agents must ask for explicit user confirmation before running any state-changing command.
State-changing commands:
cart add, cart clearorder delete-lines, order lower-quantity, order toggle-substitutionlists create, lists delete, lists add, lists remove, lists clearnotes add, notes update, notes remove, notes toggle, notes clearstats ignore, stats unignoreRead-only commands are safe to run without confirmation:
search, product, categories, categoryorders, order (view)cart (view)lists (view)notes (view), notes archivedstats (view)me, statusBuild a weekly cart from frequently purchased items:
bash
# 1. Get purchase statistics to find frequently bought items
kronan stats --limit 50 --json
# 2. Add top items to cart at their typical quantities
kronan cart add 100224198 6 # Nýmjólk x6
kronan cart add 02200946 1 # Heimilisbrauð
# 3. Review the cart
kronan cart --json
Create a shopping list for a recipe:
bash
# 1. Create a new list
kronan lists create "Pizza Night" --description "Ingredients for homemade pizza"
# 2. Search for products and add to list
kronan search "mozzarella" --json
kronan lists add <list-token> 100246180 2
kronan search "pizzasósa" --json
kronan lists add <list-token> 100221958 1
# 3. View the completed list
kronan lists view <list-token>
Manage shopping with notes (Skundalisti):
bash
# 1. Add items to shopping note
kronan notes add --text "Mjólk"
kronan notes add --sku 100224198 --quantity 2
# 2. Mark items as you shop
kronan notes toggle <line-token>
# 3. View remaining items
kronan notes
# 4. View completed items
kronan notes archived
Analyze and optimize purchases:
bash
# View purchase frequency for all products
kronan stats --json
# Hide irrelevant products from stats
kronan stats ignore <id>
FlagDescription--jsonStructured JSON output (for AI agents)--page <n>Page number (search, category)--limit <n>Results per page--offset <n>Offset for pagination--include-ignoredInclude ignored products in stats--forceSkip confirmation for destructive operations--text "..."Text for shopping note item--sku SKUProduct SKU--quantity NQuantity (default: 1)--description "..."Description for product list
The CLI uses the official Krónan Public API at https://api.kronan.is/api/v1/.
API Documentation:
Key endpoints:
EndpointMethodAuthDescription/products/search/POSTYesProduct search/products/{sku}/GETYesProduct detail/categories/GETYesCategory tree/categories/{slug}/products/GETYesCategory products/checkout/GETYesView checkout/cart/checkout/lines/POSTYesAdd/replace checkout lines/orders/GETYesOrder history/orders/{token}/GETYesOrder details/orders/{token}/delete-lines/POSTYesDelete order lines/orders/{token}/lower-quantity-lines/POSTYesLower line quantity/orders/{token}/lines-toggle-substitution/POSTYesToggle substitution/me/GETYesCurrent identity/product-lists/GET/POSTYesList/create product lists/product-lists/{token}/GET/PATCH/DELETEYesProduct list CRUD/product-lists/{token}/update-item/POSTYesAdd/update list item/shopping-notes/GETYesView shopping note/shopping-notes/add-line/POSTYesAdd note line/shopping-notes/change-line/PATCHYesUpdate note line/shopping-notes/delete-line/DELETEYesDelete note line/shopping-notes/toggle-complete-on-line/PATCHYesToggle completion/product-purchase-stats/GETYesPurchase statistics/product-purchase-stats/{id}/set-ignored/PATCHYesIgnore/unignore product
Auth header format: Authorization: AccessToken {token}
If you were using the previous version with Cognito authentication:
rm ~/.kronan/tokens.jsonkronan token <new-token>kronan login to use kronan token insteadNote: Order IDs in the new API are tokens (UUIDs), not numeric IDs.