Hook Development for Claude Code Plugins
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
Antigravity and Gemini CLI artifact schemas: .gemini/ paths, extensions, hooks.
$ npx skills add xiaolai/nlpm --skill conventions-antigravity -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install xiaolai/nlpm conventions-antigravity --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/xiaolai/nlpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/nlpm/conventions-antigravity .claude/skills/conventions-antigravity && 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 "conventions-antigravity" agent skill from https://github.com/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravity into .claude/skills/conventions-antigravity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-antigravity", 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/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravityType 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 xiaolai/nlpm --skill conventions-antigravity -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install xiaolai/nlpm conventions-antigravity --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xiaolai/nlpm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/nlpm/conventions-antigravity .agents/skills/conventions-antigravity && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "conventions-antigravity" agent skill from https://github.com/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravity into .agents/skills/conventions-antigravity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-antigravity", 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 xiaolai/nlpm --skill conventions-antigravity -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install xiaolai/nlpm conventions-antigravity --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xiaolai/nlpm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/nlpm/conventions-antigravity .cursor/skills/conventions-antigravity && 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 "conventions-antigravity" agent skill from https://github.com/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravity into .cursor/skills/conventions-antigravity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-antigravity", 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/xiaolai/nlpm.git --path skills/nlpm/conventions-antigravity--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 xiaolai/nlpm --skill conventions-antigravity -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install xiaolai/nlpm conventions-antigravity --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xiaolai/nlpm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/nlpm/conventions-antigravity .gemini/skills/conventions-antigravity && 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 "conventions-antigravity" agent skill from https://github.com/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravity into .gemini/skills/conventions-antigravity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-antigravity", 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 xiaolai/nlpm conventions-antigravityInstalls 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 xiaolai/nlpm --skill conventions-antigravity -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/xiaolai/nlpm.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/nlpm/conventions-antigravity .github/skills/conventions-antigravity && 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 "conventions-antigravity" agent skill from https://github.com/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravity into .github/skills/conventions-antigravity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-antigravity", 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 xiaolai/nlpm --skill conventions-antigravity -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install xiaolai/nlpm conventions-antigravity --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/xiaolai/nlpm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/nlpm/conventions-antigravity .opencode/skills/conventions-antigravity && 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 "conventions-antigravity" agent skill from https://github.com/xiaolai/nlpm/tree/main/skills/nlpm/conventions-antigravity into .opencode/skills/conventions-antigravity/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "conventions-antigravity", 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.
conventions-antigravityAntigravity and Gemini CLI artifact schemas: .gemini/ paths, extensions, hooks.
Conventions Antigravity is an agent skill from xiaolai/nlpm. Antigravity and Gemini CLI artifact schemas: .gemini/ paths, extensions, hooks.
Its SKILL.md is about 3.1k 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 Agent Workflows, covering Hooks and plugins. The repository describes itself as: Natural-Language Programming Manager — scan, lint, and score NL artifacts with Claude-native quality scoring. The licence is ISC.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 307328b. 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:
npxgeminiFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
geminicli.comdevelopers.googleblog.comantigravity.googlecodelabs.developers.google.comgithub.comFrom 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.
Conventions Antigravity loads about 3.1k tokens when it runs. Until then it costs about 26 tokens; SKILL.md has 1,266 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 xiaolai/nlpm at commit 307328b, republished under its ISC licence (© xiaolai). 1,266 words, ~3,055 tokens.
.claude/skills/conventions-antigravity/SKILL.md (or your agent's skills folder).Tool-specific overlay for Google Antigravity CLI artifacts, including legacy Gemini CLI paths during the transition window. Loaded by the scorer and checker when an artifact is classified as Tier 2-Antigravity (per agents/scorer.md step 3). The universal floor lives in nlpm:conventions.
Status: Antigravity 2.0 was announced at Google I/O 2026 on 2026-05-19 (six days before this file was written). The directory layout is still settling, the official Antigravity-specific spec doc is sparse, and two authoritative research passes disagreed on .agent/ (singular) vs .agents/ (plural) as the canonical skills path. This skill is advisory-only for Antigravity-specific artifacts. PR-B verification trigger conditions are recorded in analysis/multi-tool-design-2026-05.md.
Transition timeline:
.gemini/ paths fade to legacy.Primary authoritative sources:
| Artifact | Project scope (Antigravity) | Project scope (Gemini, legacy) | User scope |
|---|---|---|---|
| Skills | <workspace>/.agent/skills/<name>/SKILL.md (singular — Antigravity per codelab); .agents/skills/<name>/SKILL.md (cross-tool alias, plural) | .gemini/skills/<name>/SKILL.md | ~/.gemini/antigravity/skills/ (transitional global) or ~/.gemini/skills/ (legacy) |
| Slash commands | (under-documented for Antigravity) | .gemini/commands/<name>.toml | ~/.gemini/commands/ |
| Hooks | (under-documented for Antigravity) | .gemini/settings.json → hooks object | ~/.gemini/settings.json |
| MCP servers | (under-documented for Antigravity) | mcpServers JSON key inside .gemini/settings.json | same |
| Extensions / plugins | "Antigravity plugins" — gemini-extension.json (renamed in transition, layout TBD) | ~/.gemini/extensions/<name>/gemini-extension.json | same |
| Memory file | GEMINI.md (inherited; configurable via context.fileName array) | GEMINI.md (workspace + ancestors) | ~/.gemini/GEMINI.md |
| System config | TBD | /etc/gemini-cli/settings.json | — |
Discovery precedence within a tier (Gemini-lineage; assumed to carry over): built-in → extension → user → workspace. .agents/skills/ beats .gemini/skills/ (cross-tool path wins).
Uncertainty (verify before scoring):
<workspace>/.agent/skills/ (singular, from Antigravity codelab) vs .agents/skills/ (plural, cross-tool alias from agentskills.io) — both may be true (Antigravity-specific singular path + cross-tool plural alias), or one may be a documentation error. Recommend recognizing both as valid skill paths.name, description required only)Antigravity (and Gemini CLI) explicitly adopt the agentskills.io open standard. Required: name, description. Same as every other tool.
Antigravity/Gemini-specific extensions documented to date:
activate_skill tool invocation (in-agent) to load a skill on demand./skills slash command (in-agent) lists installed skills.gemini skills terminal command (list/install/uninstall) — Gemini-only; Antigravity CLI uses npx skills add instead.Install verbs:
npx skills add github.com/google/skills (per github.com/google/skills repo page).npx skills install (treat as equivalent; add is the canonical command).gemini extensions install <github-url|path>.gemini-extension.json (extension manifest, becoming "Antigravity plugin"){
"name": "my-extension",
"version": "1.0.0",
"mcpServers": { /* MCP server registrations */ },
"contextFileName": "AGENTS.md",
"excludeTools": ["WebFetch"]
}Required: name, version. Notable optional: mcpServers, contextFileName, excludeTools. The rename to "Antigravity plugin" is announced; the manifest schema is documented to "preserve" extension semantics but Google hasn't published the full delta.
.gemini/commands/<name>.toml (slash commands — TOML)prompt = """
Review the diff and check for {{args}}.
"""
description = "Custom code review with focus area"Required field: prompt.
Optional: description (auto-generated from filename if omitted).
Template syntax (Gemini-specific):
{{args}} — raw argument injection.!{shell command} — runs shell, args auto-escaped.@{path} — file/directory injection. Respects .gitignore and .geminiignore. Supports PNG/JPEG/PDF/audio/video.Subdirectory layout becomes a namespace: .gemini/commands/ns/cmd.toml → /ns:cmd.
Antigravity CLI status: unclear whether TOML slash commands carry over. Treat as legacy-only for now; Antigravity-specific command format TBD.
Gemini (and inherited Antigravity) decomposes the lifecycle into Agent/Model/Tool layers, not the tool-centric model Claude and Codex use.
| Event | Trigger |
|---|---|
SessionStart | Session begin |
BeforeAgent | Before each agent turn |
BeforeModel | Before LLM invocation |
BeforeToolSelection | Before the model decides which tool to call |
BeforeTool | Before tool execution (after selection) |
AfterTool | After tool execution |
AfterModel | After LLM response |
AfterAgent | After agent turn complete |
SessionEnd | Session end |
Notification | On notification |
PreCompress | Before context compaction (Gemini's name for Claude's PreCompact) |
No 1:1 mapping to Claude Code or Codex events. Specifically:
BeforeModel vs BeforeToolSelection distinction has no Claude/Codex analog — both fall under Claude's PreToolUse.UserPromptSubmit or PermissionRequest.I/O contract (Gemini lineage): JSON on stdin with session_id, transcript_path, cwd, hook_event_name, timestamp. JSON on stdout: systemMessage, decision ("allow"/"deny"), reason, continue, suppressOutput. Exit codes: 0 = ok, 2 = block (stderr = reason), other = warning.
Antigravity CLI hook event names: TBD — Google's transition post says "preserves hooks" without enumerating the event set. Treat the Gemini list as the current best guess.
GEMINI.md is hierarchical: ~/.gemini/GEMINI.md → workspace + ancestor GEMINI.md files → JIT-discovered GEMINI.md on file access. All concatenated per prompt.
Distinctive features (versus AGENTS.md and CLAUDE.md):
@file.md imports via the Memory Import Processor. Verified 2026-05-26 against geminicli.com/docs/reference/memport/: imports nest (configurable max depth, default 5), accept any filename (not just GEMINI.md), and take relative or absolute paths. A GEMINI.md containing only @AGENTS.md resolves to AGENTS.md's full contents. validateImportPath restricts imports to allowed directories (repo-root siblings are fine).context.fileName in settings.json, which accepts an array — e.g., context.fileName: ["AGENTS.md", "CONTEXT.md", "GEMINI.md"]. This is the official interop hook for AGENTS.md (Codex's canonical) and CLAUDE.md (Claude Code's canonical).Recommended pattern for multi-tool projects (use context.fileName, NOT the @-import shim):
context.fileName: ["AGENTS.md"] in .gemini/settings.json — makes Gemini/Antigravity read AGENTS.md directly. nlpm decision #5: AGENTS.md is the canonical universal memory file. nlpm itself ships this exact .gemini/settings.json.GEMINI.md → @AGENTS.md shim? It works per the import-processor docs, but every documented example uses an explicit @./ / @../ prefix; the bare @AGENTS.md form (which Claude Code accepts natively in CLAUDE.md) is a valid relative path but unconfirmed against a live Gemini run. context.fileName has no such ambiguity — Gemini reads the named file directly with no import resolution involved.Gemini reads MCP servers from mcpServers key inside ~/.gemini/settings.json or .gemini/settings.json (NOT a separate .mcp.json file). Standard MCP server shape: command, args, env. Also configurable inside gemini-extension.json for extension-bundled servers.
Slash commands: /mcp list, /mcp auth.
Antigravity CLI MCP layout: TBD.
No central JSON marketplace manifest documented for Gemini CLI today. Discovery is via the Extensions Gallery at https://geminicli.com/extensions/ (community/partner/Google), GitHub-stars ranked, installed via gemini extensions install <github-url|path>.
Antigravity CLI marketplace layout: TBD.
github.com/google/skills is the official Google-published skills registry. Organized under skills/cloud/.... Installed via npx skills add google/skills. Cross-tool — targets Antigravity, Gemini CLI, Codex CLI, Claude Code, Cursor, and others.
| Date | Event |
|---|---|
| 2025-11-20 | Original Antigravity public preview |
| 2026-04 (Cloud Next) | github.com/google/skills official registry launched; npx skills cross-agent installer |
| 2026-05 | Extensions Gallery launched (Dynatrace, Elastic, Figma, Harness as partners) |
| 2026-05-19 (Google I/O) | Antigravity 2.0 announced; Antigravity CLI GA; Gemini CLI deprecation announced |
| 2026-06-18 (pending) | Gemini CLI stops serving AI Pro/Ultra/Free tiers |
This skill covers Antigravity CLI and legacy Gemini CLI conventions during the transition window. It does NOT cover:
nlpm:conventionsnlpm:scoringMajor uncertainties — defer deep audit until resolved:
.agent/ vs plural .agents/ — codelab uses singular for Antigravity workspace skills; agentskills.io cross-tool alias uses plural. Auditor should recognize both as valid.npx skills verb — add per repo page, install per Cloud Next blog. add is canonical.github.com/google-antigravity/antigravity-cli — research surfaced this org/repo URL but the namespace differs from google/ proper. Verify before citing as authoritative.PR-B verification trigger: when Google publishes a stable Antigravity directory-layout spec (or when Antigravity overtakes Gemini CLI in real-world repo count), upgrade this skill from advisory to authoritative and add Antigravity-specific penalty rows to nlpm:scoring.
© xiaolai, ISC. 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 skills/nlpm/conventions-antigravity of xiaolai/nlpm.
Open the folder on GitHubat commit 307328b
Conventions Antigravity 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 |
|---|---|---|---|---|---|---|
| Conventions Antigravity this skillxiaolai/nlpm | 148 | — | ~3.1k | Automated safety check: Pass | ISC | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 38k | 10 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 38k | 7 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Claude Code Skill Developer Guidediet103/claude-code-infrastructure-showcase | 10k | 11 repos | ~3.5k | Automated safety check: Pass | MIT | |
| Plugin Settings Patternanthropics/claude-plugins-official | 38k | 7 repos | ~3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 |
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
diet103/claude-code-infrastructure-showcase
A guide to creating and managing Claude Code skills with auto-activation: skill-rules.json triggers, hooks, enforcement levels, YAML frontmatter and progressive disclosure.
anthropics/claude-plugins-official
Shows how Claude Code plugins keep per-project settings and state in .claude/plugin-name.local.md files with YAML frontmatter and a markdown body.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
anthropics/claude-plugins-official
Explains how to write Claude Code slash commands: Markdown files with YAML frontmatter, arguments, file references, bash context and interactive prompts.
xiaolai/nlpm
Universal NL conventions: SKILL.md open spec, AGENTS.md, vague quantifiers, naming.
xiaolai/nlpm
Codex CLI artifact schemas: config.toml, .codex-plugin, skills, hooks, AGENTS.md.
xiaolai/nlpm
Multi-agent workflow patterns: parallel dispatch, pipelines, QC gates, retries.
xiaolai/nlpm
NL artifact anti-patterns: vague quantifiers, bare prohibitions, oversized skills.
xiaolai/nlpm
100-point NL artifact rubric: penalty tables per artifact type, calibration cases.
xiaolai/nlpm
NL artifact test specs for /nlpm:test: spec format, TDD for skills and agents.
Categories
Antigravity and Gemini CLI artifact schemas: .gemini/ paths, extensions, hooks. Conventions Antigravity is an agent skill from xiaolai/nlpm.gemini/ paths, extensions, hooks.
Conventions Antigravity fits situations like: tasks that involve Hooks and plugins.
Run `npx skills add xiaolai/nlpm --skill conventions-antigravity -a claude-code`. Or copy the skill folder (skills/nlpm/conventions-antigravity in xiaolai/nlpm) into .claude/skills/conventions-antigravity in your project. Claude Code loads it when a task matches its description.
Run `npx skills add xiaolai/nlpm --skill conventions-antigravity -a codex`. Or copy the skill folder (skills/nlpm/conventions-antigravity in xiaolai/nlpm) into .agents/skills/conventions-antigravity 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 xiaolai/nlpm --skill conventions-antigravity -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/conventions-antigravity, .gemini/skills/conventions-antigravity, .github/skills/conventions-antigravity and .opencode/skills/conventions-antigravity in your project.
Going by SKILL.md and its folder, Conventions Antigravity needs the command-line tools its instructions call (npx and gemini). Our summary lists: Node.js.
SKILL.md names 5 domains. As links in the text: geminicli.com, developers.googleblog.com, antigravity.google, codelabs.developers.google.com and github.com. 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.
Conventions Antigravity is published under the ISC licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Conventions Antigravity: Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Claude Code Agent Development (anthropics/claude-plugins-official, 38k stars), Claude Code Skill Developer Guide (diet103/claude-code-infrastructure-showcase, 10k stars) and Plugin Settings Pattern (anthropics/claude-plugins-official, 38k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
xiaolai (a GitHub user) maintains it in xiaolai/nlpm, which has 148 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 9, 2026.
Source: xiaolai/nlpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.