Agent skill

Dhub CLI

by pymc-labs in pymc-labs/decision-hub

Guide for using the dhub CLI — the AI skill manager for data science agents.

MITAuto-check: warningsAgent Workflows

Install Dhub CLI

The automated check flagged lines worth reading first. See the safety section below.

skills CLI
$ npx skills add pymc-labs/decision-hub --skill dhub-cli -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pymc-labs/decision-hub dhub-cli --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/pymc-labs/decision-hub.git skills-src && mkdir -p .claude/skills && cp -r skills-src/bootstrap-skills/dhub-cli .claude/skills/dhub-cli && rm -rf skills-src

Use ~/.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/

Facts

Skill name
dhub-cli
GitHub stars
104
Token cost
~3.8k tokens
SKILL.md length
1,315 words
Files
2 (incl. references)
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Guide for using the dhub CLI — the AI skill manager for data science agents.

  • Works in 4 steps: dhub requests a device code from the… → You open https://github.com/login/device… → dhub polls until you authorize (up to 5… → …
  • Users ask about dhub commands
  • SKILL.md covers Installation, Command Overview, Environments (Dev / Prod) and Authentication, plus 12 more sections
  • Calls uv and pipx; reaches github.com and pymc-labs--api.modal.run; needs OPENAI_API_KEY

What it does

