Agent skill

Pp Facebook Marketplace

by mvanhorn in mvanhorn/printing-press-library

A write-gated Marketplace seller CLI for search, listing creation, photo upload, local watches, and replies.

Apache-2.0Auto-check: notesSales & Support

Install Pp Facebook Marketplace

skills CLI
$ npx skills add mvanhorn/printing-press-library --skill pp-facebook-marketplace -a claude-code

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

GitHub CLI
$ gh skill install mvanhorn/printing-press-library pp-facebook-marketplace --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/mvanhorn/printing-press-library.git skills-src && mkdir -p .claude/skills && cp -r skills-src/cli-skills/pp-facebook-marketplace .claude/skills/pp-facebook-marketplace && 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
pp-facebook-marketplace
GitHub stars
2.1k
Token cost
~3.2k tokens
SKILL.md length
1,189 words
Files
1
Skills in repo
506
Repo updated
First seen
Licence
Apache-2.0

At a glance

A write-gated Marketplace seller CLI for search, listing creation, photo upload, local watches, and replies.

  • Works in 3 steps: Install via the Printing Press… → Verify: facebook-marketplace-pp-cli… → Ensure the reported install directory is…
  • Phrases: search Facebook Marketplace
  • SKILL.md covers Prerequisites: Install the CLI, When to Use This CLI, Unique Capabilities and HTTP Transport, plus 11 more sections
  • Calls claude, npx and go

What it does

Pp Facebook Marketplace is an agent skill from mvanhorn/printing-press-library. A write-gated Marketplace seller CLI for search, listing creation, photo upload, local watches, and replies. Trigger phrases: search Facebook Marketplace, watch Marketplace listings, draft a Marketplace listing, reply to a Marketplace buyer.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Sales & Support, covering E-commerce operations. The repository describes itself as: Official library of CLIs generated by the CLI Printing Press. Endorsed, tested, and community-contributed. The licence is Apache-2.0.

When your agent uses it

  • Phrases: search Facebook Marketplace
  • Watch Marketplace listings
  • Draft a Marketplace listing
  • Reply to a Marketplace buyer

Example prompts

  • “/pp-facebook-marketplace”

Requirements

  • Node.js
  • Pre-approved tools (allowed-tools): Read, Bash

Workflow steps

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

  1. Install via the Printing Press installer. It defaults binaries to $HOME/.local/bin on macOS/Linux and…
  2. Verify: facebook-marketplace-pp-cli --version
  3. Ensure the reported install directory is on $PATH for the agent/runtime that will invoke this skill.

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • claude
    • npx
    • go

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

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

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

  • Credentials

    Names no API keys, tokens, secrets or passwords.

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

Context cost

Pp Facebook Marketplace loads about 3.2k tokens when it runs. Until then it costs about 68 tokens; SKILL.md has 1,189 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~68
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Bash

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 mvanhorn/printing-press-library at commit d9a1696, republished under its Apache-2.0 licence (© mvanhorn). 1,189 words, ~3,192 tokens.

Download SKILL.mdSave it as .claude/skills/pp-facebook-marketplace/SKILL.md (or your agent's skills folder).
name
pp-facebook-marketplace
description
A write-gated Marketplace seller CLI for search, listing creation, photo upload, local watches, and replies. Trigger phrases: `search Facebook Marketplace`, `watch Marketplace listings`, `draft a Marketplace listing`, `reply to a Marketplace buyer`.
allowed-tools
Read, Bash
author
user
license
Apache-2.0
argument-hint
<command> [args] | install cli|mcp
<!-- GENERATED FILE — DO NOT EDIT.
     This file is a verbatim mirror of library/commerce/facebook-marketplace/SKILL.md,
     regenerated post-merge by tools/generate-skills/. Hand-edits here are
     silently overwritten on the next regen. Edit the library/ source instead.
     See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->

Facebook Marketplace — Printing Press CLI

Prerequisites: Install the CLI

This skill drives the facebook-marketplace-pp-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:

  1. Install via the Printing Press installer. It defaults binaries to $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows:
    bash
    npx -y @mvanhorn/printing-press-library install facebook-marketplace --cli-only
  2. Verify: facebook-marketplace-pp-cli --version
  3. Ensure the reported install directory is on $PATH for the agent/runtime that will invoke this skill.

If the npx install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.6 or newer):

