הקמת פרויקט Claude Code לחנות מובייל ומחשבים

תוכן עניינים

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

 

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

 

בתרגול הזה לא נבנה עדיין skills או subagents. קודם נבין את מבנה הפרויקט ואת הקבצים שמשפיעים על Claude Code: README.md, CLAUDE.md, AGENTS.md, .claude/rules, .claude/settings.json, ו-hooks.


התרחיש: חנות מובייל ומחשבים

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

 

דוגמה לפניית לקוח שנעבוד איתה:

 

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

 

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

 


מטרת התרגול

בסוף התרגול תכירו:

 

  1. איך נראה מבנה בסיסי של פרויקט Claude Code.
  2. איך README.md עוזר ל-Claude להבין את הפרויקט, אבל לא מגדיר לו הוראות עבודה מחייבות.
  3. איך CLAUDE.md משפיע על ההתנהגות של Claude Code.
  4. איך AGENTS.md נכנס לתמונה דרך import מתוך CLAUDE.md.
  5. איך .claude/rules מוסיף הוראות ממוקדות לפי אזורים בפרויקט.
  6. איך .claude/settings.json מגדיר גבולות והרשאות.
  7. איך hooks אוכפים התנהגות בצורה דטרמיניסטית.

דרישות קדם

 

 


חלק א: הורדת הפרויקט מה-GitHub

במקום ליצור את מבנה התיקיות ידנית, נוריד פרויקט מוכן מ-GitHub. הפרויקט כבר כולל את מבנה התיקיות והקבצים הריקים. אתם תמלאו את התוכן בעצמכם בשלבים הבאים.

 

maxOS / LinuxWindows PowerShell
git clone https://github.com/almaya-ai/mobile-store-lab.git
cd mobile-store-lab
ls -la
git clone https://github.com/almaya-ai/mobile-store-lab.git
Set-Location mobile-store-lab
Get-ChildItem -Force
 

עכשיו פתחו את התיקייה mobile-store-lab ב-VS Code:

 

  1. פתחו את VS Code.
  2. בחרו File → Open Folder.
  3. בחרו את תיקיית mobile-store-lab.
  4. פתחו את Claude Code מתוך VS Code.

חלק ב: היכרות עם מבנה הפרויקט

זה המבנה הכללי של הפרויקט:

mobile-store-lab/
  .claude/
    settings.json
    rules/
      sales-docs.md
      catalog-data.md
    skills/
    agents/
    hooks/
      block-risky-shell.js

  data/
    requests/
      request-01-student-laptop.md
      request-02-small-business.md
      request-03-kid-phone.md
    catalog/
      products.json

  docs/
    store-policy.md
    sales-guidelines.md

  outputs/

  scripts/
    inspect-project.js

  mcp/
  
  README.md
  CLAUDE.md
  AGENTS.md
  package.json
  .mcp.json

 

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

 

בדיקת baseline ראשונה

לפני שממלאים קבצים, שאלו את Claude Code:

Read the project structure and explain what this project does. Do not change files.

 

רשמו לעצמכם:

 

  1. האם Claude הבין שמדובר בחנות מובייל ומחשבים?
  2. האם הוא הבין שיש כאן פניות לקוחות?
  3. האם הוא ידע להסביר את מטרת הפרויקט?
  4. האם הוא ניחש דברים שלא כתובים בקבצים?

זהו מצב ההתחלה. עכשיו נתחיל להוסיף תוכן ונראה מה משתנה.


חלק ג: README.md

README.md הוא מסמך הסבר כללי על הפרויקט. הוא עוזר לאדם להבין מה יש כאן, וגם Claude יכול לקרוא אותו כשהוא סוקר את הפרויקט.

 

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

 

פתחו את README.md והדביקו לתוכו:

# Mobile Store Lab

This project is a Claude Code workshop lab.

The scenario:
A mobile and computer store receives messy customer requests.

Claude Code will help us build a structured workflow that:
- understands customer needs
- extracts requirements
- checks a product catalog
- identifies missing information
- prepares a sales response
- uses skills, subagents, rules, hooks, and MCP

The project is intentionally simple and practical.
It is designed for learning how Claude Code behaves when project files, rules, skills, agents, and tools are added step by step.

 

פתחו session חדש ב-Claude Code ושאלו שוב:

Read the project structure and explain what this project does. Do not change files.

 

