SEASON 2 · EPISODE 3সিজন ২ · এপিসোড ৩

BUILDING A SKILL একটি স্কিল তৈরি করা

THE FIRST LESSONপ্রথম পাঠ

SHAZZAD · ENGINEER, NOP-STATION "Every release Friday I spend 40 minutes doing the same migration check by hand. Same steps. Every. Single. Week." "প্রতি রিলিজ শুক্রবার হাতে হাতে একই মাইগ্রেশন চেক করতে ৪০ মিনিট লাগে। একই ধাপ। প্রতি। সপ্তাহে।"
THE PAINসমস্যা

Ankan's Friday Ritualঅঙ্কনের শুক্রবারের রীতি

1. Check pending migrations১. মুলতুবি মাইগ্রেশন চেক করো
→
2. Verify schema matches models২. স্কিমা মডেলের সাথে মেলে কিনা যাচাই
→
3. Run rollback dry-run৩. রোলব্যাক ড্রাই-রান চালাও
→
4. Confirm no data-loss risk৪. ডেটা-লসের ঝুঁকি নেই নিশ্চিত করো
→
5. Write sign-off note৫. সাইন-অফ নোট লেখো
HABIB · BACKEND ENGINEER "You do this manually every week? One missed step and the release goes sideways. There has to be a better way." "তুমি প্রতি সপ্তাহ হাতে করো? একটা ধাপ মিস হলে রিলিজ বরবাদ। একটা ভালো উপায় থাকতে হবে।"
Error-prone, slow, and undo-able in one line: encode it as a Claude Code skill.ভুলপ্রবণ, ধীর, এবং এক লাইনে সমাধানযোগ্য: এটাকে Claude Code স্কিল হিসেবে এনকোড করো।
THE RULEনিয়ম

When Should You Create a Skill?কখন স্কিল তৈরি করা উচিত?

Any repeated multi-step procedure worth capturing once and reusing forever. যেকোনো বারবার করা বহু-ধাপের পদ্ধতি যা একবার ধরে রাখা এবং বারবার ব্যবহার করার মতো।
✓ Pre-release checks✓ প্রি-রিলিজ চেক ✓ Code review checklists✓ কোড রিভিউ চেকলিস্ট ✓ Changelog generation✓ চেঞ্জলগ তৈরি ✓ Incident runbooks✓ ইনসিডেন্ট রানবুক ✓ Onboarding walkthroughs✓ অনবোর্ডিং ওয়াকথ্রু ✓ Deploy verifications✓ ডিপ্লয় যাচাই
Golden signal: if you've done it by hand more than twice and typed the same instructions to Claude more than once — it's skill material.সোনালী সংকেত: যদি দুইবারের বেশি হাতে করেছ এবং একবারের বেশি Claude-কে একই নির্দেশনা টাইপ করেছ — এটা স্কিলের উপাদান।
THE BLUEPRINTনির্দেশিকা

4 Steps to Any Skillযেকোনো স্কিলের ৪টি ধাপ

1
Name & Folderনাম ও ফোল্ডার
→
2
Frontmatterফ্রন্টম্যাটার
→
3
Bodyবডি
→
4
Testপরীক্ষা
One file. One job. Four parts. That's the entire skill authoring contract.একটি ফাইল। একটি কাজ। চারটি অংশ। এটাই সম্পূর্ণ স্কিল অথরিং চুক্তি।
RIFAT · SENIOR ENGINEER "Think of a skill as a permanent sticky note for Claude — a precise, reusable instruction set that never lives in someone's head." "স্কিলকে Claude-এর জন্য একটি স্থায়ী স্টিকি নোট মনে করো — একটি নির্ভুল, পুনর্ব্যবহারযোগ্য নির্দেশনা সেট যা কারো মাথায় থাকে না।"
STEP 1 OF 4ধাপ ১ / ৪

Name & Folderনাম ও ফোল্ডার

