EasyEDA Pro API Bridge
easyeda/easyeda-api-skill
Gives an agent the EasyEDA Pro API reference and a WebSocket bridge to run code in a live EasyEDA client, for PCB, schematic and library work and extension development.
Search LCSC Electronics for electronic components — find parts by LCSC number (Cxxxxx) or MPN, check stock/pricing, download datasheets, analyze specifications.
$ npx skills add aklofas/kicad-happy --skill lcsc -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install aklofas/kicad-happy lcsc --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/aklofas/kicad-happy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/lcsc .claude/skills/lcsc && 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 "lcsc" agent skill from https://github.com/aklofas/kicad-happy/tree/main/skills/lcsc into .claude/skills/lcsc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lcsc", 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/aklofas/kicad-happy/tree/main/skills/lcscType 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 aklofas/kicad-happy --skill lcsc -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install aklofas/kicad-happy lcsc --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aklofas/kicad-happy.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/lcsc .agents/skills/lcsc && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "lcsc" agent skill from https://github.com/aklofas/kicad-happy/tree/main/skills/lcsc into .agents/skills/lcsc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lcsc", 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 aklofas/kicad-happy --skill lcsc -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install aklofas/kicad-happy lcsc --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aklofas/kicad-happy.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/lcsc .cursor/skills/lcsc && 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 "lcsc" agent skill from https://github.com/aklofas/kicad-happy/tree/main/skills/lcsc into .cursor/skills/lcsc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lcsc", 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/aklofas/kicad-happy.git --path skills/lcsc--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 aklofas/kicad-happy --skill lcsc -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install aklofas/kicad-happy lcsc --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aklofas/kicad-happy.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/lcsc .gemini/skills/lcsc && 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 "lcsc" agent skill from https://github.com/aklofas/kicad-happy/tree/main/skills/lcsc into .gemini/skills/lcsc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lcsc", 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 aklofas/kicad-happy lcscInstalls 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 aklofas/kicad-happy --skill lcsc -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/aklofas/kicad-happy.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/lcsc .github/skills/lcsc && 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 "lcsc" agent skill from https://github.com/aklofas/kicad-happy/tree/main/skills/lcsc into .github/skills/lcsc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lcsc", 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 aklofas/kicad-happy --skill lcsc -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install aklofas/kicad-happy lcsc --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/aklofas/kicad-happy.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/lcsc .opencode/skills/lcsc && 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 "lcsc" agent skill from https://github.com/aklofas/kicad-happy/tree/main/skills/lcsc into .opencode/skills/lcsc/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "lcsc", 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.
lcscSearch LCSC Electronics for electronic components — find parts by LCSC number (Cxxxxx) or MPN, check stock/pricing, download datasheets, analyze specifications.
Lcsc is an agent skill from aklofas/kicad-happy. Search LCSC Electronics for electronic components — find parts by LCSC number (Cxxxxx) or MPN, check stock/pricing, download datasheets, analyze specifications. Sister company to JLCPCB, same parts library. Sync and maintain a local datasheets directory for a KiCad project, or use batch MPN-list seeding (--mpn-list) for bulk workflows without a project. No API key needed — uses the free jlcsearch community API. Use this skill when the user mentions LCSC, JLCPCB parts library, JLCPCB assembly parts, production…
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including scripts (for example `scripts/fetch_datasheet_lcsc.py`, `scripts/search_lcsc.py` and `scripts/sync_datasheets_lcsc.py`).
It works with EasyEDA. The repository describes itself as: AI coding agent skills for KiCad electronics design. Works with Claude Code and OpenAI Codex. Analyze schematics, review PCB layouts, EMC pre-compliance, SPICE simulation… The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0684046. 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.
Ships 4 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
python3pipplaywrightFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
lcsc.comwmsc.lcsc.comjlcsearch.tscircuit.comips.lcsc.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.
Lcsc loads about 3k tokens when it runs. Until then it costs about 191 tokens; SKILL.md has 1,039 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); the scripts in this folder are not scanned.
The full file from aklofas/kicad-happy at commit 0684046, republished under its MIT licence (© aklofas). 1,039 words, ~2,952 tokens.
.claude/skills/lcsc/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.| Skill | Purpose |
|---|---|
kicad | Schematic analysis — extracts MPNs for part lookup |
bom | BOM management — orchestrates sourcing across distributors |
jlcpcb | PCB assembly — shares the same parts library |
spice | Uses LCSC parametric data for behavioral SPICE models (no auth needed) |
LCSC is JLCPCB's sister company — they share the same parts library and Cxxxxx part numbers. Use LCSC for production sourcing (assembled boards from JLCPCB/PCBWay). DigiKey/Mouser are for prototyping. For BOM management and export workflows, see bom.
https://www.lcsc.comFormat: Cxxxxx (e.g., C14663). This is the universal identifier across both LCSC and JLCPCB. Use it for:
jlcpcb skill)Use search_lcsc.py to search LCSC and JLCPCB for electronic components, check live stock, inspect pricing tiers, identify basic vs. extended parts, and fetch parametric attributes. No API key required.
# Search by keyword or description
python3 <skill-path>/scripts/search_lcsc.py "tactile switch"
# Search for basic parts only (no JLCPCB extended loading fees)
python3 <skill-path>/scripts/search_lcsc.py "0805 100R" --basic
# Filter by package/footprint and stock
python3 <skill-path>/scripts/search_lcsc.py "red led" --package 0805 --in-stock
# Inspect full component details (manufacturer, datasheet URL, price breaks, parametric attributes)
python3 <skill-path>/scripts/search_lcsc.py "C318884" --details
# Output machine-readable JSON (for scripts and agent workflows)
python3 <skill-path>/scripts/search_lcsc.py "ME2108" --limit 5 --json
# Sort results by price or stock
python3 <skill-path>/scripts/search_lcsc.py "microcontroller STM32" --sort price
# Parametric category search (rows carry package, stock, price and attributes)
python3 <skill-path>/scripts/search_lcsc.py "STM32" --category microcontrollersThe script:
jlcsearch community API for the search, then enriches from LCSC's direct product-detail endpoint (manufacturer, datasheet URL, price breaks) for exact Cxxxxx queries and for every hit shown with --details — one extra request per hit, 0.5s apart. If jlcsearch has no row for a Cxxxxx code, the direct lookup is the fallback.LCSC #, MPN, Package, Basic/Ext status, Stock, Price, and Description--basic filtering to optimize PCB assembly BOM costs for JLCPCB manufacturing--json for automated BOM enrichment and agent workflowsThe jlcsearch community API is the recommended way to search LCSC. No authentication required.
Base URL: https://jlcsearch.tscircuit.com
GET /api/search?q=<query>&limit=20&full=trueParameters:
q — search query (matches MPN, LCSC code, or description keywords)package — optional footprint filter (e.g., 0402)limit — max results (default 100)full — accepted but no longer adds fields (the former extra block is gone, see below)GET /resistors/list.json?search=10k+0402
GET /capacitors/list.json?search=100nF+0402
GET /microcontrollers/list.json?search=STM32
GET /voltage_regulators/list.json?search=3.3VGeneral search returns {"components": [...]}. As of 2026-09 each hit carries only these fields — the extra block (manufacturer, datasheet URL, per-warehouse stock, attributes, price breaks) is no longer returned, even with full=true:
{
"lcsc": 318884,
"mfr": "TS-1187A-B-A-B",
"package": "SMD-4P,5.1x5.1mm",
"is_basic": true,
"is_preferred": false,
"description": "-30℃~+85℃ 1.5mm 1.6N ... SMD-4P,5.1x5.1mm Tactile Switches ROHS",
"stock": 1683297,
"price": 0.0197
}Key fields:
lcsc — numeric LCSC ID (without "C" prefix); prepend C for the LCSC codemfr — manufacturer part number (no manufacturer name)is_basic — true if JLCPCB basic part (no setup fee); is_preferred — JLCPCB preferred extended partstock / price — JLCPCB assembly stock and unit price (USD)Category endpoints return {"<category>": [...]} — keyed by the category name, not components. Rows differ from the general search: price1 instead of price, in_stock, an empty description, parametric columns (e.g. resistance, cpu_core), and attributes as a JSON string:
{"resistors": [{"lcsc": 25804, "mfr": "0603WAF1002T5E", "description": "", "stock": 37165617,
"price1": 0.000842857, "in_stock": true, "package": "0603", "resistance": 10000,
"is_basic": true, "is_preferred": false,
"attributes": "{\"Resistance\":\"10kΩ\",\"Power(Watts)\":\"100mW\",\"Tolerance\":\"±1%\"}"}]}For manufacturer, datasheet URL and price breaks, query LCSC's own endpoint by Cxxxxx code — no auth, JSON, code: 200 on success:
GET https://wmsc.lcsc.com/ftps/wm/product/detail?productCode=C318884Useful result fields: productModel (MPN), brandNameEn (manufacturer), pdfUrl (direct datasheet PDF), encapStandard (package), productIntroEn / productDescEn (description), stockNumber (LCSC stock), productPriceList[] (ladder = min qty, usdPrice). fetch_datasheet_lcsc.search_lcsc_direct() wraps this and normalizes the result to the jlcsearch dict shape (extra.number, extra.mpn, extra.manufacturer.name, extra.datasheet.pdf, ladder list in price); search_lcsc.py uses it for Cxxxxx enrichment and as the fallback when jlcsearch has no row.
Neither API documents rate limits, but be respectful — use delays of 0.5s between calls.
LCSC's CDN serves datasheet PDFs directly — no bot protection, no special headers needed. This makes LCSC a reliable datasheet source alongside DigiKey.
Use sync_datasheets_lcsc.py to maintain a datasheets/ directory alongside a KiCad project. Same workflow and manifest.json format as the DigiKey and Mouser skills. No API key required.
# Sync datasheets for a KiCad project
python3 <skill-path>/scripts/sync_datasheets_lcsc.py <file.kicad_sch>
# Preview what would be downloaded
python3 <skill-path>/scripts/sync_datasheets_lcsc.py <file.kicad_sch> --dry-run
# Retry previously failed downloads
python3 <skill-path>/scripts/sync_datasheets_lcsc.py <file.kicad_sch> --force
# Custom output directory
python3 <skill-path>/scripts/sync_datasheets_lcsc.py <file.kicad_sch> -o ./my-datasheets
# Parallel downloads (3 workers)
python3 <skill-path>/scripts/sync_datasheets_lcsc.py <file.kicad_sch> --parallel 3
# Batch mode — sync from a plain MPN list (no KiCad project required)
python3 <skill-path>/scripts/sync_datasheets_lcsc.py --mpn-list mpns.txt --output ./datasheetsMPN-list batch mode (KH-312) — when you have a list of MPNs but no
KiCad project to point at. One MPN per line; blank lines and #
comments (full-line and inline) are skipped; generic values are filtered
via is_real_mpn() and de-duplicated. Output defaults to ./datasheets/
in the current working directory when --output is omitted.
The script:
manifest.json manifest — same format as DigiKey/Mouser skills--delay)Use fetch_datasheet_lcsc.py for one-off downloads.
# Search by MPN
python3 <skill-path>/scripts/fetch_datasheet_lcsc.py --search "GRM155R71C104KA88D" -o datasheet.pdf
# Search by LCSC code
python3 <skill-path>/scripts/fetch_datasheet_lcsc.py --search "C14663" -o datasheet.pdf
# Direct URL download
python3 <skill-path>/scripts/fetch_datasheet_lcsc.py "https://wmsc.lcsc.com/..." -o datasheet.pdf
# JSON output
python3 <skill-path>/scripts/fetch_datasheet_lcsc.py --search "C14663" --jsonThe script:
requests → urllib → playwright fallback chain (no wget/curl)pip install requests (recommended; urllib fallback works fine for LCSC)pip install playwright && playwright install chromium (optional; rarely needed for LCSC)Base URL: https://ips.lcsc.com. Requires API key + signature authentication. Contact support@lcsc.com for access. Rarely needed — jlcsearch covers most use cases.
If the jlcsearch API is unavailable, search LCSC by fetching the website directly:
https://www.lcsc.com/search?q=<query>LCSC part numbers are specific to the LCSC/JLCPCB ecosystem. Use the mfr field (MPN) to cross-reference on DigiKey/Mouser.
When an MPN has no exact LCSC match:
is_basic field matters — JLCPCB basic parts have no setup fee; extended parts cost $3 eachstock is JLCPCB assembly stock; the wmsc detail's stockNumber is LCSC's own stock — the two differ© aklofas, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in skills/lcsc of aklofas/kicad-happy.
Open the folder on GitHubat commit 0684046
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in aklofas/kicad-happy, which our catalogue first saw on October 7, 2026.
Lcsc 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 |
|---|---|---|---|---|---|---|
| Lcsc this skillaklofas/kicad-happy | 1.4k | 1 repos | ~3k | Automated safety check: Pass | MIT | |
| EasyEDA Pro API Bridgeeasyeda/easyeda-api-skill | 872 | — | ~7.8k | Automated safety check: Pass | MIT | |
| EasyEDA to KiCad Importerjamro/tiny-engineer | 580 | — | ~569 | Automated safety check: Pass | Custom licence | |
| Kicad Manufacturemixelpixx/Konnect | 917 | — | ~2.2k | Automated safety check: Pass | AGPL-3.0 | |
| Datasheetsbiosshot/easyeda-copilot | 168 | — | ~1.2k | Automated safety check: Pass | MIT | |
| Easyeda Agentzhoushoujianwork/easyeda-agent | 605 | — | ~2.1k | Automated safety check: Pass | MIT |
easyeda/easyeda-api-skill
Gives an agent the EasyEDA Pro API reference and a WebSocket bridge to run code in a live EasyEDA client, for PCB, schematic and library work and extension development.
jamro/tiny-engineer
Imports an LCSC part into a Tiny Engineer KiCad board as library files (symbol, footprint, 3D model) using easyeda2kicad and a bundled script.
mixelpixx/Konnect
Manufacturing and fabrication workflow for KiCAD projects via MCP tools.
biosshot/easyeda-copilot
Download component datasheet PDFs, locate useful pages, and read verified pinouts, electrical limits, thermal data and application notes using the agent's PDF tools.
zhoushoujianwork/easyeda-agent
通过本地 easyeda CLI、daemon 和连接器操作嘉立创EDA专业版(EasyEDA Pro):用可迁移样例和参数化数据构建或修复原理图、布局布线 PCB,并回读连接、几何、DRC 与保存结果。适用于已有工程操作及数据驱动电路设计。
jamro/tiny-engineer
Checks a KiCad board's production BOM against the schematic, PCB footprints and JLCPCB's parts catalog, then explains which failures are real.
aklofas/kicad-happy
Extract structured specifications from electronic component datasheet PDFs — pinouts, electrical characteristics, peripherals, topology, and features.
aklofas/kicad-happy
EMC pre-compliance risk analysis for KiCad PCB designs — 18 check categories, 44 rule IDs covering ground planes, decoupling, I/O filtering, switching harmonics, clock routing, differential pair…
aklofas/kicad-happy
BOM (Bill of Materials) management for electronics projects — the workflow skill that coordinates DigiKey, Mouser, LCSC, element14, JLCPCB, PCBWay, and KiCad skills around a unified BOM lifecycle.
aklofas/kicad-happy
Search DigiKey for electronic components and download datasheets — primary source for prototype orders and the preferred API method for fetching datasheets.
aklofas/kicad-happy
Search Newark, Farnell, and element14 for electronic components — find parts by MPN or distributor part number, check pricing/stock, download datasheets, analyze specifications.
aklofas/kicad-happy
Analyze KiCad projects and PDF schematics: schematics, PCB layouts, Gerbers, footprints, symbols, netlists, and design rules.
Works with
Search LCSC Electronics for electronic components — find parts by LCSC number (Cxxxxx) or MPN, check stock/pricing, download datasheets, analyze specifications. Lcsc is an agent skill from aklofas/kicad-happy. Search LCSC Electronics for electronic components — find parts by LCSC number (Cxxxxx) or MPN, check stock/pricing, download datasheets, analyze specifications.
Lcsc fits situations like: the user mentions LCSC; JLCPCB parts library; JLCPCB assembly parts; production sourcing.
Run `npx skills add aklofas/kicad-happy --skill lcsc -a claude-code`. Or copy the skill folder (skills/lcsc in aklofas/kicad-happy) into .claude/skills/lcsc in your project. Claude Code loads it when a task matches its description.
Run `npx skills add aklofas/kicad-happy --skill lcsc -a codex`. Or copy the skill folder (skills/lcsc in aklofas/kicad-happy) into .agents/skills/lcsc 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 aklofas/kicad-happy --skill lcsc -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/lcsc, .gemini/skills/lcsc, .github/skills/lcsc and .opencode/skills/lcsc in your project.
Going by SKILL.md and its folder, Lcsc needs Python for the scripts in its folder and the command-line tools its instructions call (python3, pip and playwright). Our summary lists: Python 3.
SKILL.md names 4 domains. In commands or code: lcsc.com, wmsc.lcsc.com, jlcsearch.tscircuit.com and ips.lcsc.com; the agent is likely to contact these when it follows the instructions. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Lcsc is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k 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 Lcsc: EasyEDA Pro API Bridge (easyeda/easyeda-api-skill, 872 stars), EasyEDA to KiCad Importer (jamro/tiny-engineer, 580 stars), Kicad Manufacture (mixelpixx/Konnect, 917 stars) and Datasheets (biosshot/easyeda-copilot, 168 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
aklofas (a GitHub user) maintains it in aklofas/kicad-happy, which has 1,356 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 6, 2026.
Source: aklofas/kicad-happy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.