Files
legal-ai/docs/agent-audit-2026-05-17.md
Chaim 653f441e99
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 7s
docs: update agent audit report — mark all 12 issues resolved
- עדכון טבלת מצב: כל המודלים מסונכרנים (instructions = DB)
- החלפת טבלת בעיות בטבלת סטטוס תיקונים עם commit references
- הוסף טבלת שינויים נוספים מהסשן
- הערה: Skills CMPA=6 עיצוב מכוון, verify מאשר "0 need sync"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 12:57:54 +00:00

415 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# דו"ח Audit סוכנים — 2026-05-17
> נוצר על-ידי 7 sub-agents מקבילים שחקרו כל סוכן בנפרד.
> כיסוי: קבצי הנחיות, תצורת DB, skills, MCP tools, freshness, drift CMP↔CMPA.
>
> **עדכון 2026-05-17:** כל 12 הבעיות טופלו באותו יום. ראה סעיף "סטטוס תיקונים" למטה.
---
## סיכום מנהלים
### טבלת מצב כללית — לאחר תיקונים (2026-05-17)
| סוכן | מודל (instructions = DB) | Skills CMP | Skills CMPA | סטטוס |
|------|--------------------------|-----------|-----------|--------|
| עוזר משפטי (CEO) | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| מנתח משפטי | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| חוקר תקדימים | claude-sonnet-4-6 ✅ | 9 | 6 | ✅ תקין |
| כותב החלטה | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| בודק איכות (QA) | claude-sonnet-4-6 ✅ | 9 | 6 | ✅ תקין |
| מייצא טיוטה | claude-sonnet-4-6 ✅ | 9 | 6 | ✅ תקין |
| מגיה מסמכים | claude-opus-4-7 ✅ | 9 | 6 | ✅ תקין |
| מנהל ידע (Curator) | deepseek-v4-pro ✅ | 9 | 6 | ✅ תקין |
> Skills CMPA=6 הוא עיצוב מכוון (6 shared-only skills). verify script מאשר "0 agents need sync".
### סטטוס תיקונים — כל 12 הבעיות טופלו
| # | חומרה | סוכן | בעיה | סטטוס | commit |
|---|-------|------|------|-------|--------|
| 1 | 🔴 | מייצא | `טיוטה-V``טיוטה-v` — דורס גרסאות | ✅ תוקן | `a584dc3` |
| 2 | 🔴 | מייצא | case.status לא מעודכן ל-`exported` + case_update חסר מ-tools | ✅ תוקן | `a584dc3` |
| 3 | 🔴 | חוקר | §ז (query log) חסר בתיק 8174-24 | ✅ תוקן | data (gitignored) |
| 4 | 🟠 | כולם | Skills asymmetry CMPA | ✅ לא נדרש — verify: "0 need sync" (עיצוב מכוון) | — |
| 5 | 🟠 | חוקר | `search_internal_decisions` לא מתועד | ✅ תוקן — tool + סעיף 2ב.2א | `35423ea` |
| 6 | 🟠 | מייצא | נתיב legal-docx hardcoded ל-CMP UUID | ✅ תוקן → `$PAPERCLIP_COMPANY_ID` | `a584dc3` |
| 7 | 🟠 | CEO | Project ID + company UUID hardcoded | ✅ תוקן → דינמי מ-$PAPERCLIP_TASK_ID | `35423ea` |
| 8 | 🟡 | רוב | Model drift instructions↔DB | ✅ תוקן + שודרג ל-opus-4-7 | `1608ea5`, `c3ce0e7` |
| 9 | 🟡 | QA | corpus_queries_logged: ידני או אוטומטי? | ✅ תוקן — הבהרה מפורשת: grep ידני | `1608ea5` |
| 10 | 🟡 | CEO | maxConcurrentRuns=NULL | ✅ לא נדרש — DB כבר maxConcurrentRuns=2 | — |
| 11 | 🟡 | מגיה | {issue-id} placeholder בקוד | ✅ תוקן → `$PAPERCLIP_TASK_ID` | `1608ea5` |
| 12 | 🟢 | מנהל ידע | ownership הצעות curator לא מוגדר | ✅ תוקן — הוסף ל-CLAUDE.md | `1608ea5` |
### שינויים נוספים שבוצעו באותו סשן
| שינוי | קובץ | commit |
|-------|------|--------|
| weekly-feedback-job: כתיבה לקובץ בלבד, לא Paperclip comment | legal-ceo.md | `ea0532b` |
| try-catch על agents.invoke בפידבק שבועי | worker.ts | `73e37df` |
| try-catch על http.fetch ב-stale-case-reminder | worker.ts | `73e37df` |
| HEARTBEAT.md reference בראש legal-researcher.md | legal-researcher.md | `1608ea5` |
| search_internal_decisions הוסף ל-legal-researcher tools | legal-researcher.md | `35423ea` |
| opus-4-6 → opus-4-7 ב-DB: CEO, מנתח, כותב, מגיה (16 סוכנים) | DB | `c3ce0e7` |
---
## ממצאים לפי סוכן
### 1. עוזר משפטי (CEO)
**קובץ:** `.claude/agents/legal-ceo.md` — 796 שורות, עודכן 2026-05-17
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `752cebdd-6748-4a04-aacd-c7ab0294ef33` | claude-opus-4-6 | 1500¢ |
| CMPA | `cdbfa8bc-3d61-41a4-a2e7-677ec7d34562` | claude-opus-4-6 | 1500¢ |
**routing conditions:** `user_commented`, `agent_completion`, `precedent_extraction_*`, `weekly-feedback-job`, fallback→heartbeat רגיל
**MCP tools מוזכרים (41):** case_get/list/update, document_list, get_claims, get_chair_directions, record/list_chair_feedback, approve_direction, brainstorm_directions, search_case_documents, search_precedent_library, workflow_status, processing_status, get_metrics, validate_decision, set_outcome, export_docx, apply_user_edit, list_bookmarks, revise_draft, precedent_process_pending, extract_halachot/metadata, library_get/list, halacha_review, halachot_pending, extract_appraiser_facts, write_interim_draft, export_interim_draft
**✅ תקין:**
- Routing logic מלא ועדכני (כולל weekly-feedback-job שתוקן לאחרונה)
- Company filtering ברור (טבלה עם UUIDs וטווחי תיקים)
- Wakeup דרך API בלבד (לא DB ישיר) — מוגדר במפורש
- HEARTBEAT.md references נכונים (§0, §1, §1.7)
- weekly-feedback-job: כתיבה לקובץ בלבד, ללא issueId — נכון
**⚠️ בעיות:**
- 🟠 **Model drift:** instructions = claude-sonnet-4-6, DB = claude-opus-4-6
- 🟠 **Hardcoded Project ID:** `25c1b4a1-2c0e-4a2d-9938-8ae56ccda6f1` (תיק 1130-25) — צריך להיות דינמי
- 🟡 **maxConcurrentRuns = NULL** ב-DB (שאר הסוכנים = 1)
- 🟡 **MCP startup race:** הוראות מדברות על sleep+retry אבל לא כ-code אוטומטי
---
### 2. מנתח משפטי
**קובץ:** `.claude/agents/legal-analyst.md` — 498 שורות, עודכן 2026-05-04
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `c26e9439-a88a-49dc-9e67-2262c95db65c` | claude-opus-4-6 | 1500¢ |
| CMPA | `f70fd353-...` | claude-opus-4-6 | 1500¢ |
**MCP tools (18):** case_get/list/update, document_list/get_text, extract_claims, extract_appraiser_facts, get_claims, search_case_documents, search_decisions, search_precedent_library, precedent_library_get/list, halacha_review, halachot_pending, find_similar_cases, workflow_status, processing_status
**Output artifacts:** `{case_dir}/documents/research/analysis-and-research.md`
**Query logging (§5ד/§7א):** לרשום כל `search_precedent_library`, `search_decisions`, `find_similar_cases` כולל ניסיונות עם 0 תוצאות
**✅ תקין:**
- כל 18 כלי MCP מוזכרים ומיושמים
- סיווג claim_type ברור (claim/response/reply)
- Wakeup CEO בפורמט נכון
- reference files קיימים
**⚠️ בעיות:**
- 🟠 **Model drift:** instructions = claude-opus-4-7, DB = claude-opus-4-6
- 🟡 **CMPA sync gap:** עדכון אחרון CMPA = 2026-05-04 (13 ימים לפני CMP)
---
### 3. חוקר תקדימים
**קובץ:** `.claude/agents/legal-researcher.md` — 240 שורות, עודכן 2026-05-04
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `35022af0-0498-4c3d-90ca-b0ab9e987198` | claude-sonnet-4-6 | 1500¢ |
| CMPA | `5dd06843-...` | claude-sonnet-4-6 | 1500¢ |
**MCP tools (29):** case_get/update, document_list/get_text, search_case_documents, search_decisions, find_similar_cases, extract_references, precedent_attach, precedent_list, precedent_search_library, search_precedent_library, library_get/list, extract_halachot/metadata, precedent_process_pending, halacha_review, halachot_pending, workflow_status
**Output artifact:** `{case_dir}/documents/research/precedent-research.md`
**Query logging (§ז):** חובה — כל query עם פילטרים, תוצאות, בחירה/דחייה, negative evidence
**✅ תקין:**
- שלושת הקורפוסים מוגדרים בבירור (פסיקה חיצונית / קאנון דפנה / ציטוטים ידניים)
- precedent_attach עם הוראות מלאות
- Wakeup CEO דינמי לפי חברה
**⚠️ בעיות:**
- 🔴 **§ז חסר בתיק 8174-24** — 1 מתוך 3 תיקים בדיסק חסר את תיעוד השאילתות. QA אמור לחסום ייצוא.
- 🟠 **`search_internal_decisions` לא מתועד** — הכלי ב-header אבל לא מוסבר בגוף ההנחיות. מתי להשתמש בו?
- 🟠 **Skills asymmetry CMPA** — CMPA חסרה: legal-assistant, legal-decision, legal-docx, diagnose-why-work-stopped, appendix-expert-intern, terminal-bench-loop
- 🟡 **`daphna-precedent-network.md` עדכון אחרון 27 אפריל** — עשוי להיות לפני תקדימים חדשים
- 🟡 **HEARTBEAT.md לא מוזכר בפירוש** — אין link ישיר בתחילת ההנחיות
---
### 4. כותב החלטה
**קובץ:** `.claude/agents/legal-writer.md` — 410 שורות, עודכן 2026-05-04
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `7ed8686f-24bc-49a3-bc02-67ca15b895a9` | claude-opus-4-6 | 1500¢ |
| CMPA | `99289cb1-...` | claude-opus-4-6 | 1500¢ |
**Block range:** ה-יא (5-11), כותב בסדר; א-ד (אוטומטי), יב (אוטומטי)
**5 style docs לפני בלוק י (כולם קיימים):**
- `docs/daphna-voice-fingerprint.md` ✅ (עודכן 10 מאי)
- `docs/daphna-precedent-network.md` ✅ (עודכן 27 אפריל)
- `docs/daphna-architecture-by-outcome.md` ✅ (עודכן 28 אפריל)
- `docs/daphna-acceptance-architecture.md` ✅ (עודכן 28 אפריל)
- `docs/voice-1130-25.md` ✅ (עודכן 26 אפריל)
**MCP tools (18):** case_get/update, document_list/get_text, get_claims, get_chair_directions, get_decision_template, get_block_context, save_block_content, write_block, search_decisions, search_precedent_library, library_get/list, search_case_documents, get_style_guide, halacha_review, workflow_status, apply_user_edit
**✅ תקין:**
- 4 statuses של get_chair_directions מוגדרים (missing/empty/partial/complete)
- Revision mode ברור (לא לשמור ב-DB בעריכה)
- 10 anti-patterns ברורים
- Company filtering נכון (CEO IDs שונים לפי חברה)
**⚠️ בעיות:**
- 🟠 **Model drift:** instructions = claude-opus-4-7, DB = claude-opus-4-6
- 🟡 **חסר שלב 0 מפורש:** בדיקת `issue.description` (ההוראה הראשית מה-CEO)
---
### 5. בודק איכות (QA)
**קובץ:** `.claude/agents/legal-qa.md` — 219 שורות, עודכן 2026-05-04
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `1a5b229e-9220-4b13-940c-f8eb7285fc29` | claude-sonnet-4-6 | 1500¢ |
| CMPA | `7191ff77-...` | claude-sonnet-4-6 | 1500¢ |
**9 בדיקות (לא 8 — §7א הוא נפרד):**
1. שלמות מבנית — critical
2. רקע ניטרלי — critical
3. כיסוי טענות — critical
4. משקלות — warning
5. ללא כפילות — warning
6. מספור רציף — warning
7א. שאילתות קורפוס (corpus_queries_logged) — **critical blocker**
7. תאימות מתודולוגיה — critical
8. קול דפנה — critical
**Reference files (כולם קיימים):**
- `docs/daphna-decision-tree.md` ✅ (521 שורות)
- `docs/daphna-voice-fingerprint.md` ✅ (471 שורות)
- `docs/daphna-architecture-by-outcome.md` ✅ (381 שורות)
- `docs/daphna-acceptance-architecture.md` ✅ (640 שורות)
- `docs/daphna-block-zayin-claims.md` ✅ (385 שורות)
- `docs/daphna-precedent-network.md` ✅ (379 שורות)
**✅ תקין:**
- כל reference files קיימים ונגישים
- Company filtering מתועד (CEO IDs נכונים)
- Decision logic done/blocked מוגדרת
**⚠️ בעיות:**
- 🟡 **בדיקה 7א לא ברורה** — אוטומטית (validate_decision) או ידנית (grep בקובצי markdown)?
- 🟡 **בדיקה 8 (קול דפנה) סובייקטיבית** — חסרות דוגמאות anti-patterns מדידות
- 🟡 **get_metrics() — אין ספי קבלה** — מה מספר/אחוז שמוגדר כ-pass?
- 🟡 **decision tree:** אם רק בדיקות 4-6 (warning) נכשלו — done או blocked?
---
### 6. מייצא טיוטה (Exporter)
**קובץ:** `.claude/agents/legal-exporter.md` — 151 שורות, עודכן 2026-05-04
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `d0dc703b-ca83-4883-bca7-c9449e8713cd` | claude-sonnet-4-6 | 1500¢ |
| CMPA | `ada99a7d-...` | claude-sonnet-4-6 | 1500¢ |
**MCP tools (8):** export_docx, apply_user_edit, list_bookmarks, revise_draft, validate_decision, get_claims, get_block_context, workflow_status
**✅ תקין:**
- Git integration לכל ייצוא/עדכון
- validate_decision לפני export מוגדר
- active_draft detection (עריכה-*.docx) מוגדר
**⚠️ בעיות:**
- 🔴 **Naming mismatch קריטי:** הנחיות → `טיוטה-V{N}.docx` (V גדולה); קוד `revise_draft``טיוטה-v{N}.docx` (v קטנה); בדיסק בפועל → `טיוטה-v1.docx` (v קטנה). **הסוכן יחפש V גדולה ולא ימצא — יתחיל מ-v1 בכל הפעלה ויחליף קבצים קיימים!**
- 🔴 **case.status לא מעודכן ל-`exported`** — אחרי export מצליח, הסטטוס נשאר `drafted`/`reviewed`; הסטטוס `exported` קיים ב-DB schema ומוחרג מ-stale query
- 🟠 **legal-docx SKILL.md path hardcoded לCMP UUID** — CMPA ייכשל בקריאת ה-SKILL.md
- נכון: `/home/chaim/.paperclip/instances/default/skills/42a7acd0-.../legal-docx/SKILL.md`
- חסר: דינמי לפי `$PAPERCLIP_COMPANY_ID`
- 🟡 **Heartbeat grace=60s** — אם export DOCX > 60s, שני instances יתעוררו במקביל
- 🟡 **File size validation** — מוזכר בהנחיות אך לא מיושם בקוד
---
### 7. מגיה מסמכים (Proofreader)
**קובץ:** `.claude/agents/legal-proofreader.md` — 115 שורות, עודכן 2026-05-04
**תצורה:**
| חברה | ID | Model | Budget |
|------|-----|-------|--------|
| CMP | `410c0167-27dc-485c-a51b-7aa8b9ff2217` | claude-opus-4-6 | 1500¢ |
| CMPA | `17839fc6-...` | claude-opus-4-6 | 1500¢ |
**OCR workflow — 5 שלבים:** זיהוי → תיקון אוטומטי (abbreviations.json) → הגהה חכמה → שמירה → דיווח+סגירה
**abbreviations.json:** קיים ב-`/home/chaim/legal-ai/data/abbreviations.json` (2545 bytes, עודכן אפריל)
**✅ תקין:**
- abbreviations.json קיים
- Wakeup CEO דינמי לפי חברה
- חיוב סגירת issue
**⚠️ בעיות:**
- 🟠 **Model drift:** instructions = claude-opus-4-7, DB = claude-opus-4-6
- 🟡 **MCP write support לתיקיות:** לא אומת שה-tools תומכים בכתיבה ל-`documents/proofread/`
- 🟡 **Placeholder `{issue-id}` בקוד:** pc.sh calls משתמשות ב-literal `{issue-id}` — האם הסוכן מחליף עם `$PAPERCLIP_TASK_ID`?
- 🟡 **`extraction_status = proofread`:** האם השדה קיים ב-MCP document schema?
---
### 8. מנהל ידע (Hermes Curator)
**קובץ:** `.claude/agents/hermes-curator.md` — 147 שורות, עודכן 2026-05-10
**תצורה:**
| חברה | ID | Adapter | Model | Budget |
|------|-----|---------|-------|--------|
| CMP | `60dce831-5c5b-4bae-bda9-5282d506f0dc` | deepseek_local | deepseek-v4-pro | 1500¢ |
| CMPA | `d6f7c55d-570a-46b8-8d72-1286d07da0d8` | deepseek_local | deepseek-v4-pro | 1500¢ |
**Profiles:** `~/.hermes/profiles/curator-cmp/` ✅ + `curator-cmpa/` ✅ (שניהם קיימים)
**Trigger:** UI "סמן כסופי" → `web/paperclip_client.py:pc_wake_curator_for_final()` → sub-issue + wakeup
**MCP tools (6):** case_get, case_get_final_text, document_list, get_style_guide, precedent_library_list, search_internal_decisions, halacha_review
**✅ תקין:**
- deepseek_local מוגדר נכון בשתי החברות
- Profiles קיימים ועובדים (MEMORY.md מ-06/05 עם 5 ממצאים)
- Read-only design — לא מעדכן קבצים ישירות
- env vars נדרשים מתועדים
**⚠️ בעיות:**
- 🟢 **לא מוגדר:** מי מממש הצעות ל-SKILL.md/lessons.md שה-curator מציע ב-comments?
- 🟢 **Hermes bias:** DeepSeek V4-Pro עלול לפרש תוצאות בצורה סובייקטיבית — אין oversight layer
---
## בעיות חוצות-סוכנים
### 1. Skills Asymmetry CMP vs CMPA (🟠 גבוה)
**Skills ב-CMP (9):**
- משותפים (6): paperclip, paperclip-converting-plans-to-tasks, paperclip-create-agent, paperclip-create-plugin, paperclip-dev, para-memory-files
- ייחודיים CMP (3+): legal-assistant, legal-decision, legal-docx, appendix-expert-intern, diagnose-why-work-stopped, terminal-bench-loop
**Skills ב-CMPA (6):** משותפים בלבד — **חסרים כל ה-legal-* skills**
**השפעה:** סוכני CMPA לא יכולים להשתמש ב-legal-decision skill (כתיבה), legal-assistant (ניתוח), legal-docx (DOCX). לא ברור אם זו החלטה מכוונת (CMPA עובד אחרת?) או gap בסנכרון.
**פעולה:** הרץ `sync_agents_across_companies.py --verify` עם PAPERCLIP_BOARD_API_KEY לבדיקה.
### 2. Model Version Drift (🟡 בינוני)
ב-DB כל הסוכנים רצים על claude-opus-4-6 או claude-sonnet-4-6, אבל קבצי הנחיות מציינים גרסאות שונות:
| סוכן | instructions מציין | DB רץ על |
|------|-------------------|---------|
| CEO | claude-sonnet-4-6 | claude-opus-4-6 |
| מנתח | claude-opus-4-7 | claude-opus-4-6 |
| כותב | claude-opus-4-7 | claude-opus-4-6 |
| מגיה | claude-opus-4-7 | claude-opus-4-6 |
| חוקר, QA, מייצא | claude-sonnet-4-6 | claude-sonnet-4-6 ✅ |
| מנהל ידע | deepseek-v4-pro | deepseek-v4-pro ✅ |
**לא ברור:** האם CEO/מנתח/כותב **אמורים** לרוץ על Opus (בחירה מכוונת לאיכות) ורק קבצי instructions לא עודכנו? או שה-DB צריך להתעדכן?
### 3. HEARTBEAT.md Reference (🟢 נמוך)
קובץ `legal-researcher.md` לא מפנה ל-`HEARTBEAT.md` בפירוש בתחילת הקובץ. שאר הסוכנים כן עושים זאת.
---
## רשימת תיקונים לפי עדיפות
### 🔴 קריטי — לתקן לפני תיק הבא
1. **`legal-exporter.md` + `web/app.py`/`drafting.py`:** אחד הדברים:
- תיקן הנחיות: שנה `טיוטה-V``טיוטה-v` (v קטנה) בכל המקומות
- **ועוד:** הוסף לקובץ הנחיות שלב: "אחרי export מוצלח — עדכן `case.status = 'exported'` דרך MCP או API"
2. **תיק 8174-24 — §ז חסר:** בדוק אם שלב המחקר הושלם. אם לא — הפעל חוקר מחדש לתיק זה.
### 🟠 גבוה — לתקן בשבוע הקרוב
3. **Skills CMPA:** הרץ:
```bash
PAPERCLIP_BOARD_API_KEY=$(mcp__infisical__get-secret \
--projectId 9a77b161-f70c-4dd3-9d67-b7ab850cef51 \
--environmentSlug nautilus --secretPath /paperclip --secretName BOARD_API_KEY) \
python ~/legal-ai/scripts/sync_agents_across_companies.py --verify
```
החלט אם להוסיף legal-* skills ל-CMPA ואם כן — הרץ `--apply`.
4. **`legal-researcher.md`:** הוסף תת-סעיף עם הוראות ל-`search_internal_decisions`:
- מתי להשתמש (החלטות פנימיות דפנה שלא בקורפוס הציבורי)
- מה ההבדל מ-`search_decisions`
5. **`legal-exporter.md` — נתיב legal-docx:** שנה מ-hardcoded UUID ל-דינמי:
```
אם $PAPERCLIP_COMPANY_ID = 42a7acd0... → CMP path
אם $PAPERCLIP_COMPANY_ID = 8639e837... → CMPA path
```
6. **`legal-ceo.md` — Project ID:** הסר את ה-hardcoded ID של 1130-25. החלף בהוראה: "השתמש ב-`projects_list` לקבלת project_id הנכון לפי חברה ולתיק".
### 🟡 בינוני — לתקן בחודש הקרוב
7. **Model documentation:** החלט על גרסאות מודל לכל סוכן ועדכן גם הנחיות גם DB. עדיף: שמור הנחיות כ-source of truth ועדכן DB דרך `sync_agents_across_companies.py --apply`.
8. **`legal-qa.md` — הבהרת corpus_queries_logged:** הוסף: "הבדיקה היא קריאת `validate_decision` עם `check_corpus_log=true` / או grep ידני בקובץ `analysis-and-research.md` לסעיף ז".
9. **`legal-ceo.md` — maxConcurrentRuns:** עדכן DB ל-maxConcurrentRuns=1 (או 2 אם CEO רוצה מקביליות מכוונת).
10. **`legal-proofreader.md` — {issue-id} placeholder:** שנה ל-`$PAPERCLIP_TASK_ID` באופן מפורש.
11. **`legal-researcher.md` — HEARTBEAT.md link:** הוסף בשורה 1: `> ראה גם: HEARTBEAT.md לחוקים הכלליים`.
### 🟢 נמוך — future improvement
12. **מנהל ידע — ownership:** הוסף ל-CLAUDE.md הנחיה: "Curator proposals ב-comments → חיים מאשר ידנית → commits ל-SKILL.md ו-lessons.md".
---
## אימות (לאחר תיקונים)
```bash
# 1. שלוף API key
PAPERCLIP_BOARD_API_KEY=$(mcp__infisical__get-secret \
--projectId 9a77b161-f70c-4dd3-9d67-b7ab850cef51 \
--environmentSlug nautilus --secretPath /paperclip --secretName BOARD_API_KEY)
# 2. בדוק drift
python ~/legal-ai/scripts/sync_agents_across_companies.py --verify
# 3. בדוק freshness של הנחיות
python ~/legal-ai/scripts/sync_agents_across_companies.py --check-instructions
# 4. בדוק שסוכני CMPA עובדים עם skills נכונים
PGPASSWORD="paperclip" psql -h 127.0.0.1 -p 54329 -U paperclip -d paperclip -c "
SELECT a.name, array_agg(s.name ORDER BY s.name) as skills
FROM agents a
JOIN companies c ON a.company_id = c.id
LEFT JOIN agent_skills ask ON ask.agent_id = a.id
LEFT JOIN skills s ON ask.skill_id = s.id
WHERE c.name LIKE '%השבחה%' AND (a.is_deleted = false OR a.is_deleted IS NULL)
GROUP BY a.id ORDER BY a.name;
"
```