המוצר
מה נשמר, ומה יוצא מהמחשב שלכם
התקנת ברירת מחדל מאזינה רק על המחשב שלכם, מסירה סודות לפני שמשהו נכתב, ואין בה טלמטריה. כל נתיב ששולח נתונים החוצה כבוי עד שמדליקים אותו. הדף הזה מפרט גם מפני מה הפרויקט לא מגן.
ברירת המחדל היא מקומית.
מתקינים, מריצים, והדבר היחיד שיכול לדבר איתו הוא המחשב שלכם.
loopback בלבד
השרת מאזין על 127.0.0.1:49374. שום תהליך מחוץ למחשב לא יכול להגיע אליו, ולכן ברירת המחדל לא דורשת סיסמה.
בלי טלמטריה
בקובץ הבינארי אין אנליטיקס, דיווח קריסות או מעקב שימוש. הלכידה והחיפוש לא מבצעים אף קריאת רשת.
תיקייה אחת, שלכם
דפי הוויקי וקובץ ה-SQLite נמצאים תחת תיקיית נתונים אחת. ב-Unix תיקיות חדשות נוצרות עם 0700 וקבצים חדשים עם 0600.
אין הצפנה במנוחה
גרסה 1 נשענת על הרשאות מערכת הקבצים. בהתקנות קיימות אף אחד לא מריץ chmod בשבילכם. אם הלפטופ צריך את זה, משתמשים בהצפנת דיסק.
שום דבר לא נשמר לפני שעבר ניקוי.
ה-payloads של ה-hooks הם טקסט לא מהימן. הם מגיעים ל-store דרך פונקציה אחת, ומערכת הטיפוסים אוכפת את זה.