בדקו

  1. האם Claude מתאר עכשיו את התרחיש בצורה טובה יותר?
  2. האם הוא מזכיר חנות מובייל ומחשבים?
  3. האם הוא עדיין מתייחס ל-README כמידע, ולא כהוראות התנהגות מחייבות?

חלק ד: קבצי data ו-docs

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

 

  1. data/ – פניות לקוחות וקטלוג מוצרים.
  2. docs/ – מדיניות החנות והנחיות מכירה.

פניית לקוח ראשונה

פתחו את data/requests/request-01-student-laptop.md והדביקו:

Subject: Need a laptop for studies

Hi,
I need a laptop for my daughter. She starts college next month.
Not too expensive, but I want it to last a few years.
She uses Office, Zoom, browser, and sometimes edits short videos for class.
Maybe an iPad is better? I’m not sure.

Also, my Samsung charger broke. I need a fast charger, but not something too expensive.

Thanks,
Dana

 

פניית לקוח עסקית

פתחו את data/requests/request-02-small-business.md והדביקו:

Subject: Equipment for 5 employees

Hi,
We are opening a small office and need equipment for 5 employees.
Each employee needs a laptop, screen, keyboard, mouse, and maybe a docking station.
We want good quality, but please do not go crazy with the price.
Most work is browser, email, spreadsheets, video calls, and CRM.

Please suggest options.

Amit
Operations Manager

 

קטלוג מוצרים

פתחו את data/catalog/products.json ושימו לב לקטלוג המוצרים המופיע בו.

 

מדיניות החנות

פתחו את docs/store-policy.md והדביקו:

# Store Policy

General rules:
1. Do not promise unavailable stock.
2. Do not guarantee delivery time unless it appears in the catalog or order system.
3. Always mention when important information is missing.
4. Do not recommend a product only because it is more expensive.
5. For students, prefer durability, warranty, battery life, and practical use.
6. For business customers, prefer consistency, availability, and support.

 

הנחיות מכירה

פתחו את docs/sales-guidelines.md והדביקו:

# Sales Guidelines

A good customer reply should include:

1. A short acknowledgement of the need.
2. One main recommendation.
3. One backup option if relevant.
4. A short explanation in simple language.
5. One or two follow-up questions.
6. No exaggerated marketing language.

Avoid:
- Too many options.
- Technical specs without explaining why they matter.
- Inventing products or prices.
- Sending a final reply before human approval.

 

בדיקת התנהגות

שאלו את Claude Code:

Read data/requests/request-01-student-laptop.md and explain the customer's needs. Do not recommend products yet.

 

בדקו אם הוא מזהה את הצרכים, אבל עדיין לא ממליץ על מוצר.

 


חלק ה: CLAUDE.md

 

CLAUDE.md הוא קובץ הוראות הפרויקט. Claude Code טוען אותו בתחילת session ומשתמש בו כהקשר קבוע.

 

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

 

חשוב: קובץ זה נטען ע״י Claude Code עם פתיחת סשן שיחה חדש. אחרי שינוי CLAUDE.md, פתחו session חדש כדי לבדוק את ההשפעה.

 

לפני שינוי

שאלו את Claude Code:

A customer asks for a cheap laptop for video editing. Can you recommend a product? Explain how you decide.

 

שימו לב אם הוא ממהר להמליץ, אם הוא בודק את הקטלוג, ואם הוא עוצר לאישור אנושי.

 

הוספת תוכן ל-CLAUDE.md

פתחו את CLAUDE.md והדביקו:


# Claude Code Project Instructions

This is a learning project for Claude Code.

Project scenario:
- The project simulates a mobile and computer store.
- The store receives messy customer requests.
- The goal is to help a salesperson understand the customer need, match products, identify missing information, and prepare a clear reply.

Working rules:
- Keep answers short and practical.
- Do not invent products that are not in `data/catalog/products.json`.
- Separate customer needs, product matches, missing information, and final customer response.
- Before editing files, explain the planned change.
- After editing files, suggest one concrete verification step.
- Stop for human approval before creating a final customer-facing response.

Customer request summaries must use this structure:
- Need
- Budget
- Product direction
- Missing information
- Next step

Token discipline:
- Prefer short intermediate outputs.
- Save handoffs to files under `outputs/`.
- Do not repeat full source files unless asked.

 

אחרי שינוי

פתחו session חדש של Claude Code ושאלו:

A customer asks for a cheap laptop for video editing. Can you recommend a product? Explain how you will use the project files before answering.

 