bash
go install github.com/mvanhorn/printing-press-library/library/commerce/facebook-marketplace/cmd/facebook-marketplace-pp-cli@latest

If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.

When to Use This CLI

Use this CLI for local, human-paced Facebook Marketplace workflows: searching, watching, triaging matches, drafting listings, and replying to seller inbox threads after explicit approval. Avoid using it for bulk automation or cross-platform scraping.

Unique Capabilities

These capabilities aren't available in any other tool for this API.

Seller workflow
  • draft — Draft a Marketplace title, description, and price suggestion from photos and notes.

    Use this when preparing a seller listing before opening a write-gated post flow.

    bash
    facebook-marketplace-pp-cli draft --photos chair-front.jpg,chair-tag.jpg --notes "walnut dining chair, small scratch on back" --json
  • reply — Prepare and send a seller inbox reply only when --write and doctor gating both pass.

    Use this only for human-approved sell-side messaging.

    bash
    facebook-marketplace-pp-cli reply --thread 1525836598898750 --message "Yes, it is still available." --write --json
Buy-side workflow
  • watch add — Persist a Marketplace search watch with deterministic keyword, price, and distance filters.

    Use this when the agent needs to monitor Marketplace without deciding relevance on every raw result.

    bash
    facebook-marketplace-pp-cli watch add --name "eames" --query "eames lounge" --max-price 1500 --radius 60 --must-have-keywords "chair,lounge" --json
  • matches — Show new watch matches after deterministic filtering.

    Use this when an agent needs the shortlist worth showing a human buyer.

    bash
    facebook-marketplace-pp-cli matches --new --json
Local mirror
  • stale — Find local seller listings older than seven days with no engagement.

    Use this when deciding which seller listings need price changes or renewal.

    bash
    facebook-marketplace-pp-cli stale --days 7 --json

HTTP Transport

This CLI uses Chrome-compatible HTTP transport over HTTP/3 for browser-facing endpoints. It does not require a resident browser process for normal API calls.

Command Reference

composer — Sell-side composer helper operations.

  • facebook-marketplace-pp-cli composer price_prediction — Fetch Marketplace composer price prediction.
  • facebook-marketplace-pp-cli composer root — Fetch Marketplace listing composer metadata.
  • facebook-marketplace-pp-cli composer shipping_options — Fetch calculated shipping options for a draft listing.

inbox — Marketplace inbox and messaging operations.

  • facebook-marketplace-pp-cli inbox list — Fetch Marketplace inbox overview.
  • facebook-marketplace-pp-cli inbox thread — Fetch a direct Marketplace/Messenger thread by thread id.
  • facebook-marketplace-pp-cli inbox message_seller — Send a Marketplace seller message.
  • facebook-marketplace-pp-cli inbox seller_threads — Fetch Marketplace seller inbox threads.
  • facebook-marketplace-pp-cli inbox seller_threads_page — Fetch a page of Marketplace seller inbox threads.

listing — Listing detail and sell-side listing operations.

  • facebook-marketplace-pp-cli listing change_availability — Change a Marketplace listing availability state.
  • facebook-marketplace-pp-cli listing create — Create a Marketplace listing from a prepared composer payload; pass --photo to upload local photos first.
  • facebook-marketplace-pp-cli listing delete — Delete a Marketplace for-sale item.
  • facebook-marketplace-pp-cli listing get — Fetch a Marketplace listing detail page payload.
  • facebook-marketplace-pp-cli listing media — Fetch Marketplace listing media payload.
  • facebook-marketplace-pp-cli listing upload-photo — Upload a local photo and return the Marketplace composer photo_id.

marketplace — Marketplace browse and location operations.

  • facebook-marketplace-pp-cli marketplace browse_feed — Fetch Marketplace browse feed results.
  • facebook-marketplace-pp-cli marketplace set_browse_radius — Set Marketplace browse radius.
  • facebook-marketplace-pp-cli marketplace set_buy_location — Set Marketplace buying location.

