架构概述
Triggerfish 是一个安全的多渠道 AI 智能体平台,具有一个核心不变量:
安全 安全是确定性的,位于 LLM 之下。 每个安全决策都由 LLM 无法绕过、覆盖或影响的纯代码做出。LLM 没有任何权限——它请求操作;策略层做出决策。 :::
本页提供 Triggerfish 工作原理的全局视图。每个主要组件都链接到专门的深入介绍页面。
系统架构
数据流
每条消息都按以下路径流经系统:
在每个执行点,决策都是确定性的——相同的输入始终产生相同的结果。hook 内部没有 LLM 调用、没有随机性,LLM 也无法影响结果。
主要组件
分类系统
数据流经四个有序级别: RESTRICTED > CONFIDENTIAL > INTERNAL > PUBLIC。核心规则是禁止降级写入(no write-down):数据只能流向相同或更高分类级别。CONFIDENTIAL 会话不能向 PUBLIC 渠道发送数据。没有例外。没有 LLM 覆盖。
策略引擎和 Hook
八个确定性执行 hook 在数据流的关键点拦截每个操作。Hook 是纯函数:同步、有日志记录且不可伪造。策略引擎支持固定规则(永不可配置)、管理员可调规则和企业版声明式 YAML 例外规则。
会话和 Taint
每个对话都是一个具有独立 taint 跟踪的会话。当会话访问分类数据时,其 taint 升级到该级别,并且在会话内永远不会降低。完全重置会清除 taint 和对话历史。每个数据元素通过溯源跟踪系统携带出处元数据。
Gateway
Gateway 是中央控制平面——一个长期运行的本地服务,通过 WebSocket JSON-RPC 端点管理会话、渠道、工具、事件和智能体进程。它协调通知服务、定时任务调度器、webhook 接收和渠道路由。
存储
所有有状态数据都通过统一的 StorageProvider 抽象流转。命名空间键(sessions:、taint:、lineage:、audit:)将关注点分离,同时允许在不修改业务逻辑的情况下更换后端。默认使用 ~/.triggerfish/data/triggerfish.db 的 SQLite WAL。
纵深防御
安全性分布在 13 个独立机制上,从渠道认证和权限感知数据访问到会话 taint、策略 hook、plugin 沙箱、文件系统工具沙箱和审计日志。没有单一层是充分的;它们共同形成一道即使其中一层被攻破也能优雅降级的防御。
设计原则
| 原则 | 含义 |
|---|---|
| 确定性执行 | 策略 hook 使用纯函数。没有 LLM 调用,没有随机性。相同输入始终产生相同决策。 |
| Taint 传播 | 所有数据携带分类元数据。会话 taint 只能升级,永不降低。 |
| 禁止降级写入 | 数据不能流向更低的分类级别。永远不能。 |
| 全面审计 | 所有策略决策都记录完整上下文:时间戳、hook 类型、会话 ID、输入、结果、评估的规则。 |
| Hook 不可伪造 | LLM 不能绕过、修改或影响策略 hook 决策。Hook 运行在 LLM 层之下的代码中。 |
| 会话隔离 | 每个会话独立跟踪 taint。后台会话以全新的 PUBLIC taint 启动。智能体工作区完全隔离。 |
| 存储抽象 | 没有模块自行创建存储。所有持久化都通过 StorageProvider 进行。 |
技术栈
| 组件 | 技术 |
|---|---|
| 运行时 | Deno 2.x(TypeScript 严格模式) |
| Python 插件 | Pyodide(WASM) |
| 测试 | Deno 内置测试运行器 |
| 渠道 | Baileys(WhatsApp)、grammY(Telegram)、Bolt(Slack)、discord.js(Discord) |
| 浏览器自动化 | puppeteer-core(CDP) |
| 语音 | Whisper(本地 STT)、ElevenLabs/OpenAI(TTS) |
| 存储 | SQLite WAL(默认)、企业后端(Postgres、S3) |
| 密钥 | 操作系统钥匙串(个人版)、保管库集成(企业版) |
Triggerfish 不需要外部构建工具、不需要 Docker、不需要云依赖。它在本地运行,在本地处理数据,让用户对自己的数据拥有完全主权。 :::
