סקיל Codebase Architecture
improve-codebase-architecture הוא סקיל לקלוד קוד שסורק בסיס קוד שלם ומאתר הזדמנויות להעמקת ארכיטקטורה: מקומות שבהם מודול רדוד מסתיר מורכבות מיותרת, ואפשר להפוך אותו למודול עמוק וברור יותר. הסקיל מציג את הממצאים כדוח חזותי, ואז עובר איתכם שלב-שלב על ההזדמנות שתבחרו. הוא מבוסס על תורת העיצוב של מודולים עמוקים מול רדודים, ומדבר בשפה מקצועית אחידה. בפרויקטי הפיתוח שאני מוביל, סקיל זה הוא כלי הבריאות שמונע מבסיס הקוד להפוך עם הזמן לסבך שקשה לתחזק. במדריך תקבלו את התהליך המלא, ארבעה תרחישי שימוש אמיתיים, וצ'קליסט לעבודה נכונה איתו.
פקודת התקנה
npx skills add mattpocock/skills@improve-codebase-architecture -g -y
ההתקנה מתבצעת דרך מנהל החבילות הרשמי של הסקילים בפקודה אחת. הסקיל הוא קובץ Markdown פתוח מהמאגר של מאט פוקוק. הוא מופעל מפורשות כפקודה, ולא מתבצע אוטומטית. אפשר להוריד ולבדוק את הקוד דרך הכפתורים שבראש העמוד.
מה הסקיל כולל?
הסקיל מתעד תהליך תלת-שלבי: סריקה של בסיס הקוד לאיתור חיכוך, הצגת מועמדים לשיפור בדוח חזותי, ולולאת ליבון מודרכת של ההזדמנות הנבחרת.
קוד הסקיל המלא
---
name: improve-codebase-architecture
description: Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.
disable-model-invocation: true
---
# Improve Codebase Architecture
Surface architectural friction and propose **deepening opportunities** — refactors that turn shallow modules into deep ones. The aim is testability and AI-navigability.
This command is _informed_ by the project's domain model and built on a shared design vocabulary:
- Run the `/codebase-design` skill for the architecture vocabulary (**module**, **interface**, **depth**, **seam**, **adapter**, **leverage**, **locality**) and its principles (the deletion test, "the interface is the test surface", "one adapter = hypothetical seam, two = real"). Use these terms exactly in every suggestion — don't drift into "component," "service," "API," or "boundary."
- The domain language in `CONTEXT.md` gives names to good seams; ADRs in `docs/adr/` record decisions this command should not re-litigate.
## Process
### 1. Explore
Read the project's domain glossary (`CONTEXT.md`) and any ADRs in the area you're touching first.
Then use the Agent tool with `subagent_type=Explore` to walk the codebase. Don't follow rigid heuristics — explore organically and note where you experience friction:
- Where does understanding one concept require bouncing between many small modules?
- Where are modules **shallow** — interface nearly as complex as the implementation?
- Where have pure functions been extracted just for testability, but the real bugs hide in how they're called (no **locality**)?
- Where do tightly-coupled modules leak across their seams?
- Which parts of the codebase are untested, or hard to test through their current interface?
Apply the **deletion test** to anything you suspect is shallow: would deleting it concentrate complexity, or just move it? A "yes, concentrates" is the signal you want.
### 2. Present candidates as an HTML report
Write a self-contained HTML file to the OS temp directory so nothing lands in the repo. Resolve the temp dir from `$TMPDIR`, falling back to `/tmp` (or `%TEMP%` on Windows), and write to `<tmpdir>/architecture-review-<timestamp>.html` so each run gets a fresh file. Open it for the user — `xdg-open <path>` on Linux, `open <path>` on macOS, `start <path>` on Windows — and tell them the absolute path.
The report uses **Tailwind via CDN** for layout and styling, and **Mermaid via CDN** for diagrams where a graph/flow/sequence reliably communicates the structure. Mix Mermaid with hand-crafted CSS/SVG visuals — use Mermaid when relationships are graph-shaped (call graphs, dependencies, sequences), and hand-built divs/SVG when you want something more editorial (mass diagrams, cross-sections, collapse animations). Each candidate gets a **before/after visualisation**. Be visual.
For each candidate, render a card with:
- **Files** — which files/modules are involved
- **Problem** — why the current architecture is causing friction
- **Solution** — plain English description of what would change
- **Benefits** — explained in terms of locality and leverage, and how tests would improve
- **Before / After diagram** — side-by-side, custom-drawn, illustrating the shallowness and the deepening
- **Recommendation strength** — one of `Strong`, `Worth exploring`, `Speculative`, rendered as a badge
End the report with a **Top recommendation** section: which candidate you'd tackle first and why.
**Use CONTEXT.md vocabulary for the domain, and the `/codebase-design` vocabulary for the architecture.** If `CONTEXT.md` defines "Order," talk about "the Order intake module" — not "the FooBarHandler," and not "the Order service."
**ADR conflicts**: if a candidate contradicts an existing ADR, only surface it when the friction is real enough to warrant revisiting the ADR. Mark it clearly in the card (e.g. a warning callout: _"contradicts ADR-0007 — but worth reopening because…"_). Don't list every theoretical refactor an ADR forbids.
See [HTML-REPORT.md](HTML-REPORT.md) for the full HTML scaffold, diagram patterns, and styling guidance.
Do NOT propose interfaces yet. After the file is written, ask the user: "Which of these would you like to explore?"
### 3. Grilling loop
Once the user picks a candidate, run the `/grilling` skill to walk the design tree with them — constraints, dependencies, the shape of the deepened module, what sits behind the seam, what tests survive.
Side effects happen inline as decisions crystallize — run the `/domain-modeling` skill to keep the domain model current as you go:
- **Naming a deepened module after a concept not in `CONTEXT.md`?** Add the term to `CONTEXT.md`. Create the file lazily if it doesn't exist.
- **Sharpening a fuzzy term during the conversation?** Update `CONTEXT.md` right there.
- **User rejects the candidate with a load-bearing reason?** Offer an ADR, framed as: _"Want me to record this as an ADR so future architecture reviews don't re-suggest it?"_ Only offer when the reason would actually be needed by a future explorer to avoid re-suggesting the same thing — skip ephemeral reasons ("not worth it right now") and self-evident ones.
- **Want to explore alternative interfaces for the deepened module?** Run the `/codebase-design` skill and use its design-it-twice parallel sub-agent pattern.
מה זה improve-codebase-architecture ולמה הסקיל הזה שונה?
improve-codebase-architecture נשען על רעיון מרכזי בהנדסת תוכנה: ההבדל בין מודול עמוק למודול רדוד. מודול עמוק מסתיר הרבה מורכבות מאחורי ממשק פשוט, ומודול רדוד חושף ממשק כמעט מורכב כמו המימוש עצמו ולכן רק מוסיף רעש. רוב בסיסי הקוד נשחקים עם הזמן כי מצטברים בהם מודולים רדודים, וקשה לזהות את זה בעין בלי שיטה מסודרת.
מה שמייחד את הסקיל הוא שהוא לא מסתפק בעצה כללית. הוא שולח סוכן חקירה לעבור על הקוד, מסמן היכן יש חיכוך אמיתי, ומחיל את מבחן המחיקה: האם הסרת רכיב מסוים תרכז את המורכבות במקום אחד הגיוני, או רק תזיז אותה הלאה? תשובה חיובית היא הסימן שמדובר במודול רדוד שראוי להעמקה. כל זה מוצג בדוח חזותי עם תרשים לפני ואחרי, כך שגם מי שלא חי בקוד מבין את התמונה.
ההבדל מורגש לאורך זמן. במקום ריפקטור אקראי לפי תחושה, מקבלים רשימת הזדמנויות מדורגת לפי עוצמת המלצה, וכל אחת מנומקת במונחים של לוקליות ומינוף. בעבודות האוטומציה שאני בונה, הרצה תקופתית של הסקיל שומרת על בסיס קוד נקי שקל להרחיב, וזה מה שמאפשר להוסיף יכולות חדשות בלי שכל שינוי יישבר במקום אחר.
מה improve-codebase-architecture נותן לקלוד קוד?
הסקיל מוסיף לקלוד עין של אדריכל תוכנה: לא רק לכתוב קוד, אלא לזהות איפה המבנה חלש ולהציע איך להעמיק אותו.
סריקה לאיתור חיכוך
קלוד עובר על בסיס הקוד עם סוכן חקירה ומסמן היכן ההבנה דורשת קפיצה בין מודולים רבים, היכן הממשק מורכב מדי, והיכן הבדיקות קשות. במקום ניחוש, מקבלים מפה של הנקודות שבאמת מכבידות.
מבחן המחיקה
לכל רכיב חשוד הסקיל שואל אם מחיקתו תרכז מורכבות במקום הגיוני או רק תפזר אותה. זה כלי חשיבה חד שמבדיל בין הפשטה אמיתית לבין שכבה מיותרת, ומונע ריפקטור שמסבך יותר משהוא עוזר.
דוח חזותי לפני ואחרי
הממצאים מוצגים בדוח HTML עצמאי עם כרטיס לכל הזדמנות: הקבצים המעורבים, הבעיה, הפתרון, התועלת, ותרשים שמראה את המבנה הרדוד מול המבנה העמוק. כך ההחלטה מבוססת על תמונה ברורה ולא על תיאור מילולי.
שפת עיצוב אחידה
הסקיל מקפיד על אוצר מילים מדויק: מודול, ממשק, עומק, תפר, מנוף ולוקליות. במקום שכל דיון יתפזר למונחים מעורפלים, כל ההמלצות מדברות באותה שפה, וזה מה שהופך אותן לברורות ולישימות.
ארבע היכולות הופכות את קלוד משותף שכותב קוד לשותף ששומר על בריאות הקוד. בעבודות שלי, הרצה תקופתית של הסקיל מנעה הצטברות של חוב טכני, ושמרה על בסיס קוד שקל להרחיב גם אחרי חודשים של פיתוח.
למי הסקיל הזה מתאים?
מובילי פיתוח ואדריכלי תוכנה: זה הקהל המובהק. הסקיל נותן דרך שיטתית לאתר חוב ארכיטקטוני ולתעדף אותו, במקום להסתמך על תחושת בטן. השילוב עם סקיל grill-with-docs מחדד כל החלטה מול התיעוד הקיים.
מפתחים שיורשים קוד של מישהו אחר: כשנכנסים לפרויקט לא מוכר, הדוח החזותי הוא מפת דרכים מהירה להבנת המבנה ולזיהוי הנקודות הבעייתיות, הרבה לפני שמתחילים לגעת בקוד.
צוותים שרוצים תהליך ריפקטור מסודר: במקום ריפקטור ספונטני שכל אחד עושה אחרת, הסקיל מייצר שפה ותהליך משותפים, כך שכל שיפור מנומק ומתועד.
סטארטאפים שצריכים לקנה מידה: קוד שנכתב מהר בשלב מוקדם הופך לנטל כשהמוצר גדל. הרצה תקופתית של הסקיל שומרת על מבנה שמאפשר להוסיף יכולות בלי לשבור את הקיים. גם בעבודות הקידום שלי, מערכת בנויה נכון קלה הרבה יותר לשדרוג.
מפתחי סולו ופרילנסרים: בלי צוות שמבקר את הקוד, הסקיל הוא שכבת בקרה שמחליפה סקירת עמית ושומרת על איכות לאורך זמן.
מי שפחות יתאים: פרויקט קטן וחד-פעמי שלא צפוי לגדול לא זקוק להעמקה ארכיטקטונית. שם עדיף להשקיע את הזמן בכתיבה ישירה, ולחזור לסקיל רק אם הקוד מתחיל לחיות לאורך זמן.
איך improve-codebase-architecture עזר לי בפרויקטים אמיתיים
פירוק שכבת הפשטה מיותרת
פרויקט סבל מקושי בתחזוקה. הסקיל זיהה שכבת עזר שנראתה מועילה אבל בעצם רק פיזרה את הלוגיקה. מבחן המחיקה הראה שהסרתה תרכז את המורכבות במקום אחד הגיוני. אחרי הריפקטור, הוספת תכונה חדשה דרשה נגיעה בקובץ אחד במקום בחמישה.
הבנת קוד שירשתי בתוך שעה
נכנסתי לפרויקט לקוח לא מוכר. במקום ימים של קריאת קוד, הרצתי את הסקיל וקיבלתי דוח חזותי שמיפה את המבנה ואת נקודות החיכוך. בתוך שעה היה לי כיוון ברור היכן להתחיל, וזה קיצר את שלב ההיכרות באופן דרמטי.
תיעדוף חוב טכני מול בעלי עניין
צוות התלבט מה לתקן קודם. דירוג עוצמת ההמלצה של הסקיל נתן שפה משותפת להחלטה, והתרשימים אפשרו להציג את הבעיה גם למי שלא קורא קוד. בחרנו את שלוש ההזדמנויות החזקות, והשאר תועד להמשך בלי להעמיס.
שמירה על קוד נקי לאורך פרויקט ארוך
במוצר שפותח לאורך חודשים, הרצתי את הסקיל אחת לתקופה כבדיקת בריאות. בכל פעם הוא תפס מודולים שהתחילו להתרדד, וטיפלנו בהם מוקדם. כך נמנעה הצטברות חוב, והמערכת נשארה קלה להרחבה עד הסוף.
ארבעת המקרים מראים שהסקיל לא רק מנקה קוד, הוא משנה גישה: הופך את בריאות הארכיטקטורה לתהליך קבוע ומדיד במקום למשימה שנדחית עד שמאוחר מדי. כשמשלבים אותו בעבודה שוטפת, בסיס הקוד נשאר נכס ולא הופך לנטל.
סיכום
סקיל improve-codebase-architecture הוא כלי חובה לכל מי שאכפת לו מבריאות הקוד לאורך זמן. הוא מחליף ריפקטור לפי תחושה בתהליך שיטתי שמאתר מודולים רדודים, מנמק כל המלצה, ומציג הכול בדוח חזותי ברור.
אם אתם מתחילים, הריצו אותו על פרויקט קיים ובקשו מקלוד להציג את הדוח. תופתעו לגלות כמה הזדמנויות העמקה מסתתרות בקוד שנראה תקין. בחרו אחת חזקה, עברו איתו את לולאת הליבון, וראו איך המבנה משתפר.
בפוסטים הבאים אמשיך לסקור סקילים שמשדרגים את איכות הפיתוח. האתר של דביר נעמן מרכז את כל הכלים, השיטות והליווי שאני מציע לעסקים שרוצים לבנות תוכנה נכון עם בינה מלאכותית.
שיתוף הסקיל
שאלות ותשובות
מה זה בעצם הסקיל improve-codebase-architecture?
זה סקיל לקלוד קוד שסורק בסיס קוד שלם ומאתר הזדמנויות להעמיק את הארכיטקטורה, כלומר להפוך מודולים רדודים למודולים עמוקים וברורים יותר. הוא מציג את הממצאים בדוח חזותי עם תרשימי לפני ואחרי, ואז עובר איתכם על ההזדמנות שבחרתם. המטרה היא קוד קל יותר לבדיקה ולתחזוקה.
מה ההבדל בין מודול עמוק למודול רדוד?
מודול עמוק מסתיר הרבה מורכבות מאחורי ממשק פשוט, ולכן קל לעבוד איתו בלי להכיר את הפרטים. מודול רדוד חושף ממשק כמעט מורכב כמו המימוש, ולכן רק מוסיף רעש בלי לחסוך עבודה. הסקיל מתמקד באיתור מודולים רדודים והפיכתם לעמוקים, וזה מה שמייצר קוד נקי ויציב.
איך מתקינים את הסקיל בקלוד קוד?
בפקודה אחת דרך מנהל החבילות הרשמי של הסקילים, כפי שמופיע בקופסת ההתקנה למעלה. הסקיל הוא קובץ Markdown פתוח מהמאגר של מאט פוקוק. שימו לב שהוא מופעל במפורש כפקודה ולא מתבצע אוטומטית, כך שאתם בשליטה מלאה על מתי הוא רץ.
האם הסקיל משנה את הקוד שלי בעצמו?
לא בשלב הסריקה. הסקיל קודם כל מציג דוח עם הזדמנויות לשיפור ושואל אתכם איזו לבחור, בלי לגעת בקוד. רק אחרי שבחרתם ועברתם את לולאת הליבון, השינויים מתבצעים בהסכמתכם. הגישה הזאת שומרת אתכם בשליטה ומונעת ריפקטור לא רצוי.
מה זה הדוח החזותי שהסקיל מייצר?
זה קובץ HTML עצמאי שנכתב לתיקיית הקבצים הזמניים של המערכת, לא בתוך הריפו שלכם. הוא מציג כרטיס לכל הזדמנות עם הקבצים, הבעיה, הפתרון ותרשים לפני ואחרי, ובסוף ממליץ במה לטפל קודם. הוא משתמש בספריות עיצוב ציבוריות כדי להיראות נקי, בלי לשלוח שום מידע שלכם החוצה.
למי הסקיל מתאים, רק למתכנתים מנוסים?
הוא חזק במיוחד למובילי פיתוח, אבל מועיל גם למפתחים פחות מנוסים שרוצים ללמוד לחשוב על ארכיטקטורה. הדוח החזותי והשפה האחידה הופכים מושגים מופשטים למשהו ברור, כך שגם מי שלא חי במונחי עיצוב תוכנה מקבל כיוון מעשי ומנומק.
האם זה עובד עם כל שפת תכנות?
כן. הסקיל עוסק בעקרונות ארכיטקטורה שאינם תלויים בשפה, כמו עומק מודולים, תפרים ולוקליות, ולכן הוא רלוונטי לכל בסיס קוד. הוא מסתמך על מילון המונחים של הפרויקט אם קיים, וכך מתאים את ההמלצות לשפה ולתחום הספציפי שלכם.
מתי כדאי להריץ את הסקיל?
כדאי להריץ אותו כבדיקת בריאות תקופתית, למשל אחת לכמה שבועות בפרויקט פעיל, וגם כשנכנסים לקוד לא מוכר או לפני שמוסיפים תכונה גדולה. הרצה מוקדמת ועקבית מונעת הצטברות חוב טכני, וזה הרבה יותר זול מאשר לתקן ארכיטקטורה שכבר התקלקלה.