رفتن به محتوا

پیکربندی

ZenCopy از همان روز اول بدون هیچ پیکربندی‌ای کار می‌کند. این صفحه برای وقتی است که بخواهید آن را بیشتر به سلیقهٔ خود درآورید. نیمهٔ اول دربارهٔ پنجرهٔ تنظیمات برای همه است؛ نیمهٔ دوم دربارهٔ فایل‌های پیکربندی برای کاربران حرفه‌ای.

آن را از منوی آیکون سینی سیستم یا آیکون چرخ‌دنده روی پنجرهٔ بازشو باز کنید. سه تب دارد: عمومی، هوش مصنوعی و اکشن‌ها.

  • موقعیت پنجرهٔ بازشو — نتیجه‌ها در کدام گوشهٔ صفحه ظاهر شوند.
  • پوسته — روشن / تیره / مطابق سیستم.
  • زبان — زبان نمایش (به‌طور پیش‌فرض از سیستم‌عامل شما پیروی می‌کند).
  • اجرا هنگام ورود — تا هر وقت رایانه روشن است، ZenCopy هم آماده باشد.
  • تأیید پیش از ارسال تصاویر و فایل‌ها — این‌که پیش از رفتن تصویرها یا فایل‌ها به هوش مصنوعی، یک بار پرسیده شود یا نه.

سرویس هوش مصنوعی (ارائه‌دهنده، مدل، کلید API) را این‌جا عوض می‌کنید. دکمهٔ آزمایش بی‌درنگ می‌گوید اتصال برقرار است یا نه.

این تب فیلد دربارهٔ شما را هم دارد. جایی است برای این‌که نقش و ترجیح‌هایتان را در چند جملهٔ ساده و به هر زبانی بنویسید.

مثال: «فروش. بیشتر ایمیل برای مشتری می‌نویسم — مؤدبانه اما نه خشک، اول نتیجه.»

وقتی این فیلد پر باشد، هر اکشن نتیجه‌هایش را برای شما تنظیم می‌کند. توضیح‌ها هم‌سطح دانسته‌های شما می‌رسند و پیش‌نویس‌ها با لحن دلخواهتان برمی‌گردند. روی کارهای بی‌ربط هرگز اثری نمی‌گذارد و خود متن هم هیچ‌گاه در نتیجه‌ها ظاهر نمی‌شود.

فهرست «بعد از دو بار کپی چه اتفاقی بیفتد».

  • اکشن‌های از پیش نصب‌شده را می‌توان باز کرد و خواند — همان‌ها نمونه‌های کارشده هم هستند.
  • ساختن یک اکشن جدید چیزی جز یک نام و شرح کاری که می‌خواهید لازم ندارد. مثال: نام «خلاصهٔ ۳ خطی»، دستور «در ۳ خط خلاصه کن».
  • به نوشتن دستور مطمئن نیستید؟ خواسته‌تان را سرسری بنویسید و پیش‌نویس با هوش مصنوعی را فشار دهید — هوش مصنوعی پیکربندی‌شده‌تان آن را به دستوری درست‌وحسابی تبدیل می‌کند.
  • مسیریابی اجازه می‌دهد برای هر نوع محتوا (متن / تصویر / فایل‌ها) اکشن جداگانه‌ای انتخاب کنید.

اکشن‌هایی که می‌سازید قابل هم‌رسانی‌اند: برون‌بری آن را به‌صورت یک فایل می‌نویسد و گیرنده کافی است آن را در درون‌ریزی بچسباند یا فایل را انتخاب کند.

ترجیح می‌دهید کل کار را به یک هوش مصنوعی بسپارید؟ هر چت هوش مصنوعی می‌تواند یک اکشن آماده برای وارد کردن برای شما بنویسد — این را جای‌گذاری کنید و جای خالی را پر کنید:

آدرس https://zencopy.app/llms-full.txt را بخوانید — مستندات کامل ZenCopy، شامل فرمت فایل اکشن، متغیرهای الگو و نحوه کارکرد مسیریابی. سپس یک اکشن ZenCopy بنویسید که کار زیر را انجام دهد: [آنچه می‌خواهید]. یک فایل اکشن کامل (Markdown همراه با frontmatter) را در یک بلوک کد واحد خروجی دهید، آماده برای جای‌گذاری در تنظیمات ← اکشن‌ها ← وارد کردن در ZenCopy. اگر اکشن فقط در یک برنامه خاص یا در یک سایت خاص منطقی است، یک جمله اضافه کنید و به من بگویید کدام قانون مسیریابی را تنظیم کنم.

بلوک کد موجود در پاسخ مستقیماً به تنظیمات ← اکشن‌ها ← وارد کردن می‌رود. برای سوالاتی که مستندات نمی‌توانند به آن‌ها پاسخ دهند («آیا ZenCopy اصلاً می‌تواند…؟»)، با یک کلیک سورس مربوطه بسته‌بندی می‌شود — نتیجه را به همان هوش مصنوعی بدهید.

