Agent skill

YouTube Channel Tools

by ZeroPointRepo in ZeroPointRepo/youtube-skills

Browses YouTube channels through TranscriptAPI: resolves handles to channel IDs, lists recent uploads and pages through a channel's videos.

MITAuto-check passedProductivity & Automation

Install YouTube Channel Tools

skills CLI
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-channels -a claude-code

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

GitHub CLI
$ gh skill install ZeroPointRepo/youtube-skills youtube-channels --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/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/youtube-channels .claude/skills/youtube-channels && 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-channels
GitHub stars
1k
Used in
1 other repo
Token cost
~3.3k tokens
SKILL.md length
758 words
Files
3 (incl. references)
Skills in repo
12
Repo updated
First seen
Licence
MIT

At a glance

Browses YouTube channels through TranscriptAPI: resolves handles to channel IDs, lists recent uploads and pages through a channel's videos.

  • Browsing what a creator has uploaded recently from a pasted @handle
  • SKILL.md covers Setup, Required Headers, API Reference and GET…, plus 10 more sections
  • Reaches transcriptapi.com and youtube.com; needs TRANSCRIPT_API_KEY
  • Resolving a channel handle or URL to its channel ID

What it does

Every channel endpoint accepts an @handle, a channel URL or a UC channel ID, so nothing has to be resolved first. The resolve endpoint, which is free, returns the canonical channel ID. The latest endpoint, also free, returns the 15 newest videos from the RSS feed with exact view counts and ISO timestamps, which suits monitoring. The videos endpoint costs one credit per page of about 100 and can pick uploads, Shorts or live streams and sort by latest, popular or oldest. The description also lists searching within a channel.

Setup needs a `TRANSCRIPT_API_KEY` environment variable, with a reference file explaining how to get and store it. Each request carries a bearer authorization header and a User-Agent naming your agent; a bare default header is blocked by Cloudflare with a 403. The full OpenAPI spec is published for current parameters, and a second reference file holds curl examples. The skill needs internet access to transcriptapi.com and no extra runtimes.

When your agent uses it

  • Browsing what a creator has uploaded recently from a pasted @handle
  • Resolving a channel handle or URL to its channel ID
  • Monitoring a channel for new uploads with exact view counts

Example prompts

  • “Show me the latest uploads from @TED with view counts.”
  • “Resolve this channel URL to its channel ID.”
  • “List the most popular videos on this channel and its recent Shorts.”

Requirements

  • A TRANSCRIPT_API_KEY for TranscriptAPI.com
  • Internet access to transcriptapi.com
  • Compatibility (from SKILL.md): Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.

What it can do on your machine

Read from SKILL.md and the folder at commit 4f7994b. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are http and json).

    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:

    • transcriptapi.com
    • youtube.com
    • i1.ytimg.com

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

  • Credentials

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

    • TRANSCRIPT_API_KEY

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

  • Compatibility

    Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.

    From compatibility in the SKILL.md frontmatter.

Context cost

YouTube Channel Tools loads about 3.3k tokens when it runs, and up to ~5.7k if it reads all its reference files. Until then it costs about 95 tokens; SKILL.md has 758 words of instructions outside code blocks.

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

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from ZeroPointRepo/youtube-skills at commit 4f7994b, republished under its MIT licence (© ZeroPointRepo). 758 words, ~3,259 tokens.

Download SKILL.mdSave it as .claude/skills/youtube-channels/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
youtube-channels
description
Use when a YouTube channel is the focus: pasted @handles or channel URLs, requests to browse a creator's uploads, see what a channel has posted recently, search within a channel, or resolve a handle to a channel ID. Also use when the user names a creator and wants to explore their content or monitor their uploads. Not for creating channels or account management.
compatibility
Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
version
1.6.3
user-invocable
true

YouTube Channels

YouTube channel tools via TranscriptAPI.com.

Setup

If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md and follow the instructions there to get and store the key.

Required Headers

Every request needs two headers:

  • Authorization: Bearer $TRANSCRIPT_API_KEY
  • User-Agent: your agent's name and version if known (e.g. HermesAgent/0.11.0, ClaudeCode/1.0). Version is optional — agent name alone is fine. Do not omit this header or send a bare default — Cloudflare will return a 403 (error code 1010) and block the request.

API Reference

Full OpenAPI spec: transcriptapi.com/openapi.json — consult this for the latest parameters and schemas.

All channel endpoints accept flexible input — @handle, channel URL, or UC... channel ID. No need to resolve first.

GET /api/v2/youtube/channel/resolve — FREE

Convert @handle, URL, or UC... ID to canonical channel ID.

