AiraCode اکنون افزونهٔ کروم اختصاصی خودش را دارد: کنترل مرورگر واقعی تو از ترمینال
افزونهٔ کروم اختصاصی AiraCode با پل محلی native messaging: سیزده ابزار مرورگر، مجوز به تفکیک دامنه، خواندن console و شبکه، و رفع باگ در همان تبی که در آن لاگین هستی.

بیشتر ایجنتهای کدنویسی یک نقطهٔ کور مشترک دارند: مرورگر تو. مدل میتواند کد را بنویسد، تست را اجرا کند و لاگ سرور را بخواند، اما وقتی باگ فقط در مرورگرِ واردشدهٔ تو بازتولید میشود، حلقه میشکند. آنوقت باید نقش واسط دستی را بازی کنی: اسکرینشات بگیر، خطای console را کپی کن، آن را در ترمینال جایگذاری کن و دوباره امتحان کن.
AiraCode از این نسخه افزونهٔ کروم اختصاصی خودش را دارد و آن حلقه را میبندد. این مقاله توضیح میدهد دقیقاً چه چیزی ساخته شده، چه چیزی ساخته نشده، و چطور امروز از آن استفاده کنی.
چرا مرورگر هدلس این مسئله را حل نمیکند
ابزارهای موجود معمولاً نمونهای تازه و خالی از Chromium را اجرا میکنند. برای تست یک صفحهٔ عمومی خوب است، اما:
- آن مرورگر هیچکدام از نشستهای تو را ندارد. پنل مدیریتِ نیازمند ورود، درگاه پرداخت، محیط استیجینگ پشت
SSO— هیچکدام در دسترس نیست. - هر بار باید دوباره وارد شوی، و اگر ورود دومرحلهای فعال باشد عملاً به بنبست میخوری.
- خطاهایی که فقط با افزونهها، کوکیها یا وضعیت واقعی حساب تو رخ میدهند، در یک مرورگر تازه اصلاً بازتولید نمیشوند.
مرورگر دیگری نساز؛ به همان مرورگری وصل شو که اکنون در آن کار میکنی.
معماری: چهار ایستگاه بین ترمینال و تب تو
AiraCode CLI ──stdio──▶ MCP adapter ──unix socket──▶ native host ──native messaging──▶ افزونه ──▶ تبهای تو
CLI هرگز مستقیماً با مرورگر ارتباط برقرار نمیکند. ابزار MCP را صدا میزند، آداپتور آن را روی یک سوکت محلی قاببندی میکند، native host — که خودِ باینری aira در یک حالت خاص است و کروم آن را اجرا میکند — پیام را با native messaging به افزونه میرساند، افزونه کار را در صفحه انجام میدهد و نتیجه از همان مسیر برمیگردد.
نکتهٔ مهم: تمام این مسیر روی همان دستگاه انجام میشود — از طریق stdio، سوکت unix و native messaging. برای اتوماسیون مرورگر نه سرور واسطی در کار است، نه حسابی برای جفتشدن افزونه، نه تونل ابری.
سیزده ابزاری که مدل در اختیار دارد
| ابزار | کاری که میکند |
|---|---|
tabs_context | فهرست تبهای قابلدسترسی با شناسه، عنوان و نشانی |
tabs_create / tabs_close | باز کردن یک نشانی در تب تازه / بستن تب |
navigate | انتقال یک تب به نشانی مشخص و انتظار تا پایان بارگذاری |
read_page | ساختار صفحه: عنوانها و عناصر تعاملی، هرکدام با یک ارجاع مثل [e12] |
get_page_text | متن قابلمشاهدهٔ صفحه |
find | پیدا کردن عنصر با متن، برچسب یا ویژگی |
form_input | پر کردن input، textarea، select و چکباکس با ارجاع |
computer | اسکرینشات، کلیک، تایپ، کلید، اسکرول، درگ |
javascript_tool | اجرای JS در صفحه و برگرداندن نتیجه |
read_console_messages | خروجی console با فیلتر regex، یا فقط خطاها و هشدارها |
read_network_requests | درخواستهای شبکهٔ همان تب، با فیلتر نشانی یا فقط ناموفقها |
resize_window | تغییر اندازهٔ پنجره |
گردش کار بر پایهٔ ارجاعهاست: read_page یا find به هر عنصر یک شناسهٔ کوتاه مثل e12 میدهد، و computer و form_input از همان شناسه استفاده میکنند. یعنی مدل بهجای حدس زدن مختصات پیکسلی به یک عنصر مشخص اشاره میکند؛ و اگر صفحه دوباره رندر شود و آن عنصر دیگر وجود نداشته باشد، خطایی صریح دریافت میشود، نه کلیکی روی جای اشتباه.
مجوز: هیچ سایتی بدون اجازهٔ تو باز نمیشود
این بخشی است که باید پیش از نصب بخوانی.
- دسترسی به تفکیک مبدأ (
origin) است، یعنی پروتکل و پورت هم جزئی از آن است. نخستین بار کهAiraCodeسراغ مبدأیی میرود، ابزار با خطایpermission_requiredبرمیگردد و از مدل میخواهد از تو اجازه بگیرد. تو در پنجرهٔ افزونهAllowرا انتخاب میکنی و از آن پس آن مبدأ مجاز است. - مبدأ بلاکشده بلاک میماند. حتی اگر نشستی را در حالت
bypassاجرا کرده باشی، بلاک اولویت دارد. - گزینهٔ «همهٔ سایتها مجاز باشند» وجود دارد، بهصورت پیشفرض خاموش است و در همان پنجره هم صراحتاً بهعنوان گزینهٔ توصیهنشده برچسب خورده است.
- صفحههای داخلی مرورگر مانند
chrome://و صفحهٔ افزونهها همیشه رد میشوند.
دو جزئیات دیگر که ارزش دانستن دارند: خروجی console داخل خود صفحه در یک بافر محدود نگه داشته میشود و تنها زمانی از صفحه خارج میشود که read_console_messages روی یک تبِ مجاز اجرا شود؛ و درخواستهای شبکه فقط برای تبهایی ضبط میشوند که AiraCode پیشتر با آنها کار کرده است، نه برای هر تبی که تو باز کردهای.
در عمل: یک حلقهٔ رفع باگ در چهار قدم
فرض کن ارسال فرم ثبتنام در محیط آزمایشی، فقط برای حساب تو، بدون نمایش خطا ناموفق است.
۱. تب را به مدل نشان بده
در همان کروم خودم، تب محیط آزمایشی باز است. با
tabs_contextببین کدام تب است، بعد صفحه را بخوان.
۲. بگذار خودش صفحه را بفهمد
read_page ساختار فرم را با ارجاع برمیگرداند. لازم نیست انتخابگر (selector) مشخص کنی.
۳. سناریو را اجرا و شواهد را جمع کن
فرم را با یک ایمیل آزمایشی پر کن و آن را ارسال کن، بعد
read_console_messagesوread_network_requestsرا باonlyErrorsبخوان.
اینجاست که ارزش واقعی پیدا میشود: مدل همزمان خطای JS و پاسخ ۴۰۰ سرور را میبیند و میفهمد کدام یک علت است و کدام معلول.
۴. اصلاح کن و در همان تب دوباره تست کن
چون همان تب و همان نشست حفظ میشوند، تکرار سناریو بهجای چند دقیقه ورود دوباره، فقط چند ثانیه زمان میبرد.
محدودیتها را پیش از نصب بدان
این نسخه عمداً یک هستهٔ کوچک و درست است، نه فهرستی بلند از قابلیتهای نیمکاره:
- ورودیها رویداد ساختگی هستند، نه رویداد سطح سیستمعامل. فریمورکهایی مانند
Reactکه به رویدادهایDOMگوش میدهند درست کار میکنند، اما هر چیزی که بهisTrustedتکیه کند کار نمیکند. - فقط سند سطح بالا خوانده میشود؛ محتوای داخل قابهای
iframeبا مبدأ متفاوت خوانده نمیشود. javascript_toolدر دنیای اصلی صفحه اجرا میشود، پس یکCSPسختگیرانه میتواندevalرا ببندد. در آن حالت خطا برگردانده میشود، نه اینکه بیصدا نادیده گرفته شود.- اسکرینشات از تب فعالِ پنجره گرفته میشود، بنابراین گرفتن اسکرینشات از تب پسزمینه ابتدا آن را فعال میکند.
- ضبط
GIFدر این نسخه وجود ندارد.
اهمیت این معماری برای توسعهدهندهٔ ایرانی
دو چیز اینجا مهمتر از بقیه است.
اول، نصب به حساب گوگل گره نخورده است. شناسهٔ افزونه با یک کلید ثابت در مانیفست قفل شده، بنابراین نسخهٔ unpacked و نسخهٔ بستهبندیشده یک شناسهٔ یکسان دارند. برای استفاده از نسخهٔ کنونی لازم نیست منتظر انتشار در فروشگاه کروم بمانی.
دوم، پل ارتباطی محلی است. برای اتوماسیون مرورگر لازم نیست ترافیک از هیچ سرویس خارجی رد شود؛ نه برای احراز هویت افزونه، نه برای انتقال دستورها. AiraCode در بخشهای دیگر نیز همین منطق را دنبال میکند: مسیر بحرانی نباید به سرویسی وابسته باشد که ممکن است در دسترس نباشد. مرور کلی AiraCode همین رویکرد را در بقیهٔ محصول نشان میدهد.
نصب
خود AiraCode با یک خط نصب میشود:
curl -fsSL https://airacode.ir/install.sh | bash
افزونه هنوز روی فروشگاه کروم منتشر نشده، پس فعلاً بهصورت unpacked نصب میشود:
cd apps/airacode-chrome
bun install && bun run build
سپس در chrome://extensions گزینهٔ Developer mode را فعال کن و پوشهٔ apps/airacode-chrome/dist را با Load unpacked بارگذاری کن. بعد یک بار AIRA_ENABLE_BROWSER_INTEGRATION=1 aira را اجرا کن تا مانیفست native host روی سیستم نوشته شود و کروم را یک بار دوباره راهاندازی کن. مرحلهبهمرحلهٔ بهروز همیشه در مستندات Aira Browser است.
فقط دربارهٔ افزونهٔ کروم AiraCode نخوان؛ همین حالا نصبش کن
اگر هنوز در حال صورتبندی مسئله هستی، از آیراچت برای شکستن آن به بخشهای کوچکتر و ترسیم نقشه استفاده کن؛ و وقتی نقشه آماده شد، AiraCode همان نقشه را در ترمینال — و اکنون در مرورگر — اجرا میکند. لینک نصب دوباره: airacode.ir/download.
جمعبندی
جمعبندی ساده است: ارزش این افزونه در «کنترل مرورگر» نیست — آن را ابزارهای زیادی بلدند. ارزشش در این است که مرورگرِ تو، با نشستهای واقعی تو، وارد همان حلقهای میشود که کد در آن نوشته و تست میشود — و پل این ارتباط روی همان دستگاه باقی میماند.
ادامهٔ مسیر
همهٔ مقالهها ←
AiraCode، همراه کدنویسی فارسی توسعهدهنده ایرانی
AiraCode، همراه کدنویسی فارسی توسعهدهنده ایرانی، راهنمای فارسی از مجموعهٔ «کدنویسی با AI» در وبلاگ آیرا. بازنویسیشده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