marketplace_search — Marketplace search operations.

  • facebook-marketplace-pp-cli marketplace_search — Search Marketplace listings.

Hand-written commands

  • facebook-marketplace-pp-cli draft — AI listing drafter from photos and notes.
  • facebook-marketplace-pp-cli watch — Buy-side deterministic watcher commands.
  • facebook-marketplace-pp-cli matches — Show watcher matches after deterministic filtering.
  • facebook-marketplace-pp-cli stale — Show local listings older than seven days with no engagement.
  • facebook-marketplace-pp-cli reply — Write-gated sell-side message reply helper.
Finding the right command

When you know what you want to do but not which command does it, ask the CLI directly:

bash
facebook-marketplace-pp-cli which "<capability in your own words>"

which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match — fall back to --help or use a narrower query.

Recipes

Create a buy-side watch
bash
facebook-marketplace-pp-cli watch add --name "eames" --query "eames lounge" --max-price 1500 --radius 60 --json

Stores deterministic filter criteria locally so future runs can compare new listings.

Read a direct Marketplace buyer thread
bash
facebook-marketplace-pp-cli inbox thread --thread 27799138726406206 --agent

Reads the real Messenger thread route for a known Marketplace thread id and returns parsed summary plus message text, sender ids, and timestamps.

Show full SKILL.md (527 more words)Show less
Draft a seller listing
bash
facebook-marketplace-pp-cli draft --photos chair-front.jpg,chair-tag.jpg --notes "walnut dining chair, small scratch" --json

Produces listing copy before any write-gated Marketplace mutation.

To create with local photos, run facebook-marketplace-pp-cli doctor first, then pass --write and one or more --photo flags to listing create. The CLI uploads each local file, appends the returned photo_id values to variables.input.data.common.photo_ids, and then submits the create mutation.

Auth Setup

Run facebook-marketplace-pp-cli auth login --chrome while logged in to Facebook in Chrome. The captured browser session is the credential; do not store session material in the Dropbox project workspace.

Run facebook-marketplace-pp-cli doctor to verify setup.

Agent Mode

Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.

  • Pipeable — JSON on stdout, errors on stderr

  • Filterable — --select keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:

    bash
    facebook-marketplace-pp-cli inbox list --fb-api-req-friendly-name example-resource --agent --select id,name,status
  • Previewable — --dry-run shows the request without sending

  • Non-interactive — never prompts, every input is a flag

  • Explicit retries — use --idempotent only when an already-existing create should count as success

Agent Feedback

When you (or the agent) notice something off about this CLI, record it:

facebook-marketplace-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
facebook-marketplace-pp-cli feedback --stdin < notes.txt
facebook-marketplace-pp-cli feedback list --json --limit 10

Entries are stored locally at ~/.facebook-marketplace-pp-cli/feedback.jsonl. They are never POSTed unless FACEBOOK_MARKET_FEEDBACK_ENDPOINT is set AND either --send is passed or FACEBOOK_MARKET_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.

Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.

Output Delivery

Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:

SinkEffect
stdoutDefault; write to stdout only
file:<path>Atomically write output to <path> (tmp + rename)
webhook:<url>POST the output body to the URL (application/json or application/x-ndjson when --compact)

Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.

Named Profiles

A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.

facebook-marketplace-pp-cli profile save briefing --json
facebook-marketplace-pp-cli --profile briefing inbox list --fb-api-req-friendly-name example-resource
facebook-marketplace-pp-cli profile list --json
facebook-marketplace-pp-cli profile show briefing
facebook-marketplace-pp-cli profile delete briefing --yes

Explicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.

Exit Codes

CodeMeaning
0Success
2Usage error (wrong arguments)
3Resource not found
4Authentication required
5API error (upstream issue)
7Rate limited (wait and retry)
10Config error

Argument Parsing

Parse $ARGUMENTS:

  1. Empty, help, or --help → show facebook-marketplace-pp-cli --help output
  2. Starts with install → ends with mcp → MCP installation; otherwise → see Prerequisites above
  3. Anything else → Direct Use (execute as CLI command with --agent)

MCP Server Installation

