jg یک خط فرمان به‌همراه یک اسکیل ایجنت است که به‌جای جست‌وجوی متنی، فایل‌های مرتبط و تکه‌کد را از روی پرسش شما برمی‌گرداند. نسخه‌ی ۰٫۸٫۰ آن روی همین سرور نصب شد، ریپو ۲۰۱۰ ستاره دارد، و دستور jg files بدون هیچ کلیدی کار می‌کند و روی ۴۳ پست این سایت، ۴۳ فایل و ۱٫۶ میگابایت را شمرد. جست‌وجوی واقعی بدون کلید ممکن نیست و در این نوشته اجرا نشده است.

jg چه می‌کند و چه چیزی نیست

jg که مخزنش dzhng/jevgrep است، کد را نمی‌خواند تا به شما جواب بدهد؛ کد را برای ایجنت شما پیدا می‌کند.

مدل Jev در صفحه‌ی خودش در Vercel AI Gateway یک مدل داوری است: وضعیت مشترک را در برابر پرسش‌های تایپ‌شده می‌سنجد و گزینه، امتیاز و احتمال بولی برمی‌گرداند.

خروجی jg چهار تکه دارد و همیشه به همین ترتیب می‌آید: یک خلاصه، فهرست رتبه‌بندی‌شده‌ی فایل‌ها، «سرنخ‌های خواندن»، و در پایان تکه‌کد عیناً از فایل با شماره‌ی خط.

مستندات خود پروژه تصریح می‌کند که این خروجی پاسخ تولیدشده نیست و همه‌ی فایل‌های مرتبط را پیدا نمی‌کند؛ برچسب‌های نقش و ارتباط، تخمین هستند.

در همان لحظه‌ی خواندن (۲ اکتبر ۲۰۲۶ / ۱۰ مهر ۱۴۰۵) ریپو ۲۰۱۰ ستاره، ۱۳۲ فورک، ۲۴ مسأله‌ی باز، زبان TypeScript و پروانه‌ی MIT دارد.

نصب واقعی روی این سرور

نصب یک خط است و روی Node.js 26.7.0 و npm 11.19.0 این سرور انجام شد.

# نصب سراسری و گرفتن نسخه‌ای که واقعا نصب شد
$ npm install -g @dzhng/jevgrep
added 3 packages in 2s

$ jg --version
0.8.0

# همان عدد از رجیستری npm، نه از حافظه‌ی ابزار
$ npm view @dzhng/jevgrep version license time.modified
version = '0.8.0'
license = 'MIT'
time.modified = '2026-10-01T21:29:43.932Z'

پیش‌نیازها دو چیزند: Node.js نسخه‌ی ۲۲ به بالا، و یک کلید برای یکی از سه ارائه‌دهنده‌ی Vercel AI Gateway، TypeSafe یا OpenRouter.

ریتم انتشار در پنج روز اول تند بود: هشت برچسب انتشار از v0.4.0 در ۲۷ سپتامبر تا v0.8.0 در ۱ اکتبر، و ۱۵ نسخه‌ی منتشرشده در رجیستری npm.

مستندات خود پروژه می‌گوید نصب جداگانه‌ی Python، Bun یا ripgrep لازم نیست، و روی این سرور هم هیچ‌کدام نصب نبود؛ فقط همین ادعا را نتوانستم با یک جست‌وجوی واقعی راستی‌آزمایی کنم.

jg files: شمارش پیش از پرداخت

jg files تنها زیربرنامه‌ای است که هیچ درخواستی به ارائه‌دهنده نمی‌فرستد و فقط فایل‌های واجد شرایط و حجمشان را می‌شمارد.

روی پوشه‌ی پست‌های همین سایت، که یک درخت واقعی و کوچک است:

$ jg files /var/www/xn--zgb1bd.com/posts
Jevgrep files: 43 files eligible (1.6 MiB). No provider requests were made.
- "2026-09-27-langgraph-interrupt-review" — 1 file, 44.7 KiB
- "2026-09-28-rmsnorm-vs-layernorm" — 1 file, 43.7 KiB
- "2026-09-29-grouped-query-attention" — 1 file, 42.3 KiB
End files.

