تصور کنید یک برنامهنویس ساعتها وقت صرف رفع یک باگ پیچیده کرده است، اما دو هفته بعد، عامل هوش مصنوعی او دوباره همان مسیر اشتباه را طی میکند چون هر چه اتفاق افتاده را فراموش کرده است. این «آلزایمر دیجیتال» در عاملهای کدنویسی اکنون با تبدیل فایلهای لاگ ساده به یک پایگاهدادهی فعال، به پایان رسیده است.
در ۱۵ ژوئیه ۲۰۲۶، توسعهدهندهای به نام vshulcz ابزار deja-vu را منتشر کرد؛ یک فایل باینری بدون پیشنیاز که گیگابایتها دادهی متنی ذخیرهشده توسط عاملها را به یک لایهی حافظه قابل جستوجو تبدیل میکند.
عاملهای مدرنی مثل Claude Code، Codex و opencode تمام تصمیمات طراحی و هر خطای رفعشده را در فایلهای JSONL یا SQLite محلی ذخیره میکنند. اما این دادهها تا امروز «دادههای مرده» بودند؛ یعنی آرشیوی جامع که اما غیرقابل جستوجو است و عامل نمیتواند پس از شروع یک جلسه جدید، آنها را به یاد آورد. شما احتمالاً با این کلاف سردرگم روبرو شدهاید که یک عامل دوباره روی مشکلی که دو هفته پیش حل کردهاید وقت تلف میکند، صرفاً به این دلیل که آن را فراموش کرده است. این چالش مدیریتی با معرفی قابلیتهای جدید مدیریت نشستها در Claude Code مورد توجه قرار گرفته بود تا دسترسی به تاریخچهی تعاملات تسهیل شود.
همانطور که در تحلیل قبلی ما دربارهی نحوهی بهرهبرداری توسعهدهندگان مستقل از پروتکل زمینهٔ مدل (MCP) برای گسترش قابلیتهای عاملها اشاره کردیم، deja-vu یک مکانیسم خاص برای بازیابی حافظه را پیادهسازی میکند. این ابزار بهجای تکیه به پایگاههای داده برداری (Vector Database) ابری — که شبیه به یک انبار عظیم است که هر شیء را بر اساس شباهتهای بصری دستهبندی میکند — از یک «اندیس معکوس» (Inverted Index) محلی در مسیر ~/.cache/deja بهره میبرد. طبق مستندات این پروژه در گیتهاب، این رویکرد تضمین میکند که هیچ دادهای هرگز از دستگاه کاربر خارج نشود و ریسکهای حریم خصوصی مرتبط با پلتفرمهای حافظه شخص ثالث بهطور کامل حذف شوند.
معماری فنی و سرعت عملیاتی
این ابزار برای پردازش با کارایی بسیار بالا روی مجموعههای داده واقعی طراحی شده است. deja-vu فایلهای JSONL و ذخیرهسازهای SQLite را تحلیل (Parse) کرده، اطلاعات حساس و اعتبارنامهها را حذف میکند و سپس فایلهای records.bin و «سطلهای توکن» (Token Buckets) را میسازد. برای بهینهسازی، یک فایل manifest.json وضعیت هر فایل را ردیابی میکند تا اطمینان حاصل شود که فقط فایلهای تغییریافته دوباره خوانده میشوند. این پردازش دقیق دادهها یادآور تحلیلهای پیشین ما دربارهی بهینهسازی فایلهای JSONL در Claude Pulse برای کاهش هزینههای عملیاتی در محیط ترمینال است.
بر اساس گزارشهای منتشرشده در گیتهاب، آزمایش روی مجموعهای با بیش از ۱۲۵۰ نشست (حدود ۳.۳ گیگابایت) نتایج زیر را داشته است:
- تأخیر جستوجو: جستوجوهای گرم (Warm Searches) بهطور معمول بین ۷ تا ۹ میلیثانیه و در بدترین حالت ۴۰ میلیثانیه زمان میبرند.
- سرعت اندیسگذاری: ایجاد اندیس برای کل مجموعه داده در حالت سرد (Cold Index) حدود ۱۰ ثانیه زمان میبرد.
- بهرهوری ذخیرهسازی: حجم اندیس نهایی بسیار بهینه است و تنها حدود ۲.۴٪ از حجم کل دادههای اولیه را اشغال میکند.
قابلیتهای کلیدی و ادغام با گردش کار
deja-vu صرفاً یک موتور جستوجوی متنی نیست، بلکه از طریق یک سرور MCP مستقیماً با جریان کاری عامل ادغام میشود. این امر به عاملها اجازه میدهد تا از ابزار recall برای یافتن قطعات متنی متراکم و متناظر (که برای صرفهجویی در پنجرهٔ زمینه یا Context Window به ۴ کیلوبایت محدود شدهاند — که شبیه به میز کاری کوچک است و فقط تعداد محدودی برگه را همزمان جای میدهد) یا ابزار recall_context برای دریافت یک خلاصهی Markdown از بهترین نشستهای مرتبط استفاده کنند.

