דילוג לתוכן
תפריט

המוצר

פתרונות

אינטגרציות

מפתחים

שפה

המוצר

מה נשמר, ומה יוצא מהמחשב שלכם

התקנת ברירת מחדל מאזינה רק על המחשב שלכם, מסירה סודות לפני שמשהו נכתב, ואין בה טלמטריה. כל נתיב ששולח נתונים החוצה כבוי עד שמדליקים אותו. הדף הזה מפרט גם מפני מה הפרויקט לא מגן.

ברירת המחדל היא מקומית.

מתקינים, מריצים, והדבר היחיד שיכול לדבר איתו הוא המחשב שלכם.

  • loopback בלבד

    השרת מאזין על 127.0.0.1:49374. שום תהליך מחוץ למחשב לא יכול להגיע אליו, ולכן ברירת המחדל לא דורשת סיסמה.

  • בלי טלמטריה

    בקובץ הבינארי אין אנליטיקס, דיווח קריסות או מעקב שימוש. הלכידה והחיפוש לא מבצעים אף קריאת רשת.

  • תיקייה אחת, שלכם

    דפי הוויקי וקובץ ה-SQLite נמצאים תחת תיקיית נתונים אחת. ב-Unix תיקיות חדשות נוצרות עם 0700 וקבצים חדשים עם 0600.

  • אין הצפנה במנוחה

    גרסה 1 נשענת על הרשאות מערכת הקבצים. בהתקנות קיימות אף אחד לא מריץ chmod בשבילכם. אם הלפטופ צריך את זה, משתמשים בהצפנת דיסק.

שום דבר לא נשמר לפני שעבר ניקוי.

ה-payloads של ה-hooks הם טקסט לא מהימן. הם מגיעים ל-store דרך פונקציה אחת, ומערכת הטיפוסים אוכפת את זה.

תרשים: payload גולמי של hook, שמכיל מפתחות וסיסמאות, נכנס לשער יחיד עם התווית sanitize(). הסודות נושרים מתחת לשער. מהצד השני יוצאת תצפית קטנה יותר, מוגבלת בגודל, והיא נשמרת.
ה-sanitizer הוא הנתיב היחיד מ-payload של hook אל ה-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 לא נשמר כברירת מחדל. בשביל זה צריך דגל בשרת ודגל בלקוח, שניהם יחד.
כללי לכידה לכל repository
# .ai-memory.toml בתוך ה-repository
[capture]
ignore_paths = ["private/**", "~/personal-notes/**"]

# או ללכוד רק repositories שבחרו להצטרף
ai-memory install-hooks --apply --capture-mode allowlist

מוסיפים שלב אחד בכל פעם.

כל שלב קיים בשביל מצב מסוים. עוצרים בשלב שמתאים למצב שלכם.

  1. אדם אחד, מחשב אחד

    loopback, בלי אימות

    ברירת המחדל. אין מה להגדיר, כי שום דבר אחר לא יכול להתחבר.

  2. מכונת homelab או מחשב שני

    bearer token ל-LAN

    יוצרים טוקן עם ai-memory generate-auth-token ומגדירים את AI_MEMORY_AUTH_TOKEN. ההשוואה שלו נעשית בזמן קבוע, והוא מגן על /mcp, /hook, /handoff ועל נתיבי ה-admin וה-API. מגדירים גם את AI_MEMORY_ALLOWED_HOSTS; הוא חוסם DNS rebinding ולא מחליף את הטוקן.

  3. יותר מאדם אחד כותב

    חשבונות ומפתחות API

    סיסמאות נשמרות כ-hash של Argon2id. כל מחשב מקבל מפתח aim_ שמודפס פעם אחת ולא מוצג שוב. אחרי ai-memory api-key rotate <id> המפתח הישן מחזיר 401 מיד. מרגע שנוצר החשבון הראשון, כל נתיב /admin/* פתוח ל-root בלבד.

  4. לצוות כבר יש Keycloak, Okta או Entra ID

    אימות OIDC device ל-hooks

    hooks נייטיב וה-CLI יכולים לשאת טוקן מ-ai-memory auth login oidc-device. השרת לא מאמת טוקנים של OIDC בעצמו, ולכן צריך לפניו gateway שמבין OIDC. מדובר באימות של hooks ושל ה-CLI דרך gateway, ולשרת אין התחברות SSO מובנית.

  5. כל דבר שמעבר ל-loopback

    TLS דרך reverse proxy

    ai-memory לא מסיים TLS, וזו החלטת תכנון. bearer tokens לא מוצפנים בדרך, אז שמים לפניו Caddy, nginx או Cloudflare Tunnel. ה-repository כולל תבניות compose ל-Caddy ול-cloudflared. כשאנשים מתחברים ממחשבים אחרים, מגדירים AI_MEMORY_AUTH__SECURE_COOKIE=true.

מה יוצא מהמחשב, ומתי.

ארבעה נתיבים יכולים לשלוח נתונים החוצה. כל הארבעה כבויים כברירת מחדל.

תרשים: ה-hooks, הוויקי והאינדקס, וה-embedder המקומי נמצאים בתוך מתחם עם התווית "המחשב שלכם", ומחוברים בקווים רציפים. קווים מקווקווים אל embeddings בענן, LLM בענן ו-LLM rerank חוצים את החומה דרך מתגים פתוחים עם התווית "Opt-in, כבוי כברירת מחדל".
הקווים הרציפים נשארים בפנים. הקווים המקווקווים קיימים רק אחרי שמשנים הגדרה.
נתיבמה נשלחאיך מדליקיםברירת מחדל
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. לנתונים אין תפוגה, אלא אם דף מגדיר אחת.

purge
# הסרת סשן אחד
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 שנסקרו.

מודל האיומים והמדיניות ב-SECURITY.md

שאלות ותשובות

האם 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. חשבונות נותנים ייחוס, וכל משתמש מאומת יכול לקרוא כל פרויקט בשרת. לאנשים שאסור להם לראות את הנתונים זה של זה מריצים שרתים נפרדים.

קודם מנסים על loopback.

בלי חשבון ובלי מפתח API. רק המחשב שלכם יכול להגיע אליו.