כניסה אחת
את הטיפוס שנשמר אפשר לבנות רק דרך sanitize(). קוד שמדלג על הסרת המידע הפרטי לא מתקמפל.
סודות מוחלפים
התאמות הופכות לסמנים מטופסים, כמו [REDACTED:github_token] או [REDACTED:jwt]. זה מכסה גם סודות בתוך JSON ונתיבי credentials של Windows, ורצפי escape של הטרמינל מוסרים. ההסרה היא best effort.
הגדלים מוגבלים
קטעים מפלט של כלים נעצרים ב-2 KB ופרומפטים ב-16 KiB. תקרת גיבוי של 16 KiB חלה על כל גוף שנשמר, אחרי המיסוך.
קלט של כלים לא נשמר
אירועי PreToolUse אף פעם לא שומרים פקודות, ארגומנטים, נתיבים או גוף של קלט. התצפיות הן audit trail, ואף פעם לא תמלול מלא.
להשאיר נתיב או repository בחוץ
- בלוק
[capture]בתוך.ai-memory.tomlמפרט נתיבים שמתעלמים מהם. אירועים תואמים נזרקים אצלכם במחשב, לפני ה-spool, הרשת והלוגים. - מצב allowlist הופך את הכיוון: repository בלי הקובץ לא שולח אירועים בכלל.
- סט כללים לא תקין נופל חזרה למטא-דאטה בלבד. הוא אף פעם לא מחיל חצי מדיניות.
- ההתאמה היא לקסיקלית. symlinks לא נפתרים, ואי אפשר לקשור פרומפטים ופקודות shell לנתיב. זה גבול של לכידה. זה לא DLP מלא.
- פלט של ה-assistant לא נשמר כברירת מחדל. בשביל זה צריך דגל בשרת ודגל בלקוח, שניהם יחד.
# .ai-memory.toml בתוך ה-repository
[capture]
ignore_paths = ["private/**", "~/personal-notes/**"]
# או ללכוד רק repositories שבחרו להצטרף
ai-memory install-hooks --apply --capture-mode allowlist
מוסיפים שלב אחד בכל פעם.
כל שלב קיים בשביל מצב מסוים. עוצרים בשלב שמתאים למצב שלכם.
אדם אחד, מחשב אחד
loopback, בלי אימות
ברירת המחדל. אין מה להגדיר, כי שום דבר אחר לא יכול להתחבר.
מכונת homelab או מחשב שני
bearer token ל-LAN
יוצרים טוקן עם
ai-memory generate-auth-tokenומגדירים אתAI_MEMORY_AUTH_TOKEN. ההשוואה שלו נעשית בזמן קבוע, והוא מגן על/mcp,/hook,/handoffועל נתיבי ה-admin וה-API. מגדירים גם אתAI_MEMORY_ALLOWED_HOSTS; הוא חוסם DNS rebinding ולא מחליף את הטוקן.יותר מאדם אחד כותב
חשבונות ומפתחות API
סיסמאות נשמרות כ-hash של Argon2id. כל מחשב מקבל מפתח
aim_שמודפס פעם אחת ולא מוצג שוב. אחריai-memory api-key rotate <id>המפתח הישן מחזיר 401 מיד. מרגע שנוצר החשבון הראשון, כל נתיב/admin/*פתוח ל-root בלבד.לצוות כבר יש Keycloak, Okta או Entra ID
אימות OIDC device ל-hooks
hooks נייטיב וה-CLI יכולים לשאת טוקן מ-
ai-memory auth login oidc-device. השרת לא מאמת טוקנים של OIDC בעצמו, ולכן צריך לפניו gateway שמבין OIDC. מדובר באימות של hooks ושל ה-CLI דרך gateway, ולשרת אין התחברות SSO מובנית.כל דבר שמעבר ל-loopback
TLS דרך reverse proxy
ai-memory לא מסיים TLS, וזו החלטת תכנון. bearer tokens לא מוצפנים בדרך, אז שמים לפניו Caddy, nginx או Cloudflare Tunnel. ה-repository כולל תבניות compose ל-Caddy ול-cloudflared. כשאנשים מתחברים ממחשבים אחרים, מגדירים
AI_MEMORY_AUTH__SECURE_COOKIE=true.
מה יוצא מהמחשב, ומתי.
ארבעה נתיבים יכולים לשלוח נתונים החוצה. כל הארבעה כבויים כברירת מחדל.

| נתיב | מה נשלח | איך מדליקים | ברירת מחדל |
|---|---|---|---|
| embeddings מרוחקים | הטקסט המלא של כל דף שנשמר. מעבר מאוחר יותר ממלא לאחור גם את הקורפוס הקיים. הנתיב הזה לא עובר ניקוי כמו האחרים. | embedding_provider = openai | voyage | google | openai-compat | כבוי |
| לכידת פלט ה-assistant | הטקסט של התור האחרון של ה-assistant, ורק אם הגדרתם גם LLM בענן. גלובלי לכל ההתקנה, ורק ב-Claude Code וב-Codex. | capture_assistant בשרת ו-install-hooks --capture-assistant בלקוח | כבוי |
| LLM rerank | כל שאילתה חיה, ועוד עד 30 כותרות דפים וקטעים מוגבלים בגודל. השאילתה לא עוברת מיסוך, כי מיסוך עלול לשנות את המשמעות שלה. | AI_MEMORY_RERANKER=llm | כבוי |
| איחוד ו-lint עם LLM | פרומפטים שנבנים מתצפיות ומדפים שנשמרו נשלחים לספק שבחרתם. מכוונים אותו למודל מקומי, ושום דבר לא יוצא. | AI_MEMORY_LLM_PROVIDER | כבוי |
כשאף אחד מאלה לא מופעל, אין צד שלישי בנתיב הנתונים. מרגע שמגדירים ספק ענן, הספק הזה הוא מעבד המידע שלכם, לפי ההסכם שלכם איתו. המסגרת של GDPR מוסברת ב-DATA_HANDLING.md. זה לא ייעוץ משפטי.
מי כתב את זה, ואיך מסירים את זה.
ייחוס וביקורת
- כשחשבונות מופעלים, כל כתיבה נושאת את שם הכותב. הדפים רושמים
author_idובלוקlast_modified_byב-frontmatter. - כל שינוי נרשם בטבלת
audit_log, עם זהות המשתמש בשורות שיש להן ייחוס. - הוויקי הוא repository של git, כך שכל שינוי בדף הוא גם commit שאפשר לעשות לו diff ולשחזר.
- admission webhooks מקבלים את ה-actor ויכולים לדחות פעולה.
- עדיין אין מסך ליומן הביקורת. השורות נמצאות ב-SQLite.
מה purge מסיר
purge הוא מחיקה לוגית, והיקפו מוגבל כך שפרויקט A אף פעם לא יכול להסיר קבצים של פרויקט B. לנתונים אין תפוגה, אלא אם דף מגדיר אחת.
# הסרת סשן אחד
ai-memory purge-session --workspace default --project my-app --session-id <uuid> --confirm
# הסרת פרויקט שלם
ai-memory purge-project --project experimental --confirm
| אחרי purge | ברירת מחדל | עם --compact |
|---|---|---|
| נגיש דרך ה-API או כלי ה-MCP | לא | לא |
| חוזר בתוצאות חיפוש | לא | לא |
| קובץ markdown חי בוויקי | לא, best effort | לא, best effort |
| בייטים שנשארו בתוך memory.sqlite | כן, ב-free pages | לא |
| טקסט שנשאר בהיסטוריית ה-git של הוויקי | כן | כן |
| קיים בגיבויים שנלקחו קודם | כן | כן |
--compact הוא לא מחיקה פורנזית. כדי להסיר טקסט מההיסטוריה צריך לשכתב בעצמכם את היסטוריית ה-git של הוויקי ולהחליף את הגיבויים. הנוהל המלא נמצא בדף על פעולות מחזור החיים.
איפה זה נעצר.
דיווח על פגיעות
- לא פותחים issue ציבורי. פותחים security advisory פרטי ב-GitHub.
- תשובה מגיעה בתוך 7 ימים. היעד לתיקון הוא 30 יום, עם קרדיט ביומן השינויים, אלא אם תוותרו עליו.
- רק הגרסה האחרונה מקבלת תיקוני אבטחה.
- קובצי הגרסה מגיעים עם קובצי SHA-256, ופעולות ה-CI מקובעות ל-commits שנסקרו.
שאלות ותשובות
האם ai-memory שולח את הקוד או את הפרומפטים שלי לאנשהו?
לא. אין טלמטריה, והלכידה והחיפוש לא מבצעים קריאות רשת. נתונים יוצאים מהמחשב רק אם מדליקים embeddings מרוחקים, לכידת פלט ה-assistant עם LLM בענן, LLM rerank, או ספק LLM בענן לאיחוד. הכול כבוי כברירת מחדל.
האם התקנת ברירת מחדל מבצעת בקשת רשת כלשהי?
אחת. מאז 2.0 ה-embedder המקומי של ברירת המחדל מוריד בהפעלה הראשונה מודל all-MiniLM-L6-v2 של בערך 87 MB מ-Hugging Face. שום מידע של משתמשים לא נשלח. כדי להימנע מזה מגדירים embedding_provider = "none" או מניחים את קובצי המודל ידנית.
האם סודות נשמרים?
כל payload של hook עובר sanitizer לפני השמירה. פרטי גישה שזוהו מוחלפים בסמנים מהצורה [REDACTED:kind], וגודל הגוף מוגבל. ה-sanitizer מסיר פרטי גישה על בסיס best effort, ואין בו שום הבטחה.
אפשר למחוק סשן לתמיד?
purge הוא מחיקה לוגית. התוכן מפסיק להיות נגיש ולהופיע בחיפוש, אבל הטקסט נשאר בהיסטוריית ה-git של הוויקי ובגיבויים קודמים. הדגל --compact מנקה את ה-free pages של SQLite, והוא לא מחיקה פורנזית.
האם ai-memory הוא multi-tenant?
לא. זה שירות single-tenant. חשבונות נותנים ייחוס, וכל משתמש מאומת יכול לקרוא כל פרויקט בשרת. לאנשים שאסור להם לראות את הנתונים זה של זה מריצים שרתים נפרדים.