http
GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
inputyes1-200 chars — @handle, URL, or UC... ID

Response:

json
{ "channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED" }

If input is already UC[a-zA-Z0-9_-]{22}, returns immediately.

GET /api/v2/youtube/channel/latest — FREE

Latest 15 videos via RSS with exact stats.

http
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
channelyes@handle, channel URL, or UC... ID

Response:

json
{
  "channel": {
    "channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
    "title": "TED",
    "author": "TED",
    "url": "https://www.youtube.com/channel/UCsT0YIqwnpJCM-mx7-gSA4Q",
    "published": "2006-04-17T00:00:00Z"
  },
  "results": [
    {
      "videoId": "abc123xyz00",
      "title": "Latest Video Title",
      "channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
      "author": "TED",
      "published": "2026-01-30T16:00:00Z",
      "updated": "2026-01-31T02:00:00Z",
      "link": "https://www.youtube.com/watch?v=abc123xyz00",
      "description": "Full video description...",
      "thumbnail": { "url": "https://i1.ytimg.com/vi/.../hqdefault.jpg" },
      "viewCount": "2287630",
      "starRating": {
        "average": "4.92",
        "count": "15000",
        "min": "1",
        "max": "5"
      }
    }
  ],
  "result_count": 15
}

Great for monitoring channels — free and gives exact view counts + ISO timestamps.

GET /api/v2/youtube/channel/videos — 1 credit/page

Paginated list of a channel's feed (~100 per page). Use tab to pick uploads (default), Shorts, or live streams, and the optional sort to order the Videos tab by latest, popular, or oldest.

http
# First page
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&tab=videos
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

# Most-viewed first (channel Videos tab, ~30 per page)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?channel=@NASA&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

# Next pages (repeat the same tab AND sort)
GET https://transcriptapi.com/api/v2/youtube/channel/videos?continuation=TOKEN&sort=popular
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
channelconditional@handle, channel URL, or UC... ID
tabnovideos (default), shorts, or streams
sortnolatest, popular, or oldest (omit for the uploads feed)
continuationconditionalnon-empty (next pages)

Provide exactly one of channel or continuation, not both. When paginating, pass the same tab and sort on every page.

Sorting. Add sort=latest, popular, or oldest to channel/videos to get a channel's videos in the order you want, for example its most-popular uploads first. A sorted page returns about 30 videos (an unsorted page returns about 100), and every page costs the same 1 credit.

When paging, send the same sort on each request.

Per-item fields by feed:

Fielduploads (no sort)tab=videos + sorttab=streamstab=shorts
lengthTextpopulatedpopulatedpopulated (LIVE while live)null
publishedTimeTextpopulatedpopulatedpopulated (Streamed 2 years ago)null
viewCountTextpopulatedpopulatedpopulated (null while live)populated
channelId / channelTitle / channelHandle / indexpopulatednullnullnull
members_onlyalways falsetrue on membership videostrue on membership streamsalways false

members_only is true only when YouTube badges the item "Members only". Such items carry no viewCountText, because YouTube does not publish view counts for membership content.

Response:

json
{
  "results": [{
    "videoId": "abc123xyz00",
    "title": "Video Title",
    "channelId": "UCsT0YIqwnpJCM-mx7-gSA4Q",
    "channelTitle": "TED",
    "channelHandle": "@TED",
    "lengthText": "15:22",
    "viewCountText": "3.2M views",
    "publishedTimeText": "2 years ago",
    "thumbnails": [...],
    "index": "0",
    "members_only": false
  }],
  "playlist_info": {"title": "Uploads from TED", "numVideos": "5000", "ownerName": "TED"},
  "continuation_token": "4qmFsgKlARIYVVV1...",
  "has_more": true
}

Keep calling with continuation until has_more: false.

GET /api/v2/youtube/channel/search — 1 credit

Search within a specific channel.

http
GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=climate+change&limit=30
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
channelyes@handle, channel URL, or UC... ID
qyes1-200 chars
limitno1-50 (default 30)
Show full SKILL.md (315 more words)Show less

GET /api/v2/youtube/channel/info — 1 credit

A channel's profile: title, handle, verified flag, subscriber/video counts, description, tags, thumbnails, banners, and the tabs it exposes.

http
GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
channelyes@handle, channel URL, or UC... ID

Response:

json
{
  "channelId": "UCAuUUnT6oDeKwE6v1NGQxug",
  "title": "TED",
  "handle": "@TED",
  "verified": true,
  "subscriberCountText": "23.8M subscribers",
  "videoCountText": "4,300 videos",
  "description": "The TED Talks channel features ...",
  "tags": ["TED", "TED Talks"],
  "thumbnails": [...],
  "banners": [...],
  "availableTabs": ["videos", "shorts", "playlists", "community"]
}

