Files
legal-ai/.claude/agents/HEARTBEAT.md
Chaim 598df0dc8c
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 7s
Fix Paperclip API routes and document agent-to-agent wakeup pattern
Agent JWT cannot wake other agents directly (returns "Agent can only
invoke itself"). The correct pattern: create an issue + assign to the
target agent → Paperclip triggers wakeup automatically.

Also documented all correct API routes in HEARTBEAT.md:
- POST /api/issues/{id}/comments (not /issues/)
- POST /api/companies/{company-id}/issues (not /api/issues)
- PATCH /api/issues/{id}
- POST /api/agents/{id}/wakeup (self only, with payload.issueId)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 14:43:54 +00:00

6.3 KiB
Raw Blame History

HEARTBEAT.md — רשימת ביצוע לכל ריצה

שפה — כלל עליון

כל הפלט שלך חייב להיות בעברית בלבד. זה כולל:

  • Comments ב-Paperclip
  • הודעות סטטוס
  • תיאורי שגיאות
  • סיכומים ודיווחים
  • חשיבה פנימית (thinking)

אין יוצאים מן הכלל. גם שמות tools, פקודות, ונתיבי קבצים — ההסבר סביבם בעברית.


הרץ את הרשימה הזו בכל heartbeat.

1. זיהוי

  • וודא שאתה יודע מי אתה: $PAPERCLIP_AGENT_ID
  • בדוק הקשר: $PAPERCLIP_TASK_ID, $PAPERCLIP_WAKE_REASON

2. בדוק תיבת דואר

curl -s -H "Authorization: Bearer $PAPERCLIP_API_KEY" "$PAPERCLIP_API_URL/api/agents/me/inbox-lite"
  • תעדוף: in_progress קודם, אחר כך todo
  • אם PAPERCLIP_TASK_ID מוגדר — תעדף אותו

2b. קרא תגובות אחרונות על ה-issue

לפני שאתה מתחיל לעבוד, בדוק אם יש comments חדשים מחיים:

curl -s -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  "$PAPERCLIP_API_URL/api/issues/{issue-id}/comments" | jq '[.[] | select(.authorUserId != null)] | .[-3:]'
  • אם יש comment מחיים (authorUserId, לא authorAgentId) שנכתב אחרי ה-comment האחרון שלך — קרא אותו בתשומת לב
  • אם ה-comment מכיל הוראות עבודה — עקוב אחריהן
  • אם ה-comment מזכיר קובץ שהועלה — בדוק attachments (ראה 2c)
  • אם ה-comment מבקש להעביר לסוכן אחר — עצור, פרסם comment שמאשר, והעֵר את ה-CEO

2c. בדוק קבצים מצורפים

אם comment מחיים מזכיר קובץ או טיוטה:

PGPASSWORD="paperclip" psql -h 127.0.0.1 -p 54329 -U paperclip -d paperclip -c "
SELECT a.original_filename, a.content_type, a.object_key, a.byte_size
FROM issue_attachments ia
JOIN assets a ON a.id = ia.asset_id
WHERE ia.issue_id = '{issue-id}'
ORDER BY ia.created_at DESC LIMIT 5;"
  • נתיב מלא לקובץ: /home/chaim/.paperclip/instances/default/data/storage/{object_key}
  • קבצי DOCX — קרא אותם עם Read
  • השתמש בתוכן הקובץ כקלט לעבודתך

3. Checkout ועבודה

curl -s -X POST -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  "$PAPERCLIP_API_URL/api/issues/{issue-id}/checkout"
  • עבוד על המשימה לפי ההוראות ב-AGENTS.md שלך
  • השתמש בכלים המשפטיים (legal-ai MCP)

4. דיווח — חובה!

לפני שאתה מסיים, תמיד:

4א. פרסם comment על ה-issue

curl -s -X POST -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  -H "Content-Type: application/json" \
  "$PAPERCLIP_API_URL/api/issues/{issue-id}/comments" \
  -d '{"body": "סיכום העבודה..."}'

4ב. קבע סטטוס — done או blocked

אם המשימה הושלמה בהצלחה (כל המסמכים חולצו, כל הבדיקות עברו, אין חסימות):

curl -s -X PATCH -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  -H "Content-Type: application/json" \
  "$PAPERCLIP_API_URL/api/issues/{issue-id}" \
  -d '{"status": "done"}'

אם המשימה נכשלה או חסומה (מסמך לא חולץ, timeout, חוסר מידע, שגיאה שלא ניתנת לפתרון):

curl -s -X PATCH -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  -H "Content-Type: application/json" \
  "$PAPERCLIP_API_URL/api/issues/{issue-id}" \
  -d '{"status": "blocked"}'

אסור לסיים issue כ-"done" אם יש כשל שלא טופל. "done" = הכל הושלם בהצלחה. אם משהו נכשל — "blocked".

4ג. העֵר את העוזר המשפטי (CEO) — חובה!

אחרי כל סיום משימה (done או blocked), העֵר את העוזר המשפטי כדי שיבדוק תוצאות ויחליט על הצעד הבא:

curl -s -X POST -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  -H "Content-Type: application/json" \
  "$PAPERCLIP_API_URL/api/agents/752cebdd-6748-4a04-aacd-c7ab0294ef33/wakeup" \
  -d '{"source":"automation","triggerDetail":"system","reason":"סוכן [שמך] סיים משימה [issue-id] בסטטוס [done/blocked]","payload":{"issueId":"[issue-id]","mutation":"agent_completion"}}'

⚠️ כללי ברזל — Paperclip API:

  1. אסור INSERT INTO agent_wakeup_requests — לא יוצר heartbeat_run, הסוכן לא יתעורר לעולם
  2. חובה payload.issueId בכל wakeup — בלי זה הסוכן מתעורר בלי הקשר (בלי תיק, בלי cwd)
  3. agent JWT לא יכול להעיר סוכנים אחרים — רק את עצמו. כדי להעיר סוכן אחר → צור issue + הקצה אליו (Paperclip מפעיל wakeup אוטומטי)

נתיבי API:

פעולה נתיב
פרסום comment POST /api/issues/{issue-id}/comments
יצירת issue POST /api/companies/{company-id}/issues
עדכון issue PATCH /api/issues/{issue-id}
wakeup עצמי/CEO POST /api/agents/{agent-id}/wakeup (עם payload!)

5. התראת מייל — כשנדרשת תשובה אנושית

כשהתוצאה דורשת החלטה או תשובה של חיים, שלח מייל:

python3 /home/chaim/legal-ai/scripts/notify.py \
  "נדרשת תשובתך — [תיאור קצר]" \
  "תוכן ההודעה עם סיכום מה נדרש"

מתי לשלוח — תמיד:

  • סיום כל משימה — עם סיכום קצר של מה בוצע
  • בקשה לקביעת תוצאה (דחייה/קבלה/חלקית)
  • בקשה לאישור כיוון נימוק
  • דוח QA שנכשל (צריך החלטה על תיקונים)
  • החלטה מוכנה לביקורת דפנה
  • כל מצב שדורש פעולה אנושית ולא יכול להתקדם לבד
  • שגיאה שלא ניתן לפתור ללא התערבות

מתי לא לשלוח:

  • עדכוני סטטוס ביניים (רק בסיום)
  • שגיאות טכניות שאפשר לפתור לבד

6. Release

curl -s -X POST -H "Authorization: Bearer $PAPERCLIP_API_KEY" \
  "$PAPERCLIP_API_URL/api/issues/{issue-id}/release"