Skip to content

플랫폼 참고 사항 ​

플랫폼별 동작, 요구 사항 및 특이 사항입니다.

macOS ​

서비스 관리자: launchd ​

Triggerfish는 다음 위치에 launchd 에이전트로 등록됩니다:

~/Library/LaunchAgents/dev.triggerfish.agent.plist

Plist는 RunAtLoad: true 및 KeepAlive: true로 설정되어 있어, 로그인 시 daemon이 시작되고 충돌 시 재시작됩니다.

PATH 캡처 ​

launchd plist는 설치 시 셸 PATH를 캡처합니다. launchd는 셸 프로필을 소싱하지 않으므로 이것이 중요합니다. daemon 설치 후 MCP 서버 종속성(npx, python 등)을 설치하면 해당 바이너리가 daemon의 PATH에 포함되지 않습니다.

해결 방법: 캡처된 PATH를 업데이트하려면 daemon을 다시 설치하십시오:

bash
triggerfish stop
triggerfish dive --install-daemon

격리 ​

macOS는 다운로드된 바이너리에 격리 플래그를 적용합니다. 설치 프로그램은 xattr -cr로 이를 제거하지만, 바이너리를 수동으로 다운로드한 경우:

bash
xattr -cr /usr/local/bin/triggerfish

Keychain ​

Secret은 security CLI를 통해 macOS 로그인 keychain에 저장됩니다. Keychain Access가 잠겨 있으면 잠금을 해제할 때까지(보통 로그인으로) secret 작업이 실패합니다.

Homebrew Deno ​

소스에서 빌드하고 Deno가 Homebrew를 통해 설치된 경우, 설치 스크립트를 실행하기 전에 Homebrew bin 디렉토리가 PATH에 있는지 확인하십시오.


Linux ​

서비스 관리자: systemd (사용자 모드) ​

Daemon은 systemd 사용자 서비스로 실행됩니다:

~/.config/systemd/user/triggerfish.service

Linger ​

기본적으로 systemd 사용자 서비스는 사용자가 로그아웃하면 중지됩니다. Triggerfish는 설치 시 linger를 활성화합니다:

bash
loginctl enable-linger $USER

이것이 실패하면(예: 시스템 관리자가 비활성화한 경우) daemon은 로그인한 동안에만 실행됩니다. daemon이 지속되어야 하는 서버에서는 관리자에게 계정에 대한 linger 활성화를 요청하십시오.

PATH 및 환경 ​

systemd unit은 PATH를 캡처하고 DENO_DIR=~/.cache/deno를 설정합니다. macOS와 마찬가지로 설치 후 PATH 변경은 daemon을 다시 설치해야 합니다.

Unit은 또한 Environment=PATH=...를 명시적으로 설정합니다. daemon이 MCP 서버 바이너리를 찾을 수 없으면 이것이 가장 유력한 원인입니다.

Fedora Atomic / Silverblue / Bazzite ​

Fedora Atomic 데스크톱에서는 /home이 /var/home으로 심볼릭 링크되어 있습니다. Triggerfish는 홈 디렉토리를 해석할 때 심볼릭 링크를 따라 실제 경로를 찾아 자동으로 처리합니다.

Flatpak으로 설치된 브라우저는 flatpak run을 호출하는 래퍼 스크립트를 통해 감지되고 실행됩니다.

Headless 서버 ​

데스크톱 환경이 없는 서버에서는 GNOME Keyring / Secret Service daemon이 실행되지 않을 수 있습니다. 설정 지침은 Secrets 문제 해결을 참조하십시오.

SQLite FFI ​

SQLite 스토리지 백엔드는 FFI를 통해 네이티브 라이브러리를 로드하는 @db/sqlite를 사용합니다. 이것은 --allow-ffi Deno 권한이 필요합니다(컴파일된 바이너리에 포함). 일부 최소 Linux 배포판에서는 공유 C 라이브러리 또는 관련 종속성이 누락될 수 있습니다. FFI 관련 오류가 발생하면 기본 개발 라이브러리를 설치하십시오.


Windows ​

서비스 관리자: Windows 서비스 ​

Triggerfish는 "Triggerfish"라는 이름의 Windows 서비스로 설치됩니다. 서비스는 설치 중 .NET Framework 4.x의 csc.exe를 사용하여 컴파일된 C# 래퍼로 구현됩니다.

요구 사항:

  • .NET Framework 4.x (대부분의 Windows 10/11 시스템에 설치됨)
  • 서비스 설치를 위한 관리자 권한
  • .NET Framework 디렉토리에서 csc.exe 접근 가능

업데이트 시 바이너리 교체 ​

Windows는 현재 실행 중인 실행 파일을 덮어쓸 수 없습니다. 업데이터는:

  1. 실행 중인 바이너리의 이름을 triggerfish.exe.old로 변경
  2. 새 바이너리를 원래 경로에 복사
  3. 서비스 재시작
  4. 다음 시작 시 .old 파일 정리

이름 변경 또는 복사가 실패하면 업데이트 전에 수동으로 서비스를 중지하십시오.

ANSI 색상 지원 ​

Triggerfish는 색상 콘솔 출력을 위해 Virtual Terminal Processing을 활성화합니다. 최신 PowerShell과 Windows Terminal에서 작동합니다. 이전 cmd.exe 창에서는 색상이 올바르게 렌더링되지 않을 수 있습니다.

배타적 파일 잠금 ​

Windows는 배타적 파일 잠금을 사용합니다. Daemon이 실행 중이고 다른 인스턴스를 시작하려고 하면 로그 파일 잠금이 이를 방지합니다:

Triggerfish is already running. Stop the existing instance first, or use 'triggerfish status' to check.

