import logging ב-app.py + skill modules. אחסון persistent (לא /tmp), retention 90+ ימים, request IDs לtrace end-to-end.
למה זה חשוב: GDPR + SOC2 compliance. כיום אין trail למי הריץ skill מתי, על איזה client. אם משהו נפרץ - אין forensics.
מודול חדש skills/_audit.py: setup_audit_logger() + event() + new_request_id() עם JSON Lines + TimedRotatingFileHandler (daily, 90 backups). אחסון ב-~/.config/studio/logs/studio-audit.jsonl (700/600 perms - vault pattern). app.py: before_request מייצר request_id ומלוגג request_start + auth_failed; after_request מלוגג request_complete עם status + duration_ms. ב-/api/skills/<name>/run התווספו 6 events: rbac_denied, high_impact_blocked, deliverable_broken_blocked, skill_run_start (עם brief מלא), skill_run_complete (עם duration + outcome), skill_run_error. write_manifest ב-_common.py אוטומטית מצרף audit block למניפסט אם הקריאה היתה בהקשר Flask - cross-reference מלא בין JSONL לבין _manifest.yaml. CLI: scripts/audit-tail.py עם פילטרי --user/--client/--skill/--event/--since/--follow.
audit `registry.py` נגד `deliverables.py`. כיום 3-4 skills בלי deliverable, 4 deliverables בלי skill. הוסף startup validator שמדפיס warning + disables affected endpoints.
למה זה חשוב: Operator יבלבל כשעובד עם משרת stub שאין לו deliverable, או הפוך. כעת זה silent failure.
3 שמות drifted יושרו ב-7 קבצים: registry: seo-auditor-agent → seo-auditor; deliverables + ecosystem + map-mermaid + action_plan: *-builder → bare names; action_plan.py הוסר 2 פריטים stale + הוסף ל-git (היה untracked). סקיל חדש sync_validator.py מסווג 4 קטגוריות (ok/placeholder/broken/orphan), רץ ב-startup; api_deliverable + api_run מחזירים 503 על broken במקום stub שקט; /health מחזיר sync:clean/broken; הדפסת startup מציגה Sync: ok=67 placeholder=2 broken=0. Podcast (2 placeholder deliverables → podcast-engine) נשאר roadmap כמתוכנן.
כל `def run(brief: dict) -> dict:`. `@dataclass class SkillOutput: brief_id, manifest, outputs, primary_url, run_dir`. Registry type-checked עם mypy.
למה זה חשוב: Dispatcher pattern עם 79 skill modules ללא חוזה ברור. IDE לא יודע מה לצפות. ברגע שמתחילים לעבוד עם external developers - critical.
social-publisher agent קיים + content-calendar.csv קיים, אבל לא מחוברים. scheduler שקורא calendar ומפעיל publisher. ימי שבוע, שעות, channels.
למה זה חשוב: Layer 7 (Publishing) הופך מ-manual ל-fully automated. "Set calendar, walk away".
מודול חדש skills/scheduler.py מתזמן publishing: scan_calendars סורק את clients/*/content-calendar.csv, מסנן due+approved+unpublished, מתזמן channel-by-channel (linkedin/instagram/facebook/whatsapp/email - zoom מדולג ידני), מעדכן בחזרה את ה-CSV עם published_at + post_id (atomic via fcntl.flock). Multi-channel rows ("linkedin+facebook") מתפצלים לפרסום נפרד לכל ערוץ. אישור עובר דרך עמודת approved=true ב-CSV - ה-scheduler מזרים confirmed=true ל-brief כי האישור היה ב-CSV. Cron: 0 5 * * * (= 06:00 IDT). ה-shell wrapper ~/.claude/scripts/social-scheduler.sh עם 3-retry exponential backoff + flock. Flask: עמוד /scheduler עם 3 panels (היום / ממתינים לאישור / פורסמו לאחרונה) + הרצה ידנית (dry-run / real) + כפתור אישור per-row. 4 endpoints: /scheduler, /api/scheduler/{pending,tick,approve}. Audit events חדשים: scheduler_tick_start/complete, scheduler_skill_run_start/complete/error, scheduler_approval_changed, scheduler_skipped_channel - כולם עם studio_user=scheduler + synthesized request_id.
analytics-tracking schema קיים. חסר daily data pull (GA4 API, social platforms) + weekly aggregator + client-facing report.
למה זה חשוב: Layer 8 (Measurement) - הלקוח רואה KPIs שבועיים בלי לבקש. Feedback loop ל-marcom-strategist (plan refresh).
כיום `D-I-main-studio` בגיט, אבל `runs/` (174 runs, 984 KB) ו-`clients/*/outputs/` לא בהכרח push. הוסף daily backup ל-cloud (Google Drive/Hetzner Storage Box).
למה זה חשוב: אם השרת קורס - 174 ריצות לקוחות אובדים. אין recovery path.
ניתוח מלא 2026-05-14: 0/174 ריצות ב-git, 30/134 קבצי clients/ untracked, vault (40KB) + audit JSONL לא מגובים. ~7MB היום, 100-500MB ב-6 חודשים. rclone כבר מותקן, borg/restic לא (אין sudo). שרת ב-Hetzner = Storage Box באותו DC זמין. 4 החלטות פתוחות לפני התחלת ביצוע: target (Google Drive/Hetzner), הצפנה (tar+gpg / rclone crypt), vault inclusion, GDPR data-residency.
7 API keys (BRIGHTDATA, PERPLEXITY, GEMINI, GOOGLE, FIRECRAWL, APIFY, SCRAPECREATORS) בלי quota guards. dashboard שמראה צריכה חודשית + alerts על כפל.
למה זה חשוב: תוקף או bug יכול לרוץ 100 domain-intel scans = $500+. אין early warning.
`skills.yaml` ← human edits → generated `registry.py`. pre-commit hook עם `validate-registry.py` שתופס typos (`module: analytics_plan` vs skill `analytics-tracking`).
למה זה חשוב: 1,308-line Python dict הוא bug magnet. Schema validation מונע runtime errors.
smoke tests לכל skill.run(), registry validation, deliverable-skill mapping, app startup, RBAC isolation. ~15 tests.
למה זה חשוב: אפס regression coverage כיום. כל refactor הוא הימור.
marcom-craftad-pilot (Ads), email-sequences (standalone), video-captions, youtube-analyzer, notes-processor, gsc. כיום ב-GOOLA STUDIO, לא נגישים מהסטודיו.
למה זה חשוב: 67 → 73 deliverables. פותח Email Sequences, Paid Ads, Video Captions, YT Analysis - 4 קטגוריות חדשות.
כל copy alternative דורש human approval. אוטומציה: Hebrew quality score + brand fit + em-dash check. 'Good enough' אוטומטית, edge cases רק רואים.
למה זה חשוב: 30-40% פחות approval gates. כל מאמר שגרתי עובר אוטומטית, רק high-stakes deliverables מצריכים בדיקה.
`/tmp/send-studio-*.py` (2 scripts עם credentials), `/tmp/cloudflared.log`, `/tmp/studio-catalog.log` - להעביר ל-persistent location.
למה זה חשוב: /tmp נמחק ב-reboot - היסטוריה אובדת. ה-scripts עם passwords - exposure רציף.
כיום ענבל/דולב מנהלים שיחת discovery ידנית. Wizard מסך אחר מסך: שם חברה → תעשייה → goals → budget → timeline → upload assets. רץ skill `client-discovery` ברקע עם הנתונים.
למה זה חשוב: Self-serve intake לפני שמתחיל ייעוץ. מקצר 30-60 דקות שיחה ל-15 דק' איסוף + 15 דק' validation.
כל deliverable שמצריך copy approval - גם preview של final PDF/HTML עם הcopy שנבחר. במקום לבדוק docx + לדמיין את הסופי.
למה זה חשוב: מצמצם errors שמתגלים אחרי publishing. הלקוח רואה מה הוא מאשר.
/metrics page: per-skill average run time, success rate (last 30/90 days), most-used, abandonment rate (started but no output).
למה זה חשוב: מאתר sk skills שמותקפים. עם 79 skills, ה-bottleneck לא ברור בלי data.
מסמך מסודר: השרת נופל, ה-Cloudflare URL נשבר, GitHub repo נדפק, BrightData ban, API key מוצף. צעדים מינימליים ל-recovery.
למה זה חשוב: ענבל/דולב לא יודעים מה צריך לעשות כש-something break. כיום ad-hoc.
ענבל מסיימת שירות עם לקוח. צעדים אוטומטיים: export client data (zip), remove from users.yaml, archive clients/{slug}/ ל-cold storage, delete after 90 ימי retention.
למה זה חשוב: GDPR compliance. ולה-Inbal: clutter management - כיום אין דרך לסגור client.
API קיים (`/api/versions/...`) אבל catalog.html לא חושף. UI - לראות history של כל deliverable, לחזור לגרסה קודמת, להשוות גרסאות.
למה זה חשוב: Mistake recovery. כיום אם deliverable נשבר ב-revision, ענבל צריכה לחפש manually ב-versions/.
shir.studio.example.com / amitai.studio.example.com - כל לקוח רואה רק את הנתונים שלו. UI מקצועי: approve deliverables, view metrics, download PDFs, comment, request revisions.
למה זה חשוב: מצב המוצר הסופי. לקוח לא נכנס ל-/clients/shir/ עם Basic Auth - הוא נכנס לdomain שלו עם branded experience. premium feel + clear separation.
Brand Pack (Discovery + Brandbook + Assets) ₪X, Content Month (12 deliverables) ₪Y, Strategic Plan (3-month) ₪Z. לקוח קונה online → onboarding אוטומטי → תוצרים תוך 5-10 ימים.
למה זה חשוב: Predictable revenue + scale. אג'נסי traditional מתמחר custom; tiered packages = volume. מתאים לעסקים קטנים שלא יכולים לקנות full service.
אחרי שהסטודיו בנה brandbook + voice guide ללקוח, chatbot RAG (retrieval augmented) שאסיסטנט פנימי של הלקוח יכול לדבר איתו. 'תכתוב לי email...' / 'איך אנחנו מדברים על X?' עם brand voice מובנה.
למה זה חשוב: המוצר נמשך - הלקוח משתמש מעבר ל-onboarding. עוד recurring revenue. גם data flywheel - הbot לומד מהשאלות.
'תן לי 30 ימי content calendar' → analyzes audience + competitors + brand → produces 30 briefs → executes 30 deliverables → schedules across channels → measures + iterates.
למה זה חשוב: Fully automated content factory. לקוח משלם monthly fee, מקבל content stream ללא effort. Differentiator עיקרי vs agency competitors.
מצמיד למרקום: רוצים לבחור headline? Studio publishes 2-3 variants על social/email small-audience, מודד engagement 24h, ממליץ best performer לbroader campaign.
למה זה חשוב: Data-driven copy decisions במקום "ענבל מנחשת". מבחין הסטודיו מעוד אג'נסי שמייצר content blind.
לכל לקוח: investment (paid), output (deliverables), outcomes (clicks/leads/conversions), $ ROI. מעודכן יומי. סיפוק לקוח + retention tool.
למה זה חשוב: לקוח לא יודע אם כדאי - dashboard עונה. צמצום churn ב-30-50% לפי benchmark agencies.
אג'נסים אחרים יכולים לרוץ studio שלהם תחת brand שלהם. ענבל/דולב SaaS provider. אג'נסי משלמת monthly + per-client.
למה זה חשוב: Scale beyond direct clients. הסטודיו הופך לתשתית של חברות אחרות. 10x revenue ceiling.
REST API שמאפשר ללקוחות לטריגר skills מ-Zapier/Make. "לקוח חדש נכנס ל-CRM → automatic discovery → brand pack draft". Webhook callbacks על completion.
למה זה חשוב: Embeds Studio in client tools. עוצמת lock-in. הופכים מ-vendor ל-platform.
ענבל/דולב מהפלאפון: pending approvals, recent deliverables, alerts, quick actions. PWA - no app store needed.
למה זה חשוב: Manager-on-the-go. ענבל לא תמיד ליד המחשב. status check בקפה במקום "חוזרת לבית".
כיום הסטודיו עברית-first. תמיכה ב-bilingual deliverables (HE + EN side-by-side) + future ערבית, ספרדית, וכו'.
למה זה חשוב: ישראלי clients עם global audience. SaaS startups במקרה צריכים EN + HE content packs. נפתחת קטגוריית לקוחות חדשה.