Skip to content

Probleemoplossing: Daemon

Daemon start niet

"Triggerfish is already running"

Dit bericht verschijnt wanneer het logboekbestand is vergrendeld door een ander proces. Op Windows wordt dit gedetecteerd via een EBUSY / "os error 32" wanneer de bestandsschrijver het logboekbestand probeert te openen.

Oplossing:

bash
triggerfish status    # Controleer of er werkelijk een actieve instantie is
triggerfish stop      # Stop de bestaande instantie
triggerfish start     # Opnieuw starten

Als triggerfish status meldt dat de daemon niet actief is maar u toch deze fout krijgt, houdt een ander proces het logboekbestand open. Controleer op zombie-processen:

bash
# Linux
ps aux | grep triggerfish

# macOS
ps aux | grep triggerfish

# Windows
tasklist | findstr triggerfish

Beëindig eventuele verouderde processen en probeer dan opnieuw.

Poort 18789 of 18790 al in gebruik

De gateway luistert op poort 18789 (WebSocket) en Tidepool op 18790 (A2UI). Als een andere applicatie deze poorten bezet, zal de daemon niet starten.

Zoek wat de poort gebruikt:

bash
# Linux
ss -tlnp | grep 18789

# macOS
lsof -i :18789

# Windows
netstat -ano | findstr 18789

Geen LLM-provider geconfigureerd

Als triggerfish.yaml de sectie models mist of de primaire provider geen API-sleutel heeft, logt de gateway:

No LLM provider configured. Check triggerfish.yaml.

Oplossing: Voer de installatiewizard uit of configureer handmatig:

bash
triggerfish dive                    # Interactieve installatie
# of
triggerfish config set models.primary.provider anthropic
triggerfish config set models.primary.model claude-sonnet-4-20250514
triggerfish config set-secret provider:anthropic:apiKey sk-ant-...

Configuratiebestand niet gevonden

De daemon verlaat als triggerfish.yaml niet bestaat op het verwachte pad. De foutmelding verschilt per omgeving:

  • Native installatie: Suggereert triggerfish dive uit te voeren
  • Docker: Suggereert het configuratiebestand te koppelen met -v ./triggerfish.yaml:/data/triggerfish.yaml

Controleer het pad:

bash
ls ~/.triggerfish/triggerfish.yaml      # Native
docker exec triggerfish ls /data/       # Docker

Geheimoplossing mislukt

Als uw configuratie verwijst naar een geheim (secret:provider:anthropic:apiKey) dat niet bestaat in de sleutelhanger, verlaat de daemon met een fout die het ontbrekende geheim noemt.

Oplossing:

bash
triggerfish config set-secret provider:anthropic:apiKey <uw-sleutel>

Servicebeheer

systemd: daemon stopt na uitloggen

Standaard stoppen systemd-gebruikersservices wanneer de gebruiker uitlogt. Triggerfish schakelt loginctl enable-linger in tijdens de installatie om dit te voorkomen. Als linger niet kon worden ingeschakeld:

bash
# Linger-status controleren
loginctl show-user $USER | grep Linger

# Inschakelen (kan sudo vereisen)
sudo loginctl enable-linger $USER

Zonder linger draait de daemon alleen terwijl u bent aangemeld.

systemd: service start niet

Controleer de servicestatus en het journaal:

bash
systemctl --user status triggerfish.service
journalctl --user -u triggerfish.service --no-pager -n 50

Veelvoorkomende oorzaken:

  • Binair bestand verplaatst of verwijderd. Het unitbestand heeft een hardgecodeerd pad naar het binaire bestand. Installeer de daemon opnieuw: triggerfish dive --install-daemon
  • PATH-problemen. De systemd-unit legt uw PATH vast op het moment van installatie. Als u na de daemoninstallatie nieuwe tools (zoals MCP-servers) hebt geïnstalleerd, installeer de daemon opnieuw om het PATH bij te werken.
  • DENO_DIR niet ingesteld. De systemd-unit stelt DENO_DIR=~/.cache/deno in. Als deze directory niet beschrijfbaar is, kunnen SQLite FFI-plugins niet worden geladen.

launchd: daemon start niet bij aanmelding

Controleer de plist-status:

bash
launchctl list | grep triggerfish
launchctl print gui/$(id -u)/dev.triggerfish.agent

Als de plist niet is geladen:

bash
launchctl load ~/Library/LaunchAgents/dev.triggerfish.agent.plist

Veelvoorkomende oorzaken:

  • Plist verwijderd of beschadigd. Installeer opnieuw: triggerfish dive --install-daemon
  • Binair bestand verplaatst. De plist heeft een hardgecodeerd pad. Installeer opnieuw na het verplaatsen van het binaire bestand.
  • PATH op installatietijdstip. Net als systemd legt launchd PATH vast bij het aanmaken van de plist. Installeer opnieuw als u nieuwe tools aan PATH hebt toegevoegd.

Windows: service start niet

Controleer de servicestatus:

powershell
sc query Triggerfish
Get-Service Triggerfish

Veelvoorkomende oorzaken:

  • Service niet geïnstalleerd. Installeer opnieuw: voer het installatieprogramma uit als Beheerder.
  • Binair bestandspad gewijzigd. De servicewrapper heeft een hardgecodeerd pad. Installeer opnieuw.
  • .NET-compilatie mislukt tijdens installatie. De C#-servicewrapper vereist .NET Framework 4.x csc.exe.

Upgraden verbreekt de daemon

Na het uitvoeren van triggerfish update herstart de daemon automatisch. Als dat niet gebeurt:

  1. Het oude binaire bestand kan nog actief zijn. Stop het handmatig: triggerfish stop
  2. Op Windows wordt het oude binaire bestand hernoemd naar .old. Als de hernoeming mislukt, zal de update een fout geven. Stop de service eerst, dan bijwerken.

Logboekbestandsproblemen

Logboekbestand is leeg

De daemon schrijft naar ~/.triggerfish/logs/triggerfish.log. Als het bestand bestaat maar leeg is:

  • De daemon is mogelijk net gestart. Wacht even.
  • Het logniveau is ingesteld op quiet, wat alleen ERROR-niveau berichten logt. Stel het in op normal of verbose:
bash
triggerfish config set logging.level normal

Logboeken zijn te uitgebreid

Stel het logniveau in op quiet om alleen fouten te zien:

bash
triggerfish config set logging.level quiet

Niveauoverzicht:

ConfiguratiewaardeMinimaal gelogd niveau
quietAlleen ERROR
normalINFO en hoger
verboseDEBUG en hoger
debugTRACE en hoger (alles)

Logboekrotatie

Logboeken roteren automatisch wanneer het huidige bestand 1 MB overschrijdt. Tot 10 geroteerde bestanden worden bewaard:

triggerfish.log        # Huidig
triggerfish.1.log      # Meest recente back-up
triggerfish.2.log      # Op één na meest recente
...
triggerfish.10.log     # Oudste (verwijderd wanneer een nieuwe rotatie plaatsvindt)

Er is geen tijdgebaseerde rotatie, alleen groottegebaseerde rotatie.