TikHub API Helper
liangdabiao/tikhub_api_skill
Searches TikHub's social media API endpoints and calls them from the command line for TikTok, Douyin, Xiaohongshu, Instagram, YouTube, Reddit and more.
Fetches YouTube transcripts, video metadata, channel uploads, search results and playlist contents through TranscriptAPI.com, without Google API quotas or OAuth.
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ZeroPointRepo/youtube-skills youtube-data --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/youtube-data .claude/skills/youtube-data && rm -rf skills-srcUse ~/.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/
Install the "youtube-data" agent skill from https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-data into .claude/skills/youtube-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "youtube-data", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-dataType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ZeroPointRepo/youtube-skills youtube-data --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/youtube-data .agents/skills/youtube-data && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "youtube-data" agent skill from https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-data into .agents/skills/youtube-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "youtube-data", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ZeroPointRepo/youtube-skills youtube-data --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/youtube-data .cursor/skills/youtube-data && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "youtube-data" agent skill from https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-data into .cursor/skills/youtube-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "youtube-data", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ZeroPointRepo/youtube-skills.git --path skills/youtube-data--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ZeroPointRepo/youtube-skills youtube-data --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/youtube-data .gemini/skills/youtube-data && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "youtube-data" agent skill from https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-data into .gemini/skills/youtube-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "youtube-data", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ZeroPointRepo/youtube-skills youtube-dataInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/youtube-data .github/skills/youtube-data && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "youtube-data" agent skill from https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-data into .github/skills/youtube-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "youtube-data", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ZeroPointRepo/youtube-skills youtube-data --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ZeroPointRepo/youtube-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/youtube-data .opencode/skills/youtube-data && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "youtube-data" agent skill from https://github.com/ZeroPointRepo/youtube-skills/tree/main/skills/youtube-data into .opencode/skills/youtube-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "youtube-data", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
youtube-dataFetches YouTube transcripts, video metadata, channel uploads, search results and playlist contents through TranscriptAPI.com, without Google API quotas or OAuth.
The skill calls TranscriptAPI.com as a lighter alternative to Google's YouTube Data API. Every request needs an Authorization bearer header built from TRANSCRIPT_API_KEY, which references/auth-setup.md explains how to get and store, and a User-Agent naming your agent, since a bare default can make Cloudflare block the request with a 403.
The endpoints include a video transcript with optional timestamps and metadata (1 credit), a free info call that checks available languages before spending a credit, video metadata with title, view and like counts, publish date, description, duration, tags and related videos (1 credit), and search (1 credit per page). Channel history and playlist contents are covered too, with an OpenAPI spec at transcriptapi.com/openapi.json and curl examples in references/curl-examples.md. It is not for uploads, account management or research that uses written sources only.
Read from SKILL.md and the folder at commit 4f7994b. It shows what the files ask for, not the result of running them.
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.
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.
Hosts in commands or code, which the agent is likely to contact:
transcriptapi.comyoutube.comi.ytimg.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
TRANSCRIPT_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed.
From compatibility in the SKILL.md frontmatter.
YouTube Data via TranscriptAPI loads about 2.6k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 109 tokens; SKILL.md has 629 words of instructions outside code blocks.
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.
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.
The full file from ZeroPointRepo/youtube-skills at commit 4f7994b, republished under its MIT licence (© ZeroPointRepo). 629 words, ~2,563 tokens.
.claude/skills/youtube-data/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.YouTube data access via TranscriptAPI.com — lightweight alternative to Google's YouTube Data API.
If $TRANSCRIPT_API_KEY is not set, read references/auth-setup.md and follow the instructions there to get and store the key.
Every request needs two headers:
Bearer $TRANSCRIPT_API_KEYHermesAgent/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.Full OpenAPI spec: transcriptapi.com/openapi.json — consult this for the latest parameters and schemas.
GET https://transcriptapi.com/api/v2/youtube/transcript?video_url=VIDEO_URL&format=json&include_timestamp=true&send_metadata=true
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Response:
{
"video_id": "dQw4w9WgXcQ",
"language": "en",
"transcript": [
{ "text": "We're no strangers to love", "start": 18.0, "duration": 3.5 }
],
"metadata": {
"title": "Rick Astley - Never Gonna Give You Up",
"author_name": "Rick Astley",
"author_url": "https://www.youtube.com/@RickAstley",
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg"
}
}Check languages before spending a transcript credit (free), or pull view/like counts, publish date, description, duration, and tags (1 credit):
GET https://transcriptapi.com/api/v2/youtube/info?video_url=VIDEO_URL
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0GET https://transcriptapi.com/api/v2/youtube/video/metadata?video_url=VIDEO_URL&include=details,related
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0video/metadata returns title, viewCountText, likeCountText, publishDate, description, descriptionLinks, channel, thumbnails, plus details (duration, category, tags, caption tracks) and related videos when requested via include.
Naming:
/video/metadatawas previously/video/info. The old path still works but is deprecated.
GET https://transcriptapi.com/api/v2/youtube/search?q=QUERY&type=video&limit=20
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0type also accepts playlist and movie. First page only, you can add sort (relevance/views), upload_date (hour/today/week/month/year), duration (short/medium/long), and features (e.g. hd,subtitles,cc).
Video result fields: videoId, title, channelId, channelTitle, channelHandle, channelVerified, lengthText, viewCountText, publishedTimeText, hasCaptions, thumbnails
Channel result fields (type=channel): channelId, title, handle, url, description, subscriberCount, verified, rssUrl, thumbnails
Channel endpoints accept channel — an @handle, channel URL, or UC... ID. No need to resolve first.
Resolve handle to ID (free):
GET https://transcriptapi.com/api/v2/youtube/channel/resolve?input=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns: {"channel_id": "UCsT0YIqwnpJCM-mx7-gSA4Q", "resolved_from": "@TED"}
Latest 15 videos with exact stats (free):
GET https://transcriptapi.com/api/v2/youtube/channel/latest?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns: channel info, results array with videoId, title, published (ISO), viewCount (exact number), description, thumbnail
All channel videos (paginated, 1 credit/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.0Returns ~100 videos per page + continuation_token for pagination. tab also accepts shorts or streams, and you repeat the same tab when paginating.
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.
Item fields. Every item carries members_only, true only when YouTube badges it "Members only", and those items have no viewCountText. tab=streams items carry lengthText and publishedTimeText (for example Streamed 2 years ago); tab=shorts returns null for both, because YouTube's Shorts grid publishes neither. On the channel-tab feeds (tab=videos with sort, tab=shorts, tab=streams) channelId, channelTitle, channelHandle and index are null.
Search within channel (1 credit):
GET https://transcriptapi.com/api/v2/youtube/channel/search?channel=@TED&q=QUERY&limit=30
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Channel profile (1 credit):
GET https://transcriptapi.com/api/v2/youtube/channel/info?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns: title, handle, verified, subscriberCountText, videoCountText, description, tags, thumbnails, banners, availableTabs
Channel playlists (1 credit/page):
GET https://transcriptapi.com/api/v2/youtube/channel/playlists?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns: results (playlistId, title, url, videoCountText, thumbnails), continuation_token, has_more
Channel community posts (1 credit/page):
GET https://transcriptapi.com/api/v2/youtube/channel/posts?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns: results (postId, authorName, text, publishedTimeText, voteCountText, attachment), continuation_token, has_more
Channel curated sections (1 credit):
GET https://transcriptapi.com/api/v2/youtube/channel/sections?channel=@TED
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns shelves of videos/playlists/shorts/featured channels, in the channel's own order. tab also accepts podcasts or releases.
Accepts playlist — a YouTube playlist URL or playlist ID.
GET https://transcriptapi.com/api/v2/youtube/playlist/videos?playlist=PL_ID
Authorization: Bearer $TRANSCRIPT_API_KEY
User-Agent: YourAgent/1.0Returns: results (videos), playlist_info (title, numVideos, ownerName, viewCount), continuation_token, has_more
| Endpoint | Cost | Data returned |
|---|---|---|
| transcript | 1 | Full transcript + metadata |
| info | free | Basic metadata + languages |
| video/metadata | 1 | Rich metadata (+ details/related) |
| search | 1/page | Video/channel/playlist/movie details |
| channel/resolve | free | Channel ID mapping |
| channel/info | 1 | Channel profile |
| channel/latest | free | 15 videos + exact stats |
| channel/videos | 1/page | ~100/page unsorted, ~30/page sorted |
| channel/search | 1 | Videos matching query |
| channel/playlists | 1/page | Channel's playlists |
| channel/posts | 1/page | Community tab content |
| channel/sections | 1 | Curated home-page shelves |
| playlist/videos | 1/page | 100 videos per page |
| Code | Meaning | Action |
|---|---|---|
| 401 | Bad API key | Check key |
| 402 | No credits | transcriptapi.com/billing |
| 403/1010 | Cloudflare block | Add or fix User-Agent header |
| 404 | Not found | Resource doesn't exist |
| 408 | Timeout | Retry once |
| 422 | Validation error | Check param format |
Free tier: 100 credits, 300 req/min.
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
SKILL.md and 2 other files (references) in skills/youtube-data of ZeroPointRepo/youtube-skills.
Open the folder on GitHubat commit 4f7994b
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.
YouTube Data via TranscriptAPI 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| YouTube Data via TranscriptAPI this skillZeroPointRepo/youtube-skills | 1k | 1 repos | ~2.6k | Automated safety check: Pass | MIT | |
| TikHub API Helperliangdabiao/tikhub_api_skill | 129 | — | ~1.5k | Automated safety check: Pass | None | |
| YoutubeCraftOS-dev/CraftBot | 392 | 1 repos | ~3.7k | Automated safety check: Pass | MIT | |
| Firecrawl Build Onboardingfirecrawl/firecrawl | 190k | 1 repos | ~1.4k | Automated safety check: Notes | ISC | |
| Firecrawl Search Integrationfirecrawl/firecrawl | 190k | 1 repos | ~1.1k | Automated safety check: Pass | ISC | |
| Blog GoogleAgriciDaniel/claude-blog | 2.3k | 1 repos | ~3.3k | Automated safety check: Notes | MIT |
liangdabiao/tikhub_api_skill
Searches TikHub's social media API endpoints and calls them from the command line for TikTok, Douyin, Xiaohongshu, Instagram, YouTube, Reddit and more.
CraftOS-dev/CraftBot
YouTube Data API integration with managed OAuth. An agent skill from CraftOS-dev/CraftBot.
firecrawl/firecrawl
Gets Firecrawl working in a project: signs you in through the browser, saves FIRECRAWL_API_KEY to .env and picks the first SDK or REST path.
firecrawl/firecrawl
Guidance for adding Firecrawl's /search endpoint to product code and agent workflows when a feature starts from a query rather than a URL.
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…
AeternaLabsHQ/pullmd
Read any web page, document, or YouTube video as clean Markdown using PullMD.
ZeroPointRepo/youtube-skills
Fetches timestamped captions or plain-text transcripts for any YouTube video through the TranscriptAPI service, for reading, quoting, translating or accessibility.
ZeroPointRepo/youtube-skills
Fetches timestamped subtitles for any YouTube video through TranscriptAPI, as clean text for reading and translation or timed JSON.
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.
ZeroPointRepo/youtube-skills
Pulls YouTube transcripts, searches videos and channels and browses playlists through the TranscriptAPI service with a single API key.
ZeroPointRepo/youtube-skills
Fetches YouTube transcripts through TranscriptAPI.com so an agent can summarize, quote or translate a video from a link or ID.
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.
Works with
Categories
Fetches YouTube transcripts, video metadata, channel uploads, search results and playlist contents through TranscriptAPI.com, without Google API quotas or OAuth. com as a lighter alternative to Google's YouTube Data API.md explains how to get and store, and a User-Agent naming your agent, since a bare default can make Cloudflare block the request with a 403.
YouTube Data via TranscriptAPI fits situations like: pasted YouTube video, channel or playlist links that need analysis; pulling a transcript to summarize or quote; listing a channel's uploads or searching videos on a topic; checking video metadata such as view counts, publish date and tags.
Run `npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a claude-code`. Or copy the skill folder (skills/youtube-data in ZeroPointRepo/youtube-skills) into .claude/skills/youtube-data in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ZeroPointRepo/youtube-skills --skill youtube-data -a codex`. Or copy the skill folder (skills/youtube-data in ZeroPointRepo/youtube-skills) into .agents/skills/youtube-data in your project. Codex loads it when a task matches its description.
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-data -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-data, .gemini/skills/youtube-data, .github/skills/youtube-data and .opencode/skills/youtube-data in your project.
Going by SKILL.md and its folder, YouTube Data via TranscriptAPI needs credentials named TRANSCRIPT_API_KEY. Our summary lists: A TranscriptAPI key in TRANSCRIPT_API_KEY; Internet access to transcriptapi.com. Compatibility (from SKILL.md): Requires internet access to reach transcriptapi.com. No additional runtimes or dependencies needed..
SKILL.md names 3 domains. In commands or code: transcriptapi.com, youtube.com and i.ytimg.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
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.
YouTube Data via TranscriptAPI is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k 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.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with YouTube Data via TranscriptAPI: TikHub API Helper (liangdabiao/tikhub_api_skill, 129 stars), Youtube (CraftOS-dev/CraftBot, 392 stars), Firecrawl Build Onboarding (firecrawl/firecrawl, 190k stars) and Firecrawl Search Integration (firecrawl/firecrawl, 190k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ZeroPointRepo (a GitHub organization) maintains it in ZeroPointRepo/youtube-skills, which has 1,036 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.