یکی از حیاتیترین ویژگیها، قلاب نصب --auto است. این قابلیت یک تریگر در لحظهی شروع نشست (SessionStart) ایجاد میکند؛ به این معنا که خاطرات مرتبط با پروژه فعلی پیش از آنکه کاربر سوالی بپرسد، به بستر متن عامل تزریق شود. این فراخوانی خودکار حالت «فقط خواندنی» دارد و برای جلوگیری از کند شدن یا مختل کردن استارتآپ عامل، به ۲ کیلوبایت محدود شده است. همچنین کاربران میتوانند با دستور deja ctx "query" بهطور دستی زمینه را به یک پرامپت منتقل کنند.
مدیریت حافظه و ابزارهای خط فرمان
علاوه بر ادغام با عامل، یک رابط خط فرمان (CLI) قدرتمند برای مدیریت دستی حافظه وجود دارد:
- تحلیل و جستوجو: دستور
deja <query>با استفاده از منطق AND برای پرسوجوهای چند-کلمهای در تمام تاریخچهها جستوجو میکند. کاربران میتوانند نتایج را بر اساس--harness(نوع ابزار)،--project(پروژه)،--role(نقش) یا بازه زمانی با دستور--since 30dفیلتر کنند. - بازرسی: دستور
deja show <id>یک نشست خاص را میخواند، در حالی کهdeja last [n]لیست آخرین نشستها را نمایش میدهد. دستورdeja sourcesجزئیات مربوط به ذخیرهسازهای کشفشده، حجمها و تعداد موارد سانسورشده را ارائه میدهد. - وضعیت سلامت: دستور
deja statsآمار کلی، تفکیک بر اساس هر Harness، پروژههای برتر و یک نمودار فعالیت ماهانه (Sparkline) را به صورت متنی یا با پرچم--jsonتولید میکند. - نگهداری: دستور
deja warmupاجازه میدهد کاربران اندیس را بدون نیاز به انجام جستوجو بهروزرسانی کنند، که این قابلیت برای کارهای برنامهریزیشده (cron jobs) یا اسکریپتهای استارتآپ شل ایدهآل است.
امنیت و حریم خصوصی
امنیت در مرحلهی اندیسگذاری تامین میشود. این ابزار بهطور خودکار کلیدهای API، توکنهای JWT، کلیدهای خصوصی PEM و توکنهای ارائهدهندگان (مانند ghp_ برای گیتهاب، sk- برای OpenAI، npm_ یا xox. و AIza) را از اندیس حذف میکند. همچنین تخصیصهای عمومی مانند api_key= یا token= و URLهایی با ساختار scheme://user:pass@host شناسایی و سانسور میشوند. این موارد با عبارت [redacted:<kind>] جایگزین میشوند تا ضمن حفظ بستر متن برای جستوجو، اسرار امنیتی هرگز وارد حافظه موقت، اشتراکها یا خروجیهای همگامسازی نشوند. اگرچه کاربر میتواند با متغیر محیطی DEJA_NO_REDACT=1 این مورد را غیرفعال کند، اما این کار صریحاً «ناامن» علامتگذاری شده است.
همگامسازی و همکاری تیمی
برای مدیریت سیستمهای چند-دستگاهی، deja-vu مکانیزم همگامسازی دارد. کاربران میتوانند دو ماشین را به یک پوشه مشترک (از طریق iCloud، Syncthing یا یک مخزن git) متصل کنند یا با دستور deja sync ssh دستههای JSONL را بین میزبانها جابهجا (Push و Pull) کنند.
در همگامسازی مبتنی بر SSH، ابزار از ssh/scp سیستم استفاده کرده و به دنبال فایل باینری در PATH ریموت میگردد (و در صورت عدم یافتن، مسیر ~/.local/bin/deja را بررسی میکند). این فرآیند «همپوشانیناپذیر» (Idempotent) و «فقط افزایشی» (Append-only) است؛ یعنی رکوردها هرگز به مبدأ خود باز نمیگردند. یک پرچم --full اجازه میدهد همه چیز بدون توجه به واترمارکها دوباره صادر شوند، که هنگام اضافه کردن یک ماشین جدید پس از پاک شدن دستههای قدیمی مفید است. نشستهای همگامسازیشده در نتایج جستوجو بهوضوح با برچسب imported:<project> مشخص میشوند.
برای همکاری تیمی، دستور deja share <id> یک خلاصهی پاکسازیشده از یک نشست ایجاد میکند. این دستور نویزهای ابزاری را حذف کرده و سانسورهای امنیتی را اعمال میکند تا کاربر بتواند تاریخچہی تمیز حل یک باگ خاص را بدون افشای اعتبارنامهها در اختیار همکاران قرار دهد.
سازگاری با ابزارها و مقایسه
در حال حاضر، deja-vu از سه ابزار اصلی پشتیبانی میکند:
- Claude Code: مسیرهای
~/.claude/projects/**/*.jsonl - Codex CLI: مسیرهای
~/.codex/sessions/**و فایلhistory.jsonl - opencode: دیتابیس
~/.local/share/opencode/opencode.db(که با فراخوانی CLIsqlite3اندیسگذاری میشود)
پشتیبانی از aider و Gemini CLI در نقشه راه قرار دارد. کاربران همچنین میتوانند مکانهای سفارشی را از طریق متغیرهای محیطی مانند DEJA_CLAUDE_ROOT یا DEJA_INDEX_DIR تعریف کنند.
تفاوت اصلی این ابزار با پلتفرمهایی مثل Mem0 یا Letta در این است که آنها به عنوان حافظههای فعال عمل میکنند که شامل جاسازیها (Embeddings) و ذخیرهسازهای برداری هستند، اما deja-vu «پسنگر» (Retroactive) است. این رویکرد برای مقابله با زوال حافظه در عاملهاست، مشابه آنچه ابزار AIClaw با استفاده از ذخیرهسازی دو جریانی برای مدیریت حقایق پیادهسازی کرده بود. یعنی نیاز نیست قلاب ضبط داده از روز اول نصب شده باشد؛ این ابزار صرفاً آنچه را که عاملها پیش از این روی دیسک نوشتهاند — حتی تاریخچههای مربوط به ماهها پیش از نصب ابزار — اندیسگذاری میکند.
همچنین برخلاف ابزار cass که رابط گرافیکی (TUI) و ۲۲ ارائهدهنده دارد، deja-vu بر مینیمال بودن تمرکز کرده و تنها یک فایل باینری Go است که برای سرعت حداکثری از جستوجوی لغوی (Lexical Search) خالص استفاده میکند. اگر کاربر بخواهد تمام دادهها را پاک کند، میتواند دستور deja uninstall --all را اجرا کرده و دایرکتوری ~/.cache/deja را حذف نماید.
این تغییر رویکرد نشان میدهد آیندهی حافظهی عاملها لزوماً در پایگاههای داده برداری عظیم نیست، بلکه در اندیسگذاری بهینه «آثار جانبی» (لاگها) است که عاملها همین حالا تولید میکنند. برای توسعهدهنده، این به معنای کاهش شدید «انحراف زمینه» (Context Drift) و افزایش چشمگیر قابلیت اطمینان در نگهداری بلندمدت پروژهها است.
گام بعدی شما
اگر میخواهید این ابزار را در گردش کار خود ادغام کنید، میتوانید آن را از طریق Homebrew (brew install vshulcz/tap/deja-vu)، یک اسکریپت curl یا از طریق Go/npm نصب کنید. برای اینکه عامل شما واقعاً به یاد بیاورد:
- دستور
deja install --allرا برای فعالسازی MCP و قلاب شروع نشست (Session-start hook) اجرا کنید. - یک دستورالعمل به فایل
CLAUDE.mdیاAGENTS.mdپروژه خود اضافه کنید و به عامل بگویید پیش از آنکه برای پیادهسازی مجدداً یک ویژگی تلاش کند، ابتدا دستورdeja "<query>"را اجرا کند.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو