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
Every step below is mandatory. Execute them in order. Do not skip, reorder, or abbreviate any step.
Run silently. Each inner skill handles its own surfacing. The wrapper adds no surfaces beyond cadence-cursor management.
Fire-time precheck (scripts/precheck-entertainment-sync.py) gates wake-ups by the weekly cadence cap. See references/cadence-rationale.md.
Run the in-container fetch script (routes through the OneCLI gateway, writes /workspace/group/trakt-history.json on success):
python3 /home/node/.claude/skills/tessl__trakt-watch-history/scripts/trakt-watch-history.pySilent on success. Report on error (stdout {"error": ...} / non-zero exit) or total_shows: 0 (if sync hasn't run yet, skip silently).
If the script fails, surface its stdout/stderr verbatim via mcp__nanoclaw__send_message, then emit <internal>entertainment-sync exited step-1: fetch-fail</internal> as your final turn text and stop. Do NOT advance the cursor. Otherwise proceed to Step 2.
Invoke Skill(skill: "tessl__check-watchlist"). Inner skill notifies on released shows; silent otherwise.
If invocation fails, surface verbatim via mcp__nanoclaw__send_message, then emit <internal>entertainment-sync exited step-2: inner-skill-fail</internal> as your final turn text and stop. Do NOT advance the cursor. Otherwise proceed to Step 3.
Invoke Skill(skill: "tessl__recommend-shows"). Uses trakt-history.json from Step 1. Sends on good matches; silent otherwise.
If invocation fails, surface via mcp__nanoclaw__send_message, then emit <internal>entertainment-sync exited step-3: inner-skill-fail</internal> as your final turn text and stop. Otherwise proceed to Step 4.
Invoke Skill(skill: "tessl__audible-backup"). Inner skill reports new books or errors; silent otherwise.
If invocation fails, surface via mcp__nanoclaw__send_message, then emit <internal>entertainment-sync exited step-4: inner-skill-fail</internal> as your final turn text and stop. Otherwise proceed to Step 5.
Invoke Skill(skill: "tessl__recommend-books"). Sends on good matches; silent otherwise.
If invocation fails, surface via mcp__nanoclaw__send_message, then emit <internal>entertainment-sync exited step-5: inner-skill-fail</internal> as your final turn text and stop. Otherwise proceed to Step 6.
Reachable only if Steps 1-5 all succeeded. Run:
python3 /home/node/.claude/skills/tessl__entertainment-sync/scripts/stamp-cursor.pyAtomic-writes /workspace/group/state/entertainment-sync-cursor.json with {"schema_version": 1, "last_run": "<now UTC ISO Z>"}. Stdout: {"status": "stamped", "last_run": "<iso>", "cursor_path": "<path>"}. Proceed to Step 7.
Emit exactly one <internal> line so the post-fire silent-success watchdog can read task_run_logs.result directly. Either <internal>entertainment-sync ran <utc_date>: clean</internal> (no inner skill surfaced) or <internal>entertainment-sync ran <utc_date>: surfaced</internal> (at least one did). <utc_date> is today's UTC date in YYYY-MM-DD. The wrapper adds no user-facing output. Finish here.