Skip to content

סכמת תצורה ​

Triggerfish מוגדר באמצעות triggerfish.yaml, הממוקם ב- ~/.triggerfish/triggerfish.yaml לאחר הרצת triggerfish dive. עמוד זה מתעד כל חלק תצורה.

הפניות לסודות כל ערך מחרוזת בקובץ זה יכול להשתמש בקידומת secret:

להפניה לאישור מאוחסן ב-keychain של מערכת ההפעלה. לדוגמה, apiKey: "secret:provider:anthropic:apiKey" מפענח את הערך מה-keychain בעת ההפעלה. ראו ניהול סודות לפרטים. :::

דוגמה מוערת מלאה ​

yaml
# =============================================================================
# triggerfish.yaml -- עיון מלא בתצורה
# =============================================================================

# ---------------------------------------------------------------------------
# Models: הגדרת ספקי LLM ו-failover
# ---------------------------------------------------------------------------
models:
  # המודל הראשי המשמש להשלמות הסוכן
  primary:
    provider: anthropic
    model: claude-sonnet-4-5

  # אופציונלי: מודל ראייה נפרד לתיאור תמונות
  # כאשר המודל הראשי אינו תומך בראייה, תמונות מתוארות
  # אוטומטית על ידי מודל זה לפני שהן מגיעות לראשי.
  # vision: glm-4.5v

  # תגובות streaming (ברירת מחדל: true)
  # streaming: true

  # תצורה ספציפית לספק
  # מפתחות API מופנים באמצעות תחביר secret: ומפוענחים מ-keychain של מערכת ההפעלה.
  # הריצו `triggerfish dive` או `triggerfish config migrate-secrets` להגדרה.
  providers:
    anthropic:
      model: claude-sonnet-4-5
      # apiKey: "secret:provider:anthropic:apiKey"

    openai:
      model: gpt-4o

    google:
      model: gemini-pro

    ollama:
      model: llama3
      endpoint: "http://localhost:11434"

    lmstudio:
      model: lmstudio-community/Meta-Llama-3.1-8B-Instruct-GGUF
      endpoint: "http://localhost:1234"

    openrouter:
      model: anthropic/claude-sonnet-4-5

    zenmux:
      model: openai/gpt-5

    zai:
      model: glm-4.7

  # שרשרת failover מסודרת -- נבדקים ברצף כשהראשי נכשל
  failover:
    - claude-haiku-4-5 # חלופה ראשונה
    - gpt-4o # חלופה שנייה
    - ollama/llama3 # חלופה מקומית (לא דורש אינטרנט)

  # התנהגות failover
  failover_config:
    max_retries: 3 # ניסיונות חוזרים לכל ספק לפני מעבר לבא
    retry_delay_ms: 1000 # השהיה בין ניסיונות חוזרים
    conditions: # מה מפעיל failover
      - rate_limited # הספק החזיר 429
      - server_error # הספק החזיר 5xx
      - timeout # הבקשה חרגה מהזמן הקצוב

# ---------------------------------------------------------------------------
# Logging: פלט לוג מובנה
# ---------------------------------------------------------------------------
logging:
  level: normal # quiet | normal | verbose | debug

# ---------------------------------------------------------------------------
# Channels: חיבורי פלטפורמות הודעות
# ---------------------------------------------------------------------------
# סודות (טוקנים, מפתחות API, סיסמאות) מאוחסנים ב-keychain של מערכת ההפעלה.
# הריצו `triggerfish config add-channel <name>` להזנתם באופן מאובטח.
# רק תצורה שאינה סודית מופיעה כאן.
channels:
  telegram:
    ownerId: 123456789 # מזהה המשתמש המספרי שלכם ב-Telegram
    classification: INTERNAL # ברירת מחדל: INTERNAL

  signal:
    endpoint: "tcp://127.0.0.1:7583" # נקודת קצה של שרת signal-cli
    account: "+14155552671" # מספר הטלפון שלכם ב-Signal (E.164)
    classification: PUBLIC # ברירת מחדל: PUBLIC
    defaultGroupMode: mentioned-only # always | mentioned-only | owner-only
    groups:
      "group-id-here":
        mode: always
        classification: INTERNAL

  slack:
    classification: PUBLIC # ברירת מחדל: PUBLIC

  discord:
    ownerId: "your-discord-user-id" # מזהה המשתמש שלכם ב-Discord
    classification: PUBLIC # ברירת מחדל: PUBLIC

  whatsapp:
    phoneNumberId: "your-phone-number-id" # מלוח הבקרה של Meta Business
    classification: PUBLIC # ברירת מחדל: PUBLIC

  webchat:
    port: 8765 # פורט WebSocket ללקוח רשת
    classification: PUBLIC # ברירת מחדל: PUBLIC (מבקרים)

  email:
    smtpApiUrl: "https://api.sendgrid.com/v3/mail/send"
    imapHost: "imap.gmail.com"
    imapPort: 993
    imapUser: "you@gmail.com"
    fromAddress: "bot@example.com"
    ownerEmail: "you@gmail.com"
    classification: CONFIDENTIAL # ברירת מחדל: CONFIDENTIAL

