पिछले हफ्ते मैंने बीमारी diagnose की: छह AI coding tools, छह proprietary config formats, zero interoperability। CLAUDE.md Cursor को दिखता नहीं। .cursor/rules Copilot के लिए बेकार। हफ्तों की team intelligence उस vendor के parser में कैद, जो बस उसे पढ़ सकता है।
उस piece पर हर response ने माना कि lock-in असली है — और फिर वही सवाल पूछा: "तो मैं करूँ क्या?" Fair enough। Hostage situation diagnose करना बिना rescue plan के — वो commentary है, solution नहीं। ये रहा rescue plan।
"समझदारी से चुनो" अब काम नहीं करता
पिछले एक हफ्ते में ही ज़मीन तीन बार खिसकी। GitHub ने 20 अप्रैल को सारे individual Copilot signups freeze कर दिए क्योंकि agentic compute ने flat subscription model की बैंड बजा दी — VP of Product Joe Binder ने खुद माना कि "agentic workflows have fundamentally changed Copilot's compute demands." 15 अप्रैल को Zed ने parallel subagents ship किए और एक universal LLM gateway दिया। 14 अप्रैल को Anthropic ने Claude Code को desktop app में बदल डाला cloud-triggered Routines के साथ। OpenAI ने 15 अप्रैल को अपना Agents SDK update किया — sandboxed execution और MCP integrations के साथ। Tools हर हफ्ते बदलते हैं। तुम्हारे rules उस tool में बंधक नहीं रहने चाहिए जो तुमने छह महीने पहले चुना था।
Problem तो तुम जानते हो। ये guide तुम्हें एक working solution देती है जो आज ही commit कर सकते हो।
Fix: एक canonical file, पाँच vendor copies
Concept इतना simple है कि गुस्सा आए। एक source-of-truth rules file रखो vendor-neutral directory में। Shell script से हर vendor format में sync करो। Vendor files को directly कभी edit मत करो।
Step 1: .ai/rules.md बनाओ
ऐसा directory name चुनो जो किसी vendor ने claim नहीं किया है। .ai/ बढ़िया रहेगा।
.ai/
├── rules.md # Canonical project rules
├── architecture.md # System design context
├── patterns.md # Code conventions
└── sync.sh # वो script जो तुम्हें आज़ाद करेगा
तुम्हारी rules.md सीधी-सादी Markdown है:
---
project: my-app
lang: [typescript, python]
updated: 2026-04-21
---
# Project Rules
## Code Style
- Strict TypeScript. No `any`. Ever.
- Python: Black formatter, 88-char lines.
- All functions get docstrings. No exceptions.
## Architecture
- Monorepo: apps/ for services, packages/ for shared libs.
- API routes in `src/routes/`, logic in `src/services/`.
- Never import across apps directly. Use packages.
## Testing
- Unit tests co-located: `foo.ts` → `foo.test.ts`.
- Integration tests in `__tests__/integration/`.
- 80% branch coverage minimum on services/.
## Deployment
- Main branch auto-deploys to staging.
- Production: manual approval + passing E2E.
- Env vars in Vault, never in .env files.
## Gotchas
- Payments service uses legacy Stripe v2 client. Don't refactor — vendor contract.
- GraphQL types generate at build time. Run `make codegen` after schema changes.
Source of truth। कोई भी tool पढ़ सकता है। कोई भी इंसान पढ़ सकता है। कोई vendor magic नहीं, बस Markdown।
Step 2: Sync script
#!/usr/bin/env bash
set -euo pipefail
CANONICAL=".ai/rules.md"
[ ! -f "$CANONICAL" ] && echo "No ${CANONICAL} found." && exit 1
HEADER="# Auto-generated from .ai/rules.md — do not edit directly"
BODY=$(printf '%s\n\n%s' "$HEADER" "$(cat "$CANONICAL")")
echo "$BODY" > CLAUDE.md # Claude Code
mkdir -p .cursor && echo "$BODY" > .cursor/rules # Cursor
mkdir -p .github && echo "$BODY" > .github/copilot-instructions.md # GitHub Copilot
echo "$BODY" > GEMINI.md # Gemini
mkdir -p .windsurf && echo "$BODY" > .windsurf/rules # Windsurf
echo "Synced to 5 vendor configs."
बीस lines। पाँच vendors। एक source। हर edit के बाद चलाओ। पूरा trick यही है।
Step 3: Automate करो क्योंकि तुम याद नहीं रखोगे
तुम खुद को जानते हो। Pre-commit hook लगाओ:
#!/usr/bin/env bash
# .git/hooks/pre-commit (or husky / lefthook)
if git diff --cached --name-only | grep -q "^\.ai/"; then
echo "Changes in .ai/ — syncing vendor configs..."
bash .ai/sync.sh
git add CLAUDE.md .cursor/rules .github/copilot-instructions.md \
GEMINI.md .windsurf/rules
fi
Canonical file edit करो, commit करो, vendor copies अपने आप update हो जाएंगी। # Auto-generated header teammates को बता देता है कि generated files से दूर रहो।
Step 4: Architecture context
सिर्फ rules काफ़ी नहीं। AI tools architecture docs और component maps भी खाते हैं। Same pattern — .ai/ में रखो, sync के वक़्त concatenate करो:
<!-- .ai/architecture.md -->
# System Architecture
## Services
- **api-gateway**: Express.js — auth + routing
- **user-service**: Python/FastAPI — owns user data
- **payments**: Node.js — Stripe integration (legacy v2)
- **notifications**: Go — async via SQS
## Data Flow
Requests → api-gateway → service → own DB.
Cross-service: SQS events only. Never direct HTTP.
sync.sh को extend करो — rules.md + architecture.md + patterns.md concatenate करो। Claude Code multiple context files natively handle करता है; जो tools नहीं करते, उनके लिए एक बड़ी file काम करती है।
जो portable नहीं बना सकते
यहाँ vendors अपना lock-in कमाते हैं, और यहाँ मैं pretend करना बंद करता हूँ कि ये सब कुछ fix कर देता है।
Agent runtime configs. Claude Code की Routines — cloud agents जो schedules या GitHub events से trigger होते हैं — इनका Cursor में कोई equivalent नहीं। Cursor का parallel agent orchestration Zed के subagents से बिल्कुल अलग काम करता है। ये runtime behaviors हैं, static context नहीं। कोई config file इन्हें capture नहीं कर सकती क्योंकि ये config हैं ही नहीं। ये product features हैं जो तुम किराए पर ले रहे हो।
Accumulated memory. Claude Code time के साथ MEMORY.md build करता है — past decisions, mistakes, learned patterns का log। Knowledge जो AI use के दौरान generate करता है, कुछ ऐसा नहीं जो तुम लिखते हो। इसे sync नहीं कर सकते क्योंकि जब तक AI बनाए नहीं, ये exist ही नहीं करता। Tool switch करो, memory गई। ठीक वैसे जैसे therapist बदलो और session one से शुरू करो — बस ये therapist तुम्हारा नाम भी भूल गया।
Model-tuned wording. "हमेशा descriptive variable names use करो" हर जगह काम करता है। लेकिन अगर तुमने हफ्तों लगाए हैं rules को tune करने में — कि Claude ambiguity कैसे handle करता है, GPT ज़रूरत से ज़्यादा abstract कैसे करता है — तो वो nuances port नहीं होंगी। Different models, different quirks, different failure modes।
Portable layer तुम्हारे project पर AI tool को useful बनाने वाली चीज़ों का करीब 80% cover करती है। बाकी 20% genuinely vendor-specific है। Boundary जानना ज़्यादा ज़रूरी है बजाय इसके कि pretend करो कि boundary exist ही नहीं करती।
CI: किसी पर भरोसा मत करो, ख़ासकर ख़ुद पर
Apni pipeline में drift detection लगाओ:
# .github/workflows/ai-rules-check.yml
name: AI Rules Sync Check
on: [pull_request]
jobs:
check-sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Verify vendor configs match source
run: |
bash .ai/sync.sh
if ! git diff --quiet; then
echo "Vendor configs drifted from .ai/rules.md"
git diff --stat
exit 1
fi
किसी ने CLAUDE.md हाथ से edit कर दिया? CI PR को मार देगी। Drift ख़त्म। एक machine जिसे तुम्हारी feelings की परवाह नहीं और तुम्हारी deadline की भी नहीं — वो compliance enforce करती है।
कोई vendor ये तुम्हारे लिए क्यों नहीं बनाएगा
MCP ने tool connections के लिए universal protocol दिया। Project context के लिए किसी ने ऐसा नहीं किया। कोई ai-rules.json standard नहीं, कोई interoperability spec नहीं, कोई working group नहीं। हर vendor को incompatibility से फ़ायदा होता है — accidental lock-in जिसे maintain करने में कुछ नहीं लगता और retention में pay करता है।
JetBrains ने अप्रैल 2026 में 10,000+ developers का survey किया और पाया कि Claude Code 91% satisfaction पर बैठा है +54 NPS के साथ। Impressive numbers जो sunk cost उतना ही measure करते हैं जितना quality। जिन teams के repos में पचास CLAUDE.md files हैं, वो switch नहीं करतीं। इसलिए नहीं कि Claude irreplaceable है, बल्कि इसलिए कि migration math इतना brutal है कि बातचीत शुरू होने से पहले ही ख़त्म हो जाती है।
तुम्हारी .ai/rules.md उस math को "दो हफ्ते manual rewriting" से "script चलाओ, diff check करो" में बदल देती है। ये सब कुछ port नहीं करेगी। वो 20% — memory, runtime behaviors, model-specific tuning — उसमें असली मेहनत लगेगी। लेकिन "choice से locked in" और "लापरवाही से locked in" — इन दोनों में फ़र्क़ है।
Tools नहीं चाहते कि तुम ये बनाओ। रोकते भी नहीं। बस इस पर भरोसा करते हैं कि तुम तकलीफ़ नहीं उठाओगे।
उठाओ।



