C15t
c15t/c15t
Work with c15t consent management docs, APIs, and integrations for Next.js, React, and JavaScript.
Implements data protection compliance for whistleblowing systems under EU Directive 2019/1937 and GDPR.
$ npx skills add mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills whistleblower-data --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/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/privacy/whistleblower-data .claude/skills/whistleblower-data && 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 "whistleblower-data" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-data into .claude/skills/whistleblower-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "whistleblower-data", 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/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-dataType 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 mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills whistleblower-data --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/privacy/whistleblower-data .agents/skills/whistleblower-data && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "whistleblower-data" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-data into .agents/skills/whistleblower-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "whistleblower-data", 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 mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills whistleblower-data --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/privacy/whistleblower-data .cursor/skills/whistleblower-data && 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 "whistleblower-data" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-data into .cursor/skills/whistleblower-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "whistleblower-data", 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/mukul975/Privacy-Data-Protection-Skills.git --path skills/privacy/whistleblower-data--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 mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills whistleblower-data --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/privacy/whistleblower-data .gemini/skills/whistleblower-data && 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 "whistleblower-data" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-data into .gemini/skills/whistleblower-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "whistleblower-data", 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 mukul975/Privacy-Data-Protection-Skills whistleblower-dataInstalls 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 mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/privacy/whistleblower-data .github/skills/whistleblower-data && 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 "whistleblower-data" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-data into .github/skills/whistleblower-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "whistleblower-data", 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 mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mukul975/Privacy-Data-Protection-Skills whistleblower-data --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mukul975/Privacy-Data-Protection-Skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/privacy/whistleblower-data .opencode/skills/whistleblower-data && 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 "whistleblower-data" agent skill from https://github.com/mukul975/Privacy-Data-Protection-Skills/tree/main/skills/privacy/whistleblower-data into .opencode/skills/whistleblower-data/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "whistleblower-data", 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.
whistleblower-dataImplements data protection compliance for whistleblowing systems under EU Directive 2019/1937 and GDPR.
Whistleblower Data is an agent skill from mukul975/Privacy-Data-Protection-Skills. Implements data protection compliance for whistleblowing systems under EU Directive 2019/1937 and GDPR. Covers anonymous reporting channels, identity protection for whistleblowers and accused persons, retention limits, access restrictions, and retaliation prevention. Addresses national transpositions and DPA guidance. Keywords: whistleblower, Directive 2019/1937, anonymous reporting, identity protection, retaliation, retention, reporting channel.
Its SKILL.md is about 4.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including scripts, reference files and assets (for example `assets/template.md`, `references/standards.md` and `references/workflows.md`).
It sits in Legal & Compliance, covering Privacy and GDPR. The repository describes itself as: 282+ structured privacy & data protection skills for AI agents. GDPR, CCPA, EU AI Act, HIPAA, LGPD, PIPL, DPDP Act. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 9b2ef9e. 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 1 file in scripts/ (Python), which the agent can run.
From 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.
Whistleblower Data loads about 4.6k tokens when it runs, and up to ~6.5k if it reads all its reference files. Until then it costs about 117 tokens; SKILL.md has 2,281 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 mukul975/Privacy-Data-Protection-Skills at commit 9b2ef9e, republished under its Apache-2.0 licence (© mukul975). 2,281 words, ~4,628 tokens.
.claude/skills/whistleblower-data/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.The EU Whistleblowing Directive 2019/1937 (Directive on the protection of persons who report breaches of Union law) establishes mandatory internal reporting channels for organisations with 50 or more employees. The Directive creates a fundamental tension with GDPR: whistleblowing channels collect sensitive allegations about identified individuals (the accused), while simultaneously requiring confidentiality protection for the whistleblower. The data protection framework must balance the whistleblower's right to protection, the accused person's right to be informed and to defend themselves, and the organisation's obligation to investigate while complying with data minimisation, purpose limitation, and storage limitation principles.
This skill provides a data protection compliance framework for whistleblowing systems that satisfies both the Directive and GDPR requirements, incorporating guidance from CNIL, the Article 29 Working Party (WP117), and national transposition laws.
Scope: Applies to reporting of breaches of EU law in areas including public procurement, financial services, product safety, transport safety, environmental protection, food safety, public health, consumer protection, data protection, and competition law.
Organisational requirements:
Key data protection provisions:
| Article | Provision |
|---|---|
| Art. 16(1) | Member States shall ensure that reporting channels and the actions taken following a report are designed, established, and operated in a secure manner that ensures the confidentiality of the identity of the reporting person and any third party mentioned in the report |
| Art. 16(2) | Personal data that is manifestly not relevant to the handling of a specific report shall not be collected or, if accidentally collected, shall be deleted without undue delay |
| Art. 16(3) | The reporting person and the accused person shall be informed of the processing of their personal data in accordance with GDPR Art. 13 and 14, subject to the limitations in Art. 14(5) and Art. 23 |
| Art. 17(1) | Reporting persons shall have access to a balanced, comprehensive, and easily accessible information set about procedures and prerequisites for external reporting |
| Art. 18 | Records of every report received shall be kept in compliance with confidentiality requirements; reports shall be stored for no longer than necessary and proportionate |
Lawful basis for whistleblowing data processing:
Special category data: Whistleblowing reports may contain special category data (e.g., allegations of racial discrimination, health-related misconduct). Where special category data is processed:
Criminal offence data — Art. 10: Whistleblowing reports frequently contain allegations of criminal conduct. Art. 10 processing must be authorised by national law.
The Article 29 Working Party's Opinion on whistleblowing schemes, while pre-GDPR, established principles that remain relevant:
| Jurisdiction | Transposition | Key Data Protection Provisions |
|---|---|---|
| France | Loi Waserman (Law No. 2022-401, 21 March 2022) | CNIL reference framework for whistleblowing (Délibération No. 2019-139); retention limit of 2 months post-investigation closure; mandatory DPIA for whistleblowing channels |
| Germany | Hinweisgeberschutzgesetz (HinSchG, effective 2 July 2023) | Art. 10 — confidentiality of reporting persons' identity; Art. 11 — data retention for 3 years after investigation closure; DPO must be involved in channel design |
| Italy | D.Lgs. 24/2023 | Garante del Privacy guidelines on whistleblowing data protection; mandatory DPIA; prohibition on using data for purposes other than the investigation |
| Netherlands | Wet bescherming klokkenluiders (effective 18 February 2023) | Enhanced identity protection; external reporting channel via Huis voor Klokkenluiders |
| Spain | Ley 2/2023 (effective 13 March 2023) | Anonymous reporting must be accepted; retention limit 3 months post-investigation unless proceedings initiated |
The whistleblowing channel must be designed to enforce confidentiality by default:
Technical requirements:
| Requirement | Implementation |
|---|---|
| End-to-end encryption | All communications between whistleblower and the channel must be encrypted in transit (TLS 1.3) and at rest (AES-256) |
| Access segregation | Only designated persons (typically ethics/compliance officers) have access to reports; IT administrators have system access but not content access |
| Audit logging | All access to reports is logged with user identity, timestamp, and action |
| Secure communication | The channel must provide a secure way for the whistleblower to receive feedback and provide additional information without revealing their identity |
| Anonymous option | The system must support anonymous reporting where the whistleblower chooses not to identify themselves |
| Separate system | The whistleblowing system should be logically separated from HR systems to prevent data leakage |
Dedicated third-party platforms: Many organisations use specialised platforms (EQS Integrity Line, NAVEX Global EthicsPoint, WhistleB, Convercent) that provide:
Directive position: Art. 6(2) leaves it to Member States to decide whether internal and external reporting channels must accept anonymous reports. Several Member States mandate acceptance of anonymous reports (France, Spain, Italy).
Data protection considerations for anonymous reports:
Whistleblower identity:
Accused person's identity:
Third parties mentioned in reports: Witnesses, bystanders, and others mentioned in reports have data protection rights. Their data must be:
| Role | Access | Restriction |
|---|---|---|
| Ethics/Compliance Officer | Full access to reports and investigation files | Only designated officers; typically 2-3 persons in the organisation |
| Investigation team member | Access to specific assigned cases | Assigned on a case-by-case basis; access revoked when the investigation concludes |
| DPO | Access to processing records and DPIA; no routine access to report content | May access content if required for a data protection assessment of the channel itself |
| Legal counsel | Access to assigned cases where legal advice is sought | Subject to legal professional privilege; access documented |
| CEO/Board | Informed of investigation outcomes; not routine access to report content | Exception: where the report concerns the Ethics/Compliance Officer, the CEO or Board receives the report directly |
| Line managers | No access | Line managers are frequently the subjects of reports; they must not have access to the channel |
| HR | No access unless specifically assigned to an investigation | HR involvement must be authorised by the Ethics Officer |
| IT | System administration; no access to report content | Content encryption prevents IT access |
| Data Category | Retention Period | Trigger |
|---|---|---|
| Report and investigation file — no misconduct found | 2 months after investigation closure (CNIL) / 3 years (Germany HinSchG) — apply stricter of applicable national law | Investigation closure date |
| Report and investigation file — misconduct confirmed, no proceedings | 2 months after investigation closure (CNIL) or per national law | Investigation closure date |
| Report and investigation file — legal proceedings initiated | Duration of proceedings + statutory limitation period | Conclusion of proceedings |
| Whistleblower identity (where disclosed) | Same as investigation file | Same trigger |
| Anonymous report metadata | Same as investigation file | Same trigger |
| Manifestly unfounded reports | Delete immediately after determination | Determination date |
| Data manifestly not relevant (Art. 16(2)) | Delete without undue delay | Upon identification |
The Directive prohibits retaliation against whistleblowers (Art. 19). The data protection dimension includes:
Whistleblowing channels require a DPIA because the processing:
The DPIA must assess:
Atlas Manufacturing Group implemented a whistleblowing channel using EQS Integrity Line for its 2,400 employees across four EU jurisdictions.
Configuration:
Incident: An employee submitted an anonymous report alleging that a production manager was falsifying safety inspection records. The Ethics Officer initiated an investigation, securing documentary evidence before informing the accused manager. The manager was informed of the substance of the allegations but not the identity of the reporter (which was unknown due to anonymity). The investigation confirmed the allegations, and the manager was dismissed. The investigation file was retained for the duration of the unfair dismissal proceedings and deleted 6 months after the tribunal decision.
| Authority | Case | Fine/Outcome | Key Issue |
|---|---|---|---|
| CNIL (France) | Deliberation SAN-2020-015 | EUR 100,000 | Whistleblowing system retained reports for 5 years — excessive; CNIL requires 2 months post-investigation |
| Garante (Italy) | Provvedimento 2022-0178 | Processing restriction | Whistleblowing channel did not ensure confidentiality; IT staff had access to report content |
| AEPD (Spain) | PS/00123/2023 | EUR 150,000 | Organisation disclosed whistleblower identity to the accused person without consent or legal requirement |
| BfDI (Germany) | 2023 Audit | Corrective measures | Whistleblowing channel did not support anonymous reporting as required by HinSchG |
| Autoriteit Persoonsgegevens (NL) | 2023 Investigation | Warning | Organisation failed to conduct DPIA for whistleblowing channel |
© mukul975, 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
SKILL.md and 4 other files (scripts, references, assets) in skills/privacy/whistleblower-data of mukul975/Privacy-Data-Protection-Skills.
Open the folder on GitHubat commit 9b2ef9e
Whistleblower Data 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 |
|---|---|---|---|---|---|---|
| Whistleblower Data this skillmukul975/Privacy-Data-Protection-Skills | 295 | — | ~4.6k | Automated safety check: Pass | Apache-2.0 | |
| C15tc15t/c15t | 1.9k | 1 repos | ~1.6k | Automated safety check: Pass | Apache-2.0 | |
| HIPAA Safe Harbor Coverage Auditmaziyarpanahi/openmed | 5.5k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Korean Privacy Termskimlawtech/korean-privacy-terms | 586 | — | ~2.9k | Automated safety check: Pass | Apache-2.0 | |
| Gdpr ComplianceSushegaad/Claude-Skills-Governance-Risk-and-Compliance | 942 | 1 repos | ~3.9k | Automated safety check: Pass | MIT | |
| Hipaa ComplianceSushegaad/Claude-Skills-Governance-Risk-and-Compliance | 942 | 1 repos | ~2.3k | Automated safety check: Pass | MIT |
c15t/c15t
Work with c15t consent management docs, APIs, and integrations for Next.js, React, and JavaScript.
maziyarpanahi/openmed
Checks OpenMed de-identified clinical text against the 18 HIPAA Safe Harbor identifier categories and reports gaps and residual re-identification risk.
kimlawtech/korean-privacy-terms
처리방침·이용약관 자동 생성 스킬 패키지 (v4.0). An agent skill from kimlawtech/korean-privacy-terms.
Sushegaad/Claude-Skills-Governance-Risk-and-Compliance
Expert GDPR compliance assistant covering all four core workflows: (1) auditing code and systems for GDPR violations, (2) drafting GDPR-compliant documents such as privacy policies, Data Processing…
Sushegaad/Claude-Skills-Governance-Risk-and-Compliance
Expert HIPAA compliance assistant for healthcare and software contexts.
gregmos/PII-Shield
Universal legal document processor with PII anonymization. An agent skill from gregmos/PII-Shield.
mukul975/Privacy-Data-Protection-Skills
Implements age-gating mechanisms for online services to restrict access based on user age.
mukul975/Privacy-Data-Protection-Skills
Manages AI model retention and machine unlearning requirements.
mukul975/Privacy-Data-Protection-Skills
Structures risk mitigation planning and residual risk tracking for Data Protection Impact Assessments under GDPR Article 35(7)(d).
mukul975/Privacy-Data-Protection-Skills
Guides implementation of the GDPR accountability principle under Articles 5(2) and 24, including documentation requirements for policies, DPIAs, RoPA, training records, and breach logs.
mukul975/Privacy-Data-Protection-Skills
Conducts pre-DPIA threshold screening to determine whether a full Data Protection Impact Assessment is required under GDPR Article 35.
mukul975/Privacy-Data-Protection-Skills
Designs and implements data retention schedules compliant with GDPR Article 5(1)(e) storage limitation principle.
Categories
Implements data protection compliance for whistleblowing systems under EU Directive 2019/1937 and GDPR. Whistleblower Data is an agent skill from mukul975/Privacy-Data-Protection-Skills. Implements data protection compliance for whistleblowing systems under EU Directive 2019/1937 and GDPR.
Whistleblower Data fits situations like: tasks that involve Privacy and GDPR.
Run `npx skills add mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a claude-code`. Or copy the skill folder (skills/privacy/whistleblower-data in mukul975/Privacy-Data-Protection-Skills) into .claude/skills/whistleblower-data in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a codex`. Or copy the skill folder (skills/privacy/whistleblower-data in mukul975/Privacy-Data-Protection-Skills) into .agents/skills/whistleblower-data 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 mukul975/Privacy-Data-Protection-Skills --skill whistleblower-data -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/whistleblower-data, .gemini/skills/whistleblower-data, .github/skills/whistleblower-data and .opencode/skills/whistleblower-data in your project.
Going by SKILL.md and its folder, Whistleblower Data needs Python for the scripts in its folder. 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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Whistleblower Data 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.
About 4.6k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Whistleblower Data: C15t (c15t/c15t, 1.9k stars), HIPAA Safe Harbor Coverage Audit (maziyarpanahi/openmed, 5.5k stars), Korean Privacy Terms (kimlawtech/korean-privacy-terms, 586 stars) and Gdpr Compliance (Sushegaad/Claude-Skills-Governance-Risk-and-Compliance, 942 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mukul975 (a GitHub user) maintains it in mukul975/Privacy-Data-Protection-Skills, which has 295 GitHub stars. The repository holds 278 skills in this directory. The repository was last updated on March 16, 2026.
Source: mukul975/Privacy-Data-Protection-Skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.