CLAUDE.md as a Contract
Day 16-তে `/init` দিয়ে শুরু করেছিলে — আজ CLAUDE.md-এর পুরোটা। কী রাখবে, কী বাদ দেবে, কীভাবে স্তরে ভাগ হয়, আর কীভাবে ভালো একটা clause লেখো — যেটা Claude সত্যিই মেনে চলে।
- •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 যোগ করা।
- •Day 16 — Claude Code basics; /init আর starter CLAUDE.md দেখা হয়ে গেছে।
- •একটা project-এ `claude` চালাতে পারা।
- •Git-এর হালকা ধারণা (.gitignore কী করে — জানা থাকলে ভালো)।
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 থেকে যায়।
এটাই beginner-এর সবচেয়ে বড় leverage। একই কথা প্রতি session-এ আবার বোঝানো বনাম একবার file-এ লিখে রাখা — পার্থক্যটা আকাশ-পাতাল। Claude Code-কে নির্ভরযোগ্য বানানোর প্রথম ধাপ এই file।
নিচে দেখো — একটা clause থাকলে আর না থাকলে, একই request-এ Claude-এর ফল কতটা আলাদা হয়। এটাই contract-এর মানে — লেখা থাকলে binding।
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 থাকতে পারে।)
কোন নিয়ম কোথায় যাবে — এটা জানা জরুরি। তোমার নিজের sandbox URL বা পছন্দ team-এর file-এ দিলে সবার কাছে চলে যাবে; ওটা CLAUDE.local.md-তে রাখো। Team-এর shared standard ./CLAUDE.md-তে, যাতে git দিয়ে সবার কাছে যায়।
কী রাখবে, কী বাদ দেবে
আজকের সবচেয়ে দরকারি skill — কম রাখা।
Beginner-এর সহজাত ভুল হলো CLAUDE.md-তে সব ভরে দেওয়া — "যত বেশি নিয়ম, তত ভালো।" আসল skill ঠিক উল্টো: কম রাখা।
Signal, not noiseকী রাখবে, কী বাদ
নিয়ম একটাই: Claude কি এটা code পড়ে নিজে বুঝে নিতে পারবে? পারলে — বাদ (ভাষা কী, function কী করে — derivable)। না পারলে — রাখো (test command, category-র নাম, env var, একটা gotcha, branch convention)। সাথে vague জিনিস ("clean code লেখো") বাদ — ওটা কিছু বদলায় না।
প্রতি line-এ জিজ্ঞেস করো: "এই line টা না থাকলে কি Claude ভুল করত?" উত্তর না হলে কেটে দাও। নিচের ৮টা লাইন সাজিয়ে নিজে practice করো।
Lean beats longছোট রাখো — নাহলে ignored
CLAUDE.md প্রতি session-এ পুরোটা context-এ load হয় — মানে প্রতিবার token খরচ। আর বড় file-এ জরুরি নিয়মগুলো অপ্রয়োজনীয় কথার ভিড়ে চাপা পড়ে যায়, তখন Claude সেগুলো ignore করতে শুরু করে। লক্ষ্য: ২০০ line-এর কম।
এটা উল্টো লাগে কিন্তু সত্যি: বড় CLAUDE.md মানে Claude তোমার নিয়ম কম মানে, বেশি না। তাই বেশি লিখলে আসলে ক্ষতি। বড় হয়ে গেলে নিয়মিত prune করো — code-এর মতোই।
একটাই test মনে রাখো: "এই line-টা না থাকলে কি Claude ভুল করত?" — উত্তর না হলে কেটে দাও। এই একটা প্রশ্ন বেশিরভাগ সিদ্ধান্ত সহজ করে দেয়।
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।
এটাই এই lesson-এর আসল লক্ষ্য — তুমি যেন কাজে গিয়ে English-এ এই নির্দেশগুলো নিজে লিখতে পারো। নিচের প্রতিটা vague clause চাপ দিয়ে দেখো, কীভাবে verifiable হয়ে ওঠে।
এই টুকরোগুলো জোড়া দিলে একটা আসল CLAUDE.md এমন দেখতে হয় — commands, conventions, আর gotchas, প্রতিটা লাইন কাজের, ২০০ line-এর অনেক নিচে।
# 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 generatedLiving Contract
একবার লেখো, তারপর বড় করো।
CLAUDE.md একবার লিখে ফেলে দেওয়ার জিনিস না। /init দিয়ে একটা draft বানাও, তারপর সময়ের সাথে বাড়াও।
A living contract/init দিয়ে শুরু, সময়ে বাড়াও
CLAUDE.md একবার লিখে ফেলে দেওয়ার জিনিস না। /init দিয়ে একটা draft বানাও, তারপর বাড়াতে থাকো। নিয়মটা পরিষ্কার: Claude একই ভুল ২য় বার করলে — সেটা chat-এ ঠিক না করে file-এ একটা clause যোগ করো। /memory দিয়ে file গুলো দেখো/এডিটো; @import দিয়ে গুছাও। (নতুন auto memory feature Claude-কে নিজে থেকেও কিছু শিখে রাখতে দেয়।)
চ্যাটে ঠিক করলে শুধু এই session-এ কাজ হয়; পরের fresh session-এ একই ভুল ফেরে। File-এ clause দিলে সমস্যা একবারে শেষ। তোমার contract যত পরিণত হবে, Claude তত নির্ভরযোগ্য।
নিয়মটা মনে রাখো: Claude একই ভুল ২য় বার করলে chat-এ ঠিক কোরো না — file-এ একটা clause যোগ করো। তখন সমস্যাটা একবারে শেষ।
Check Your Understanding
ভুল হলে সমস্যা নেই — প্রতিটার ব্যাখ্যা আছে।
CLAUDE.md যত বড় আর বিস্তারিত, তত ভালো — সব নিয়ম ভরে দাও
CLAUDE.md-তে আমার code কী করে সব ব্যাখ্যা করে দিলে Claude ভালো বুঝবে
একবার /init চালিয়ে CLAUDE.md বানালেই কাজ শেষ
আমার personal preference (sandbox URL, পছন্দের test data) team-এর ./CLAUDE.md-তে দিই
Chat-এ একবার বলে দিলেই Claude মনে রাখবে — file-এ লেখার দরকার নেই
CLAUDE.md কখন পড়া হয়?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
এর মধ্যে কোনটা CLAUDE.md-তে রাখা উচিত?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
শুধু তোমার এই project-এর preference (team-এ share হবে না) — কোন file?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
কোন clause Claude বেশি নির্ভরযোগ্যভাবে মানবে?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
CLAUDE.md খুব বড় হয়ে গেলে কী হয়?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Project-এ একটা starter CLAUDE.md বানাতে কোন command?
ভুল হলেও সমস্যা নেই — প্রতিটা option-এর সাথে ব্যাখ্যা আছে।
Prove It To Yourself
চারটা takeaway মনে রাখো — Day 18-এ Claude Code আরও বাড়বে।
চারটা জিনিস মনে রাখো — 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 দিয়ে।
শব্দার্থ — পরে ফিরে দেখার জন্য
একনজরে সব 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-এ।
Sources consulted to author this lesson. Citation style is informal — follow the links if you want to dig deeper.
- How Claude remembers your project (Memory) — Anthropic — Claude Code docs (2026)
- Best practices for Claude Code — Anthropic — Claude Code docs (2026)
- CLAUDE.md Files and Memory Hierarchy — Claude Code Ultimate Guide (F. Bruniaux) (2026)
- Try it: /init in your own project — Anthropic (2026)
দুই বাক্যে নিজের ভাষায় লেখো
নিজের ভাষায় দুই বাক্যে লেখো — CLAUDE.md-এ কোনো একটা line রাখা উচিত কিনা বুঝতে কোন একটা প্রশ্ন জিজ্ঞেস করবে, আর একটা ভালো clause-এ কী কী থাকা দরকার (specific/imperative/verifiable-এর মধ্যে যেকোনো দুটো)।