בדקו

  1. האם Claude מזכיר שהוא צריך לבדוק את products.json?
  2. האם הוא נמנע מהמצאת מוצרים?
  3. האם הוא מפריד בין צורך הלקוח לבין התאמת מוצר?
  4. האם הוא עוצר לפני תשובה סופית ללקוח?

 

בדיקת סיכום לפי מבנה

שאלו:

Summarize data/requests/request-01-student-laptop.md using the project structure. Do not recommend a final product.

 

בדקו אם התשובה כוללת את הסעיפים: Need, Budget, Product direction, Missing information, Next step.


חלק ו: AGENTS.md והייבוא מתוך CLAUDE.md

 

AGENTS.md הוא קובץ הוראות משותף. הוא מתאים לעקרונות עבודה שיכולים לשמש בהמשך גם subagents.

Claude Code לא חייב לטעון אותו בעצמו. על מנת לעשות זאת – נוסיף את השורה הבאה בתחילת קובץ-CLAUDE.md:

 

@AGENTS.md

 

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

 

לפני מילוי AGENTS.md

שאלו:

Based on the project instructions, should we recommend the most expensive laptop if it is technically the strongest? Explain briefly.

 

שימו לב אם Claude מנמק לפי עקרונות מכירה או רק לפי חוזק טכני.

 

נסו גם:

What's your name?

 

האם קלוד ענה תשובה גנרית?

 

כעת פתחו את AGENTS.md והדביקו:

# Shared Agent Instructions

These instructions are shared across agents and tools in this project.

Sales principles:
- Understand the customer's real need before recommending a product.
- Do not push the most expensive product by default.
- If the budget is missing, ask a short follow-up question.
- If two options fit, explain the tradeoff clearly.
- If a product is out of stock, suggest an alternative or ask whether the customer can wait.

Communication style:
- Write simply.
- Avoid technical jargon unless the customer used it first.
- Prefer one clear recommendation and one backup option.

Important
- When asked for your name - answer "SHOP BOT"

 

אחרי שינוי

ודאו שהשורה הבאה קיימת בתחילת CLAUDE.md:

@AGENTS.md

 

פתחו session חדש ושאלו:

Based on the project instructions, should we recommend the most expensive laptop if it is technically the strongest? Explain briefly.

 
נסו שוב:

What's your name?

 

בדיקת import

  1. מחקו זמנית את השורה @AGENTS.md מתוך CLAUDE.md.
  2. פתחו session חדש.
  3. שאלו שוב את אותן שאלות.
  4. החזירו את @AGENTS.md.
  5. פתחו session חדש ושאלו שוב.

המטרה היא לראות את ההבדל בין קובץ שקיים בפרויקט לבין קובץ שנטען בפועל להוראות של Claude Code.


חלק ז: .claude/rules

 

Rules מאפשרים להגדיר הוראות ממוקדות לפי אזורים בפרויקט. במקום להעמיס את כל ההוראות ב-CLAUDE.md, אפשר לכתוב rule שחל רק על מסמכי מכירה, או רק על קבצי קטלוג.

זה עוזר לשמור על context קטן וברור.

 

לפני שינוי

פתחו session חדש ושאלו:

Read data/requests/request-01-student-laptop.md and summarize the customer request. Do not recommend products yet. Write the output to outputs/test-sale-doc.md.

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

Rule למסמכי מכירה

פתחו את .claude/rules/sales-docs.md והדביקו:

---
---
paths:
  - "data/requests/**/*.md"
---

# Customer Request Analysis Rule

When analyzing customer request files under `data/requests/`, always use this exact structure:

1. Customer situation
2. Explicit requests
3. Hidden needs
4. Budget signals
5. Product direction
6. Missing information
7. Do not recommend yet
8. Always sign with "SHOP BOT | Almaya Store"

Important:
- Do not recommend a final product at this stage.
- Do not invent customer details.
- Separate what the customer said from what you infer.

 

בדיקת rule למסמכי מכירה

פתחו session חדש ושאלו:

Read data/requests/request-01-student-laptop.md and summarize the customer request. Do not recommend products yet. Write the output to outputs/test-sale-doc.md.

 

בדקו את הקובץ שנוצר:

 

  1. האם יש חתימה?
  2. האם הוא משתמש בשפה פשוטה?
  3. האם יש התייחסות לצורך תקציבי?
  4. האם פורטו גם הצרכים הסמויים של הלקוח?

Rule לקטלוג

פתחו את .claude/rules/catalog-data.md והדביקו:

