Files
legal-ai/docs/agent-audit-2026-05-17.md
Chaim d37d03f478
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 8s
docs: add comprehensive agent audit 2026-05-17
7-agent parallel audit of all Paperclip agents (CEO, analyst,
researcher, writer, QA, exporter, proofreader, curator).

Found 12 issues including 3 critical:
- Exporter: V vs v naming mismatch in DOCX versioning
- Exporter: case.status not updated to exported after export
- Researcher: section ז missing from case 8174-24

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-17 11:52:32 +00:00

21 KiB
Raw Blame History

דו"ח Audit סוכנים — 2026-05-17

נוצר על-ידי 7 sub-agents מקבילים שחקרו כל סוכן בנפרד.
כיסוי: קבצי הנחיות, תצורת DB, skills, MCP tools, freshness, drift CMP↔CMPA.


סיכום מנהלים

טבלת מצב כללית

סוכן שורות מודל ב-instructions מודל ב-DB Skills CMP Skills CMPA Drift? דחיפות
עוזר משפטי (CEO) 796 claude-sonnet-4-6 claude-opus-4-6 9 6 routing OK 🟡 גבוה
מנתח משפטי 498 claude-opus-4-7 claude-opus-4-6 9 6 ⚠️ sync gap 13 ימים 🟡 גבוה
חוקר תקדימים 240 claude-sonnet-4-6 claude-sonnet-4-6 9 6 ⚠️ §ז חסר ב-8174 🔴 קריטי
כותב החלטה 410 claude-opus-4-7 claude-opus-4-6 9 6 🟡 גבוה
בודק איכות (QA) 219 claude-sonnet-4-6 claude-sonnet-4-6 9 6 🟡 בינוני
מייצא טיוטה 151 claude-sonnet-4-6 claude-sonnet-4-6 9 6 🔴 קריטי
מגיה מסמכים 115 claude-opus-4-7 claude-opus-4-6 9 6 🟡 בינוני
מנהל ידע (Curator) 147 deepseek-v4-pro deepseek-v4-pro 9 6 🟢 תקין

בעיות לפי עדיפות

# חומרה סוכן בעיה קבוצה
1 🔴 קריטי מייצא טיוטה-V בהנחיות vs טיוטה-v בקוד — דורס גרסאות instructions
2 🔴 קריטי מייצא case.status לא מעודכן ל-exported אחרי ייצוא קוד
3 🔴 קריטי חוקר §ז (query log) חסר בתיק 8174-24 — QA אמור לחסום תיק פעיל
4 🟠 גבוה כולם Skills asymmetry: CMPA חסרה 3+ skills שיש ב-CMP DB config
5 🟠 גבוה חוקר search_internal_decisions לא מתועד בהנחיות instructions
6 🟠 גבוה מייצא נתיב legal-docx/SKILL.md hardcoded ל-UUID של CMP — CMPA יכשל instructions
7 🟠 גבוה CEO Project ID 1130-25 hardcoded — test case, לא מייצג instructions
8 🟡 בינוני רוב Model drift: instructions מציינות גרסה שונה ממה שרץ ב-DB הכל
9 🟡 בינוני QA corpus_queries_logged: לא ברור אם בדיקה ידנית או אוטומטית instructions
10 🟡 בינוני CEO maxConcurrentRuns=NULL ב-DB (שאר הסוכנים=1) DB config
11 🟡 בינוני מגיה לא ברור אם MCP tools תומכים ב-write לתיקיות extracted/proofread tools
12 🟢 נמוך מנהל ידע לא מוגדר מי מממש את ההצעות ל-SKILL.md/lessons.md תהליך

ממצאים לפי סוכן

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 — §ז חסר: בדוק אם שלב המחקר הושלם. אם לא — הפעל חוקר מחדש לתיק זה.

🟠 גבוה — לתקן בשבוע הקרוב

  1. Skills CMPA: הרץ:

    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.

  2. legal-researcher.md: הוסף תת-סעיף עם הוראות ל-search_internal_decisions:

    • מתי להשתמש (החלטות פנימיות דפנה שלא בקורפוס הציבורי)
    • מה ההבדל מ-search_decisions
  3. legal-exporter.md — נתיב legal-docx: שנה מ-hardcoded UUID ל-דינמי:

    אם $PAPERCLIP_COMPANY_ID = 42a7acd0... → CMP path
    אם $PAPERCLIP_COMPANY_ID = 8639e837... → CMPA path
    
  4. legal-ceo.md — Project ID: הסר את ה-hardcoded ID של 1130-25. החלף בהוראה: "השתמש ב-projects_list לקבלת project_id הנכון לפי חברה ולתיק".

🟡 בינוני — לתקן בחודש הקרוב

  1. Model documentation: החלט על גרסאות מודל לכל סוכן ועדכן גם הנחיות גם DB. עדיף: שמור הנחיות כ-source of truth ועדכן DB דרך sync_agents_across_companies.py --apply.

  2. legal-qa.md — הבהרת corpus_queries_logged: הוסף: "הבדיקה היא קריאת validate_decision עם check_corpus_log=true / או grep ידני בקובץ analysis-and-research.md לסעיף ז".

  3. legal-ceo.md — maxConcurrentRuns: עדכן DB ל-maxConcurrentRuns=1 (או 2 אם CEO רוצה מקביליות מכוונת).

  4. legal-proofreader.md — {issue-id} placeholder: שנה ל-$PAPERCLIP_TASK_ID באופן מפורש.

  5. legal-researcher.md — HEARTBEAT.md link: הוסף בשורה 1: > ראה גם: HEARTBEAT.md לחוקים הכלליים.

🟢 נמוך — future improvement

  1. מנהל ידע — ownership: הוסף ל-CLAUDE.md הנחיה: "Curator proposals ב-comments → חיים מאשר ידנית → commits ל-SKILL.md ו-lessons.md".

אימות (לאחר תיקונים)

# 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;
"