Skip to content

Skema Config

Triggerfish dikonfigurasi melalui triggerfish.yaml, terletak di ~/.triggerfish/triggerfish.yaml selepas menjalankan triggerfish dive. Halaman ini mendokumentasikan setiap bahagian konfigurasi.

Rujukan Rahsia Mana-mana nilai rentetan dalam fail ini boleh menggunakan awalan secret: untuk merujuk kelayakan yang disimpan dalam keychain OS. Sebagai contoh, apiKey: "secret:provider:anthropic:apiKey" menyelesaikan nilai dari keychain semasa permulaan. Lihat Pengurusan Rahsia untuk perincian. :::

Contoh Beranotasi Penuh

yaml
# =============================================================================
# triggerfish.yaml -- Rujukan konfigurasi lengkap
# =============================================================================

# ---------------------------------------------------------------------------
# Models: Konfigurasi pembekal LLM dan failover
# ---------------------------------------------------------------------------
models:
  # Model utama yang digunakan untuk penyelesaian ejen
  primary:
    provider: anthropic
    model: claude-sonnet-4-5

  # Pilihan: model visi berasingan untuk huraian imej
  # Apabila model utama tidak menyokong visi, imej secara automatik
  # dihuraikan oleh model ini sebelum mencapai yang utama.
  # vision: glm-4.5v

  # Respons penstriman (lalai: true)
  # streaming: true

  # Konfigurasi khusus pembekal
  # Kunci API dirujuk melalui sintaks secret: dan diselesaikan dari keychain OS.
  # Jalankan `triggerfish dive` atau `triggerfish config migrate-secrets` untuk persediaan.
  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

  # Rantaian failover tertib -- dicuba dalam urutan apabila yang utama gagal
  failover:
    - claude-haiku-4-5 # Jatuh balik pertama
    - gpt-4o # Jatuh balik kedua
    - ollama/llama3 # Jatuh balik tempatan (tiada internet diperlukan)

  # Tingkah laku failover
  failover_config:
    max_retries: 3 # Percubaan semula per pembekal sebelum beralih ke seterusnya
    retry_delay_ms: 1000 # Kelewatan antara percubaan semula
    conditions: # Apa yang mencetuskan failover
      - rate_limited # Pembekal mengembalikan 429
      - server_error # Pembekal mengembalikan 5xx
      - timeout # Permintaan melebihi tamat masa

# ---------------------------------------------------------------------------
# Logging: Output log berstruktur
# ---------------------------------------------------------------------------
logging:
  level: normal # quiet | normal | verbose | debug

# ---------------------------------------------------------------------------
# Channels: Sambungan platform pemesejan
# ---------------------------------------------------------------------------
# Rahsia (token bot, kunci API, kata laluan) disimpan dalam keychain OS.
# Jalankan `triggerfish config add-channel <name>` untuk memasukkannya dengan selamat.
# Hanya konfigurasi bukan rahsia muncul di sini.
channels:
  telegram:
    ownerId: 123456789 # ID pengguna numerik Telegram anda
    classification: INTERNAL # Lalai: INTERNAL

  signal:
    endpoint: "tcp://127.0.0.1:7583" # Titik akhir daemon signal-cli
    account: "+14155552671" # Nombor telefon Signal anda (E.164)
    classification: PUBLIC # Lalai: PUBLIC
    defaultGroupMode: mentioned-only # always | mentioned-only | owner-only
    groups:
      "group-id-here":
        mode: always
        classification: INTERNAL

  slack:
    classification: PUBLIC # Lalai: PUBLIC

  discord:
    ownerId: "your-discord-user-id" # ID pengguna Discord anda
    classification: PUBLIC # Lalai: PUBLIC

  whatsapp:
    phoneNumberId: "your-phone-number-id" # Dari Meta Business Dashboard
    classification: PUBLIC # Lalai: PUBLIC

  webchat:
    port: 8765 # Port WebSocket untuk klien web
    classification: PUBLIC # Lalai: PUBLIC (pelawat)

  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 # Lalai: CONFIDENTIAL

# ---------------------------------------------------------------------------
# Classification: Model sensitiviti data
# ---------------------------------------------------------------------------
classification:
  mode: personal # "personal" atau "enterprise" (akan datang)
# Peringkat: RESTRICTED > CONFIDENTIAL > INTERNAL > PUBLIC

# ---------------------------------------------------------------------------
# Policy: Peraturan penguatkuasaan tersuai (jalan keluar perusahaan)
# ---------------------------------------------------------------------------
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" # Corak SSN
      action: REDACT
      message: "PII disunting untuk penerima luaran"

    - 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: "Had kadar alat browser dilampaui"

