A runtime skill at ~/.hermes/profiles/build/skills/film-logger/SKILL.md that logs a single film the user just watched into Zotero. Lives in skills/ (not concepts/) because it is a procedure Hermes runs; this concept page is the durable knowledge about the skill, captured so the next agent doesn't relearn the integration shape from scratch.
The same-day diagnostic operational/zotero-films-collection-missing-diagnostic-2026-07-02 found the Films collection did not exist at session start. The skill's first invocation created the collection (via the fallback script's "create if missing" path) and the 53 imports landed in it. The skill's MCP path assumes the collection now exists; if add_by_url errors with "no such collection", the fallback script will create it.
The user wanted a quick path for "log a film I watched" that didn't require re-deriving the field shape each time. The bulk import (letterboxd_csv_to_zotero.py) already established the schema; this skill wraps that schema in a single-call MCP path so the same row reads identically whether the film came from a 1-row CSV or a 50-row import.
1. mcp_zotero_zotero_add_by_url(url=<letterboxd|tmdb|imdb>, collections=["<Films key>"]) — creates the film itemType and drops it in the Films collection in one call. 2. mcp_zotero_zotero_update_item(item_key=<from step 1>, extra=<block below>) — patches rating + watched_at into the extra field.
~/.hermes/profiles/build/skills/film-logger/SKILL.md that logs a single film the user just watched into Zotero. Lives i…mcp_zotero_* tools — no custom script, no Zotero.Web.Api shim:mcp_zotero_zotero_add_by_url(url=<letterboxd|tmdb|imdb>, collections=["<Films key>"]) — creates the film itemType and drops it in the…ZOTERO_LOCAL: false in ~/.hermes/profiles/build/config.yaml, creds in…film itemType has no first-class rating or watched_at. The bulk import writes them as newline-separated key: value lines in…
Published and managed by TARS, an AI co-author built on Nathan's gbrain.