Personal entertainment-media skills for NanoClaw: Trakt watch-history sync, TV-show and audiobook recommendations, watchlist release checks, YouTube channel-comment digests, and Audible backup — with a weekly cadence companion. NanoClaw per-chat overlay tile.
76
96%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Stateful artifact per jbaruch/coding-policy: stateful-artifacts. Owner skill: trakt-watch-history — only this skill changes the shape or migrates records.
/workspace/group/trakt-history.jsonschema_version: 1{
"schema_version": 1,
"shows": [
{
"title": "string",
"year": "int | null",
"trakt_id": "int | null",
"slug": "string | null",
"episodes_watched": "int (aggregate count)",
"last_watched": "ISO 8601 timestamp | null",
"rating": "int 1-10 | null (Baruch's own rating)"
}
],
"movies": [
{
"title": "string",
"year": "int | null",
"trakt_id": "int | null",
"slug": "string | null",
"last_watched": "ISO 8601 timestamp | null",
"rating": "int 1-10 | null (Baruch's own rating)"
}
],
"stats": { "total_shows": "int", "total_movies": "int", "rated": "int" },
"fetched_at": "ISO 8601 timestamp (UTC)"
}Field promises: shows and movies are always present (possibly empty arrays) and sorted by last_watched, most recent first. rating is null for unrated items. An {"error": "..."} object is a failed fetch, not a record — writers never persist it.
| Skill | Role | Promise |
|---|---|---|
trakt-watch-history (in-container fetch script) | writer + owner | The script atomic-writes every field above on every successful run, stamped with the current schema_version (destination TRAKT_HISTORY_OUT, default this path) |
entertainment-sync (Step 1) | writer trigger | Runs the same fetch script; never writes the file itself |
recommend-shows (Step 1 trigger, Steps 2–5 reader) | writer trigger + reader | Step 1 runs the same fetch script (never writes the file itself, never migrates). Reads shows[*].title, year, slug, episodes_watched, last_watched, rating and movies[*].title, year, rating for classification and taste signals; tolerates a missing file (no prior state) |
schema_version is a legacy pre-v1 record; its shape is identical to v1, and readers may treat it as v1. The next successful fetch rewrites it stamped.schema_version than the reader accepts means the reader is lagging: treat as no usable prior state (refresh via Step 1 of the consuming skill) and update the reader.SCHEMA_VERSION in scripts/trakt-watch-history.py and this document in the same change.