כל הכתבות

מדריכי AI וכסף

מודים ב-Claude Code — המדריך המעשי

Claude Code יודע עכשיו לשנות את הממשק של עצמו. חמישה מודים שבניתי בלי לכתוב שורת קוד — פס usage, עברית מימין לשמאל, פרוגרס בר למשימות, מצב מצגת ודשבורד כסף חי מ-Financy MCP — עם הבקשה המדויקת, מה קורה מאחורי הקלעים, והמוקשים שכדאי לעקוף.

F

צוות Financy

13 דק׳ קריאה

Claude Code הגיע עם ממשק קבוע. מה שהוא מראה — זה מה שיש.

עכשיו אפשר לבקש ממנו לשנות את עצמו.

יש ב-Claude Code יכולת שנקראת mods: תוספים קטנים שמשנים את הממשק של Claude Code עצמו. פס מעל שורת ההודעה, פאנל בצד, התראות קופצות, שורת סטטוס, ואפילו הדרך שבה ההודעות מצוירות. ובאפליקציית הדסקטופ — גם גרפים.

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

המדריך הזה עובר על כולם: מה כל מוד עושה, מה לבקש, מה קורה מאחורי הקלעים, ואיפה נתקעתי. בסוף — הדשבורד של הכסף, שמתחבר ל-Financy.

מודים ב-Claude Code — מפס usage ועד דשבורד כסף

במדריך:

  1. מה זה mod
  2. איך מבקשים מוד, ואיך הוא נשאר
  3. מוד 1 — פס usage מעל ההודעה
  4. מוד 2 — עברית מימין לשמאל
  5. מוד 3 — כמה זמן המשימה תיקח
  6. מוד 4 — מצב מצגת
  7. מוד 5 — דשבורד הכסף עם Financy
  8. המוקש של מצב Auto

מה זה mod

מוד הוא plugin של Claude Code שבנוי מ-hooks — פונקציות ש-Claude Code קורא להן כשמשהו קורה: הסשן נפתח, נשלחה הודעה, כלי עומד לרוץ, או שצריך לצייר חלק מהמסך. הפונקציה מחזירה מה לצייר, ו-Claude Code מצייר.

כל מקום שמוד יכול לצייר בו נקרא render site. לפי התיעוד הרשמי, החשובים הם:

איפהמה זהבשימוש אצלנו
AbovePromptהפס שמעל שורת ההודעה, משותף לכל המודיםusage, זמן משימה, מצב מצגת, Financy
Paneפאנל צד, או אזור מעל ההודעה כשהחלון צרדשבורד הכסף
UserMessage, AssistantMessageההודעות שלכם והתשובות של Claudeעברית מימין לשמאל, מצב מצגת
ToolUse, ToolResult ודומיהםהשורות של קריאות לכלים והפלט שלהןמצב מצגת

ובנוסף: התראות קופצות ($.ui.toast), רשומה בשורת הסטטוס ($.ui.status), וגרפים ב-SVG — שמופיעים רק באפליקציית הדסקטופ.

איפה זה עובד: בטרמינל ובלשונית Code של אפליקציית הדסקטופ. לא בפאנל של VS Code, לא בהרצה עם claude -p ולא בסשנים בענן. צריך Claude Code בגרסה 2.1.287 ומעלה.


איך מבקשים מוד, ואיך הוא נשאר

1. מתארים מה רוצים, בשפה רגילה. Claude עובד עם skill מובנה בשם plugin-authoring, שמכיר את ה-API המדויק של הגרסה שלכם. אפשר להריץ /plugin-authoring כדי לטעון אותו מראש, אבל לרוב פשוט מבקשים. טיפ שעבד לי: לסיים את הבקשה ב"תשאל אותי שאלות כדי להבין יותר טוב". Claude שואל על המבנה, הצבעים והמיקום לפני שהוא כותב.

