Brainstorming
xpinjection/test-driven-spring-boot
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior.
Universal radial-tree exploration engine — loads a preset, grounds a root, expands every node through 12 framing passes, derives each child in 12 evidence-bearing fields, scores it, and recurses on…
$ npx skills add skymanbp/cc-tree --skill tree -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install skymanbp/cc-tree tree --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/skymanbp/cc-tree.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/tree .claude/skills/tree && 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 "tree" agent skill from https://github.com/skymanbp/cc-tree/tree/main/skills/tree into .claude/skills/tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tree", 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/skymanbp/cc-tree/tree/main/skills/treeType 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 skymanbp/cc-tree --skill tree -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install skymanbp/cc-tree tree --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skymanbp/cc-tree.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/tree .agents/skills/tree && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tree" agent skill from https://github.com/skymanbp/cc-tree/tree/main/skills/tree into .agents/skills/tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tree", 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 skymanbp/cc-tree --skill tree -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install skymanbp/cc-tree tree --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skymanbp/cc-tree.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/tree .cursor/skills/tree && 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 "tree" agent skill from https://github.com/skymanbp/cc-tree/tree/main/skills/tree into .cursor/skills/tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tree", 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/skymanbp/cc-tree.git --path skills/tree--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 skymanbp/cc-tree --skill tree -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install skymanbp/cc-tree tree --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skymanbp/cc-tree.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/tree .gemini/skills/tree && 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 "tree" agent skill from https://github.com/skymanbp/cc-tree/tree/main/skills/tree into .gemini/skills/tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tree", 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 skymanbp/cc-tree treeInstalls 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 skymanbp/cc-tree --skill tree -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/skymanbp/cc-tree.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/tree .github/skills/tree && 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 "tree" agent skill from https://github.com/skymanbp/cc-tree/tree/main/skills/tree into .github/skills/tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tree", 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 skymanbp/cc-tree --skill tree -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install skymanbp/cc-tree tree --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skymanbp/cc-tree.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/tree .opencode/skills/tree && 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 "tree" agent skill from https://github.com/skymanbp/cc-tree/tree/main/skills/tree into .opencode/skills/tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tree", 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.
treeUniversal radial-tree exploration engine — loads a preset, grounds a root, expands every node through 12 framing passes, derives each child in 12 evidence-bearing fields, scores it, and recurses on…
Tree is an agent skill from skymanbp/cc-tree. Universal radial-tree exploration engine — loads a preset, grounds a root, expands every node through 12 framing passes, derives each child in 12 evidence-bearing fields, scores it, and recurses on advances leaves until substantive convergence (or a user cap). Caps default to ∞; defer / TODO / NEEDS-MORE-INFO leaves are hard-banned. Use when the user wants the engine itself — a custom preset via --preset <path, explicit control of a run, or "tree of thoughts" / 穷尽的树状探索 in general; for the four shipped use-cases…
Its SKILL.md is about 3.7k 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 Brainstorming. The repository describes itself as: Claude Code plugin: universal radial-tree exploration engine. One tree skill + swappable presets (brainstorm / attack / design / code-audit) for divergent ideation, adversarial… The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit a780af1. 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:
pythonFrom 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.
Tree loads about 3.7k tokens when it runs. Until then it costs about 168 tokens; SKILL.md has 1,564 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 skymanbp/cc-tree at commit a780af1, republished under its MIT licence (© skymanbp). 1,564 words, ~3,732 tokens.
.claude/skills/tree/SKILL.md (or your agent's skills folder).What this skill is. A single engine implementing recursive radial-tree exploration (root → 12-framing expansion → per-node 12-field derivation → score → recurse on high-verdict leaves → terminate on substantive convergence). What varies between use-cases (brainstorm vs critique vs design vs code-audit) is the baseline recipe, node schema, scoring dimensions, and verdict vocabulary — all parameterized via a preset file.
What this skill is NOT. Not a one-shot LLM call that returns a bulleted list. Not a chat interface — once the §2.0 glossary grill has settled terminology and the root is written, the engine runs to convergence without further prompts (§F6). Not bundled with a model — pure prompt-engineering on top of Claude Code's existing model setting.
The full engine specification lives in docs/ENGINE.md.
This SKILL.md is a 7-step navigation guide; Read docs/ENGINE.md
before producing the first node (the engine spec is what defines
"valid" for everything you'll write).
/cc-tree:tree <root> --preset <name|path> [flags]<root> is preset-typed:
brainstorm preset → topic string, e.g. "ways to detect dark-matter substructure"attack preset → file path (.md / .tex / etc.) or quoted argument-textdesign preset → design-prompt string or .md file pathcode-audit preset → file path or directory path--preset is required:
brainstorm, attack, design, code-audit (resolve to
presets/<name>.md in this plugin)./my-custom.md (any .md file with the right frontmatter)| Flag | Default | Meaning |
|---|---|---|
--lang <tag|auto> | en | Output language for all localized prose (node statements, derivations, report narrative, warnings). Machine tokens — flag/command names, frontmatter & JSON keys, root_kind values, verdict labels, status tokens, filenames — always stay English. <tag> is a BCP-47-like code (en, zh, zh-Hans, zh-Hant, fr-CA); zh = Simplified Chinese, zh-Hant = Traditional. auto detects the dominant language of <root> and falls back to en for mixed / path-only / code-only input. Resolved once before preset load, recorded in run metadata (language_request / output_language / language_source), and never prompted mid-run. Full precedence, resume, and chain semantics: docs/ENGINE.md §1.0. |
--width N | ∞ | Cap on final leaf count (the outer arc of the tree). ∞ / inf / unspecified all mean unlimited. |
--depth N | ∞ | Cap on tree depth from root. |
--rounds N | conv | Cap on expansion rounds. conv = no cap; terminate by §6 substantive convergence. |
--max-branches N | ∞ | Cap on new branches per node per round. Floor is 12 because §3 requires all 12 framings to fire; this flag only raises the ceiling. |
--out <dir> | tree-out/<UTCdate>__<slug>/ | Output directory. Per-preset commands override (e.g. brainstorm-out/). |
--glossary <path> | (preset-determined) | Path to a glossary / FACTS.md / glossary section in a dossier; used by §2.0 grill prelude. |
--field <name|path> | (none) | Field profile for domain-aware reviewer weighting. <name> → field-profiles/<name>.md in this plugin; <path> → a literal file. Feeds §3.C / §3.D / §3.I / §3.J + the §3.X / §4 evidence bar. Missing profile → warn + continue (non-blocking). See docs/ENGINE.md §2.2. |
--seed-from <primary.md> | (none) | Seed the tree from a prior run's primary deliverable (shortlist.md / options.md / confirmed.md): each listed item enters as a depth-1 seed node and is re-expanded. The substrate for cross-preset chaining (docs/chaining.md). Alias: --from-prior. |
--no-grill | off | Skip §2.0 glossary grill prelude. Marks root-node terms as unverified; §6 convergence adds a warning. |
--no-online | off | Disable WebSearch / WebFetch. Local + already-Read references only. |
--min-frameworks N | 12 | Minimum framing passes per node. Floor is 12 (full §3.A–§3.L); flag exists for documentation, not relaxation. |
--min-novelty-ratio R | 0.15 | §6.1 condition 2 requires "last 2 rounds' high-verdict / total < R". |
Presets and their command wrappers may document additional preset-specific flags (e.g.
attack's--focus <section|claim|equation>); a flag documented by the active preset or its wrapper is not "unknown" (docs/ENGINE.md§1.3).
Caps default to ∞ on purpose. The intended termination is §6 substantive convergence — see
docs/ENGINE.md §6. Caps are escape valves for quick exploration; when one trips, the engine still drives every in-flight node to a complete state before reportingWIDTH_CAP_REACHED/DEPTH_CAP_REACHED/ROUNDS_EXHAUSTED.
Required Reads at session start (before producing the first node):
- The preset file (
presets/<name>.mdor--preset <path>) — full file.docs/ENGINE.md— full file. This is the contract.docs/framings.md— the 12 framings with per-preset examples.- If
--glossary <path>: Read that glossary file in full.
Open the preset file. Extract from its YAML frontmatter:
name, description, use-when (informational)root_kind — topic | artifact | code | design-promptsubject_label — what each tree node is called (idea, critique,
option, finding, …)verdict_enum — 4-tuple: advances / kept / pruned / blockedconvergence_metric — which verdict role counts toward the §6.1
condition-2 ratio.
It must be one of the four verdict_enum role keys verbatim
(advances / kept / pruned / blocked); alias spellings like
novelty_ratio are rejected by the validator. All four shipped
presets use advances (docs/presets.md)score_dims — list of 5 scoring dimensions (key + name + desc)node_schema — list of 12 node-field namesoutput_artifacts — file names for the per-verdict final reportsThe preset body (below frontmatter) supplies:
Follow the preset's baseline recipe. For all presets this includes:
--no-grill): glossary-grill prelude. Lock root-node
noun-phrases to the glossary if one was supplied; surface MISSING /
AMBIGUOUS / CONFLICT one question at a time per
docs/ENGINE.md §2.0.file:line
or URL evidence.Save the root to <out>/tree.md + <out>/tree.json before producing
any framing branches.
For each node (starting with root, then any high-verdict leaf in the next round):
Run §3.A through §3.L, each producing at least 1 new child branch.
See docs/framings.md for the full prompt per
framing, including domain-specific examples per preset.
Parallelize when fan-out ≥ 5 (always true for the root and hot
leaves): dispatch the 12 framings across Agent(Explore) sub-agents per
the mandatory protocol in
docs/ENGINE.md §8.1.
Running them sequentially at that fan-out is a defect. Deep marginal
leaves (< 5 expected children) may run sequentially.
§3.X (if --no-online is off): per node, do 1 round of WebSearch +
WebFetch. The query set is preset-determined (brainstorm/design →
prior art + tooling; attack → critiques / errata; code-audit → CVEs /
advisories) — see docs/framings.md §3.X.
For each branch produced in §3, fill the preset's 12 node-field schema.
Field requirements live in
docs/ENGINE.md §4.
Hard rules:
应该 / 大概 / probably / maybe / 也许 — the
field is invalid and must be rewritten.defer / future work / TODO / FIXME / 略 / details omitted / 待定 / NEEDS-MORE-INFO-style placeholders — the
node is forced to INCOMPLETE_FORBIDDEN and must be driven to
completion before counting.python (sympy/numpy) sanity
check via Bash — output pasted into the field.WebFetch of the actual arXiv abs / DOI
/ spec page; WebSearch snippets are not sufficient.Append the filled node to tree.md + tree.json immediately
(incremental write — see §7 for crash-safety contract).
Score the node along the preset's 5 dimensions (each 0–3, integer).
Sum = score (max 15). Map score → verdict via the preset's
verdict_enum and the preset-specific rule (e.g. brainstorm:
score ≥ 11 ∧ no [NEEDS_VERIFICATION] → PROMISING; attack:
score ≥ 11 ∧ artifact_defense empty → CONFIRMED).
Sibling merging (§5.4): any two siblings with cosine similarity ≥ 0.85
on their idea / critique / option / finding statement → merge, keep
the higher-scored one, tag the other MERGED_INTO=<id>.
After every round, evaluate the 6 conditions in
docs/ENGINE.md §6.
All 6 must hold simultaneously to declare CONVERGED. If any
user-specified --width / --depth / --rounds cap trips first, report
the appropriate *_CAP_REACHED / ROUNDS_EXHAUSTED status, but all
leaves must be complete before stopping.
If neither convergence nor a cap-trip, pick the highest-verdict leaf that hasn't been re-expanded yet, run §3–§5 on it, and loop.
When termination is declared, write the preset's output_artifacts to
<out>/. For all presets this includes:
tree.md — full tree, human-readabletree.json — full tree, machine-readableshortlist.md,
confirmed.md, options.md, findings.md)pending.md,
marginal.md, refuted.md, …)Then emit a terminal-report block per
docs/ENGINE.md#74-final-report.
docs/ENGINE.md §9 for the full list)The five that most reliably degrade output quality:
❌ Pseudo-divergence. Two branches that differ only in word choice. Each branch must offer at least one of (a) a different testable prediction, (b) a different failure mode, (c) a different resource profile. Otherwise: merge.
❌ Defer-as-output. "This direction is promising but requires detailed analysis beyond scope." Forbidden by §F8. The engine must actually do the analysis (Read / WebFetch / Bash) or route to a sibling via §3.E constraint-variation.
❌ Cap-as-convergence. Declaring --width 20 reached → done.
§6 convergence is the intended termination; caps are escape
valves and trip ≠ converge.
❌ Skipping §3.K. "High-risk branches feel speculative, I'll focus on safe ones." §F4 + §3.K force ≥ 1 fully-explored high-risk branch per pass; absent it the pass is invalid.
❌ WebSearch snippet → conclusion. Snippets are search results,
not source-of-truth. Every external citation requires WebFetch
of the actual page; otherwise the field is invalid (rule 04 +
rule 01 from cc-enforcer, if installed).
<out>/
├── tree.md # human-readable outline of every node
├── tree.json # machine-readable, full 12 fields per node
├── glossary-anchors.md # §2.0 prelude output (unless --no-grill was set)
├── <primary>.md # preset's "advances" / top-recommendation file
├── <secondary>.md* # preset's "marginal / pending / refuted" files
├── <per-item>.md* # preset-specific per-item detail files, when the
│ # preset's body declares them (design writes
│ # option_<id>.md, the design→attack chain handoff)
├── REPORT.md # §7.4 final-report block (also echoed to stdout)
└── nodes/
└── <id>.md # spilled when a node's evidence > 100 linesThis is the same layout as docs/ENGINE.md §7.2;
that section is authoritative if the two ever disagree.
Each node lands the moment its 12 fields are filled (§7.1 incremental
write contract). Restart from interruption: just re-invoke the same
/cc-tree:tree <root> --preset <name> --out <same-dir> — the engine
detects the existing tree and resumes from the highest-id leaf.
docs/ENGINE.md — full engine spec (§0–§11;
§0–§9 bind a run, §10–§11 bind a preset author)docs/framings.md — the 12 framings, per-preset examplesdocs/presets.md — how to author your own presetpresets/ — shipped presetscommands/ — ergonomic slash-command wrappersdocs/EVALUATION.md — design rationale© skymanbp, 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 skills/tree of skymanbp/cc-tree.
Open the folder on GitHubat commit a780af1
Tree 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 |
|---|---|---|---|---|---|---|
| Tree this skillskymanbp/cc-tree | 101 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Brainstormingxpinjection/test-driven-spring-boot | 112 | 54 repos | ~2.6k | Automated safety check: Pass | MIT | |
| LLM Councilgcpdev/llm-council-skill | 461 | 1 repos | ~1k | Automated safety check: Notes | MIT | |
| Typesafe AIOpenAgentsInc/openagents | 455 | 9 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Yao Meta Skillyaojingang/yao-meta-skill | 2.7k | — | ~768 | Automated safety check: Pass | MIT | |
| Trellis StartROYIANS/foliq-print-template-designer | 135 | 6 repos | ~646 | Automated safety check: Pass | MIT |
xpinjection/test-driven-spring-boot
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior.
gcpdev/llm-council-skill
Multi-LLM collaborative brainstorming and planning. An agent skill from gcpdev/llm-council-skill.
OpenAgentsInc/openagents
Build AI-powered software with TypeSafe: small units of AI intelligence you can use like programming primitives.
yaojingang/yao-meta-skill
Create, improve, or evaluate an existing skill from workflows, prompts, SOPs, scripts.
ROYIANS/foliq-print-template-designer
Initializes an AI development session by reading workflow guides, developer identity, git status, active tasks, and project guidelines from .trellis/.
jnMetaCode/superpowers-zh
Turns a rough idea into an approved design before any code is written, sorting the request into spike, bounded or architectural and enforcing an approval gate.
Categories
Universal radial-tree exploration engine — loads a preset, grounds a root, expands every node through 12 framing passes, derives each child in 12 evidence-bearing fields, scores it, and recurses on…. Tree is an agent skill from skymanbp/cc-tree. Universal radial-tree exploration engine — loads a preset, grounds a root, expands every node through 12 framing passes, derives each child in 12 evidence-bearing fields, scores it, and recurses on advances leaves until substantive convergence (or a user cap).
Tree fits situations like: the user wants the engine itself — a custom preset via --preset <path; explicit control of a run; tree of thoughts / 穷尽的树状探索 in general; for the four shipped use-cases prefer /cc-tree:brainstorm.
Run `npx skills add skymanbp/cc-tree --skill tree -a claude-code`. Or copy the skill folder (skills/tree in skymanbp/cc-tree) into .claude/skills/tree in your project. Claude Code loads it when a task matches its description.
Run `npx skills add skymanbp/cc-tree --skill tree -a codex`. Or copy the skill folder (skills/tree in skymanbp/cc-tree) into .agents/skills/tree 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 skymanbp/cc-tree --skill tree -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tree, .gemini/skills/tree, .github/skills/tree and .opencode/skills/tree in your project.
Going by SKILL.md and its folder, Tree needs the command-line tools its instructions call (python). Our summary lists: Python 3.
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.
Tree 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.7k 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.
Skills that share tags, products or a category with Tree: Brainstorming (xpinjection/test-driven-spring-boot, 112 stars), LLM Council (gcpdev/llm-council-skill, 461 stars), Typesafe AI (OpenAgentsInc/openagents, 455 stars) and Yao Meta Skill (yaojingang/yao-meta-skill, 2.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
skymanbp (a GitHub user) maintains it in skymanbp/cc-tree, which has 101 GitHub stars. The repository was last updated on October 2, 2026.
Source: skymanbp/cc-tree on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.