מה זה Comp AI CRM
ריפו קוד פתוח ברישיון MIT שהצוות של Comp AI פתח לציבור. זה ה-CRM שהם בנו לעצמם, והם החליטו לשחרר אותו כמו שהוא.
הכתובת: github.com/trycompai/crm
ההגדרה שלהם עצמם: “CRM שתוכנן בשביל סוכני AI”. וזה לא מרקטינג, זה באמת בנוי הפוך מכל CRM אחר.
ההבדל האמיתי: מי כותב לתוך ה-CRM
כמעט כל CRM בעולם עובד אותו דבר. מישהו דיבר עם לקוח, ואז בן אדם צריך לזכור לפתוח את המערכת, לעדכן סטטוס, להוסיף פרטים וליצור follow-up. כלומר יש לכם מערכת שאמורה לעזור למכירות, אבל בפועל אתם עובדים בשבילה.
ה-CRM ה”חכמים” פתרו את זה בכך שהדביקו צ’אטבוט בצד של אותו טופס. עדיין אתם מזינים.
המשפט שמסכם את כל הריפו נמצא ב-README שלהם:
The agent is not a feature of the CRM;
the CRM is where the agent keeps its notes.
בעברית: הסוכן הוא לא פיצ’ר בתוך ה-CRM. ה-CRM הוא המחברת של הסוכן.
מבחינה מעשית זה אומר שהסוכן רץ בדפלוימנט משלו, לפי לוח זמנים משלו, מול תור עבודה משלו. הוא מחליט במה להסתכל, קובע לעצמו follow-ups, מוציא תקציב מחקר ועוצר כשהתקציב נגמר. שום דבר בו הוא לא בקשה-תגובה: אתם סוגרים את הדפדפן והוא ממשיך.
הכלל שהסוכן לא שובר
זה החלק הכי מעניין בריפו, ולדעתי הסיבה שהוא שווה קריאה גם אם לא תתקינו אותו.
nothing about a person is guessed.
No tool accepts a confidence score.
אסור לסוכן לנחש עובדה על בן אדם. ואין אף כלי במערכת שמקבל ציון confidence.
הנימוק שלהם חד: מודל שמבקשים ממנו לדרג את הביטחון של עצמו, ידרג. והוא יטעה בכיוון שגורם לו להיראות שימושי. אז במקום לתת למודל לדרג את עצמו, הכלים מדווחים רק מה הם ראו, למשל חתימת מייל או זהות מ-GitHub, ו”פנקס ראיות” מתמחר את הראיה.
| הראיה | מה קורה |
|---|---|
| ראיה חזקה | נכתבת ישירות לרשומה |
| ראיה חלשה | הופכת להצעה שבן אדם מכריע |
| אין מקור | השדה פשוט נשאר ריק |
המשפט שסוגר את זה: עובדה שגויה בביטחון על לקוח גרועה יותר משדה ריק, כי אף אחד לא יכול לזהות שהיא שגויה.
מה הסוכן עושה לבד
הסוכן יושב ב-apps/agent ובנוי על eve, הפריימוורק של Vercel לסוכנים עמידים. כלי הוא קובץ, מיומנות היא קובץ markdown, ולוח זמנים הוא קובץ.
| רכיב | מה יש שם |
|---|---|
| 18 כלים | read_crm_history, search_crm, identify_contact, research_person, enrich_company, record_fact, schedule_recheck ועוד |
| 4 מיומנויות | evidence.md, identity-matching.md, data-boundaries.md, writing-a-brief.md: פרוזה שהסוכן קורא, מנוהלת בגרסאות כמו קוד |
| לוח זמנים אחד | dispatch.ts: לא מחליט כלום. לוקח מה שהגיע זמנו ופותח סשן לכל שורה |
| סנדבוקס | bash, grep, glob ותיקיית עבודה, בלי גישה לרשת בכלל |
תור העבודה
הלב הוא lib/tasks.ts. הפונקציה claimDue לוקחת שורות עם FOR UPDATE SKIP LOCKED, כך ששני dispatchers לוקחים עבודה שלא חופפת, וריצה שנופלת משחררת את השורה שלה כשהחכירה פגה.
וכשהסוכן רוצה להסתכל שוב על מישהו הוא קורא ל-schedule_recheck ואומר למה, והסיבה מוצגת לאיש המכירות. ההיגיון שלהם: סוכן שלא יכול להסביר למה הוא יחזור בעוד 14 יום, אין לו סיבה, יש לו ברירת מחדל.
איך מתקינים: ההתקנה המלאה
צריך Bun ו-Docker. זהו.
git clone https://github.com/trycompai/crm.git && cd crm
cp .env.example .env
bun install
docker compose up -d # Postgres על 5432
bun run db:deploy # הרצת המיגרציות
bun run db:seed # אופציונלי: פייפליין לדוגמה
bun run dev
האפליקציה עולה על localhost:3000 וה-API על localhost:3001.
שימו לב: הקלון נותן לכם את ענף release, הגרסה האחרונה שתויגה, וזה מה שאתם רוצים אם אתם מריצים את זה. main הוא המקום שבו נוחת קוד שעוד לא שוחרר.
המשתנים שחייבים למלא
פותחים את .env וממלאים את אלה. כל השאר בקובץ אופציונלי ומגיע מכובה.
| משתנה | מה לשים בו |
|---|---|
BETTER_AUTH_SECRET | מריצים openssl rand -base64 32 |
ALLOWED_SIGN_IN | הדומיין שלכם, למשל acme.com, או כתובת בודדת |
GOOGLE_CLIENT_ID / SECRET | OAuth client מגוגל: שניהם או אף אחד |
MICROSOFT_CLIENT_ID / SECRET | App registration ב-Entra: שניהם או אף אחד |
חייבים לפחות אחד מהשניים: גוגל או מיקרוסופט.
את DATABASE_URL לא נוגעים: הוא כבר מכוון ל-Postgres של ה-docker compose.
נקודה חשובה: ALLOWED_SIGN_IN הוא כל מודל ההרשאות. ערך ריק אומר שאף אחד לא יכול להיכנס, וזה הכיוון הבטוח להיכשל אליו.
החיבור לגוגל: 2 דקות
- נכנסים ל-Google Cloud console, ל-Credentials
- Create credentials, ואז OAuth client ID, ואז Web application
- תחת Authorised redirect URIs מוסיפים את הכתובת שלמטה
- מפעילים את Gmail API ואת Calendar API לפרויקט
- מעתיקים את ה-client ID וה-secret ל-.env
http://localhost:3001/api/auth/callback/google
אותו client קורא גם את הג’ימייל וגם את היומן, ולכן רוב ההתקנות רוצות אותו. אם החשבון שלכם על Google Workspace, כדאי להגדיר את מסך ההסכמה כ-Internal, וכך אף אחד מחוץ לארגון לא יכול בכלל להגיע לבקשה.
ה-workflow להפעלת הסוכן הראשון
זה הרצף שמביא אתכם מריפו שהורדתם לסוכן שרץ ומעדכן רשומות לבד.
שלב 1: להעלות את המערכת
מריצים את ההתקנה מלמעלה ונכנסים ל-localhost:3000 עם החשבון שהגדרתם ב-ALLOWED_SIGN_IN. אם הרצתם גם db:seed יש לכם כבר פייפליין לדוגמה להסתכל עליו.
שלב 2: לחבר את תיבת המייל
ההתחברות עם גוגל או מיקרוסופט היא גם מה שמחבר את המייל. זה חשוב מסיבה אחת: הכלי read_crm_history קורא את השרשורים, הפגישות וחתימות המייל שלכם, וזאת הראיה הכי טובה שיש. שום ספק דאטה לא יכול למכור לכם תשובה שנשלחה מהכתובת של האדם עצמו.
הקריאה היא קדימה בלבד: הבדיקה הראשונה רושמת את הזמן הנוכחי ולא מייבאת כלום אחורה, כך שחיבור תיבה ישנה לא שופך שנים של מיילים לתוך ה-CRM.
שלב 3: להחליט מה הסוכן יודע לראות
כל מקור חיצוני הוא אופציונלי, והמערכת מתוכננת לרוץ בלי אף אחד מהם. עם אפס מפתחות היא עדיין עובדת, על המיילים שלכם. כל מפתח פותח עוד מקום אחד להסתכל בו.
הסוכן מקבל בתחילת כל סשן את הרשימה של מה שמותקן, ולכן הוא מתכנן לפי מה שבאמת יש לו במקום לגלות את החורים קריאה כושלת אחת בכל פעם. הוא מדפיס את זה בהפעלה:
[agent] off Web research (PERPLEXITY_API_KEY)
[agent] on Company brand data (Settings -> General)
[agent] on LinkedIn (Settings -> General)
שלב 4: להדליק את הסנדבוקס
הדלקת הסנדבוקס היא מה שנותן למודל של ממש: ההבדל בין משהו שקורא לכלים לבין משהו שיכול להחזיק תיק על חברה, להשוות את הפרופיל של החודש מול הקודם, ולחפש חתימת מייל בתוך שרשור.
שלב 5: לפתוח את לשונית Agent
לכל איש קשר, חברה ועסקה יש לשונית Agent. שם רואים את הצעדים כפי שהוא עושה אותם, את הלידים שהוא זורק ולמה, ואת השאלות שלו נענות במקום כשהוא לא מצליח להכריע בין שני אנשים.
כדי להדליק את זה מגדירים AGENT_BRIDGE_SECRET לאותו ערך בשני התהליכים. בלי זה הלשונית מדווחת שהיא לא מוגדרת, והסוכן ממשיך לרוץ לפי לוח הזמנים שלו בכל מקרה.
שלב 6: לתת לו לרוץ
מכאן לא עושים כלום. dispatch.ts לוקח מה שהגיע זמנו, פותח סשן לכל שורה, והסוכן קובע לעצמו את הבדיקה הבאה. סוגרים את הדפדפן: הוא ממשיך.
מה הסוכן לא יכול לעשות
החלק שהכי כדאי להעתיק גם אם אתם בונים משהו אחר לגמרי.
- לסנדבוקס אין רשת בכלל: egress חסום לגמרי (deny-all)
- הסנדבוקס לא מקבל אף פעם את DATABASE_URL
- ההרשאה למייל היא Mail.Read בלבד, קריאה. אי אפשר לשלוח, להשיב, להעביר או למחוק
- אין ארגונים ואין organizationId: single tenant במכוון
ההיגיון מאחורי הסנדבוקס: מעטפת עם הרשאות ועם יציאה לרשת היא בצורת דליפה גם בכלי פנימי. מעטפת בלי שניהם היא מעבד טקסט.
טיפים
- תתחילו בלי אף מפתח חיצוני. המיילים שלכם הם כבר הראיה הכי חזקה שיש
- אל תחליפו את ענף release ל-main אלא אם אתם באים לתרום קוד
- אם אתם על Google Workspace, מסך הסכמה Internal חוסם החוצה כבר אצל גוגל
- סודות של מיקרוסופט פגים: 24 חודשים לכל היותר, 6 כברירת מחדל. תרשמו את התאריך, כי הסימפטום של סוד שפג הוא סנכרון מייל שנכשל בשקט
- תעתיקו את ה-Value של הסוד ולא את ה-Secret ID, הערך מוצג פעם אחת ולא שוב
- קראו את evidence.md ואת data-boundaries.md גם אם לא תתקינו. זה הפרק הכי שווה בריפו
- db:seed נותן פייפליין אמין להסתכל עליו לפני שאתם מחברים דאטה אמיתי
מגבלות ששווה לדעת מראש
- זה single tenant בכוונה: לא בנוי לשרת כמה ארגונים מאותה התקנה
- הפרודקשן מתוכנן ל-Vercel (Sandbox, AI Gateway, Blob). מקומית זה Docker
- בלי גוגל ובלי מיקרוסופט ובלי SSO משלכם, אף אחד לא נכנס
- הפרויקט צעיר. הוא נפתח לציבור ב-31.07.2026, אז צפו לשינויים
לינקים
- הריפו: github.com/trycompai/crm
- האתר: trycrm.ai
- הפריימוורק של הסוכן: eve.dev
- התיעוד המלא של הסוכן: docs/agent.md בתוך הריפו
- התיעוד של ה-API: docs/api.md בתוך הריפו