Install
$ agentstack add skill-agentproto-ts-youtube ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
YouTube — recon plan (InnerTube API)
Internal API: InnerTube — POST https://www.youtube.com/youtubei/v1/?key=&prettyPrint=false, body { context: , ...params }. The web app uses this for everything.
Config + auth (from the page)
INNERTUBE_API_KEY+INNERTUBE_CONTEXTlive inytcfg. Read in-page:
``js ;() => ({ key: ytcfg.get("INNERTUBE_API_KEY"), ctx: ytcfg.get("INNERTUBE_CONTEXT"), }) ``
- Public reads: often work with just key + context (no auth).
- Personalized / write (subscriptions, comments, like): need SAPISIDHASH
auth:
Authorization: SAPISIDHASH _
where SAPISID = the SAPISID (or __Secure-3PAPISID) cookie, origin = https://www.youtube.com, ts = unix seconds. Compute SHA-1 in-page (SubtleCrypto). Also send X-Goog-AuthUser: 0, Origin, cookies (auto).
In-page fetch:
;async (endpoint, body) => {
const key = ytcfg.get("INNERTUBE_API_KEY")
const r = await fetch(
`/youtubei/v1/${endpoint}?key=${key}&prettyPrint=false`,
{
method: "POST",
headers: {
"content-type": "application/json" /* + SAPISIDHASH for writes */,
},
body: JSON.stringify({
context: ytcfg.get("INNERTUBE_CONTEXT"),
...body,
}),
}
)
return await r.json()
}
Endpoints to test
| Purpose | endpoint | params | | ----------------------------------- | ------------------------------------------------- | ---------------------------------- | | Channel / home / playlist | browse | browseId (channel UC…), params | | Watch page → video + comments token | next | videoId | | Comments (+ who/likes) | next (continuation token from the watch next) | continuation | | Search | search | query, params | | Video metadata | player | videoId | | WRITE: comment | comment/create_comment / create_comment_reply | createCommentParams | | WRITE: like/dislike | like/like / like/dislike / like/removelike | target.videoId | | WRITE: subscribe | subscription/subscribe / unsubscribe | channelIds |
Entity model
Channel{browseId, title, subscriberCount} · Video{videoId, title, author, viewCount, likeCount} · Comment{author, text, likeCount, replyCount}. Responses are deeply nested renderer trees (*Renderer) — walk to the renderer that holds the field (e.g. commentRenderer, videoRenderer).
Capture method
Open youtube.com → read ytcfg (above) → list_network_requests for /youtubei/v1/ → see the endpoint + the body params + continuation tokens.
Actions to test (read-first; writes gated)
- read ytcfg key+context.
searcha topic → videos.next(videoId)→ video + first comments → who commented + likes (→
graph).
browse(channelId)→ a creator's videos/about.- (gated, needs SAPISIDHASH) comment / like / subscribe — explicit confirm.
Gotchas
- SAPISIDHASH required for any authenticated/write call — compute in-page from
the SAPISID cookie (SubtleCrypto SHA-1). Read-only public data may skip it.
- Renderer trees are verbose; extract by walking for the specific
*Renderer. - Comments come via a continuation token from the
nextresponse, not a flat
list.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: agentproto
- Source: agentproto/ts
- License: Apache-2.0
- Homepage: https://agentproto.sh
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.