SSD Nodes Learn Hosting plans →
راهنماها Matt Connorتوسط Matt Connor · به‌روزرسانی شده 2026-08-13

آموزش نصب و میزبانی شخصی دستیار هوش مصنوعی Iva در تلگرام

دستیار هوش مصنوعی Iva را بدون نیاز به دامنه یا باز کردن پورت روی VPS اجرا کنید. این راهنما برای نسخه v0.3.13 نحوه مدیریت یادداشت‌ها در Obsidian و تنظیم systemd را شرح می‌دهد.

آنچه می‌سازید

Iva یک دستیار هوش مصنوعی تلگرام با قابلیت میزبانی شخصی (self-hosted) است. این یکی از معدود سرویس‌هایی است که می‌توانید بدون باز کردن پورت ورودی و بدون نیاز به اشاره کردن دامنه به آن، مستقر کنید. هیچ گواهی‌نامه‌ای نیز وجود ندارد، زیرا هیچ بخشی از سیستم برای دسترسی عمومی در حالت listening قرار نمی‌گیرد. این سرویس با برقراری ارتباط خروجی با تلگرام، اتصال را باز نگه می‌دارد و پیام‌های شما را از طریق پاسخ‌های دریافتی می‌خواند. تمام عملکردهای دیگر از همین یک اتصال خروجی نشأت می‌گیرند.

Iva تحت مجوز MIT و با زبان Node نوشته شده است. حافظهٔ آن پوشه‌ای از فایل‌های متنی ساده (markdown) است که Obsidian مستقیماً آن‌ها را باز می‌کند؛ بنابراین یادداشت‌هایی که دربارهٔ شما نگه می‌دارد، بدون نیاز به خودِ برنامه نیز قابل خواندن هستند. این راهنما نسخه v0.3.13 را که در تاریخ 6 August 2026 منتشر شده است، مبنا قرار می‌دهد.

بیشتر نرم‌افزارهای self-hosted با یک رکورد DNS (سیستم نام دامنه) و یک گواهی Let's Encrypt صادر شده با Certbot شروع می‌شوند. Iva این لایه را به‌طور کامل حذف می‌کند؛ به همین دلیل است که یک VPS کوچک پشت فایروالی که فقط اجازه دسترسی SSH می‌دهد، یک استقرار کامل محسوب می‌شود.

چرا Iva به پورت‌های باز نیاز ندارد

iva-telegram-poll.service یک پل مبتنی بر long polling است. این سرویس API مربوط به getUpdates تلگرام را فراخوانی کرده و منتظر پاسخ می‌ماند، بنابراین هر اتصال از سمت سرور شما آغاز می‌شود. تلگرام هرگز به سرور شما متصل نمی‌شود، به این معنی که نیازی به پیکربندی reverse proxy یا نگرانی بابت تمدید گواهی‌ها وجود ندارد.

خودِ agent تنها روی پورت 8723 در 127.0.0.1 گوش می‌دهد. مستندات پروژه در این باره صریح است: پورت 8723 را در معرض اینترنت قرار ندهید و هر reverse proxy که جلوی آن قرار می‌دهید باید الزامات مربوط به bearer token را رعایت کند. پس از نصب، آدرس bind را بررسی کنید.

sudo ss -tlnp | grep 8723

آدرس باید به صورت 127.0.0.1:8723 باشد. یک آدرس wildcard مانند 0.0.0.0:8723 به این معنی است که مسیرهای HTTP مربوط به agent از طریق اینترنت قابل دسترسی هستند و شما باید پیش از ارسال هرگونه اطلاعات خصوصی به ربات، این مورد را اصلاح کنید.

بنابراین فایروال را بسته نگه دارید. پیش از فعال‌سازی ufw enable، دسترسی SSH را مجاز کنید، زیرا اجرای آن بدون قانون SSH باعث قطع شدن نشست (session) فعلی شما می‌شود.

sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

عملکرد واقعی نصب‌کننده تک‌خطی