# ---------------------------------------------------------------------------
# MCP Servers: Pelayan alat luaran
# ---------------------------------------------------------------------------
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

# ---------------------------------------------------------------------------
# Plugins: Konfigurasi plugin dinamik (pilihan)
# ---------------------------------------------------------------------------
# Plugin dalam ~/.triggerfish/plugins/ dimuatkan semasa permulaan apabila diaktifkan di sini.
# Plugin yang dimuatkan oleh ejen semasa runtime (melalui plugin_install) TIDAK memerlukan
# entri config -- ia lalai ke kepercayaan sandbox dan pengkelasan manifest.
plugins:
  weather:
    enabled: true
    classification: PUBLIC
    trust: sandboxed # atau "trusted" untuk memberikan kebenaran Deno penuh
    # Kunci tambahan dihantar sebagai context.config kepada plugin
    api_key: "secret:plugin:weather:apiKey"

  system-info:
    enabled: true
    classification: PUBLIC
    trust: trusted # manifest DAN config mesti mengatakan "trusted"

# ---------------------------------------------------------------------------
# Scheduler: Pekerjaan cron dan trigger
# ---------------------------------------------------------------------------
scheduler:
  cron:
    jobs:
      - id: morning-briefing
        schedule: "0 7 * * *" # 7 pagi setiap hari
        task: "Sediakan taklimat pagi dengan kalendar, e-mel belum dibaca, dan cuaca"
        channel: telegram
        classification: INTERNAL

      - id: pipeline-check
        schedule: "0 */4 * * *" # Setiap 4 jam
        task: "Semak saluran paip Salesforce untuk perubahan dan beritahu jika ketara"
        channel: slack
        classification: CONFIDENTIAL

      - id: pr-review-check
        schedule: "*/15 * * * *" # Setiap 15 minit
        task: "Semak fail penjejakan PR terbuka dan tanya GitHub untuk semakan baru"
        classification: INTERNAL

  trigger:
    interval: 30m # Semak setiap 30 minit
    classification: INTERNAL # Siling taint maks untuk trigger
    quiet_hours: "22:00-07:00" # Sekat semasa waktu ini

# ---------------------------------------------------------------------------
# Notifications: Keutamaan penghantaran
# ---------------------------------------------------------------------------
notifications:
  preferred_channel: telegram # Saluran penghantaran lalai
  quiet_hours: "22:00-07:00" # Sekat normal/keutamaan rendah
  batch_interval: 15m # Kumpulkan pemberitahuan keutamaan rendah

# ---------------------------------------------------------------------------
# Agents: Penghalaan berbilang ejen (pilihan)
# ---------------------------------------------------------------------------
agents:
  default: personal # Ejen jatuh balik
  list:
    - id: personal
      name: "Pembantu Peribadi"
      channels: [whatsapp, telegram]
      tools:
        profile: "full"
      model: claude-opus-4-5
      classification_ceiling: INTERNAL

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

# ---------------------------------------------------------------------------
# Voice: Konfigurasi suara (pilihan)
# ---------------------------------------------------------------------------
voice:
  stt:
    provider: whisper # whisper | deepgram | openai
    model: base # Saiz model Whisper
  tts:
    provider: elevenlabs # elevenlabs | openai | system
    voice_id: "your-voice-id"
  wake_word: "triggerfish"
  push_to_talk:
    shortcut: "Ctrl+Space"

# ---------------------------------------------------------------------------
# Webhooks: Titik akhir peristiwa masuk (pilihan)
# ---------------------------------------------------------------------------
webhooks:
  endpoints:
    - id: github
      path: /webhook/github
      # Rahsia webhook disimpan dalam keychain OS
      classification: INTERNAL
      actions:
        - event: "pull_request.opened"
          task: "Semak PR dan hantar ringkasan"
        - event: "pull_request_review"
          task: "Semakan PR telah dihantar. Baca fail penjejakan, tangani maklum balas, komit, tolak."
        - event: "pull_request_review_comment"
          task: "Ulasan semakan sebaris telah disiarkan. Baca fail penjejakan, tangani ulasan."
        - event: "issue_comment"
          task: "Ulasan telah disiarkan pada PR. Jika dijejaki, tangani maklum balas."
        - event: "pull_request.closed"
          task: "PR ditutup atau digabungkan. Bersihkan cawangan dan arkibkan fail penjejakan."
        - event: "issues.opened"
          task: "Triage isu baru"

# ---------------------------------------------------------------------------
# GitHub: Tetapan integrasi GitHub (pilihan)
# ---------------------------------------------------------------------------
github:
  auto_merge: false # Lalai: false. Tetapkan true untuk cantum PR yang diluluskan secara automatik.

# ---------------------------------------------------------------------------
# Groups: Tingkah laku sembang kumpulan (pilihan)
# ---------------------------------------------------------------------------
groups:
  default_behavior: "mentioned-only"
  overrides:
    - channel: slack
      channel_name: "#ai-assistant"
      behavior: "always"

# ---------------------------------------------------------------------------
# Web: Konfigurasi carian dan ambil
# ---------------------------------------------------------------------------
web:
  search:
    provider: brave # Backend carian (brave adalah lalai)
# Kunci API disimpan dalam keychain OS

# ---------------------------------------------------------------------------
# Remote: Akses jauh (pilihan)
# ---------------------------------------------------------------------------
remote:
  tailscale:
    serve: true
    funnel:
      enabled: true
      paths: ["/webhook/*"]
  auth:
# Token auth disimpan dalam keychain OS

Rujukan Bahagian

models

KunciJenisKeterangan
primaryobjekRujukan model utama dengan medan provider dan model
primary.providerstringNama pembekal (anthropic, openai, google, ollama, lmstudio, openrouter, zenmux, zai)
primary.modelstringPengecam model yang digunakan untuk penyelesaian ejen
visionstringModel visi pilihan untuk huraian imej automatik (lihat Imej dan Visi)
streamingbooleanAktifkan respons penstriman (lalai: true)
providersobjekKonfigurasi khusus pembekal (lihat di bawah)
failoverstring[]Senarai tertib model jatuh balik
failover_config.max_retriesnumberPercubaan semula per pembekal sebelum failover
failover_config.retry_delay_msnumberKelewatan antara percubaan semula dalam milisaat
failover_config.conditionsstring[]Syarat yang mencetuskan failover

channels

Setiap kunci saluran adalah jenis saluran. Semua jenis saluran menyokong medan classification untuk mengatasi tahap pengkelasan lalai.

Semua rahsia (token, kunci API, kata laluan) disimpan dalam keychain OS, bukan dalam fail ini. Jalankan triggerfish config add-channel <name> untuk memasukkan kelayakan dengan selamat. :::

classification

KunciJenisKeterangan
mode"personal" atau "enterprise"Mod pelancaran (akan datang -- pada masa ini kedua-duanya menggunakan tahap pengkelasan yang sama)

policy

Peraturan tersuai yang dinilai semasa pelaksanaan hook. Setiap peraturan menentukan jenis hook, keutamaan, syarat, dan tindakan. Nombor keutamaan yang lebih tinggi dinilai dahulu.

mcp_servers

Pelayan alat MCP luaran. Setiap pelayan menentukan arahan untuk melancarkannya, pemboleh ubah persekitaran pilihan, tahap pengkelasan, dan kebenaran per-alat.

plugins

Konfigurasi plugin dinamik. Setiap kunci adalah nama plugin yang sepadan dengan direktori dalam ~/.triggerfish/plugins/. Konfigurasi adalah pilihan -- plugin yang dimuatkan oleh ejen semasa runtime (melalui plugin_install) berfungsi tanpa entri konfigurasi.

KunciJenisLalaiKeterangan
enabledbooleanfalseSama ada hendak memuatkan plugin ini semasa permulaan
classificationstringdari manifestMengatasi tahap pengkelasan plugin
trust"sandboxed" atau "trusted""sandboxed"Pemberian tahap kepercayaan. Manifest DAN konfigurasi mesti mengatakan "trusted"
(kunci lain)apa sahaja--Dihantar kepada plugin sebagai context.config

Lihat Plugin untuk perincian tentang menulis, memuatkan, dan mengurus plugin.

scheduler

Definisi pekerjaan cron dan masa trigger. Lihat Cron dan Trigger untuk perincian.

notifications

Keutamaan penghantaran pemberitahuan. Lihat Pemberitahuan untuk perincian.

web

KunciJenisKeterangan
web.search.providerstringBackend carian untuk alat web_search (pada masa ini: brave)

Lihat Carian dan Ambil Web untuk perincian.

logging

KunciJenisLalaiKeterangan
levelstring"normal"Verbositi log: quiet (ralat sahaja), normal (info), verbose (debug), debug (jejak)

Lihat Pengelogan Berstruktur untuk perincian tentang output log dan putaran fail.

github

KunciJenisLalaiKeterangan
auto_mergebooleanfalseApabila true, ejen mencantum PR secara automatik selepas menerima semakan yang meluluskan. Apabila false (lalai), ejen memberitahu pemilik dan menunggu arahan cantum eksplisit.

Lihat panduan Integrasi GitHub untuk arahan persediaan penuh.