# Create the skill directory and file
mkdir -p .claude/skills/migration-check
touch .claude/skills/migration-check/SKILL.md
GOOD NAMESভালো নাম
  • migration-check
  • release-notes
  • pr-review-checklist
  • db-backup-verify
BAD NAMESখারাপ নাম
  • MyScript
  • stuff
  • do the thing
  • check migrations and also verify schema and rollback
Kebab-case name = the skill's identity. It becomes the slash command: /migration-check. Keep it a single, clear job.কেবাব-কেস নাম = স্কিলের পরিচয়। এটাই স্ল্যাশ কমান্ড হবে: /migration-check। একটাই স্পষ্ট কাজ রাখো।
STEP 2 OF 4ধাপ ২ / ৪

Frontmatter — The Triggerফ্রন্টম্যাটার — ট্রিগার

The description field is the trigger. Pack it with the words a user would actually say to invoke this skill.description ফিল্ডই ট্রিগার। এতে সেই শব্দগুলো ভরো যা কোনো ব্যবহারকারী এই স্কিল ডাকতে আসলে বলবে।
✓ GOOD description✓ ভালো বিবরণ
---
name: migration-check
description: >
  Run the pre-release database
  migration check. Use when
  asked to "check migrations
  before release", "verify db
  migrations", "pre-release db
  check", or "migration sign-off".
---
✗ BAD description✗ খারাপ বিবরণ
---
name: migration-check
description: >
  Checks migrations.
---
Too vague — Claude won't know when to use it. No trigger phrases, no context. অনেক অস্পষ্ট — Claude জানবে না কখন ব্যবহার করতে হবে। কোনো ট্রিগার বাক্য নেই, কোনো প্রসঙ্গ নেই।
STEP 3 OF 4ধাপ ৩ / ৪

Body — The Instructionsবডি — নির্দেশনা

Numbered Markdown steps. Be explicit: what to check, which tools to use, what the expected output looks like.ক্রমিক Markdown ধাপ। স্পষ্ট হও: কী চেক করতে হবে, কোন টুল ব্যবহার করতে হবে, প্রত্যাশিত আউটপুট কেমন হবে।
## Steps

1. Run `python manage.py showmigrations --list` and collect
   every unapplied migration.

2. For each unapplied migration, open the file and verify:
   - No column drop without a safe default
   - No table rename without an alias period
   - All new NOT NULL columns have a DB-level default

3. Execute `python manage.py migrate --run-syncdb --dry-run`
   and confirm exit code 0.

4. Run `python manage.py migrate --fake-initial --dry-run`
   to simulate rollback path. Confirm no errors.

5. Output a sign-off block:
   ```
   Migration Check — PASS/FAIL
   Checked: <date>
   Unapplied: <N>
   Risk: LOW | MEDIUM | HIGH
   Notes: …
   ```
STEP 4 OF 4ধাপ ৪ / ৪

Test — Does It Trigger?পরীক্ষা — এটা ট্রিগার হয়?

NATURAL LANGUAGEস্বাভাবিক ভাষা
"Can you check migrations before we release tonight?" "আজ রাতের রিলিজের আগে কি মাইগ্রেশন চেক করতে পারবে?"
→ Claude reads description, recognises match, invokes skill → Claude বিবরণ পড়ে, মিল দেখে, স্কিল চালু করে
EXPLICIT INVOKEসরাসরি চালু
/migration-check
→ Loads SKILL.md directly, runs all steps in order → সরাসরি SKILL.md লোড করে, সব ধাপ ক্রমে চালায়
SHAZZAD "First try — it triggered perfectly on 'verify db migrations'. Ran all five steps, produced the sign-off block. 40 minutes to 90 seconds." "প্রথমবার — 'verify db migrations'-এ নিখুঁতভাবে ট্রিগার হলো। পাঁচটি ধাপ চালাল, সাইন-অফ ব্লক তৈরি করল। ৪০ মিনিট থেকে ৯০ সেকেন্ড।"
LIVE BUILDলাইভ বিল্ড