2. מאשרים טעינה חמה. כש-Claude שומר את הקובץ הראשון, Claude Code שואל Enable hot reloading for this session?. בוחרים Enable for this session. מכאן המוד נטען בסוף התור, וכל שינוי שתבקשו נטען מחדש בסוף התור שבו הוא נעשה. במצבי ההרשאות default ו-acceptEdits תתבקשו גם לאשר כל קובץ, כי ~/.claude היא תיקייה מוגנת.

3. Claude בודק את עצמו. כל מוד הוא תיקייה עם שלושה קבצים: .claude-plugin/plugin.json, hooks/hooks.json והקוד עצמו, hooks/register.tsx. Claude מריץ claude plugin validate כדי לוודא ש-Claude Code יקבל את הקוד, ולפעמים גם כותב טסטים ומריץ אותם עם claude plugin test.

4. אומרים לו שזה צריך לעבוד גם מחר. זה המוקש הראשון שנתקלתי בו: מוד ש-Claude כותב נשמר בתיקייה של הסשן הנוכחי, ~/.claude/dev-mods/<מזהה הסשן>/, ונטען רק בו. פותחים סשן חדש — הוא לא שם.

הפתרון: לבקש במפורש להעביר אותו למקום קבוע. Claude העביר את המודים שלי ל-~/.claude/mods/, והוסיף את הנתיבים שלהם למשתנה CLAUDE_CODE_PLUGIN_DIRS בבלוק env של ~/.claude/settings.json. לפי התיעוד, זו הדרך לטעון מודים באפליקציות שאי אפשר להעביר להן flag, כמו הדסקטופ. בטרמינל אפשר גם claude --plugin-dir <תיקייה>.

{
  "env": {
    "CLAUDE_CODE_PLUGIN_DIRS": "/Users/you/.claude/mods/usage-band:/Users/you/.claude/mods/presentation-mode"
  }
}

נתיבים מלאים, מופרדים בנקודתיים (ב-Windows בנקודה-פסיק). כדי לכבות מוד, מוחקים את הנתיב שלו מהרשימה.


מוד 1 — פס usage מעל ההודעה

מה הוא עושה: מראה מעל שורת ההודעה כמה נשאר בחלון של 5 השעות ובחלון השבועי, ועוד כמה זמן כל אחד מתאפס. כי אין דבר יותר מעצבן מ-Claude שנעצר באמצע משימה ארוכה בלי שראיתם את זה מגיע.

5h ▓▓▓▓▓▓░░░░ 58% left · resets in 2h 14m    Week ▓▓▓▓▓▓▓▓░░ 81% left · resets in 3d 6h

פס ה-usage מעל שורת ההודעה

מה ביקשתי:

תבנה לי mod שיראה לי כמה usage נשאר לי ישר ב-Claude Code desktop, מעל הבר שאני בא לשלוח את ההודעה. תשאל אותי שאלות כדי להבין יותר טוב.

מאחורי הקלעים: המוד מצייר ב-AbovePrompt. את הנתונים הוא לוקח מ-$.session.usage(), שמחזיר את מגבלות השימוש של המנוי, ומתעדכן באירוע session.measure — אחרי כל תור, וכשאחוז השימוש זז. טיימר של דקה מרענן את הספירה לאחור.

const usage = await $.session.usage()
await update($, limits, () => usage.rateLimits) // [{ kind, percentUsed, resetsAt }]

כדאי לדעת:

  • עובד רק עם מנוי (Pro או Max). מי שמחובר עם API key לא מקבל חלונות של 5 שעות ושבוע, ואין מה להציג.
  • לפני התשובה הראשונה בסשן הפס כותב Usage: waiting for the first response…, כי Claude Code מקבל את הנתונים רק מתשובה של המודל.

מוד 2 — עברית מימין לשמאל

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

ההודעות בשיחה

מה ביקשתי:

תבנה לי עוד מוד שמציג את ההודעות ב-RTL, גם כשאני שולח אותן. אני שם לב שההודעה ששלחתי לא מוצגת ב-RTL.

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

