۳۰۰۰+ ساعت وایب کدینگ؛ ستاپ من رو کپی نکنید
بعد از بیشتر از ۳۰۰۰ ساعت کار با Coding Agentها، چیزی که فهمیدم اینه که مدل، هارنس، اسکیل و MCP مهمن؛ ولی چیزی که واقعاً کیفیت خروجی رو تعیین میکنه تخصص و Workflow خود شماست.

۳۰۰۰+ ساعت وایب کدینگ؛ ستاپ من رو کپی نکنید
۲۵ شهریور ۱۴۰۵
سلام سلام!
این یکی قراره یه کم شخصیتر باشه.
بیشتر از ۳۰۰۰ ساعت از وقتی که تقریباً جدی رفتم توی داستان AI Coding میگذره.
مدل عوض کردم.
Harness عوض کردم.
Skill ساختم.
Skill پاک کردم.
MCP نصب کردم.
MCP پاک کردم :))
Agent Team ساختم.
Workflowهایی ساختم که فکر میکردم شاهکار مهندسیان و دو روز بعد فهمیدم برای عوض کردن رنگ یه Button دارن هفت تا Agent Spawn میکنن.
یه عالمه Token سوزوندم.
یه عالمه کد خوب تحویل گرفتم.
یه عالمه کد هم تحویل گرفتم که در ظاهر خیلی قشنگ بود ولی اگر پنج دقیقه بیشتر نگاهش میکردی میفهمیدی باید مستقیم بره تو سطل آشغال.
و اگر بخوام کل این مقاله رو همین اول توی یه جمله خلاصه کنم:
ستاپ من رو کپی نکنید.
جدی میگم.
ازش ایده بگیرید.
قسمتهاش رو بدزدید.
Toolهایی که به دردتون میخوره بردارید.
ولی اینکه Config یه نفر رو خطبهخط بردارید و انتظار داشته باشید برای شما هم بهترین Workflow دنیا بشه، به نظرم یکی از بدترین کارهاییه که میشه توی Agentic Coding انجام داد.
چرا؟
چون من Full-stack و Backend کار میکنم.
یکی دیگه ML Engineerـه.
یکی Firmware مینویسه.
یکی یه SaaS سههزارخطی داره.
یکی Monorepo دهسالهای داره که اگه اشتباهی یه Package رو Update کنی سه کشور سقوط میکنن.
حتی دو نفر که روی یک پروژه کار میکنن ممکنه Workflow متفاوتی لازم داشته باشن.
و اینجا میرسیم به چیزی که به نظرم از کل Setup مهمتره.
قبل از Tool، خودت
جادی توی بحث اخیرش دربارهی AI و برنامهنویسی یه نکتهی خیلی مهم داشت:
خودت باید متخصص بشی.
و به نظرم این دقیقاً چیزیه که وسط تمام هیجان Agentها راحت فراموش میکنیم.
AI باعث نشده تخصص بیارزش بشه.
برعکس.
هرچی Agent قویتر میشه، ارزش کسی که میتونه خروجی Agent رو قضاوت کنه بیشتر میشه.
اگر Backend بلد نیستی و Agent یه معماری Backend برات مینویسه، از کجا میفهمی خوبه؟
اینکه Compile شده؟
کافی نیست.
از کجا میفهمی Transaction Boundary درست گذاشته؟
از کجا میفهمی Race Condition نداره؟
از کجا میفهمی Queryـش با ده میلیون Row منفجر نمیشه؟
از کجا میفهمی Authentication Flow ظاهراً کار میکنه ولی یه Security Hole مسخره وسطشه؟
همین برای Frontend.
Distributed Systems.
Networking.
Linux.
Database.
Security.
ML.
هرچی.
AI میتونه Implementation رو خیلی سریعتر کنه.
ولی برای اینکه بفهمی چی باید ساخته بشه و چیزی که ساخته شده خوبه یا نه، هنوز خودت وسط داستانی.
من حتی میگم هرچی AI بهتر بشه، این تفاوت شدیدتر میشه.
چون امروز یه آدم متوسط و یه آدم واقعاً متخصص هر دو میتونن با Agent در چند ساعت ده هزار خط کد تولید کنن.
فرقشون اینه که یکی ده هزار خط درست تولید میکنه.
اون یکی ده هزار خط Technical Debt تولید کرده که هنوز خودش خبر نداره.
پس قبل از اینکه بریم سراغ Harness و Skill و MCP:
روی تخصص خودتون کار کنید.
این احتمالاً بهترین Upgrade برای Coding Agent شماست.
۱ — مدل؛ هنوز مهمترین قطعه
یه دورهای بین AI Coding Community مد شده بود بگن:
Model مهم نیست، Harness مهمه.
نه :))
Harness خیلی مهمه.
ولی Model هنوز موتور ماشین شماست.
یه Harness فوقالعاده نمیتونه Reasoning، Coding Ability یا Knowledge ضعیف یه Model رو بهطور جادویی درست کنه.
من تقریباً این شکلی نگاه میکنم:
Model = Capability
Harness = How much of that capability you can actually use
Workflow = Where that capability gets used
You = Who decides whether any of it is good
و نکته اینجاست که بهترین Model هم برای همهی Taskها یکی نیست.
گاهی یه Model سریع و ارزون برای:
- Rename
- Boilerplate
- تست ساده
- Docs
- Migration کوچیک
کاملاً کافیه.
لازم نیست برای تغییر اسم یه Function بزرگترین Frontier Model موجود رو بیدار کنید.
از اون طرف یه Migration معماری، Debug عجیب یا Security Review ممکنه دقیقاً جایی باشه که خرج Model بهتر ارزشش رو داره.
من سعی میکنم Model رو بر اساس Task انتخاب کنم، نه Fanboy بودن نسبت به Provider.
۲ — هارنسسسسسس
حالا میرسیم به Harness.
Harness اون محیطیه که Model داخلش تبدیل میشه به Coding Agent.
مدل به تنهایی که نمیتونه بره فایل پروژه شما رو بخونه.
Harness بهش میده:
Model
│
├── filesystem
├── shell
├── git
├── search
├── LSP
├── MCP
├── skills
├── subagents
├── context management
├── compaction
├── permissions
└── agent loop
اینجاست که میبینید یه Model دقیقاً یکسان ممکنه توی دو Client عملکرد کاملاً متفاوتی داشته باشه.
یکی Context رو بهتر مدیریت میکنه.
یکی Search بهتری داره.
یکی Editهاش مطمئنتره.
یکی LSP رو میفهمه.
یکی Agent Loop خیلی Aggressive داره و قبل از اینکه بفهمی چی شده کل Repository رو Refactor کرده :))
یکی Context رو بهینهتر میچینه.
یکی نصف Tokenهات رو برای پیدا کردن یه Function میسوزونه.
ستاپ من
برای کارهای General و بخش بزرگی از Coding روزمره:
OpenCode
و خیلی وقتها مدلهای DeepSeek از طریق OpenCode Go.
برای Code Review و بعضی Taskهایی که میخوام یه Agent مستقلتر داشته باشم:
Codex
و برای مدیریت Codex خیلی وقتها از:
T3 Code
روی Server استفاده میکنم.
ولی نکته دوباره همونه.
من به شما نمیگم:
برید OpenCode نصب کنید چون بهترینه.
ممکنه برای Model شما Claude Code بهتر باشه.
ممکنه Cursor بهتر باشه.
ممکنه Codex CLI بهتر باشه.
ممکنه حتی یه Harness سادهتر برای کارتون کیفیت بیشتری بده چون Noise کمتری وارد Workflow میکنه.
Harness رو Benchmark کنید.
باهاش ازدواج نکنید.
۳ — Harness تنها نیست؛ Plugin Layer
بعد روی Harnessها یه لایهی دیگه داریم.
چیزهایی مثل:
Oh My OpenAgent
Oh My Codex
OMP / oh-my-pi
و کلی Plugin و Extension دیگه.
اینا میان Harness خام رو یه مرحله جدیتر میکنن.
مثلاً ممکنه اضافه کنن:
- Agentهای تخصصی
- Planner
- Reviewer
- Researcher
- LSP integration
- Hooks
- Task routing
- Better compaction
- Background agents
- Debugger
- Git workflows
- MCP management
- Better search
- Parallel workers
من خودم Oh My OpenAgent رو دوست دارم و استفاده میکنم.
چون بعضی Taskها واقعاً با orchestration بهتر خیلی بهتر انجام میشن.
ولی یه نکته.
هر Feature مجانی نیست.
ممکنه قیمتش Token باشه.
Latency باشه.
Context Pollution باشه.
یا حتی Complexity باشه.
فرض کنید Task شما:
توی Footer سال 2025 رو کن 2026.
و Setup شما میگه:
Research Agent started
Architecture Agent started
Explore Agent started
Frontend Expert started
Reviewer started
داداش :))
یه grep میخواست.
هر چیزی که Agent رو قویتر میکنه، لزوماً Workflow رو بهتر نمیکنه.
۴ — Skillللللللل
اینجا به یکی از قسمتهای مورد علاقهی خودم میرسیم.
Skills.
Skill از نظر ظاهری خیلی وقتها چیز عجیبی نیست.
یه سری فایل Markdown.
شاید چندتا Reference.
شاید Script.
شاید Template.
ولی اثرش میتونه خیلی زیاد باشه.
چرا؟
چون دارید یه Behavior تکرارشونده رو از Promptهای موقت تبدیل میکنید به Procedure دائمی Agent.
مثلاً من هر بار برای SEO Review نگم:
صفحه رو بخون، Metadata رو چک کن، Canonical رو ببین، Schema رو بررسی کن، Internal Linking رو بررسی کن...
یه Skill دارم.
Agent میفهمه وقتی این نوع Task میاد، Procedure چیه.
ولی Skill Collector نشید
این خیلی مهمه.
یه نفر میاد میگه:
این Skill Pack زندگی منو عوض کرد.
و شما ۱۲۷ تا Skill رو Install میکنید.
نه.
اول بخونش.
بعد تستش کن.
ببین:
آیا روی Model تو خوب جواب میده؟
آیا بیش از حد Context مصرف میکنه؟
آیا Agent رو زیادی rigid میکنه؟
آیا اصلاً برای Taskهای تو نوشته شده؟
آیا یه مشکل واقعی رو حل میکنه؟
من خودم از Skillهای Matt، Superpowers و Skillهای Custom استفاده میکنم.
ولی کلی Skill هم دیدم که برای Workflow من فقط Token Tax بودن.
۵ — بهترین Skill احتمالاً Skillیه که خودت میسازی
اینجا به نظرم Workflow از حالت Generic خارج میشه.
فرض کنید طی دو هفته پنجاه بار به Agent گفتید:
قبل از تغییر API همهی Consumerها رو پیدا کن. Compatibility رو بررسی کن. تستها رو Update کن. Breaking Change رو Report کن.
تبریک.
شما الان یه Skill دارید که هنوز فایلش رو نساختید :))
قاعدهی خودم:
اگر یه Prompt طولانی رو مرتب تکرار میکنم، بررسی میکنم آیا باید Skill بشه یا نه.
مثلاً:
---
name: safe-api-change
description: Use when modifying existing API contracts.
---
Before implementation:
1. Find all consumers.
2. Inspect current request/response contracts.
3. Identify compatibility constraints.
4. Check migrations.
5. Implement the smallest safe change.
6. Update unit and integration tests.
7. Report breaking changes.
حالا لازم نیست هر بار از صفر Behavior رو توضیح بدید.
Skill خوب چه شکلیه؟
Skill خوب معمولاً:
یه هدف مشخص داره.
Trigger مشخص داره.
Procedure مشخص داره.
Verification مشخص داره.
و از همه مهمتر:
سعی نمیکنه دنیا رو حل کنه.
مثلاً:
frontend-development
Skill خیلی گندهایه.
ولی:
review-react-component-accessibility
خیلی دقیقتره.
برای ساخت Skill هم من رویکرد writing-great-skills رو خیلی دوست دارم.
اصلش سادهست:
ما نمیتونیم Model stochastic رو deterministic کنیم.
ولی میتونیم Processش رو deterministicتر کنیم.
۶ — AGENTS.md و CLAUDE.md شوخی نیستن
اگر پروژهی جدی دارید، Agent نباید هر بار وارد Repository بشه و مثل یه توریست بگه:
سلام، اینجا کجاست؟
AGENTS.md برای من تقریباً README مخصوص Agentـه.
اما نه یه README معمولی.
چیزهایی باید توش باشه که فقط با خواندن Code احتمالاً مشخص نمیشن.
مثلاً:
# Architecture
- Handlers must stay thin.
- Business logic lives in internal/service.
- Database access only through repositories.
- Public API changes require backwards compatibility.
# Commands
Backend:
go test ./...
Frontend:
bun test
bun run typecheck
# Rules
- Never edit generated files.
- Do not add dependencies without justification.
- Never bypass authentication in tests.
این اطلاعات خیلی باارزشتر از اینه که بنویسید:
This project uses React.
Agent خودش Package.json رو میبینه داداش :))
AGENTS.md رو ۵۰ هزار خط نکنید
این فایل باید Agent رو راهنمایی کنه.
نه اینکه Context Window رو بکشه.
من دوست دارم ساختارش چیزی شبیه این باشه:
AGENTS.md
│
├── docs/architecture.md
├── docs/database.md
├── docs/auth.md
├── docs/deployment.md
└── docs/decisions/
یعنی AGENTS.md بیشتر Map باشه.
جزئیات برن توی Documentation مناسب.
CLAUDE.md
اگر Claude Code استفاده میکنید، CLAUDE.md هم همون Role رو برای Claude داره.
من ترجیح میدم Ruleهای مشترک رو چند بار Duplicate نکنم.
یه Source of Truth داشته باشم و فقط Harness-specific detailها جدا باشن.
چون بدترین چیزی که میتونه اتفاق بیفته:
AGENTS.md:
Use PostgreSQL.
CLAUDE.md:
Use SQLite.
docs/architecture.md:
We migrated to MySQL six months ago.
Agent هم وسطش:
☠️
۷ — Agent باید Codebase رو بشناسه؛ Codebase Memory
حالا یکی از چیزهایی که توی Workflow خودم خیلی مهم شده:
Codebase Memory.
مشکل Agentها روی پروژههای بزرگ اینه که هر Session انگار دچار فراموشی میشن.
میگی:
این Function از کجا Call میشه؟
Agent:
grep
read
grep
read
grep
read
بعد ۲۰ هزار Token خرج کرده فقط بفهمه چه خبره.
برای Repository کوچیک قابل تحمله.
برای Codebase بزرگ خیلی بد میشه.
اینجاست که ابزارهایی مثل Codebase Memory برام جذاب شدن.
ایدهش اینه که Codebase رو به یه representation ساختاریافتهتر تبدیل کنی.
مثلاً Knowledge Graph از:
Functions
Classes
Modules
Imports
Calls
Routes
Types
Dependencies
بعد Agent برای فهمیدن:
اگر این Function رو تغییر بدم چه چیزهایی ممکنه بشکنه؟
لازم نیست هر بار نصف Repository رو از صفر بخونه.
میتونه اول ساختار رو Query کنه.
مثلاً مفهومی:
UserService.create()
│
├── called by /api/users
├── called by AdminService
└── writes UserRepository
بعد فقط فایلهایی که واقعاً لازم داره رو باز کنه.
چرا این مهمه؟
چون یه مشکل بزرگ Agentic Coding:
Exploration Cost
ـه.
خیلی وقتا Model پنج دقیقه Code نمینویسه.
داره میفهمه Repository چیه.
اگر این فهمیدن رو سریعتر و ساختاریافتهتر کنیم:
Token کمتر.
Tool Call کمتر.
Hallucination کمتر.
و مهمتر:
Agent قبل از تغییر، Impact رو بهتر میفهمه.
من Codebase Memory رو جای Search معمولی نمیذارم.
هر دو لازمن.
Graph میگه:
احتمالاً اینجاها مهمن.
بعد Agent میره Source واقعی رو میخونه.
یعنی:
Codebase Memory
↓
Find relevant structure
↓
Source files
↓
Verify reality
این خیلی بهتر از Blind Graph Trustـه.
۸ — Memory فقط «یادش بمونه چی گفتم» نیست
خیلیها وقتی میگن Agent Memory، فکر میکنن منظور اینه:
اسم منو یادش باشه.
برای Coding، Memory چند لایه داره.
من تقریباً اینطوری میبینمش:
Level 1
Global preferences
Level 2
Project instructions
Level 3
Architecture / docs
Level 4
Codebase structural memory
Level 5
Feature spec
Level 6
Current task/session context
اشتباه رایج اینه که همهچی رو بندازیم تو Level 6.
یه Session پنجساعته با دویست هزار Token Context.
Agent اولش همهچی میفهمید.
آخرش نمیدونه اسم خودش چیه :))
Context بیشتر همیشه بهتر نیست.
Context مرتبط بهتره.
۹ — Spec بنویسید؛ جدی
اینجا یکی از بزرگترین تفاوتهای Workflow امروزم با اول کاره.
اوایل:
من:
یه Dashboard کامل بساز.
Agent:
حتما!
سه ساعت بعد:
یه چیزی ساخته.
کار هم میکنه.
ولی چیزی که من میخواستم نیست :))
مشکل Agent نبود.
مشکل این بود که:
من نمیدونستم دقیقاً چی میخوام.
برای Featureهای جدی الان خیلی بیشتر Spec-first کار میکنم.
نه اینکه برای تغییر Padding یه RFC هشتادصفحهای بنویسم.
ولی Feature بزرگ باید قبل از Implementation یه تعریف درست داشته باشه.
مثلاً:
# Goal
کاربر بتواند Sessionهای فعال حسابش را ببیند و revoke کند.
# Non-goals
- تغییر Login flow
- تغییر token format
- اضافه کردن device fingerprinting
# Requirements
- list active sessions
- revoke one session
- revoke all other sessions
- current session مشخص باشد
# Constraints
- API فعلی backward-compatible بماند
- migration بدون downtime باشد
# Acceptance Criteria
- revoked sessions immediately fail authentication
- current session can remain active
- tests cover multi-device login
حالا Agent چیزی برای Align شدن داره.
۱۰ — Spec-driven development و Spec Kit
برای Featureهای بزرگتر من Spec Kit و رویکرد Spec-driven رو خیلی منطقی میبینم.
ایده اینه که مستقیم از:
Idea
↓
Code
نپری.
یه مسیر داشته باشی:
Idea
↓
Specification
↓
Clarification
↓
Technical Plan
↓
Tasks
↓
Implementation
↓
Verification
فرقش خیلی زیاده.
Specification
میگه:
چی میخوایم و چرا؟
نه اینکه:
از PostgreSQL و Redis و Kafka استفاده کن.
اون Implementationـه.
Spec باید Problem رو تعریف کنه.
Clarification
اینجا Agent باید سؤال بپرسه.
مثلاً:
وقتی کاربر account خودش رو delete کرد، sessionهای child account چی میشن؟
این سؤال قبل از Coding هزار برابر ارزونتر از بعدشه.
Plan
بعد تازه میریم سراغ:
کدوم فایلها؟
چه Schema change؟
چه API؟
چه Migration؟
چه Test؟
Tasks
Plan تبدیل میشه به unitهای قابل اجرا.
مثلاً:
T1 Add session repository query
T2 Add revoke endpoint
T3 Add authorization check
T4 Add integration tests
T5 Add frontend session list
T6 Verify backwards compatibility
حالا Agent یه Checklist واقعی داره.
Implement
اینجا Coding Agent تازه اجازه داره وحشی بشه :))
Converge / Verify
قسمتی که خیلیها فراموش میکنن.
Agent نباید فقط بگه:
Done.
باید برگرده Spec رو بخونه و بگه:
Requirement 1 ✓
Requirement 2 ✓
Requirement 3 ✗
Test scenario 4 ✗
این Loop خیلی مهمه.
چون Agentها عاشق اینن که ۸۰ درصد Task رو انجام بدن و با اعتمادبهنفس ۱۰۰ درصد اعلام کنن.
۱۱ — ولی Spec هم میتونه Overengineering بشه
باز هم همون مشکل.
Feature:
یه دکمه Logout اضافه کن.
Workflow:
constitution
spec
clarify
research
plan
architecture review
risk analysis
tasks
implementation
convergence
postmortem
نه :))
من Workflow رو بر اساس اندازهی Task Scale میکنم.
تقریباً:
Tiny change
→ مستقیم اجرا + تست
Medium task
→ mini-plan + implementation + review
Large feature
→ spec + plan + tasks + implementation + review
Architectural / risky
→ research + spec + ADR + plan + staged implementation
Process باید Complexity رو کنترل کنه.
نه اینکه خودش Complexity جدید بسازه.
۱۲ — ADR؛ چرا این کد عجیب اینجاست؟
Agentها یه عادت بد دارن.
یه چیز عجیب میبینن و میگن:
اینو تمیزش میکنم.
ولی بعضی چیزهای عجیب دلیل دارن.
مثلاً:
// عجیب به نظر میاد
time.Sleep(250 * time.Millisecond)
Agent:
unnecessary delay removed.
Production:
💥
شاید اون Delay workaround یه Bug توی upstream service بوده.
برای تصمیمهای معماری مهم، ADR خیلی کمک میکنه.
مثلاً:
ADR-014
Decision:
SQLite is used instead of PostgreSQL.
Reason:
Application must run fully offline on Windows.
Do not migrate to a network database without
changing the deployment model.
حالا Agent میفهمه چرا.
این Contextیه که از Code به تنهایی نمیشه فهمید.
۱۳ — Context Engineering
یه مدت همه Prompt Engineering میگفتن.
به نظرم برای Coding Agent:
Context Engineering خیلی مهمتره.
Prompt شما شاید ۵۰ خط باشه.
ولی Agent روی Repository صد هزار خطی کار میکنه.
مسئله اینه:
چه چیزی باید وارد Context بشه؟
چه چیزی نباید بشه؟
من دوست دارم Context مثل یه Funnel باشه:
Task
↓
Relevant spec
↓
Relevant architecture docs
↓
Codebase graph/search
↓
Relevant source files
↓
Tests
نه:
cat entire_repo/*
Context Window انبار نیست.
هرچی بیشتر بریزی داخلش الزاماً Agent باهوشتر نمیشه.
گاهی بدتر میشه.
۱۴ — Session Hygiene
این چیزی بود که با درد یاد گرفتم :))
یه Session رو از صبح باز کردی.
اول:
Backend bug.
بعد:
CSS.
بعد:
Database migration.
بعد:
SEO.
بعد:
Docker.
بعد میگی:
حالا Payment رو درست کن.
Context الان آش شلهقلمه.
من برای تغییر Domain بزرگ Session جدید رو ترجیح میدم.
ولی Session جدید نباید Brain Reset کامل باشه.
چون:
AGENTS.md
Docs
Spec
Codebase Memory
Git
همه اطلاعات پایدار رو نگه داشتن.
یعنی:
Session باید Disposable باشه. Knowledge نه.
۱۵ — Agent اول Research کنه، بعد Edit
یکی از چیزهایی که خیلی کیفیت رو بهتر کرده جدا کردن:
Explore
از:
Implement
ـه.
مثلاً اول میگم:
فعلاً هیچ فایلی رو تغییر نده. Architecture این Feature رو پیدا کن، مسیر Data رو توضیح بده و بگو چه چیزهایی تحت تأثیرن.
بعد خروجی رو نگاه میکنم.
اگر منطقی بود:
حالا Plan بده.
بعد:
Implement.
این خیلی بهتر از اینه که Agent همزمان در حال فهمیدن سیستم باشه و Code هم تغییر بده.
۱۶ — Plan خوب باید قابل رد کردن باشه
یه Plan خوب فقط این نیست:
1. Update backend
2. Update frontend
3. Add tests
مرسی Sherlock :))
Plan خوب باید جوری باشه که بتونم قبل از Code بگم:
نه، مرحله ۲ غلطه.
مثلاً:
1. Add repository method in user_repository.go
2. Expose service-level revokeSession()
3. Add DELETE /sessions/:id
4. Reuse existing auth middleware
5. Add integration test for revoked token
6. Update SessionList component
حالا واقعاً میتونم Review کنم.
۱۷ — Multi-agent؛ کمتر از چیزی که Twitter میگه
من Multi-agent رو دوست دارم.
ولی Twitter یه جوری نشونش میده انگار اگر کمتر از ۱۶ Agent داشته باشی برنامهنویس نیستی :))
بهترین استفادهای که من از Subagent دیدم:
Parallel exploration
مثلاً یکی Backend رو بررسی کنه.
یکی Frontend.
یا:
Independent review
Implementer یه Agent.
Reviewer یه Agent دیگه با Context تمیز.
یا:
Domain specialist
Security Agent.
Database Agent.
UI Agent.
چیزی که دوست ندارم:
manager
→ manager's manager
→ architect
→ planner
→ planner reviewer
→ coding coordinator
→ implementer
برای TODO App.
هر Agent اضافه یعنی Communication Cost.
۱۸ — Code Review باید مستقل باشه
این خیلی مهمه.
Agent یه Feature رو نوشته.
بعد میگی:
Review your own code.
Agent:
Excellent implementation! Only minor improvements.
:))
من Review مستقل رو خیلی ترجیح میدم.
حتی اگر بتونم Model یا Harness رو عوض میکنم.
Implementer شاید DeepSeek باشه.
Reviewer Codex.
یا برعکس.
Reviewer باید دنبال اینا بگرده:
Correctness
Architecture
Security
Performance
Edge cases
Tests
Compatibility
Unnecessary complexity
بعد Findings بده.
نه اینکه کل Code رو دوباره Rewrite کنه چون سلیقهش فرق داره.
۱۹ — Tests، بهترین زبان برای حرف زدن با Agent
یکی از بزرگترین اهرمها برای Agent، Testـه.
چون بهجای:
فکر کنم درسته.
یه Oracle داریم:
PASS
FAIL
هرچی Task objectively verifiableتر باشه، Agent بهتر کار میکنه.
مثلاً:
"Fix login."
ضعیفه.
ولی:
These tests currently fail:
TestExpiredRefreshToken
TestRevokedSession
TestConcurrentRefresh
Make all three pass without changing the public API.
عالیه.
Agent میتونه Loop بزنه:
edit
↓
test
↓
failure
↓
inspect
↓
edit
↓
test
اینجا autonomy واقعاً ارزش پیدا میکنه.
۲۰ — Worktree و Branch خیلی مهمتر شدن
وقتی چند Agent همزمان داری، نباید همه توی یه Working Tree وحشی بشن.
من جداسازی رو دوست دارم.
مثلاً:
main
├── worktree-auth
├── worktree-dashboard
└── worktree-review
هر Agent فضای خودش.
Commit خودش.
Diff خودش.
بعد میشه Review کرد.
Agent بدون Git Safety Net مثل اینه به یه Intern خیلی سریع Root بدی و Auto-save هم روشن باشه :))
۲۱ — AI in Production
اینجا دیگه بازی تمومه.
Prototype رو میتونی Vibe کنی.
Production رو نه.
برای پروژهی جدی:
Feature
↓
Branch / Worktree
↓
Implementation Agent
↓
Tests
↓
Static checks
↓
Independent AI Review
↓
Security Review if needed
↓
PR
↓
CI
↓
Human review
↓
Merge
AI سرعت Pipeline رو زیاد میکنه.
قرار نیست Pipeline رو حذف کنه.
اگر قبل از AI:
Test
Review
CI
Security
داشتیم، الان دلیل کمتری برای حذفشون داریم، نه بیشتر.
چون الان میتونیم خیلی سریعتر کد بیشتری تولید کنیم.
یعنی خیلی سریعتر هم میتونیم Bug بیشتری تولید کنیم :))
۲۲ — Security برای Agent جدیه
این یکی مخصوصاً وقتی MCP و Shell و Browser وارد میشن مهمه.
Agent ممکنه دسترسی داشته باشه به:
Repository.
SSH.
Database.
Cloud.
GitHub.
Browser.
Email.
Production.
فقط چون Agent میتونه کاری رو انجام بده به این معنی نیست که باید Permissionش رو داشته باشه.
من اصل:
Least Privilege
رو خیلی جدی میگیرم.
Agentی که Code Review میکنه چرا باید Production Delete Permission داشته باشه؟
نداره.
Agent Deployment چرا باید Billing تغییر بده؟
نداره.
Secretها هم تا جای ممکن نباید مستقیم توی Context مدل بچرخن.
۲۳ — MCP عالیه، ولی هر چیزی MCP نمیخواد
یه مدت همهچی داشت MCP میشد.
Calculator MCP.
Git MCP.
Weather MCP.
احتمالاً یه نفر Toaster MCP هم ساخته :))
MCP وقتی خیلی خوبه که:
یه Service ساختاریافته داری.
چند Agent باید ازش استفاده کنن.
Tool discovery مهمه.
Authorization مهمه.
ولی گاهی Agent از قبل اینو بلده:
git
gh
docker
kubectl
rg
و یه Skill که بهش Workflow درست رو بگه کافیه.
من همیشه میپرسم:
آیا MCP واقعاً ارزش Integration Tax رو داره؟
یا:
CLI + Skill
تمیزتره؟
۲۴ — Token یه Resourceـه
یه Workflow ممکنه خیلی خفن به نظر بیاد ولی برای هر Task:
۱.۵ میلیون Token بخوره.
خب اگر خروجی ۲ درصد بهتره...
ارزشش داره؟
شاید.
شاید هم نه.
من Token Efficiency رو بخشی از Quality میبینم.
یه Agent خوب فقط Task رو حل نمیکنه.
با هزینهی منطقی حلش میکنه.
چیزهایی که معمولاً Token رو الکی میسوزونن:
- Subagent زیاد
- MCPهای پرسروصدا
- Skillهای حجیم
- Search بدون جهت
- Context عظیم
- Sessionهای خیلی طولانی
- Read کردن فایلهایی که لازم نیست
- Review تکراری بدون معیار
اینجاست که Codebase Memory و Context Engineering دوباره مهم میشن.
۲۵ — Benchmark شخصی بسازید
این شاید یکی از مهمترین پیشنهادهای کل مقاله باشه.
به حرف من اعتماد نکنید.
به Twitter اعتماد نکنید.
به Benchmark خود Tool هم کورکورانه اعتماد نکنید.
Workflow خودتون رو Benchmark کنید.
مثلاً پنج Task واقعی نگه دارید:
1. Fix a backend bug
2. Implement a small feature
3. Refactor an old module
4. Review a PR
5. Add tests to legacy code
بعد هر تغییر Setup رو روی اینها بسنجید.
مثلاً:
Correctness
Time
Tokens
Human interventions
Number of retries
Test pass rate
Diff quality
Architecture quality
حالا اگر Plugin جدید:
Token رو دو برابر کرد.
زمان رو ۵۰ درصد زیاد کرد.
ولی کیفیت فرقی نکرد.
Delete.
این خیلی بهتر از:
حس میکنم با این Plugin مدل باهوشتر شده.
ـه.
۲۶ — Model Routing
همهی Taskها به یه Model نمیرن.
این یکی از جاهاییه که خیلی هزینه رو کم میکنه.
مثلاً:
Simple mechanical task
→ cheap fast model
Normal implementation
→ main coding model
Architecture / hard debugging
→ strongest model
Review
→ independent model
Research
→ model with good tool/search behavior
لزومی نداره یه Model تمام شرکت شما باشه.
۲۷ — Documentation حالا Return on Investment بیشتری داره
قبلاً Documentation مینوشتیم برای:
انسانهای آینده.
حالا یه Reader جدید هم داریم:
Agent.
Documentation خوب باعث میشه Agent کمتر حدس بزنه.
مثلاً:
docs/
├── architecture/
├── decisions/
├── product/
├── deployment/
├── runbooks/
└── domain/
یه Domain Rule که فقط توی ذهن Developer Senior بوده، برای Agent وجود خارجی نداره.
بنویسش.
یه Deployment Gotcha که همه شفاهی میدونن؟
بنویسش.
AI عصر Documentation رو نکشته.
به نظرم برعکس، دوباره ارزش Documentation رو زیاد کرده.
۲۸ — Legacy Project با Greenfield فرق داره
Greenfield رو Agent عاشقه.
هیچی نیست.
هرچی دوست داره میسازه :))
Legacy Project یه چیز دیگهست.
اونجا مهمه اول:
index
↓
map architecture
↓
find invariants
↓
read docs
↓
run baseline tests
↓
make small changes
برای همین ابزارهایی مثل Codebase Memory روی Brownfield به نظرم خیلی بیشتر ارزش دارن.
چون قبل از Edit یه نقشه میدن.
۲۹ — بهترین Agent اون نیست که بیشتر Code مینویسه
این یه Metric خیلی بدیه:
امروز Agent من ۴۰ هزار خط Code نوشت.
خب چرا؟ :))
من Agentی رو ترجیح میدم که بگه:
این Feature با تغییر ۸۷ خط قابل انجامه؛ نیازی به معماری جدید نیست.
Agent خوب بعضی وقتها باید کمتر بنویسه.
YAGNI هنوز نمرده.
۳۰ — چه وقت خودم وارد Code میشم؟
من کاملاً از Coding دستی فرار نکردم.
بعضی وقتها سریعتره خودم یه Fix رو بزنم.
بعضی وقتها میخوام دقیقاً یه Algorithm رو بفهمم.
بعضی وقتها Agent چند بار مسئله رو اشتباه فهمیده.
بعضی وقتها هم فقط Code زدن حال میده :))
هدف من:
حذف خودم از برنامهنویسی نیست.
هدف:
حذف کارهای کمارزش از وقتمه.
۳۱ — Setup فعلی من
حالا بعد از اینکه سی بار گفتم Setup من رو کپی نکنید...
Setup من :))
در زمان نوشتن این مقاله چیزی نزدیک به اینه:
ME
│
Define problem / taste
│
▼
SPEC / PLAN
│
┌─────────┴─────────┐
│ │
project docs codebase memory
│ │
└─────────┬─────────┘
▼
AGENT
│
┌──────────┼──────────┐
│ │ │
OpenCode Codex other tools
│ │
DeepSeek T3 Code
│
└──────────┬──────────
│
Skills
│
custom + Matt + selected
Superpowers
│
Tool layer
│
CLI / MCP / LSP / Shell
│
Implementation
│
Tests
│
Independent reviewer
│
PR
│
CI
│
Human
برای پروژههای بزرگتر:
Spec Kit هم وارد جریان میشه.
برای Codebaseهای پیچیده:
Codebase Memory.
برای رفتارهای تکراری:
Skill.
برای Context دائمی:
AGENTS.md و Docs.
برای Quality:
Reviewer مستقل.
برای Production:
Git + Test + CI + Permission.
این برای من جواب میده.
برای من.
۳۲ — اگر از صفر بودم چه کار میکردم؟
اگر امروز تازه میخواستم Workflow Agentic خودم رو بسازم، اصلاً با ۴۰ تا Tool شروع نمیکردم.
شروع:
1 Harness
1 good model
1 AGENTS.md
Git
Tests
همین.
بعد کار میکردم.
هرجا درد داشتم یه Tool اضافه میکردم.
Agent Codebase رو نمیفهمه؟
Codebase Memory.
Requirementها گم میشن؟
Spec Workflow.
یه Prompt رو هی تکرار میکنم؟
Custom Skill.
Review ضعیفه؟
Independent Reviewer.
Toolهای خارجی لازم دارم؟
MCP یا CLI.
Taskها بزرگ شدن؟
Subagents.
نه اینکه روز اول همهی دنیا رو Install کنم و بعد نفهمم مشکل از کدوم لایهست.
۳۳ — Workflow شما باید از Pain ساخته بشه، نه FOMO
به نظرم این بهترین روش انتخاب Toolـه.
نبین:
فلانی اینو داره.
ببین:
من چه مشکلی دارم؟
مثلاً:
Pain:
Agent repeatedly misunderstands architecture.
Solution:
Better AGENTS.md / docs / codebase map.
یا:
Pain:
Large features drift from requirements.
Solution:
Spec-driven workflow.
یا:
Pain:
Agent spends huge tokens exploring repository.
Solution:
Codebase Memory / better search.
یا:
Pain:
Same review instructions repeated every day.
Solution:
Custom skill.
Tool باید جواب Pain باشه.
نه جواب یه Tweet.
۳۴ — و دوباره برگردیم به تخصص
آخر همهی اینا دوباره میرسیم به همون حرف اول.
فرض کنید فردا Agentها ۱۰ برابر بهتر بشن.
همهی Harnessها رایگان بشن.
Context Window بشه ده میلیون Token.
Agent بتونه ۲۴ ساعت مستقل کار کنه.
کی بهش میگه چی بسازه؟
کی Architecture رو قضاوت میکنه؟
کی میفهمه Requirement اشتباهه؟
کی میفهمه Security Risk وجود داره؟
کی میفهمه Feature اصلاً ارزش ساختن نداره؟
کی میفهمه Code قشنگه ولی Design افتضاحه؟
شما.
AI داره هزینهی Translation بین:
idea
→
software
رو پایین میاره.
ولی اینکه Idea خوب باشه، Requirement درست باشه و Result ارزشمند باشه هنوز مسئلهی آدمه.
برای همین اون حرف «خودت متخصص شو» به نظرم از تمام Toolهای این مقاله مهمتره.
اگر Backend کار میکنی:
Backend رو واقعاً یاد بگیر.
Database رو بفهم.
Network رو بفهم.
Concurrency رو بفهم.
Security رو بفهم.
اگر Frontend کاری:
Browser رو بفهم.
Accessibility رو بفهم.
Design رو بفهم.
Performance رو بفهم.
نه برای اینکه همهی Code رو خودت تایپ کنی.
برای اینکه وقتی یه Agent در پنج دقیقه چیزی ساخت، بدونی چی ساخته.
آخرش
۳۰۰۰+ ساعت بعد، من کمتر از قبل دنبال:
«بهترین AI Coding Setup دنیا»
میگردم.
چون فکر نمیکنم وجود داشته باشه.
الان بیشتر دنبال اینم:
بهترین Workflow برای این Task، روی این پروژه، با این محدودیتها چیه؟
گاهی جواب:
Codex + Reviewer.
گاهی:
OpenCode + DeepSeek.
گاهی:
Spec Kit + چند Agent.
گاهی:
Codebase Memory + یه Model ارزون.
گاهی:
یه Skill.
گاهی:
rg.
و گاهی هم جواب خیلی سادهتره:
خودم اون ۲۰ خط Code رو مینویسم و میرم سراغ زندگیم :))
Toolها رو تست کنید.
Setup آدمها رو ببینید.
ازشون ایده بدزدید.
Skillهاشون رو بخونید.
Workflowهاشون رو خراب کنید و دوباره بسازید.
ولی هیچوقت فکر نکنید چون Config یه نفر رو کپی کردید، چیزی که باعث شده اون Config برای اون آدم خوب کار کنه هم کپی شده.
اون بخش توی JSON نیست.
تخصصشه.
Tasteـشه.
تجربهشه.
درکش از مسئلهست.
و به نظرم توی دورهای که تقریباً همه میتونن با چند Prompt حجم خیلی زیادی Software تولید کنن، دقیقاً همین چیزها قراره ارزشمندتر بشن.
مدل عوض میشه.
Harness عوض میشه.
Skill عوض میشه.
Setup من هم احتمالاً چند ماه دیگه با چیزی که الان نوشتم فرق داره.
ولی اون قسمت اصلی قرار نیست تغییر کنه:
ابزار رو برای Workflow خودتون بسازید، نه خودتون رو برای ابزار.
و مهمتر از همه:
روی خودتون سرمایهگذاری کنید.
چون آخر داستان، اهرم هرچقدر هم بزرگ بشه...
کسی هنوز باید بلد باشه کجا بذارتش.
تا بلاگ بعدی، بدرود!