Skip to content

Configuratie ​

Triggerfish wordt geconfigureerd via één YAML-bestand op ~/.triggerfish/triggerfish.yaml. De installatiewizard (triggerfish dive) maakt dit bestand voor u aan, maar u kunt het op elk moment handmatig bewerken.

Locatie van het configuratiebestand ​

~/.triggerfish/triggerfish.yaml

U kunt afzonderlijke waarden instellen via de opdrachtregel met behulp van gestippelde paden:

bash
triggerfish config set <sleutel> <waarde>
triggerfish config get <sleutel>

Booleaanse en gehele getallen worden automatisch omgezet. Geheimen worden gemaskeerd in de uitvoer.

Valideer uw configuratie met:

bash
triggerfish config validate

Modellen ​

De sectie models configureert uw LLM-aanbieders en failover-gedrag.

yaml
models:
  # Welke aanbieder en model standaard te gebruiken
  primary:
    provider: anthropic
    model: claude-sonnet-4-5-20250929

  # Optioneel: visiemodel voor automatische afbeeldingsbeschrijving wanneer het
  # primaire model geen visieondersteuning heeft
  # vision: gemini-2.0-flash

  # Gestreamde antwoorden (standaard: true)
  # streaming: true

  providers:
    anthropic:
      model: claude-sonnet-4-5-20250929

    openai:
      model: gpt-4o

    google:
      model: gemini-2.5-pro

    ollama:
      model: llama3
      endpoint: "http://localhost:11434" # Ollama-standaard

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

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

    zenmux:
      model: openai/gpt-5

    zai:
      model: glm-4.7

  # Failover-keten: als de primaire aanbieder uitvalt, probeer deze in volgorde
  failover:
    - openai
    - google

API-sleutels worden opgeslagen in de OS-sleutelhanger, niet in dit bestand. De installatiewizard (triggerfish dive) vraagt om uw API-sleutel en slaat deze veilig op. Ollama en LM Studio zijn lokaal en vereisen geen authenticatie.

Kanalen ​

De sectie channels definieert met welke berichtenplatforms uw agent verbindt en het classificatieniveau voor elk kanaal.

yaml
channels:
  cli:
    enabled: true
    classification: INTERNAL

  telegram:
    enabled: true
    ownerId: 123456789
    classification: INTERNAL

  signal:
    enabled: true
    endpoint: "tcp://127.0.0.1:7583"
    account: "+14155552671"
    classification: PUBLIC
    defaultGroupMode: mentioned-only

  slack:
    enabled: true
    classification: PUBLIC

  discord:
    enabled: true
    ownerId: "uw-discord-gebruikers-id"
    classification: PUBLIC

  whatsapp:
    enabled: true
    phoneNumberId: "uw-telefoonnummer-id"
    classification: PUBLIC

  webchat:
    enabled: true
    classification: PUBLIC
    port: 18790

  email:
    enabled: true
    imapHost: "imap.gmail.com"
    smtpApiUrl: "https://api.sendgrid.com/v3/mail/send"
    imapUser: "u@gmail.com"
    fromAddress: "bot@voorbeeld.com"
    ownerEmail: "u@gmail.com"
    classification: CONFIDENTIAL

Tokens, wachtwoorden en API-sleutels voor elk kanaal worden opgeslagen in de OS-sleutelhanger. Voer triggerfish config add-channel <naam> uit om inloggegevens interactief in te voeren — ze worden opgeslagen in de sleutelhanger, nooit in dit bestand.

Kanaalconfiguratiesleutels ​

Niet-geheime configuratie in triggerfish.yaml:

KanaalConfiguratiesleutelsOptionele sleutels
CLIenabledclassification
Telegramenabled, ownerIdclassification
Signalenabled, endpoint, accountclassification, defaultGroupMode, groups, ownerPhone, pairing
Slackenabledclassification, ownerId
Discordenabled, ownerIdclassification
WhatsAppenabled, phoneNumberIdclassification, ownerPhone, webhookPort
WebChatenabledclassification, port, allowedOrigins
E-mailenabled, smtpApiUrl, imapHost, imapUser, fromAddressclassification, ownerEmail, imapPort, pollInterval

Geheimen (bottokens, API-sleutels, wachtwoorden, ondertekeningsgeheimen) worden ingevoerd tijdens de kanaalinstelling en opgeslagen in de OS-sleutelhanger.

Standaard classificatieniveaus ​

KanaalStandaard
CLIINTERNAL
TelegramINTERNAL
SignalPUBLIC
SlackPUBLIC
DiscordPUBLIC
WhatsAppPUBLIC
WebChatPUBLIC
E-mailCONFIDENTIAL

Alle standaardwaarden zijn configureerbaar. Stel elk kanaal in op elk classificatieniveau.

MCP-servers ​

Verbind externe MCP-servers om uw agent toegang te geven tot aanvullende tools. Zie MCP Gateway voor het volledige beveiligingsmodel.

yaml
mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "keychain:github-pat"
    classification: CONFIDENTIAL

  filesystem:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/u/docs"]
    classification: INTERNAL

Elke server moet een classification-niveau hebben, anders wordt de server geweigerd (standaard weigeren). Gebruik command + args voor lokale servers (gestart als subprocessen) of url voor externe servers (HTTP SSE). Omgevingswaarden met het voorvoegsel keychain: worden opgelost vanuit de OS-sleutelhanger.

Voor hulp bij het kiezen van classificatieniveaus, zie de Classificatiegids.

Classificatie ​

De sectie classification bepaalt hoe Triggerfish gegevens classificeert en beschermt.

yaml
classification:
  mode: personal # "personal" of "enterprise" (binnenkort beschikbaar)

Classificatieniveaus:

NiveauBeschrijvingVoorbeelden
RESTRICTEDMeest gevoeligF&O-documenten, PII, bankrekeningen, medische dossiers
CONFIDENTIALGevoeligCRM-gegevens, financiën, contracten, belastinggegevens
INTERNALAlleen internInterne wiki's, persoonlijke notities, contacten
PUBLICVeilig voor iederMarketingmateriaal, openbare info, algemene webinhoud

Voor gedetailleerde richtlijnen over het kiezen van het juiste niveau voor uw integraties, kanalen en MCP-servers, zie de Classificatiegids.

Beleid ​

De sectie policy configureert aangepaste handhavingsregels bovenop de ingebouwde beschermingen.

yaml
policy:
  # Standaardactie wanneer geen regel overeenkomt
  default_action: ALLOW

  # Aangepaste regels
  rules:
    # Blokkeer toolreacties die BSN-patronen bevatten
    - hook: POST_TOOL_RESPONSE
      conditions:
        - tool_name: "salesforce.*"
        - content_matches: '\b\d{3}-\d{2}-\d{4}\b'
      action: REDACT
      redaction_pattern: "[BSN VERWIJDERD]"
      log_level: ALERT

    # Beperk externe API-aanroepen
    - hook: PRE_TOOL_CALL
      conditions:
        - tool_category: external_api
      rate_limit: 100/hour
      action: BLOCK

De kernbeveiligingsregels — geen write-down, sessie-taint-escalatie, auditregistratie — worden altijd gehandhaafd en kunnen niet worden uitgeschakeld. Aangepaste beleidsregels voegen extra controles toe bovenop deze vaste beveiligingen. :::

Webzoeken en ophalen ​

De sectie web configureert webzoeken en het ophalen van inhoud, inclusief domeinstandbeveiligingscontroles.

yaml
web:
  search:
    provider: brave # Zoekbackend (brave wordt momenteel ondersteund)
    max_results: 10
    safe_search: moderate # off, moderate, strict
  fetch:
    rate_limit: 10 # Verzoeken per minuut
    max_content_length: 50000
    timeout: 30000
    default_mode: readability # readability of raw
  domains:
    denylist:
      - "*.malware-site.com"
    allowlist: [] # Leeg = alles toestaan (minus denylist)
    classifications:
      - pattern: "*.internal.corp"
        classification: CONFIDENTIAL

Stel zoeken in via de opdrachtregel:

bash
triggerfish config set web.search.provider brave

De Brave API-sleutel wordt ingevoerd tijdens triggerfish dive en opgeslagen in de OS-sleutelhanger.

Haal een Brave Search API-sleutel op via brave.com/search/api. Het gratis abonnement bevat 2.000 zoekopdrachten per maand. :::

Cron-jobs ​

Plan terugkerende taken voor uw agent:

yaml
cron:
  jobs:
    - id: morning-briefing
      schedule: "0 7 * * *" # Elke dag om 7 uur
      task: "Ochtendoverzicht opstellen met agenda, ongelezen e-mails en weer"
      channel: telegram # Waar de resultaten te bezorgen
      classification: INTERNAL # Maximaal taint-plafond voor deze job

    - id: pipeline-check
      schedule: "0 */4 * * *" # Elke 4 uur
      task: "Salesforce-pipeline controleren op wijzigingen"
      channel: slack
      classification: CONFIDENTIAL

Elke cron-job draait in zijn eigen geïsoleerde sessie met een classificatieplafond. Alle cron-acties worden via de normale beleidshooks uitgevoerd.

Triggertiming ​

Configureer hoe vaak uw agent proactieve controles uitvoert:

yaml
trigger:
  interval: 30m # Elke 30 minuten controleren
  classification: INTERNAL # Maximaal taint-plafond voor triggersessies
  quiet_hours: "22:00-07:00" # Geen triggers buiten kantooruren

Het triggersysteem leest uw ~/.triggerfish/TRIGGER.md-bestand om te bepalen wat er bij elke activering moet worden gecontroleerd. Zie SPINE en Triggers voor meer informatie over het schrijven van uw TRIGGER.md.

Webhooks ​

Accepteer inkomende evenementen van externe services:

yaml
webhooks:
  endpoints:
    - id: github-events
      path: /webhook/github
      classification: INTERNAL
      actions:
        - event: "pull_request.opened"
          task: "PR beoordelen en samenvatting plaatsen"
        - event: "issues.opened"
          task: "Nieuw issue triageren"

    - id: sentry-alerts
      path: /webhook/sentry
      classification: CONFIDENTIAL
      actions:
        - event: "error"
          task: "Fout onderzoeken en indien mogelijk een fix-PR aanmaken"

Volledig voorbeeld ​

Hier is een complete voorbeeldconfiguratie met opmerkingen:

yaml
# ~/.triggerfish/triggerfish.yaml

# --- LLM-aanbieders ---
models:
  primary:
    provider: anthropic
    model: claude-sonnet-4-5-20250929
  providers:
    anthropic:
      model: claude-sonnet-4-5-20250929
    openai:
      model: gpt-4o
  failover:
    - openai

# --- Kanalen ---
channels:
  cli:
    enabled: true
    classification: INTERNAL
  telegram:
    enabled: true
    ownerId: 123456789
    classification: INTERNAL
  signal:
    enabled: false
  slack:
    enabled: false

# --- Classificatie ---
classification:
  mode: personal

# --- Beleid ---
policy:
  default_action: ALLOW

# --- Cron ---
cron:
  jobs:
    - id: morning-briefing
      schedule: "0 7 * * *"
      task: "Ochtendoverzicht opstellen"
      channel: telegram
      classification: INTERNAL

# --- Triggers ---
trigger:
  interval: 30m
  classification: INTERNAL
  quiet_hours: "22:00-07:00"

Volgende stappen ​