Counts are display strings and null when YouTube hides them — never 0. Check availableTabs before calling channel/sections or channel/videos with a tab.

GET /api/v2/youtube/channel/playlists — 1 credit/page

List the playlists shown on a channel — useful for finding a playlist ID to feed into playlist/videos.

http
GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
channelconditional@handle, channel URL, or UC... ID
continuationconditionalnon-empty (next pages)

Provide exactly one of channel or continuation, not both. Returns results (playlistId, title, url, videoCountText, thumbnails), continuation_token, has_more.

GET /api/v2/youtube/channel/posts — 1 credit/page

List a channel's community (Posts tab) content — text, publish time, like counts, and any attachment (image, video, playlist, or poll).

http
GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredValidation
channelconditional@handle, channel URL, or UC... ID
continuationconditionalnon-empty (next pages)

Provide exactly one of channel or continuation, not both. Channels with no community tab return an empty results list (not an error).

GET /api/v2/youtube/channel/sections — 1 credit

The curated shelves on a channel's Home page (or its podcasts/releases pages) — each shelf holds videos, playlists, shorts, or featured channels, in the channel's own order. Not paginated.

http
GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0
ParamRequiredDefaultValidation
channelyes—@handle, channel URL, or UC... ID
tabnofeaturedfeatured (Home), podcasts, releases

podcasts and releases only exist on channels that have them (empty results otherwise — check availableTabs from channel/info first).

Typical workflow

http
# 1. Check latest uploads (free — pass @handle directly)
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

# 2. Get transcript of recent video
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_ID&format=text&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0

Errors

CodeMeaningAction
400Invalid param combinationBoth or neither channel/continuation
402No creditstranscriptapi.com/billing
403/1010Cloudflare blockAdd or fix User-Agent header
404Channel not foundCheck handle or URL
408TimeoutRetry once
422Invalid channel identifierCheck param format

Free tier: 100 credits, 300 req/min. Free endpoints (resolve, latest) require auth but don't consume credits.

Copy-paste examples

Every request in this file as a ready-to-run one-liner: references/curl-examples.md

© ZeroPointRepo, 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 2 other files (references) in skills/youtube-channels of ZeroPointRepo/youtube-skills.

  • SKILL.md
  • references/auth-setup.md
  • references/curl-examples.md

Open the folder on GitHubat commit 4f7994b

Used in 1 other repository

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in ZeroPointRepo/youtube-skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

YouTube Channel Tools 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 Channel Tools compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
YouTube Channel Tools this skillZeroPointRepo/youtube-skills1k1 repos~3.3kAutomated safety check: PassMIT
Agent ReachPanniantong/Agent-Reach95k—~1.4kAutomated safety check: PassMIT
Agent ReachEdisonChenAI/agent-reach1151 repos~1.3kAutomated safety check: PassMIT
9Router Web Searchdecolua/9router31k—~1kAutomated safety check: PassMIT
Scrapingbee CLIScrapingBee/scrapingbee-cli108—~3.2kAutomated safety check: NotesMIT
Hacker News Searchdylanfeltus/skills179—~1.7kAutomated safety check: PassMIT

Similar skills

  • Agent Reach

    Panniantong/Agent-Reach

    Routes web research and platform lookups across 16 sites, including Twitter, Reddit, YouTube, Bilibili, Xiaohongshu and GitHub, through one command-line tool.

    95k GitHub stars~1.4k tokensUpdated 3 days ago
    Productivity & AutomationAuto-check passed
  • Agent Reach

    EdisonChenAI/agent-reach

    Use the internet: search, read, and interact with 13+ platforms including Twitter/X, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu (小红书), Douyin (抖音), WeChat Articles (微信公众号), LinkedIn, Boss直聘…

    115 GitHub starsUsed in 1 repo~1.3k tokens
    Productivity & AutomationAuto-check passed
  • 9Router Web Search

    decolua/9router

    Runs web, news and public X searches through a 9Router gateway's search endpoint, choosing among providers such as Tavily, Exa, Brave and Perplexity.

    31k GitHub stars~1k tokensUpdated 2 days ago
    Productivity & AutomationAuto-check passed
  • Scrapingbee CLI

    ScrapingBee/scrapingbee-cli

    Fetch and read any web page, search the web, crawl a site, or pull structured data out of pages.

    108 GitHub stars~3.2k tokensUpdated 4 days ago
    Productivity & AutomationAuto-check: notes
  • Hacker News Search

    dylanfeltus/skills

    Searches and monitors Hacker News stories, comments and users through the free Algolia HN Search API, with tag, points and date filters.

    179 GitHub stars~1.7k tokensUpdated 23 days ago
    Productivity & AutomationAuto-check passed
  • Brave Local Place Descriptions

    brave/brave-search-skills

    Fetches AI-written text descriptions for local places from the Brave Search API, using place IDs returned by an earlier local search.

    183 GitHub stars~1k tokensUpdated 18 days ago
    Productivity & AutomationAuto-check passed

