Drift
alsk1992/CloddsBot
Drift Protocol - perpetuals and prediction markets on Solana
Audit how far a downstream repo has drifted from the upstream repomatic reference.
$ npx skills add kdeldycke/dotfiles --skill repomatic-audit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-audit --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/kdeldycke/dotfiles.git skills-src && mkdir -p .claude/skills && cp -r skills-src/dotfiles/.agents/skills/repomatic-audit .claude/skills/repomatic-audit && 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 "repomatic-audit" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-audit into .claude/skills/repomatic-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-audit", 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/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-auditType 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 kdeldycke/dotfiles --skill repomatic-audit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-audit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .agents/skills && cp -r skills-src/dotfiles/.agents/skills/repomatic-audit .agents/skills/repomatic-audit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "repomatic-audit" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-audit into .agents/skills/repomatic-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-audit", 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 kdeldycke/dotfiles --skill repomatic-audit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-audit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/dotfiles/.agents/skills/repomatic-audit .cursor/skills/repomatic-audit && 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 "repomatic-audit" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-audit into .cursor/skills/repomatic-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-audit", 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/kdeldycke/dotfiles.git --path dotfiles/.agents/skills/repomatic-audit--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 kdeldycke/dotfiles --skill repomatic-audit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-audit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/dotfiles/.agents/skills/repomatic-audit .gemini/skills/repomatic-audit && 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 "repomatic-audit" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-audit into .gemini/skills/repomatic-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-audit", 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 kdeldycke/dotfiles repomatic-auditInstalls 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 kdeldycke/dotfiles --skill repomatic-audit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .github/skills && cp -r skills-src/dotfiles/.agents/skills/repomatic-audit .github/skills/repomatic-audit && 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 "repomatic-audit" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-audit into .github/skills/repomatic-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-audit", 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 kdeldycke/dotfiles --skill repomatic-audit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-audit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/dotfiles/.agents/skills/repomatic-audit .opencode/skills/repomatic-audit && 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 "repomatic-audit" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-audit into .opencode/skills/repomatic-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-audit", 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.
repomatic-auditAudit how far a downstream repo has drifted from the upstream repomatic reference.
Repomatic Audit is an agent skill from kdeldycke/dotfiles. Audit how far a downstream repo has drifted from the upstream repomatic reference. Cover workflows, configs and conventions.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for Claude Code. Recommended model: Opus.
The repository describes itself as: 🍎 macOS dotfiles for Python developers. The licence is BSD-2-Clause.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 7947d0f. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadGrepGlobWebFetchAgentFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghuvxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh and uvx, which can reach the network depending on how they are called.
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.
Designed for Claude Code. Recommended model: Opus.
From compatibility in the SKILL.md frontmatter.
Repomatic Audit loads about 4.2k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 1,877 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.
allowed-tools: Bash, Read, Grep, Glob, WebFetch, AgentAutomated 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 kdeldycke/dotfiles at commit 7947d0f, republished under its BSD-2-Clause licence (© kdeldycke). 1,877 words, ~4,161 tokens.
.claude/skills/repomatic-audit/SKILL.md (or your agent's skills folder).!ls .github/workflows/*.yaml 2>/dev/null
!grep -h 'uses:.*kdeldycke/repomatic' .github/workflows/*.yaml 2>/dev/null | head -5
!grep -A5 '\[tool.repomatic\]' pyproject.toml 2>/dev/null || echo "No [tool.repomatic] section"
!grep -E '^(subagents|skills|gitignore)\.location' pyproject.toml 2>/dev/null
![ -f repomatic/__init__.py ] && echo "CANONICAL_REPO" || echo "DOWNSTREAM"
You perform a comprehensive audit of a downstream repository against the upstream kdeldycke/repomatic reference. This goes beyond what repomatic init workflows handles: it catches stale action versions in custom job content, missing workarounds, outdated configs, and conventions that can be borrowed from upstream.
This skill is for downstream repos only. If the context shows CANONICAL_REPO, tell the user this skill is not applicable.
Before flagging an issue, verify that the gap isn't deliberate or covered by a runtime mechanism. Common false positives:
[tool.repomatic] exclude is authoritative. Files listed there (like workflows/changelog.yaml or labels) are intentionally absent on disk. Do not report them as MISSING.ToolSpec sets default_config in repomatic/tooling/tool_registry.py: actionlint, mdformat, ruff, yamllint and zizmor.[tool.X] section is never a candidate for deletion. The inverse of the rule above, and the more expensive mistake. Every other tool has no default_config, so its resolution chain has no level 3 to fall back on: lychee, typos, mypy, pytest, coverage, bumpversion and uv are deployed into pyproject.toml by repomatic init, and that section is the only config the tool will ever see. Deleting it does not restore inheritance from a bundled default, it drops the tool to level 4 and runs it bare, silently discarding every rule the section held. Read the tool's default_config before proposing a section be dropped "to inherit upstream updates". Re-running repomatic init fixes a stale section only for the components marked SyncMode.ONGOING in repomatic/registry.py (lychee, typos, bumpversion, uv). It never revisits a mypy, pytest or coverage section after the first write: lint-repo warns on each bundled template entry such a section lacks, to copy by hand or decline on purpose.workflow_dispatch:, missing paths:), the cause may be the upstream generator, not downstream tampering. Inspect repomatic/github/workflow_sync.py (generate_thin_caller, _adapt_trigger_paths, generate_workflow_header) before recommending the user re-run repomatic init to "fix" something init itself produced.claude.md may live under a sub-directory. [tool.repomatic] subagents.location and skills.location indicate a project where .claude/ is not at the root (e.g., dotfiles repos with dotfiles/.claude/CLAUDE.md). Search the configured location, not just ./CLAUDE.md.When in doubt, search the upstream codebase to confirm whether a behavior is intentional. Read [tool.repomatic] in the local pyproject.toml carefully before declaring anything missing.
all (default when $ARGUMENTS is empty): Run all audits below.workflows: Audit workflow files only.configs: Audit non-workflow config files only.upstream: Identify downstream innovations that could be contributed back to repomatic.Fetch every reference file at the version the downstream repo has actually adopted, never at the tip of main. The Context block above prints the uses: pins; take the tag from there and pass it as ref on every call:
$ gh api "repos/kdeldycke/repomatic/contents/{path}?ref=vX.Y.Z" --jq '.content' | base64 -dAn unpinned fetch resolves to main, which carries unreleased work. Audited against it, every change waiting for the next release reads as downstream drift, and the "fix" that follows can be worse than the phantom problem: a [tool.X] section matching its adopted bundled template exactly gets reported as stale, because main has since grown entries no release has shipped yet.
Keep the two axes apart in the report, because only one of them is actionable:
gh api repos/kdeldycke/repomatic/releases --jq '.[].tag_name'.main is unreleased and belongs in neither list. The changelog's top section is headed with a .devN version and a "not released yet" warning; anything described there is not yet available to any downstream repo.workflows)Compare each local thin-caller workflow against its reference. These should be identical (except for files listed in exclude). Flag:
workflow_dispatch).@vX.Y.Z tag).tests.yaml)The header (name, on:, concurrency:) is synced automatically, but custom job content is not. Compare the job content against the reference for:
actions/checkout, astral-sh/setup-uv — compare pinned versions. setup-uv carries a second, independent pin: a with: version: "X.Y.Z" input naming the uv it downloads. Absent, the runner installs whatever uv is newest, leaving the tool that enforces every cooldown without one; split across two values, the fleet silently tests two resolvers. lint-repo's setup-uv-version-pin check reports both, non-fatally.run: command pinning the toolkit (uvx 'repomatic==X.Y.Z' …) under a workflow that sets UV_EXCLUDE_NEWER must carry --exclude-newer-package repomatic=P0D on the same command line, since uvx reads no project configuration and the pin routinely names a release published hours ago. Without it the command cannot resolve, and every needs: metadata job dies with it. lint-repo's self-pin-cooldown-exemption check is fatal on this.UV_PYTHON.windows-11-arm + Python 3.10 (no native ARM64 build).repomatic run tool.report.fail_under under [tool.coverage], so a coverage regression never fails the suite.run: | where run: > is needed for multi-line single commands.paths: filters that don't fit the downstream projectHeader-only sync inherits the canonical paths: filter verbatim (after repomatic/** substitution). When the project's filesystem layout doesn't match, two outcomes are possible:
tests/**, uv.lock in a non-Python repo): the trigger never fires for them. Coverage is missing, not noisy. Recommend [tool.repomatic.workflow.ignore-paths] to drop them.install.sh, dotfiles/** in a config repo): the trigger silently skips PRs that should run CI. Recommend [tool.repomatic.workflow.extra-paths] to append them globally, or [tool.repomatic.workflow.paths] keyed by filename for a per-workflow wholesale replacement.The relevant config schema lives in WorkflowConfig (repomatic/config.py): source_paths, extra_paths, ignore_paths, and paths (per-workflow override dict, keyed by workflow filename). Per-workflow override is authoritative — it replaces the entire paths: list and ignores the other knobs.
Respect exclude entries from [tool.repomatic] in pyproject.toml. Report excluded files but do not flag them as drift.
configs)Compare these files against the upstream reference. Before flagging absence as DRIFT, verify the file is not deliberately omitted (see "Distinguishing real drift" above):
| File | What to check | Absence is OK when |
|---|---|---|
pyproject.toml [tool.typos] | Missing default.extend-identifiers for common capitalizations (GitHub, macOS, PyPI, iOS, etc.) | Never: typos carries no bundled fallback, so an absent section means the canonical proper-noun map is simply inactive. Recommend repomatic init typos. |
pyproject.toml [tool.bumpversion] | Missing ignore_missing_files | Project is not Python-versioned (no [project] table). |
pyproject.toml [tool.ruff] | Missing or divergent lint rules, preview settings | Always: ruff falls back to the bundled ruff.toml at runtime. Only flag when a local section overrides it and diverges. |
pyproject.toml [tool.mypy] | Missing settings compared to reference | No Python source. |
.github/ISSUE_TEMPLATE/ | Filename conventions (hyphens, not underscores), missing labels | Personal/internal repo without external bug reporters. |
.github/code-of-conduct.md | Title-case headings vs upstream sentence case, plaintext email vs anti-scrape obfuscation, stale attribution URLs | Replace verbatim with upstream when divergence is detected. |
.github/funding.yml | Compare with reference | — |
.gitignore | Must be a real file: git skips an in-tree .gitignore reached via symlink; otherwise content vs upstream | Auto-generated by repomatic; drift means the user should re-run sync. |
pyproject.toml [tool.lychee] | Note differences (usually project-specific, just flag for review); a root lychee.toml wins as native config | Project doesn't run lychee. |
Skip files that are intentionally excluded via exclude in [tool.repomatic]. Cross-check [tool.ruff] extend-exclude and similar before flagging "missing" entries.
upstream)Scan the downstream repo for patterns, workarounds, or configurations that are better than or missing from the upstream reference. These are candidates for contributing back to kdeldycke/repomatic. Look for:
extend-include patterns, pytest addopts, coverage settings that are more complete than upstream.pyproject.toml patterns: e.g., dependency group definitions, build config, or tool settings that could be generalized.claude.md section.For each candidate, assess:
kdeldycke/repomatic, with a draft title and description.For each audit area, produce:
Status guide:
[tool.repomatic] exclude, runtime materialization, or a tool-registry default, mark N/A instead.When unsure between DRIFT and N/A, lean N/A and explain in the description; over-flagging produces noisy reports the user has to refute.
Suggest the user run:
main: the sync-repomatic autofix job reconciles thin-caller workflow drift, and lint.yaml flags remaining metadata issues./sphinx-docs-sync to audit docs/ against the upstream kdeldycke/repomatic reference when this repo has a Sphinx documentation tree. The sphinx-docs agent (.claude/agents/sphinx-docs.md, opt-in via repomatic init subagents/sphinx-docs) holds the canonical conventions for configuration.md, cli.md, install.md, conf.py, and the standard page roster — recommend opting in when the repo has Sphinx docs that drift from upstream patterns.If the audit surfaces a generator behavior that produces unwanted output (e.g., a thin-caller trigger the user wants gone, a header paths: filter that doesn't fit), fix it in the upstream tool (repomatic/github/workflow_sync.py, repomatic/config.py) rather than asking the user to hand-patch the generated file every time repomatic init runs.
© kdeldycke, BSD-2-Clause. 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 dotfiles/.agents/skills/repomatic-audit of kdeldycke/dotfiles.
Open the folder on GitHubat commit 7947d0f
Repomatic Audit 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 |
|---|---|---|---|---|---|---|
| Repomatic Audit this skillkdeldycke/dotfiles | 173 | — | ~4.2k | Automated safety check: Notes | BSD-2-Clause | |
| Driftalsk1992/CloddsBot | 2.9k | — | ~299 | Automated safety check: Pass | MIT | |
| Upstream Protocol Drift Watchrebornix/Agmente | 545 | — | ~914 | Automated safety check: Pass | MIT | |
| Harness Drift From Historyruvnet/ruflo | 74k | — | ~632 | Automated safety check: Notes | MIT | |
| Upstream PRyc-software/qm | 15k | — | ~2.3k | Automated safety check: Notes | MIT | |
| SEO Driftsickn33/agentic-awesome-skills | 47k | 1 repos | ~1.8k | Automated safety check: Pass | MIT |
alsk1992/CloddsBot
Drift Protocol - perpetuals and prediction markets on Solana
rebornix/Agmente
Dynamically inspect ACP and Codex upstream repos using .agmente.paths, detect protocol/API/spec drift, and produce a risk-scored regression report.
ruvnet/ruflo
One-command drift detection. An agent skill from ruvnet/ruflo.
yc-software/qm
Send a change to upstream qm without leaking organization-specific context.
sickn33/agentic-awesome-skills
Snapshot a site's SEO state and detect ranking, indexation, metadata, canonical, robots, schema, and on-page regressions over time.
xbtlin/ai-berkshire
Compares two dated research reports on one company to separate real factual change from price moves and rewording, then reports whether the investment thesis has drifted.
kdeldycke/dotfiles
Audit and tune the configuration of coding agents across Claude Code and pi - settings files (settings.json, settings.local.json), permission rules, instruction files (CLAUDE.md, AGENTS.md), skill…
kdeldycke/dotfiles
Analyze a GitHub repository's issues and PRs to find unaddressed feature requests, dismissed ideas, maintenance signals, and opportunities relevant to the current project.
kdeldycke/dotfiles
Create project logo and banner SVGs, then export them to light and dark PNG variants.
kdeldycke/dotfiles
Fill a web form using data extracted from local documents (PDFs, images, spreadsheets).
kdeldycke/dotfiles
Rename documents and files (PDFs, images, screenshots, etc.) by reading their content to extract the effective/publication date, then renaming them with a "YYYY-MM-DD - Clear descriptive title.ext"…
kdeldycke/dotfiles
Choose what a repository's CI test matrix covers. An agent skill from kdeldycke/dotfiles.
Audit how far a downstream repo has drifted from the upstream repomatic reference. Repomatic Audit is an agent skill from kdeldycke/dotfiles. Audit how far a downstream repo has drifted from the upstream repomatic reference.
Run `npx skills add kdeldycke/dotfiles --skill repomatic-audit -a claude-code`. Or copy the skill folder (dotfiles/.agents/skills/repomatic-audit in kdeldycke/dotfiles) into .claude/skills/repomatic-audit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kdeldycke/dotfiles --skill repomatic-audit -a codex`. Or copy the skill folder (dotfiles/.agents/skills/repomatic-audit in kdeldycke/dotfiles) into .agents/skills/repomatic-audit 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 kdeldycke/dotfiles --skill repomatic-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/repomatic-audit, .gemini/skills/repomatic-audit, .github/skills/repomatic-audit and .opencode/skills/repomatic-audit in your project.
Going by SKILL.md and its folder, Repomatic Audit needs the command-line tools its instructions call (gh and uvx). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, WebFetch, Agent. Compatibility (from SKILL.md): Designed for Claude Code. Recommended model: Opus..
SKILL.md contains no URLs. Its commands use gh and uvx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Repomatic Audit is published under the BSD-2-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k 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 Repomatic Audit: Drift (alsk1992/CloddsBot, 2.9k stars), Upstream Protocol Drift Watch (rebornix/Agmente, 545 stars), Harness Drift From History (ruvnet/ruflo, 74k stars) and Upstream PR (yc-software/qm, 15k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kdeldycke (a GitHub user) maintains it in kdeldycke/dotfiles, which has 173 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 4, 2026.
Source: kdeldycke/dotfiles on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.