فایل‌های پیکربندی (برای کاربران حرفه‌ای)

Section titled “فایل‌های پیکربندی (برای کاربران حرفه‌ای)”

از این‌جا به بعد، صحبت از ویرایش مستقیم فایل‌های متنی است. هر چیز ضروری از پنجرهٔ تنظیمات در دسترس است، پس اگر مایل نیستید، همین‌جا خواندن را متوقف کنید.

فایل‌ها از پوشهٔ پیکربندی برنامه، مخصوص هر کاربر، خوانده می‌شوند. مسیر دقیق هنگام راه‌اندازی در گزارش هم چاپ می‌شود:

%APPDATA%\app.zencopy

پیش‌فرض‌های مسیریابی درون خود برنامه تعبیه شده‌اند؛ routing.json همیشه فقط آن‌ها را بازنویسی می‌کند. فایل‌های اکشن افزودنی‌اند: اکشن‌های جدید تعریف می‌کنند و اکشن‌های داخلی دست‌نخوردنی می‌مانند (فایل محلی‌ای که id یک اکشن داخلی را ادعا کند نادیده گرفته می‌شود). ویرایش‌ها از راه‌اندازِ بعدی اعمال می‌شوند — نیازی به راه‌اندازی دوباره نیست.

ارائه‌دهنده‌ها به‌علاوهٔ نگاشت role ← مدل. خانهٔ اصلی این قالب فایل ai-sdk-catalog است — تمام فیلدها آن‌جا مستند شده‌اند (از جمله یک $schema برای اعتبارسنجی و تکمیل خودکار در ویرایشگر) و در examples/ پیکربندی‌هایی در سه اندازه آماده است. برای نقطه‌های شروع مخصوص ZenCopy (آنچه رابط تنظیمات می‌نویسد، Ollama محلی، role برای اکشن‌ها) نمونه‌های آماده را ببینید.

یک الزام از خود ZenCopy است، نه از قالب فایل: roles باید همیشه شامل default باشد. هر اکشنی که در frontmatter خود role دیگری مشخص نکرده باشد با آن اجرا می‌شود و آزمون اتصال در تنظیمات نیز به آن ping می‌فرستد.

کلیدهای API مستقیماً در همین فایل محلی نوشته می‌شوند (رابط تنظیمات هم همین قالب را می‌نویسد)؛ هرگز از دستگاه شما بیرون نمی‌روند. متغیرهای محیطی خوانده نمی‌شوند — برنامه‌های گرافیکی را سیستم‌عامل اجرا می‌کند نه شل شما، پس متغیرهایی که در .zshrc و مانند آن export شده‌اند اصلاً به آن‌ها نمی‌رسند. این فایل در هر بار خواندن با schema اعتبارسنجی می‌شود. یک ویرایش خراب، به‌صورت پیامی روشن در پنجرهٔ بازشو و ویرایشگر تنظیمات ظاهر می‌شود — هیچ چیزی بی‌صدا شکست نمی‌خورد.

کدام اکشن کدام نوع برداشت را پردازش کند: یک نگاشت ساده و مسطح از kind ← action به‌علاوهٔ فهرست اختیاری و پراولویت‌تر overrides (نخستین تطبیق برنده است). چهار نوع عبارت‌اند از text، rich_text، image و files؛ در حالت اولیه، متن به Zen و تصویرها و فایل‌ها به توضیح مسیر داده می‌شوند. نگاشت مسطح داخل خود برنامه قابل ویرایش است (تنظیمات ← اکشن‌ها ← مسیریابی)، پس فقط برای overrides لازم است به این فایل دست بزنید.

{
"text": "zencopy-zen",
"rich_text": "zencopy-zen",
"image": "zencopy-explain",
"files": "zencopy-explain",
"overrides": [{ "when": { "app_name": "Slack", "min_chars": 200 }, "action": "summarize" }]
}

شرط‌های when: ‏kind، ‏app_name، ‏exec_name، ‏window_title، ‏url (همگی با پشتیبانی wildcard یعنی *)، ‏file_name (یک الگو با wildcard که نام هر فایل کپی‌شده باید با آن مطابقت داشته باشد، بدون حساسیت به بزرگی و کوچکی حروف — مثلاً *.pdf)، به‌علاوهٔ min_chars / max_chars.

