Agent Browser
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
Generate beautiful code snippet images using ray.so. An agent skill from intellectronica/agent-skills.
$ npx skills add intellectronica/agent-skills --skill ray-so-code-snippet -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install intellectronica/agent-skills ray-so-code-snippet --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/intellectronica/agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/ray-so-code-snippet .claude/skills/ray-so-code-snippet && 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 "ray-so-code-snippet" agent skill from https://github.com/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippet into .claude/skills/ray-so-code-snippet/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ray-so-code-snippet", 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/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippetType 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 intellectronica/agent-skills --skill ray-so-code-snippet -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install intellectronica/agent-skills ray-so-code-snippet --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/intellectronica/agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/ray-so-code-snippet .agents/skills/ray-so-code-snippet && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ray-so-code-snippet" agent skill from https://github.com/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippet into .agents/skills/ray-so-code-snippet/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ray-so-code-snippet", 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 intellectronica/agent-skills --skill ray-so-code-snippet -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install intellectronica/agent-skills ray-so-code-snippet --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/intellectronica/agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/ray-so-code-snippet .cursor/skills/ray-so-code-snippet && 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 "ray-so-code-snippet" agent skill from https://github.com/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippet into .cursor/skills/ray-so-code-snippet/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ray-so-code-snippet", 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/intellectronica/agent-skills.git --path skills/ray-so-code-snippet--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 intellectronica/agent-skills --skill ray-so-code-snippet -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install intellectronica/agent-skills ray-so-code-snippet --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/intellectronica/agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/ray-so-code-snippet .gemini/skills/ray-so-code-snippet && 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 "ray-so-code-snippet" agent skill from https://github.com/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippet into .gemini/skills/ray-so-code-snippet/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ray-so-code-snippet", 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 intellectronica/agent-skills ray-so-code-snippetInstalls 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 intellectronica/agent-skills --skill ray-so-code-snippet -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/intellectronica/agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/ray-so-code-snippet .github/skills/ray-so-code-snippet && 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 "ray-so-code-snippet" agent skill from https://github.com/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippet into .github/skills/ray-so-code-snippet/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ray-so-code-snippet", 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 intellectronica/agent-skills --skill ray-so-code-snippet -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install intellectronica/agent-skills ray-so-code-snippet --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/intellectronica/agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/ray-so-code-snippet .opencode/skills/ray-so-code-snippet && 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 "ray-so-code-snippet" agent skill from https://github.com/intellectronica/agent-skills/tree/main/skills/ray-so-code-snippet into .opencode/skills/ray-so-code-snippet/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ray-so-code-snippet", 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.
ray-so-code-snippetGenerate beautiful code snippet images using ray.so. An agent skill from intellectronica/agent-skills.
Ray So Code Snippet is an agent skill from intellectronica/agent-skills. Generate beautiful code snippet images using ray.so. This skill should be used when the user asks to create a code image, code screenshot, code snippet image, or wants to make their code look pretty for sharing. Saves images locally to the current working directory or a user-specified path.
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering Browser automation. The repository describes itself as: @intellectronica's agent skills. The licence is CC0-1.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9b0e00a. 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.
Shell commands in SKILL.md call:
python3curlFrom 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:
ray.soraw.githubusercontent.comcdn.jsdelivr.netFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Ray So Code Snippet loads about 3.1k tokens when it runs. Until then it costs about 78 tokens; SKILL.md has 899 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 intellectronica/agent-skills at commit 9b0e00a, republished under its CC0-1.0 licence (© intellectronica). 899 words, ~3,128 tokens.
.claude/skills/ray-so-code-snippet/SKILL.md (or your agent's skills folder).Generate beautiful code snippet images using ray.so and save them locally.
agent-browser for screenshot capture (check availability first)Before proceeding, verify that agent-browser is available:
which agent-browserIf agent-browser is not found in the PATH, inform the user that this skill requires agent-browser and cannot proceed without it.
Fetch the current themes and languages from ray.so's GitHub repository using curl:
# Fetch and parse available themes
curl -s "https://raw.githubusercontent.com/raycast/ray-so/main/app/(navigation)/(code)/store/themes.ts" | grep -oE 'id:\s*"[^"]+"' | sed 's/id:\s*"//;s/"//' | sort -u
# Fetch and parse available languages
curl -s "https://raw.githubusercontent.com/raycast/ray-so/main/app/(navigation)/(code)/util/languages.ts" | grep -oE '^[[:space:]]*"?[a-zA-Z0-9+#-]+"?\s*:\s*\{' | sed 's/[[:space:]]*"//g;s/".*//;s/:.*//' | sort -uMUST use AskUserQuestion to ask for EVERY parameter, presenting ALL available options. Ask for parameters in this order:
Present ALL available themes. In the question, list every theme fetched from step 2. Example:
Question: "Which theme would you like?"
Description: "Available themes: [list ALL themes from curl output]"
Options (pick 4 popular ones for quick select):
- breeze (default, purple gradient)
- midnight (cyan-blue)
- vercel (minimalist dark)
- sunset (warm orange)
Note: User can select "Other" to type any theme from the full listInfer the language when possible. Skip this question if:
.py → python, .js → javascript, .ts → typescript, .rs → rust, .go → go, etc.)def/import → python, func/package → go, fn/let mut → rust)Only ask this question if the language cannot be confidently inferred:
Question: "Which language for syntax highlighting?"
Description: "Available languages: [list ALL languages from curl output]"
Options:
- auto (auto-detect)
- javascript
- python
- typescript
Note: User can select "Other" to type any language from the full listQuestion: "Dark or light mode?"
Options:
- Dark mode (default)
- Light modeQuestion: "Show the gradient background?"
Options:
- Yes, show background (default)
- No, transparent/minimal backgroundQuestion: "How much padding around the code?"
Options:
- 16 (compact)
- 32 (small)
- 64 (medium, default)
- 128 (large)Question: "Show line numbers?"
Options:
- No (default)
- YesQuestion: "Add a title above the code? (e.g., filename)"
Options:
- No title (default)
- Yes, add title
If yes, ask for the title text.Note: Do NOT ask about output path/filename. Save to the current working directory with a sensible filename (e.g., rayso-snippet.png, or based on the title if provided like fibonacci.png). Only use a different path if the user explicitly specifies one in their original request.
CRITICAL: ALL parameters must be in the URL hash (after #), NOT in the query string.
Build the URL using shell commands:
# 1. Base64 encode the code
CODE_BASE64=$(echo -n 'YOUR_CODE_HERE' | base64)
# 2. URL encode the base64 string
CODE_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$CODE_BASE64'))")
# 3. Build the URL with ALL parameters in the hash
# Format: https://ray.so/#param1=value1¶m2=value2&code=ENCODED_CODE
# Do NOT include width parameter - let ray.so auto-size to fit content
URL="https://ray.so/#theme=THEME&padding=PADDING&background=BACKGROUND&darkMode=DARKMODE&language=LANGUAGE&code=${CODE_ENCODED}"
# Add optional parameters if needed:
# If lineNumbers: add "&lineNumbers=true" before &code=
# If title: add "&title=URL_ENCODED_TITLE" before &code=URL Hash Parameters:
| Parameter | Values | Default |
|---|---|---|
| theme | Any theme from list | breeze |
| padding | 16, 32, 64, 128 | 64 |
| background | true, false | true |
| darkMode | true, false | true |
| language | Any language from list, or "auto" | auto |
| lineNumbers | true, false | false |
| title | URL-encoded string | (none) |
| width | Number (pixels) | auto |
| code | Base64-encoded, then URL-encoded | (required) |
Note on width: Do NOT include the width parameter unless you specifically need a fixed width. Without it, ray.so auto-sizes the frame to fit the code content, avoiding unnecessary empty space.
Example URL construction:
# For code: for i in range(23):\n print(i)
# Theme: midnight, Padding: 64, Dark mode: true, Background: true, Language: python, Title: test.py
CODE='for i in range(23):
print(i)'
CODE_BASE64=$(echo -n "$CODE" | base64)
CODE_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$CODE_BASE64'))")
TITLE_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('test.py'))")
URL="https://ray.so/#theme=midnight&padding=64&background=true&darkMode=true&language=python&title=${TITLE_ENCODED}&code=${CODE_ENCODED}"
echo "$URL"MUST use agent-browser (verified in Step 1). This approach uses the html-to-image library (same as ray.so's internal export) with high pixelRatio for crisp, sharp text rendering.
IMPORTANT: Always use a unique session name with --session to avoid stale session issues.
# Generate unique session name
SESSION="rayso-$(date +%s)"
# 1. Set viewport
agent-browser --session $SESSION set viewport 1400 900
# 2. Open the URL
agent-browser --session $SESSION open "$URL"
# 3. Wait for the page to fully render
agent-browser --session $SESSION wait --load networkidle
agent-browser --session $SESSION wait 3000
# 4. Load html-to-image library (same library ray.so uses internally)
agent-browser --session $SESSION eval 'new Promise((r,e)=>{const s=document.createElement("script");s.src="https://cdn.jsdelivr.net/npm/html-to-image@1.11.11/dist/html-to-image.js";s.onload=r;s.onerror=e;document.head.appendChild(s)})'
# 5. Capture at 4x resolution using html-to-image (produces crisp text)
agent-browser --session $SESSION eval 'htmlToImage.toPng(document.querySelector("#frame > div"),{pixelRatio:4,skipAutoScale:true})' > /tmp/rayso-dataurl-$SESSION.txt
# 6. Close the browser
agent-browser --session $SESSION close
# 7. Convert data URL to PNG file
DATAURL=$(cat /tmp/rayso-dataurl-$SESSION.txt | tr -d '"' | tr -d '\n')
echo "$DATAURL" | sed 's/data:image\/png;base64,//' | base64 -d > /path/to/output.png
# 8. Clean up temp file
rm /tmp/rayso-dataurl-$SESSION.txtCritical notes:
html-to-image library which is what ray.so uses for its own export featurepixelRatio: 4 produces high-DPI images with crisp, sharp text (4x native resolution)Report the saved file location to the user. The task is complete - do not perform any additional checks, explorations, or verifications after the screenshot is saved.
User: "Create a code snippet image of this Python function"
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)Check which agent-browser - confirmed available
Fetch themes and languages:
curl -s "https://raw.githubusercontent.com/raycast/ray-so/main/app/(navigation)/(code)/store/themes.ts" | grep -oE 'id:\s*"[^"]+"' | sed 's/id:\s*"//;s/"//' | sort -uAsk user for parameters via AskUserQuestion:
def syntax - not askedBuild URL (all params in hash, no width for auto-sizing):
CODE='def fibonacci(n):
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)'
CODE_BASE64=$(echo -n "$CODE" | base64)
CODE_ENCODED=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$CODE_BASE64'))")
URL="https://ray.so/#theme=midnight&padding=64&background=true&darkMode=true&language=python&code=${CODE_ENCODED}"SESSION="rayso-$(date +%s)"
agent-browser --session $SESSION set viewport 1400 900
agent-browser --session $SESSION open "$URL"
agent-browser --session $SESSION wait --load networkidle
agent-browser --session $SESSION wait 3000
# Load html-to-image library
agent-browser --session $SESSION eval 'new Promise((r,e)=>{const s=document.createElement("script");s.src="https://cdn.jsdelivr.net/npm/html-to-image@1.11.11/dist/html-to-image.js";s.onload=r;s.onerror=e;document.head.appendChild(s)})'
# Capture at 4x resolution
agent-browser --session $SESSION eval 'htmlToImage.toPng(document.querySelector("#frame > div"),{pixelRatio:4,skipAutoScale:true})' > /tmp/rayso-dataurl-$SESSION.txt
agent-browser --session $SESSION close
# Save as PNG
DATAURL=$(cat /tmp/rayso-dataurl-$SESSION.txt | tr -d '"' | tr -d '\n')
echo "$DATAURL" | sed 's/data:image\/png;base64,//' | base64 -d > ./fibonacci.png
rm /tmp/rayso-dataurl-$SESSION.txtThis skill uses the html-to-image library with pixelRatio: 4 to produce high-quality images with crisp, sharp text. This is the same rendering approach that ray.so uses for its built-in export feature.
Output quality:
Adjusting resolution:
pixelRatio:4 to pixelRatio:2 in the eval commandpixelRatio:6 (same as ray.so's "6x" export option)Forcing a specific width:
&width=NUMBER to the URL if you need a fixed width (e.g., for consistent sizing across multiple images)#title=filename.py&code=...#frame > div may have changed; inspect the page structure--session flag© intellectronica, CC0-1.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/ray-so-code-snippet of intellectronica/agent-skills.
Open the folder on GitHubat commit 9b0e00a
Ray So Code Snippet 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 |
|---|---|---|---|---|---|---|
| Ray So Code Snippet this skillintellectronica/agent-skills | 295 | — | ~3.1k | Automated safety check: Pass | CC0-1.0 | |
| Agent Browserquran/quran.com-frontend-next | 1.9k | 42 repos | ~3.3k | Automated safety check: Pass | None | |
| Dev-Browser CLI AutomationSawyerHood/dev-browser | 6.7k | 1 repos | ~455 | Automated safety check: Pass | MIT | |
| Agent Browsersuperagent-ai/grok-cli | 3.5k | 1 repos | ~633 | Automated safety check: Pass | MIT | |
| Browser Automationopenclaw/openclaw | 392k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Camoufox CLIBin-Huang/camoufox-cli | 350 | 1 repos | ~4.5k | Automated safety check: Pass | MIT |
quran/quran.com-frontend-next
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
SawyerHood/dev-browser
Browser automation with persistent named pages via the dev-browser CLI. Use when users ask to navigate websites, fill forms, take screenshots, extract web…
superagent-ai/grok-cli
Use the host-side agent-browser CLI for local browser smoke tests, screenshots, snapshots, and simple UI validation against forwarded localhost URLs.
openclaw/openclaw
A skill your agent uses when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.
Bin-Huang/camoufox-cli
Anti-detect browser automation CLI & Skills for AI agents. An agent skill from Bin-Huang/camoufox-cli.
VibiumDev/vibium
Automate browsers with the Vibium CLI. An agent skill from VibiumDev/vibium.
intellectronica/agent-skills
Render Mermaid diagrams as SVG and PNG using the Beautiful Mermaid library.
intellectronica/agent-skills
Generate and edit images using OpenAI's GPT Image 1.5 model.
intellectronica/agent-skills
Generate and edit images using Google's Nano Banana 2 (Gemini 3.1 Flash Image Preview) API.
intellectronica/agent-skills
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API.
intellectronica/agent-skills
This skill provides comprehensive instructions for interacting with the Notion API via REST calls.
intellectronica/agent-skills
Extract transcripts from YouTube videos. An agent skill from intellectronica/agent-skills.
Categories
Generate beautiful code snippet images using ray.so. An agent skill from intellectronica/agent-skills. Ray So Code Snippet is an agent skill from intellectronica/agent-skills.so.
Ray So Code Snippet fits situations like: asks to create a code image; code screenshot; code snippet image; wants to make their code look pretty for sharing.
Run `npx skills add intellectronica/agent-skills --skill ray-so-code-snippet -a claude-code`. Or copy the skill folder (skills/ray-so-code-snippet in intellectronica/agent-skills) into .claude/skills/ray-so-code-snippet in your project. Claude Code loads it when a task matches its description.
Run `npx skills add intellectronica/agent-skills --skill ray-so-code-snippet -a codex`. Or copy the skill folder (skills/ray-so-code-snippet in intellectronica/agent-skills) into .agents/skills/ray-so-code-snippet 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 intellectronica/agent-skills --skill ray-so-code-snippet -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ray-so-code-snippet, .gemini/skills/ray-so-code-snippet, .github/skills/ray-so-code-snippet and .opencode/skills/ray-so-code-snippet in your project.
Going by SKILL.md and its folder, Ray So Code Snippet needs the command-line tools its instructions call (python3 and curl). Our summary lists: Python 3.
SKILL.md names 3 domains. In commands or code: ray.so, raw.githubusercontent.com and cdn.jsdelivr.net; 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.
Ray So Code Snippet is published under the CC0-1.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k 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.
Skills that share tags, products or a category with Ray So Code Snippet: Agent Browser (quran/quran.com-frontend-next, 1.9k stars), Dev-Browser CLI Automation (SawyerHood/dev-browser, 6.7k stars), Agent Browser (superagent-ai/grok-cli, 3.5k stars) and Browser Automation (openclaw/openclaw, 392k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
intellectronica (a GitHub user) maintains it in intellectronica/agent-skills, which has 295 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on April 25, 2026.
Source: intellectronica/agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.