GoList
Manage GoList grocery lists via CLI: create, join, switch, share lists, and add or remove items with automatic device and item ID handling.
Description
GoList Shared-List Manager (OpenClaw Skill)
Purpose
Enable OpenClaw to manage GoList through a simple, beginner-friendly CLI wrapper around the backend API.
GoList is a simplistic app for creating and sharing grocery / shopping lists. This skill is designed to make first-time usage feel fast and approachable: create a list, add items, share with others, and switch between saved lists with minimal setup.
This skill supports:
- creating new lists,
- joining shared lists via share token,
- saving known lists (name + id) and switching between them,
- generating share tokens for users,
- reading lists,
- upserting items,
- soft-deleting items.
Hard constraints
- API base URL is fixed to
https://go-list.app/apiand must never be overridden. - OpenClaw must generate its own random device UUID and persist it for reuse.
- Every request must include the
X-Device-Idheader. - For item writes, OpenClaw must only set:
name(required),deleted(optional, defaults tofalse),quantityOrUnit(optional).
- OpenClaw must generate all item UUIDs and timestamps in the Python CLI (never require the agent to provide them).
- Immediately after creating a new list, OpenClaw must always generate a share token and send the share URL to the user without being asked.
- When talking to the user, OpenClaw must never refer to lists by ID; always use list names (use the stored name↔id mapping internally).
- For item upserts, if the user does not explicitly provide a quantity/unit, OpenClaw must omit
quantityOrUnit.
Python CLI tool
Use apps/openclaw/golist_cli.py as the operational API wrapper for this skill.
CLI guarantees
- Fixed API base URL:
https://go-list.app/api. - Generates and persists device id when missing.
- Generates list IDs and item IDs when creating entities.
- Generates item
updatedAttimestamps on write operations. - Automatically sends
X-Device-Idon every request. - Persists known lists with friendly names and IDs, and tracks an active list.
CLI state and environment
Optional environment:
GOLIST_DEVICE_ID(override persisted device id)OPENCLAW_STATE_FILE(custom path for persisted JSON state)GOLIST_SHARE_TOKEN(optional token source forbootstrap --share-token)
Persisted state file (default):
~/.openclaw_golist_state.jsonwith:device_idactive_list_idknown_lists[]containingid+name
Core flows
1) Create a new list
python3 apps/openclaw/golist_cli.py create-list "Weekend groceries"
python3 apps/openclaw/golist_cli.py share
Creates a list with a generated UUID, stores it in known lists, sets it as active, then immediately creates a share token and returns the share URL to the user.
2) Share a list with a user
python3 apps/openclaw/golist_cli.py share
Creates a share token for the active list and returns both token + share URL.
3) Join an existing list via share token
python3 apps/openclaw/golist_cli.py join <share-token-uuid>
Redeems the token, fetches the real list name from the API, stores that name+id mapping, and sets it active.
4) Switch/access saved lists
python3 apps/openclaw/golist_cli.py lists
python3 apps/openclaw/golist_cli.py use-list "Weekend groceries"
python3 apps/openclaw/golist_cli.py show
5) Item writes (restricted fields)
python3 apps/openclaw/golist_cli.py upsert "milk" [--quantity "2 L"] [--deleted]
python3 apps/openclaw/golist_cli.py delete "milk"
Intent mapping for OpenClaw
- “create a new list called X” →
create-list "X" - After
create-list, always runshareand send the URL/token to the user. - “share this list with me” →
share - “join this token” →
join <token> - “show my lists” →
lists - “switch to list X” →
use-list "X" - “show current list” →
show - “add X (qty)” →
upsert "X" [--quantity "..."] - “remove X” →
delete "X"
Safety behavior
- If device id is missing, generate and persist it before any API call.
- If no active list is set, require
create-listorjoinfirst. - If token redemption fails, return a clear auth/share error.
- In user-facing responses, refer to lists by name only (never by raw ID).
- Do not invent item quantities; only send
--quantitywhen the user asked for one. - Never send item metadata fields outside
name,deleted, and optionalquantityOrUnit.
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!