صفحه اصلی پروژه یک دستور واحد به شما می‌دهد که اسکریپتی را از GitHub به bash پایپ می‌کند. ابتدا اسکریپت را بخوانید، زیرا این اسکریپت کارهایی بسیار فراتر از نصب یک برنامه انجام می‌دهد.

curl -fsSL https://raw.githubusercontent.com/smixs/iva/main/install.sh -o iva-install.sh
less iva-install.sh
  • این اسکریپت بسته‌های سیستمی را با استفاده از مدیر بسته شناسایی‌شده نصب می‌کند: git، gh، python3، ffmpeg، pandoc و poppler-utils.
  • اگر سرور کمتر از 1.5 GB رم داشته باشد و swap نداشته باشد، یک swapfile به حجم 2 GB در مسیر /swapfile ایجاد می‌کند؛ زیرا در غیر این صورت فرآیند build متوقف می‌شود.
  • ابزار nvm و سپس Node 24 را نصب می‌کند که حداقل نسخه مورد نیاز برای اجرای Iva است.
  • ابزار uv، یعنی مدیر بسته Python، را در مسیر ~/.local/bin نصب می‌کند.
  • مخزن را در مسیر ~/iva کلون کرده و دستور npm ci را اجرا می‌کند.
  • دو بسته npm سراسری را نصب می‌کند: agent-browser (که سپس Chromium را دانلود می‌کند) و @googleworkspace/cli.
  • ویزارد راه‌اندازی را اجرا کرده، پروژه را build می‌کند و vault را می‌سازد.
  • یک دستور iva را در ~/.local/bin می‌نویسد و unitهای کاربری systemd را نصب می‌کند.

این حجم زیادی از نرم‌افزار برای یک دستور تک‌خطی است. این موضوع همچنین دلیل توصیه README برای نصب برنامه به عنوان یک کاربر عادی و نه root را توضیح می‌دهد: ابزار shell این عامل (agent) بعداً با همان دسترسی‌هایی اجرا می‌شود که نصب‌کننده داشته است. اسکریپت تنها برای نصب بسته‌ها و ایجاد swapfile از sudo استفاده می‌کند؛ این کار از طریق یک ابزار کمکی انجام می‌شود که در صورت root بودن شما، دستورات را مستقیماً اجرا می‌کند.

ایجاد یک کاربر اختصاصی پیش از نصب

برای Iva یک حساب کاربری مجزا ایجاد کنید. این عامل، دستورات shell را روی میزبان از طریق child_process در Node اجرا می‌کند، بدون آنکه از container یا sandbox استفاده کند؛ بنابراین حسابی که تحت آن اجرا می‌شود، مرز امنیتی شماست.

sudo adduser --disabled-password --gecos "" iva
sudo usermod -aG sudo iva
sudo install -d -m 700 -o iva -g iva /home/iva/.ssh
sudo cp ~/.ssh/authorized_keys /home/iva/.ssh/authorized_keys
sudo chown iva:iva /home/iva/.ssh/authorized_keys
sudo chmod 600 /home/iva/.ssh/authorized_keys
sudo loginctl enable-linger iva

enable-linger اهمیت دارد زیرا Iva به عنوان unitهای کاربر در systemd اجرا می‌شود. بدون فعال بودن linger، سیستم‌عامل به محض پایان آخرین نشست (session)، سرویس‌های آن کاربر را متوقف می‌کند؛ در نتیجه با بستن SSH، دستیار شما نیز از کار می‌افتد. همین قاعده برای هر سرویس و تایمری که خودتان تحت systemd می‌نویسید نیز صادق است.

این حساب کاربری فقط در زمان افزودن بسته‌ها توسط نصب‌کننده به sudo نیاز دارد. پس از پایان نصب، این دسترسی را از آن بگیرید.

sudo deluser iva sudo

