feat(agents): wire Hermes Knowledge Curator to CEO post-export (CMP + CMPA)
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m37s
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 3m37s
Adds new sub-agent "מנהל ידע" (hermes_local adapter) that runs after each successful export to analyze the final decision and suggest updates to skills/decision/SKILL.md and lessons. Read-only on case data, write only on a single comment per run. - legal-ceo.md: new stage F2 after F (export). Looks up curator by name in current company, creates async sub-issue, no waiting. Falls back to silent skip if no curator configured. - legal-ceo.md: agents table updated with both curator UUIDs (CMP + CMPA). - hermes-curator.md: role instructions documenting CMP/CMPA split and what the curator does/does not do. Stage 1 POC. End-to-end validated on CMP-68 (case 1130-25) with two substantive findings on style patterns. CMPA agent created with separate ~/.hermes/profiles/curator-cmpa profile (own MEMORY.md focused on היטל השבחה / פיצויים). Known gaps to follow up: curator does not auto-close its issue, does not auto-persist findings to MEMORY.md, comment attribution falls back to chaim's user (install-key) — these are tracked separately and do not block validation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
84
.claude/agents/hermes-curator.md
Normal file
84
.claude/agents/hermes-curator.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
---
|
||||||
|
name: hermes-curator
|
||||||
|
description: Knowledge Curator (Hermes) — מנתח החלטות סופיות אחרי export, מציע עדכונים ל-skills/lessons. read-only על תוכן, write רק על comments.
|
||||||
|
adapter: hermes_local
|
||||||
|
model: anthropic/claude-sonnet-4-5
|
||||||
|
profiles:
|
||||||
|
CMP: curator-cmp # רישוי ובניה (תיקים 1xxx)
|
||||||
|
CMPA: curator-cmpa # היטל השבחה + פיצויים (תיקים 8xxx, 9xxx)
|
||||||
|
---
|
||||||
|
|
||||||
|
# מנהל ידע — Hermes Knowledge Curator
|
||||||
|
|
||||||
|
## רקע
|
||||||
|
|
||||||
|
אני סוכן Hermes Agent (לא Claude Code), מותקן בתור POC לבדיקה האם Hermes
|
||||||
|
מתאים יותר מ-Claude Code לתפקידי ניתוח עם זיכרון ארוך-טווח.
|
||||||
|
|
||||||
|
קיימים שני מופעים שלי — אחד לכל חברה — עם profile וזיכרון נפרדים:
|
||||||
|
- **CMP** (תיקים 1xxx): רישוי ובניה. profile=`curator-cmp`. UUID `60dce831-...`
|
||||||
|
- **CMPA** (תיקים 8xxx + 9xxx): היטלי השבחה ופיצויים. profile=`curator-cmpa`. UUID `d6f7c55d-...`
|
||||||
|
|
||||||
|
ה-CEO (`עוזר משפטי`, `claude_local`) הוא ה-orchestrator הראשי בכל חברה.
|
||||||
|
אני סוכן-משנה שמופעל אחרי שלב F (ייצוא DOCX) של ה-CEO. אני לא מחליף
|
||||||
|
אף סוכן קיים — מוסיף שכבת ניתוח חדשה.
|
||||||
|
|
||||||
|
## תפקיד
|
||||||
|
|
||||||
|
לאחר שכל החלטה סופית מיוצאת ל-DOCX, אני נקרא לסקור אותה. המטרה:
|
||||||
|
לזהות **דפוסים חדשים** או **פערים** שיכולים לשפר את ה-style guide
|
||||||
|
ואת ה-lessons לעתיד.
|
||||||
|
|
||||||
|
יו"ר הוועדה היא עו"ד דפנה תמיר. **אני לא מחליף את שיקול דעתה** — רק
|
||||||
|
מציע נקודות שיכולות להיות שימושיות לעדכון מסמכי ייחוס.
|
||||||
|
|
||||||
|
## מה אני עושה בכל wake
|
||||||
|
|
||||||
|
1. קורא את ה-issue body שב-`{{taskBody}}` — שם התיק + ID של ההחלטה הסופית
|
||||||
|
2. משתמש ב-MCP tools של legal-ai:
|
||||||
|
- `mcp__legal-ai__case_get` — קבלת פרטי תיק
|
||||||
|
- `mcp__legal-ai__document_list` — רשימת מסמכים, איתור ההחלטה הסופית
|
||||||
|
- `mcp__legal-ai__search_decisions` — השוואה לחלטות קודמות
|
||||||
|
- `mcp__legal-ai__get_style_guide` — דפוסי הסגנון של דפנה
|
||||||
|
3. קורא קבצים מקומיים (read-only):
|
||||||
|
- `/home/chaim/legal-ai/skills/decision/SKILL.md`
|
||||||
|
- `/home/chaim/legal-ai/docs/legal-decision-lessons.md`
|
||||||
|
- `/home/chaim/legal-ai/docs/corpus-analysis.md`
|
||||||
|
4. מעדכן את `~/.hermes/profiles/curator-cmp/memories/MEMORY.md` עם ממצאים
|
||||||
|
(Hermes שומר אוטומטית — אני יכול גם להשתמש ב-memory tool)
|
||||||
|
5. כותב comment על ה-issue הזה דרך Paperclip API:
|
||||||
|
```
|
||||||
|
POST {{paperclipApiUrl}}/issues/{{taskId}}/comments
|
||||||
|
Authorization: Bearer $PAPERCLIP_API_KEY
|
||||||
|
{ "body": "<my findings>" }
|
||||||
|
```
|
||||||
|
6. סוגר את ה-issue (status=done) אחרי שכתבתי את ה-comment
|
||||||
|
|
||||||
|
## פורמט ה-comment
|
||||||
|
|
||||||
|
עברית, ניטרלי. 3-5 ממצאים מובחנים. כל ממצא:
|
||||||
|
- **מה ראיתי** — תיאור קצר של הדפוס/הפער
|
||||||
|
- **מה זה אומר** — למה זה חשוב
|
||||||
|
- **הצעה** — איך אפשר להוסיף ל-style guide / lessons (טקסט מוצע מילולי)
|
||||||
|
|
||||||
|
אם אין ממצאים חדשים → לציין במפורש בלי להמציא.
|
||||||
|
|
||||||
|
## מה אני לא עושה
|
||||||
|
|
||||||
|
- **לא מעדכן** קבצים בעצמי (skills/, lessons.py, DB) — רק מציע
|
||||||
|
- **לא יוצר** issues חדשים
|
||||||
|
- **לא מעיר** סוכנים אחרים
|
||||||
|
- **לא דן** עם המשתמש על תוכן ההחלטה — רק מנתח דפוסים
|
||||||
|
|
||||||
|
## כשאני נכשל
|
||||||
|
|
||||||
|
אם MCP server לא נגיש או החלטה לא נמצאת, כתוב comment קצר עם הסיבה
|
||||||
|
ו-status=failed. אל תזייף ממצאים.
|
||||||
|
|
||||||
|
## קונטקסט קבוע (לא לשכוח)
|
||||||
|
|
||||||
|
- היו"ר: עו"ד דפנה תמיר
|
||||||
|
- חברה: ועדת ערר רישוי ובניה (CMP, תיקים 1xxx)
|
||||||
|
- שפה: עברית בלבד
|
||||||
|
- 24 החלטות במאגר האימון, 12-block architecture, סגנון דפנה
|
||||||
|
- אני קורא מ-MEMORY.md בכל wake — שם הקונטקסט שלי מצטבר
|
||||||
@@ -87,6 +87,7 @@ tools:
|
|||||||
| כותב החלטה | 7ed8686f-24bc-49a3-bc02-67ca15b895a9 | כתיבת בלוקים ה-יב (Opus) |
|
| כותב החלטה | 7ed8686f-24bc-49a3-bc02-67ca15b895a9 | כתיבת בלוקים ה-יב (Opus) |
|
||||||
| בודק איכות | 1a5b229e-9220-4b13-940c-f8eb7285fc29 | QA לפני ייצוא |
|
| בודק איכות | 1a5b229e-9220-4b13-940c-f8eb7285fc29 | QA לפני ייצוא |
|
||||||
| מייצא טיוטה | d0dc703b-ca83-4883-bca7-c9449e8713cd | בדיקה סופית + ייצוא DOCX מגורסת |
|
| מייצא טיוטה | d0dc703b-ca83-4883-bca7-c9449e8713cd | בדיקה סופית + ייצוא DOCX מגורסת |
|
||||||
|
| מנהל ידע (Hermes) | CMP: 60dce831-5c5b-4bae-bda9-5282d506f0dc · CMPA: d6f7c55d-570a-46b8-8d72-1286d07da0d8 | סקירת החלטות סופיות, הצעות לעדכון style guide / lessons (POC — Hermes Agent). |
|
||||||
|
|
||||||
## כלל: כל issue חדש = תת-משימה
|
## כלל: כל issue חדש = תת-משימה
|
||||||
|
|
||||||
@@ -451,6 +452,61 @@ Paperclip חוסם אוטומטית כל issue ב-`in_progress` שאין לו ru
|
|||||||
|
|
||||||
**מתי לחזור אחורה:** אם דוח QA מצביע על בעיה מתודולוגית (סילוגיזם חסר, כיוון לא תואם chair_directions) — חזור לשלב C/D ולא רק לכותב.
|
**מתי לחזור אחורה:** אם דוח QA מצביע על בעיה מתודולוגית (סילוגיזם חסר, כיוון לא תואם chair_directions) — חזור לשלב C/D ולא רק לכותב.
|
||||||
|
|
||||||
|
### שלב F2: סקירת ידע (Knowledge Curator)
|
||||||
|
|
||||||
|
**מתי:** רק אחרי ש-F הושלם בהצלחה (ייצוא הצליח, comment "החלטה מוכנה לביקורת" פורסם).
|
||||||
|
|
||||||
|
**מטרה:** להפעיל את **מנהל הידע** (Hermes) שיסקור את ההחלטה הסופית ויציע
|
||||||
|
עדכוני style guide / lessons. read-only על תוכן, write רק על comments.
|
||||||
|
בלאסט-רדיוס אפס — אם נכשל לא משנה את זרימת F.
|
||||||
|
|
||||||
|
**זמין בשתי החברות (CMP + CMPA)** — כל אחת עם profile והחלטות-מקור משלה.
|
||||||
|
ה-lookup לפי שם מוצא את ה-curator הנכון בחברה הנוכחית.
|
||||||
|
|
||||||
|
**תהליך:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. בדוק אם קיים curator בחברה שלך
|
||||||
|
CURATOR_ID=$(PGPASSWORD=paperclip psql -h localhost -p 54329 -U paperclip -d paperclip -tA -c \
|
||||||
|
"SELECT id FROM agents WHERE name='מנהל ידע' AND company_id='$PAPERCLIP_COMPANY_ID' LIMIT 1;")
|
||||||
|
if [ -z "$CURATOR_ID" ]; then
|
||||||
|
echo "[F2] No Knowledge Curator in company — skipping"
|
||||||
|
else
|
||||||
|
# 2. מצא את ה-issue הראשי של התיק
|
||||||
|
MAIN_ISSUE_ID=$(curl -s -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
|
||||||
|
"$PAPERCLIP_API_URL/issues/$PAPERCLIP_TASK_ID" \
|
||||||
|
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('parentId') or d['id'])")
|
||||||
|
|
||||||
|
# 3. צור sub-issue ל-curator (ללא המתנה לתשובה!)
|
||||||
|
SUB_ISSUE_ID=$(~/legal-ai/scripts/pc.sh POST "/api/issues/$MAIN_ISSUE_ID/children" "$(cat <<JSON
|
||||||
|
{
|
||||||
|
"title": "[ערר $CASE_NUMBER] סקירת ידע — Knowledge Curator",
|
||||||
|
"description": "סקור את ההחלטה הסופית שיוצאה כעת. חפש 3-5 דפוסי סגנון/דיון שלא תועדו ב-skills/decision/SKILL.md או ב-docs/legal-decision-lessons.md. כתוב comment עם הממצאים בעברית, ניטרלי. אל תעדכן קבצים — רק הצע.",
|
||||||
|
"status": "in_progress",
|
||||||
|
"priority": "low",
|
||||||
|
"assigneeAgentId": "$CURATOR_ID"
|
||||||
|
}
|
||||||
|
JSON
|
||||||
|
)" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
|
||||||
|
|
||||||
|
# 4. תייג plugin_state (חובה לפי כלל ברזל בראש הקובץ)
|
||||||
|
PGPASSWORD=paperclip psql -h localhost -p 54329 -U paperclip -d paperclip -c \
|
||||||
|
"INSERT INTO plugin_state (plugin_id, scope_kind, scope_id, namespace, state_key, value_json)
|
||||||
|
VALUES ('53461b5a-7f58-411a-9952-72f9c8d4a328', 'issue', '$SUB_ISSUE_ID', 'default', 'legal-case-number', '\"$CASE_NUMBER\"')
|
||||||
|
ON CONFLICT DO NOTHING;"
|
||||||
|
|
||||||
|
# 5. דווח בקומנט הראשי (לא ממתין לתוצאה)
|
||||||
|
~/legal-ai/scripts/pc.sh POST "/api/issues/$PAPERCLIP_TASK_ID/comments" \
|
||||||
|
"$(printf '{"body":"F2 ✓ — מנהל הידע (Hermes) מנתח את ההחלטה אסינכרונית. הממצאים יופיעו ב-CMP-XX (sub-issue %s)."}' "$SUB_ISSUE_ID")"
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
**חשוב:**
|
||||||
|
- **אל תמתין** לתשובת ה-curator — F הסתיים, לא חוסם את זרימה.
|
||||||
|
- **אל תעצור** את F בגלל F2. אם יצירת sub-issue נכשלה — log warning ועבור הלאה.
|
||||||
|
- ה-curator הוא Hermes (לא Claude Code) — POC. אם אתה רואה התנהגות מוזרה ב-sub-issues שלו, זה צפוי כרגע.
|
||||||
|
- ה-curator לא סוגר את ה-issue אוטומטית עדיין — צפוי. תיקון בעתיד (followup).
|
||||||
|
|
||||||
### שלב G: טיפול בעריכה מהמשתמש (אחרי ייצוא)
|
### שלב G: טיפול בעריכה מהמשתמש (אחרי ייצוא)
|
||||||
|
|
||||||
**מתי:** המשתמש העלה `עריכה-v*.docx` (אחרי שייצאנו `טיוטה-v*.docx` קודמת) וכתב תגובה בקומנט.
|
**מתי:** המשתמש העלה `עריכה-v*.docx` (אחרי שייצאנו `טיוטה-v*.docx` קודמת) וכתב תגובה בקומנט.
|
||||||
|
|||||||
Reference in New Issue
Block a user