monorepo-তে nested AGENTS.md কীভাবে সাজাবেন
একটি বড় root AGENTS.md কেন stale হয়ে যায় তা জানুন। service directory অনুযায়ী nested layout সাজিয়ে agent-এর অপ্রয়োজনীয় context কমানোর ব্যবহারিক পদ্ধতি দেখুন।
monorepo-তে nested AGENTS.md-এর অর্থ
monorepo-তে nested AGENTS.md বলতে repository root-এ একটি ছোট ফাইল এবং প্রতিটি service directory-র ভিতরে আরও একটি ফাইল বোঝায়। root 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-লাইন AGENTS.md, যেখানে একটি web app, একটি background worker এবং একটি Terraform directory রয়েছে, চারটি পৃথক সমস্যায় ব্যর্থ হয়।
এটি পুরোনো হয়ে যায়, কারণ এর মালিক কেউ নয়। apps/web-এ কোনো test script-এর নাম পরিবর্তন করা engineer apps/web-এর অধীনে থাকা ফাইল সম্পাদনা করছেন। সেই diff-এ root AGENTS.md নেই, তাই কোনো reviewer এই অমিল দেখতে পান না। ছয় সপ্তাহ পরে ফাইলটি এমন একটি build step বর্ণনা করে, যা আর নেই। আর যে ব্যক্তি পরিবর্তনটি করেছেন, তিনি তখন তা ভুলে গেছেন।
প্রতিটি task-এ এটি context খরচ করে। Agent আপনার অনুরোধ কী হবে তা জানার আগেই session-এর শুরুতে এই ফাইলগুলো load করে। Claude Code-এর documentation-এ এর একটি নির্দিষ্ট সীমা দেওয়া আছে: "প্রতি CLAUDE.md file-এর জন্য 200 লাইনের নিচে রাখুন। বড় file বেশি context খরচ করে এবং instruction অনুসরণ কমিয়ে দেয়।" Codex instruction file-গুলোর সম্মিলিত আকার 32 KiB-এ পৌঁছালে সেগুলো merge করা বন্ধ করে; এটি default project_doc_max_bytes। চারটি service নথিবদ্ধ করা একটি root file প্রতিটি task-এ সেই budget-এর একটি অংশ এমন তিনটি service-এর জন্য খরচ করে, যেগুলোর কোনোটি task-টির সঙ্গে সম্পর্কিত নয়।
Instruction-গুলো পরস্পরের সঙ্গে বিরোধ করতে শুরু করে। Web directory-তে pnpm test প্রয়োজন। Worker-এ pytest -q প্রয়োজন। একই file-এ লিখলে প্রতিটি rule কেবল কিছু ক্ষেত্রে সঠিক হয়। তাই কোনটি প্রযোজ্য, agent-কে অনুমান করতে হয়। Claude Code-এর docs এই ফলাফলটি এভাবে বর্ণনা করে: "দুটি rule পরস্পরের বিরোধী হলে Claude যেকোনো একটি ইচ্ছামতো বেছে নিতে পারে।" Per-directory file এই অনুমানের প্রয়োজন সরিয়ে দেয়, কারণ একই সময়ে দুটি rule-এর কেবল একটিই context-এ থাকে। আপনি যে rule স্পষ্টভাবে লিখেছেন বলে নিশ্চিত, সেটি তবুও বাদ পড়লে wording চতুর্থবার নতুন করে লেখার বদলে কেন কোনো instruction কার্যকর হয় না তার কারণগুলো খুঁজে দেখা বেশি কার্যকর।
Agent code থেকে পড়ে নিতে পারে এমন তথ্যেও এটি ভরে যায়। একটি directory tree, dependency list, প্রতিটি package কী করে তার summary। Claude Code-এর /doctor check ঠিক এই ধরনের তথ্য বাদ দেওয়ার জন্য রয়েছে। এটি "codebase থেকে Claude নিজে নির্ণয় করতে পারে এমন content, যেমন directory layout, dependency list এবং architecture overview বাদ দেয়" এবং "tool default থেকে ভিন্ন pitfalls, rationale ও convention রেখে দেয়।" কোনো line আদৌ file-এ থাকা উচিত কি না যাচাই করার জন্য আমার জানা সবচেয়ে ভালো test হলো এই বাক্যটি।
এজেন্ট কি root file পড়ে, নাকি শুধু সবচেয়ে কাছের file পড়ে?
এখানেই অধিকাংশ মানুষ model-টির আচরণ ভুল বোঝেন। তাই upstream convention-টি paraphrase না করে উদ্ধৃত করা উপযোগী:
প্রতিটি package-এর ভেতরে আরেকটি AGENTS.md রাখুন। Agent-গুলো directory tree-তে সবচেয়ে কাছের file স্বয়ংক্রিয়ভাবে পড়ে। তাই সবচেয়ে কাছের file অগ্রাধিকার পায় এবং প্রতিটি subproject নিজস্ব উপযোগী নির্দেশনা সরবরাহ করতে পারে।
এবং conflict সম্পর্কে:
সম্পাদিত file-এর সবচেয়ে কাছের AGENTS.md কার্যকর হয়; explicit user chat prompt সবকিছুকে override করে।
অনেকের কাছে "Takes precedence" কথাটির অর্থ দাঁড়ায়, "root file উপেক্ষা করা হয়"। তা নয়। এই convention বাস্তবায়নকারী tool-গুলোতে repository root থেকে working directory পর্যন্ত path-এর প্রতিটি file পড়ে একত্র করা হয়। দুটি file একই বিষয় সম্পর্কে ভিন্ন নির্দেশনা দিলে শুধু সেই ক্ষেত্রে সবচেয়ে কাছের file-এর নির্দেশনা কার্যকর হয়।
Codex এই প্রক্রিয়াটি স্পষ্টভাবে ব্যাখ্যা করে: "Codex root থেকে নিচের দিকে file-গুলো concatenate করে এবং blank line দিয়ে যুক্ত করে। আপনার current directory-এর কাছের file আগের নির্দেশনাকে override করে।" Claude Code নিজের file name-এর ক্ষেত্রেও একই path অনুসরণ করে। Working directory-এর উপরের directory hierarchy-র file-গুলো "launch-এর সময় সম্পূর্ণভাবে load করা হয়", এবং "আবিষ্কৃত সব file একে অপরকে override না করে context-এ concatenate করা হয়।"
এখান থেকে দুটি ব্যবহারিক বিষয় বোঝা যায়। root file repository-র প্রতিটি session-এ prefix হিসেবে যুক্ত হয়। তাই সেখানে প্রতিটি line এমন একটি line হিসেবে বিবেচনা করুন, যার খরচ সপ্তাহে একশোবার দিতে হয়। Per-directory file agent অন্য কোথাও কাজ করলে পড়া হয় না। তাই সেখানে বিস্তারিত নির্দেশনা রাখা সাশ্রয়ী এবং উপযুক্ত।
এই আচরণটি August 2026-এ Codex এবং Claude Code-এর documentation-এর সঙ্গে মিলিয়ে যাচাই করা হয়েছিল। Tool-গুলো convention-টি কিছুটা ভিন্নভাবে বাস্তবায়ন করে এবং সময়ের সঙ্গে পরিবর্তিতও হয়। তাই আপনার team যে agent ব্যবহার করে, তার loading rule নিশ্চিত করে নিন।
তিনটি 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-এর প্রয়োজন অনুযায়ী file-টি যত দীর্ঘ দরকার হতে পারে।
# 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 pass করার আগে যে migration চালাতে হবে। Infra file-এ এমন নিয়ম লিখবেন, যা কোনো agent-কে ক্ষতিকর কাজ করা থেকে আটকায়। কখনো terraform apply চালাবেন না। শুধু terraform plan চালিয়ে থামুন। ইতিমধ্যে configured থাকা state backend-এর নাম উল্লেখ করুন, যাতে agent নতুন backend initialise করার চেষ্টা না করে।
লক্ষ করুন, এই 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-টি ব্যাখ্যা করে, যেখানে commands-এর বদলে সিদ্ধান্তগুলোর কারণ লেখা থাকে।
কোড পরিবর্তন হলে ফাইলটি কে আপডেট করবে?
একটি নিয়ম রাখুন, এবং সেটি root file-এ লিখুন: যে ব্যক্তি কোনো directory-তে code পরিবর্তন করবেন, তাঁকেই একই commit-এ ওই directory-এর AGENTS.md আপডেট করতে হবে।
এটি সাংস্কৃতিক কারণে নয়, একটি যান্ত্রিক কারণে কার্যকর। প্রতি-directory file-টি code-এর সঙ্গে একই diff-এ থাকে। ফলে pull request-এর reviewer দুটিই একসঙ্গে দেখতে পান। একটি root file সবার, তাই কার্যত কারও নয়। কেউ যে diff আগে থেকেই পড়ছেন, সেটিতে এটি সাধারণত থাকে না।
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-এর তারিখ 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-এর তারিখের চেয়ে documentation-এর তারিখ ছয় মাস পুরোনো হলেই ফাইলটি ভুল, এমন প্রমাণ হয় না। তবে কোন ফাইলটি আগে পড়বেন তা বোঝা যায়। এক সেকেন্ডে করা একটি পরীক্ষার জন্য এটিই যথেষ্ট।
যে 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"
doneOutput পড়ে দেখুন। এই পরীক্ষাটি CI-তে যুক্ত করবেন না। এটি src/**/*.ts-এর মতো glob এবং আপনি উদ্ধৃত করা যেকোনো URL-ও flag করে, কারণ উভয়ের মধ্যেই slash আছে এবং disk-এ কোনোটিই file নয়।
Session-এর মধ্যে দেখা লক্ষণ। Agent ফাইলটি পড়ে। ফাইলে নির্দেশ দেওয়া থাকায় এটি src/api/client.ts খোলার চেষ্টা করে। Tool তখন ফেরত দেয়:
No such file or directoryতাই agent যুক্তিসংগতভাবে নিজের fetch wrapper লিখে। পুরোনো ফাইলের প্রকৃত খরচ এখানেই। Agent আপনার documentation উপেক্ষা করে না। এটি documentation অনুসরণ করে, তিন মাস আগে মুছে ফেলা একটি path-এ পৌঁছায়, এবং আপনার কাছে আগে থেকেই থাকা code আবার তৈরি করে। Ponytail-এর মতো একটি skill, যা agent-কে কার্যকর সবচেয়ে ছোট পরিবর্তনের মধ্যে সীমাবদ্ধ রাখে, এই পুনর্নির্মাণের প্রবণতা কমায়। কিন্তু আপনার ফাইলে ভুল 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 চালান। লোড হওয়া ফাইলগুলো Memory files-এর অধীনে দেখা যাবে। Windows-এ symlink তৈরি করতে Administrator অধিকার বা Developer Mode প্রয়োজন। তাই সেখানে @AGENTS.md import ব্যবহার করুন।
এখানে একটি বিষয় মনে রাখতে হবে। /compact-এর পরে root file disk থেকে আবার পড়া হয়। কিন্তু subdirectory-র nested file পুনরায় inject করা হয় না। Agent ওই directory-র কোনো file পরেরবার পড়লে সেগুলো আবার লোড হয়। দীর্ঘ session-এর মাঝখানে কোনো per-directory rule প্রয়োগ বন্ধ হয়ে গেলে সাধারণত এটাই কারণ। Directory-র যেকোনো file-এ touch করলে rule-টি আবার লোড হয়।
AGENTS.md ফাইলের দিকে অন্য agent-গুলোকে নির্দেশ করে এমন Settings
Codex স্বাভাবিকভাবেই AGENTS.md পড়ে। প্রতিটি level-এ এটি প্রথমে AGENTS.override.md খোঁজে। ফলে shared file সম্পাদনা না করেই একটি directory-র জন্য local override নির্ধারণ করা যায়। সম্মিলিত আকার 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 একটি 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-তে রাখা যাবে না। session-এর মধ্যে agent memory কীভাবে স্থায়ী থাকে অংশে এই বিষয়টির প্রথম দিকটি ব্যাখ্যা করা হয়েছে।
Skill হলো তৃতীয় বিষয়। AGENTS.md প্রতিটি session-এ load হওয়া context; skill হলো প্রয়োজনের সময় load হওয়া procedure। Claude Code-এর documentation-এ একটি কার্যকর নিয়ম দেওয়া আছে: “কোনো entry যদি multi-step procedure হয় বা codebase-এর কেবল একটি অংশের জন্য প্রযোজ্য হয়, তাহলে সেটিকে skill অথবা path-scoped rule-এ সরান।” এই বাক্যের দ্বিতীয় অংশের সমস্যাই nested AGENTS.md সমাধান করে। প্রথম অংশের জন্য agent skills ব্যবহার করা হয়। একই procedure একাধিক repository-তে প্রয়োজন হলে, একই paragraph দশটি আলাদা AGENTS.md ফাইলে paste না করে একাধিক repo-তে skill share করুন।
Upstream-এ বলা হয়েছে, “লেখার সময় মূল OpenAI repo-তে 88টি AGENTS.md file রয়েছে।” এই সংখ্যাটিই পুরো যুক্তিটি স্পষ্ট করে। বড় repository-এর জন্য আরও বড় file দরকার নেই। দরকার আরও বেশি ছোট file। প্রতিটি file-কে তার বর্ণিত code-এর পাশে রাখতে হবে এবং যে ব্যক্তি সর্বশেষ সেই code পরিবর্তন করেছেন, fileটির ownership তার হওয়া উচিত।
FAQ
একটি nested AGENTS.md কি root file প্রতিস্থাপন করে, নাকি তার সঙ্গে যুক্ত হয়?
এটি root file-এর সঙ্গে যুক্ত হয়। Upstream-এ বলা হয়েছে, “সবচেয়ে কাছের file অগ্রাধিকার পায়”—এটি conflict হলে কী ঘটে তা বোঝায়, কোন file load হয় তা নয়। Codex root থেকে নিচের দিকে file-গুলো একত্র করে এবং blank line দিয়ে যুক্ত করে। Claude Code-ও file override না করে working directory থেকে উপরের দিকে হাঁটার সময় পাওয়া প্রতিটি file একত্র করে। দুটি file একই বিষয় সম্পর্কে ভিন্ন নির্দেশনা দিলে শুধু সেই ক্ষেত্রে কাছের file-এর নির্দেশনা কার্যকর হয়। Shared rule একবার root-এ লিখুন। প্রতিটি directory-তে তা পুনরাবৃত্তি করবেন না।
root AGENTS.md কত বড় হওয়া উচিত?
এত ছোট হওয়া উচিত, যাতে repository-তে আপনার করা প্রতিটি request-এর শুরুতে এটি বসানো হলেও আপনার আপত্তি না থাকে। কারণ বাস্তবে সেটিই ঘটে। Claude Code-এর documentation প্রতি file 200 lines-এর কম রাখার পরামর্শ দেয় এবং সতর্ক করে যে বড় file “নির্দেশনা অনুসরণ কমিয়ে দেয়”। Codex default হিসেবে মোট 32 KiB পর্যন্ত instruction file একত্র করে। আপনার root file-এ যদি চারটি service-এর documentation থাকে, তবে যেকোনো একটি task-এর জন্য এর বেশিরভাগই অপ্রয়োজনীয়। বিস্তারিত per-directory file-এ সরিয়ে নিন এবং root-এ একটি map রেখে দিন।
এই file-গুলোকে stale হওয়া থেকে কীভাবে আটকাব?
root file-এ একটি rule রাখুন: কোনো directory-তে code পরিবর্তন করলে সংশ্লিষ্ট ব্যক্তি একই commit-এ ওই directory-এর AGENTS.md আপডেট করবেন। Code-এর পাশে file রাখলে rule কার্যকর থাকে, কারণ পরিবর্তনটি সেই pull request diff-এই আসে যা একজন মানুষ আগে থেকেই review করছেন। একটি CI warning যোগ করুন, যা প্রতিটি পরিবর্তিত path-কে তার উপরের সবচেয়ে কাছের AGENTS.md-এর সঙ্গে map করে। মাঝে মাঝে প্রতিটি file-এর জন্য git log -1 --format=%cs চালানোর ফল সেই file যে directory document করে, সেখানে একই command চালানোর ফলের সঙ্গে তুলনা করুন।
Claude Code কি AGENTS.md file পড়ে?
না। August 2026 অনুযায়ী documentation-এ বলা হয়েছে, “Claude Code CLAUDE.md পড়ে, AGENTS.md নয়।” একই directory-তে @AGENTS.md প্রথম line-এ রেখে একটি CLAUDE.md তৈরি করুন। এতে shared file load হবে এবং নিচে Claude-specific instruction যোগ করা যাবে। অতিরিক্ত কিছু যোগ করার না থাকলে ln -s AGENTS.md CLAUDE.md দিয়ে তৈরি symlink কাজ করে। তবে Windows-এ এর জন্য Administrator rights বা Developer Mode প্রয়োজন। একটি session-এ /context চালিয়ে Memory files-এর অধীনে file-টি দেখা যাচ্ছে কি না নিশ্চিত করুন।
কোনো rule যদি শুধু মাঝে মাঝে প্রযোজ্য হয়, সেটি কোথায় রাখব?
AGENTS.md-তে নয়। এই file প্রতিটি session-এ load হয়। ফলে এর প্রতিটি line আপনি যে request লিখেছেন, তার সঙ্গে attention-এর জন্য প্রতিযোগিতা করে। মাঝে মাঝে প্রয়োজন হয় এমন কয়েকটি ধাপের procedure skill-এ রাখা উচিত। এটি প্রয়োজন হলে load হয়। শুধু একটি directory-তে প্রযোজ্য rule সেই directory-এর AGENTS.md-তে রাখুন। Agent code থেকে সরাসরি পড়তে পারে এমন তথ্য, যেমন directory tree বা dependency list, কোনো জায়গাতেই রাখার দরকার নেই।