مستقیماً با همان کاربر از طریق SSH وارد شوید. shellای که با sudo -iu iva به آن وارد می‌شوید، نه DBUS_SESSION_BUS_ADDRESS و نه XDG_RUNTIME_DIR را تنظیم کرده است؛ بنابراین هر دستور systemctl --user با خطای Failed to connect to bus مواجه می‌شود. ترسیم این مرز، همان تمرینی است که در اجرای سرویس‌ها با کاربران دارای حداقل دسترسی انجام می‌دهید.

نصب یک نسخه مشخص (Pinned) به‌جای اجرای مستقیم اسکریپت از طریق pipe

این نصب‌کننده ویژگی مفیدی دارد. پیش از آنکه هر چیزی را clone کند، بررسی می‌کند که آیا دایرکتوریِ حاوی اسکریپت، شامل یک package.json حاوی "eve" هست یا خیر. اگر چنین باشد، همان نسخه موجود را build کرده و مرحله clone را نادیده می‌گیرد. بنابراین شما می‌توانید نسخه مورد نظر خود را انتخاب کنید.

git clone --branch v0.3.13 https://github.com/smixs/iva.git ~/iva
cd ~/iva
git log -1 --oneline
bash install.sh

اکنون می‌دانید چه کدی در حال اجراست. وقتی اسکریپت در هر ساعتی از شبانه‌روز اقدام به clone کردن main می‌کند، شما از وضعیت دقیق آن اطلاع ندارید. Iva بین روزهای 4 و 6 اوت 2026 پنج نسخه منتشر کرده است، بنابراین main امروز صبح و main امروز بعدازظهر، یک برنامه واحد نیستند.

checkout کردن یک tag، وضعیت git را در حالت detached HEAD قرار می‌دهد. این حالت به‌خوبی کار می‌کند، اما محدودیت آن را در نظر داشته باشید: iva update نسخه checkout شده را به شاخه update منتقل می‌کند، بنابراین این نسخه مشخص (pin) یک نقطه شروع شناخته‌شده است و نه یک توقف دائمی. دستور iva version نسخه بسته و git commit مربوطه را چاپ می‌کند تا همیشه بتوانید وضعیت فعلی خود را مشاهده کنید.

برای انتقال عمدی به یک نسخه جدیدتر، لیست tagها را مشاهده کنید، IVA_TAG را روی نسخه انتخابی خود تنظیم کنید و سپس نصب‌کننده را مجدداً از داخل همان دایرکتوری اجرا کنید.

cd ~/iva
git fetch --tags
git tag --list 'v*' | sort -V | tail -5
IVA_TAG=v0.3.13
git checkout "$IVA_TAG"
bash install.sh --skip-setup
iva restart

دستور --skip-setup از اجرای مجدد wizard روی یک .env که هم‌اکنون به‌درستی کار می‌کند، جلوگیری می‌کند.

پنج مرحله جادوگر (wizard) و کلیدهای درخواستی

  1. ارائه‌دهنده مدل و خود مدل. MODEL_PROVIDER از opencode، ollama، openrouter یا codex پشتیبانی می‌کند. جادوگر کلید را به‌صورت زنده اعتبارسنجی کرده و مدل‌هایی که طرح شما ارائه می‌دهد را فهرست می‌کند.
  2. صدا و جستجو. یک کلید Deepgram یادداشت‌های صوتی را تبدیل به متن می‌کند. یک کلید جستجوی وب (Tavily، Exa، Parallel یا Brave) اختیاری است.
  3. توکن ربات تلگرام از @BotFather که در برابر endpoint getMe بررسی می‌شود.
  4. کنترل دسترسی. شما پیامی به ربات خود می‌فرستید و جادوگر شناسه کاربری عددی شما را از getUpdates می‌خواند.
  5. تنظیمات سیستم. منطقه زمانی IANA، دایرکتوری vault و پورت محلی که به‌صورت پیش‌فرض 8723 است.