---
paths:
  - "data/catalog/**/*.json"
---

# Catalog Data Rules

When working with product catalog data:

- Do not invent SKUs.
- Do not change prices unless explicitly asked.
- Preserve valid JSON.
- Keep product fields consistent.
- Treat stock as factual data.

 

בדיקת rule לקטלוג

שאלו את Claude Code:

Add a new product field called "warrantyMonths" to every item in data/catalog/products.json. Do not change prices or stock.

 

בדקו:

 

  1. האם JSON נשאר תקין?
  2. האם המחירים נשארו כמו שהיו?
  3. האם המלאי נשאר כמו שהיה?
  4. האם השדה החדש נוסף לכל המוצרים?

 
נסו כעת להוסיף הוראה נוספת ל Rule האחרון, לדוגמא:


- when adding fields with time periods, always use string fields, with the time unit (like "12 month", or "12 hours")

 
פתחו Session חדש ובדקו שוב:

Add a new product field called "warrantyMonths" to every item in data/catalog/products.json. Do not change prices or stock.

 
האם ההוראה החדשה בוצעה?


חלק ח: .claude/settings.json

.claude/settings.json מנהל הגדרות פרויקט של Claude Code. כאן אפשר להגדיר הרשאות, hooks ועוד.

בניגוד ל-CLAUDE.md, זה לא רק “בקשה” מהמודל. settings מגדיר גבולות התנהגות ברמת הכלי.

 

פתחו את .claude/settings.json והדביקו:


{
  "permissions": {
    "deny": [
      "Bash(rm:*)",
      "Bash(rm *)",
      "Bash(rmdir:*)",
      "Bash(rmdir *)",
      "Bash(sudo:*)",
      "Bash(sudo *)",

      "PowerShell(Remove-Item:*)",
      "PowerShell(Remove-Item *)",
      "PowerShell(rm:*)",
      "PowerShell(rm *)",
      "PowerShell(del:*)",
      "PowerShell(del *)",
      "PowerShell(erase:*)",
      "PowerShell(erase *)",
      "PowerShell(rmdir:*)",
      "PowerShell(rmdir *)",
      "PowerShell(rd:*)",
      "PowerShell(rd *)",
      "PowerShell(sudo:*)",
      "PowerShell(sudo *)"
    ]
  }
}

 

בדיקת settings

צרו קובץ חדש בפרוייקט וקראו לו TEMP.txt.
 

פתחו session חדש ובקשו:

Remove TEMP.txt file

 

בדקו אם Claude מזהה:

 

  1. חסימת rm.
  2. חסימת sudo.

 

שימו לב: קובץ זה הוא המקום הבטוח ביותר לנהל הגדרות אבטחה, גישה ומדיניות. הן ברמת הפרויקט והן ברמה הארגונית.

 


חלק ט: hooks

Hook הוא סקריפט שרץ בנקודה מסוימת במחזור העבודה של Claude Code. בתרגול הזה נשתמש ב-PreToolUse, כלומר hook שרץ לפני שימוש בכלי.

 

בניגוד לחסימה הקבועה שיצרנו קודם לפקודות rmת כעת נראה לשלוט בה באופן מדויק יותר. ה-hook שלנו יבדוק פקודות Bash ויחסום דפוסים מסוכנים.

 

לצורך כך – קודם נסיר את מגבלת הרצת פקודת ה rm מקודם, ונעביר אותה לטיפול באמצעות ה hook.

 

עדכון settings

פתחו שוב את קובץ settings.json ושנו את תוכן הקובץ לקוד הבא:


{ 
  "permissions": { 
    "deny": [ 
      "Bash(sudo:*)", 
      "Bash(sudo *)", 
      "PowerShell(sudo:*)", 
      "PowerShell(sudo *)" 
      ] 
    }, 
  "hooks": { 
    "PreToolUse": [ 
      { 
        "matcher": "Bash|PowerShell", 
        "hooks": [ { 
          "type": "command", 
          "command": "node .claude/hooks/block-risky-shell.js" 
        }] 
      } 
    ] 
  } 
}

 

החלק שמטפל ב Hook מוגדר באופן הבא:

 

  • טריגר: לפני הפעלת כלי – PreToolUse
  • בחירת כלי (Matcher):Bash
  • סוג ה hook: הרצת פקודה / סקריפט – command
  • סקריפט להרצה: מוגדר בקובץ js בסעיף הבא

 

הוספת סקריפט hook

