סקירת פרק 4 — קטלוג הסוכנים ותחומי האחריות
הערות על Review v0.2 + תשובות לשאלון Review (נספח ב׳) · 7 באוגוסט 2026
טיוטה להערות — אינה לביצוע.
מסמך זה כולל הערות על גרסת Review 0.2 של פרק 4, תשובות ל-8 השאלות הפתוחות (§4.18) ותשובות ל-10 שאלות שאלון ה-Review (נספח ב׳). התשובות מאומתות מול קוד המערכת הפעיל — 6 רשומות AgentConfig (5 פעילות + Financial Reports מושהה), runAgentScan ו-SystemSettings — כדי שניתן יהיה להעבירן הלאה בביטחון.
עקרונות נכונים שיש לשמר:
- ההפרדה המחייבת בין Agent, Gate ושירות דטרמיניסטי (§4.4) נכונה ועולה בקנה אחד עם CH3-001 — ה-Orchestrator דטרמיניסטי, ה-LLM רק מייעץ.
- העיקרון "שמירת ההון קודמת ליצירת רווח" ואיסור עקיפת Risk Gate / Global Freeze / Approval TTL / Trade Validity מתורגם נכון בקוד: runAgentScan אינו מבצע (CH3-001) ומשמיט קניות תחת Global Freeze.
- מודל Shadow Mode ל-CIO (§4.16) עקבי עם ההחלטה ב-CH3-001 ש-runAgentScan הוא CIO קריאה-בלבד ללא גישת ביצוע.
- חוזה אחיד לסוכן (§4.8) ותיעוד/הסבריות/Audit (§4.14) מוצקים את הדרישה שכל מעבר ניתן לשחזור — תואם CH3-002.
פערים שיש לתקן לפני אישור:
- הקטלוג מתעד 5 סוכנים, אך במסד הנתונים קיימים 6 רשומות AgentConfig — הסוכן "Financial Reports" (סוג financials) קיים אך מושהה (paused) ואינו מתועד בפרק. יש להוסיפו לקטלוג או להסירו באופן מפורש (ראה תשובה לשאלות 1–2).
- הפרק מתייחס ל-"Fundamental" כשם סוכן, אך בקוד סוג הסוכן הוא financials ושמו "Financial Reports". יש לאחד מונחים למניעת כפילות.
- semi_hard מוזכר בתנאי הקבלה אך אינו מוגדר בגוף הפרק. בקוד זהו ערך management_mode בפועל (ראה שאלה 6) — יש לתעד אותו כפרופיל משנה של Semi-Automatic.
- לא מוגדרים Timeout מפורש ותקציב מודל לכל סוכן (ראה שאלה 7). כיום כל הסוכנים רצים על gemini_3_flash ללא Timeout ייעודי.
- Portfolio Risk Agent רץ בתוך refreshPortfolioPrices ולא דרך runAgentScan — כדאי לציין זאת מפורשות במטריצת ההפעלה (§4.10) כדי שהקורא לא יצפה לו בסריקה המחזורית.
האם חמשת הסוכננים המתועדים הם כל הסוכנים הפעילים?
תשובה: לא. במסד הנתונים קיימות 6 רשומות AgentConfig. חמש פעילות (active): US Scanner, IL Scanner, News Analyst, Technical Analyst, Portfolio Risk Agent — תואמות לקטלוג. סוכן שישי — "Financial Reports" (סוג financials) — קיים אך מושהה (paused) ואינו מתועד בפרק.
ראיה מהקוד: בדיקת AgentConfig.list() החזירה 6 רשומות; הסוכן Financial Reports בסטטוס paused. בקוד runAgentScan קיים טיפול מלא בסוג financials (prompt, מרווח 720 דקות ב-AGENT_INTERVAL_MINUTES).
המלצה: לאמת בקוד לפני כל החלטה (כפי שהפרק עצמו ממליץ). להוסיף את Financial Reports לקטלוג כסוכן קיים-מושהה, או לתעד מפורשות החלטת השהיה. לא להוסיף/לשנות סוכנים לפני אימות.
האם Fundamental קיים בפועל?
תשובה: כן — קיים בשם "Financial Reports" (סוג financials), כרגע מושהה. יש לו תמיכת קוד מלאה: פרומפט ניתוח דוחות כספיים (EPS, P/E, רווחיות, צמיחה), מקורות SEC EDGAR/מאיה, ומרווח ריצה יומי (720 דקות).
ראיה מהקוד: runAgentScan → buildPrompt כולל typePrompts.financials; AGENT_INTERVAL_MINUTES.financials = 720.
המלצה: לשמר את הסוכן הקיים — אין צורך ב-Agent חדש. לאחד מונחים: "Fundamental" בפרק = "Financial Reports" / financials בקוד. להחליט מתי להפעילו מחדש (Shadow תחילה).
האם Portfolio Risk יתפצל בעתיד?
תשובה: לא כעת. להמשיך במיפוי והשוואה. ההגנה הקיימת אינה מוסרת. שום פיצול עתידי אינו נדרש לגרסה 0.1.
ראיה מהקוד: Portfolio Risk Agent רץ בתוך refreshPortfolioPrices (הבעלים היחיד של ביצוע CH3-001) ומדלג עליו ב-runAgentScan. פיצול יחייב ADR נפרד.
המלצה: לאמץ את המלצת הפרק. לתעד ש-Portfolio Risk אינו חלק מהסריקה המחזורית של runAgentScan אלא רץ ב-Price Refresh.
האם Sentiment צריך סוכן נפרד?
תשובה: לא כעת. להשאיר בתוך News/Event עד שיוכח צורך עצמאי. תחזוקת סוכן נפרד לא מוצדקת ללא ביקוש.
ראיה מהקוד: News Analyst מכסה ניתוח חדשות ואירועים; שדה market_sentiment כבר נאסף בפלט ה-LLM הנוכחי.
המלצה: לאמץ את המלצת הפרק. אם ייווצר צורך — לפצל רק אחרי מדידת עומס/דיוק.
האם User Assistant הוא סוכן ליבה?
תשובה: לא בפרק זה. להגדיר בכרך הממשק לאחר קביעת צרכים והרשאות. מדובר בסוכן אינטראקציה-משתמש, לא סוכן החלטת השקעה.
ראיה מהקוד: אין סוכן כזה ב-AgentConfig או בקוד ה-backend כיום; chatWithAgent קיים אך אינו AgentConfig.
המלצה: לאמץ את המלצת הפרק. להוציאו מקטלוג סוכני ההשקעה ולהגדירו נפרד בכרך הממשק.
מהו semi_hard?
תשובה: זהו פרופיל משנה בתוך Semi-Automatic. בקוד, סוכן הסריקה מקצה management_mode = "semi_hard" לעסקאות קנייה ממאגר semi עם ביטחון נמוך מ-9.5; ביטחון גבוה (≥9.5) מקבל "semi". כלומר semi_hard = מצב semi אסטרטגי נוקשה יותר לאותות חלשים יותר.
ראיה מהקוד: runAgentScan: `const mgmtMode = useAuto ? "auto" : (score >= 9.5 ? "semi" : "semi_hard")`. הערך מוגדר ב-enum של Trade/Portfolio (auto/semi_hard/semi/manual) ומוצג ב-Badges.
המלצה: לתעד מפורשות כפרופיל משנה של Semi-Automatic (כללי אישור/ביצוע נוקשים יותר לאותות נמוכי-ביטחון). אין להוסיף מצב עבודה רביעי ללא ADR — ואכן אין צורך, הערך כבר קיים.
מהם ערכי Timeout ותקציב מודל?
תשובה: ✅ טופל ב-CH4-010 (v0.3, 29/29 PASS). מודול timeoutBudget.ts מגדיר ערכי Timeout מומלצים לכל סוג סוכן: scanner 30s, news 30s, technical 45s, financials 60s, portfolio 30s. כולל מדיניות fallback (NO_OPINION/WAITING/FAILURE), תקציב טוקנים יומי, ומדידת p50/p95/p99. ערכים סופיים יכוונו לאחר מדידות ב-Live.
ראיה מהקוד: base44/shared/timeoutBudget.ts: RECOMMENDED_TIMEOUTS, computeStats (p50/p95/p99/failure_rate/avg_tokens), evaluateTimeout, checkTokenBudget. מאומת ב-runCh4AcceptanceTests (29/29 PASS, 2026-08-10T04:32Z).
המלצה: מומש ✅. נותר: כיוונון ערכים סופיים לאחר מדידות ב-Live.
האם Liquidity/Macro דורשים Agent?
תשובה: לא כעת. להתחיל דטרמיניסטי — מודול ייעודי או שימוש בסוכן קיים. אין לפתוח סוכני AI חדשים לפני שמוכח צורך.
ראיה מהקוד: כיום אין סוכני liquidity/macro ב-AgentConfig או בקוד; ניתוח מאקרו/נזילות יכול להיות שכבת חישוב דטרמיניסטית לפני Risk Gate.
המלצה: לאמץ את המלצת הפרק. למפות קודם צרכי נתוני מאקרו/נזילות; לממש כמודול או בתוך סוכן קיים; סוכן AI רק אם יוכח הכרח.
האם חמשת הסוכנים הפעילים והסוכן המושהה מופו במלואם בלי לשנות את אופן פעולתם?
תשובה: כן. המיפוי תיעודי בלבד ואינו משנה אופן פעולה. ב-AgentConfig קיימות 6 רשומות: 5 פעילות (US Scanner, IL Scanner, News Analyst, Technical Analyst, Portfolio Risk Agent) + Financial Reports (paused). לכל הפעילים last_run עדכני (2026-08-06/07) ותיעוד decisions_count.
ראיה מהקוד: AgentConfig.list() החזיר 6 רשומות; Financial Reports בסטטוס paused עם last_run=null ו-12 החלטות היסטוריות.
האם קיים כיוום סוכן או רכיב פעיל שלא מופיע במיפוי?
תשובה: לא. כל סוכני ה-AI הפעילים ממופים. רכיבי תשתית דטרמיניסטיים (Orchestrator, Risk Gate, Trade Validity, Execution Engine, Scheduler) רשומים בנספח א׳ ואינם סוכנים. chatWithAgent הוא שירות אינטראקציה, לא AgentConfig. אין סוכן נסתר.
ראיה מהקוד: מקורות ה-AI בקוד: runAgentScan (סורק/ניוז/טכני/פיננסים) ו-refreshPortfolioPrices (Portfolio Risk). אין נתיב LLM נוסף.
האם סוכן כלשהו מקבל כיוום סמכות אסורה — החלטה, חסימה או ביצוע?
תשובה: לא. אף סוכן אינו מבצע. runAgentScan יוצר הצעות (pending/approved) בלבד; הביצוע נעשה רק ב-refreshPortfolioPrices (CH3-001). Risk Gate, Global Freeze ו-Trade Validity דטרמיניסטיים ואינם סוכני AI. Portfolio Risk Agent ממליץ בלבד ואינו חוסם לבד.
ראיה מהקוד: runAgentScan אינו כותב Trade.status=executed; refreshPortfolioPrices הוא הבעלים היחיד של ביצוע. management_mode=manual כעת (SystemSettings), כך שאישור ידני נדרש.
האם CIO לבדו יכול לבנות Trade Plan בשלב הראשון בלי Strategy Agent נוסף?
תשובה: כן לשלב הראשון. runAgentScan (ה-CIO הנוכחי) קובע כבר כיוון, כמות, מחיר, stop_loss, take_profit, order_type, reasoning ו-score — כלומר Trade Plan מלא. אין צורך ב-Strategy Agent נוסף לגרסה 0.2. ה-CIO יתחיל ב-Shadow Mode ויישאר ייעוצי בלבד (ללא ביצוע).
ראיה מהקוד: runAgentScan → יצירת Trade עם כל שדות התוכנית. Strategy Agent אינו קיים ב-AgentConfig ואינו נדרש ל-Shadow.
האם יש הצדקה לפצל Sentiment, Risk Explanation או Monitoring לסוכנים עצמאיים?
תשובה: לא כעת. Sentiment נאסף בתוך News (שדה market_sentiment בפלט ה-LLM). Risk Explanation אינו נפרד — מוטמע ב-reasoning של כל סוכן. Monitoring/Exit ממומש דטרמיניסטית (stop_loss/take_profit/trailing ב-Portfolio + Alerts). אין הצדקה לפיצול ללא מדידת עומס/דיוק.
ראיה מהקוד: News Analyst מכסה סנטימנט; Portfolio Risk מכסה ניטור יציאה; אין רשומת AgentConfig ל-Sentiment/RiskExplanation/Monitoring.
האם תיאור semi_hard וסף 9.5 תואמים במדויק את הקוד?
תשובה: כן, מדויק. בקוד: `score >= 9.5 ? "semi" : "semi_hard"` — סף 9.5 מפריד בין semi ל-semi_hard. auto_execute_threshold הנפרד (8.5 ב-SystemSettings) נוגע למצב auto בלבד ואינו מתערבב. semi_hard = פרופיל משנה נוקשה יותר של Semi-Automatic לאותות נמוכי-ביטחון.
ראיה מהקוד: runAgentScan: `const mgmtMode = useAuto ? "auto" : (score >= 9.5 ? "semi" : "semi_hard")`. SystemSettings.auto_execute_threshold = 8.5; management_mode כעת manual.
אילו סוכנים חייבים לפעול בזמן אמת ואילו יכולים לפעול ברקע?
תשובה: זמן אמת (בשעות שוק): US Scanner, IL Scanner, Technical Analyst — רצים ב-cron של שעות מסחר. רקע: News Analyst (שעתי), Portfolio Risk Agent (כל 30 דק׳, בתוך Price Refresh), Financial Reports (יומי, מושהה). Portfolio Risk אינו חלק מהסריקה המחזורית של runAgentScan.
ראיה מהקוד: cron: US Scanner 0 9-16 * * 1-5; IL Scanner 0 9-17 * * 1-5; Technical 0 9-16 * * 1-5; News 0 * * * 1-5; Portfolio */30 * * * *; Financials 0 8 * * 1-5.
אילו יכולות חסרות באמת, ואילו כבר קיימות בתוך News, Technical או Portfolio Risk?
תשובה: קיימות בתוך הסוכנים: Sentiment (ב-News), ניתוח טכני (Technical), ניהול סיכון/הגנות/יציאה (Portfolio Risk), ניתוח דוחות (Financial Reports, מושהה). חסרות באמת: Liquidity, Macro, Strategy נפרד, Risk Explanation כפלט ייעודי. אלה יכולות להתחיל דטרמיניסטית (מודול/שימוש בסוכן קיים) לפני הוספת סוכן AI.
ראיה מהקוד: אין רשומות AgentConfig ל-liquidity/macro/strategy; ניתוח מאקרו/נזילות יכול להיות שכבת חישוב לפני Risk Gate.
האם תנאי הקבלה מאפשרים לצוות לבדוק כל סוכן בנפרד ולבצע Rollback?
תשובה: כן. כל סוכן הוא רשומת AgentConfig נפרדת עם status (active/paused/inactive). ניתן להשהות/להפעיל כל סוכן בנפרד ללא השפעה על האחרים. Rollback = החזרת status ל-paused. לכל סוכן decisions_count ו-last_run למעקב. מומלץ להוסיף תנאי קבלה מפורש: סוכן עובר/נכשל בנפרד, והחזרה ל-paused מבטלת השפעה.
ראיה מהקוד: AgentConfig.status נפרד לכל רשומה; runAgentScan מסנן `status === "active"` בלבד, כך ש-paused אינו רץ.
האם הפרק משקף את העיקרון: המערכת תחילה, והתיעוד משרת את המערכת?
תשובה: כן. הפרק בנוי As-Is מול To-Be (§4.5), וגרסה 0.2 משלבת את החלטות CH3-001/002 וממצה בדיקת התאמה לקוד. המיפוי נגזר מהמערכת הפעילה (6 רשומות AgentConfig), לא להפך. ההמלצות (CIO Shadow, לא לפצל, לא להפעיל Financial Reports) נשענות על מצב הקוד.
ראיה מהקוד: השוואת הקטלוג ל-AgentConfig ו-runAgentScan מעלה התאמה מלאה ל-5 הפעילים + 1 מושהה; הפערים שתועדו בחלק א׳ מתוקנים ב-0.2.
הפרק בנוי היטב ועקרונותיו נכונים. גרסה 0.2 סגרה את פערי התיעוד של 0.1 — Financial Reports מתועד כרשומה מושהית, ו-semi_hard/סף 9.5 מוגדרים במדויק. תשובות שאלון ה-Review (נספח ב׳) מאומתות מול הקוד: 5 פעילים + 1 מושהה ממופים במלואם, אין סמכות אסורה, CIO לבדו מספיק ל-Shadow, ואין הצדקה לפיצול סוכנים.
✅ כל ההמלצות יושמו: Financial Reports מתועד (CH4-007), semi_hard מוגדר כפרופיל משנה (CH4-005), Timeout ותקציב מודל מומשו (CH4-010). CH4 כולו: 12/14 Verified (29/29 PASS), 2 שוחררו (CH3-005 מומש ✅).