دو مورد از این موارد، وابستگی‌هایی هستند که عبارت «یک دستور» آن‌ها را پنهان می‌کند. Iva هیچ مدلی را به همراه خود عرضه نمی‌کند، بنابراین پیش از پاسخ‌دهی به هر چیزی، به یک طرح مدل پولی یا یک API key نیاز دارد. همچنین این برنامه خود قادر به تبدیل صوت به متن نیست، بنابراین یادداشت‌های صوتی به یک سرویس جداگانه نیاز دارند. مدل nova-3 از Deepgram با DEEPGRAM_LANGUAGE=multi زبان را تشخیص می‌دهد و حساب‌های جدید Deepgram اعتبار اولیه‌ای دریافت می‌کنند که ماه‌ها استفاده شخصی را پوشش می‌دهد. متن فقط با کلید مدل کار می‌کند. فقط صدا به Deepgram وابسته است.

آنچه جادوگر نوشته است را بررسی کنید.

grep -E '^(MODEL_PROVIDER|TELEGRAM_ALLOWED_USER_IDS|ASSISTANT_VAULT_DIR|IVA_PORT)=' ~/iva/.env
ls -l ~/iva/.env

ls باید -rw------- را با حالت 0600 چاپ کند، زیرا آن فایل تمام کلیدهایی که وارد کرده‌اید را نگه می‌دارد. TELEGRAM_ALLOWED_USER_IDS باید شناسه عددی شما را در خود داشته باشد. لیست مجاز (allowlist) به‌صورت پیش‌فرض مسدود است، بنابراین مقدار خالی به این معنی است که Iva به هیچ‌کس پاسخ نمی‌دهد.

مدل یک‌بار در زمان شروع پردازش خوانده می‌شود. ویرایش MODEL_PROVIDER یا نام مدل در .env تا زمانی که iva restart را اجرا نکنید، تغییری ایجاد نمی‌کند. در openrouter نام مدل یک slug فروشنده مانند anthropic/claude-sonnet-4.5 است، نه یک نام ساده. در codex هیچ API key وجود ندارد: iva login به یک اشتراک موجود ChatGPT وارد می‌شود.

هزینه ماهانه اجرای Iva چقدر است

ChartMonthly cost of a self-hosted Iva, published list prices, August 2026
The data behind this chart
[
  {
    "plan": "Small VPS, always on",
    "usd_per_month": 5
  },
  {
    "plan": "OpenCode Go model plan",
    "usd_per_month": 5
  },
  {
    "plan": "Ollama Cloud model plan",
    "usd_per_month": 20
  },
  {
    "plan": "Deepgram voice, starter credits",
    "usd_per_month": 0
  },
  {
    "plan": "Tavily web search, free tier",
    "usd_per_month": 0
  },
  {
    "plan": "Cheapest complete setup",
    "usd_per_month": 10
  }
]

این مبالغ، قیمت‌های رسمی اعلام‌شده تا اوت 2026 هستند و نه اندازه‌گیری‌های عملیاتی. یک VPS کوچک با هزینه 5 دلار آمریکا به همراه طرح OpenCode Go با هزینه 5 دلار، ارزان‌ترین پیکربندی کامل است که حدود 10 دلار در ماه هزینه دارد. Ollama Cloud گزینه دیگر با نرخ ثابت 20 دلار است و مدل‌های پیشرفته (frontier models) آن به عنوان مصرف اضافی روی طرح محاسبه می‌شوند. هزینه سرویس صوتی تا زمانی که اعتبار اولیه Deepgram باقی باشد، 0 است.

OpenRouter در این لیست جای نمی‌گیرد زیرا مدل پرداخت آن بر اساس میزان مصرف (pay as you go) است، بنابراین صورت‌حساب شما مستقیماً با میزان استفاده تغییر می‌کند. این گزینه‌ای است که باید مراقب آن باشید: دستیاری که در هر نوبت، یک پنجره کانتکست 131072 توکنی را حمل می‌کند، می‌تواند به‌سرعت هزینه‌ای فراتر از یک طرح با نرخ ثابت ایجاد کند. متغیر پنجره کانتکست را روی اندازه واقعی مدل تنظیم کنید، زیرا مقدار بیش از حد فقط باعث هدر رفتن توکن‌ها می‌شود.