در برداشت‌های image و files، خود محتوا به مدل فرستاده می‌شود (در هر برداشت جمعاً تا ۱۰ مگابایت). نوع فایل از محتوا تشخیص داده می‌شود، نه از نام: تصویرها، PDFها و فایل‌های صوتی همان‌طور که هستند پیوست می‌شوند، و فایل‌های متنی (Markdown، کد منبع، CSV و …) به متن برداشت ({{ text }}) تبدیل می‌شوند و دقیقاً مانند وقتی رفتار می‌کنند که محتوایشان را کپی کرده باشید. اسناد Office (Word، Excel، PowerPoint) نیز به متن تبدیل می‌شوند: محتوای آنها استخراج و ارسال می‌شود، اما طرح‌بندی و تصاویرشان ارسال نمی‌شوند. رمزگذاری نویسه‌ها خودکار تشخیص داده می‌شود و قالب‌های قدیمی مانند Shift_JIS و UTF-16 تبدیل می‌شوند. هر چیز دیگری با پیامی روشن رد می‌شود. مسیر کامل فایل‌ها همراه محتوا فرستاده می‌شود تا مدل بتواند فایل‌ها را از هم تشخیص دهد و بداند کجا قرار دارند. چون پیوست‌های دودویی می‌توانند از متن گران‌تر باشند، پنجرهٔ بازشو پیش از ارسال آن‌ها می‌پرسد (فایل‌های متنی بدون پرسش اجرا می‌شوند) — این تأیید را می‌توان همان‌جا یا در تنظیمات خاموش کرد.

یک فایل = یک اکشن: ‏frontmatter از نوع YAML به‌علاوهٔ بدنهٔ پرامپت با قالب Liquid. همین تک‌فایل، قالب هم‌رسانی هم هست — تنظیمات ← اکشن‌ها ← درون‌ریزی آن را به‌صورت متن چسبانده‌شده یا فایل انتخاب‌شده می‌پذیرد.

---
id: summarize
label: خلاصه
role: default
instructions: تو دستیاری موجز هستی.
---
در ۳ خط و به زبان {{ locale }} خلاصه کن:
{{ text }}
Frontmatterمعنا
idنامی که routing.json به آن ارجاع می‌دهد (پیش‌فرض: نام فایل) — پیشوند zencopy- مخصوص اکشن‌های ازپیش‌نصب‌شده است
labelدر پنجرهٔ بازشو نمایش داده می‌شود
role‏role کاتالوگ برای اجرا (پیش‌فرض: default)
instructionsپرامپت سیستمی (قالب Liquid)

متغیرهای قالب، با مقدارهای نمونه برای بندی که در مرورگر کپی شده باشد:

متغیرنمونه
{{ text }}متن کپی‌شده (کپی‌های قالب‌دار HTML به Markdown تبدیل می‌شوند)
{{ markup }}منبع HTML/RTF یک کپی قالب‌دار
{{ format }}html (یا rtf؛ برای کپی ساده خالی است)
{{ file_name }}report.pdf (نام اولین فایل کپی‌شده)
{{ file_names }}نام تمامی فایل‌های کپی‌شده، هر کدام در یک سطر
{{ file_paths }}مسیر کامل تمامی فایل‌های کپی‌شده، هر کدام در یک سطر
{{ app_name }}Safari
{{ exec_name }}Safari / chrome.exe
{{ exec_path }}/Applications/Safari.app/Contents/MacOS/Safari
{{ window_title }}قیمت‌ها – Example
{{ url }}https://example.com/pricing (فقط در مرورگرها)
{{ process_id }}8123
{{ now }}2026-07-08 20:15:00
{{ locale }}fa

یک فیلتر مخصوص ZenCopy به نام language_name هم هست: ‏{{ locale | language_name }} به‌جای «fa» به «Persian» بسط می‌یابد که در یک پرامپت طبیعی‌تر خوانده می‌شود. برای دیدن مقدارهای واقعی، حالت توسعه‌دهنده را در تنظیمات فعال کنید — متغیرهای قالب هر برداشت به‌صورت JSON در پنجرهٔ بازشو ظاهر می‌شوند.

اکشن‌های ساده (یک نام و یک دستور) از پنجرهٔ تنظیمات هم ساخته می‌شوند؛ آنچه می‌نویسد دقیقاً همین قالب فایل است.

هم frontmatter مربوط به instructions و هم بدنه، قالب کامل LiquidJS هستند: شرط‌ها، حلقه‌ها و فیلترها همگی کار می‌کنند. یک اکشن به‌تنهایی می‌تواند خود را با جایی که کپی از آن آمده تطبیق دهد:

---
id: context-aware
label: متناسب با بافت
---
{% if url contains "github.com" %}
این کد را بازبینی کن و بزرگ‌ترین ریسک آن را در یک مورد بگو:
{% elsif app_name == "Slack" %}
این رشته‌گفتگو را در ۲ خط خلاصه کن:
{% else %}
این را به زبان {{ locale }} توضیح بده:
{% endif %}
{{ text | truncate: 8000 }}

گزارش‌های ساخت‌یافته (اطلاعات محرمانه و محتوای کپی‌شده حذف می‌شوند) در حالت dev به ترمینال و در نسخهٔ release به فایلی چرخشی نوشته می‌شوند:

%LOCALAPPDATA%\app.zencopy\logs