monorepo-তে nested AGENTS.md কীভাবে সাজাবেন
একটি বড় root AGENTS.md কেন stale হয়ে যায় এবং কীভাবে service directory-ভিত্তিক nested layout agent-এর অপ্রয়োজনীয় context কমায়, তা জানুন।
monorepo-তে nested AGENTS.md বলতে কী বোঝায়
monorepo-তে nested AGENTS.md বলতে repository root-এ একটি ছোট file এবং প্রতিটি service directory-র ভিতরে আরও একটি file বোঝায়। Root file-এ সর্বত্র প্রযোজ্য কয়েকটি নিয়ম এবং অন্য file-গুলো কোথায় আছে তার একটি map থাকে। প্রতিটি service file-এ শুধু সংশ্লিষ্ট directory-র commands ও conventions থাকে। কোনো agent services/worker/queue.py সম্পাদনা করার সময় root file এবং worker file পড়ে। যে front end-এ সেটি কখনো কাজ করবে না, তার জন্য কোনো context ব্যয় করতে হয় না।
কিছু install করার দরকার নেই। AGENTS.md একটি convention। Upstream project-এ বিষয়টি স্পষ্টভাবে বলা হয়েছে:
AGENTS.md শুধু standard Markdown। আপনার পছন্দমতো heading ব্যবহার করুন; agent কেবল আপনার দেওয়া text parse করে।
এই কারণে কৌশলটি সঠিকভাবে শেখা মূল্যবান। Format আপনার অজান্তে পরিবর্তিত হবে না। সমস্যা হয় placement ও maintenance-এ, এবং দুটির দায়িত্বই আপনার।
একটি বড় root AGENTS.md কেন আর কার্যকর থাকে না?
একটি repository-এর root-এ থাকা 600-line-এর একটি AGENTS.md, যেখানে web app, background worker এবং Terraform directory রয়েছে, চারটি পৃথক কারণে ব্যর্থ হয়।
এটি পুরোনো হয়ে যায়, কারণ এর দায়িত্ব কারও নয়। apps/web-এ থাকা test script-এর নাম পরিবর্তন করা engineer apps/web-এর অধীনে থাকা file সম্পাদনা করছেন। সেই diff-এ root AGENTS.md নেই, তাই কোনো reviewer এই অসামঞ্জস্য দেখতে পান না। ছয় সপ্তাহ পরে file-টি এমন একটি build step বর্ণনা করে, যা আর নেই, এবং যিনি পরিবর্তনটি ঘটিয়েছেন তিনি ততদিনে তা ভুলে গেছেন।
প্রতিটি task-এ এটি context ব্যবহার করে। Agent আপনার অনুরোধ কী হবে তা জানার আগেই session-এর শুরুতে এই file-গুলো load করে। Claude Code-এর documentation-এ এর জন্য একটি নির্দিষ্ট সীমা দেওয়া আছে: "প্রতি CLAUDE.md file-এ 200 line-এর নিচে রাখুন। দীর্ঘ file বেশি context ব্যবহার করে এবং নির্দেশনা অনুসরণের হার কমায়।" Codex instruction file-গুলোর মোট আকার 32 KiB-এ পৌঁছালে সেগুলো merge করা বন্ধ করে; এটি হলো default project_doc_max_bytes। চারটি service-এর নির্দেশনা থাকা একটি root file প্রতিটি task-এ সেই budget-এর তিন-চতুর্থাংশ এমন service-এর জন্য ব্যবহার করে, যেগুলোর সঙ্গে task-টির কোনো সম্পর্ক নেই।
নির্দেশনাগুলো পরস্পরবিরোধী হতে শুরু করে। Web directory-এর জন্য pnpm test প্রয়োজন। Worker-এর জন্য pytest -q প্রয়োজন। একটি file-এ লিখলে প্রতিটি rule কেবল কিছু ক্ষেত্রে সঠিক থাকে, তাই কোনটি প্রযোজ্য তা agent-কে অনুমান করতে হয়। Claude Code-এর docs এই ফলাফল ব্যাখ্যা করে: "দুটি rule পরস্পরবিরোধী হলে Claude যেকোনো একটি স্বেচ্ছাচারীভাবে বেছে নিতে পারে।" প্রতি-directory file এই অনুমানের প্রয়োজন দূর করে, কারণ দুটি rule-এর মধ্যে কেবল একটি কখনও context-এ থাকে।
Code থেকেই agent যে তথ্য পড়তে পারে, file-টি সেসব তথ্যে ভরে যায়। যেমন directory tree, dependency list এবং প্রতিটি package কী করে তার summary। Claude Code-এর /doctor check ঠিক এই ধরনের তথ্য বাদ দেওয়ার জন্য রয়েছে। এটি "directory layout, dependency list এবং architecture overview-এর মতো codebase থেকে Claude নিজে নির্ণয় করতে পারে এমন content বাদ দেয়" এবং "pitfall, rationale ও tool default থেকে ভিন্ন convention" রেখে দেয়। কোনো line আদৌ file-এ থাকা উচিত কি না, তা যাচাই করার জন্য আমার জানা সবচেয়ে ভালো পরীক্ষা হলো এই বাক্যটি।
এজেন্ট কি root ফাইলটি পড়ে, নাকি শুধু সবচেয়ে কাছের ফাইলটি?
বেশিরভাগ মানুষ এই বিষয়টি ভুল বোঝেন। তাই ব্যাখ্যা করে বলার বদলে upstream convention-এর বক্তব্য উদ্ধৃত করা উপযোগী:
প্রতিটি package-এর ভেতরে আরেকটি AGENTS.md রাখুন। Agent-গুলো directory tree-তে সবচেয়ে কাছের ফাইলটি স্বয়ংক্রিয়ভাবে পড়ে। তাই সবচেয়ে কাছের ফাইলটির অগ্রাধিকার থাকে এবং প্রতিটি subproject নিজস্ব উপযোগী নির্দেশনা সরবরাহ করতে পারে।
Conflict-এর ক্ষেত্রে:
যে ফাইলটি সম্পাদিত ফাইলের সবচেয়ে কাছাকাছি থাকা AGENTS.md, সেটিই কার্যকর হয়; স্পষ্ট user chat prompt সবকিছুর উপর অগ্রাধিকার পায়।
"অগ্রাধিকার থাকে" কথাটি অনেকের কাছে এমন মনে হয় যে root ফাইলটি উপেক্ষা করা হয়। তা নয়। এই convention বাস্তবায়নকারী tools-এ repository root থেকে working directory পর্যন্ত path-এর প্রতিটি ফাইল পড়ে একত্র করা হয়। দুটি ফাইলে একই বিষয় নিয়ে ভিন্ন নির্দেশনা থাকলেই শুধু সবচেয়ে কাছের ফাইলটির নির্দেশনা কার্যকর হয়।
Codex এই প্রক্রিয়াটি স্পষ্টভাবে ব্যাখ্যা করে: "Codex root থেকে নিচের দিকে files একত্র করে এবং blank lines দিয়ে যুক্ত করে। আপনার বর্তমান directory-এর কাছের files আগের নির্দেশনার উপর অগ্রাধিকার পায়।" Claude Code-ও তার নিজস্ব file name-এর জন্য একই path অনুসরণ করে। Working directory-এর উপরের directory hierarchy-তে থাকা files "launch-এর সময় সম্পূর্ণভাবে load করা হয়", এবং "আবিষ্কৃত সব files একে অপরকে override না করে context-এ একত্র করা হয়।" Working directory-এর নিচের directories ভিন্নভাবে কাজ করে: Claude Code ওই files "Claude যখন সেই directories-এর files পড়ে, তখন" প্রয়োজন অনুযায়ী load করে।
এ থেকে দুটি ব্যবহারিক সিদ্ধান্ত পাওয়া যায়। Root file-টি repository-র প্রতিটি session-এর শুরুতে যুক্ত হয়। তাই সেখানে থাকা প্রতিটি line-কে এমন line হিসেবে বিবেচনা করুন, যার খরচ সপ্তাহে একশোবার দিতে হয়। কোনো per-directory file agent অন্য জায়গায় কাজ করার সময় পড়ে না। তাই সেখানে বিস্তারিত নির্দেশনা রাখা সাশ্রয়ী এবং উপযুক্ত।
এই আচরণটি August 2026-এ Codex এবং Claude Code-এর documentation মিলিয়ে যাচাই করা হয়েছে। Tools-গুলো convention-টি সামান্য ভিন্নভাবে বাস্তবায়ন করে এবং সময়ের সঙ্গে পরিবর্তিতও হয়। তাই আপনার team যে agent ব্যবহার করে, তার loading rules নিশ্চিত করে নিন।
তিনটি service-সহ একটি repository-এর কার্যকর বিন্যাস
repo/
AGENTS.md rules true everywhere, plus the map
apps/web/AGENTS.md TypeScript client, Vite, Vitest
services/worker/AGENTS.md Python queue consumer, pytest
infra/AGENTS.md Terraform and the deploy scriptsRoot file-টি ইচ্ছাকৃতভাবে সংক্ষিপ্ত। এতে কোথায় দেখতে হবে তা বলা থাকে এবং প্রতিটি directory-তে প্রযোজ্য নিয়মগুলোই শুধু থাকে।
# AGENTS.md
This is a monorepo. Each top-level directory ships its own AGENTS.md.
Read this file and the AGENTS.md nearest the code you are editing
before you change anything.
- `apps/web` browser client
- `services/worker` queue consumer
- `infra` Terraform and deploy scripts
## Rules for the whole repository
- The package manager is `pnpm`. `npm install` writes a second lockfile
that CI ignores, so the install you tested is not the install that ships.
- Any `generated/` directory is build output. Edit the schema in
`schemas/` and run `pnpm codegen` instead.
- `.env.local` holds real credentials. Do not read it and do not print it.
- If you change code in a directory, update that directory's AGENTS.md
in the same commit.প্রতিটি directory-এর file-এ বিস্তারিত নির্দেশনা থাকে। Directory-এর প্রয়োজন অনুযায়ী এটি যতটা দীর্ঘ দরকার ততটাই হতে পারে।
# apps/web
Browser client. Vite and React, TypeScript with `strict` on.
## Commands
- `pnpm dev` serves on port 5173.
- `pnpm test` runs Vitest once and exits.
- `pnpm typecheck` runs `tsc --noEmit`.
## Conventions
- One component per file under `src/components/`.
- All HTTP goes through `src/api/client.ts`. Do not call `fetch` directly,
because the client attaches the auth header and retries on 429.
## Traps
- `pnpm build` does not type check. Vite strips the types instead of
checking them, so a broken type still produces a green build.
Run `pnpm typecheck` as a separate step.Worker file-টির কাঠামো একই, তবে বিষয়বস্তু আলাদা: install command, pytest -q, consumer-কে কেন idempotent রাখতে হবে তার কারণ, এবং tests সফল হওয়ার আগে যে migration চালাতে হবে। Infra file-এ agent-এর ক্ষতিকর কাজ ঠেকানোর নিয়মগুলো লিখুন। কখনো terraform apply চালাবেন না। শুধু terraform plan চালিয়ে থামুন। ইতিমধ্যে configured থাকা state backend-এর নাম উল্লেখ করুন, যাতে agent নতুন backend initialize করার চেষ্টা না করে।
লক্ষ করুন, এই file-গুলোর কোনোটিতেই প্রতিটি service কী কাজে ব্যবহৃত হয় তার বর্ণনা নেই। সেটি মানুষের জন্য রাখা উচিত। Upstream-ও একই সীমা নির্ধারণ করে বলেছে, "README.md files are for humans: quick starts, project descriptions, and contribution guidelines"; অন্যদিকে AGENTS.md-তে থাকে "the extra, sometimes detailed context coding agents need: build steps, tests, and conventions." AGENTS.md এবং মানুষের জন্য লেখা README-এর বিভাজন এই সীমাটি বাক্য ধরে ব্যাখ্যা করে। আর কোডের কাঠামো এমন কেন, তা নথিবদ্ধ করা DESIGN.md তৃতীয় file-টি ব্যাখ্যা করে, যেখানে command নয়, সিদ্ধান্তের কারণ লেখা থাকে।
কোড পরিবর্তন হলে ফাইলটি কে আপডেট করবে?
একটি নিয়ম নির্ধারণ করুন এবং সেটি root file-এ লিখুন: কোনো directory-তে যে ব্যক্তি code পরিবর্তন করবেন, তিনি একই commit-এ ওই directory-এর AGENTS.md আপডেট করবেন।
এটি সাংস্কৃতিক কারণে নয়, একটি যান্ত্রিক কারণে কার্যকর হয়। প্রতি-directory file-টি code-এর সঙ্গে একই diff-এ থাকে। তাই pull request-এর reviewer দুটিই একসঙ্গে দেখেন। root file সবার, অর্থাৎ বাস্তবে কারও নয়। ফলে reviewer যে diff আগে থেকেই দেখছেন, সেটিতে root file কখনো থাকে না।
pull request-এ একটি check দিয়ে এই নিয়মটি কার্যকর করুন। এটি প্রতিটি পরিবর্তিত file-এর উপরে সবচেয়ে কাছের AGENTS.md খুঁজে বের করবে। এরপর দেখাবে, সেই AGENTS.md পরিবর্তন করা না হলে।
#!/usr/bin/env bash
# Warn when code changed but the nearest AGENTS.md above it did not.
changed=$(git diff --name-only origin/main...HEAD)
nearest_doc() {
d=$(dirname "$1")
while [ "$d" != "." ]; do
if [ -f "$d/AGENTS.md" ]; then echo "$d/AGENTS.md"; return; fi
d=$(dirname "$d")
done
echo "AGENTS.md"
}
printf '%s\n' "$changed" | while read -r f; do
[ -n "$f" ] || continue
case "$f" in AGENTS.md|*/AGENTS.md) continue ;; esac
doc=$(nearest_doc "$f")
printf '%s\n' "$changed" | grep -Fqx "$doc" && continue
echo "note: $f changed but $doc was not updated"
doneযে branch-এ docs পরিবর্তন না করেই API client পুনর্গঠন করা হয়েছিল, সেখানে output দেখতে এমন হবে:
note: apps/web/src/api/client.ts changed but apps/web/AGENTS.md was not updatedএটিকে failure না করে warning হিসেবে রাখুন। কঠোর gate দিলে মানুষ file-এ একটি ফাঁকা line যোগ করবে, যাতে CI সফল হয়। কোনো robot-এর নির্দেশ মানার জন্য সম্পাদিত file, কোনো file না থাকার চেয়েও কম মূল্যবান। warning reviewer-কে একটি প্রশ্ন করার সুযোগ দেয়। কার্যকর অংশটি আসলে এটিই।
কোনো AGENTS.md পুরোনো হয়ে গেছে কি না কীভাবে বুঝবেন?
আজই চালাতে পারেন এমন দুটি পরীক্ষা আছে। একটি লক্ষণ আপনি একটি session-এর মধ্যেই দেখতে পাবেন।
প্রতিটি ফাইলের বয়স এবং সেটি যে code-এর বর্ণনা দেয় তার বয়স তুলনা করুন। %cs commit date-টি YYYY-MM-DD হিসেবে দেখায়।
for f in $(git ls-files '*AGENTS.md'); do
d=$(dirname "$f")
printf '%s doc:%s code:%s\n' "$f" \
"$(git log -1 --format=%cs -- "$f")" \
"$(git log -1 --format=%cs -- "$d")"
doneapps/web/AGENTS.md doc:2026-02-11 code:2026-08-07
services/worker/AGENTS.md doc:2026-07-29 code:2026-08-09
infra/AGENTS.md doc:2026-08-01 code:2026-08-01code date-এর চেয়ে কোনো doc date ছয় মাস পিছিয়ে থাকলেই ফাইলটি ভুল, এমন নয়। এটি শুধু জানায় কোন ফাইলটি আগে পড়বেন। এক সেকেন্ডে করা একটি পরীক্ষার কাছ থেকে আপনার এটাই প্রয়োজন।
যে path আর বিদ্যমান নেই, সেগুলো খুঁজুন। Documentation নষ্ট হওয়ার একটি নির্দিষ্ট ধরন আছে: এটি মুছে ফেলা code-এর বর্ণনা দিতে থাকে। এই ফাইলগুলোর প্রতিটি path backtick-এর মধ্যে লেখা থাকে, তাই সেগুলো সহজেই বের করে পরীক্ষা করা যায়।
grep -o '`[^`]*`' apps/web/AGENTS.md | tr -d '`' | grep '/' | while read -r p; do
[ -e "$p" ] || [ -e "apps/web/$p" ] || echo "missing: $p"
doneএটির output পড়ুন। এটিকে CI-তে যুক্ত করার দরকার নেই। এটি src/**/*.ts-এর মতো glob এবং আপনি যে URL উদ্ধৃত করেছেন সেটিও flag করে, কারণ দুটির মধ্যেই slash আছে এবং disk-এ কোনোটিই file নয়।
একটি session-এর লক্ষণ। agent ফাইলটি পড়ে, ফাইলের নির্দেশনা অনুযায়ী src/api/client.ts খোলার চেষ্টা করে, এবং tool এই output দেয়:
No such file or directoryতাই agent যুক্তিসংগতভাবে নিজের fetch wrapper লেখে। পুরোনো ফাইলের আসল খরচ এটাই। agent আপনার documentation উপেক্ষা করে না। এটি documentation অনুসরণ করে তিন মাস আগে মুছে ফেলা একটি path-এ পৌঁছায় এবং আপনার কাছে ইতিমধ্যে থাকা code নতুন করে তৈরি করে। Ponytail-এর মতো একটি skill, যা agent-কে কাজ করা সবচেয়ে ছোট পরিবর্তনের মধ্যেই সীমাবদ্ধ রাখে, এই পুনর্নির্মাণের প্রবণতা কমায়। কিন্তু আপনার ফাইল কোনো helper-এর ভুল path উল্লেখ করলে এটি সেই helper খুঁজে পাবে না।
Claude Code কি AGENTS.md ফাইল পড়ে?
না। এটি স্পষ্টভাবে বলা দরকার, কারণ nested layout এই আচরণের ওপর নির্ভর করে। August 2026 অনুযায়ী documentation-এ বলা আছে: "Claude Code reads CLAUDE.md, not AGENTS.md." Pattern-টি এখনও কাজ করে। শুধু প্রতিটি AGENTS.md-এর পাশে একটি CLAUDE.md রাখতে হবে।
Shared line-এর ওপর tool-specific line যোগ করতে চাইলে import form ব্যবহার করুন। services/worker/CLAUDE.md-এ এটি রাখুন:
@AGENTS.md
## Claude Code
Use plan mode for changes under `services/worker/migrations/`.Tool-specific কিছু যোগ করার না থাকলে symlink form ব্যবহার করুন।
git ls-files '*AGENTS.md' | while read -r f; do
ln -s AGENTS.md "$(dirname "$f")/CLAUDE.md"
done
ls -l apps/web/CLAUDE.mdসফল হলে ln কোনো output দেখায় না। তাই listing পরীক্ষা করুন: apps/web/CLAUDE.md -> AGENTS.md। এরপর একটি session শুরু করে /context চালান। সেখানে loaded file-গুলো Memory files-এর অধীনে দেখা যাবে। Windows-এ symlink তৈরি করতে Administrator rights অথবা Developer Mode প্রয়োজন। তাই সেখানে @AGENTS.md import ব্যবহার করুন।
এখানে একটি বিষয় মনে রাখতে হবে। /compact-এর পরে root file disk থেকে আবার পড়া হয়, কিন্তু subdirectory-র nested file-গুলো পুনরায় inject করা হয় না। Agent পরেরবার ওই directory-র কোনো file পড়লে সেগুলো আবার load হয়। দীর্ঘ session-এর মাঝখানে কোনো per-directory rule প্রয়োগ বন্ধ হয়ে গেছে বলে মনে হলে সাধারণত এর কারণ এটিই। Directory-র যেকোনো file touch করলে rule-টি আবার load হয়।
অন্যান্য agent-কে AGENTS.md নির্দেশ করা Settings
Codex স্বাভাবিকভাবে AGENTS.md পড়ে। প্রতিটি level-এ এটি প্রথমে AGENTS.override.md খোঁজে। এর মাধ্যমে shared file সম্পাদনা না করেই একটি directory-তে local override দেওয়া যায়। Combined size 32 KiB-তে পৌঁছালে এটি merge করা বন্ধ করে। এটিই default project_doc_max_bytes। তাই root file ছোট রাখা আরও গুরুত্বপূর্ণ।
Aider .aider.conf.yml-এর মাধ্যমে এটি গ্রহণ করে। সেখানে line-টি হলো read: AGENTS.md।
Gemini CLI .gemini/settings.json-এর মাধ্যমে এটি গ্রহণ করে। এর জন্য { "context": { "fileName": "AGENTS.md" } } ব্যবহার করুন।
পুরোনো singular name ব্যবহার করা repository-গুলোর জন্য upstream documentation backward-compatible rename নথিভুক্ত করেছে: mv AGENT.md AGENTS.md && ln -s AGENTS.md AGENT.md।
খুব বড় monorepo-তে Claude Code-এর claudeMdExcludes setting path বা glob অনুযায়ী ancestor file বাদ দিতে পারে। আপনার directory-র ওপরে অন্য team-এর directory থাকলে এটি উপযোগী।
এটি agent memory বা skill থেকে কীভাবে ভিন্ন?
এই প্রক্রিয়াগুলো দেখতে একই রকম হলেও সম্পূর্ণ ভিন্নভাবে ব্যর্থ হয়। তাই আপনি কোনটি ব্যবহার করতে চাইছেন, তা নির্দিষ্টভাবে বোঝা গুরুত্বপূর্ণ।
AGENTS.md আপনি লিখবেন, git-এ commit করবেন, pull request-এ review হবে, এবং repository clone করা সবার জন্য এটি একই থাকবে। Agent memory agent নিজে লিখবে, repository-এর বাইরে সংরক্ষিত থাকবে, এবং একটি নির্দিষ্ট মেশিনে সীমাবদ্ধ থাকবে। Claude Code-এর documentation-ও একই পার্থক্য দেখায়: CLAUDE.md-তে আপনি লেখা "Instructions and rules" থাকে, auto memory-তে Claude-এর লেখা "Learnings and patterns" থাকে, এবং memory directory একাধিক মেশিনের মধ্যে share করা হয় না। পরীক্ষাটি সহজ। কোনো তথ্য fresh clone করা সহকর্মীর জন্যও সত্য হতে হলে সেটি memory-তে রাখা যাবে না। সেশনগুলোর মধ্যে agent memory কীভাবে স্থায়ী থাকে অংশে এই বিষয়টির প্রথম দিকটি ব্যাখ্যা করা হয়েছে।
Skill হলো তৃতীয় বিষয়। AGENTS.md প্রতিটি session-এ load হওয়া context; skill হলো প্রয়োজনের সময় load হওয়া একটি procedure। Claude Code docs-এ একটি কার্যকর নিয়ম দেওয়া আছে: "কোনো entry যদি multi-step procedure হয় বা codebase-এর একটি অংশের জন্যই প্রাসঙ্গিক হয়, তাহলে সেটিকে skill বা path-scoped rule-এ সরিয়ে নিন।" এই বাক্যের দ্বিতীয় অংশটি nested AGENTS.md দিয়ে সমাধান করা যায়। প্রথম অংশের জন্য agent skills ব্যবহার করুন। একই procedure একাধিক repository-তে প্রয়োজন হলে একই paragraph দশটি আলাদা AGENTS.md file-এ paste না করে একাধিক repository-তে skill share করুন।
Upstream-এ বলা হয়েছে, "at time of writing the main OpenAI repo has 88 AGENTS.md files"। এই সংখ্যাটিই পুরো যুক্তিটি স্পষ্ট করে। বড় repository-এর জন্য আরও বড় file প্রয়োজন হয় না। বরং আরও ছোট file প্রয়োজন হয়। প্রতিটি file যে code বর্ণনা করে, তার পাশে থাকবে এবং সর্বশেষ code পরিবর্তনকারী ব্যক্তি সেটির দায়িত্বে থাকবেন।
FAQ
একটি nested AGENTS.md কি root file-কে প্রতিস্থাপন করে, নাকি তার সঙ্গে যুক্ত হয়?
এটি root file-এর সঙ্গে যুক্ত হয়। Upstream-এ বলা হয়েছে, "the closest one takes precedence"—এটি conflict হলে কী ঘটে তা বোঝায়, কোন file load হয় তা নয়। Codex root থেকে নিচের দিকে file-গুলো "concatenates files from the root down, joining them with blank lines", আর Claude Code working directory থেকে ওপরের দিকে গিয়ে পাওয়া প্রতিটি file concatenate করে; file-গুলো একে অপরকে override করে না। একই বিষয় নিয়ে দুটি file ভিন্ন নির্দেশনা দিলে শুধু কাছের file-টির নির্দেশনা প্রাধান্য পায়। Shared rule একবার root-এ লিখুন। প্রতিটি directory-তে সেগুলো পুনরায় লিখবেন না।
root AGENTS.md কত বড় হওয়া উচিত?
এতটাই ছোট হওয়া উচিত, যাতে repository-র প্রতিটি request-এর ওপরে file-টি যুক্ত হলেও আপনার আপত্তি না থাকে। কারণ বাস্তবে সেটিই ঘটে। Claude Code-এর documentation-এ প্রতি file 200 lines-এর কম রাখার পরামর্শ দেওয়া হয়েছে এবং সতর্ক করা হয়েছে যে বড় file "reduce adherence"। Codex default হিসেবে মোট 32 KiB পর্যন্ত instruction file merge করে। আপনার root file-এ যদি চারটি service-এর documentation থাকে, তাহলে যেকোনো একটি task-এর জন্য এর বেশির ভাগই অপ্রয়োজনীয়। বিস্তারিত বিষয় per-directory file-এ সরিয়ে নিন এবং root-এ একটি map রেখে দিন।
এই file-গুলো কীভাবে stale হওয়া থেকে রোধ করব?
root file-এ একটি rule রাখুন: কোনো directory-র code পরিবর্তন করলে একই commit-এ সেই directory-র AGENTS.md-ও update করতে হবে। Code-এর পাশে file রাখলে rule কার্যকর থাকে, কারণ পরিবর্তনটি তখন মানুষ যে pull request diff পড়ছে, তার একই অংশে আসে। একটি CI warning যোগ করুন, যা প্রতিটি changed path-কে তার ওপরে থাকা nearest AGENTS.md-এর সঙ্গে map করে। নিয়মিত প্রতিটি file-এর git log -1 --format=%cs-এর output, সেই file যে directory document করে সেখানে একই command চালানোর output-এর সঙ্গে তুলনা করুন।
Claude Code কি AGENTS.md file পড়ে?
না। August 2026 অনুযায়ী documentation-এ বলা আছে, "Claude Code reads CLAUDE.md, not AGENTS.md." একই directory-তে CLAUDE.md তৈরি করুন এবং প্রথম line-এ @AGENTS.md রাখুন। এতে shared file load হবে এবং নিচে Claude-specific instruction যোগ করা যাবে। অতিরিক্ত কিছু যোগ করার না থাকলে ln -s AGENTS.md CLAUDE.md দিয়ে তৈরি symlink কাজ করে। তবে Windows-এ এর জন্য Administrator rights বা Developer Mode প্রয়োজন। একটি session-এ /context চালিয়ে নিশ্চিত করুন যে file-টি Memory files-এর অধীনে দেখা যাচ্ছে।
কোনো rule শুধু মাঝে মাঝে প্রয়োজন হলে সেটি কোথায় রাখব?
AGENTS.md-এ নয়। এই file প্রতিটি session-এ load হয়। তাই এর প্রতিটি line আপনার লেখা প্রকৃত request-এর সঙ্গে attention-এর জন্য প্রতিযোগিতা করে। মাঝে মাঝে প্রয়োজন হয় এমন কয়েক ধাপের procedure skill-এ রাখুন। এটি প্রয়োজন হলে load হবে। একটি directory-তে প্রযোজ্য rule সেই directory-র AGENTS.md-এ রাখুন। directory tree বা dependency list-এর মতো agent সরাসরি code থেকে পড়তে পারে এমন fact কোনো file-এ রাখার দরকার নেই।