More from ZeroPointRepo/youtube-skills

All 12 skills in this repo
  • YouTube Captions Fetcher

    ZeroPointRepo/youtube-skills

    Fetches timestamped captions or plain-text transcripts for any YouTube video through the TranscriptAPI service, for reading, quoting, translating or accessibility.

    1k GitHub starsUsed in 1 repo~1.1k tokens
    Auto-check passed
  • YouTube Subtitle Fetcher

    ZeroPointRepo/youtube-skills

    Fetches timestamped subtitles for any YouTube video through TranscriptAPI, as clean text for reading and translation or timed JSON.

    1k GitHub starsUsed in 1 repo~1.1k tokens
    Auto-check passed
  • YouTube Transcript Fetcher

    ZeroPointRepo/youtube-skills

    Fetches the transcript of a YouTube video through TranscriptAPI.com so the agent can summarize, quote, translate or fact-check what was said.

    1k GitHub starsUsed in 1 repo~1.1k tokens
    Auto-check passed
  • YouTube TranscriptAPI

    ZeroPointRepo/youtube-skills

    Pulls YouTube transcripts, searches videos and channels and browses playlists through the TranscriptAPI service with a single API key.

    1k GitHub starsUsed in 1 repo~3k tokens
    Auto-check passed
  • YouTube Video Transcript

    ZeroPointRepo/youtube-skills

    Fetches YouTube transcripts through TranscriptAPI.com so an agent can summarize, quote or translate a video from a link or ID.

    1k GitHub starsUsed in 1 repo~1.1k tokens
    Auto-check passed
  • YouTube Data via TranscriptAPI

    ZeroPointRepo/youtube-skills

    Fetches YouTube transcripts, video metadata, channel info, search results and playlists through the TranscriptAPI.com service, with no Google API quota or OAuth setup.

    1k GitHub starsUsed in 1 repo~2.3k tokens
    Auto-check passed

Works with

Questions about YouTube Channel Tools

What does YouTube Channel Tools do?

Browses YouTube channels through TranscriptAPI: resolves handles to channel IDs, lists recent uploads and pages through a channel's videos. Every channel endpoint accepts an @handle, a channel URL or a UC channel ID, so nothing has to be resolved first. The resolve endpoint, which is free, returns the canonical channel ID.

When should I use YouTube Channel Tools?

YouTube Channel Tools fits situations like: browsing what a creator has uploaded recently from a pasted @handle; resolving a channel handle or URL to its channel ID; monitoring a channel for new uploads with exact view counts.

How do I install YouTube Channel Tools in Claude Code?

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

How do I install YouTube Channel Tools in Codex?

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

Can I use YouTube Channel Tools 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 ZeroPointRepo/youtube-skills --skill youtube-channels -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-channels, .gemini/skills/youtube-channels, .github/skills/youtube-channels and .opencode/skills/youtube-channels in your project.

What does YouTube Channel Tools need to run?

Going by SKILL.md and its folder, YouTube Channel Tools needs credentials named TRANSCRIPT_API_KEY. Our summary lists: A TRANSCRIPT_API_KEY for TranscriptAPI.com; Internet access to transcriptapi.com. Compatibility (from SKILL.md): Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed..

Does YouTube Channel Tools access the network?

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

Is YouTube Channel Tools 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. Review the folder before installing.

What licence does YouTube Channel Tools use?

YouTube Channel Tools 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 Channel Tools use?

About 3.3k tokens (SKILL.md is roughly 13k 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 2.5k tokens, read only when the agent opens those files.

What are the alternatives to YouTube Channel Tools?

Skills that share tags, products or a category with YouTube Channel Tools: Agent Reach (Panniantong/Agent-Reach, 95k stars), Agent Reach (EdisonChenAI/agent-reach, 115 stars), 9Router Web Search (decolua/9router, 31k stars) and Scrapingbee CLI (ScrapingBee/scrapingbee-cli, 108 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains YouTube Channel Tools?

ZeroPointRepo (a GitHub organization) maintains it in ZeroPointRepo/youtube-skills, which has 1,040 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on October 6, 2026.

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