Install the MCP binary from this CLI's published public-library entry or pre-built release, then register it:

bash
claude mcp add facebook-marketplace-pp-mcp -- facebook-marketplace-pp-mcp

Verify: claude mcp list

Direct Use

  1. Check if installed: which facebook-marketplace-pp-cli If not found, offer to install (see Prerequisites at the top of this skill).
  2. Match the user query to the best command from the Unique Capabilities and Command Reference above.
  3. Execute with the --agent flag:
    bash
    facebook-marketplace-pp-cli <command> [subcommand] [args] --agent
  4. If ambiguous, drill into subcommand help: facebook-marketplace-pp-cli <command> --help.

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

Files

Just SKILL.md in cli-skills/pp-facebook-marketplace of mvanhorn/printing-press-library.

Open the folder on GitHubat commit d9a1696

Compare with similar skills

Pp Facebook Marketplace 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.

Pp Facebook Marketplace compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Pp Facebook Marketplace this skillmvanhorn/printing-press-library2.1k—~3.2kAutomated safety check: NotesApache-2.0
Amazon Buy Box Monitorbrowser-act/skills6.1k1 repos~1.6kAutomated safety check: PassMIT
Tourmind Bookingtourmind-com/Tourmind-Booking-Skills1.8k—~13kAutomated safety check: PassMIT
Ecommerce Image Suitewzj177/ecommerce-image-suite449—~10kAutomated safety check: PassApache-2.0
Zach Feature Demand Validatorzach22-1999/amazon-skills2091 repos~2.3kAutomated safety check: NotesMIT
Caramel CouponsDevinoSolutions/caramel141—~1.1kAutomated safety check: PassAGPL-3.0

Similar skills

  • Amazon Buy Box Monitor

    browser-act/skills

    Pulls Amazon product details, competing seller prices and seller ratings for a given ASIN through the BrowserAct API, without browser automation.

    6.1k GitHub starsUsed in 1 repo~1.6k tokens
    Sales & SupportAuto-check passed
  • Tourmind Booking

    tourmind-com/Tourmind-Booking-Skills

    MUST USE for any hotel or accommodation intent in any language, including hotel search, hotel recommendations, nearby accommodation, hostels, guesthouses, resorts, where-to-stay questions, room…

    1.8k GitHub stars~13k tokensUpdated yesterday
    Sales & SupportAuto-check passed
  • Ecommerce Image Suite

    wzj177/ecommerce-image-suite

    电商套图生成助手。用户明确提出需要生成电商套图、商品主图、卖点图、场景图、模特图等图片内容时触发. An agent skill from wzj177/ecommerce-image-suite.

    449 GitHub stars~10k tokensUpdated 1 mo ago
    Sales & SupportAuto-check passed
  • Zach Feature Demand Validator

    zach22-1999/amazon-skills

    功能需求真伪验证器。用三维数据(Review/关键词/社区)验证微创新是否真实需求. An agent skill from zach22-1999/amazon-skills.

    209 GitHub starsUsed in 1 repo~2.3k tokens
    Sales & SupportAuto-check: notes
  • Caramel Coupons

    DevinoSolutions/caramel

    Look up live coupon / promo codes for any online store through Caramel's public API (grabcaramel.com) — use whenever the user is about to buy something online, asks for a discount or promo code, or…

    141 GitHub stars~1.1k tokensUpdated today
    Sales & SupportAuto-check passed
  • Zach Sif Cvr Threshold Analyzer

    zach22-1999/amazon-skills

    基于领星 ASIN 360 或同类日业务报表,以及用户自己 SIF MCP 导出的日级关键词自然排名 JSON,回测 CVR 与核心词/稳定词自然排名波动的关系,并输出观察线、危险线、广告 CVR 确认线。

    209 GitHub starsUsed in 1 repo~982 tokens
    Sales & SupportAuto-check: notes

More from mvanhorn/printing-press-library