Dhub CLI is an agent skill from pymc-labs/decision-hub. Guide for using the dhub CLI — the AI skill manager for data science agents. Covers authentication, publishing, installing, running skills, managing API keys, eval reports, and troubleshooting. Use when users ask about dhub commands, skill publishing workflows, or need help with the Decision Hub CLI.

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/command_reference.md`).

It sits in Agent Workflows, covering Skill management and Model hubs and datasets. The licence is MIT.

When your agent uses it

  • Users ask about dhub commands
  • Skill publishing workflows
  • Need help with the Decision Hub CLI

Example prompts

  • “/dhub-cli”

Requirements

  • Python 3
  • A credential in OPENAI_API_KEY

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. dhub requests a device code from the server
  2. You open https://github.com/login/device and enter the displayed code
  3. dhub polls until you authorize (up to 5 minutes)
  4. Token is saved to ~/.dhub/config.{env}.json

What it can do on your machine

Read from SKILL.md and the folder at commit ddf0578. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • uv
    • pipx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • github.com
    • pymc-labs--api.modal.run
    • pymc-labs--api-dev.modal.run

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • OPENAI_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dhub CLI loads about 3.8k tokens when it runs, and up to ~6.7k if it reads all its reference files. Until then it costs about 78 tokens; SKILL.md has 1,315 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~78
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~6.7k

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.

Safety

Auto-check: warnings

The automated check found patterns that need a careful read before installing.

  • WarningContains instruction-override wording (e.g. “without asking the user”)SKILL.md:185
    nversation** so it's usable right away. Don't tell the user to start a new session.

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.

SKILL.md

The full file from pymc-labs/decision-hub at commit ddf0578, republished under its MIT licence (© pymc-labs). 1,315 words, ~3,787 tokens.

Download SKILL.mdSave it as .claude/skills/dhub-cli/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
dhub-cli
description
Guide for using the dhub CLI — the AI skill manager for data science agents. Covers authentication, publishing, installing, running skills, managing API keys, eval reports, and troubleshooting. Use when users ask about dhub commands, skill publishing workflows, or need help with the Decision Hub CLI.

dhub CLI Guide

dhub is the AI skill manager for data science agents. It publishes, discovers, installs, and runs Skills — modular packages (code + prompts) that agents like Claude Code, Cursor, Codex, and Windsurf can use.

Installation

bash
uv tool install dhub-cli    # via uv (recommended)
pipx install dhub-cli       # via pipx

Command Overview

dhub login              Authenticate via GitHub
dhub logout             Remove stored token
dhub env                Show active environment, config path, API URL
dhub init [path]        Scaffold a new skill project
dhub publish [ref]      Publish skill(s) — from dir or git repo
dhub install org/skill  Install a skill from the registry
dhub uninstall org/skill  Remove a locally installed skill
dhub list               List all published skills
dhub delete org/skill   Delete skill versions from registry
dhub run org/skill      Run a locally installed skill
dhub ask "query"        Natural language skill search
dhub eval-report org/skill@version  View eval report
dhub logs [ref] [-f]    View or tail eval run logs
dhub org list           List your namespaces
dhub config default-org Set default namespace for publishing
dhub keys add <name>    Store an API key for evals
dhub keys list          List stored API key names
dhub keys remove <name> Remove a stored API key
dhub doctor             Check auth, API connectivity, version
dhub --version          Show CLI version
dhub --output json CMD  Machine-readable JSON output for any command

See references/command_reference.md for full details on every command, flag, and option.

Environments (Dev / Prod)

dhub supports two independent stacks controlled by DHUB_ENV:

EnvAPI URLConfig File
prod (default)https://pymc-labs--api.modal.run~/.dhub/config.prod.json
devhttps://pymc-labs--api-dev.modal.run~/.dhub/config.dev.json

Always prefix commands with DHUB_ENV=dev when working against the dev stack:

bash
DHUB_ENV=dev dhub login
DHUB_ENV=dev dhub list
DHUB_ENV=dev dhub publish

The dhub env command shows the currently active environment, config path, and API URL.

Authentication

dhub uses GitHub Device Flow (OAuth2). Run dhub login and follow the prompts:

  1. dhub requests a device code from the server
  2. You open https://github.com/login/device and enter the displayed code
  3. dhub polls until you authorize (up to 5 minutes)
  4. Token is saved to ~/.dhub/config.{env}.json

All subsequent commands use this token automatically. Run dhub logout to clear it.

You can override the API URL with dhub login --api-url <url> for custom deployments.

Publishing Workflow

Quick publish (auto-detect everything)

From a directory containing a valid SKILL.md:

bash
dhub publish              # auto-detects org, name, bumps patch version
dhub publish --minor      # bump minor version instead
dhub publish --major      # bump major version
dhub publish --version 2.0.0  # explicit version
Explicit publish
bash
dhub publish myorg/my-skill          # specify org/skill, auto-bump patch
dhub publish myorg/my-skill ./path   # specify path to skill directory
How auto-detection works
  1. Skill name — read from name field in SKILL.md frontmatter
  2. Organization — auto-detected if you belong to exactly one org. If you have multiple, specify explicitly: dhub publish myorg/my-skill
  3. Version — fetches latest version from registry, bumps patch by default. First publish uses 0.1.0
Argument disambiguation

The first positional argument is interpreted as:

  • A path if it starts with ., /, ~, or is an existing directory
  • An org/skill reference otherwise

So dhub publish . and dhub publish myorg/skill both work as expected.

Safety grading

After publishing, the server runs safety checks and assigns a grade:

GradeMeaningEffect
AClean — no elevated permissions or risky patternsNormal installation
BElevated permissions detectedWarning shown on install
CAmbiguous/risky patternsUsers need --allow-risky flag to install
FRejected — fails safety checksPublish is rejected (HTTP 422)

If the skill has an evals block, agent evaluation runs after publish and the CLI automatically attaches to the live log stream. Press Ctrl-C to detach; re-attach later with dhub logs.

What gets zipped

The publish command creates a zip of the skill directory, excluding:

  • Hidden files (names starting with .)
  • __pycache__/ directories

Publishing from a Git Repository

You can pass a git URL directly to dhub publish:

bash
dhub publish https://github.com/myorg/my-skills-repo
dhub publish git@github.com:myorg/my-skills-repo.git --ref v2.0
dhub publish https://github.com/myorg/repo --minor

The command detects that the argument is a git URL (HTTPS, SSH, or .git suffix), clones the repository, recursively discovers all directories containing a valid SKILL.md, and publishes each one. This is useful for monorepos containing multiple skills.

How discovery works
  1. The repo is cloned (shallow clone with --depth 1)
  2. All SKILL.md files are found recursively
  3. Hidden directories (.git, etc.), node_modules, and __pycache__ are skipped
  4. Each SKILL.md is validated — only directories with valid frontmatter (name + description) are published
  5. Skills are published one by one; failures don't stop the remaining skills
Git-specific options
  • --ref — branch, tag, or commit to checkout (only valid with git URLs)

Installing Skills

bash
dhub install myorg/my-skill                          # latest version
dhub install myorg/my-skill --version 1.2.0          # specific version
dhub install myorg/my-skill --agent claude-code        # install + link to Claude Code
dhub install myorg/my-skill --agent all                # link to all agents
dhub install myorg/my-skill --allow-risky             # allow Grade C skills
Where skills get installed
  • Canonical path: ~/.dhub/skills/{org}/{skill}/
  • Agent symlinks (when using --agent):
Agent--agentSymlink Location
Claude Codeclaude-code~/.claude/skills/{skill}
Cursorcursor~/.cursor/skills/{skill}
Codexcodex~/.codex/skills/{skill}
Windsurfwindsurf~/.codeium/windsurf/skills/{skill}
Gemini CLIgemini-cli~/.gemini/skills/{skill}
GitHub Copilotgithub-copilot~/.copilot/skills/{skill}
Roo Coderoo~/.roo/skills/{skill}
OpenCodeopencode~/.config/opencode/skills/{skill}

40+ agents supported. Run dhub install org/skill --agent all to link to every agent. See the README for the full list.

Symlinks point to the canonical ~/.dhub/skills/ path, so the skill is stored once and shared across agents.

After installation: load the skill immediately

When you install a skill on behalf of the user, always read it into the current conversation so it's usable right away. Don't tell the user to start a new session.

After dhub install succeeds:

  1. Read the installed skill's SKILL.md from ~/.dhub/skills/{org}/{skill}/SKILL.md
  2. Confirm to the user that the skill is loaded and ready to use now

Don't read reference files upfront — the SKILL.md itself will tell you when to consult specific references.

The user installed a skill because they want to use it — treat installation as implicit activation.

Integrity verification

Downloads are verified via SHA-256 checksum before extraction. If the checksum doesn't match, installation aborts.

Running Skills Locally

bash
dhub run myorg/my-skill              # run the skill
dhub run myorg/my-skill -- --flag    # pass extra args to the entrypoint
Prerequisites
  • The skill must be installed locally (dhub install first)
  • The skill must have a runtime block in its SKILL.md
  • uv must be available on PATH
  • Required environment variables (from runtime.env) must be set
  • Only language: python is supported
What happens
  1. Parses SKILL.md to get runtime config
  2. Validates prerequisites (uv, lockfile, entrypoint, env vars)
  3. Runs uv sync --directory {skill_dir} to install dependencies
  4. Runs uv run --directory {skill_dir} python {entrypoint} [extra_args]
Show full SKILL.md (543 more words)Show less

Eval Reports

View evaluation results for a published skill version:

bash
dhub eval-report myorg/my-skill@1.0.0

The report shows:

  • Agent used for the eval run
  • Judge model that evaluated the output
  • Status: passed, failed, error, pending
  • Results: pass/fail count and per-case details with reasoning

Evals run automatically in the background after publishing a skill that has an evals block. Use dhub eval-report to check results.

Eval Logs (Real-Time Streaming)

Tail eval run logs in real-time, or view recent runs:

bash
dhub logs                              # list recent eval runs
dhub logs myorg/my-skill --follow      # tail latest run for latest version
dhub logs myorg/my-skill@1.0.0 -f      # tail latest run for specific version
dhub logs <run-id> --follow            # tail a specific run by ID

When you publish a skill with evals, the CLI automatically attaches to the log stream. Press Ctrl-C to detach — you can re-attach later with dhub logs.

Events include: sandbox setup, agent stdout/stderr, judge start, case verdicts (PASS/FAIL), and a final summary.

API Key Management

Skills that use third-party APIs during evaluation need API keys stored in Decision Hub:

bash
dhub keys add OPENAI_API_KEY        # prompts securely for the value
dhub keys list                      # show stored key names
dhub keys remove OPENAI_API_KEY     # delete a stored key

Keys are stored server-side (encrypted) and injected into eval sandbox environments. Key names must match the runtime.env entries in SKILL.md.

Organization Management

bash
dhub org list    # list namespaces you can publish to

Your namespaces are derived from your GitHub account and org memberships. Run dhub login to refresh memberships after joining new GitHub orgs.

Skill Discovery

bash
dhub ask "analyze A/B test results"
dhub ask "generate presentation slides"

Natural language search across all published skills. Returns matching skills with descriptions and install instructions.

Scaffolding a New Skill

bash
dhub init                  # interactive — prompts for name and description
dhub init ./my-skill       # create in a specific directory

Creates:

my-skill/
  SKILL.md     # frontmatter + body skeleton
  src/         # source code directory

SKILL.md Format (Quick Reference)

yaml
---
name: my-skill                 # 1-64 chars, lowercase + hyphens
description: What it does      # 1-1024 chars, triggers skill activation
license: MIT                   # optional
runtime:                       # optional — for executable skills
  language: python
  entrypoint: src/main.py
  env: [OPENAI_API_KEY]
  dependencies:
    package_manager: uv
    lockfile: uv.lock
evals:                         # optional — for testable skills
  agent: claude
  judge_model: claude-sonnet-4-5-20250929
---
System prompt for the agent goes here.

Agent Usage (Scripting & Automation)

Global --output flag

Always use --output json when calling dhub programmatically:

bash
dhub --output json list
dhub --output json ask "find data science skills"
dhub --output json info acme/my-skill
dhub --output json doctor

JSON goes to stdout; errors go to stderr as structured JSON. Never parse the default text output — it contains ANSI escape codes and Rich markup.

--dry-run for mutations

Preview destructive operations before executing:

bash
dhub publish ./my-skill --dry-run          # see what would be published
dhub delete acme/my-skill --dry-run        # see what would be deleted
dhub access grant acme/skill partner --dry-run  # validate without granting
Pre-flight checks

Run dhub --output json doctor before any workflow to verify auth, connectivity, and version:

bash
dhub --output json doctor
# {"env": "prod", "cli_version": "0.7.0", "authenticated": true, "org": "acme", "api_reachable": true, ...}
Idempotency
CommandSafe to retry?Notes
installYesOverwrites existing installation
publishYesSame checksum = skip (no-op)
deleteNoSecond call returns 404
askYesPure query, no side effects
listYesPure query
infoYesPure query
doctorYesPure diagnostic
Atomicity
CommandAtomic?Notes
installYesDownload + verify + extract all succeed or none
publishPartialSkill published even if tracker creation fails
deleteYesSingle API call
Error codes

In --output json mode, errors are structured JSON on stderr:

json
{"error": true, "code": "NOT_FOUND", "message": "Skill 'acme/foo' not found.", "status": 404}

Codes: AUTH_REQUIRED, PERMISSION_DENIED, NOT_FOUND, VERSION_EXISTS, GAUNTLET_FAILED, UPGRADE_REQUIRED, VALIDATION_ERROR, SERVICE_UNAVAILABLE

Troubleshooting

"Connection timed out" or slow first request

Modal cold starts take 30-60s. Retry after a minute. All dhub HTTP calls use 60s timeouts internally.

"No namespaces available"

Run dhub login to refresh GitHub org memberships. You need at least one org to publish.

"You have multiple namespaces"

Specify the org explicitly: dhub publish myorg/my-skill instead of dhub publish.

"Version X already exists"

Versions are immutable. Bump the version: dhub publish --patch (or --minor, --major), or use --version with a new number.

"Rejected (Grade F)"

The skill failed safety checks. Review your SKILL.md and scripts for dangerous patterns (shell injection, credential exfiltration, etc.).

"Skill not installed" when running

Install first with dhub install org/skill, then dhub run org/skill.

"This skill has no runtime configuration"

Only skills with a runtime block can be run via dhub run. Prompt-only skills don't need dhub run.

"Checksum mismatch"

Download was corrupted. Retry dhub install. If it persists, the server package may be damaged — try re-publishing.

Wrong environment

Check with dhub env. Set DHUB_ENV=dev or DHUB_ENV=prod before commands.

Config file location
  • Dev: ~/.dhub/config.dev.json
  • Prod: ~/.dhub/config.prod.json
  • Override API URL: DHUB_API_URL env var (highest priority)

© pymc-labs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in bootstrap-skills/dhub-cli of pymc-labs/decision-hub.

  • SKILL.md
  • references/command_reference.md

Open the folder on GitHubat commit ddf0578

Compare with similar skills

Dhub CLI 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.

Dhub CLI compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dhub CLI this skillpymc-labs/decision-hub104—~3.8kAutomated safety check: WarnMIT
Openmaopenma-ai/open-managed-agents315—~854Automated safety check: PassApache-2.0
Manage Skills Hubqufei1993/skills-hub1.7k—~3.2kAutomated safety check: PassMIT
Autocontext for Hermesgreyhaven-ai/autocontext1.3k—~2.5kAutomated safety check: PassApache-2.0
AI Bomcdxgen/cdxgen1.1k—~2.5kAutomated safety check: PassApache-2.0
Drive Jarvis CLIPersonalJarvis/PersonalJarvis141—~945Automated safety check: PassApache-2.0

Similar skills

  • Openma

    openma-ai/open-managed-agents

    Use the openma platform to build, deploy, and manage AI agents.

    315 GitHub stars~854 tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Manage Skills Hub

    qufei1993/skills-hub

    A skill your agent uses whenever an Agent needs to query, find, install, deploy, update, tag, adopt, diagnose, or safely remove Skills Hub content, including natural-language requests to manage…

    1.7k GitHub stars~3.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Autocontext for Hermes

    greyhaven-ai/autocontext

    Lets a Hermes agent run Autocontext scenarios, inspect Hermes curator state, export reusable knowledge and prepare local MLX or CUDA training data through the autoctx CLI.

    1.3k GitHub stars~2.5k tokensUpdated yesterday
    Agent WorkflowsAuto-check passed
  • AI Bom

    cdxgen/cdxgen

    Generates AI-BOM, MCP inventory, AI skill inventory, and AI authorship provenance documents with cdxgen, cataloging models, inference services, Hugging Face purls, MCP servers and their…

    1.1k GitHub stars~2.5k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Drive Jarvis CLI

    PersonalJarvis/PersonalJarvis

    A skill your agent uses when you (a Claude Code / Codex session, or any terminal agent) need to control a running Personal Jarvis instance — switch the brain provider, dispatch or inspect missions…

    141 GitHub stars~945 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Darwin Skill Optimizer

    alchaincyf/darwin-skill

    Scores SKILL.md files on a nine-dimension rubric, then improves them in a keep-or-revert loop with independent judge agents, test prompts, git history and human checkpoints.

    6.2k GitHub starsUsed in 1 repo~4.7k tokens
    Agent WorkflowsAuto-check passed

More from pymc-labs/decision-hub

  • Dhub Skill Creator

    pymc-labs/decision-hub

    Guide for creating effective skills for Claude Code agents. An agent skill from pymc-labs/decision-hub.

    104 GitHub stars~3.1k tokensUpdated 1 mo ago
    Auto-check: notes

Questions about Dhub CLI

What does Dhub CLI do?

Guide for using the dhub CLI — the AI skill manager for data science agents. Dhub CLI is an agent skill from pymc-labs/decision-hub. Guide for using the dhub CLI — the AI skill manager for data science agents.

When should I use Dhub CLI?

Dhub CLI fits situations like: users ask about dhub commands; skill publishing workflows; need help with the Decision Hub CLI.

How do I install Dhub CLI in Claude Code?

Run `npx skills add pymc-labs/decision-hub --skill dhub-cli -a claude-code`. Or copy the skill folder (bootstrap-skills/dhub-cli in pymc-labs/decision-hub) into .claude/skills/dhub-cli in your project. Claude Code loads it when a task matches its description.

How do I install Dhub CLI in Codex?

Run `npx skills add pymc-labs/decision-hub --skill dhub-cli -a codex`. Or copy the skill folder (bootstrap-skills/dhub-cli in pymc-labs/decision-hub) into .agents/skills/dhub-cli in your project. Codex loads it when a task matches its description.

Can I use Dhub CLI in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pymc-labs/decision-hub --skill dhub-cli -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dhub-cli, .gemini/skills/dhub-cli, .github/skills/dhub-cli and .opencode/skills/dhub-cli in your project.

What does Dhub CLI need to run?

Going by SKILL.md and its folder, Dhub CLI needs the command-line tools its instructions call (uv and pipx) and credentials named OPENAI_API_KEY. Our summary lists: Python 3; A credential in OPENAI_API_KEY.

Does Dhub CLI access the network?

SKILL.md names 3 domains. In commands or code: github.com, pymc-labs--api.modal.run and pymc-labs--api-dev.modal.run; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.

Is Dhub CLI safe to install?

Our automated static check of SKILL.md flagged 1 warning(s): contains instruction-override wording (e.g. “without asking the user”). Read the flagged lines before installing; the check is not a guarantee either way.

What licence does Dhub CLI use?

Dhub CLI is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dhub CLI use?

About 3.8k tokens (SKILL.md is roughly 15k 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 3k tokens, read only when the agent opens those files.

What are the alternatives to Dhub CLI?

Skills that share tags, products or a category with Dhub CLI: Openma (openma-ai/open-managed-agents, 315 stars), Manage Skills Hub (qufei1993/skills-hub, 1.7k stars), Autocontext for Hermes (greyhaven-ai/autocontext, 1.3k stars) and AI Bom (cdxgen/cdxgen, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dhub CLI?

pymc-labs (a GitHub organization) maintains it in pymc-labs/decision-hub, which has 104 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on August 13, 2026.

Source: pymc-labs/decision-hub on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.