הגרסה שעובדת לא מזיזה כלום. היא עוטפת כל שורה שמתחילה בעברית בשני תווים בלתי נראים של Unicode: RLI בהתחלה ו-PDI בסוף. הם אומרים למסך "את השורה הזאת תסדר מימין לשמאל", גם כשיש בה אנגלית, קוד או מספרים.

// RLI ... PDI: the words between them are laid out right to left
const RLI = '⁧'
const PDI = '⁩'
return `${prefix}${RLI}${body}${PDI}`

והפרטים הקטנים שעושים את ההבדל: האות החזקה הראשונה בשורה קובעת את הכיוון, כמו dir="auto" בדפדפן. סימני רשימה, כותרות וציטוטים נשארים בתחילת השורה כדי לא לשבור את ה-Markdown. בלוקים של קוד, טבלאות ושורות באנגלית לא משתנים. המוד מצייר ב-AssistantMessage וב-UserMessage, ופועל רק בדסקטופ.

המגבלה, בכנות: ל-API של המודים אין דרך להגדיר כיוון אמיתי לפסקה — אין dir="rtl". אז סדר המילים מסתדר, אבל השורות נשארות מיושרות לשמאל. לא מושלם, אבל קריא.

בתוך הפאנל שלכם

אם המוד שלכם מצייר ממשק משלו — כמו דשבורד הכסף בהמשך — אתם שולטים בפריסה, ואפשר לעשות RTL כמו שצריך. אלה הטכניקות ש-Claude השתמש בהן בפאנל של Financy, ואפשר לבקש אותן בשמן:

  • עמודות מיושרות לימין: alignItems="flex-end" על כל Box בכיוון עמודה.
  • שורות מימין לשמאל: flexDirection="row-reverse" — התווית בימין, הסכום בשמאל.
  • סכומים שלא קופצים: כל סכום עטוף ב-LRI ו-PDI, הזוג ההפוך, שמבודד אותו כטקסט משמאל לימין. בלי זה הסימן ₪ והמינוס נודדים לצד הלא נכון.
  • גרפים: ב-SVG כל סכום מצויר כאלמנט text נפרד עם direction="ltr", כדי שעברית ומספרים לא יתערבבו באותה שורה.
const LRI = '⁦'
const PDI = '⁩'
const row = (label: string, value: string) => (
  <Box flexDirection="row-reverse" justifyContent="space-between">
    <Text>{label}</Text>
    <Text>{LRI + value + PDI}</Text>
  </Box>
)

מוד 3 — כמה זמן המשימה תיקח

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

⏱ ▓▓▓▓░░░░░░ 1m 20s / ~3m 00s · 4 tool calls

מה ביקשתי:

אתה יכול לייצר לי מוד שמעריך כמה זמן משימה אמורה להימשך, ומראה פרוגרס בר כזה?

מאחורי הקלעים: זה המוד הכי מעניין טכנית, כי הוא משתמש במודל בתוך המוד.

  1. באירוע prompt.submit הוא שולח את הטקסט שלכם ל-Haiku, המודל הקטן והמהיר, ושואל כמה שניות זה ייקח. הוא עושה את זה מטיימר ($.clock.after), כדי שההודעה שלכם לא תחכה להערכה. עד שהתשובה מגיעה כתוב estimating….
  2. כל קריאה לכלי (tool.call) מעלה את המונה.
  3. בסוף התור (turn.complete) הוא שומר ב-$.store כמה Haiku ניחש וכמה זה באמת לקח.
  4. הוא לומד מכם. אחרי שלוש משימות הוא מכפיל כל ניחוש בחציון של היחס "בפועל חלקי ניחוש". אם המשימות שלכם לוקחות בדרך כלל פי 2 ממה ש-Haiku מעריך, ההערכה תוכפל. הוא זוכר את 30 המשימות האחרונות, ומשימות שעצרתם באמצע לא נספרות.
const r = await $.model.complete({
  model: 'haiku',
  system: SYSTEM, // "Reply with one integer number of seconds"
  prompt: `Request:\n${text}\n\nSeconds:`,
  maxTokens: 16,
})

