From figma-logos-svgl
Use when explicitly invoked to write or fully rewrite a project README that must cover tech stack, architecture, features, and service description in a single document — readable by non-engineers (PM, design, ops, domain experts) as well as developers. Triggers on requests like "write the README", "redo README.md based on the whole project", "make a comprehensive README everyone can understand". Skip for one-section edits, badge tweaks, or generating a CHANGELOG.
How this skill is triggered — by the user, by Claude, or both
Slash command
/figma-logos-svgl:writing-project-readmeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A great README answers four questions for **two audiences at once**:
A great README answers four questions for two audiences at once:
This skill is for full rewrites, not for small edits. Activate only when the user explicitly asks for a comprehensive README.
This skill runs only when the user explicitly invokes it — e.g. /writing-project-readme or a clear request like "redo README.md based on the whole project". Do NOT auto-apply when:
Edit directlyIf you are reading this skill without an explicit invocation, stop and ask the user whether a full rewrite is intended.
Top third is for non-engineers. Bottom two-thirds is for engineers. Setup details live in a separate file (
DEVELOPMENT.md,CONTRIBUTING.md, etc.) — the README links to them, never copies them.
If a non-engineer cannot read the first three sections and explain what the product does, the README has failed regardless of how complete the technical sections are.
digraph readme_flow {
"Confirm scope" [shape=diamond];
"Parallel discovery (3 agents)" [shape=box];
"Clarify open choices with user" [shape=box];
"Draft README following the template" [shape=box];
"Verify links & rendering" [shape=box];
"Confirm scope" -> "Parallel discovery (3 agents)";
"Parallel discovery (3 agents)" -> "Clarify open choices with user";
"Clarify open choices with user" -> "Draft README following the template";
"Draft README following the template" -> "Verify links & rendering";
}
Before exploring, confirm:
Send a single message with three Explore agents in parallel covering:
| Agent | Scope |
|---|---|
| Backend / server | Models, controllers, services, routes, commands, configs, jobs, external API integrations |
| Frontend / client | Pages/screens, components, layouts, build config, design system, PWA/native shell |
| Business domain & identity | App name/description/keywords from env or manifest, target user, store URLs, internal jargon, key migrations, dependency analysis to infer features |
Each agent should return structured tables and lists, not prose. Cap each section at 5–10 lines. Skip storytelling.
Hand each Explore agent one of these verbatim — the format is part of the requirement.
Backend / server agent:
Read this project and report the backend surface as compact tables. No prose.
Look in (whichever apply): app/, src/, server/, api/, routes/, jobs/, config/, migrations/, db/.
Report exactly these tables, 5–10 rows each:
1. Models — Name | Role | Key fields
2. Routes / endpoints — Method | Path | Handler | One-line purpose
3. Background jobs / queues — Name | Trigger | Purpose
4. External integrations — Service | Purpose | Where called
5. Datastore(s) — Engine | Used for
If a table has no entries, write "— none —".
Frontend / client agent:
Read this project and report the frontend surface as compact tables. No prose.
Look in (whichever apply): apps/, web/, src/, app/, pages/, components/, layouts/, design-system/, public/, package.json, build config files.
Report exactly these tables, 5–10 rows each:
1. Entry points / routes — Path | Component | Purpose
2. Top-level layouts — Name | Where used
3. Design system / shared components — Name | Role
4. Build & tooling — Tool | Purpose (bundler, framework, CSS, testing)
5. Platforms shipped — Web / iOS / Android / Desktop / CLI | Status
If a table has no entries, write "— none —".
Business domain & identity agent:
Read this project and report the product identity as compact tables. No prose.
Look in: README, package.json, manifest files (app.json, capacitor.config.*, Info.plist, AndroidManifest.xml), .env.example, docs/, marketing/, store-listing/.
Report exactly:
1. Product identity — Name | Tagline | Target user (one line each)
2. Distribution — Platform | Link or "internal" | Status
3. Core features inferred from code/deps — Feature | Evidence (file or dep)
4. Internal jargon / domain terms — Term | Definition
5. Compliance / standards mentioned — Standard | Where (filename or doc)
If a table has no entries, write "— none —".
After discovery, ask at most 3 questions via the user-question tool. Default recommendations:
| Question | Recommended default |
|---|---|
| Architecture diagram format | Mermaid (renders on GitHub, scannable for non-engineers) |
| Tech-stack badges | Include 4–6 core badges (language, framework, key libraries) |
| Jargon level in feature descriptions | Non-engineer prose first, technology in parentheses: 처방약 자동 불러오기 (연동: …) |
Avoid open-ended "any preferences?" prompts — present concrete options with previews.
Follow the section order strictly. The order itself does work — front-loading non-engineer content is the whole point.
전체 템플릿은 template.md 참고. 섹션 순서가 룰의 핵심이므로 임의 변경 금지 — 상단 1/3은 비개발자, 하단 2/3은 개발자.
The template assumes a service app. Adjust before drafting:
| Project type | Required sections | Skip / adapt |
|---|---|---|
| Service app (web/mobile) | What / Who / Features / Architecture / Setup | — |
| Library / SDK | What / Install / Quick example / API summary | "User journey", "Platforms" |
| CLI tool | What / Install / Commands / Examples | Architecture diagram (보통 과함) |
| Plugin / skill marketplace | What / 목록 테이블 / Install per item / Contributing | "User journey", ERD |
| Monorepo | Top-level: What / Packages 표 / Architecture. 각 패키지는 자체 README. | 단일 Tech stack — 패키지별로 분산 |
This project (agent-skills) is the plugin / skill marketplace case — its README.md is a working reference layout.
bash, text, mermaid, php, ts, …) for syntax highlighting and lint compliance.| Audience | Pattern |
|---|---|
| 국내 사용자 중심 | 한국어 우선, 영어 보조 (코드/명령어만 영어) |
| 글로벌 OSS | 영어 단일 |
| 한국 + 해외 동시 | 섹션 라벨 병기 — 설치 / Installation, 목차 / Table of Contents |
When writing Korean copy, follow the ux-writing-korean skill. 핵심 규칙:
-요체), 능동형, 긍정형사용자 등록 처리 → 사용자를 등록해요This project's own README.md is a working example of the bilingual pattern.
Bad — framework-first, no user value:
# Awesome Project
A Laravel 11 application using Inertia.js, Tailwind CSS, and PostgreSQL.
Good — user value first, stack as supporting metadata:
# Awesome Project
> **약을 깜빡해도 괜찮은 복약 관리 앱**
> 처방전을 사진 한 장으로 등록하면, 시간 맞춰 알려드려요.
PHP · Laravel · Inertia · PostgreSQL
Bad — prose buries the value:
The application allows users to register, manage their medication schedules,
receive notifications, share with family members, and view adherence reports.
Good — table with verb-first rows, 한국어/영어 병기:
| 기능 | 설명 |
| ---------------- | ----------------------------------------------- |
| 처방전 자동 등록 | 사진 한 장으로 약·복약 시간 입력 (OCR API 연동) |
| 복약 알림 | 시간대별 푸시 알림 + 잠금화면 위젯 |
| 가족 공유 | 보호자가 복약 여부를 실시간으로 확인 |
| 복약 리포트 | 주/월 단위 복용률, PDF 내보내기 |
Bad — single blob, 20+ nodes, unreadable:
flowchart LR
A[Mobile] --> B[API Gateway] --> C[Auth] --> D[User] --> E[Prescription] --> F[OCR Worker] --> G[(Postgres)]
E --> H[Notification] --> I[FCM] --> J[APNs] --> K[Family] --> L[Reports] --> M[PDF] --> N[(S3)]
D --> O[Profile] --> P[Settings] --> Q[Billing] --> R[Stripe]
Good — split into user journey + system, each ≤12 nodes:
flowchart LR
Signup --> Onboarding --> 처방전등록 --> 복약알림 --> 꾸준한복약
flowchart LR
Mobile --> API
API --> Auth
API --> Prescription --> OCR
API --> Notification --> FCM
API -.-> Postgres
OCR -.-> S3
| Mistake | Fix |
|---|---|
| Opening with "Installation" before the product is explained | Move What/Who/Features above any setup |
| Burying app name behind technical framing ("A Laravel app for …") | Lead with what the user gets, not the framework |
| Copying every dev-setup command into the README | Show 3–5 line teaser + link to the dedicated doc |
| Dense paragraphs of feature descriptions | Convert to tables; one row per feature |
| Mermaid diagram with 20+ nodes | Split into two diagrams (user journey vs. system) or simplify |
| Badges for every dependency | Cap at 4–6 — only what defines the project |
| Single "Tech stack" list with 40 items | Group by layer in a table |
**\text`**` mixing bold + code unnecessarily | Pick one. Code for identifiers, bold for emphasis |
| ASCII art trees in serif preview | Use a fenced text block so it renders monospace |
| Stale links to renamed files | Re-verify every relative link after writing |
Excuses you may catch yourself making, and the correct response:
| Excuse | Reality |
|---|---|
| "유저가 기술자라 jargon 써도 됨" | 비개발자 한 명이라도 읽는다고 가정. 첫 세 섹션은 평이한 언어로. |
| "셋업이 3줄이라 그냥 README에 넣자" | 다음 사람이 또 복사함. 별도 파일이 없으면 새로 만들고, 있으면 링크만. |
| "이모지 하나만 — 분위기 살리기용" | 사용자가 명시적으로 요청하지 않았으면 0개. |
| "다이어그램 노드가 20개여도 정확한 게 우선" | 12개 넘으면 안 읽힘. 둘로 쪼개거나 단순화. |
| "기존 README가 짧으니 새로 쓰자" | tweak 요청이면 풀 재작성 금지. When-Not-to-use 적용. |
| "프레임워크 이름이 곧 정체성" | 도구가 아닌 사용자 가치를 첫 문장에. 스택은 뱃지/Tech stack 섹션으로. |
| "한국어 README라 ux-writing-korean까지는 과함" | 톤이 어긋나면 가독성이 깨짐. 5분이면 핵심 규칙 확인 가능. |
Run these once — all use npx -y, no permanent install:
# Markdown lint
npx -y markdownlint-cli README.md
# Relative-link resolution
npx -y markdown-link-check README.md
# Mermaid renders (writes rendered .md to /tmp; visually inspect or rely on GitHub preview)
npx -y @mermaid-js/mermaid-cli -i README.md -o /tmp/readme-rendered.md
Then walk the checklist:
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub douinc/agent-skills --plugin writing-project-readme