Applies professional writing and copywriting principles across technical documentation, developer communications, marketing copy, microcopy, blog articles, changelogs, READMEs, and release announcements. Use when drafting, editing, or optimizing any written content for clarity, engagement, conversion, and global accessibility.
62
78%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/writing-skills/writing-copywriting/SKILL.mdA universal skill for crafting clear, persuasive, and technically accurate written content across software development, product marketing, developer relations, and user experience.
Before writing, identify the communication context using this decision rubric:
| Dimension | Option A | Option B | Option C |
|---|---|---|---|
| Reader Expertise | Beginner (needs analogies & context) | Practitioner (needs code & steps) | Architect/Exec (needs trade-offs & outcomes) |
| Primary Goal | Educate (tutorial / conceptual doc) | Convert (landing page / CTA copy) | Unblock (error message / troubleshooting) |
| Consumption Context | Deep reading (whitepaper / guide) | Skimming (blog post / release note) | Urgent glance (UI dialog / CLI output) |
Match content goals to proven persuasion and structuring frameworks (see references/writing-frameworks.md for full templates):
AIDA (Attention, Interest, Desire, Action): Ideal for landing pages, product launch announcements, and promotional emails.
PAS (Problem, Agitate, Solution): Ideal for developer tooling, security products, and workflow optimization solutions.
BAB (Before, After, Bridge): Ideal for case studies, migration guides, and feature upgrade copy.
Inverted Pyramid: Essential for technical documentation, release notes, and news announcements.
<!-- Poor -->
It is critically important to make sure that you execute the compilation process
in order to facilitate the generation of binary artifacts prior to server deployment.
<!-- Clear & Concise -->
Compile the binary before deploying the server:
`go build -o server ./cmd/server`<!-- Passive -->
When the configuration file is saved by the user, the database connection is initialized.
<!-- Active -->
Save the configuration file to initialize the database connection.A strong headline communicates value, triggers curiosity, or sets an expectation.
How to [Achieve Desirable Outcome] Without [Common Frustration][Number] Ways to [Solve Problem] in [Platform/Language]Why [Company/Tool] Switched from [A] to [B] (and Cut Latency by 40%)[Action Verb] [Target Audience Benefit] in [Timeframe]....### `authenticate(token, options)`
Validates a session token against the auth cluster.
| Parameter | Type | Required | Default | Description |
| :--- | :--- | :--- | :--- | :--- |
| `token` | `string` | Yes | — | JWT bearer token received from client |
| `options.timeoutMs` | `number` | No | `5000` | Network timeout in milliseconds |
**Returns**: `Promise<UserSession>`
**Example**:
```typescript
import { authenticate } from '@service/auth';
const session = await authenticate('jwt_token_here', { timeoutMs: 3000 });
console.log(`Authenticated as user ${session.userId}`);#### B. Tutorials & Step-by-Step Guides
- State the finished product and required time upfront.
- Structure steps linearly: Action -> Code snippet -> Expected output -> Verification check.
- Never assume implicit environment variables or secret keys exist without instructions to create them.
#### C. Open Source README Files
Follow the standard 60-second rule:
1. **Header**: Name, clear 1-sentence value proposition, core status badges (build, license, version).
2. **Visual/Demo**: Architecture diagram, terminal screenshot, or 10-second GIF.
3. **Quickstart**: The absolute minimal shell commands to run or test the software.
4. **Key Features**: 3–5 bullet points highlighting differentiation.
5. **Configuration / API**: Core options or basic code usage.
6. **Contributing & License**: Contributing guidelines link, license name.
#### D. Changelogs and Release Notes
Follow [Keep a Changelog](https://keepachangelog.com/) standards:
- Group changes by user impact, not internal commit messages.
- Use categories: `Added`, `Changed`, `Deprecated`, `Removed`, `Fixed`, `Security`.
- Mention breaking changes explicitly at the top of the release.
```markdown
## [2.1.0] - 2026-10-06
### Breaking Changes
- `UserClient.connect()` now returns a `Promise<Client>` instead of taking a callback.
### Added
- Support for distributed tracing via OpenTelemetry (`--trace-exporter=otlp`).
- Health check endpoint `/readyz` for Kubernetes ingress probes.
### Fixed
- Memory leak in WebSocket heartbeat ping loop when connection dropped abruptly.Focus on the progression: Feature -> Advantage -> Benefit (FAB):
Apply the 4-Point Microcopy Rule:
| Element | Weak / Anti-Pattern | Strong / Best Practice |
|---|---|---|
| Primary CTA Button | Submit or Click Here | Create API Key or Deploy Application |
| Error Message | Error 403: Forbidden Action | You need Admin permissions to edit billing details. Contact your team owner. |
| Destructive Action | Delete -> Are you sure? | Delete Database -> This will delete 3 tables and cannot be undone. |
| Empty State | No data available. | No deployments yet. Connect your repository to build your first release. |
| Tooltip | Click this icon to change settings. | API rate limits: 1,000 requests per minute. |
As a [Role], I want [Feature], so that [Business Benefit].Adjust writing along four primary tone dimensions:
Formal <----------------------------------------> Casual
Serious <----------------------------------------> Playful
Respectful <-------------------------------------> Irreverent
Matter-of-fact <---------------------------------> EnthusiasticInstall the command-line interface, not Install The Command-Line Interface).Python, Go, and Rust).don't, can't) to maintain a conversational, approachable tone.Virtual Private Cloud (VPC).Screenshot of terminalTerminal output showing successful database migration and 3 schema tables updatedYYYY-MM-DD), 24-hour time or explicit UTC offsets, and metric units.Run every draft through three distinct editing passes:
To confirm the quality and readiness of written content, verify against these objective criteria:
# Install or run text statistics via style linters if available
vale --version || echo "Install vale for automated style checking"#section-name) match actual header anchor slugs.npx markdownlint-cli "**/*.md"87555db
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.