دو سرویس و دو تایمر

  • iva.service خودِ agent را اجرا می‌کند.
  • iva-telegram-poll.service پل long polling را که با Telegram در ارتباط است، اجرا می‌کند.
  • iva-memory-doctor.timer در ساعت 05:00 فعال شده و عملیات نگهداری شبانه را روی vault انجام می‌دهد.
  • iva-update-check.timer در ساعت 10:00 فعال شده و بررسی می‌کند که آیا نسخه جدیدتری منتشر شده است یا خیر.
  • iva-telegram-userbot.service تنها در صورتی وجود دارد که proxy اختیاری Telethon را راه‌اندازی کرده باشید.
iva status
systemctl --user status iva.service iva-telegram-poll.service
systemctl --user list-timers
iva logs poll

iva status وضعیت هر دو سرویس و هر دو تایمر watchdog را گزارش می‌دهد. systemctl --user list-timers زمان اجرای بعدی هر تایمر را چاپ می‌کند؛ این همان روشی است که تأیید می‌کنید آیا memory doctor واقعاً امشب اجرا خواهد شد یا خیر. هر دو سرویس باید در وضعیت active (running) باشند. اگر یکی از آن‌ها در یک حلقه (loop) مدام restart شود، journalctl --user -u iva.service -n 100 دلیل آن را مشخص می‌کند.

هنگام عیب‌یابی، این تفکیک اهمیت دارد. ممکن است پل (bridge) فعال باشد و در حال polling باشد، در حالی که agent از کار افتاده است؛ در این حالت Telegram پیام شما را می‌پذیرد اما هیچ پاسخی دریافت نمی‌شود. iva logs poll لاگ‌های پل را دنبال می‌کند و iva logs لاگ‌های agent را؛ بنابراین این دو لاگ به شما می‌گویند که کدام بخش دچار مشکل شده است.

محل قرارگیری Obsidian vault و نحوه پشتیبان‌گیری از آن

ASSISTANT_VAULT_DIR به‌صورت پیش‌فرض در vault داخل دایرکتوری نصب قرار می‌گیرد، بنابراین حافظه در ~/iva/vault مستقر است. این بخش یک مخزن git مستقل از کد برنامه است که به شما اجازه می‌دهد Iva را بدون تغییر در یادداشت‌های خود به‌روزرسانی کنید.

  • vault/CORE.md حقایق پایدار و ترجیحات ثابت را نگه می‌دارد، محدود به 1200 کاراکتر است و در هر system prompt همراه می‌شود.
  • vault/daily/YYYY-MM-DD.md رونوشت روزانه است که فقط به صورت append-only با آن رفتار می‌شود.
  • vault/cards/ کارت‌های تایپ‌شده برای مخاطبین، پروژه‌ها، تصمیمات، ایده‌ها و یادداشت‌ها را در خود جای می‌دهد.
  • vault/summaries/daily/، weekly/، monthly/ و yearly/ شامل rollupها هستند.
  • vault/attachments/ فایل‌ها را بر اساس تاریخ دسته‌بندی می‌کند و vault/.graph/ گراف لینک‌ها را نگه می‌دارد.
  • vault/schema.json انواع کارت‌ها و قوانین decay را تعریف می‌کند.

عملیات rollup طبق زمان‌بندی در داخل پردازش اجرا می‌شود. پردازش روزانه در ساعت 04:00 رونوشت دیروز را به کارت‌ها و یک خلاصه تبدیل کرده و CORE.md را بازنویسی می‌کند؛ سپس پردازش‌های هفتگی، ماهانه و سالانه به نوبه خود آن‌ها را فشرده می‌کنند. در ساعت 05:00، memory doctor یک پردازش قطعی (deterministic) بدون دخالت مدل اجرا می‌کند: این پردازش schema را اعمال، گراف لینک‌ها را بازسازی، ایندکس را تولید مجدد و سپس commit و push می‌کند.

