Back to course
Module 3 · Day 17

CLAUDE.md as a Contract

Day 16-তে `/init` দিয়ে শুরু করেছিলে — আজ CLAUDE.md-এর পুরোটা। কী রাখবে, কী বাদ দেবে, কীভাবে স্তরে ভাগ হয়, আর কীভাবে ভালো একটা clause লেখো — যেটা Claude সত্যিই মেনে চলে।

~120 min read6 learning objectives
What you'll learn
  • CLAUDE.md কী — তোমার আর Claude-এর মধ্যে একটা contract, যেটা ও প্রতি session-এর শুরুতে পড়ে।
  • কেন chat যথেষ্ট না — /clear, /compact, session বন্ধ হলে কথা মুছে যায়; file থেকে যায়।
  • Memory hierarchy — user (~/.claude) · project (git-এ) · local (gitignored) — কোন নিয়ম কোথায়।
  • কী রাখবে, কী বাদ দেবে — "এই line না থাকলে Claude ভুল করত?" এই একটা প্রশ্নে decide করা।
  • ভালো clause লেখা — specific, verifiable, imperative English (এই lesson-এর আসল লক্ষ্য)।
  • Living contract — /init দিয়ে শুরু; Claude একই ভুল ২য় বার করলে একটা clause যোগ করা।
Before this
  • Day 16 — Claude Code basics; /init আর starter CLAUDE.md দেখা হয়ে গেছে।
  • একটা project-এ `claude` চালাতে পারা।
  • Git-এর হালকা ধারণা (.gitignore কী করে — জানা থাকলে ভালো)।
1

The Contract

Chat ভুলে যায়, file মনে রাখে।

Day 16-এ `/init` চালিয়ে একটা starter CLAUDE.md বানিয়েছিলে — শুধু পরিচয় হয়েছিল। আজ পুরোটা: এই file আসলে কী, কেন এত গুরুত্বপূর্ণ, আর কীভাবে ভালো একটা লেখো।

CLAUDE.mdতোমার আর Claude-এর contract

CLAUDE.md হলো একটা সাধারণ markdown file, যেটা Claude Code প্রতি session-এর শুরুতে নিজে থেকেই পড়ে। ভাবো এটা একটা contract — এই project কীভাবে চলে, তার নিয়মগুলো একবার লিখে রাখা। Chat-এ বলা কথা /clear, /compact বা session বন্ধ হলে মুছে যায়; contract থেকে যায়।

Why it matters

এটাই beginner-এর সবচেয়ে বড় leverage। একই কথা প্রতি session-এ আবার বোঝানো বনাম একবার file-এ লিখে রাখা — পার্থক্যটা আকাশ-পাতাল। Claude Code-কে নির্ভরযোগ্য বানানোর প্রথম ধাপ এই file।

নিচে দেখো — একটা clause থাকলে আর না থাকলে, একই request-এ Claude-এর ফল কতটা আলাদা হয়। এটাই contract-এর মানে — লেখা থাকলে binding।

2

Memory Hierarchy

CLAUDE.md এক জায়গায় থাকে না — কয়েকটা স্তরে।

CLAUDE.md বললে মনে হয় একটাই file। আসলে কয়েকটা স্তর একসাথে মিশে Claude যা পড়ে সেটা তৈরি করে — কোন নিয়ম কোথায় যাবে, সেটাই এই স্তরগুলো ঠিক করে দেয়।

Memory hierarchyuser · project · local

CLAUDE.md এক জায়গায় থাকে না — কয়েকটা স্তরে। ~/.claude/CLAUDE.md (তুমি, সব project) · ./CLAUDE.md (team-এর, git-এ committed) · ./CLAUDE.local.md (শুধু তুমি, এই project, gitignored)। সবগুলো একসাথে load হয়ে Claude যা পড়ে সেটা তৈরি করে। (উপরে কোম্পানির managed policy থাকতে পারে।)

Why it matters

কোন নিয়ম কোথায় যাবে — এটা জানা জরুরি। তোমার নিজের sandbox URL বা পছন্দ team-এর file-এ দিলে সবার কাছে চলে যাবে; ওটা CLAUDE.local.md-তে রাখো। Team-এর shared standard ./CLAUDE.md-তে, যাতে git দিয়ে সবার কাছে যায়।

3

কী রাখবে, কী বাদ দেবে

আজকের সবচেয়ে দরকারি skill — কম রাখা।

Beginner-এর সহজাত ভুল হলো CLAUDE.md-তে সব ভরে দেওয়া — "যত বেশি নিয়ম, তত ভালো।" আসল skill ঠিক উল্টো: কম রাখা।

Signal, not noiseকী রাখবে, কী বাদ