$ du -sh /var/www/xn--zgb1bd.com/posts
1.6M

$ jg files ./nope-does-not-exist
The root must be an existing directory.

عدد ۴۳ با شمارش دستی پوشه‌های تاریخ‌دار روی دیسک می‌خواند و ۱٫۶ میگابایت با du می‌خواند، پس شمارنده‌ی فایل و گزارش حجم با واقعیت هم‌خوان است.

مقیاس را روی دو ریشه‌ی بزرگ‌تر هم سنجیدم: درخت پروژه ۸۳۱ فایل و ۲۳۳٫۱ میگابایت گزارش شد، و درخت source هرمز ۱۶٬۰۲۱ فایل و ۱۷۸٫۴ میگابایت؛ هر دو بدون کلید اجرا شدند.

این عدد یک کران بالاست، نه یک تخمین دقیق: خود ابزار می‌گوید بررسی محتوا هنگام جست‌وجو می‌تواند فایل‌های بیشتری را کنار بگذارد، چون فایل دودویی، فایل شبیه‌ی اعتبار و فایل بالای ۱۶ میگابایت حذف می‌شوند.

--exclude هم فقط محدود می‌کند. روی یک درخت ۵ فایلی، حذف سه پوشه‌ی تاریخ‌دار، شمارش را از ۵ به ۲ فایل رساند و ۲۰۸٫۶ کیلوبایت را به ۸۴٫۸ کیلوبایت کاهش داد؛ du همان درخت را ۲۳۶ کیلوبایت نشان می‌دهد.

جست‌وجوی واقعی، و چیزی که نتوانستم اجرا کنم

روی این سرور هیچ کلیدی برای هیچ‌یک از سه ارائه‌دهنده وجود ندارد، و ابزار هم دقیقاً همین را می‌گوید و با کد خروج ۱ می‌ایستد:

$ jg doctor
Run jg auth or use jg auth --provider NAME --stdin.

$ jg "How is the category badge rendered?" /var/www/xn--zgb1bd.com/posts
Run jg auth or use jg auth --provider NAME --stdin.

یعنی جست‌وجوی واقعی را در این نوشته اجرا نکرده‌ام و هیچ عددی درباره‌ی کیفیت خروجی jg را از خودم نمی‌گویم.

آنچه جای خروجی واقعی را می‌گیرد، فایل نمونه‌ی خروجی ثبت‌شده‌ی خود پروژه است؛ یک ریپوی کوچک سه فایل دارد و خروجی این است:

Jevgrep: 3 relevant files.
- "src/backend/events.ts" — implementation, caller, test, fixture, helper
  Reading lead BackendTelemetry.recordEvent: lines 4-6
- "src/telemetry.ts" — implementation, caller, test, fixture, helper
- "tests/telemetry.test.ts" — implementation, caller, test, fixture, helper
End file list.

Source block "src/telemetry.ts" lines 1-7:
1: // Events preserve the caller's name.
2: export class Telemetry {
3:   recordEvent(name: string) {
4:     return { name, recorded: true };
5:   }
6: }

نکته‌ی دوم این است که نصب CLI به‌تنهایی کافی نیست؛ اسکیل جداگانه نصب می‌شود و از راه یک ابزار واسط انجام می‌گیرد.

$ jg skill --yes
●  Installing to: Claude Code, Codex, Hermes Agent
◇  Installation Summary
│  ~/.hermes/cache/scratch/jgskill/.agents/skills/jevgrep
│    universal: Codex, Amp, Antigravity, Cline +15 more
│    symlink → Claude Code, Hermes Agent
●  Installed 1 skill

قفل نصب، منبع را با هش محتوا ثبت می‌کند، و اسکیل به‌صورت symlink در پوشه‌ی هر ایجنت قرار می‌گیرد، نه یک کپی.

قیمت هم یک عدد است: صفحه‌ی Jev در Vercel AI Gateway برای ورودی، ۰٫۰۴ دلار به ازای هر یک میلیون توکن با پنجره‌ی ۳۲ هزار توکن می‌نویسد.

حساب دوباره‌ی عددهای بنچمارک