כדאי לדעת:

  • כל הערכה היא קריאה קטנה ל-Haiku, וזה עולה קצת מה-usage שלכם.
  • Haiku רואה רק את ההודעה, לא את השיחה ולא את הקוד. "תתקן את זה" בלי הקשר הוא ניחוש עיוור.
  • כשמשימה עוברת את ההערכה, הבר נהיה צהוב ומופיע taking longer than expected.

מוד 4 — מצב מצגת

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

מושלם להרצאות, לפגישות עם לקוחות, ולכל פעם שמשתפים מסך ולא רוצים שכולם יקראו קיר של פלט.

התשובות מוסתרות: נשארו רק שורות הכלים, והכפתור הפך ל-Show replies

מה ביקשתי:

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

מאחורי הקלעים: המוד לא מוחק כלום. הוא נרשם על ה-render sites של כל מה ש-Claude מצייר בתור — AssistantMessage, ToolUse, ToolResult, ToolGroup ועוד — וכשהמצב פעיל, מחזיר במקומם קופסה ריקה ונסתרת. כשהמצב כבוי, הוא מעביר את הציור הלאה בלי לגעת בו.

const hide: Hook<'ui.render'> = async ($, e, next) => {
  if (!(await read($, isOn))) return next(e)
  const { Box } = $.ui.resolve(e)
  return <Box display="none" />
}

הכפתור עצמו מתחלף בין Presentation mode ל-Show replies, ולידו מופיע Claude's replies are hidden כשהמצב פעיל.

המוקש: מודים שחולקים את אותו פס. הפס שמעל ההודעה משותף לכל המודים. מוד שמחזיר ציור משלו בלי לכלול את מה שהמודים האחרים ציירו — דורס אותם. כשהוספתי את הכפתור, Claude עדכן את כל המודים כך שכל אחד מצייר את השורה שלו ומוסיף מתחת את מה שהמודים האחרים החזירו:

const below = await next(e) // what the other mods drew
return (
  <Box flexDirection="column">
    {myRow}
    {below ?? null}
  </Box>
)

אם אתם מבקשים מוד חדש לפס, תגידו ל-Claude שיש שם כבר מודים אחרים ושהוא צריך לשמור עליהם.


מוד 5 — דשבורד הכסף עם Financy

וכאן זה כבר לא רק נוחות. מוד יכול לקרוא לכלים של שרתי MCP שכבר מחוברים ל-Claude Code ($.mcp.call), דרך החיבור הקיים של Claude Code עצמו. בלי מפתחות חדשים, בלי שרת בצד.

אז ביקשתי מוד שמתחבר ל-Financy ומציג את מצב הכסף שלי.

הבקשה הראשונה הייתה משפט אחד:

אני רוצה שתייצר לי מוד שמתחבר לFinancy MCP ומציג לי את המצב של הכסף שלי בחלק העליון של claude code desktop

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

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

הבקשה ל-Claude Code לבנות את מוד הכסף

מה קיבלתי

הפאנל של Financy בתוך Claude Code (נתוני דמו)

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

שלושה גרפים, שהמוד מצייר בעצמו כ-SVG:

נכסים מול התחייבויות — עו״ש, חיסכון והשקעות מול הלוואות וכרטיסים (נתוני דמו)

תזרים חודשי — הכנסות מול הוצאות בששת החודשים האחרונים, עם קו יתרת העו״ש (נתוני דמו)

הוצאות לפי קטגוריה ב-90 הימים האחרונים (נתוני דמו)

הגרפים מופיעים באפליקציית הדסקטופ. בטרמינל אותו פאנל מציג את המספרים בלי הגרפים.

כפתור בפס שמעל ההודעה. לצד המודים האחרים, המוד מוסיף כפתור Financy (מקש קיצור: f) שפותח את הפאנל, ולידו הנטו. הנטו מופיע גם בשורת הסטטוס.

הכפתור Financy והנטו בפס שמעל שורת ההודעה (נתוני דמו)