নিয়ম একটাই: Claude কি এটা code পড়ে নিজে বুঝে নিতে পারবে? পারলে — বাদ (ভাষা কী, function কী করে — derivable)। না পারলে — রাখো (test command, category-র নাম, env var, একটা gotcha, branch convention)। সাথে vague জিনিস ("clean code লেখো") বাদ — ওটা কিছু বদলায় না।

Why it matters

প্রতি line-এ জিজ্ঞেস করো: "এই line টা না থাকলে কি Claude ভুল করত?" উত্তর না হলে কেটে দাও। নিচের ৮টা লাইন সাজিয়ে নিজে practice করো।

Lean beats longছোট রাখো — নাহলে ignored

CLAUDE.md প্রতি session-এ পুরোটা context-এ load হয় — মানে প্রতিবার token খরচ। আর বড় file-এ জরুরি নিয়মগুলো অপ্রয়োজনীয় কথার ভিড়ে চাপা পড়ে যায়, তখন Claude সেগুলো ignore করতে শুরু করে। লক্ষ্য: ২০০ line-এর কম।

Why it matters

এটা উল্টো লাগে কিন্তু সত্যি: বড় CLAUDE.md মানে Claude তোমার নিয়ম কম মানে, বেশি না। তাই বেশি লিখলে আসলে ক্ষতি। বড় হয়ে গেলে নিয়মিত prune করো — code-এর মতোই।

Tip

একটাই test মনে রাখো: "এই line-টা না থাকলে কি Claude ভুল করত?" — উত্তর না হলে কেটে দাও। এই একটা প্রশ্ন বেশিরভাগ সিদ্ধান্ত সহজ করে দেয়।

4

Clause লেখা যেটা Claude মানবে

Vague না — specific আর verifiable।

কী রাখবে সেটা ঠিক করা অর্ধেক কাজ। বাকি অর্ধেক — সেটা কীভাবে লেখো। একটা vague clause আর একটা verifiable clause-এর ফল আকাশ-পাতাল, যদিও দুটোই এক লাইন।

Verifiable clausesspecific > vague

Clause এমনভাবে লেখো যেন Claude যাচাই করতে পারে। "test properly" অকেজো; "Run `pytest -q` before declaring done" কাজের — command আছে, সময় আছে, ফল মাপা যায়। ভাষা imperative রাখো: Always… / Never… / Use X, not Y… / Run … before …। খুব দরকারে জোর দিতে IMPORTANT বা YOU MUST।

Why it matters

এটাই এই lesson-এর আসল লক্ষ্য — তুমি যেন কাজে গিয়ে English-এ এই নির্দেশগুলো নিজে লিখতে পারো। নিচের প্রতিটা vague clause চাপ দিয়ে দেখো, কীভাবে verifiable হয়ে ওঠে।

এই টুকরোগুলো জোড়া দিলে একটা আসল CLAUDE.md এমন দেখতে হয় — commands, conventions, আর gotchas, প্রতিটা লাইন কাজের, ২০০ line-এর অনেক নিচে।

markdown
# CLAUDE.md — complaint-classifier

## Commands
- Test: pytest -q
- Run:  python classify.py

## Conventions
- Categories are exactly: delivery_delay, wrong_item,
  damaged, billing, other, unclassifiable
- Keep classify() signature stable

## Gotchas
- Never edit data/labels.csv by hand — it's generated
5

Living Contract

একবার লেখো, তারপর বড় করো।

CLAUDE.md একবার লিখে ফেলে দেওয়ার জিনিস না। /init দিয়ে একটা draft বানাও, তারপর সময়ের সাথে বাড়াও।

A living contract/init দিয়ে শুরু, সময়ে বাড়াও

CLAUDE.md একবার লিখে ফেলে দেওয়ার জিনিস না। /init দিয়ে একটা draft বানাও, তারপর বাড়াতে থাকো। নিয়মটা পরিষ্কার: Claude একই ভুল ২য় বার করলে — সেটা chat-এ ঠিক না করে file-এ একটা clause যোগ করো। /memory দিয়ে file গুলো দেখো/এডিটো; @import দিয়ে গুছাও। (নতুন auto memory feature Claude-কে নিজে থেকেও কিছু শিখে রাখতে দেয়।)

Why it matters

চ্যাটে ঠিক করলে শুধু এই session-এ কাজ হয়; পরের fresh session-এ একই ভুল ফেরে। File-এ clause দিলে সমস্যা একবারে শেষ। তোমার contract যত পরিণত হবে, Claude তত নির্ভরযোগ্য।

Note

নিয়মটা মনে রাখো: Claude একই ভুল ২য় বার করলে chat-এ ঠিক কোরো না — file-এ একটা clause যোগ করো। তখন সমস্যাটা একবারে শেষ।

6

Check Your Understanding

