rpi5/hermes/skills/courses/SKILL.md
Read and update the shared shopping list ("Liste de courses" / "Courses") in AFFiNE's Burgie Land workspace. Use when the user wants to see, add, check off (mark as bought), un-check, or remove shopping-list items.
npx skillsauth add nsimonfr/nic-os coursesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Read and edit the household shopping list stored in AFFiNE. The list is the
doc titled "Courses" inside the Burgie Land workspace (shared space).
The script talks to the local affine-mcp server (already running on
127.0.0.1:7021 and wired into picoclaw), so there is no token to set up — it
reads the world-readable MCP bearer from /run/agenix/affine-mcp-http-token
itself.
Picoclaw reads the script's stdout and relays it to the user; the script never sends Telegram messages on its own.
python3 {baseDir}/scripts/courses.py show
Sample stdout:
🛒 Liste de courses (Burgie Land)
À acheter :
• truc qui va dans la cuvette des toilettes
Déjà pris :
• Sac poubelles
• Oignons frits
| Command | Effect |
| --- | --- |
| show (default) | Print the list, split into À acheter (to buy) and Déjà pris (bought). |
| add <item> | Add an unchecked item. All words after add become the item text. |
| done <text> | Tick the first un-ticked item matching <text> (marks it bought). |
| undone <text> | Un-tick the first ticked item matching <text>. |
| remove <text> | Delete the first item matching <text>. |
| clear-done | Delete every ticked (bought) item. |
<text> matching is case-insensitive substring, so done oignon ticks
"Oignons frits". Each mutating command prints a one-line confirmation followed
by the refreshed list.
Examples:
python3 {baseDir}/scripts/courses.py add "lait demi-écrémé"
python3 {baseDir}/scripts/courses.py done oignons
python3 {baseDir}/scripts/courses.py remove "cuvette"
python3 {baseDir}/scripts/courses.py clear-done
0b8e6d06-c5e9-475f-a772-7c467e0c247e,
Courses doc = _ssS4PUSXQoAU8P8xL32q. These are the script defaults; override
with COURSES_WORKSPACE_ID / COURSES_DOC_ID for a different list. If the doc
is ever recreated, re-find its id with the affine-mcp get_doc_by_title tool
(query "Courses" in that workspace) and update COURSES_DOC_ID.read_doc + replace_doc_with_markdown; add uses
append_markdown (purely additive, safe against concurrent edits).urllib ... 401/403 — the MCP bearer changed; /run/agenix/affine-mcp-http-token
is regenerated on rebuild/secret rotation. Restart affine-mcp.service if stale.Connection refused — affine-mcp.service is down (systemctl status affine-mcp),
or AFFiNE itself (affine.service) is not up yet.COURSES_DOC_ID still resolves via the
affine-mcp read_doc tool.development
Log workouts, wishlist media, and query the self-hosted Ryot tracker via its GraphQL API with a Bearer token. Use when the user wants to record a gym session/workout, add a book/film/game/show to their wishlist, or look up what they've tracked in Ryot.
development
AI-optimized web search via Tavily API. Returns concise, relevant results for AI agents.
content-media
Summarize or extract text/transcripts from URLs, podcasts, and local files (great fallback for “transcribe this YouTube/video”).
tools
<!-- vendored via `npx skills add steipete/clawdis@himalaya` (commit 27e5d49); locally adapted for personal ProtonMail via the hydroxide bridge on rpi5 --> --- name: protonmail description: Read, search, and send the user's personal ProtonMail using the himalaya CLI against the local hydroxide bridge (IMAP :1143 / SMTP :1025). homepage: https://github.com/pimalaya/himalaya metadata: {"openclaw":{"emoji":"📧","os":["linux"],"requires":{"bins":["himalaya"]}}} --- # ProtonMail (himalaya + hydroxid