Godot Gdscript Patterns
925236118/AlphaAgent
Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization.
A skill your agent uses when the user wants to learn Godot while building — teaching mode that explains the concept, the editor setup, and what to verify, instead of just delivering code.
$ npx skills add jame581/GodotPrompter --skill godot-mentor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jame581/GodotPrompter godot-mentor --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/jame581/GodotPrompter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/godot-mentor .claude/skills/godot-mentor && 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 "godot-mentor" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-mentor into .claude/skills/godot-mentor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-mentor", 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/jame581/GodotPrompter/tree/master/skills/godot-mentorType 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 jame581/GodotPrompter --skill godot-mentor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jame581/GodotPrompter godot-mentor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/godot-mentor .agents/skills/godot-mentor && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "godot-mentor" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-mentor into .agents/skills/godot-mentor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-mentor", 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 jame581/GodotPrompter --skill godot-mentor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jame581/GodotPrompter godot-mentor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/godot-mentor .cursor/skills/godot-mentor && 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 "godot-mentor" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-mentor into .cursor/skills/godot-mentor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-mentor", 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/jame581/GodotPrompter.git --path skills/godot-mentor--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 jame581/GodotPrompter --skill godot-mentor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jame581/GodotPrompter godot-mentor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/godot-mentor .gemini/skills/godot-mentor && 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 "godot-mentor" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-mentor into .gemini/skills/godot-mentor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-mentor", 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 jame581/GodotPrompter godot-mentorInstalls 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 jame581/GodotPrompter --skill godot-mentor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/godot-mentor .github/skills/godot-mentor && 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 "godot-mentor" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-mentor into .github/skills/godot-mentor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-mentor", 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 jame581/GodotPrompter --skill godot-mentor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jame581/GodotPrompter godot-mentor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jame581/GodotPrompter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/godot-mentor .opencode/skills/godot-mentor && 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 "godot-mentor" agent skill from https://github.com/jame581/GodotPrompter/tree/master/skills/godot-mentor into .opencode/skills/godot-mentor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "godot-mentor", 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.
godot-mentorA skill your agent uses when the user wants to learn Godot while building — teaching mode that explains the concept, the editor setup, and what to verify, instead of just delivering code.
Godot Mentor is an agent skill from jame581/GodotPrompter. Use when the user wants to learn Godot while building — teaching mode that explains the concept, the editor setup, and what to verify, instead of just delivering code. Triggers on "teach me", "explain as we go", "I'm learning Godot", "guide me", "walk me through", "help me understand".
Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/editor-navigation.md` and `references/editor-recipes.md`).
It sits in Game Development, covering Game development. It works with Godot. The repository describes itself as: Agentic skills framework for Godot 4.x. Domain-specific skills for AI coding agents (Claude Code, Copilot, Antigravity, Cursor). The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1e7d79d. 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 bash, json, gdscript and csharp).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Godot Mentor loads about 3.2k tokens when it runs, and up to ~15k if it reads all its reference files. Until then it costs about 75 tokens; SKILL.md has 1,590 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 jame581/GodotPrompter at commit 1e7d79d, republished under its MIT licence (© jame581). 1,590 words, ~3,168 tokens.
.claude/skills/godot-mentor/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.Related skills: godot-brainstorming for design exploration before building, godot-project-setup for scaffolding, godot-code-review for reviewing finished work, godot-debugging for diagnosing runtime issues.
Mentor mode changes the shape of an answer, not its source of truth. It wraps the domain skills — it never replaces them.
Always load the matching domain skill first, then deliver it through the contract below.
"add double jump" + mentor mode
1. invoke godot-prompter:player-controller <- still authoritative
2. deliver its guidance through the 5 beats <- what mentor mode addsAnswering from general Godot knowledge because "it's just teaching" is the primary failure of
this mode. The routing table in using-godot-prompter applies in full.
<!-- MENTOR-CARD-START -->
Mentor mode is ACTIVE for this project. Load the matching godot-prompter:* domain skill
first, then deliver it through these five beats:
Editor beat: click-paths come from the references, never from memory. Say freely what to
set up: which nodes to add, which properties to set (by property name) and to what values, which
exported variables to wire, which resource goes where. Before telling the learner anything they
click, press, or read on screen — a menu or right-click item, a dropdown entry, an Inspector
section name, a dock, tab, dialog, or button, a keyboard shortcut, or where any of it sits —
invoke godot-prompter:godot-mentor and read its references/editor-recipes.md (how to do it)
or references/editor-navigation.md (where it is), then use the wording given for the project's
Godot version. That applies to a click-path found in a domain skill too. If the references do
not cover it, name the panel only if editor-navigation.md lists it, say the rest is not
covered, and stop — a wrong click-path is worse than none.
Scope: exactly what was asked. Deliver the requested feature complete and sound, including the limits that stop it breaking in play (a dash needs a cooldown or air limit). Never hold part of the ask back for Beat 5. Add nothing else: domain recipes are production-complete, so strip their extras (tweens, colour flashes, extra methods or signals) unless the user asked for them. Beat 5 may name one of those extras.
Off-ramp. "just give me the code" / "skip the explanation" → drop to normal delivery and
set "mode": "normal" in the state file.
With godot-grill: when the work is new or its requirements are unclear, let godot-grill
settle the decisions first; mentor mode then teaches the result.
<!-- MENTOR-CARD-END -->
State lives in the user's home directory, keyed by project path — never in the user's game repository:
~/.godot-prompter/state/<first-16-hex-of-sha256(CANONICAL project path)>.jsonCanonical path form — get this exactly right or the hook will not find the file. Absolute, forward slashes, native drive letter:
| Platform | Canonical form |
|---|---|
| Windows | C:/Users/you/game — not C:\Users\you\game, and not /c/Users/you/game |
| macOS / Linux | /home/you/game |
The same directory has two spellings on Windows: bash sees /c/Users/you/game, most tools see
C:\Users\you\game. Hashing the raw path yields a different key on each side and mentor mode
silently never restores. The hook normalizes with cygpath -m; match that form when you write.
Compute the key exactly like the hook does:
# $P is the canonical project path, e.g. C:/Users/you/game
printf '%s' "$P" | sha256sum | cut -c1-16 # or: shasum -a 256The failure mode is silent — a wrong key just means mentor mode never comes back — so verify the file lands where the hook looks before relying on it.
{
"project": "C:/Users/you/game",
"mode": "mentor",
"level": "beginner",
"language": "gdscript"
}
projectis shown in the Windows canonical form because that is the platform where getting it wrong fails silently. On macOS / Linux it is just the absolute path, e.g./home/you/game.
| Key | Values | Meaning |
|---|---|---|
project | absolute path | Which project this state belongs to; guards hash collisions |
mode | mentor | normal | Whether the five beats apply |
level | beginner | intermediate | How much of Beat 1 and Beat 2 to spell out |
language | gdscript | csharp | Which example leads |
section_offer | declined | Set when the user refuses the ## GodotPrompter instructions section, so the hook stops offering it |
Why not in the project? A teaching level is a per-developer preference. In-repo it would
be committed by default (Godot's .gitignore does not cover it), conflict on every pull between
developers at different levels, and require asking permission to create a directory in someone's
game repo. None of that arises in $HOME.
Godot version and renderer are deliberately NOT stored. They are read live from
project.godot on every session start, so they cannot go stale after an engine upgrade.
Ask for level once, on activation, then remember it. Never re-ask each turn. Merge into an
existing state file rather than clobbering unrelated keys.
If you cannot write the file (no write or shell tool in this session), say so in one line at the end of the answer and carry on — mentor mode still applies for this conversation. Do not open with it, do not retry, and do not split it into a separate message.
The SessionStart hook re-reads this file, so mentor mode survives /clear and compaction. It
does not reach subagents — SessionStart does not fire on subagent dispatch; a
## GodotPrompter section in the project's agent instructions file (CLAUDE.md, or AGENTS.md /
GEMINI.md in an agent-agnostic repo) is what subagents read. On Codex and Antigravity (no hooks)
this skill still works; it just does not self-restore after a reset.
level | Beat 1 (Concept) | Beat 2 (Editor) |
|---|---|---|
beginner | Define the Godot term, contrast with the alternative, say why it matters here | Name every node and property explicitly |
intermediate | One or two sentences on the trade-off only | Only the non-obvious wiring |
level controls how much of each beat appears — never whether it appears.
level is the user's Godot baseline, not a ceiling. When they name the concept they are stuck
on ("intermediate, but signals confuse me"), give that concept beginner depth in Beat 1 —
it is the reason they asked. Everything else, including Beat 2, stays at their level.
| Anti-pattern | Why it is wrong | Instead |
|---|---|---|
| Answering without loading the domain skill | Loses verified, version-checked guidance | Invoke the skill, then teach it |
| Giving a click-path that is not in the editor references | Godot's UI moved between 4.3 and 4.7; a remembered path is often a wrong one | Read references/editor-recipes.md / editor-navigation.md; if it is not there, name the panel only if editor-navigation.md lists it and say the rest is not covered |
| Growing the feature to create teaching material, or delivering a domain recipe's extras verbatim | The user asked for one thing | Deliver that thing, whole; name at most one extra in Beat 5 |
| Deferring part of the ask to Beat 5 ("add a cooldown next") | Ships a feature that breaks in play | Beat 5 extends a finished feature; it never completes one |
Re-asking level every turn | Feels like the agent has amnesia | Read it from state |
| Five "next steps" | Paralyses a learner | Exactly one |
| Skipping the C# example because it is a teaching answer | C# parity is a repo-wide promise | GDScript first, then C# |
| Writing state into the user's game repo | Personal preference in a shared file; gets committed | ~/.godot-prompter/state/ |
User: "teach me as we go — I want the player to double jump"
Beat 1 — Concept. Godot's CharacterBody2D has no built-in jump counter. Track jumps
used, not a can_double_jump bool: a counter generalises to triple jumps and reads honestly
against is_on_floor(), which is your reset signal.
Beat 2 — Editor. No new nodes. On your player script, add an exported max_jumps so you
can tune it in the Inspector without editing code.
Beat 3 — Code.
extends CharacterBody2D
@export var max_jumps: int = 2
@export var jump_velocity: float = -400.0
var _jumps_used: int = 0
func _physics_process(delta: float) -> void:
if not is_on_floor():
velocity += get_gravity() * delta
else:
_jumps_used = 0 # landing is the only reset
if Input.is_action_just_pressed("jump") and _jumps_used < max_jumps:
velocity.y = jump_velocity
_jumps_used += 1
move_and_slide()using Godot;
public partial class Player : CharacterBody2D
{
[Export] public int MaxJumps { get; set; } = 2;
[Export] public float JumpVelocity { get; set; } = -400.0f;
private int _jumpsUsed;
public override void _PhysicsProcess(double delta)
{
Vector2 velocity = Velocity;
if (!IsOnFloor())
velocity += GetGravity() * (float)delta;
else
_jumpsUsed = 0; // landing is the only reset
if (Input.IsActionJustPressed("jump") && _jumpsUsed < MaxJumps)
{
velocity.Y = JumpVelocity;
_jumpsUsed++;
}
Velocity = velocity;
MoveAndSlide();
}
}Beat 4 — Verify. Run the scene: two jumps, then nothing until you land. Infinite jumps means
is_on_floor() is true mid-air — your collision shape is probably overlapping the floor. A weak
second jump means you are adding to a falling velocity.y; assign it rather than accumulating
(this code already assigns).
Beat 5 — Next. Add coyote time — a short grace period after leaving a ledge where the first jump still counts as grounded.
Beat 2 may give click-paths, but only ones copied from these two files. Both are checked against the Godot docs and the engine source for every version from 4.3 to 4.7 and flag every step that differs.
Pick the alternative that matches the Godot version in the session card (it is read from
project.godot). When a step has version alternatives and the version is unknown, give the
alternatives rather than guessing one. For a project on a Godot version outside 4.3 to 4.7 the
references do not apply as written: say so, and do not apply the 4.6+ alternatives to a newer
version unchecked.
godot-prompter:* domain skill before answeringeditor-navigation.md lists it and the answer says the rest is not coveredlevel read from state, not re-asked~/.godot-prompter/state/, never into the user's game repo© jame581, 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/godot-mentor of jame581/GodotPrompter.
Open the folder on GitHubat commit 1e7d79d
Godot Mentor 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 |
|---|---|---|---|---|---|---|
| Godot Mentor this skilljame581/GodotPrompter | 805 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Godot Gdscript Patterns925236118/AlphaAgent | 103 | 10 repos | ~5k | Automated safety check: Pass | MIT | |
| 2D Map and Scene Generator0x0funky/agent-sprite-forge | 4.4k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Godot UI Integrationzimo-xiao-zheng/godot-ui-integration | 285 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Godot Wechat Minigame Adaptergodothub/godot-minigame | 187 | — | ~1.5k | Automated safety check: Pass | MIT | |
| AI Game Art Pipelineybuild-ai/ai-game-art-pipeline-skill | 297 | — | ~1.1k | Automated safety check: Pass | MIT |
925236118/AlphaAgent
Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization.
0x0funky/agent-sprite-forge
Plans and builds 2D game maps and scenes, from tilemaps and parallax backgrounds to HD-2D plates, with collision checks, a playable HTML preview and Tiled, Godot or LDtk export.
zimo-xiao-zheng/godot-ui-integration
Build or revise Godot UI from an approved design, separated art, or a visual reference when scene structure, gameplay binding, and runtime visual verification all matter.
godothub/godot-minigame
Apply the bundled self-contained Godot WeChat Mini Game adapter kit to an official Godot checkout.
ybuild-ai/ai-game-art-pipeline-skill
Provider-neutral open-source skill for planning and producing game-runtime art assets and animation: static props/icons, canonical character sheets, combat sprites, 3D/video motion references…
RandallLiuXin/GodotMaker
Runtime debugging and live project inspection via godot-mcp.
jame581/GodotPrompter
Covers Godot 4.3+ 2D systems with GDScript and C# examples: canvas layers, draw order, TileMaps, parallax, lights and shadows, particles and custom drawing.
jame581/GodotPrompter
Covers Godot 4.3+ 3D systems such as materials, lighting, shadows, environment, global illumination, fog, LOD, occlusion culling and decals, with GDScript first and C# second.
jame581/GodotPrompter
Builds a data-driven ability system in Godot 4 from Resources and a component node, with cooldowns, buffs, stat modifiers, gameplay tags and HUD binding.
jame581/GodotPrompter
Covers Godot 4.3+ editor plugins: plugin folders, @tool scripts, the EditorPlugin lifecycle, custom inspectors, dock panels and gizmos, in GDScript and C#.
jame581/GodotPrompter
Covers pathfinding and enemy movement in Godot 4.3 and later: navigation regions, NavigationAgent nodes, steering, behavior trees and patrol routes.
jame581/GodotPrompter
Covers animation in Godot 4.3 and later: AnimationPlayer basics, AnimationTree blend trees and state machines, sprite animation, skeleton IK and code-driven motion.
Works with
Categories
A skill your agent uses when the user wants to learn Godot while building — teaching mode that explains the concept, the editor setup, and what to verify, instead of just delivering code. Godot Mentor is an agent skill from jame581/GodotPrompter. Use when the user wants to learn Godot while building — teaching mode that explains the concept, the editor setup, and what to verify, instead of just delivering code.
Godot Mentor fits situations like: the user wants to learn Godot while building — teaching mode that explains the concept; the editor setup; instead of just delivering code; explain as we go.
Run `npx skills add jame581/GodotPrompter --skill godot-mentor -a claude-code`. Or copy the skill folder (skills/godot-mentor in jame581/GodotPrompter) into .claude/skills/godot-mentor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jame581/GodotPrompter --skill godot-mentor -a codex`. Or copy the skill folder (skills/godot-mentor in jame581/GodotPrompter) into .agents/skills/godot-mentor 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 jame581/GodotPrompter --skill godot-mentor -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/godot-mentor, .gemini/skills/godot-mentor, .github/skills/godot-mentor and .opencode/skills/godot-mentor in your project.
SKILL.md names no scripts, command-line tools or credentials: Godot Mentor is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Godot Mentor is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.2k 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 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Godot Mentor: Godot Gdscript Patterns (925236118/AlphaAgent, 103 stars), 2D Map and Scene Generator (0x0funky/agent-sprite-forge, 4.4k stars), Godot UI Integration (zimo-xiao-zheng/godot-ui-integration, 285 stars) and Godot Wechat Minigame Adapter (godothub/godot-minigame, 187 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jame581 (a GitHub user) maintains it in jame581/GodotPrompter, which has 805 GitHub stars. The repository holds 58 skills in this directory. The repository was last updated on October 9, 2026.
Source: jame581/GodotPrompter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.