ভুল হলে সমস্যা নেই — প্রতিটার ব্যাখ্যা আছে।

Misconception check

CLAUDE.md যত বড় আর বিস্তারিত, তত ভালো — সব নিয়ম ভরে দাও

Misconception check

CLAUDE.md-তে আমার code কী করে সব ব্যাখ্যা করে দিলে Claude ভালো বুঝবে

Misconception check

একবার /init চালিয়ে CLAUDE.md বানালেই কাজ শেষ

Misconception check

আমার personal preference (sandbox URL, পছন্দের test data) team-এর ./CLAUDE.md-তে দিই

Misconception check

Chat-এ একবার বলে দিলেই Claude মনে রাখবে — file-এ লেখার দরকার নেই

Quick check

CLAUDE.md কখন পড়া হয়?

ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।

Quick check

এর মধ্যে কোনটা CLAUDE.md-তে রাখা উচিত?

ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।

Quick check

শুধু তোমার এই project-এর preference (team-এ share হবে না) — কোন file?

ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।

Quick check

কোন clause Claude বেশি নির্ভরযোগ্যভাবে মানবে?

ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।

Quick check

CLAUDE.md খুব বড় হয়ে গেলে কী হয়?

ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।

Quick check

Project-এ একটা starter CLAUDE.md বানাতে কোন command?

ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।

7

Prove It To Yourself

চারটা takeaway মনে রাখো — Day 18-এ Claude Code আরও বাড়বে।

Note

চারটা জিনিস মনে রাখো — CLAUDE.md = contract: Claude প্রতি session-এ পড়ে; chat ভুলে যায় (/clear, /compact, session বন্ধ), file মনে রাখে। Lean beats long: ২০০ line-এর কম; "এই line না থাকলে Claude ভুল করত?" — না হলে কাটো। bloat = ignored। Clause লেখো যাচাইযোগ্য করে: "Run `pytest -q` before done" > "test properly" — specific, imperative, checkable। আর এটা living contract: Claude একই ভুল ২য় বার করলে → একটা clause যোগ করো। /init দিয়ে শুরু, সময়ে বাড়াও।

আজকের শব্দগুলো — CLAUDE.md, project memory, user memory, memory hierarchy, /init, /memory, @import, context window, convention, single source of truth — এখন থেকে English-ই থাকবে; নিজের project-এ এভাবেই ব্যবহার করবে। পুরো তালিকা নিচের glossary-তে। Day 18-এ Claude Code আরও বাড়বে — subagent, skill, hook দিয়ে।

Glossary

শব্দার্থ — পরে ফিরে দেখার জন্য

একনজরে সব key term। কোনো শব্দ ভুলে গেলে এখানে এসে খুঁজে নিও।

@import
CLAUDE.md-র ভেতর @path/to/file দিয়ে আরেকটা file টেনে আনা (গোছানোর জন্য)।
/init
Project স্ক্যান করে একটা starter CLAUDE.md draft বানায়।
/memory
কোন CLAUDE.md/rules file load হয়েছে দেখায়, খুলে এডিট করায়।
auto memory
নতুন feature — Claude নিজে থেকে কিছু শিখে MEMORY.md-তে রাখে (CLAUDE.md তুমি লেখো)।
CLAUDE.local.md
এই project-এ শুধু তোমার জিনিস — gitignored, share হয় না।
CLAUDE.md
Project-এর persistent instruction file — Claude প্রতি session-এর শুরুতে পড়ে।
context window
Claude একসাথে যত token মনে রাখে — CLAUDE.md এর একটা অংশ খরচ করে।
convention
Project-এর নিজস্ব নিয়ম (naming, layout, category) — যা code থেকে বোঝা যায় না।
memory hierarchy
user → project → local (+ org) — সব মিলে এক context।
project memory
./CLAUDE.md — team-এর shared instruction, git-এ committed।
repo etiquette
Branch naming, PR rule — team-এর কাজের নিয়ম, code-এ লেখা থাকে না।
single source of truth
এক জায়গা যেখানে সত্যিটা লেখা — নিয়ম বারবার না বলে এখানে রাখো।
user memory
~/.claude/CLAUDE.md — তোমার ব্যক্তিগত পছন্দ, তোমার সব project-এ।
References

Sources consulted to author this lesson. Citation style is informal — follow the links if you want to dig deeper.

Exit check

দুই বাক্যে নিজের ভাষায় লেখো

নিজের ভাষায় দুই বাক্যে লেখো — CLAUDE.md-এ কোনো একটা line রাখা উচিত কিনা বুঝতে কোন একটা প্রশ্ন জিজ্ঞেস করবে, আর একটা ভালো clause-এ কী কী থাকা দরকার (specific/imperative/verifiable-এর মধ্যে যেকোনো দুটো)।

0 chars
Back to course