پروژه یک جدول سنجه دارد که در گزارش تکرار با همان runtime منتشر شده است؛ اعداد زیر عیناً از همان فایل برداشته شده‌اند.

سنجهخط پایه‌ی ذخیره‌شدهگروه اصلاح‌شده‌ی اولتکرار با همان runtime
مسئله‌های حل‌شده8/106/107/10
حل‌شده‌های خط پایه که حفظ شدند—6/87/8
حل‌شده‌هایی که از خط پایه ارزان‌تر بودند—44
هزینه‌ی کامل Sol با احتساب شکست‌ها$7.6220690$5.5410776$4.5195532
صرفه‌جویی Sol—27.30%40.70%
پذیرش دروازه‌ی کیفیت اصلی—falsefalse

دو درصد را خودم دوباره حساب کردم تا با اعداد همین جدول بخواند: برای گروه اول (۷٫۶۲۲۰۶۹۰ − ۵٫۵۴۱۰۷۷۶) ÷ ۷٫۶۲۲۰۶۹۰ = ۲۷٫۳۰ درصد، و برای تکرار (۷٫۶۲۲۰۶۹۰ − ۴٫۵۱۹۵۵۳۲) ÷ ۷٫۶۲۲۰۶۹۰ = ۴۰٫۷۰ درصد.

اما سطر «صرفه‌جویی Sol» روی هزینه‌ی Sol حساب شده، و هزینه‌ی Jev از آن بیرون گذاشته شده است؛ جمع که کنیم $4.5195532 + $1.021334412 = $5.5408876 در برابر $5.5410776 گروه اول، یعنی اختلاف حدود ۰٫۰۰۰۲ دلار.

پس «۴۰ درصد ارزان‌تر» یک عدد فقط-Sol است، و اگر هزینه‌ی خود Jev را هم حساب کنیم، مجموع دو گروه عملاً یکی می‌شود. خود گزارش هم می‌گوید جمع کامل Jev در تکرار نامعلوم است و این فقط زیرمجموعه‌ی شناخته‌شده است، پس $5.54 یک کران بالاست.

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

اگر می‌خواهید بدانید عددهای جدید یک ابزار را چطور راستی‌آزمایی کنید، مطلب سنجش هزینه‌ی کانتکست همین کار را برای فایل پیکربندی کدکس انجام داده است.

کِی بسپاریم و کِی نه

یک وضعیت مشخص: شما وارد ریپویی ناآشنا شده‌اید، می‌دانید رفتاری که می‌خواهید چگونه کار می‌کند، و نمی‌دانید در کدام فایل زندگی می‌کند.

همین‌جا jg جای اولین جست‌وجوی شماست، چون خود اسکیلش می‌گوید برای پرسش‌های «چگونه»، «چرا» و «کجا» اول سراغ jg بروید.

دو استثنا را جدی بگیرید. برای نماد دقیق یا نام فایل، جست‌وجوی متنی و خواندن مستقیم فایل کافی است و سریع‌تر است.

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

اگر می‌خواهید بدانید یک ریپوی تازه اصلا ارزش دنبال‌کردن دارد یا نه، معیارهای ارزیابی ریپوی ترند همان فیلتر اول است.

جمع‌بندی: jg بخشی از کاری را خودکار می‌کند که کمتر از همه دیده می‌شود و بیشتر از همه پول می‌بلعد، یعنی پیداکردن فایل درست. ولی عدد خودش هم یک هشدار است: صرفه‌جویی اعلام‌شده به هزینه‌ی خود ابزار وابسته است و کیفیت را تضمین نمی‌کند.

  1. ریپوی jevgrep روی گیت‌هاب
  2. بسته‌ی @dzhng/jevgrep در رجیستری npm
  3. مستندات jevgrep در ریپو (README)
  4. فایل SKILL.md اسکیل jevgrep
  5. گزارش تکرار با همان runtime و جدول هزینه‌ها
  6. صفحه‌ی مدل Jev در Vercel AI Gateway
  7. ابزار skills که نصب اسکیل را انجام می‌دهد
  8. نمونه‌ی خروجی استاندارد jevgrep روی سه فایل