jellyfin: send the access token over exactly ONE channel per request (drop
the simultaneous X-Emby-Token header; the MediaBrowser Token= parameter is
the sole transport, legacy fallback remains documented as substitute-never-
stack and is request-capture tested); remove the dead no-op conditional in
JellyfinClient.__init__; make the login error-path test exception-safe with
patch.object; document the test-pinned dry-run plan keys and the actual
0/1/2 exit-code mapping in worked-recipes and SKILL.md.
peertube: replace the stale dry-run shape prose ('url'/'form') with the
test-pinned {dry_run, method, path, params} / form_fields keys; harden
cmd_me against a non-dict role (no AttributeError) with regression tests;
remove the dead client facade, the unused cmd_channels variable, and the
unused List/Tuple imports (ruff F401/F841 clean).
ghost: fold the 5 nested with-statements (ruff SIM117) in test_ghost.py
into single with-statements.
All three skills double-runner + proxy-trap green (25/56/37 tests);
validate-evals, paired smoke, quality validator, core gates, and catalog
check modes green.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
PeerTube — Federated Video from the Terminal
Browse any PeerTube instance from the command line: latest videos, video detail, comment threads, channels and accounts, instance stats, and OAuth2 login for your own account — plus fediverse-wide search through SepiaSearch.
Why Install This Skill
When your agent loads this skill, it can navigate the federated video universe without a browser. That means:
- Browse any instance — latest videos with real offset pagination (the API has no
pageparameter, and most naive wrappers get this wrong) - Search the right scope — instance-local search or the whole fediverse via
SepiaSearch, with the
searchTargetsemantics documented instead of guessed - Inspect videos deeply — full metadata, comment threads (the hyphenated
/comment-threadsroute), channels, and accounts by handle (name@host) - Check instance health — name, description, and user/video/view counters composed
from
/config/about+/server/statsanonymously - Authenticate safely — OAuth2 password grant with per-instance, owner-only token persistence, automatic refresh, and proper server-side revocation on logout
- Avoid the traps — masked
client_secretresponses, token lifetimes that vary per instance, 2FAx-peertube-otp, rate-limit headers, RFC7807 error bodies
Every command is read-only except login/logout, and --dry-run previews any request
without touching the network.
What You Get
| Path | Purpose |
|---|---|
SKILL.md |
Complete command reference with setup, gotchas, and recipes |
scripts/peertube |
CLI for PeerTube API operations (--json, --dry-run, --verbose) |
scripts/test_peertube.py |
Offline test suite (all HTTP mocked, zero egress) |
references/auth-and-tokens.md |
The full OAuth2 flow, secret masking, token hygiene |
references/search-and-discovery.md |
Instance-local vs SepiaSearch search scopes |
references/endpoint-catalog.md |
Endpoint-by-endpoint parameters and response shapes |
references/gotchas-field-guide.md |
Failure signatures and version drift |
references/worked-recipes.md |
Multi-step CLI/jq and curl workflows |
evals/evals.json |
Behavioral eval cases including negative triggers |
Quick Start
export PEERTUBE_SERVER="https://<INSTANCE_HOST>" # any PeerTube instance
scripts/peertube server # instance stats, anonymous
scripts/peertube videos --limit 5 --json
scripts/peertube search --query "linux" # searches THIS instance
Fediverse-wide search through SepiaSearch (same API shape, wider index):
PEERTUBE_SERVER="https://sepiasearch.org" scripts/peertube search --query "linux"
Optional login for your own account commands:
scripts/peertube login --username "<USERNAME>" --prompt
scripts/peertube me --json | jq '.role.label'
scripts/peertube logout # revokes server-side + deletes token file
Triggers
Load this when asking about PeerTube, federated video, decentralized video platforms, SepiaSearch, browsing a specific PeerTube instance's videos or channels, or PeerTube API authentication.
Requirements
Python 3.8+ with requests. One thing this skill always needs from you: an instance
host — export PEERTUBE_SERVER (e.g. https://<INSTANCE_HOST>) or pass
--server https://... per command, since PeerTube is federated and every command targets
one instance. Reads are anonymous; me/my-videos need a token from scripts/peertube login. Tokens persist to ~/.config/peertube/token.json (override the directory with
PEERTUBE_CONFIG_DIR). Find public instances at joinpeertube.org.