Building "release-notes" End to End"release-notes" শুরু থেকে শেষ পর্যন্ত তৈরি

Goal: gather all merged PRs since the last git tag, group them by type (feat/fix/chore/docs), and write a formatted CHANGELOG entry automatically.লক্ষ্য: শেষ git ট্যাগের পর থেকে মার্জ হওয়া সব PR সংগ্রহ করো, ধরন অনুযায়ী (feat/fix/chore/docs) গোষ্ঠীভুক্ত করো, এবং স্বয়ংক্রিয়ভাবে ফর্ম্যাটেড CHANGELOG এন্ট্রি লেখো।
FOLDER: .claude/skills/release-notes/ফোল্ডার: .claude/skills/release-notes/
FILE: SKILL.mdফাইল: SKILL.md INVOKED BY: "generate release notes" / /release-notesট্রিগার: "generate release notes" / /release-notes
Let's build the full SKILL.md — frontmatter and body — right now.এখনই সম্পূর্ণ SKILL.md তৈরি করা যাক — ফ্রন্টম্যাটার এবং বডি।
LIVE BUILD · PART 1লাইভ বিল্ড · অংশ ১

SKILL.md — FrontmatterSKILL.md — ফ্রন্টম্যাটার

---
name: release-notes
description: >
  Generate release notes or a CHANGELOG entry for the
  current release. Use when asked to "generate release
  notes", "write changelog", "create CHANGELOG entry",
  "summarise what changed since last tag", or
  "draft release notes for vX.Y.Z".
  Gathers merged PRs since the last git tag, groups
  them by type, and writes a formatted Markdown block.
---
Notice: the description contains every phrase a developer would naturally type. It acts as a semantic search key — the richer it is, the more reliably Claude picks this skill.লক্ষ্য করো: বিবরণে প্রতিটি বাক্য আছে যা একজন ডেভেলপার স্বাভাবিকভাবে টাইপ করতে পারে। এটা একটি সিমান্টিক সার্চ কী হিসেবে কাজ করে — যত সমৃদ্ধ, Claude তত নির্ভরযোগ্যভাবে এই স্কিল বেছে নেয়।
LIVE BUILD · PART 2লাইভ বিল্ড · অংশ ২

SKILL.md — BodySKILL.md — বডি

## Steps

1. Find the last git tag:
   `git describe --tags --abbrev=0`

2. List all merge commits since that tag:
   `git log <tag>..HEAD --merges --oneline`

3. For each merge commit, extract the PR title and number.
   Group by conventional-commit prefix:
   - `feat:` → ✨ Features
   - `fix:`  → 🐛 Bug Fixes
   - `docs:` → 📝 Documentation
   - `chore:` / other → 🔧 Maintenance

4. Write a Markdown CHANGELOG block in this format:
   ```
   ## [vX.Y.Z] — YYYY-MM-DD
   ### ✨ Features
   - PR #123 — Add payment retry logic
   ### 🐛 Bug Fixes
   - PR #118 — Fix null pointer in OrderService
   ### 🔧 Maintenance
   - PR #115 — Bump dependencies
   ```

5. Ask: "Should I append this to CHANGELOG.md?" and
   wait for confirmation before writing to disk.
ITERATIONপুনরাবৃত্তি

When Things Go Wrongযখন কিছু ঠিক না হয়

