| name | kronan-cli |
| description | Comprehensive CLI for Krónan.is grocery store using the official Public API. Search products, browse categories, manage shopping cart and lists, view orders, track purchase statistics, and manage shopping notes. Full CRUD operations for all API features. Designed for both humans and AI agents.
|
| version | 0.3.0 |
| requires | {"binaries":["gh","bun"],"paths":["~/.kronan/token"]} |
| metadata | {"openclaw":{"homepage":"https://github.com/arnif/kronan-cli","emoji":"🛒"}} |
kronan-cli
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.
Prerequisites
Install
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:
gh repo clone arnif/kronan-cli && cd kronan-cli
bun install && bun build --compile src/index.ts --outfile kronan
mv kronan ~/.local/bin/
Security and privacy
- Install script:
install.sh executes on your machine and downloads a binary. Audit the repository and the script before running.
- Token storage: Access tokens are stored at
~/.kronan/token. These are credentials for the Krónan Public API. Ensure the file is only readable by your user (chmod 600 ~/.kronan/token).
- PII:
kronan me outputs your identity information (name and type - user or customer group). Be careful when sharing this output.
- API Access: Tokens are created in your Krónan account settings and can be revoked at any time at https://kronan.is/adgangur/adgangslyklar
Authentication
First, create an access token:
- Go to https://kronan.is/adgangur/adgangslyklar
- Log in with Auðkenni (Icelandic e-ID)
- Create a new access token
Then save it with the CLI:
kronan token <your-access-token>
The token will be validated and saved locally.
kronan logout
kronan status
Commands
Search products
kronan search "mjolk"
kronan search "epli" --limit 5
kronan search "braud" --json
Product details
kronan product <sku>
kronan product 02500188 --json
Browse by category
kronan categories
kronan category 01-01-02-epli
Cart management
kronan cart
kronan cart add <sku> [quantity]
kronan cart clear
Order history and modifications
kronan orders
kronan orders --json
kronan order <token>
kronan order delete-lines <token> <lineId1> [lineId2...]
kronan order lower-quantity <token> <lineIds...> --quantity N
kronan order toggle-substitution <token> <lineIds...>
Product lists (full CRUD)
kronan lists
kronan lists create <name> [--description "..."]
kronan lists view <token>
kronan lists delete <token> [--force]
kronan lists add <list-token> <sku> [qty]
kronan lists remove <list-token> <sku>
kronan lists clear <token> [--force]
Shopping notes (Skundalisti)
kronan notes
kronan notes add [--text "..."] [--sku SKU] [--quantity N]
kronan notes update <line-token> [--text "..."] [--quantity N]
kronan notes remove <line-token>
kronan notes toggle <line-token>
kronan notes clear [--force]
kronan notes archived
Purchase statistics
kronan stats [--limit N] [--offset N]
kronan stats --include-ignored
kronan stats ignore <id>
kronan stats unignore <id>
User identity
kronan me
kronan me --json
AI Agent Usage
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 clear
order delete-lines, order lower-quantity, order toggle-substitution
lists create, lists delete, lists add, lists remove, lists clear
notes add, notes update, notes remove, notes toggle, notes clear
stats ignore, stats unignore
Read-only commands are safe to run without confirmation:
search, product, categories, category
orders, order (view)
cart (view)
lists (view)
notes (view), notes archived
stats (view)
me, status
Example agent workflows
Build a weekly cart from frequently purchased items:
kronan stats --limit 50 --json
kronan cart add 100224198 6
kronan cart add 02200946 1
kronan cart --json
Create a shopping list for a recipe:
kronan lists create "Pizza Night" --description "Ingredients for homemade pizza"
kronan search "mozzarella" --json
kronan lists add <list-token> 100246180 2
kronan search "pizzasósa" --json
kronan lists add <list-token> 100221958 1
kronan lists view <list-token>
Manage shopping with notes (Skundalisti):
kronan notes add --text "Mjólk"
kronan notes add --sku 100224198 --quantity 2
kronan notes toggle <line-token>
kronan notes
kronan notes archived
Analyze and optimize purchases:
kronan stats --json
kronan stats ignore <id>
Flags
| Flag | Description |
|---|
--json | Structured JSON output (for AI agents) |
--page <n> | Page number (search, category) |
--limit <n> | Results per page |
--offset <n> | Offset for pagination |
--include-ignored | Include ignored products in stats |
--force | Skip confirmation for destructive operations |
--text "..." | Text for shopping note item |
--sku SKU | Product SKU |
--quantity N | Quantity (default: 1) |
--description "..." | Description for product list |
API Reference
The CLI uses the official Krónan Public API at https://api.kronan.is/api/v1/.
API Documentation:
Key endpoints:
| Endpoint | Method | Auth | Description |
|---|
/products/search/ | POST | Yes | Product search |
/products/{sku}/ | GET | Yes | Product detail |
/categories/ | GET | Yes | Category tree |
/categories/{slug}/products/ | GET | Yes | Category products |
/checkout/ | GET | Yes | View checkout/cart |
/checkout/lines/ | POST | Yes | Add/replace checkout lines |
/orders/ | GET | Yes | Order history |
/orders/{token}/ | GET | Yes | Order details |
/orders/{token}/delete-lines/ | POST | Yes | Delete order lines |
/orders/{token}/lower-quantity-lines/ | POST | Yes | Lower line quantity |
/orders/{token}/lines-toggle-substitution/ | POST | Yes | Toggle substitution |
/me/ | GET | Yes | Current identity |
/product-lists/ | GET/POST | Yes | List/create product lists |
/product-lists/{token}/ | GET/PATCH/DELETE | Yes | Product list CRUD |
/product-lists/{token}/update-item/ | POST | Yes | Add/update list item |
/shopping-notes/ | GET | Yes | View shopping note |
/shopping-notes/add-line/ | POST | Yes | Add note line |
/shopping-notes/change-line/ | PATCH | Yes | Update note line |
/shopping-notes/delete-line/ | DELETE | Yes | Delete note line |
/shopping-notes/toggle-complete-on-line/ | PATCH | Yes | Toggle completion |
/product-purchase-stats/ | GET | Yes | Purchase statistics |
/product-purchase-stats/{id}/set-ignored/ | PATCH | Yes | Ignore/unignore product |
Auth header format: Authorization: AccessToken {token}
Migration from v0.1.x
If you were using the previous version with Cognito authentication:
- Remove old tokens:
rm ~/.kronan/tokens.json
- Get a new access token from https://kronan.is/adgangur/adgangslyklar
- Run
kronan token <new-token>
- Update any scripts using
kronan login to use kronan token instead
Note: Order IDs in the new API are tokens (UUIDs), not numeric IDs.
Version History
- v0.3.0 - Added comprehensive commands: categories, order modifications, product lists CRUD, shopping notes, purchase statistics
- v0.2.0 - Migrated to Krónan Public API with AccessToken authentication
- v0.1.0 - Initial release with Cognito authentication