3.1 KiB
3.1 KiB
name, description, author, email, last_updated
| name | description | author | last_updated | |
|---|---|---|---|---|
| ourgroceries | Manage OurGroceries shopping lists. Use when Steve wants to add, view, cross off, or remove items from his OurGroceries shopping lists. Also use when Steve mentions groceries, shopping list, or needs to track items to buy. | Steve Cliff | me@stevecliff.com | 2026-04-01 14:46:50 |
OurGroceries Skill
Manage Steve's OurGroceries shopping lists via the ourgroceries Python package.
Setup
Credentials stored in: ~/.config/ourgroceries/credentials.conf (mode 600)
File format:
username=steve@myfamilyemail.co.uk
password=A98538
Core Operations
List All Lists
python3 -c "
import asyncio
from ourgroceries import OurGroceries
async def main():
og = OurGroceries('USERNAME', 'PASSWORD')
await og.login()
lists = await og.get_my_lists()
for l in lists.get('lists', []):
print(f\"{l['id']} - {l['name']} ({l['listType']})\")
asyncio.run(main())
"
Get List Items
python3 -c "
import asyncio
from ourgroceries import OurGroceries
async def main():
og = OurGroceries('USERNAME', 'PASSWORD')
await og.login()
items = await og.get_list_items('LIST_ID')
for item in items.get('list', {}).get('items', []):
crossed = '✓' if item.get('crossedOff') else ' '
print(f\"[{crossed}] {item.get('value')} (id: {item.get('id')})\")
asyncio.run(main())
"
Add Item to List
python3 -c "
import asyncio
from ourgroceries import OurGroceries
async def main():
og = OurGroceries('USERNAME', 'PASSWORD')
await og.login()
result = await og.add_item_to_list('LIST_ID', 'Item name', category='Produce')
print(result)
asyncio.run(main())
"
Toggle Item Crossed Off
python3 -c "
import asyncio
from ourgroceries import OurGroceries
async def main():
og = OurGroceries('USERNAME', 'PASSWORD')
await og.login()
# cross_off=True marks as done, cross_off=False unmarks
result = await og.toggle_item_crossed_off('LIST_ID', 'ITEM_ID', cross_off=True)
print(result)
asyncio.run(main())
"
Remove Item from List
python3 -c "
import asyncio
from ourgroceries import OurGroceries
async def main():
og = OurGroceries('USERNAME', 'PASSWORD')
await og.login()
result = await og.remove_item_from_list('LIST_ID', 'ITEM_ID')
print(result)
asyncio.run(main())
"
Workflows
"Add X to my shopping list"
- Get list ID from
get_my_lists()(look for list named "Shopping" or "Main") - Add item with
add_item_to_list(list_id, item_name)
"What's on my shopping list?"
- Get list ID
- Fetch items with
get_list_items(list_id) - Display with checkboxes for crossed-off status
"Clear crossed-off items"
- Use
delete_all_crossed_off_from_list(list_id)
Steve's Lists
Stored in TOOLS.md:
- Shopping List:
OIqZ7A85kWCITf9wspo_ae - July 2026 Holiday:
Cfl-96OqEU2IObGAUd7S0f
Notes
add_items_to_list(list_id, items)accepts a list of tuples(value, category, note)for bulk adding- Use
auto_category=Trueto let OurGroceries guess the category - List IDs are strings like
abc123xyz