התראות. המוד מתרענן לבד כל 15 דקות, ופקודת /money פותחת את הפאנל ומרעננת מיד. רענון ידני מקפיץ Financy עודכן עם הנטו, וההתראות האוטומטיות קופצות כש:

  • הנטו השתנה מאז הרענון הקודם
  • חיוב כרטיס יורד בשלושת הימים הקרובים
  • הנתונים מבנק מסוים לא התעדכנו כבר יותר מדי זמן
  • ההסכמה מול בנק או כרטיס פגה בתוך 14 יום

כל המספרים בצילומים כאן הם נתוני דמו. אצלכם זה יהיה הכסף האמיתי שלכם.

מאחורי הקלעים: שלושה כלים, כולם לקריאה

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

שורה אחת לכל כלי, דרך החיבור ש-Claude Code כבר מחזיק:

const accounts = await $.mcp.call('financy', 'list_accounts', { all: true })
const status = await $.mcp.call('financy', 'get_status', {})
const txs = await $.mcp.call('financy', 'list_transactions', { from, all: true })

אין כאן כלי שמעביר כסף, משלם או משנה משהו בחשבון. ולא רק בגלל שהמוד לא ביקש — Financy מחובר לבנקים דרך Open Banking בהרשאת קריאה בלבד, כך שכלים כאלה פשוט לא קיימים.

איך מחברים את Financy ל-Claude Code

מה צריך: חשבון Financy בתוכנית Starter ומעלה, עם בנקים וכרטיסים שכבר מחוברים.

זה אותו שרת MCP שמופיע במדריך החיבור של Financy MCP, בכתובת https://mcp.open-finance.ai/mcp. ב-Claude Code מוסיפים אותו כשרת HTTP בשם financy:

claude mcp add --transport http --scope user financy https://mcp.open-finance.ai/mcp

ואז בתוך Claude Code מריצים /mcp, בוחרים את financy, ומשלימים את ההתחברות וההרשאה של Financy בדפדפן. השם financy חשוב: ממנו נגזרים שמות הכלים בכלל ההרשאה שבסעיף הבא.


המוקש של מצב Auto

אם אתם עובדים ב-Claude Code במצב ההרשאות Auto, הרענון הראשון של מוד הכסף ייכשל. הקריאות שלו ל-Financy ייחסמו עם הודעה בסגנון:

The server-side auto mode classifier gave no verdict ... the request that produced this action did not ask for one

הקריאה של המוד נחסמה במצב Auto

זה לא באג. במצב Auto, Claude Code בודק כל פעולה מול הבקשה שלכם. קריאה שהמוד יוזם לבד ברקע — מטיימר של רבע שעה — לא נובעת מבקשה שכתבתם באותו רגע, ולכן היא נעצרת. בדיוק מה שהייתם רוצים ממנגנון הגנה.

הפתרון הוא לא לכבות את ההגנה. הוא להחליט, במודע, אילו כלים מותר להריץ בלי לשאול. בקובץ ההגדרות של הפרויקט — למשל .claude/settings.local.json — מוסיפים כלל הרשאה מפורש רק לשלושת כלי הקריאה:

{
  "permissions": {
    "allow": [
      "mcp__financy__list_accounts",
      "mcp__financy__get_status",
      "mcp__financy__list_transactions"
    ]
  }
}

אפשר גם פשוט לבקש מ-Claude להוסיף את זה.

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


מה כדאי לדעת לפני

מודים עדיין חדשים. האירועים וה-API יכולים להשתנות בין גרסאות. אם מוד הפסיק לעבוד אחרי עדכון, בקשו מ-Claude להריץ עליו claude plugin validate ולתקן.

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

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

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

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


הכלי כבר לא חייב להישאר כמו שהוא הגיע

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

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

הירשמו ל-Financy, חברו את החשבונות, ובקשו מ-Claude Code את הדשבורד שלכם

בניתם מוד משלכם? ספרו לנו מה הוא מציג.