Notas de plataforma
Comportamiento, requisitos y peculiaridades específicos de cada plataforma.
macOS
Gestor de servicios: launchd
Triggerfish se registra como un agente launchd en:
~/Library/LaunchAgents/dev.triggerfish.agent.plistEl plist está configurado con RunAtLoad: true y KeepAlive: true, así que el daemon se inicia al iniciar sesión y se reinicia si falla.
Captura de PATH
El plist de launchd captura el PATH de tu shell en el momento de la instalación. Esto es crítico porque launchd no ejecuta tu perfil de shell. Si instalas dependencias de servidores MCP (como npx, python) después de instalar el daemon, esos binarios no estarán en el PATH del daemon.
Solución: Reinstala el daemon para actualizar el PATH capturado:
bash
triggerfish stop
triggerfish dive --install-daemonCuarentena
macOS aplica una bandera de cuarentena a los binarios descargados. El instalador la limpia con xattr -cr, pero si descargaste el binario manualmente:
bash
xattr -cr /usr/local/bin/triggerfishKeychain
Los secrets se almacenan en el keychain de inicio de sesión de macOS vía el CLI security. Si el Keychain Access está bloqueado, las operaciones de secrets fallarán hasta que lo desbloquees (usualmente al iniciar sesión).
Deno vía Homebrew
Si compilas desde el código fuente y Deno fue instalado vía Homebrew, asegúrate de que el directorio bin de Homebrew esté en tu PATH antes de ejecutar el script de instalación.
Linux
Gestor de servicios: systemd (modo usuario)
El daemon se ejecuta como un servicio de usuario systemd:
~/.config/systemd/user/triggerfish.serviceLinger
Por defecto, los servicios de usuario systemd se detienen cuando el usuario cierra sesión. Triggerfish habilita linger en el momento de la instalación:
bash
loginctl enable-linger $USERSi esto falla (ej., tu administrador del sistema lo deshabilitó), el daemon solo se ejecuta mientras estás conectado. En servidores donde quieres que el daemon persista, pídele a tu administrador que habilite linger para tu cuenta.
PATH y entorno
La unidad systemd captura tu PATH y establece DENO_DIR=~/.cache/deno. Como en macOS, los cambios al PATH después de la instalación requieren reinstalar el daemon.
La unidad también establece Environment=PATH=... explícitamente. Si el daemon no puede encontrar binarios de servidores MCP, esta es la causa más probable.
Fedora Atomic / Silverblue / Bazzite
Los escritorios Fedora Atomic tienen /home enlazado simbólicamente a /var/home. Triggerfish maneja esto automáticamente al resolver el directorio home, siguiendo enlaces simbólicos para encontrar la ruta real.
Los navegadores instalados vía Flatpak se detectan y lanzan a través de un script wrapper que llama a flatpak run.
Servidores headless
En servidores sin entorno de escritorio, el daemon GNOME Keyring / Secret Service puede no estar ejecutándose. Consulta Solución de problemas de secrets para instrucciones de configuración.
SQLite FFI
El backend de almacenamiento SQLite usa @db/sqlite, que carga una biblioteca nativa vía FFI. Esto requiere el permiso --allow-ffi de Deno (incluido en el binario compilado). En algunas distribuciones Linux mínimas, la biblioteca C compartida o dependencias relacionadas pueden faltar. Instala las bibliotecas de desarrollo base si ves errores relacionados con FFI.
Windows
Gestor de servicios: Windows Service
Triggerfish se instala como un Windows Service llamado "Triggerfish". El servicio está implementado por un wrapper C# compilado durante la instalación usando csc.exe de .NET Framework 4.x.
Requisitos:
- .NET Framework 4.x (instalado en la mayoría de los sistemas Windows 10/11)
- Privilegios de administrador para la instalación del servicio
csc.exeaccesible en el directorio de .NET Framework
Reemplazo de binario durante actualizaciones
Windows no permite sobrescribir un ejecutable que está en ejecución. El actualizador:
- Renombra el binario en ejecución a
triggerfish.exe.old - Copia el nuevo binario a la ruta original
- Reinicia el servicio
- Limpia el archivo
.olden el siguiente inicio
Si el renombramiento o la copia falla, detén el servicio manualmente antes de actualizar.
Soporte de colores ANSI
Triggerfish habilita Virtual Terminal Processing para salida con colores en la consola. Esto funciona en PowerShell moderno y Windows Terminal. Las ventanas antiguas de cmd.exe pueden no renderizar los colores correctamente.
Bloqueo exclusivo de archivos
Windows usa bloqueos exclusivos de archivos. Si el daemon está ejecutándose e intentas iniciar otra instancia, el bloqueo del archivo de log lo impide:
Triggerfish is already running. Stop the existing instance first, or use 'triggerfish status' to check.Esta detección es específica de Windows y se basa en el error EBUSY / "os error 32" al abrir el archivo de log.
Almacenamiento de secrets
Windows usa el almacén de archivos cifrados (AES-256-GCM) en ~/.triggerfish/secrets.json. No hay integración con Windows Credential Manager. Trata el archivo secrets.key como sensible.
Notas del instalador PowerShell
El instalador PowerShell (install.ps1):
- Detecta la arquitectura del procesador (x64/arm64)
- Instala en
%LOCALAPPDATA%\Triggerfish - Agrega el directorio de instalación al PATH del usuario vía registro
- Compila el wrapper del servicio C#
- Registra e inicia el Windows Service
Si el instalador falla en el paso de compilación del servicio, aún puedes ejecutar Triggerfish manualmente:
powershell
triggerfish run # Modo en primer planoDocker
Runtime de contenedores
El despliegue Docker soporta tanto Docker como Podman. La detección es automática, o configúralo explícitamente:
bash
TRIGGERFISH_CONTAINER_RUNTIME=podmanDetalles de la imagen
- Base:
gcr.io/distroless/cc-debian12(mínima, sin shell) - Variante debug:
distroless:debug(incluye shell para solución de problemas) - Se ejecuta como UID 65534 (nonroot)
- Init:
true(reenvío de señales PID 1 víatini) - Política de reinicio:
unless-stopped
Persistencia de datos
Todos los datos persistentes están en el directorio /data dentro del contenedor, respaldados por un volumen nombrado de Docker:
/data/
triggerfish.yaml # Configuración
secrets.json # Secrets cifrados
secrets.key # Clave de cifrado
SPINE.md # Identidad del agente
TRIGGER.md # Comportamiento de triggers
data/triggerfish.db # Base de datos SQLite
logs/ # Archivos de log
skills/ # Skills instalados
workspace/ # Workspaces del agente
.deno/ # Caché de plugins FFI de DenoVariables de entorno
| Variable | Por defecto | Propósito |
|---|---|---|
TRIGGERFISH_DATA_DIR | /data | Directorio base de datos |
TRIGGERFISH_CONFIG | /data/triggerfish.yaml | Ruta del archivo de config |
TRIGGERFISH_DOCKER | true | Habilita comportamiento específico de Docker |
DENO_DIR | /data/.deno | Caché de Deno (plugins FFI) |
HOME | /data | Directorio home para usuario nonroot |
Secrets en Docker
Los contenedores Docker no pueden acceder al keychain del SO del host. El almacén de archivos cifrados se usa automáticamente. La clave de cifrado (secrets.key) y los datos cifrados (secrets.json) se almacenan en el volumen /data.
Nota de seguridad: Cualquiera con acceso al volumen de Docker puede leer la clave de cifrado. Asegura el volumen apropiadamente. En producción, considera usar Docker secrets o un gestor de secrets para inyectar la clave en tiempo de ejecución.
Puertos
El archivo compose mapea:
18789- Gateway WebSocket18790- Tidepool A2UI
Puertos adicionales (WebChat en 8765, webhook de WhatsApp en 8443) necesitan ser agregados al archivo compose si habilitas esos canales.
Ejecutar el asistente de configuración en Docker
bash
# Si el contenedor está ejecutándose
docker exec -it triggerfish triggerfish dive
# Si el contenedor no está ejecutándose (efímero)
docker run -it -v triggerfish-data:/data ghcr.io/greghavens/triggerfish:latest diveActualización
bash
# Usando el script wrapper
triggerfish update
# Manualmente
docker compose pull
docker compose up -dDepuración
Usa la variante debug de la imagen para solución de problemas:
yaml
# En docker-compose.yml
image: ghcr.io/greghavens/triggerfish:debugEsto incluye un shell para que puedas hacer exec en el contenedor:
bash
docker exec -it triggerfish /busybox/shFlatpak (solo navegador)
Triggerfish en sí no se ejecuta como Flatpak, pero puede usar navegadores instalados vía Flatpak para automatización del navegador.
Navegadores Flatpak detectados
com.google.Chromeorg.chromium.Chromiumcom.brave.Browser
Cómo funciona
Triggerfish crea un script wrapper temporal que llama a flatpak run con los flags de modo headless, luego lanza Chrome a través de ese script. El wrapper se escribe en un directorio temporal.
Problemas comunes
- Flatpak no instalado. El binario debe estar en
/usr/bin/flatpako/usr/local/bin/flatpak. - Directorio temporal no escribible. El script wrapper necesita ser escrito a disco antes de la ejecución.
- Conflictos del sandbox de Flatpak. Algunas compilaciones de Chrome en Flatpak restringen
--remote-debugging-port. Si la conexión CDP falla, prueba una instalación de Chrome no Flatpak.