Problem: doesn't triggerসমস্যা: ট্রিগার হয় না
Fix: Sharpen the description. Add more natural-language variants of the trigger phrase. Think of how a new teammate would phrase the request. সমাধান: বিবরণ তীক্ষ্ণ করো। ট্রিগার বাক্যের আরও স্বাভাবিক রূপ যোগ করো। নতুন একজন টিমমেট কীভাবে অনুরোধ করতো তা ভাবো।
Problem: Claude wandersসমস্যা: Claude ঘুরে বেড়ায়
Fix: Tighten the body. Replace open-ended steps with precise commands. Add the exact output format you expect — Claude mirrors structure when you show it one. সমাধান: বডি আঁটো করো। অস্পষ্ট ধাপ নির্দিষ্ট কমান্ড দিয়ে প্রতিস্থাপন করো। তুমি যে আউটপুট ফর্ম্যাট চাও তা হুবহু দাও — তুমি দেখালে Claude কাঠামো অনুসরণ করে।
Problem: inconsistent outputসমস্যা: অসামঞ্জস্যপূর্ণ আউটপুট
Fix: Add an ## Example Output section at the end of the body. One concrete example eliminates most ambiguity. সমাধান: বডির শেষে ## Example Output বিভাগ যোগ করো। একটা কংক্রিট উদাহরণ বেশিরভাগ অস্পষ্টতা দূর করে।
A skill is a living document. Version 1 is a draft — expect to iterate 2–3 times before it's fully reliable.একটি স্কিল একটি জীবন্ত ডকুমেন্ট। সংস্করণ ১ একটি খসড়া — সম্পূর্ণ নির্ভরযোগ্য হওয়ার আগে ২-৩ বার পুনরাবৃত্তির প্রত্যাশা রাখো।
DESIGN PRINCIPLEডিজাইন নীতি

One Skill, One Jobএক স্কিল, এক কাজ

Don't build a mega-skill.মেগা-স্কিল তৈরি করো না।
MEGA-SKILL (avoid)মেগা-স্কিল (এড়াও)
pre-release-everything
Checks migrations + runs tests + generates release notes + deploys to staging + writes Slack message + notifies team মাইগ্রেশন চেক + টেস্ট চালায় + রিলিজ নোট তৈরি + স্টেজিংয়ে ডিপ্লয় + Slack মেসেজ লেখে + টিম নোটিফাই করে
FOCUSED SKILLS (do this)ফোকাসড স্কিল (এটা করো)
  • migration-check
  • run-test-suite
  • release-notes
  • deploy-staging
  • notify-team
Small skills compose. Mega-skills fail silently — one step fails and the rest becomes noise.ছোট স্কিল মিলিয়ে কাজ করে। মেগা-স্কিল নীরবে ব্যর্থ হয় — একটা ধাপ ব্যর্থ হলে বাকিটা অর্থহীন।
GOTCHASসতর্কতা

The Four Common Mistakesচারটি সাধারণ ভুল

  • ✗
    Generic descriptionঅস্পষ্ট বিবরণ
    "Checks stuff." Claude will never auto-trigger this. Fill it with actual phrases. "জিনিস চেক করে।" Claude কখনো স্বয়ংক্রিয়ভাবে এটা ট্রিগার করবে না। আসল বাক্য দিয়ে পূরণ করো।
  • ✗
    Body too long / no structureবডি অনেক লম্বা / কোনো কাঠামো নেই
    A wall of prose. Number your steps. Claude executes ordered lists reliably; paragraphs, less so. গদ্যের দেয়াল। ধাপে নম্বর দাও। Claude ক্রমিক তালিকা নির্ভরযোগ্যভাবে চালায়; অনুচ্ছেদ কম।
  • ✗
    No example outputকোনো উদাহরণ আউটপুট নেই
    Without a template, Claude invents format. Show what "done" looks like — copy-pasteable output block. টেমপ্লেট ছাড়া Claude নিজেই ফর্ম্যাট তৈরি করে। "শেষ" কেমন দেখায় তা দেখাও — কপি-পেস্টযোগ্য আউটপুট ব্লক।
  • ⚠️
    Wrong folderভুল ফোল্ডার
    Skills must live in .claude/skills/<name>/SKILL.md. Drop it anywhere else and Claude won't find it. স্কিল অবশ্যই .claude/skills/<name>/SKILL.md-তে থাকতে হবে। অন্য কোথাও রাখলে Claude খুঁজে পাবে না।
