PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
Drive another Sidecar-managed agent from a shell — discover targets, create the layout, start a provider, prompt and wait, read before sending keys, broadcast to every live agent, and stay out of…
$ npx skills add marcus/sidecar --skill coordinate-agents -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install marcus/sidecar coordinate-agents --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/marcus/sidecar.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/coordinate-agents .claude/skills/coordinate-agents && 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 "coordinate-agents" agent skill from https://github.com/marcus/sidecar/tree/main/.claude/skills/coordinate-agents into .claude/skills/coordinate-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coordinate-agents", 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/marcus/sidecar/tree/main/.claude/skills/coordinate-agentsType 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 marcus/sidecar --skill coordinate-agents -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install marcus/sidecar coordinate-agents --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/marcus/sidecar.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/coordinate-agents .agents/skills/coordinate-agents && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "coordinate-agents" agent skill from https://github.com/marcus/sidecar/tree/main/.claude/skills/coordinate-agents into .agents/skills/coordinate-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coordinate-agents", 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 marcus/sidecar --skill coordinate-agents -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install marcus/sidecar coordinate-agents --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/marcus/sidecar.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/coordinate-agents .cursor/skills/coordinate-agents && 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 "coordinate-agents" agent skill from https://github.com/marcus/sidecar/tree/main/.claude/skills/coordinate-agents into .cursor/skills/coordinate-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coordinate-agents", 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/marcus/sidecar.git --path .claude/skills/coordinate-agents--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 marcus/sidecar --skill coordinate-agents -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install marcus/sidecar coordinate-agents --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/marcus/sidecar.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/coordinate-agents .gemini/skills/coordinate-agents && 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 "coordinate-agents" agent skill from https://github.com/marcus/sidecar/tree/main/.claude/skills/coordinate-agents into .gemini/skills/coordinate-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coordinate-agents", 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 marcus/sidecar coordinate-agentsInstalls 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 marcus/sidecar --skill coordinate-agents -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/marcus/sidecar.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/coordinate-agents .github/skills/coordinate-agents && 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 "coordinate-agents" agent skill from https://github.com/marcus/sidecar/tree/main/.claude/skills/coordinate-agents into .github/skills/coordinate-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coordinate-agents", 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 marcus/sidecar --skill coordinate-agents -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install marcus/sidecar coordinate-agents --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/marcus/sidecar.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/coordinate-agents .opencode/skills/coordinate-agents && 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 "coordinate-agents" agent skill from https://github.com/marcus/sidecar/tree/main/.claude/skills/coordinate-agents into .opencode/skills/coordinate-agents/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "coordinate-agents", 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.
coordinate-agentsDrive another Sidecar-managed agent from a shell — discover targets, create the layout, start a provider, prompt and wait, read before sending keys, broadcast to every live agent, and stay out of…
Coordinate Agents is an agent skill from marcus/sidecar. Drive another Sidecar-managed agent from a shell — discover targets, create the layout, start a provider, prompt and wait, read before sending keys, broadcast to every live agent, and stay out of the user's way. Use when you need a second agent to review a diff, run a long task in parallel, tell every live agent something, or when a coordinated agent comes back blocked. Covers sidecar agent list/get/start/prompt/wait/read/send-keys/broadcast and the refusal codes they return.
Its SKILL.md is about 3.2k 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 Development, covering Code review. The repository describes itself as: Use sidecar next to CLI agents for diffs, file trees, conversation history, and task management with td. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 3792a4e. 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:
jqFrom 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.
Coordinate Agents loads about 3.2k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 1,704 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 marcus/sidecar at commit 3792a4e, republished under its MIT licence (© marcus). 1,704 words, ~3,184 tokens.
.claude/skills/coordinate-agents/SKILL.md (or your agent's skills folder).Sidecar can start and coordinate a second agent in a shell it owns. The commands are headless, target-taking, and --json from birth, so everything here works from an ordinary shell with no TUI attached.
Agent control is behind a default-off feature flag. Check first:
sidecar agent list --jsonIf that answers {"error":{"code":"feature_disabled",...}}, agent control is off. Ask the user to enable it (agent_control under features.flags in ~/.config/sidecar/config.json) rather than turning it on yourself.
Do these in order. Each step exists because skipping it is how a coordinated agent ends up wedged, duplicated, or typing into the wrong pane.
sidecar shell list --json # what shells exist
sidecar agent list --json # which of them have a live agent, and its statusA target is a Sidecar-managed shell. A bare target first matches an exact tmux session name. An ordinary display name such as rev U3-c or Shell 3 still resolves when unique; ambiguity refuses. A missing sidecar-sh-*, sidecar-ws-* or sidecar-tp-* target never falls back to a display name. name:DISPLAY explicitly selects a unique display name, including a session-shaped one, and session:NAME selects an exact session, including literal names starting with name: or session:. agent start --target SESSION and --exact-target interpret the target as a literal exact identity. Inside a managed shell you may omit the target entirely and the command addresses SIDECAR_SHELL. Outside one, name the target.
agent list reports each live pane once, under the project that owns it, however many registered projects can see its checkout. An explicit target is searched across every project; if the same exact session identity exists in several, the project your own shell belongs to breaks the tie, so a sibling worktree resolves from a managed shell without flags. Outside a managed shell the refusal lists the projects and names the fix: --project NAME (a slug, a path, or a worktree Sidecar created, by path or basename) or --shell NAME. Display-name ambiguity always refuses until --project explicitly narrows the search. Remote commands preserve these selector rules and carry parser guards; older owners refuse before mutation and must be upgraded. The project field of a create shell / create worktree --json result is the value --project accepts.
agent start never creates or moves a pane. Layout is sidecar create shell's job, and keeping them apart is what makes it safe to start an agent without also rearranging the user's screen.
Use --tab, not the default placement and not --split. Without --tab, create shell opens a beside-the-session terminal split (sidecar-tp-…) — a live terminal, not a managed shell: it has no workspace row, shell list does not show it, and agent start/agent prompt refuse it as agent_not_found since there is nothing there to target. --tab is what actually adds the workspace row a coordinated agent needs.
created=$(sidecar create shell --tab --name reviewer --json)
target=$(printf '%s\n' "$created" | jq -r '.shell.session')To start a catalog family with provider arguments in the same step, both create shell and create worktree take them after --, as agent start does, and still record the family: sidecar create worktree orchestrate --agent claude --json -- --model fable. Usage refusals under --json arrive as {"error":{"code":"usage",...}} on stderr, like every other refusal here.
From inside a worktree shell, create shell --tab --agent KIND inherits your own worktree's directory (the workspace row is placed there, not in the main checkout) — no --worktree/--cwd flag is needed.
When the managed shell should belong to one project but start elsewhere, pass both facts explicitly: sidecar create shell --project sidecar --cwd ~/code/tui --name publisher --json. --cwd never chooses project ownership and always creates a managed workspace row, even inside an existing Sidecar shell. It is refused with --split because a live terminal split has no durable shell record. Relative paths resolve from the caller's directory, ~ and ~/path resolve from the caller's home, and the directory must exist before Sidecar creates tmux or durable state. The resolved path is the shell's live cwd, recorded workDir, provider launch cwd, and cold-restore cwd.
Creating a shell does not steal the user's focus. Do not rearrange panes the user set up, and never close a target you did not create.
sidecar agent start "$target" --kind codex --timeout 30s --jsonagent start reserves -- for provider arguments. Use positional TARGET for a session or ordinary display name, name:DISPLAY for an explicit name, or --target SESSION for a literal exact session (including a leading dash).
This returns only when the expected provider is positively identified and ready for input. It is not "the bytes were sent". Refusals worth knowing:
| Code | Meaning |
|---|---|
agent_pane_busy | the pane is running a command, an editor, another agent, or is in copy mode. There is no --force; wait or use a different shell. |
agent_kind_mismatch | a different provider owns the pane. |
agent_start_failed | the process exited before it was ready. |
agent_not_ready | it came up blocked. The target is still inspectable — read it. |
timeout | it did not become ready inside your --timeout. |
sidecar agent prompt "$target" "Review the current diff and report only actionable findings." --wait --timeout 2m --json--wait submits and waits as one operation, so no second command can race a replacement occupant into the gap. Things to know:
Read the receipt before retrying. Prompt JSON adds receipt.submission (submitted, not_submitted, or unknown), receipt.wait, and the exact pinned receipt.target. The receipt is present on success and inside the error envelope on failure. A timeout after delivery remains exit 1 with error code timeout, plus submission: "submitted" and wait: "timeout"; do not send the prompt again. unknown means a write or transport may have landed and is equally unsafe to retry automatically.
Refusals happen before any byte is written. Feature-disabled, unknown-host, missing-target, not-found, and ambiguous-target failures carry submission: "not_submitted" and wait: "not_started" too, without inventing a pane identity. A blocked target gets agent_blocked; an unidentified or stale one gets agent_not_ready; a replaced one gets agent_replaced; and a dead pane, a pane in copy mode, or a session that no longer holds exactly one pane gets agent_pane_busy. Nothing is sent in any of them.
There is no implicit timeout. --wait requires --timeout, and so does agent wait.
Settled means idle, done, or blocked by default. Narrow it with repeated --until done, or widen it with --until working.
A prompt that goes nowhere is reported, not hidden. If the lifecycle does not move within 5 seconds of a prompt sent from idle or done, you get agent_prompt_stalled. The bytes were written; the agent did not react. Read the screen before you send anything else.
Prompting an already-working agent claims nothing. Sidecar will not pretend to know which turn is which, and completion of the turn already in flight may satisfy your --wait. Wait for it to settle first if you care.
To wait without prompting — for an agent somebody else started, or after send-keys:
sidecar agent wait "$target" --until done --timeout 5m --jsonThe wait stays pinned to the same session, pane, pane process, tmux server, and provider. If any of those change you get agent_replaced rather than a wait that a different process quietly satisfied.
When a wait comes back blocked, the agent is asking a question. Read the screen, decide, then answer. Sidecar does not auto-answer approvals, and neither should you without knowing what was asked.
sidecar agent read "$target" --source recent-unwrapped --lines 120| Source | Use it for |
|---|---|
visible | the current screen (default) |
recent | the screen plus recent scrollback |
recent-unwrapped | the same, with soft wraps joined — the one you want for logs and long answers |
detection | the exact slice the lifecycle detector read, when you want to argue with a status |
transcript | the provider's own conversation. Returns transcript_unavailable until an exact session binding exists; it is never guessed from the newest session in the same directory. |
Reads are passive. They never scroll, resize, or otherwise touch the agent's UI.
sidecar agent send-keys "$target" down enterKeys are named, not typed: enter, esc, tab, space, backspace, delete, insert, the arrows, home, end, pageup, pagedown, f1–f12, ctrl+<letter>, ctrl+space, alt+<key>, shift+tab, shift+enter, shift+<arrow>, and any single character. The whole list is validated before any of it is written, so a typo sends nothing at all.
send-keys is for answering a UI. Prompt text goes through agent prompt — it is bracketed-paste aware and submits correctly; a string of characters through send-keys is not the same thing.
With two or more positional arguments the first is the target. With exactly one, the key goes to SIDECAR_SHELL.
sidecar agent broadcast "Code freeze on main until td-1a2b3c lands; hold pushes. Details: comms peek msg_01J9…" --jsonDefault recipients are the live agents in your project, minus you. --all reaches every registered project on this machine. --dry-run --json prints the plan and sends nothing.
Receipts, not acknowledgements: each row is submitted, skipped, or unknown. There is no --wait; use agent wait per target if you need them to settle. summary.shellsWithoutAgent counts the managed shells in scope that answered but had no identified provider — live shells with nothing running in them, not registry rows for directories that are gone.
Durable content belongs in comms. The broadcast carries a one-line summary plus the message id, so agents that were not live still have a place to read it. --host is not in this slice; --all means this machine.
Every verb takes --json. Success writes one object on stdout; failure writes {"error":{"code":...,"message":...,"target":{...}}} on stderr. Prompt adds its receipt to the success object or error object without changing those codes. Exit codes:
| Exit | Meaning |
|---|---|
| 0 | success |
| 1 | transport failure or timeout |
| 2 | usage error — your command line, not the agent |
| 3 | the target is not a registered Sidecar shell |
| 5 | feature disabled, or a semantic refusal such as agent_blocked |
The target in every result carries the pin: host, project, tmux session, pane id, pane pid, and tmux server pid. Two shells with the same display name on different hosts cannot collide.
From a Sidecar-managed pane whose geometry lease is held by a connected viewer, sidecar open and sidecar layout are that viewer's screen — not a TUI that may not be running on the host. There is no sidecar open --host. Off-screen, or a disconnected or too-old lease holder, refuses (exit 4) rather than queue.
Sidecar owns provider identity, readiness, and its refusal rules. It does not own raw terminal control. If you want to run a command in a pane and read its output, that is tmux's job — sidecar shell list --json gives you the session names. Do not reach for agent send-keys to drive a shell.
Sidecar also does not own the workflow. It gives you primitives; the plan, the task engine, the review policy, and the retry logic are yours.
© marcus, MIT. 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 .claude/skills/coordinate-agents of marcus/sidecar.
Open the folder on GitHubat commit 3792a4e
Coordinate Agents 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 |
|---|---|---|---|---|---|---|
| Coordinate Agents this skillmarcus/sidecar | 1.1k | — | ~3.2k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 5 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Backend Code Reviewlangflow-ai/langflow | 156k | — | ~3.5k | Automated safety check: Notes | MIT | |
| Understand Diff AnalysisEgonex-AI/Understand-Anything | 85k | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Mole Bug Patternstw93/Mole | 69k | — | ~2k | Automated safety check: Pass | GPL-3.0 |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
langflow-ai/langflow
Review backend code for quality, security, maintainability, and best practices based on established checklist rules.
Egonex-AI/Understand-Anything
Reads your git changes or a pull request against a prebuilt knowledge graph of the project to explain what changed, which components are affected and what is risky.
tw93/Mole
A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.
langgenius/dify
Reviews backend code under api/ for concrete, reproducible defects, routes to rule packs for architecture, schema, repositories and SQLAlchemy, and ranks findings from P0 to P3.
marcus/sidecar
Create conversation adapters for importing AI chat history from different tools (Claude Code, Cursor, Warp, Codex, etc.).
marcus/sidecar
Create declarative modals using the modal library API. An agent skill from marcus/sidecar.
marcus/sidecar
Create new sidecar plugins implementing the plugin.Plugin interface, rendering views with Bubble Tea, handling keyboard input via keymap contexts, and integrating with the app shell (footer hints…
marcus/sidecar
Project switching implementation in sidecar: project discovery, state management, UI flow, modal rendering, filtering, theme preview, and plugin reinitialization.
marcus/sidecar
Interactive shell/TTY integration with tmux session management, shell command execution, control-mode output capture with polling fallback, native cursor rendering, lazy scrollback, selection, paste…
marcus/sidecar
Writing and maintaining the Sidecar Docusaurus documentation site, including page structure, doc authoring, blog posts, styling, images, and deployment workflow.
Categories
Drive another Sidecar-managed agent from a shell — discover targets, create the layout, start a provider, prompt and wait, read before sending keys, broadcast to every live agent, and stay out of…. Coordinate Agents is an agent skill from marcus/sidecar. Drive another Sidecar-managed agent from a shell — discover targets, create the layout, start a provider, prompt and wait, read before sending keys, broadcast to every live agent, and stay out of the user's way.
Coordinate Agents fits situations like: you need a second agent to review a diff; run a long task in parallel; tell every live agent something; A coordinated agent comes back blocked.
Run `npx skills add marcus/sidecar --skill coordinate-agents -a claude-code`. Or copy the skill folder (.claude/skills/coordinate-agents in marcus/sidecar) into .claude/skills/coordinate-agents in your project. Claude Code loads it when a task matches its description.
Run `npx skills add marcus/sidecar --skill coordinate-agents -a codex`. Or copy the skill folder (.claude/skills/coordinate-agents in marcus/sidecar) into .agents/skills/coordinate-agents 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 marcus/sidecar --skill coordinate-agents -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coordinate-agents, .gemini/skills/coordinate-agents, .github/skills/coordinate-agents and .opencode/skills/coordinate-agents in your project.
Going by SKILL.md and its folder, Coordinate Agents needs the command-line tools its instructions call (jq).
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.
Coordinate Agents 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.
Skills that share tags, products or a category with Coordinate Agents: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Backend Code Review (langflow-ai/langflow, 156k stars) and Understand Diff Analysis (Egonex-AI/Understand-Anything, 85k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
marcus (a GitHub user) maintains it in marcus/sidecar, which has 1,085 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 5, 2026.
Source: marcus/sidecar on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.