이 감지는 Windows에 특화되어 있으며 로그 파일을 열 때 EBUSY / "os error 32"를 기반으로 합니다.

Secret 저장소 ​

Windows는 ~/.triggerfish/secrets.json에 암호화된 파일 저장소(AES-256-GCM)를 사용합니다. Windows 자격 증명 관리자 통합은 없습니다. secrets.key 파일을 민감한 것으로 취급하십시오.

PowerShell 설치 프로그램 참고 사항 ​

PowerShell 설치 프로그램(install.ps1):

  • 프로세서 아키텍처 감지 (x64/arm64)
  • %LOCALAPPDATA%\Triggerfish에 설치
  • 레지스트리를 통해 사용자 PATH에 설치 디렉토리 추가
  • C# 서비스 래퍼 컴파일
  • Windows 서비스 등록 및 시작

서비스 컴파일 단계에서 설치 프로그램이 실패하면 Triggerfish를 수동으로 실행할 수 있습니다:

powershell
triggerfish run    # 포그라운드 모드

Docker ​

컨테이너 런타임 ​

Docker 배포는 Docker와 Podman을 모두 지원합니다. 감지는 자동이며, 명시적으로 설정할 수도 있습니다:

bash
TRIGGERFISH_CONTAINER_RUNTIME=podman

이미지 세부 사항 ​

  • 베이스: gcr.io/distroless/cc-debian12 (최소, 셸 없음)
  • 디버그 변형: distroless:debug (문제 해결을 위한 셸 포함)
  • UID 65534(nonroot)로 실행
  • Init: true (tini를 통한 PID 1 시그널 전달)
  • 재시작 정책: unless-stopped

데이터 지속성 ​

모든 영구 데이터는 Docker named volume으로 지원되는 컨테이너 내부의 /data 디렉토리에 있습니다:

/data/
  triggerfish.yaml        # 구성
  secrets.json            # 암호화된 secret
  secrets.key             # 암호화 키
  SPINE.md                # 에이전트 아이덴티티
  TRIGGER.md              # Trigger 동작
  data/triggerfish.db     # SQLite 데이터베이스
  logs/                   # 로그 파일
  skills/                 # 설치된 skill
  workspace/              # 에이전트 작업 공간
  .deno/                  # Deno FFI 플러그인 캐시

환경 변수 ​

변수기본값용도
TRIGGERFISH_DATA_DIR/data기본 데이터 디렉토리
TRIGGERFISH_CONFIG/data/triggerfish.yaml구성 파일 경로
TRIGGERFISH_DOCKERtrueDocker 특화 동작 활성화
DENO_DIR/data/.denoDeno 캐시 (FFI 플러그인)
HOME/datanonroot 사용자의 홈 디렉토리

Docker에서의 Secret ​

Docker 컨테이너는 호스트 OS keychain에 액세스할 수 없습니다. 암호화된 파일 저장소가 자동으로 사용됩니다. 암호화 키(secrets.key)와 암호화된 데이터(secrets.json)는 /data 볼륨에 저장됩니다.

보안 참고: Docker 볼륨에 대한 액세스 권한이 있는 사람은 암호화 키를 읽을 수 있습니다. 볼륨을 적절히 보호하십시오. 프로덕션에서는 Docker secrets 또는 secrets 관리자를 사용하여 런타임에 키를 주입하는 것을 고려하십시오.

포트 ​

Compose 파일은 다음을 매핑합니다:

  • 18789 - Gateway WebSocket
  • 18790 - Tidepool A2UI

추가 포트(WebChat의 8765, WhatsApp webhook의 8443)는 해당 채널을 활성화하는 경우 compose 파일에 추가해야 합니다.

Docker에서 설정 마법사 실행 ​

bash
# 컨테이너가 실행 중인 경우
docker exec -it triggerfish triggerfish dive

# 컨테이너가 실행 중이 아닌 경우 (일회성)
docker run -it -v triggerfish-data:/data ghcr.io/greghavens/triggerfish:latest dive

업데이트 ​

bash
# 래퍼 스크립트 사용
triggerfish update

# 수동
docker compose pull
docker compose up -d

디버깅 ​

문제 해결을 위해 이미지의 디버그 변형을 사용하십시오:

yaml
# docker-compose.yml에서
image: ghcr.io/greghavens/triggerfish:debug

여기에는 셸이 포함되어 있어 컨테이너에 exec할 수 있습니다:

bash
docker exec -it triggerfish /busybox/sh

Flatpak (브라우저만) ​

Triggerfish 자체는 Flatpak으로 실행되지 않지만, 브라우저 자동화를 위해 Flatpak으로 설치된 브라우저를 사용할 수 있습니다.

감지되는 Flatpak 브라우저 ​

  • com.google.Chrome
  • org.chromium.Chromium
  • com.brave.Browser

작동 방식 ​

Triggerfish는 headless 모드 플래그와 함께 flatpak run을 호출하는 임시 래퍼 스크립트를 생성한 다음, 해당 스크립트를 통해 Chrome을 실행합니다. 래퍼는 임시 디렉토리에 기록됩니다.

일반적인 문제 ​

  • Flatpak 미설치. 바이너리가 /usr/bin/flatpak 또는 /usr/local/bin/flatpak에 있어야 합니다.
  • 임시 디렉토리에 쓸 수 없음. 래퍼 스크립트는 실행 전에 디스크에 기록해야 합니다.
  • Flatpak 샌드박스 충돌. 일부 Flatpak Chrome 빌드는 --remote-debugging-port를 제한합니다. CDP 연결이 실패하면 Flatpak이 아닌 Chrome 설치를 시도하십시오.