# ---------------------------------------------------------------------------
# Classification: מודל רגישות נתונים
# ---------------------------------------------------------------------------
classification:
  mode: personal # "personal" או "enterprise" (בקרוב)
# רמות: RESTRICTED > CONFIDENTIAL > INTERNAL > PUBLIC

# ---------------------------------------------------------------------------
# Policy: כללי אכיפה מותאמים (פתח מילוט ארגוני)
# ---------------------------------------------------------------------------
policy:
  rules:
    - id: block-external-pii
      hook: PRE_OUTPUT
      priority: 100
      conditions:
        - type: recipient_is
          value: EXTERNAL
        - type: content_matches
          pattern: "\\b\\d{3}-\\d{2}-\\d{4}\\b" # תבנית SSN
      action: REDACT
      message: "PII redacted for external recipient"

    - id: rate-limit-browser
      hook: PRE_TOOL_CALL
      priority: 50
      conditions:
        - type: tool_name
          value: browser
        - type: rate_exceeds
          value: 10/minute
      action: BLOCK
      message: "Browser tool rate limit exceeded"

# ---------------------------------------------------------------------------
# MCP Servers: שרתי כלים חיצוניים
# ---------------------------------------------------------------------------
mcp_servers:
  filesystem:
    command: "deno"
    args: ["run", "--allow-read", "--allow-write", "mcp-filesystem-server.ts"]
    classification: INTERNAL

  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    classification: CONFIDENTIAL

# ---------------------------------------------------------------------------
# Scheduler: משימות cron וטריגרים
# ---------------------------------------------------------------------------
scheduler:
  cron:
    jobs:
      - id: morning-briefing
        schedule: "0 7 * * *" # 7 בבוקר יומי
        task: "Prepare morning briefing with calendar, unread emails, and weather"
        channel: telegram
        classification: INTERNAL

      - id: pipeline-check
        schedule: "0 */4 * * *" # כל 4 שעות
        task: "Check Salesforce pipeline for changes and notify if significant"
        channel: slack
        classification: CONFIDENTIAL

      - id: pr-review-check
        schedule: "*/15 * * * *" # כל 15 דקות
        task: "Check open PR tracking files and query GitHub for new reviews"
        classification: INTERNAL

  trigger:
    interval: 30m # בדיקה כל 30 דקות
    classification: INTERNAL # תקרת זיהום מקסימלית לטריגרים
    quiet_hours: "22:00-07:00" # השתקה בשעות אלו

# ---------------------------------------------------------------------------
# Notifications: העדפות מסירה
# ---------------------------------------------------------------------------
notifications:
  preferred_channel: telegram # ערוץ מסירה ברירת מחדל
  quiet_hours: "22:00-07:00" # השתקת עדיפות רגילה/נמוכה
  batch_interval: 15m # קיבוץ התראות בעדיפות נמוכה

# ---------------------------------------------------------------------------
# Agents: ניתוב רב-סוכני (אופציונלי)
# ---------------------------------------------------------------------------
agents:
  default: personal # סוכן חלופי
  list:
    - id: personal
      name: "Personal Assistant"
      channels: [whatsapp, telegram]
      tools:
        profile: "full"
      model: claude-opus-4-5
      classification_ceiling: INTERNAL

    - id: work
      name: "Work Assistant"
      channels: [slack, email]
      tools:
        profile: "coding"
        allow: [browser, github]
      model: claude-sonnet-4-5
      classification_ceiling: CONFIDENTIAL

# ---------------------------------------------------------------------------
# Voice: תצורת דיבור (אופציונלי)
# ---------------------------------------------------------------------------
voice:
  stt:
    provider: whisper # whisper | deepgram | openai
    model: base # גודל מודל Whisper
  tts:
    provider: elevenlabs # elevenlabs | openai | system
    voice_id: "your-voice-id"
  wake_word: "triggerfish"
  push_to_talk:
    shortcut: "Ctrl+Space"