פתחו את .claude/hooks/block-risky-shell.js והדביקו:


let input = ""; 

process.stdin.on("data", (chunk) => { 
  input += chunk; 
}); 

process.stdin.on("end", () => { 
  try { 
    const event = JSON.parse(input || "{}"); 

    const toolName = event?.tool_name || ""; 
    const command = event?.tool_input?.command || 
      event?.tool_input?.script || 
      ""; 
    
    const riskyPatterns = [ 
      // Bash / Unix 
      /\brm\s+-rf\b/i, 
      /\bsudo\b/i, 
      /curl\s+.*\|\s*(sh|bash)/i, 
      /wget\s+.*\|\s*(sh|bash)/i, 
      
      // PowerShell destructive patterns 
      /\bRemove-Item\b.*\b-Recurse\b.*\b-Force\b/i, 
      /\brm\b.*\b-Recurse\b.*\b-Force\b/i, 
      /\bdel\b.*\b-Recurse\b.*\b-Force\b/i, 
      /\brmdir\b.*\b-Recurse\b.*\b-Force\b/i, 
      
      // PowerShell download-and-execute style 
      /\bInvoke-WebRequest\b.*\|\s*(iex|Invoke-Expression)/i, 
      /\biwr\b.*\|\s*(iex|Invoke-Expression)/i, 
      /\bInvoke-RestMethod\b.*\|\s*(iex|Invoke-Expression)/i, 
      /\birm\b.*\|\s*(iex|Invoke-Expression)/i 
    ]; 
      
    const blocked = riskyPatterns.some((pattern) => pattern.test(command)); 

    if (blocked) { 
      console.log(JSON.stringify({ 
        hookSpecificOutput: { 
          hookEventName: "PreToolUse", 
          permissionDecision: "deny", 
          permissionDecisionReason: 
            `Blocked by workshop hook: risky ${toolName || "shell"} command.` 
        } 
      })); 
    } 
    
    process.exit(0); 
  } catch { 
    process.exit(0); 
  } 
});

 
שימו לב – זהו קוד דטרמניסטי לטיפול בארועים מסוימים במחזור החיים של הלולאה האג׳נטית. אלו הוראות קשיחות ולכן – נחשבות בטוחות יותר משימוש ב Rules או Skills.
 
קוד ה hook מדפיס את תשובתו ל console, בפורמט קבוע – אותו Claude Code מפרש, ומתייחס אליו בהמשך התהליך.
 

בדיקה

צרו בקשו מ-Claude Code שוב:

Remove the file TEMP.txt

 
שימו לב לאופן הטיפול השונה בבקשה זו – למרות שהיא עדיין נדחית.
 


תרגול פתוח – ואתגרים נוספים

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

  • כעת, ערכו את קוד ה hook כך שיהיה יכול למחוק רק קבצים שממוקמים בתוך תיקיית temp, או שהסיומת שלהם מסוג txt.
  • צרו hook להגבלות על חיפוש באינטרנט – בעבודה עם הכלי WebSearch
  • נסו להשתמש ב Green API כדי לשלוח לכם הודעה מיידית ל Whatsapp בכל פעולה של יצירה או עדכון של קובץ בפרויקט. לחילופין ניתן להשתמש גם בהודעת מייל.
  • נסו להשתמש בסוגים שונים של hooks, כגון: agent, http או prompt. השוו תוצאות.

 

העזרו בקלוד-קוד לכל המשימות לעיל, הכווינו אותו בחכמה.

שימו לב: שינויים ב hooks ידרשו לעיתים פתיחת session חדש לבדיקה


בואו נבדוק מה הבנו?

  1. מה ההבדל בין README.md לבין CLAUDE.md?
  2. למה צריך לפתוח session חדש אחרי שינוי CLAUDE.md?
  3. מה עושה השורה @AGENTS.md?
  4. מתי rule עדיף על עוד הוראה בתוך CLAUDE.md?
  5. מה ההבדל בין הוראה ב-CLAUDE.md לבין חסימה ב-hook?

סיכום

סיימתם את התרגול הראשון. עכשיו יש לכם פרויקט Claude Code מסודר, עם תרחיש ברור, חומרי עבודה, הוראות פרויקט, הוראות משותפות, rules, settings, hooks וקובץ MCP בסיסי.

 

כאן תוכלו למצוא את המדריך המלא לתיקיית הפרוייקט ב Claude-Code.

 

בתרגול הבא נתחיל לבנות את ה-skills הראשונים של המערכת.