REFERENCEরেফারেন্স

The Full Anatomy of a SKILL.mdSKILL.md-এর সম্পূর্ণ রূপ

---
name: release-notes               # ← kebab-case, becomes /release-notes
description: >
  Generate release notes or a     # ← trigger phrases users would say
  CHANGELOG entry. Use when
  asked to "write changelog",
  "release notes for vX.Y.Z",
  "summarise since last tag".
---

## Steps                          # ← numbered, imperative

1. Identify the last git tag …
2. List merge commits since tag …
3. Group by conventional prefix …
4. Write formatted Markdown block …
5. Confirm before writing to disk …

## Example Output                 # ← concrete template (optional but powerful)

## [v1.4.0] — 2026-06-20
### ✨ Features
- PR #42 — Add skill authoring guide
### 🐛 Bug Fixes
- PR #41 — Fix trigger on bilingual decks
BIG PICTUREবড় ছবি

Skills Are Team Infrastructureস্কিল হলো টিমের অবকাঠামো

A skill committed to .claude/skills/ is available to every developer on the team — not just the person who wrote it..claude/skills/-এ কমিট করা একটি স্কিল টিমের প্রতিটি ডেভেলপারের কাছে পাওয়া যায় — শুধু যে লিখেছে তার কাছে নয়।
COMMIT ONCEএকবার কমিট
git add .claude/skills/
→ on main forever
git add .claude/skills/
→ মেইনে চিরকাল
TEAM PICKS IT UPটিম ব্যবহার করে
Rafid, Mouneeta, Ankan — all invoke /migration-check without re-reading the steps রাফিদ, মৌনিতা, অঙ্কন — সবাই ধাপ না পড়েও /migration-check চালু করে
KNOWLEDGE LIVES IN REPOজ্ঞান রিপোতে থাকে
No tribal knowledge. No "ask Ankan". The skill is the runbook. কোনো অলিখিত জ্ঞান নেই। "অঙ্কনকে জিজ্ঞেস করো" নেই। স্কিলই রানবুক।
Skills turn individual expertise into institutional memory — stored in version control, not in someone's brain.স্কিল ব্যক্তিগত দক্ষতাকে প্রাতিষ্ঠানিক স্মৃতিতে পরিণত করে — ভার্সন কন্ট্রোলে সংরক্ষিত, কারো মাথায় নয়।
WRAP UPসারসংক্ষেপ

What You Now Knowতুমি এখন কী জানো

NAME · .claude/skills/<name>/SKILL.mdনাম · .claude/skills/<name>/SKILL.md FRONTMATTER · trigger-rich descriptionফ্রন্টম্যাটার · ট্রিগার-সমৃদ্ধ বিবরণ BODY · numbered steps + example outputবডি · ক্রমিক ধাপ + উদাহরণ আউটপুট TEST · natural phrase or /skill-nameপরীক্ষা · স্বাভাবিক বাক্য বা /skill-name
ONE SKILL = ONE JOBএক স্কিল = এক কাজ ITERATE THE DESCRIPTION FIRSTআগে বিবরণ পুনরাবৃত্তি করো COMMIT TO REPO = TEAM SKILLরিপোতে কমিট = টিম স্কিল
Next → Episode 4: Progressive Disclosure — Tools of the Trade.
Which built-in tools Claude Code ships with, when to reach for each, and how to compose them inside a skill body.
পরবর্তী → এপিসোড ৪: প্রগ্রেসিভ ডিসক্লোজার — ট্রেডের টুল।
Claude Code যে বিল্ট-ইন টুল নিয়ে আসে, কখন কোনটা ব্যবহার করতে হবে, এবং স্কিল বডিতে কীভাবে সেগুলো সাজাতে হবে।
← → to navigate · space to advance