Modal
K-Dense-AI/scientific-agent-skills
Modal is a serverless cloud platform for running Python on demand, including on-demand GPUs.
Cloud computing platform for running Python on GPUs and serverless infrastructure.
$ npx skills add BioTender-max/awesome-bio-agent-skills --skill modal -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install BioTender-max/awesome-bio-agent-skills modal --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/BioTender-max/awesome-bio-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/kdense/modal .claude/skills/modal && 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 "modal" agent skill from https://github.com/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modal into .claude/skills/modal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "modal", 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/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modalType 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 BioTender-max/awesome-bio-agent-skills --skill modal -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install BioTender-max/awesome-bio-agent-skills modal --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BioTender-max/awesome-bio-agent-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/kdense/modal .agents/skills/modal && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "modal" agent skill from https://github.com/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modal into .agents/skills/modal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "modal", 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 BioTender-max/awesome-bio-agent-skills --skill modal -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install BioTender-max/awesome-bio-agent-skills modal --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BioTender-max/awesome-bio-agent-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/kdense/modal .cursor/skills/modal && 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 "modal" agent skill from https://github.com/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modal into .cursor/skills/modal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "modal", 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/BioTender-max/awesome-bio-agent-skills.git --path skills/kdense/modal--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 BioTender-max/awesome-bio-agent-skills --skill modal -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install BioTender-max/awesome-bio-agent-skills modal --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BioTender-max/awesome-bio-agent-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/kdense/modal .gemini/skills/modal && 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 "modal" agent skill from https://github.com/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modal into .gemini/skills/modal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "modal", 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 BioTender-max/awesome-bio-agent-skills modalInstalls 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 BioTender-max/awesome-bio-agent-skills --skill modal -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/BioTender-max/awesome-bio-agent-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/kdense/modal .github/skills/modal && 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 "modal" agent skill from https://github.com/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modal into .github/skills/modal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "modal", 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 BioTender-max/awesome-bio-agent-skills --skill modal -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install BioTender-max/awesome-bio-agent-skills modal --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/BioTender-max/awesome-bio-agent-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/kdense/modal .opencode/skills/modal && 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 "modal" agent skill from https://github.com/BioTender-max/awesome-bio-agent-skills/tree/main/skills/kdense/modal into .opencode/skills/modal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "modal", 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.
modalCloud computing platform for running Python on GPUs and serverless infrastructure.
Modal is an agent skill from BioTender-max/awesome-bio-agent-skills. Cloud computing platform for running Python on GPUs and serverless infrastructure. Use when deploying AI/ML models, running GPU-accelerated workloads, serving web endpoints, scheduling batch jobs, or scaling Python code to the cloud. Use this skill whenever the user mentions Modal, serverless GPU compute, deploying ML models to the cloud, serving inference endpoints, running batch processing in the cloud, or needs to scale Python workloads beyond their local machine. Also use when the user wants to run code on…
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including reference files (for example `references/api_reference.md`, `references/examples.md` and `references/functions.md`).
It sits in Backend & APIs, covering GPU and accelerator computing, Background jobs and Serverless. It works with Python. The repository describes itself as: A curated collection of AI agent skills for biomedical research, covering genomics, proteomics, single-cell analysis, clinical AI, and protein design. The licence is Apache-2.0.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 8cbdd18. 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:
modaluvFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
modal.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
MODAL_TOKEN_SECRETAPI_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Modal loads about 3.1k tokens when it runs, and up to ~17k if it reads all its reference files. Until then it costs about 150 tokens; SKILL.md has 876 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 noted patterns worth knowing about, such as sudo or a known installer.
not, check for those values in a local `.env` file and load them if appropriate for the workflow.already available in the environment or `.env`, generate them at https://modal.com/settings- `.env()` — Set environment variablesOr from a `.env` file: `modal.Secret.from_dotenv()`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 BioTender-max/awesome-bio-agent-skills at commit 8cbdd18, republished under its Apache-2.0 licence (© BioTender-max). 876 words, ~3,092 tokens.
.claude/skills/modal/SKILL.md (or your agent's skills folder). This skill also uses 12 other files; get the full folder from GitHub.Modal is a cloud platform for running Python code serverlessly, with a focus on AI/ML workloads. Key capabilities:
Everything in Modal is defined as code — no YAML, no Dockerfiles required (though both are supported).
Use this skill when:
uv pip install modalPrefer existing credentials before creating new ones:
MODAL_TOKEN_ID and MODAL_TOKEN_SECRET are already present in the current environment..env file and load them if appropriate for the workflow.modal setup or generating fresh tokens if neither source already provides credentials.modal setupThis opens a browser for authentication. For CI/CD or headless environments, use environment variables:
export MODAL_TOKEN_ID=<your-token-id>
export MODAL_TOKEN_SECRET=<your-token-secret>If tokens are not already available in the environment or .env, generate them at https://modal.com/settings
Modal offers a free tier with $30/month in credits.
Reference: See references/getting-started.md for detailed setup and first app walkthrough.
A Modal App groups related functions. Functions decorated with @app.function() run remotely in the cloud:
import modal
app = modal.App("my-app")
@app.function()
def square(x):
return x ** 2
@app.local_entrypoint()
def main():
# .remote() runs in the cloud
print(square.remote(42))Run with modal run script.py. Deploy with modal deploy script.py.
Reference: See references/functions.md for lifecycle hooks, classes, .map(), .spawn(), and more.
Modal builds container images from Python code. The recommended package installer is uv:
image = (
modal.Image.debian_slim(python_version="3.11")
.uv_pip_install("torch==2.8.0", "transformers", "accelerate")
.apt_install("git")
)
@app.function(image=image)
def inference(prompt):
from transformers import pipeline
pipe = pipeline("text-generation", model="meta-llama/Llama-3-8B")
return pipe(prompt)Key image methods:
.uv_pip_install() — Install Python packages with uv (recommended).pip_install() — Install with pip (fallback).apt_install() — Install system packages.run_commands() — Run shell commands during build.run_function() — Run Python during build (e.g., download model weights).add_local_python_source() — Add local modules.env() — Set environment variablesReference: See references/images.md for Dockerfiles, micromamba, caching, GPU build steps.
Request GPUs via the gpu parameter:
@app.function(gpu="H100")
def train_model():
import torch
device = torch.device("cuda")
# GPU training code here
# Multiple GPUs
@app.function(gpu="H100:4")
def distributed_training():
...
# GPU fallback chain
@app.function(gpu=["H100", "A100-80GB", "A100-40GB"])
def flexible_inference():
...Available GPUs: T4, L4, A10, L40S, A100-40GB, A100-80GB, H100, H200, B200, B200+
gpu="H100!" to prevent auto-upgradeReference: See references/gpu.md for GPU selection guidance and multi-GPU training.
Volumes provide distributed, persistent file storage:
vol = modal.Volume.from_name("model-weights", create_if_missing=True)
@app.function(volumes={"/data": vol})
def save_model():
# Write to the mounted path
with open("/data/model.pt", "wb") as f:
torch.save(model.state_dict(), f)
@app.function(volumes={"/data": vol})
def load_model():
model.load_state_dict(torch.load("/data/model.pt"))modal volume ls, modal volume put, modal volume getReference: See references/volumes.md for v2 volumes, concurrent writes, and best practices.
Securely pass credentials to functions:
@app.function(secrets=[modal.Secret.from_name("my-api-keys")])
def call_api():
import os
api_key = os.environ["API_KEY"]
# Use the keyCreate secrets via CLI: modal secret create my-api-keys API_KEY=sk-xxx
Or from a .env file: modal.Secret.from_dotenv()
Reference: See references/secrets.md for dashboard setup, multiple secrets, and templates.
Serve models and APIs as web endpoints:
@app.function()
@modal.fastapi_endpoint()
def predict(text: str):
return {"result": model.predict(text)}modal serve script.py — Development with hot reload and temporary URLmodal deploy script.py — Production deployment with permanent URLReference: See references/web-endpoints.md for ASGI/WSGI apps, streaming, auth, and WebSockets.
Run functions on a schedule:
@app.function(schedule=modal.Cron("0 9 * * *")) # Daily at 9 AM UTC
def daily_pipeline():
# ETL, retraining, scraping, etc.
...
@app.function(schedule=modal.Period(hours=6))
def periodic_check():
...Deploy with modal deploy script.py to activate the schedule.
modal.Cron("...") — Standard cron syntax, stable across deploysmodal.Period(hours=N) — Fixed interval, resets on redeployReference: See references/scheduled-jobs.md for cron syntax and management.
Modal autoscales containers automatically. Configure limits:
@app.function(
max_containers=100, # Upper limit
min_containers=2, # Keep warm for low latency
buffer_containers=5, # Reserve capacity
scaledown_window=300, # Idle seconds before shutdown
)
def process(data):
...Process inputs in parallel with .map():
results = list(process.map([item1, item2, item3, ...]))Enable concurrent request handling per container:
@app.function()
@modal.concurrent(max_inputs=10)
async def handle_request(req):
...Reference: See references/scaling.md for .map(), .starmap(), .spawn(), and limits.
@app.function(
cpu=4.0, # Physical cores (not vCPUs)
memory=16384, # MiB
ephemeral_disk=51200, # MiB (up to 3 TiB)
timeout=3600, # Seconds
)
def heavy_computation():
...Defaults: 0.125 CPU cores, 128 MiB memory. Billed on max(request, usage).
Reference: See references/resources.md for limits and billing details.
For stateful workloads (e.g., loading a model once and serving many requests):
@app.cls(gpu="L40S", image=image)
class Predictor:
@modal.enter()
def load_model(self):
self.model = load_heavy_model() # Runs once on container start
@modal.method()
def predict(self, text: str):
return self.model(text)
@modal.exit()
def cleanup(self):
... # Runs on container shutdownCall with: Predictor().predict.remote("hello")
import modal
app = modal.App("llm-service")
image = (
modal.Image.debian_slim(python_version="3.11")
.uv_pip_install("vllm")
)
@app.cls(gpu="H100", image=image, min_containers=1)
class LLMService:
@modal.enter()
def load(self):
from vllm import LLM
self.llm = LLM(model="meta-llama/Llama-3-70B")
@modal.method()
@modal.fastapi_endpoint(method="POST")
def generate(self, prompt: str, max_tokens: int = 256):
outputs = self.llm.generate([prompt], max_tokens=max_tokens)
return {"text": outputs[0].outputs[0].text}app = modal.App("batch-pipeline")
vol = modal.Volume.from_name("pipeline-data", create_if_missing=True)
@app.function(volumes={"/data": vol}, cpu=4.0, memory=8192)
def process_chunk(chunk_id: int):
import pandas as pd
df = pd.read_parquet(f"/data/input/chunk_{chunk_id}.parquet")
result = heavy_transform(df)
result.to_parquet(f"/data/output/chunk_{chunk_id}.parquet")
return len(result)
@app.local_entrypoint()
def main():
chunk_ids = list(range(100))
results = list(process_chunk.map(chunk_ids))
print(f"Processed {sum(results)} total rows")app = modal.App("etl-pipeline")
@app.function(
schedule=modal.Cron("0 */6 * * *"), # Every 6 hours
secrets=[modal.Secret.from_name("db-credentials")],
)
def etl_job():
import os
db_url = os.environ["DATABASE_URL"]
# Extract, transform, load
...| Command | Description |
|---|---|
modal setup | Authenticate with Modal |
modal run script.py | Run a script's local entrypoint |
modal serve script.py | Dev server with hot reload |
modal deploy script.py | Deploy to production |
modal volume ls <name> | List files in a volume |
modal volume put <name> <file> | Upload file to volume |
modal volume get <name> <file> | Download file from volume |
modal secret create <name> K=V | Create a secret |
modal secret list | List secrets |
modal app list | List deployed apps |
modal app stop <name> | Stop a deployed app |
Detailed documentation for each topic:
references/getting-started.md — Installation, authentication, first appreferences/functions.md — Functions, classes, lifecycle hooks, remote executionreferences/images.md — Container images, package installation, cachingreferences/gpu.md — GPU types, selection, multi-GPU, trainingreferences/volumes.md — Persistent storage, file management, v2 volumesreferences/secrets.md — Credentials, environment variables, dotenvreferences/web-endpoints.md — FastAPI, ASGI/WSGI, streaming, auth, WebSocketsreferences/scheduled-jobs.md — Cron, periodic schedules, managementreferences/scaling.md — Autoscaling, concurrency, .map(), limitsreferences/resources.md — CPU, memory, disk, timeout configurationreferences/examples.md — Common use cases and patternsreferences/api_reference.md — Key API classes and methodsRead these files when detailed information is needed beyond this overview.
© BioTender-max, Apache-2.0. 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 12 other files (references) in skills/kdense/modal of BioTender-max/awesome-bio-agent-skills.
Open the folder on GitHubat commit 8cbdd18
Modal 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 |
|---|---|---|---|---|---|---|
| Modal this skillBioTender-max/awesome-bio-agent-skills | 197 | — | ~3.1k | Automated safety check: Notes | Apache-2.0 | |
| ModalK-Dense-AI/scientific-agent-skills | 48k | 1 repos | ~4.5k | Automated safety check: Notes | Apache-2.0 | |
| Modaldavila7/claude-code-templates | 32k | 8 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Modal Serverless GPUOrchestra-Research/AI-Research-SKILLs | 13k | 5 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Testing Mwaa Workflowaws/agent-toolkit-for-aws | 2.8k | — | ~3.8k | Automated safety check: Pass | Apache-2.0 | |
| Serverless ModalAI4Scientist/nano-scientist | 128 | 4 repos | ~3.1k | Automated safety check: Notes | None |
K-Dense-AI/scientific-agent-skills
Modal is a serverless cloud platform for running Python on demand, including on-demand GPUs.
davila7/claude-code-templates
Run Python code in the cloud with serverless containers, GPUs, and autoscaling.
Orchestra-Research/AI-Research-SKILLs
Serverless GPU cloud platform for running ML workloads. An agent skill from Orchestra-Research/AI-Research-SKILLs.
aws/agent-toolkit-for-aws
Tests Amazon MWAA workflow execution end-to-end: trigger a run and monitor it to completion for Provisioned (Python DAG, via Airflow REST API) and Serverless (YAML workflow, via StartWorkflowRun).
AI4Scientist/nano-scientist
Run GPU workloads on Modal — training, fine-tuning, inference, batch processing.
aws/agent-toolkit-for-aws
Authors and deploys MWAA workflow artifacts: Python Airflow DAGs for provisioned environments or YAML workflow files for Serverless.
BioTender-max/awesome-bio-agent-skills
Critically review, score, compare, and rank one or more AI scientist outputs for biology, bioinformatics, computational life science, or adjacent research tasks.
BioTender-max/awesome-bio-agent-skills
Queries JGI Lakehouse (Dremio) for genomics metadata from GOLD, IMG, Mycocosm, Phytozome.
BioTender-max/awesome-bio-agent-skills
Operator toolkit for nf-core/pacsomatic matched tumor-normal workflows from BAM inputs.
BioTender-max/awesome-bio-agent-skills
Assess paper and journal impact using OpenAlex citation counts, optional Altmetric data, and curated journal impact-factor references.
BioTender-max/awesome-bio-agent-skills
Search arXiv preprints through the official arXiv API and turn arXiv IDs into local Markdown summaries.
BioTender-max/awesome-bio-agent-skills
Search bioRxiv preprints through the official bioRxiv API and locally filter titles, abstracts, and authors for keyword queries.
Works with
Categories
Cloud computing platform for running Python on GPUs and serverless infrastructure. Modal is an agent skill from BioTender-max/awesome-bio-agent-skills. Cloud computing platform for running Python on GPUs and serverless infrastructure.
Modal fits situations like: deploying AI/ML models; running GPU-accelerated workloads; serving web endpoints; scheduling batch jobs.
Run `npx skills add BioTender-max/awesome-bio-agent-skills --skill modal -a claude-code`. Or copy the skill folder (skills/kdense/modal in BioTender-max/awesome-bio-agent-skills) into .claude/skills/modal in your project. Claude Code loads it when a task matches its description.
Run `npx skills add BioTender-max/awesome-bio-agent-skills --skill modal -a codex`. Or copy the skill folder (skills/kdense/modal in BioTender-max/awesome-bio-agent-skills) into .agents/skills/modal 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 BioTender-max/awesome-bio-agent-skills --skill modal -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/modal, .gemini/skills/modal, .github/skills/modal and .opencode/skills/modal in your project.
Going by SKILL.md and its folder, Modal needs the command-line tools its instructions call (modal and uv) and credentials named MODAL_TOKEN_SECRET and API_KEY. Our summary lists: Python 3; A credential in MODAL_TOKEN_SECRET; A credential in API_KEY.
SKILL.md names 1 domain. As links in the text: modal.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Modal is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k 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 14k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Modal: Modal (K-Dense-AI/scientific-agent-skills, 48k stars), Modal (davila7/claude-code-templates, 32k stars), Modal Serverless GPU (Orchestra-Research/AI-Research-SKILLs, 13k stars) and Testing Mwaa Workflow (aws/agent-toolkit-for-aws, 2.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
BioTender-max (a GitHub user) maintains it in BioTender-max/awesome-bio-agent-skills, which has 197 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on July 1, 2026.
Source: BioTender-max/awesome-bio-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.