آن push همان پشتیبان شماست و مرحله‌ای است که افراد معمولاً فراموش می‌کنند. اگر vault هیچ git remote نداشته باشد، doctor تلاش می‌کند یک مخزن خصوصی GitHub از طریق gh ایجاد کند که نیازمند احراز هویت GitHub CLI است.

gh auth login
systemctl --user start iva-memory-doctor.service
cd ~/iva/vault && git log --oneline -3

یک commit با تاریخ امروز به این معنی است که پردازش اجرا شده و vault ثبت شده است. هشدارهای gh not available در لاگ به معنای عکس آن است: vault نگهداری می‌شود اما هرگز از سرور خارج نمی‌شود، بنابراین در صورت خرابی VPS، حافظه شما نیز از بین می‌رود.

یک نسخه تحت کنترل خودتان نیز نگه دارید.

tar czf ~/iva-vault-backup.tgz -C ~/iva vault

آن فایل را با scp از سرور خارج کنید و سپس آن را از روی سرور حذف نمایید. برای خواندن حافظه در Obsidian، آن را به یک clone از مخزن vault ارجاع دهید. Wikilinkها و backlinkها همان‌طور که هستند کار می‌کنند و نمای گراف نیز به درستی عمل می‌کند. ویرایش دستی کارت‌ها و CORE.md ایمن است. MOC.md و .graph/ را تغییر ندهید، زیرا پردازش شبانه هر دو را بازسازی می‌کند.

با vault مانند دفتر وقایع زندگی خود رفتار کنید

آن دایرکتوری، سوابق تاریخ‌گذاری‌شده‌ای از گفته‌ها، ملاقات‌ها و تصمیمات شما بر روی ماشینی است که اجاره کرده‌اید. دو نکته از این موضوع استنتاج می‌شود.

میزبانی شخصی (Self-hosting) محل ذخیره‌سازی را تغییر می‌دهد، نه پردازش را. هر نوبت گفتگو به ارائه‌دهنده مدل شما ارسال می‌شود و هر یادداشت صوتی به Deepgram می‌رود. vault متعلق به شماست، اما درخواست‌ها از دید شرکت‌هایی که آن‌ها را پردازش می‌کنند، خصوصی نیستند. اجرای لایه حافظه توسط خودتان، همانند یک سرور حافظه Mem0 روی VPS شخصی، ساختار مشابهی دارد: داده‌ها محلی هستند اما فراخوانی مدل همچنان از سرور شما خارج می‌شود. اگر موضوعی برای یک شخص ثالث بیش از حد حساس است، آن را در چت مطرح نکنید.

دسترسی آن حساب کاربری، کل vault است. ابزارهای Iva به‌صورت بومی روی میزبان و از طریق fs و child_process در Node اجرا می‌شوند؛ بدون Docker و بدون sandbox. بنابراین، یک نوبت گفتگو که مورد نفوذ قرار گیرد، هر دسترسی که کاربر سرویس داشته باشد را در اختیار خواهد داشت. به همین دلیل است که حساب کاربری پس از نصب، هیچ sudo را نگه نمی‌دارد و چرا لیست مجاز (allowlist) بیش از آنچه به نظر می‌رسد اهمیت دارد: این لیست دروازه‌ای است که تعیین می‌کند پیام‌های چه کسی به دستوراتی در سرور شما تبدیل شوند. اگر می‌خواهید دستیار خود را بدون باز کردن هیچ پورتی در جیب خود داشته باشید، این همان الگویی است که برای دسترسی به یک عامل Hermes میزبانی‌شده از طریق تلفن همراه استفاده می‌شود، که در آن کلاینت چت وظیفه‌ای را انجام می‌دهد که در غیر این صورت بر عهده یک endpoint عمومی بود.

