Agent skill

Youtube API

by ericrisco in ericrisco/rsc-harness

A skill your agent uses when wiring code to a real YouTube channel: user OAuth 2.0, resumable videos.insert uploads, editing metadata after publish, pulling views/watch time/retention/traffic from…

MITAuto-check passedBackend & APIs

Install Youtube API

skills CLI
$ npx skills add ericrisco/rsc-harness --skill youtube-api -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ericrisco/rsc-harness youtube-api --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/youtube-api .claude/skills/youtube-api && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
youtube-api
GitHub stars
156
Token cost
~4k tokens
SKILL.md length
1,307 words
Files
7 (incl. scripts, references)
Skills in repo
229
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when wiring code to a real YouTube channel: user OAuth 2.0, resumable videos.insert uploads, editing metadata after publish, pulling views/watch time/retention/traffic from…

  • Works in 7 steps: One-time setup (do this before any code) → Get an authed client and keep the token… → Upload a video (resumable, always) → …
  • Wiring code to a real YouTube channel: user OAuth 2.0
  • SKILL.md covers 1. One-time setup (do this…, 2. Get an authed client and…, 3. Upload a video (resumable,… and 4. Edit metadata after publish, plus 4 more sections
  • Runs Shell scripts from its folder; reaches googleapis.com and developers.google.com; needs CLIENT_SECRET

What it does

Youtube API is an agent skill from ericrisco/rsc-harness. Use when wiring code to a real YouTube channel: user OAuth 2.0, resumable videos.insert uploads, editing metadata after publish, pulling views/watch time/retention/traffic from the Analytics API v2 into a dated 02-DOCS/wiki/youtube/ feedback log. NOT what to publish or how to title and thumbnail it (that is youtube-strategy / youtube-packaging).

Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/analytics-queries.md`).

It sits in Backend & APIs, covering OAuth and OpenID Connect. It works with YouTube. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.

When your agent uses it

  • Wiring code to a real YouTube channel: user OAuth 2.0
  • Resumable videos.insert uploads
  • Editing metadata after publish
  • Pulling views/watch time/retention/traffic from the Analytics API v2 into a dated 02-DOCS/wiki/youtube/ feedback log

Example prompts

  • “/youtube-api”

Requirements

  • Python 3
  • A Bash shell
  • A credential in CLIENT_SECRET

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. One-time setup (do this before any code)
  2. Get an authed client and keep the token alive
  3. Upload a video (resumable, always)
  4. Edit metadata after publish
  5. Pull performance (Analytics API v2)
  6. Ingest into the wiki — the actual deliverable
  7. Quota & failure math

What it can do on your machine

Read from SKILL.md and the folder at commit 92fde8f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • googleapis.com
    • developers.google.com
    • youtubeanalytics.googleapis.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • CLIENT_SECRET

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Youtube API loads about 4k tokens when it runs, and up to ~7.2k if it reads all its reference files. Until then it costs about 90 tokens; SKILL.md has 1,307 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~90
When it runs · the whole SKILL.md, loaded when a task matches
~4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from ericrisco/rsc-harness at commit 92fde8f, republished under its MIT licence (© ericrisco). 1,307 words, ~3,958 tokens.

Download SKILL.mdSave it as .claude/skills/youtube-api/SKILL.md (or your agent's skills folder). This skill also uses 6 other files; get the full folder from GitHub.
name
youtube-api
description
Use when wiring code to a real YouTube channel: user OAuth 2.0, resumable videos.insert uploads, editing metadata after publish, pulling views/watch time/retention/traffic from the Analytics API v2 into a dated 02-DOCS/wiki/youtube/ feedback log. NOT what to publish or how to title and thumbnail it (that is youtube-strategy / youtube-packaging).
tags
youtube, youtube-data-api, youtube-analytics-api, oauth2, resumable-upload, video-metadata, audience-retention, channel-feedback-log
recommends
social-publisher, api-connector-builder, automation-flows, knowledge-ops
origin
risco

YouTube API — Transport + Ingestion for a Real Channel

You own the wire: authenticate to a YouTube channel, upload and edit videos, pull the numbers, and write those numbers into the wiki as a durable feedback log. You do not decide what to make or how to title it — that is the strategy/packaging family. Deliver clean transport and a queryable log; let the siblings interpret.

YouTube has two separate APIs and you will touch both:

  • Data API v3 — https://www.googleapis.com/youtube/v3 — the write side: videos.insert (upload), videos.update (edit metadata), thumbnails.set. Default quota: a shared 10,000 units/day pool plus separate per-day caps of ~100 uploads and ~100 search.list calls (see §7).
  • Analytics API v2 — https://youtubeanalytics.googleapis.com/v2/reports — the read side: views, watch time, retention, traffic sources. Separate scopes, separate quota.

Auth is user OAuth 2.0, not a service account. A human owns the channel; you act on their behalf with a refresh token. A service account cannot own a YouTube channel — if you reach for one, stop. (Service-account Google auth for Gmail/Drive/Sheets is google-workspace, a different model.)

Route elsewhere when the job is not transport:

You actually wantGo to
What videos to make / niche / cadence / growth plan../youtube-strategy/SKILL.md
Video ideas, hooks, a topic backlog../youtube-ideation/SKILL.md
Title + thumbnail packaging, CTR copy, A/B framing../youtube-packaging/SKILL.md
The thumbnail image itself../youtube-thumbnails/SKILL.md
Render/produce the actual video file in code../remotion-video/SKILL.md
Post one asset across many networks at once../social-publisher/SKILL.md
Wrap an arbitrary REST provider with OAuth + retries../api-connector-builder/SKILL.md
Chain upload → Notion row → Slack across tools../automation-flows/SKILL.md
Service-account auth to Gmail/Drive/Sheets../google-workspace/SKILL.md
Generic wiki structure and conventions../knowledge-ops/SKILL.md

1. One-time setup (do this before any code)

A checklist, because each missing step produces a distinct, confusing error later:

  1. Create (or pick) a GCP project.
  2. Enable both APIs in that project: "YouTube Data API v3" and "YouTube Analytics API". Enabling one is the most common cause of a 403 ... has not been used in project on the other.
  3. Configure the OAuth consent screen and publish it to "In production." Why: an app left in "Testing" status issues refresh tokens that expire in 7 days — your cron silently dies the following week. This is the single most common YouTube-ingestion breakage.
  4. Create an OAuth client: Desktop app for a personal/local script, Web application (with an exact redirect URI) for a hosted app.
  5. Request least-privilege scopes — not the full management scope.

Scope table — request only what the job needs:

ScopeGrantsUse for
https://www.googleapis.com/auth/youtube.uploadUpload videosvideos.insert
https://www.googleapis.com/auth/youtube.force-sslManage/edit/deletevideos.update, thumbnails.set
https://www.googleapis.com/auth/yt-analytics.readonlyRead performanceAnalytics reports
https://www.googleapis.com/auth/yt-analytics-monetary.readonlyRead revenue metricsonly if you pull estimatedRevenue etc.

Bad → Good on scopes:

text
Bad:  scopes = ["https://www.googleapis.com/auth/youtube"]   # full account control
Good: scopes = ["https://www.googleapis.com/auth/youtube.upload",
                "https://www.googleapis.com/auth/youtube.force-ssl",
                "https://www.googleapis.com/auth/yt-analytics.readonly"]

Full GCP + consent-screen walkthrough, Desktop-vs-Web choice, and unauthorized_client / access_denied / redirect-URI troubleshooting live in references/oauth-setup.md.

2. Get an authed client and keep the token alive

Build both service clients from one set of OAuth credentials.

python
# python: google-api-python-client + google-auth-oauthlib
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
import json, os
from google.oauth2.credentials import Credentials

SCOPES = ["https://www.googleapis.com/auth/youtube.upload",
          "https://www.googleapis.com/auth/youtube.force-ssl",
          "https://www.googleapis.com/auth/yt-analytics.readonly"]
TOKEN = "token.json"   # gitignored — holds the refresh_token

def creds():
    c = Credentials.from_authorized_user_file(TOKEN, SCOPES) if os.path.exists(TOKEN) else None
    if not c or not c.valid:
        if c and c.expired and c.refresh_token:
            c.refresh(Request())               # silent renewal — needs "In production" app
        else:
            c = InstalledAppFlow.from_client_secrets_file(
                "client_secret.json", SCOPES).run_local_server(port=0)
        with open(TOKEN, "w") as f:
            f.write(c.to_json())
    return c

c = creds()
data = build("youtube", "v3", credentials=c)
yta  = build("youtubeAnalytics", "v2", credentials=c)
javascript
// node: googleapis + google-auth-library
import { google } from "googleapis";
import fs from "node:fs";

const oauth2 = new google.auth.OAuth2(CLIENT_ID, CLIENT_SECRET, REDIRECT_URI);
oauth2.setCredentials(JSON.parse(fs.readFileSync("token.json", "utf8"))); // { refresh_token, ... }
oauth2.on("tokens", (t) => {                 // persist the refreshed token
  if (t.refresh_token) fs.writeFileSync("token.json", JSON.stringify(t));
});
const data = google.youtube({ version: "v3", auth: oauth2 });
const yta  = google.youtubeAnalytics({ version: "v2", auth: oauth2 });

Rule: persist the refresh token, never a bare access_token. Access tokens expire in ~1 hour; the credential object refreshes itself. A hardcoded access_token=... literal is a guaranteed 401 within the hour — and is exactly what verify.sh flags.

3. Upload a video (resumable, always)

Decision: any file over a few MB → use the resumable protocol. A plain multipart POST drops the whole upload on one network hiccup; resumable survives it.

The protocol is two steps:

  1. Init the session — POST to the upload endpoint with uploadType=resumable and the metadata body. The response Location header is your session URL.
  2. PUT the bytes to that session URL — one shot or in chunks. On a dropped connection, query with Content-Range: bytes */*; the server returns the byte offset already received, and you resume from there.

The client libraries do this for you via a media-upload helper:

python
from googleapiclient.http import MediaFileUpload

body = {
  "snippet": {"title": "Ep. 14", "description": "...", "tags": ["x", "y"], "categoryId": "27"},
  "status":  {"privacyStatus": "private", "publishAt": "2026-06-10T15:00:00Z",
              "selfDeclaredMadeForKids": False},
}
media = MediaFileUpload("ep14.mp4", chunksize=8 * 1024 * 1024, resumable=True)
req = data.videos().insert(part="snippet,status", body=body, media_body=media)
resp = None
while resp is None:
    status, resp = req.next_chunk()          # resumes automatically on a transient drop
video_id = resp["id"]
data.thumbnails().set(videoId=video_id, media_body=MediaFileUpload("ep14.jpg")).execute()

Throttle the upload count, not the unit spend: videos.insert has its own cap of ~100 uploads/day, so uploadLimitExceeded (429) hits while the 10k unit pool still looks untouched. Space automated uploads out and back off on 429 — figures and citation in §7.

4. Edit metadata after publish

videos.update does read-modify-write semantics on whole parts. The trap: any field you omit inside a part you send gets cleared.

python
# Bad: wipes description and tags because they aren't in the body
data.videos().update(part="snippet",
    body={"id": vid, "snippet": {"title": "New title", "categoryId": "27"}}).execute()

# Good: fetch the current snippet, change one field, send it back whole
cur = data.videos().list(part="snippet", id=vid).execute()["items"][0]["snippet"]
cur["title"] = "New title"
data.videos().update(part="snippet", body={"id": vid, "snippet": cur}).execute()

categoryId is required when you send a snippet part — another reason to read-modify-write. An update costs ~50 units.

5. Pull performance (Analytics API v2)

Every report is GET /v2/reports?ids=channel==MINE&startDate=&endDate=&metrics=...&dimensions=...&filters=.... Four recipes cover the loop:

python
# (a) Channel KPIs over a date range
yta.reports().query(ids="channel==MINE", startDate="2026-05-01", endDate="2026-05-31",
  metrics="views,estimatedMinutesWatched,averageViewDuration,averageViewPercentage"
).execute()

# (b) Per-video KPIs
yta.reports().query(ids="channel==MINE", startDate="2026-05-01", endDate="2026-05-31",
  metrics="views,estimatedMinutesWatched,averageViewPercentage",
  filters="video==VIDEO_ID").execute()

# (c) Audience-retention curve for one video
yta.reports().query(ids="channel==MINE", startDate="2026-05-01", endDate="2026-05-31",
  metrics="audienceWatchRatio,relativeRetentionPerformance",
  dimensions="elapsedVideoTimeRatio", filters="video==VIDEO_ID").execute()

# (d) Traffic sources
yta.reports().query(ids="channel==MINE", startDate="2026-05-01", endDate="2026-05-31",
  metrics="views,estimatedMinutesWatched",
  dimensions="insightTrafficSourceType").execute()

Notes that save an afternoon:

  • elapsedVideoTimeRatio runs 0.0–1.0 (playback position); audienceWatchRatio is the absolute retention at that point. Plot one against the other to find the drop-off.
  • insightTrafficSourceType values include YT_SEARCH, SUGGESTED, BROWSE, EXT_URL, NOTIFICATION, PLAYLIST, END_SCREEN, NO_LINK_EMBEDDED.
  • Impressions / CTR (impressions, impressionClickThroughRate) are content-owner-report metrics, not reliably available on a plain channel query. If the API returns nothing for them, fall back to the value Studio shows — do not block the pull.

Full metric+dimension catalog and copy-paste bodies for geography, device, and subscribed-status reports are in references/analytics-queries.md.

Show full SKILL.md (512 more words)Show less

6. Ingest into the wiki — the actual deliverable

A pull that prints to stdout and vanishes is wasted. Every pull appends a dated entry under 02-DOCS/wiki/youtube/ so the channel's numbers become queryable history that the strategy/packaging siblings can read.

text
02-DOCS/wiki/youtube/
  index.md                  # rolling pointer to latest snapshot + open questions
  channel-2026-05-31.md     # dated channel snapshot (one per pull)
  videos/<VIDEO_ID>.md      # per-video running log, newest entry on top

Per-pull entry template (OKF v0.1: non-empty type + the domain keys siblings parse):

markdown
---
type: youtube-metrics
title: Channel snapshot 2026-05-31
description: Channel KPIs, traffic and retention for 2026-05-01..2026-05-31.
tags: [youtube, channel-snapshot]
timestamp: 2026-05-31T00:00:00Z
date: 2026-05-31
range: 2026-05-01..2026-05-31
channel: MINE
source: youtube-analytics-api-v2
---
## KPIs
views: 41,233 | watch_min: 88,140 | avg_view_pct: 38.2% | avg_view_dur: 0:04:11

## Traffic (top 3)
BROWSE 44% · SUGGESTED 31% · YT_SEARCH 12%

## Retention
Sharp drop 0.00→0.06 (intro), recovers, second dip ~0.55.

## What changed since last pull
avg_view_pct +2.1pts; SUGGESTED share up 6pts after the Ep.13 packaging change.

Rule: append, never overwrite. The feedback log is the value — overwriting yesterday's snapshot destroys the trend the siblings need. 02-DOCS/wiki/ is an OKF v0.1 bundle: keep the domain keys (date, range, channel, source) the siblings parse, add type/timestamp alongside them, use standard markdown links (never [[wikilinks]]), and leave the reserved index.md frontmatter-free. Exact file tree, naming, per-video log shape, and how siblings read the log: references/wiki-schema.md.

7. Quota & failure math

CallCost / allocation
videos.insert (upload)own daily cap: ~100 uploads/day, not 10k-pool units
search.listown daily cap: ~100 calls/day
write: videos.update, thumbnails.set~50 units (from the 10k pool)
*.list read1–5 units (from the 10k pool)
Analytics reports.query(separate Analytics quota)

Per the official docs (Last updated 2026-06-01 UTC, https://developers.google.com/youtube/v3/getting-started; per-method costs at https://developers.google.com/youtube/v3/determine_quota_cost), a project's default allocation is "100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for all other endpoints." All quotas reset at midnight Pacific. This is a change from the older single-pool model where videos.insert cost ~1,600 units — confirm the live figure on the quota-cost page before relying on it, since Google notes the allocation "is subject to change."

On 403 quotaExceeded / rateLimitExceeded or 429: exponential backoff with jitter, then stop for the day on a hard quota cap — retrying a daily-quota 403 in a tight loop just burns the next day too.

Error → cause map:

SymptomCauseFix
Refresh token dies after ~7 daysApp still in "Testing"Publish consent screen to "In production"
unauthorized_clientConsent/client misconfig or wrong client typeRe-check OAuth client + authorized scopes
403 insufficient permissionsMissing scopeAdd the right scope, re-consent
uploadLimitExceeded (429)Hit the ~100 videos.insert/day cap (separate from the 10k unit pool)Throttle upload count, back off
Empty impressions/CTRNot a content-owner channel queryRead it from Studio
403 ... API has not been usedOther API not enabledEnable both Data v3 and Analytics v2

Anti-patterns

Anti-patternWhy it bitesDo instead
Commit client_secret.json / token.json with refresh_tokenLeaks full channel control to anyone with repo readGitignore both; load from env/secret store
Request full auth/youtube scopeGrants total account control; fails reviewLeast set: youtube.upload + youtube.force-ssl + yt-analytics.readonly
Hardcode an access_tokenDead in ~1 hourPersist the refresh token; use a refreshable credential
videos.update with a partial partOmitted fields get wipedRead-modify-write the whole part
Plain multipart upload for a big fileOne drop kills the whole uploadResumable protocol with chunked PUT
Treat the 10k unit pool as the upload budgetUploads use a separate ~100/day call cap, so uploadLimitExceeded 429 hits with the pool untouchedThrottle upload count against the ~100/day cap
Overwrite yesterday's wiki snapshotDestroys the trend the siblings readAppend a new dated entry every pull
Leave the app in "Testing"Token silently dies in 7 daysPublish to "In production"

© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 6 other files (scripts, references) in skills/youtube-api of ericrisco/rsc-harness.

  • SKILL.md
  • evals/README.md
  • evals/cases.yaml
  • references/analytics-queries.md
  • references/oauth-setup.md
  • references/wiki-schema.md
  • scripts/verify.sh

Open the folder on GitHubat commit 92fde8f

Compare with similar skills

Youtube API next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Youtube API compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Youtube API this skillericrisco/rsc-harness156—~4kAutomated safety check: PassMIT
Peertubemagnus919/agent-skills111—~3.1kAutomated safety check: PassMIT
Add OAuth Providersuperdesigndev/treg4.5k—~2.5kAutomated safety check: PassCustom licence
Setupdaiki-beppu/youtube-automation169—~1.3kAutomated safety check: PassCustom licence
YoutubeCraftOS-dev/CraftBot3921 repos~3.7kAutomated safety check: PassMIT
Int Youtubeevolution-foundation/evo-nexus544—~568Automated safety check: NotesCustom licence

Similar skills

  • Peertube

    magnus919/agent-skills

    Browse PeerTube federated video from the terminal — instance stats, latest videos, video detail, comment threads, channels, accounts, instance-local search, and OAuth2 login with per-instance token…

    111 GitHub stars~3.1k tokensUpdated yesterday
    Backend & APIsAuto-check passed
  • Add OAuth Provider

    superdesigndev/treg

    Add a provider to treg's OAuth registry (the ones treg holds its own approved app for).

    4.5k GitHub stars~2.5k tokensUpdated today
    Backend & APIsAuto-check passed
  • Setup

    daiki-beppu/youtube-automation

    A skill your agent uses when ツール導入と GCP / OAuth の設定、新規 YouTube チャンネル開設、既存チャンネル取り込み、config 再生成、または YouTube 側設定同期を行うとき。「セットアップして」「環境構築」「新チャンネル」「既存チャンネル」「チャンネル取り込み」「config…

    169 GitHub stars~1.3k tokensUpdated 2 days ago
    Backend & APIsAuto-check passed
  • Youtube

    CraftOS-dev/CraftBot

    YouTube Data API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.

    392 GitHub starsUsed in 1 repo~3.7k tokens
    Backend & APIsAuto-check passed
  • Int Youtube

    evolution-foundation/evo-nexus

    Query YouTube Data API v3 — channel stats, recent videos, top videos, comments.

    544 GitHub stars~568 tokensUpdated 4 mo ago
    Backend & APIsAuto-check: notes
  • Blog Google

    AgriciDaniel/claude-blog

    Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…

    2.3k GitHub starsUsed in 1 repo~3.3k tokens
    Marketing & SEOAuto-check: notes

More from ericrisco/rsc-harness

All 229 skills in this repo
  • Ab Testing

    ericrisco/rsc-harness

    A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…

    156 GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed
  • Accessibility

    ericrisco/rsc-harness

    A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…

    156 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Ads

    ericrisco/rsc-harness

    A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…

    156 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed
  • Agent Eval

    ericrisco/rsc-harness

    A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…

    156 GitHub stars~3.2k tokensUpdated yesterday
    Auto-check passed
  • AI Media

    ericrisco/rsc-harness

    A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…

    156 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check passed
  • Analytics

    ericrisco/rsc-harness

    A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.

    156 GitHub stars~2.8k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Youtube API

What does Youtube API do?

A skill your agent uses when wiring code to a real YouTube channel: user OAuth 2.0, resumable videos.insert uploads, editing metadata after publish, pulling views/watch time/retention/traffic from…. Youtube API is an agent skill from ericrisco/rsc-harness.insert uploads, editing metadata after publish, pulling views/watch time/retention/traffic from the Analytics API v2 into a dated 02-DOCS/wiki/youtube/ feedback log.

When should I use Youtube API?

Youtube API fits situations like: wiring code to a real YouTube channel: user OAuth 2.0; resumable videos.insert uploads; editing metadata after publish; pulling views/watch time/retention/traffic from the Analytics API v2 into a dated 02-DOCS/wiki/youtube/ feedback log.

How do I install Youtube API in Claude Code?

Run `npx skills add ericrisco/rsc-harness --skill youtube-api -a claude-code`. Or copy the skill folder (skills/youtube-api in ericrisco/rsc-harness) into .claude/skills/youtube-api in your project. Claude Code loads it when a task matches its description.

How do I install Youtube API in Codex?

Run `npx skills add ericrisco/rsc-harness --skill youtube-api -a codex`. Or copy the skill folder (skills/youtube-api in ericrisco/rsc-harness) into .agents/skills/youtube-api in your project. Codex loads it when a task matches its description.

Can I use Youtube API in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill youtube-api -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/youtube-api, .gemini/skills/youtube-api, .github/skills/youtube-api and .opencode/skills/youtube-api in your project.

What does Youtube API need to run?

Going by SKILL.md and its folder, Youtube API needs a shell for the scripts in its folder and credentials named CLIENT_SECRET. Our summary lists: Python 3; A Bash shell; A credential in CLIENT_SECRET.

Does Youtube API access the network?

SKILL.md names 3 domains. In commands or code: googleapis.com, developers.google.com and youtubeanalytics.googleapis.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Youtube API safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Youtube API use?

Youtube API is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Youtube API use?

About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.2k tokens, read only when the agent opens those files.

What are the alternatives to Youtube API?

Skills that share tags, products or a category with Youtube API: Peertube (magnus919/agent-skills, 111 stars), Add OAuth Provider (superdesigndev/treg, 4.5k stars), Setup (daiki-beppu/youtube-automation, 169 stars) and Youtube (CraftOS-dev/CraftBot, 392 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Youtube API?

ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 156 GitHub stars. The repository holds 229 skills in this directory. The repository was last updated on October 6, 2026.

Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.