All 506 skills in this repo
  • Agent Desktop

    mvanhorn/printing-press-library

    Desktop automation through the real Rust agent-desktop CLI, published in Printing Press through a small bridge.

    2.1k GitHub stars~2.3k tokensUpdated today
    Auto-check: notes
  • Gfonts

    mvanhorn/printing-press-library

    Search, browse, and download Google Fonts from the terminal via the gfonts CLI.

    2.1k GitHub stars~574 tokensUpdated today
    Auto-check passed
  • Pp 1688

    mvanhorn/printing-press-library

    The free, offline Trigger phrases: search 1688 for, find a factory on 1688 for, wholesale price on 1688 for, who is the cheapest supplier on 1688 for, compare 1688 suppliers for, use 1688, run 1688.

    2.1k GitHub stars~3k tokensUpdated today
    Auto-check: notes
  • Pp Activity Japan

    mvanhorn/printing-press-library

    Inspect known Activity Japan plan IDs or URLs, compare dated prices and sessions, check language-sitemap coverage, and hand off to canonical booking pages.

    2.1k GitHub stars~2k tokensUpdated today
    Auto-check: notes
  • Pp Adminbyrequest

    mvanhorn/printing-press-library

    Every Admin By Request portal action, plus a local SQLite mirror of audit, events, inventory and requests for ad-hoc...

    2.1k GitHub stars~3.3k tokensUpdated today
    Auto-check: notes
  • Pp Agent Capture

    mvanhorn/printing-press-library

    macOS screen capture, window recording, GIF conversion, and agent evidence bundles from the terminal.

    2.1k GitHub stars~1.6k tokensUpdated today
    Auto-check: notes

Categories

Questions about Pp Facebook Marketplace

What does Pp Facebook Marketplace do?

A write-gated Marketplace seller CLI for search, listing creation, photo upload, local watches, and replies. Pp Facebook Marketplace is an agent skill from mvanhorn/printing-press-library. A write-gated Marketplace seller CLI for search, listing creation, photo upload, local watches, and replies.

When should I use Pp Facebook Marketplace?

Pp Facebook Marketplace fits situations like: phrases: search Facebook Marketplace; watch Marketplace listings; draft a Marketplace listing; reply to a Marketplace buyer.

How do I install Pp Facebook Marketplace in Claude Code?

Run `npx skills add mvanhorn/printing-press-library --skill pp-facebook-marketplace -a claude-code`. Or copy the skill folder (cli-skills/pp-facebook-marketplace in mvanhorn/printing-press-library) into .claude/skills/pp-facebook-marketplace in your project. Claude Code loads it when a task matches its description.

How do I install Pp Facebook Marketplace in Codex?

Run `npx skills add mvanhorn/printing-press-library --skill pp-facebook-marketplace -a codex`. Or copy the skill folder (cli-skills/pp-facebook-marketplace in mvanhorn/printing-press-library) into .agents/skills/pp-facebook-marketplace in your project. Codex loads it when a task matches its description.

Can I use Pp Facebook Marketplace 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 mvanhorn/printing-press-library --skill pp-facebook-marketplace -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pp-facebook-marketplace, .gemini/skills/pp-facebook-marketplace, .github/skills/pp-facebook-marketplace and .opencode/skills/pp-facebook-marketplace in your project.

What does Pp Facebook Marketplace need to run?

Going by SKILL.md and its folder, Pp Facebook Marketplace needs the command-line tools its instructions call (claude, npx and go). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Bash.

Does Pp Facebook Marketplace access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Pp Facebook Marketplace safe to install?

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.

What licence does Pp Facebook Marketplace use?

Pp Facebook Marketplace is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Pp Facebook Marketplace use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Pp Facebook Marketplace?

Skills that share tags, products or a category with Pp Facebook Marketplace: Amazon Buy Box Monitor (browser-act/skills, 6.1k stars), Tourmind Booking (tourmind-com/Tourmind-Booking-Skills, 1.8k stars), Ecommerce Image Suite (wzj177/ecommerce-image-suite, 449 stars) and Zach Feature Demand Validator (zach22-1999/amazon-skills, 209 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Pp Facebook Marketplace?

mvanhorn (a GitHub user) maintains it in mvanhorn/printing-press-library, which has 2,056 GitHub stars. The repository holds 506 skills in this directory. The repository was last updated on October 9, 2026.

Source: mvanhorn/printing-press-library on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.