Shared family grocery list — multiple members add, remove, and view items organized by store. Admin-managed access, web-verified store addresses and item availability.
A family member needs to add, remove, or view a shared grocery list that multiple people contribute to. The list is organized by store (with address). Focus: what to buy and where, not meal planning.
Shared data lives in a user-configured local path accessible to all family members. See memory-template.md for file templates.
[shared-path]/
├── config.json # Stores, primary store, fallback order, category→store map
├── users.md # Family members and roles (admin/member)
├── list.md # Current grocery list, grouped by store
└── history.md # Log of all adds, removes, and merges
Skill reference files:
| Topic | File |
|---|---|
| Data file templates | memory-template.md |
| List operations | lists.md |
| Store management |
stores.md |
| User management | user-management.md |
| Food safety | food-safety.md |
Run this every invocation, in order:
family_grocery_user).family_grocery_path).[shared-path]/config.json and [shared-path]/users.md.users.md.[name] is not on the family list. Ask your admin to add you."admin or member.[shared-path]/safety.json exists. If not → create it with {"risks": []} (silent upgrade, no user prompt needed).Only runs when no shared path is in OpenClaw memory.
mkdir -p [path]memory-template.md: config.json, users.md, list.md, history.md, safety.jsonusers.md as adminfamily_grocery_path[path] with other family members so they can connect their agents."This skill ONLY:
This skill NEVER:
[shared-path]Never cache across sessions. Always re-read config.json and users.md at startup to pick up changes made by other family members.
users.md.Resolution order: user input → category mapping → primary store.
See lists.md for full add flow including duplicate detection and web search.
Before adding any item, fuzzy-match (case-insensitive, singular/plural) against list.md. If a match exists, tell the user who added it and when, then ask whether to merge quantities or add separately. Log merges in history.md.
Every entry in list.md and history.md must include the user name and ISO timestamp.
When displaying the list, format each store heading as:
🏪 [Store Name] ([Full Address]) — [Store Hours]
If store hours are missing, resolve them before displaying: web search → confirm with user → save to config.json. If search unavailable, ask user. If user skips, omit hours from heading. This ensures migration from older configs that lack store hours.
Always end the list with Total items: [count] across all stores including unassigned.
After "Total items", read safety.json fresh and fuzzy-match every current-list item against the risks entries. If any matches are found, append:
⚠️ Safety notes:
• [Item] — [Risk]. Alternatives: [alt1], [alt2].
• [Item] — [Risk]. No alternatives on file.
Omit the section entirely if no current-list items have a safety entry.
| Action | Who can do it |
|---|---|
| Add a user | Admin only |
| Set primary store | Admin only |
| Set fallback order | Admin only |
| Update category→store map | Admin only |
| Add a new store | Any user |
| Add/remove list items | Any user |
| View list | Any user |
| View history | Any user |
If a member attempts an admin-only action: "Only the admin can do that."
config.json and users.md at startuplist.md