Agentic coding، نسل جدید کدنویسی
Agentic coding، نسل جدید کدنویسی، راهنمای فارسی از مجموعهٔ «کدنویسی با AI» در وبلاگ آیرا. بازنویسیشده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

MCP servers برای کدنویسی
MCP servers برای کدنویسی، راهنمای فارسی از مجموعهٔ «کدنویسی با AI» در وبلاگ آیرا. بازنویسیشده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

AI testing و debugging
AI testing و debugging، راهنمای فارسی از مجموعهٔ «کدنویسی با AI» در وبلاگ آیرا. بازنویسیشده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.
بیشتر در «کدنویسی با AI»
- AiraCode در برابر Cursor؛ کدام برای توسعهدهندهٔ ایرانی بهتر است؟
- AiraCode در برابر GitHub Copilot؛ مقایسهٔ کامل برای کدنویس ایرانی
- نقشهٔ رشد Cursor؛ متدی که به یک میلیارد دلار درآمد سالانه رسید
- اولین ۲۰ کاربر محصول را از کجا پیدا کنیم؟ نقشهٔ عملی Base44
- کدنویسی با هوش مصنوعی چیست؟
- Cursor، ویرایشگر کدنویس هوشمند
- GitHub Copilot، راهنمای کامل
- Windsurf (سابق Codeium)
- Claude Code، Anthropic CLI کدنویسی
- Cursor در مقابل AiraCode
- Aider، pair programming روی ترمینال
- Continue.dev، IDE-agnostic AI
- Cline، autonomous coding agent
- Bolt.new، Lovable و v0، ساخت اپ با پرامپت
- Devin AI، اولین مهندس نرمافزار هوشمند
- Vibe coding چیست؟
- Sub-agents در Claude Code
- Plan mode چیست و چرا اهمیت دارد
- Tab completion هوشمند
- Multi-file edit با AI
- AI code review
- پرامپتنویسی برای کدنویسی
- Context-aware refactoring با AI
- AI برای DevOps
- آیندهٔ کدنویسی با AI
- چرا Cursor و Copilot هر روز با یه غریبه میبینندت