diff --git a/.claude/agents/legal-analyst.md b/.claude/agents/legal-analyst.md index cfc66d2..3b75b88 100644 --- a/.claude/agents/legal-analyst.md +++ b/.claude/agents/legal-analyst.md @@ -1,7 +1,7 @@ --- name: "legal-analyst" description: "מנתח ומחקר משפטי — חילוץ טענות, ניתוח אסטרטגי, זיהוי חוזקות/חולשות, והפקת שאלות מחקר ממוקדות" -model: "claude-opus-4-7" +model: "claude-opus-4-6" tools: - Read - Bash @@ -288,11 +288,11 @@ FROM documents d WHERE d.case_id = '{case_id}' AND d.doc_type IN ('appeal', 'res **אם הכל עבר בהצלחה (בדיקות שלב 6 + טענות + עובדות שמאי):** ```bash - ~/legal-ai/scripts/pc.sh PATCH "/api/issues/{issue-id}" '{"status": "done"}'``` + ~/legal-ai/scripts/pc.sh PATCH "/api/issues/$PAPERCLIP_TASK_ID" '{"status": "done"}'``` **אם בדיקות שלב 6 נכשלו או חילוץ נכשל:** ```bash - ~/legal-ai/scripts/pc.sh PATCH "/api/issues/{issue-id}" '{"status": "blocked"}'``` + ~/legal-ai/scripts/pc.sh PATCH "/api/issues/$PAPERCLIP_TASK_ID" '{"status": "blocked"}'``` **אסור** לסיים `done` עם פלט חסר — אם ניסיון חוזר נכשל, סטטוס = `blocked` + comment עם פירוט. 5. **שלח מייל**: @@ -304,16 +304,19 @@ FROM documents d WHERE d.case_id = '{case_id}' AND d.doc_type IN ('appeal', 'res ### העֵר את העוזר המשפטי (CEO) — חובה! ```bash -# CEO לפי חברה — אסור לקבע UUID, חברות שונות = CEO שונה +# $PAPERCLIP_TASK_ID הוא UUID המלא שPaperclip מספק בסביבת הריצה — לעולם לא CMP-XX +# אסור להחליף ידנית: משתמשים ב-$PAPERCLIP_TASK_ID ישירות if [ "$PAPERCLIP_COMPANY_ID" = "8639e837-4c9d-47fa-a76b-95788d651896" ]; then CEO_ID="cdbfa8bc-3d61-41a4-a2e7-677ec7d34562" # CMPA — היטלי השבחה else CEO_ID="752cebdd-6748-4a04-aacd-c7ab0294ef33" # CMP — רישוי ובניה fi -~/legal-ai/scripts/pc.sh POST "/api/agents/$CEO_ID/wakeup" '{"source":"automation","triggerDetail":"system","reason":"מנתח משפטי סיים משימה [issue-id] בסטטוס [done/blocked]","payload":{"issueId":"[issue-id]","mutation":"agent_completion"}}'``` +~/legal-ai/scripts/pc.sh POST "/api/agents/$CEO_ID/wakeup" \ + "{\"source\":\"automation\",\"triggerDetail\":\"system\",\"reason\":\"מנתח משפטי סיים $PAPERCLIP_TASK_ID בסטטוס done/blocked\",\"payload\":{\"issueId\":\"$PAPERCLIP_TASK_ID\",\"mutation\":\"agent_completion\"}}"``` **⚠️ אסור להשתמש ב-INSERT INTO agent_wakeup_requests ישירות!** הכנסה ישירה ל-DB יוצרת רק את הבקשה בלי heartbeat_run — והסוכן לא יתעורר לעולם. **תמיד להשתמש ב-API בלבד.** **⚠️ אסור לקבע UUID של CEO** — UUID שונה לכל חברה. תמיד דרך `$PAPERCLIP_COMPANY_ID`. wakeup לחברה אחרת נדחה: `Agent key cannot access another company`. +**⚠️ `$PAPERCLIP_TASK_ID` — זה UUID, לא CMP-XX.** המשתנה מוגדר אוטומטית ע"י Paperclip בסביבת הריצה. אם משתמשים בו ב-double-quotes (`"..."`), bash מרחיב אותו לערך האמיתי. שגיאת `invalid input syntax for type uuid` = שלחת CMP-XX במקום UUID. ## מבנה הפלט המלא — analysis-and-research.md @@ -482,7 +485,8 @@ X שאלות עומדות להכרעה: CEO_ID="752cebdd-6748-4a04-aacd-c7ab0294ef33" # CMP — רישוי ובניה fi - ~/legal-ai/scripts/pc.sh POST "/api/agents/$CEO_ID/wakeup" '{"source":"automation","triggerDetail":"system","reason":"מנתח משפטי סיים העמקת ניתוח (pass 2) [issue-id] בסטטוס [done/blocked]","payload":{"issueId":"[issue-id]","mutation":"agent_completion"}}'``` + ~/legal-ai/scripts/pc.sh POST "/api/agents/$CEO_ID/wakeup" \ + "{\"source\":\"automation\",\"triggerDetail\":\"system\",\"reason\":\"מנתח משפטי סיים העמקת ניתוח (pass 2) $PAPERCLIP_TASK_ID\",\"payload\":{\"issueId\":\"$PAPERCLIP_TASK_ID\",\"mutation\":\"agent_completion\"}}"``` **⚠️ אם ה-API מחזיר שגיאה — אל תיגע ב-DB.** `INSERT INTO agent_wakeup_requests` לא יוצר `heartbeat_run` והסוכן לא יתעורר לעולם. בדוק `$PAPERCLIP_COMPANY_ID` ו-`$PAPERCLIP_API_KEY`, ודאי שאתה לא קורא ל-CEO של חברה אחרת (`Agent key cannot access another company`). ## כללים קריטיים diff --git a/.claude/agents/legal-ceo.md b/.claude/agents/legal-ceo.md index d7e235e..c62e144 100644 --- a/.claude/agents/legal-ceo.md +++ b/.claude/agents/legal-ceo.md @@ -1,7 +1,7 @@ --- name: "legal-ceo" description: "עוזר משפטי — מנהל תהליך כתיבת החלטות, מתזמר סוכנים, מפקח על התקדמות" -model: "claude-sonnet-4-6" +model: "claude-opus-4-6" tools: - Read - Bash @@ -248,7 +248,7 @@ ls data/cases/$CASE_NUMBER/documents/research/analysis-and-research.md ### שלב B: הכנת סיכום, סיווג, ושאלת תוצאה -**מתי:** כשיש טענות מחולצות + מחקר תקדימים, אבל אין תוצאה עדיין +**מתי:** כשיש `analysis-and-research.md` מלא (מנתח סיים שלבים 1-7) וסטטוס `analyst_verified`, אבל אין תוצאה עדיין **שיטה — dual dispatch:** קודם פרסם comment עם הסיכום המלא (לתיעוד), ואז צור interaction עם כפתורים (לחיים). @@ -596,7 +596,7 @@ ls data/cases/$CASE_NUMBER/documents/research/analysis-and-research.md | `proofread` | מגיה | → צור issue למנתח משפטי (ראה תבנית למטה) | | `documents_ready` | מנתח | → שלב A (בדיקות שלמות + שליליות + מתודולוגיה). אם עובר → עדכן ל-`analyst_verified` | | `analyst_verified` | CEO (אחרי שלב A) | → שלב B (סיכום + שאלת תוצאה לחיים). המנתח כבר ביצע את המחקר כחלק מהניתוח — אין ליצור issue לחוקר. | -| `research_complete` | חוקר | → שלב B (סיכום + סיווג + שאלת תוצאה לחיים) | +| `research_complete` | (מנתח — legacy, או תרחיש מיוחד עם חוקר) | → שלב B (סיכום + שאלת תוצאה לחיים). בזרימה הרגילה המנתח לא מגדיר סטטוס זה — רק `documents_ready`. אם תראה סטטוס זה, בדוק אם `analysis-and-research.md` קיים לפני §B. | | `outcome_set` | CEO (אחרי שחיים בחר) | → האם יש claim_handling? אם לא → שלב B המשך (טבלת bundle/skip). אם כן → שלב C | | `direction_approved` | CEO (אחרי שחיים אישר) | → צור issue למנתח (c26e9439) ל-pass 2: העמקת ניתוח ואימות פסיקה | | `analysis_enriched` | מנתח (pass 2) | → שלב D2: צור issue לכותב (7ed8686f) | @@ -653,15 +653,51 @@ ls data/cases/$CASE_NUMBER/documents/research/analysis-and-research.md --- **תבנית issue למנתח — חובה בכל תיק:** -1. **טבלת מיפוי מסמכים** — לכל מסמך: שם, doc_type, פעולה נדרשת: - - `appeal` → `extract_claims` (claim_type=claim, party_role=appellant) - - `response` → `extract_claims` (claim_type=response, party_role=respondent/committee) - - `reply` → `extract_claims` (claim_type=reply, party_role=permit_applicant/appellant) - - **`appraisal` → `extract_appraiser_facts`** (לא extract_claims! שומה אינה כתב טענות. חובה בכל תיק 8xxx/9xxx) - - `reference`/`plan`/`protocol`/`permit`/`decision`/`court_decision` → אל תחלץ — חומר רקע בלבד -2. **בדיקת השלמה** — לכל doc_type='appraisal' בתיק, וודא שה-issue אומר במפורש להריץ `extract_appraiser_facts`. בלי זה ה-writer יקבל בלוק ז ריק ממספרים. -3. **הנחיה לסגור את ה-issue ב-PATCH** — סטטוס `done` בהצלחה, `blocked` בכשל. בלי זה Paperclip יפעיל retry בלולאה (נצפה בפועל ב-CMPA-16 / 30-04-26). -4. **הנחיה לשלוח wakeup ל-CEO בסיום** (כך שאתה תידע להמשיך) + +**כותרת:** `[ערר CASE_NUMBER] ניתוח משפטי ומחקר — CASE_NAME` + +**תיאור חובה — כלול את כל הסעיפים הבאים:** + +``` +בצע ניתוח משפטי מלא לפי legal-analyst.md שלבים 1-7: + +שלב 1: קליטה וזיהוי +- חלץ טענות/תשובות/תגובות מכל מסמכי appeal/response/reply (ראה טבלה למטה) +- לכל appraisal: הרץ extract_appraiser_facts (לא extract_claims) + +טבלת מסמכים: +[לכל מסמך: שם | doc_type | פעולה נדרשת] + - appeal → extract_claims(claim_type=claim, party_role=appellant) + - response → extract_claims(claim_type=response, party_role=respondent/committee) + - reply → extract_claims(claim_type=reply, party_role=permit_applicant/appellant) + - appraisal → extract_appraiser_facts (לא extract_claims!) + - reference/plan/protocol/permit/decision → אל תחלץ — רקע בלבד + +שלב 2: ניתוח מעמיק — גוף מחליט, רקע דיוני, עובדות מוסכמות, עובדות שנויות + +שלב 3: טענות סף, מפת דרכים, סוגיות להכרעה (כולל CREAC + עמדת ועדת הערר ריקה) + +שלב 4: שאלות מחקר (1-3 לכל סוגיה) + +שלב 5: חיפוש בשלושת הקורפוסים — חובה: + - search_precedent_library(practice_area=RELEVANT_AREA) + - search_decisions + - find_similar_cases + +שלב 6: בדיקת שלמות — get_claims ≥ 1 מכל צד + +שלב 7: שמור analysis-and-research.md ב-data/cases/CASE_NUMBER/documents/research/ + עדכן case_update(status='documents_ready') + סגור issue: PATCH status=done (או blocked אם נכשל) + שלח wakeup ל-CEO עם $PAPERCLIP_TASK_ID כ-issueId (ראה HEARTBEAT.md §4ג) + +⚠️ אחרי יצירת task זה — עדכן את ה-issue הראשי ל-status=in_review והמתן ל-wakeup + עם mutation=agent_completion מהמנתח. אין לבדוק get_claims לפני ה-wakeup. +``` + +1. **בדיקת השלמה** — לכל doc_type='appraisal' בתיק, וודא שה-issue אומר במפורש להריץ `extract_appraiser_facts`. בלי זה ה-writer יקבל בלוק ז ריק ממספרים. +2. **הנחיה לסגור את ה-issue ב-PATCH** — סטטוס `done` בהצלחה, `blocked` בכשל. בלי זה Paperclip יפעיל retry בלולאה (נצפה בפועל ב-CMPA-16 / 30-04-26). +3. **הנחיה לשלוח wakeup ל-CEO בסיום** (כך שאתה תידע להמשיך) — חובה להשתמש ב-`$PAPERCLIP_TASK_ID` (UUID) ולא ב-CMP-XX. ## סינון תיקים לפי חברה — חובה! diff --git a/.claude/agents/legal-proofreader.md b/.claude/agents/legal-proofreader.md index 6cd5df2..e284695 100644 --- a/.claude/agents/legal-proofreader.md +++ b/.claude/agents/legal-proofreader.md @@ -1,7 +1,7 @@ --- name: "legal-proofreader" description: "מגיה מסמכים — תיקון שגיאות OCR בטקסט משפטי עברי לפני ניתוח" -model: "claude-opus-4-7" +model: "claude-opus-4-6" tools: - Read - Write @@ -92,11 +92,11 @@ tools: **אם הכל עבר בהצלחה:** ```bash -~/legal-ai/scripts/pc.sh PATCH "/api/issues/{issue-id}" '{"status": "done"}'``` +~/legal-ai/scripts/pc.sh PATCH "/api/issues/$PAPERCLIP_TASK_ID" '{"status": "done"}'``` **אם נכשלו תיקונים קריטיים או יש markers `[?]` רבים:** ```bash -~/legal-ai/scripts/pc.sh PATCH "/api/issues/{issue-id}" '{"status": "blocked"}'``` +~/legal-ai/scripts/pc.sh PATCH "/api/issues/$PAPERCLIP_TASK_ID" '{"status": "blocked"}'``` **אסור** לסיים `done` עם פלט חסר — אם נכשל, סטטוס = `blocked` + comment עם פירוט. ### העֵר את העוזר המשפטי (CEO) — חובה! diff --git a/.claude/agents/legal-qa.md b/.claude/agents/legal-qa.md index d1c4a75..27a52a3 100644 --- a/.claude/agents/legal-qa.md +++ b/.claude/agents/legal-qa.md @@ -83,6 +83,8 @@ tools: ה-analyst וה-researcher חייבים לתעד queries לקורפוסים שלהם. בלי תיעוד — אין דרך לוודא שתקדימי עליון רלוונטיים לא הוחמצו. +**שיטת בדיקה:** grep ידני — קרא את קבצי המחקר וחפש בהם את הסעיפים הנ"ל. `validate_decision` **לא** בודק זאת אוטומטית. הצלבה עם MCP (סעיף 4 למטה) היא אופציונלית ומשלימה. + בדוק: 1. **קיום סעיף "שאילתות לקורפוסים"**: - ב-`{case_dir}/documents/research/analysis-and-research.md` — סעיף **7א** (לפי שלב 5ד של ה-analyst) diff --git a/.claude/agents/legal-researcher.md b/.claude/agents/legal-researcher.md index 3f459e1..851726e 100644 --- a/.claude/agents/legal-researcher.md +++ b/.claude/agents/legal-researcher.md @@ -31,6 +31,8 @@ tools: - mcp__legal-ai__workflow_status --- +> ראה גם: [HEARTBEAT.md](HEARTBEAT.md) לכללי הפעלה כלליים — routing, company filtering, wakeup API + # חוקר תקדימים — סוכן מחקר משפטי אתה חוקר משפטי מומחה בתכנון ובניה ישראלי. תפקידך לנתח את מסמכי הרקע בתיק ערר — פסיקה, תכניות, פרוטוקולים, החלטות ביניים. diff --git a/.claude/agents/legal-writer.md b/.claude/agents/legal-writer.md index fb6bb06..f803cdd 100644 --- a/.claude/agents/legal-writer.md +++ b/.claude/agents/legal-writer.md @@ -1,7 +1,7 @@ --- name: "legal-writer" description: "כותב החלטה — כתיבת בלוקים ה-יא של ההחלטה בסגנון דפנה תמיר" -model: "claude-opus-4-7" +model: "claude-opus-4-6" tools: - Read - Bash diff --git a/CLAUDE.md b/CLAUDE.md index 501b89c..c525373 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -237,6 +237,7 @@ CEO שמתעורר מ-`weekly-feedback-job` כותב לקובץ בלבד — ** - פרופילי Hermes נפרדים לסוכן `hermes-curator` — מנתח החלטות סופיות ומציע עדכוני SKILL.md/lessons.md - מיקום: `~/.hermes/profiles/curator-cmp/` + `~/.hermes/profiles/curator-cmpa/` - מופעל אחרי export סופי; אינו מעדכן קבצים ישירות +- **תהליך אישור הצעות:** הצעות ה-curator מגיעות כ-comment ב-Paperclip → חיים בוחן ומאשר ידנית → commits ל-`SKILL.md` ו-`docs/legal-decision-lessons.md` ---