# ---------------------------------------------------------------------------
# Webhooks: נקודות קצה לאירועים נכנסים (אופציונלי)
# ---------------------------------------------------------------------------
webhooks:
  endpoints:
    - id: github
      path: /webhook/github
      # סוד webhook מאוחסן ב-keychain של מערכת ההפעלה
      classification: INTERNAL
      actions:
        - event: "pull_request.opened"
          task: "Review PR and post summary"
        - event: "pull_request_review"
          task: "A PR review was submitted. Read tracking file, address feedback, commit, push."
        - event: "pull_request_review_comment"
          task: "An inline review comment was posted. Read tracking file, address comment."
        - event: "issue_comment"
          task: "A comment was posted on a PR. If tracked, address feedback."
        - event: "pull_request.closed"
          task: "PR closed or merged. Clean up branches and archive tracking file."
        - event: "issues.opened"
          task: "Triage new issue"

# ---------------------------------------------------------------------------
# GitHub: הגדרות אינטגרציית GitHub (אופציונלי)
# ---------------------------------------------------------------------------
github:
  auto_merge: false # ברירת מחדל: false. הגדירו true למיזוג אוטומטי של PRs מאושרים.

# ---------------------------------------------------------------------------
# Groups: התנהגות צ'אט קבוצתי (אופציונלי)
# ---------------------------------------------------------------------------
groups:
  default_behavior: "mentioned-only"
  overrides:
    - channel: slack
      channel_name: "#ai-assistant"
      behavior: "always"

# ---------------------------------------------------------------------------
# Remote: גישה מרחוק (אופציונלי)
# ---------------------------------------------------------------------------
# ---------------------------------------------------------------------------
# Web: תצורת חיפוש ושליפה
# ---------------------------------------------------------------------------
web:
  search:
    provider: brave # backend חיפוש (brave הוא ברירת המחדל)
# מפתח API מאוחסן ב-keychain של מערכת ההפעלה

# ---------------------------------------------------------------------------
# Remote: גישה מרחוק (אופציונלי)
# ---------------------------------------------------------------------------
remote:
  tailscale:
    serve: true
    funnel:
      enabled: true
      paths: ["/webhook/*"]
  auth:
# טוקן אימות מאוחסן ב-keychain של מערכת ההפעלה

עיון בחלקים ​

models ​

מפתחסוגתיאור
primaryobjectהפניית מודל ראשי עם שדות provider ו-model
primary.providerstringשם ספק (anthropic, openai, google, ollama, lmstudio, openrouter, zenmux, zai)
primary.modelstringמזהה מודל המשמש להשלמות הסוכן
visionstringמודל ראייה אופציונלי לתיאור תמונות אוטומטי (ראו תמונה וראייה)
streamingbooleanהפעלת תגובות streaming (ברירת מחדל: true)
providersobjectתצורה ספציפית לספק (ראו להלן)
failoverstring[]רשימה מסודרת של מודלים חלופיים
failover_config.max_retriesnumberניסיונות חוזרים לכל ספק לפני failover
failover_config.retry_delay_msnumberהשהיה בין ניסיונות חוזרים באלפיות שנייה
failover_config.conditionsstring[]תנאים המפעילים failover

channels ​

כל מפתח ערוץ הוא סוג הערוץ. כל סוגי הערוצים תומכים בשדה classification לדריסת רמת הסיווג המוגדרת כברירת מחדל.

כל הסודות (טוקנים, מפתחות API, סיסמאות) מאוחסנים ב-keychain של מערכת

ההפעלה, לא בקובץ זה. הריצו triggerfish config add-channel <name> להזנת אישורים באופן מאובטח. :::

classification ​

מפתחסוגתיאור
mode"personal" או "enterprise"מצב פריסה (בקרוב -- כעת שניהם משתמשים באותן רמות סיווג)

policy ​

כללים מותאמים המוערכים במהלך ביצוע hooks. כל כלל מציין סוג hook, עדיפות, תנאים ופעולה. מספרי עדיפות גבוהים יותר מוערכים ראשונים.

mcp_servers ​

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

scheduler ​

הגדרות משימות cron ותזמון טריגרים. ראו Cron וטריגרים לפרטים.

notifications ​

העדפות מסירת התראות. ראו התראות לפרטים.

web ​

מפתחסוגתיאור
web.search.providerstringbackend חיפוש לכלי web_search (כעת: brave)

ראו חיפוש רשת ושליפה לפרטים.

logging ​

מפתחסוגברירת מחדלתיאור
levelstring"normal"מילוליות לוג: quiet (שגיאות בלבד), normal (מידע), verbose (ניפוי), debug (מעקב)

ראו לוגים מובנים לפרטים על פלט לוג וסיבוב קבצים.

github ​

מפתחסוגברירת מחדלתיאור
auto_mergebooleanfalseכאשר true, הסוכן ממזג אוטומטית PRs לאחר קבלת ביקורת מאשרת. כאשר false (ברירת מחדל), הסוכן מודיע לבעלים וממתין להוראת מיזוג מפורשת.

ראו את מדריך אינטגרציית GitHub להוראות הגדרה מלאות.