چه چیزی از کار می‌افتد و چه پیامی مشاهده خواهید کرد

Build killed, exit 137. قاتل حافظه (OOM Killer) هسته سیستم‌عامل، فرآیند ساخت را متوقف کرده است. نصب‌کننده فقط زمانی swap اضافه می‌کند که رم کمتر از 1.5 GB باشد و هیچ swap موجود نباشد؛ بنابراین خودتان آن را اضافه کنید و نصب‌کننده را دوباره اجرا کنید.

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
free -h

Failed to connect to bus. هر دستور systemctl --user زمانی که shell فاقد user session bus باشد (که sudo -iu iva آن را فراهم می‌کند) این پیام را چاپ می‌کند. یک نشست SSH عادی با آن کاربر باز کنید یا پیش از اجرای دستور، XDG_RUNTIME_DIR=/run/user/$(id -u iva) را export کنید.

بات به شما پاسخ نمی‌دهد. TELEGRAM_ALLOWED_USER_IDS خالی است و لیست مجاز (allowlist) به‌صورت پیش‌فرض مسدود است. به بات پیامی بفرستید؛ بات با شناسه عددی شما پاسخ می‌دهد و هیچ چیز دیگری نمی‌گوید. آن شناسه را در .env قرار دهید و iva restart را اجرا کنید.

بات بلافاصله پس از iva config ساکت می‌شود. ویزارد ممکن است IVA_PORT را بدون به‌روزرسانی ASSISTANT_HOST جابه‌جا کند، بنابراین bridge به پورتی متصل می‌شود که پاسخی دریافت نمی‌کند. دو خط را با هم مقایسه کنید و سپس سرویس را restart کنید.

grep -E '^(IVA_PORT|ASSISTANT_HOST)=' ~/iva/.env
iva restart

یادداشت صوتی پاسخی دریافت نمی‌کند. API بات تلگرام دانلود فایل‌های بیش از 20 MB را رد می‌کند، بنابراین bridge هرگز فایل صوتی طولانی را دریافت نمی‌کند و چیزی برای ارسال به Deepgram ندارد. فایل را پیش از ارسال تقسیم کنید.

ffmpeg -i long.ogg -f segment -segment_time 600 -c copy part-%02d.ogg

یک نوبت (turn) متوقف می‌شود و هرگز پاسخ نمی‌دهد. وضعیت گیرکردهٔ workflow پس از restart باقی می‌ماند و دوباره در صف قرار می‌گیرد، بنابراین restart کردن به‌تنهایی آن را پاک نمی‌کند. iva reset آن وضعیت را قرنطینه کرده و هر دو سرویس را restart می‌کند. /new در چت، یک گفتگوی جدید آغاز می‌کند.

Chromium در Ubuntu 24.04 با خطا مواجه می‌شود. Ubuntu 24.04 فضای نام کاربری بدون امتیاز (unprivileged user namespaces) را از طریق AppArmor مسدود می‌کند، بنابراین sandbox خودِ Chromium نمی‌تواند شروع به کار کند و agent-browser با خطا مواجه می‌شود. نصب‌کننده با نوشتن "--no-sandbox" در ~/.agent-browser/config.json این مشکل را دور می‌زند. آگاه باشید که این تنظیم وجود دارد. این کار سطح ایزولاسیون مرورگر را کاهش می‌دهد، که دلیل دیگری است بر اینکه این حساب کاربری نباید هیچ چیزی جز Iva را در اختیار داشته باشد.

FAQ

آیا برای میزبانی شخصی Iva به دامنه یا پورت باز نیاز دارم؟

