Notas de plataforma
Comportamiento, requisitos y peculiaridades específicos de cada plataforma.
macOS
Gestor de servicios: launchd
Triggerfish se registra como agente de launchd en:
~/Library/LaunchAgents/dev.triggerfish.agent.plistEl plist está configurado con RunAtLoad: true y KeepAlive: true, por lo que el daemon se inicia al iniciar sesión y se reinicia si se bloquea.
Captura de PATH
El plist de launchd captura el PATH de su shell en el momento de la instalación. Esto es crítico porque launchd no carga su perfil de shell. Si instala 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: Reinstale el daemon para actualizar el PATH capturado:
bash
triggerfish stop
triggerfish dive --install-daemonCuarentena
macOS aplica una marca de cuarentena a los binarios descargados. El instalador la elimina con xattr -cr, pero si descargó el binario manualmente:
bash
xattr -cr /usr/local/bin/triggerfishLlavero
Los secretos se almacenan en el llavero de inicio de sesión de macOS a través del CLI security. Si el Acceso a Llaveros está bloqueado, las operaciones de secretos fallarán hasta que lo desbloquee (normalmente al iniciar sesión).
Deno vía Homebrew
Si compila desde el código fuente y Deno se instaló vía Homebrew, asegúrese de que el directorio bin de Homebrew esté en su 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 de systemd:
~/.config/systemd/user/triggerfish.serviceLinger
Por defecto, los servicios de usuario de 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 (por ejemplo, su administrador de sistemas lo deshabilitó), el daemon solo se ejecuta mientras usted tiene la sesión iniciada. En servidores donde desee que el daemon persista, pida a su administrador que habilite linger para su cuenta.
PATH y entorno
La unidad systemd captura su PATH y establece DENO_DIR=~/.cache/deno. Al igual que en macOS, los cambios en el 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 los 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 gestiona esto automáticamente al resolver el directorio home, siguiendo los enlaces simbólicos para encontrar la ruta real.
Los navegadores instalados mediante Flatpak se detectan y lanzan a través de un script envolvente que llama a flatpak run.
Servidores sin escritorio
En servidores sin entorno de escritorio, el daemon de GNOME Keyring / Secret Service puede no estar en ejecución. Consulte Solución de problemas de secretos para instrucciones de configuración.
SQLite FFI
El backend de almacenamiento SQLite utiliza @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 mínimas de Linux, la biblioteca C compartida o las dependencias relacionadas pueden faltar. Instale las bibliotecas base de desarrollo si ve errores relacionados con FFI.
Windows
Gestor de servicios: Servicio de Windows
Triggerfish se instala como un servicio de Windows llamado "Triggerfish". El servicio está implementado por un envolvente en 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 del binario durante actualizaciones
Windows no permite sobreescribir 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 fichero
.olden el siguiente inicio
Si el renombrado o la copia falla, detenga el servicio manualmente antes de actualizar.
Soporte de color ANSI
Triggerfish habilita el procesamiento de terminal virtual para la salida de consola con colores. Esto funciona en PowerShell moderno y Windows Terminal. Las ventanas cmd.exe antiguas pueden no renderizar los colores correctamente.
Bloqueo exclusivo de ficheros
Windows utiliza bloqueos de ficheros exclusivos. Si el daemon está en ejecución y usted intenta iniciar otra instancia, el bloqueo del fichero de registro 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 fichero de registro.
Almacenamiento de secretos
Windows utiliza el almacén de ficheros cifrados (AES-256-GCM) en ~/.triggerfish/secrets.json. No hay integración con el Administrador de Credenciales de Windows. Trate el fichero secrets.key como sensible.
Notas del instalador PowerShell
El instalador PowerShell (install.ps1):
- Detecta la arquitectura del procesador (x64/arm64)
- Instala en
%LOCALAPPDATA%\Triggerfish - Añade el directorio de instalación al PATH del usuario a través del registro
- Compila el envolvente de servicio en C#
- Registra e inicia el servicio de Windows
Si el instalador falla en el paso de compilación del servicio, puede seguir ejecutando 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 puede establecerlo explícitamente:
bash
TRIGGERFISH_CONTAINER_RUNTIME=podmanDetalles de la imagen
- Base:
gcr.io/distroless/cc-debian12(mínima, sin shell) - Variante de depuración:
distroless:debug(incluye shell para solución de problemas) - Se ejecuta como UID 65534 (nonroot)
- Init:
true(reenvío de señales PID 1 mediantetini) - Política de reinicio:
unless-stopped
Persistencia de datos
Todos los datos persistentes están en el directorio /data dentro del contenedor, respaldado por un volumen con nombre de Docker:
/data/
triggerfish.yaml # Configuración
secrets.json # Secretos cifrados
secrets.key # Clave de cifrado
SPINE.md # Identidad del agente
TRIGGER.md # Comportamiento de triggers
data/triggerfish.db # Base de datos SQLite
logs/ # Ficheros de registro
skills/ # Skills instaladas
workspace/ # Espacios de trabajo del agente
.deno/ # Caché de plugins FFI de DenoVariables de entorno
| Variable | Valor por defecto | Finalidad |
|---|---|---|
TRIGGERFISH_DATA_DIR | /data | Directorio base de datos |
TRIGGERFISH_CONFIG | /data/triggerfish.yaml | Ruta del fichero de configuración |
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 |
Secretos en Docker
Los contenedores Docker no pueden acceder al llavero del sistema operativo anfitrión. El almacén de ficheros cifrados se utiliza automáticamente. La clave de cifrado (secrets.key) y los datos cifrados (secrets.json) se almacenan en el volumen /data.
Nota de seguridad: Cualquier persona con acceso al volumen Docker puede leer la clave de cifrado. Asegure el volumen adecuadamente. En producción, considere utilizar Docker secrets o un gestor de secretos para inyectar la clave en tiempo de ejecución.
Puertos
El fichero compose mapea:
18789- Gateway WebSocket18790- Tidepool A2UI
Los puertos adicionales (WebChat en 8765, webhook de WhatsApp en 8443) deben añadirse al fichero compose si habilita esos canales.
Ejecución del asistente de configuración en Docker
bash
# Si el contenedor está en ejecución
docker exec -it triggerfish triggerfish dive
# Si el contenedor no está en ejecución (ejecución única)
docker run -it -v triggerfish-data:/data ghcr.io/greghavens/triggerfish:latest diveActualización
bash
# Usando el script envolvente
triggerfish update
# Manualmente
docker compose pull
docker compose up -dDepuración
Utilice la variante de depuración de la imagen para la solución de problemas:
yaml
# En docker-compose.yml
image: ghcr.io/greghavens/triggerfish:debugEsto incluye un shell para que pueda acceder al contenedor:
bash
docker exec -it triggerfish /busybox/shFlatpak (solo navegador)
Triggerfish en sí no se ejecuta como Flatpak, pero puede utilizar navegadores instalados mediante Flatpak para la automatización del navegador.
Navegadores Flatpak detectados
com.google.Chromeorg.chromium.Chromiumcom.brave.Browser
Cómo funciona
Triggerfish crea un script envolvente temporal que llama a flatpak run con las opciones de modo headless, luego lanza Chrome a través de ese script. El envolvente 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 envolvente necesita escribirse en disco antes de la ejecución.
- Conflictos con el sandbox de Flatpak. Algunas compilaciones de Chrome en Flatpak restringen
--remote-debugging-port. Si la conexión CDP falla, pruebe una instalación de Chrome no Flatpak.