خیر. Iva از طریق long polling با Telegram ارتباط برقرار می‌کند: iva-telegram-poll.service فراخوانی getUpdates را انجام داده و منتظر می‌ماند، بنابراین تمام اتصالات از سرور شما به سمت خارج (outbound) هستند. هیچ چیزی نباید از بیرون به سرور شما دسترسی داشته باشد، بنابراین نیازی به رکورد DNS یا گواهی ندارید. پورت HTTP خودِ عامل، یعنی 8723، روی 127.0.0.1 متصل می‌شود و مستندات پروژه تأکید می‌کنند که آن را در معرض اینترنت قرار ندهید. فایروالی که فقط اجازه دسترسی SSH را می‌دهد، پیکربندی صحیح است.

هزینه اجرای Iva در هر ماه چقدر است؟

بر اساس لیست قیمت‌های منتشرشده در اوت 2026، یک VPS کوچک با هزینه 5 دلار به اضافه ارزان‌ترین طرح مدل flat rate با هزینه 5 دلار، در مجموع حدود 10 دلار آمریکا در ماه هزینه دارد. هزینه Ollama Cloud برابر با 20 دلار است و هزینه‌های مدل‌های پیشرفته (frontier models) به آن اضافه می‌شود. اعتبارات اولیه Deepgram در ابتدا هزینه صوت را پوشش می‌دهد و سطوح جستجوی وب نیز دارای سهمیه رایگان هستند. OpenRouter به صورت pay as you go است، بنابراین رقم ماهانه ثابتی ندارد.

Iva داده‌های من را کجا نگه می‌دارد و چگونه از آن‌ها نسخه پشتیبان تهیه کنم؟

به‌طور پیش‌فرض در ~/iva/vault که توسط ASSISTANT_VAULT_DIR تعیین می‌شود. این یک مخزن git خصوصی و جداگانه از فایل‌های markdown ساده است: CORE.md، daily/YYYY-MM-DD.md، cards/ و summaries/. ابزار memory doctor در ساعت 05:00 تغییرات را commit و push می‌کند، که تنها در صورتی مفید است که مخزن دارای یک remote باشد؛ بنابراین gh auth login را اجرا کنید یا در حین راه‌اندازی، یک remote اختصاصی برای خود اضافه کنید. همچنین با استفاده از tar czf ~/iva-vault-backup.tgz -C ~/iva vault یک نسخه آفلاین نگه دارید و آن فایل را از سرور خارج کنید.

آیا در صورت میزبانی شخصی Iva، داده‌های من خصوصی می‌مانند؟

ذخیره‌سازی متعلق به شماست، اما پردازش خیر. vault تا زمانی که آن را push نکنید روی دیسک شما باقی می‌ماند و .env با مجوز 0600 و تحت مالکیت کاربر سرویس قرار دارد. فراخوانی‌های مدل و تبدیل صوت به متن از طریق APIهای ابری انجام می‌شوند، بنابراین آن پیام‌ها از طریق ارائه‌دهنده مدل شما و Deepgram عبور می‌کنند. Iva دارای مجوز MIT است، بنابراین می‌توانید دقیقاً محتوای ارسالی را بخوانید و آن را تغییر دهید. لیست مجاز (allowlist) تلگرام به صورت fail closed عمل می‌کند، به این معنی که یک TELEGRAM_ALLOWED_USER_IDS خالی، دسترسی همه، از جمله خود شما را مسدود می‌کند.

Iva از کدام ارائه‌دهندگان مدل پشتیبانی می‌کند؟

MODEL_PROVIDER از opencode (OpenCode Go)، ollama (Ollama Cloud)، openrouter و codex پشتیبانی می‌کند. OpenRouter از slugهای فروشنده مانند anthropic/claude-sonnet-4.5 استفاده می‌کند و گسترده‌ترین انتخاب مدل‌ها را ارائه می‌دهد. codex با استفاده از iva login به اشتراک فعلی ChatGPT وارد می‌شود و نیازی به API key ندارد. ارائه‌دهنده را تنظیم کنید، پنجره context منطبق را روی اندازه واقعی مدل قرار دهید و سپس iva restart را اجرا کنید، زیرا مدل فقط یک‌بار در زمان شروع پردازش خوانده می‌شود.