Flyflor 是一个 Bun + TypeScript 智能体运行时,目标是单文件二进制交付。
核心设计:LLM 负责流体智力,反思沉淀晶体智力(Gem),海马体负责工作记忆与长期记忆图,黑板协作处理复杂任务。
curl -fsSL https://flyflor.dev/install.sh | sh
# 固定版本:
curl -fsSL https://flyflor.dev/install.sh | sh -s -- --version v0.4.0
# 自定义前缀:
curl -fsSL https://flyflor.dev/install.sh | sh -s -- --prefix /usr/local/flyflor
# 更新 / 卸载:
flyflor update -y
curl -fsSL https://flyflor.dev/install.sh | sh -s -- --uninstall脚本从 GitHub Releases 下载匹配平台的 flyflor-{os}-{arch} 二进制与 flyflor-templates.tar.gz,默认安装到 ~/.flyflor。--uninstall 保留配置和数据。
bun install
bun run install:templates
bun run chat常用命令:
bun run setup # 初始化向导
bun run status # 运行状态
bun run doctor # 诊断配置与依赖
bun run doctor --fix # 自动创建缺失目录
bun run tui # 仪表板 TUI
bun run app.ts gateway质量验证:
bun run check # TypeScript 类型检查
bun test # 运行所有测试
bun run build:binary # 编译本机二进制Docker dev 运行已编译的 Linux 二进制,Compose 内不安装依赖也不构建。
bun run docker:dev # 重编 Linux binary + 启动 compose + 跟日志
bun run docker:chat # 直接进入 chat TUI
curl http://127.0.0.1:18790/health # 健康检查
docker exec -it flyflor-dev flyflor # 进入容器交互挂载路径:
| 宿主路径 | 容器路径 | 用途 |
|---|---|---|
./docker/config |
/root/.flyflor |
dev 配置 + 提示词模板 |
./docker/workspace |
/root/.flyflor/workspace |
工作区数据 |
./dist/flyflor-linux |
复制至 /usr/local/bin/flyflor |
编译好的二进制 |
Redis 和 SurrealDB 为内部 compose 服务,不向宿主机暴露端口。架构变更后重新编译 + 重启:
bun run docker:up # = 重编 binary + force-recreate compose| 路径 | 职责 |
|---|---|
app.ts |
薄入口,启动 FlyFlor 主类 |
src/app.ts |
FlyFlor composition root,显式 DI 容器 |
src/command |
CLI、TUI、命令注册、终端渲染 |
src/agent |
runtime、gateway、blackboard、sandbox、worker、MCP、project、plugin |
src/agent/di |
@Module、@Provide、@Inject 元数据 + 显式 provider 容器 |
src/llm |
模型 provider(OpenAI/Anthropic 兼容协议层) |
src/crystal |
晶体智力:episode、memory_node、Gem、consolidation、dream |
src/neural |
海马体工作记忆:Redis episodes、召回、最近交流 ring |
src/protocol |
公共协议、枚举、事件、进程 envelope |
templates |
提示词和记忆 Markdown 模板 |
- LLM = 流体智力:当前任务的理解、推理、生成、工具编排、黑板讨论和即时决策。
- Crystal = 晶体智力:把验证过的经验压缩成可复用 Gem(晶粒),由证据门和质量门控制升格。
- Neural = 海马体:工作记忆(Redis)+ 长期记忆图(SurrealDB),支持 TTL 遗忘曲线、概念激活、记忆重建。
核心原则:不在堆叠记忆上发力,而在思考能力的自我迭代上发力。
- 渠道、消息、用户身份归一为
GatewayMessage - 路由判断:fastRoute 启发式(~70% 命中)或 LLM route,决定
direct/direct-with-watch/blackboard - 上下文装配(热路径):宪法层 Markdown + brain prompt atoms + Redis 海马体激活 + project/codename 局部记忆 + SurrealDB Gem 召回
- LLM 主循环:流式生成,解析结构化 memory action / Ask / Ghost decision / identity append;TTFB 目标 < 350ms
- 同步收尾:写 episode、brain 双写、Ask/Ghost/Codename/EQ 状态、skill usage 和 fastRoute snapshot
- 后台 worker:consolidation、summary、decay、dormant、dream、feedback classify、reflection
| 层 | 后端 | 职责 |
|---|---|---|
| 宪法层 | Markdown | 身份、用户偏好、项目事实(手编辑 + 结构化 append,慢变) |
| 生命事件层 | SQLite brain.db |
memory_events append-only + memory_state 当前可见性;prompt recall/write authority 已切到 brain events |
| 工作记忆 | Redis | episode buffer + TTL 遗忘曲线 + 最近交流 ring buffer |
| 长期记忆图 | SurrealDB | episode → memory_node → Gem,summary_embedding,RELATE 边 + MTREE ANN |
| 索引 / 审计 | SQLite | blackboard、candidate、offer、skill/plugin/mcp 辅助状态 |
SurrealDB 主表: episode、memory_node、gem(晶粒,crystallized intelligence)、gem_snapshot(防漂移版本快照)、summary_embedding
图边: next_context、similar_ep、consolidated_into、similar_concept、proven_as、proven_by
候选来源:runtime LLM 反思(整合 worker 异步触发)、用户显式提升、黑板收敛 / MCP 增强证据、skill promotion 与 brain 事件状态。
双质量门:
- 门 1:episode cluster sourceKind weight gate
- 门 2:memory_node confidence > 0.5 AND evidenceCount ≥ 3 → 升格 Gem
Evidence Weight 裁判表:
| sourceKind | weight |
|---|---|
| direct / unverified | 0.0 |
| blackboard-needs-user | 0.65 |
| blackboard-converged | 0.8 |
| explicit | 0.9 |
- 双轨衰减:episode 5%/天、memory_node 2%/天、Gem 0.5%/天;lastVerifiedAt 超 30 天额外打折。
- 矛盾检测:
contradictionCount ≥ 2→ drift-repair;confidence < 0.1 → deprecated 归档。 - 容量阀门:Redis
maxEpisodesPerUser=200;SurrealDB episode 500 / memory_node 100 / Gem 50。 - Gem 去重:symbols IoU ≥ 0.7 且 cosine ≥ 0.85 → merge(
dedupeGems,纯函数,无字符匹配)。
Dream 是长期晶体层的主动维护 worker,仅读写 SurrealDB(gem / memory_node / episode / gem_snapshot),不触碰 Redis 工作记忆。
| Worker | 作用层 | 唯一职责 |
|---|---|---|
| Consolidation | Redis → SurrealDB | 升格通道:到期 episode → reinforce / consolidate / discard |
| Decay | SurrealDB(纯函数) | 被动衰减:importance × 时间 / verification age |
| Anti-bloat | Redis & SurrealDB | 容量阀门:超额强制遗忘 / 归档 |
| Dream | SurrealDB only | 晶体维护:drift-repair / recall-reinforce / contradiction-audit |
三类动作:
drift-repair:先写gem_snapshot存档,再收窄 scope/precondition 或转 deprecatedrecall-reinforce:importance × 1.1,追加proven_by边contradiction-audit:弱侧contradictionCount += 1,confidence × 0.7;< 0.1 → deprecated 归档
触发:定时 30 min 节拍 + 用户 10 min 静默自动触发(类海马 SWR 回放)。
单 pass:≤ 1 次 LLM 调用、≤ 8K token;候选选择仅用资源指标(counter / age / cosine),不用关键词。
Runtime 通过 blackboard.route.md 获取结构化路由:
direct:单智能体直接回答direct-with-watch:直接回答同时监听升级信号blackboard:动态 worker 多轮讨论
黑板特性:
- 同 project constraint 同时只能一个 turn(lease 机制)
- 目标 3 轮收敛,5 轮硬上限
- livelock 检测(两轮无新事实、重复争议、重复失败工具)
- 流式输出 worker 讨论步骤
- 无法收敛时由 runtime 合成 Ask(
reason=blackboard-stalemate),交还用户选择;旧flyflor-decision-form已退役
flyflor # 启动 chat TUI(TTY 环境)
flyflor chat # 对话模式
flyflor tui # 仪表板 TUI
flyflor setup # 初始化向导
flyflor status # 运行状态
flyflor doctor [--fix] # 诊断(--fix 自动创建缺失目录)
flyflor update [--check] [-y]# 检查 / 应用更新
flyflor version # 版本信息
flyflor config show # 查看配置
flyflor config path # 配置文件路径
flyflor memory status # 记忆状态
flyflor blackboard list # 黑板 turn 列表
flyflor codename list # 代号锚点列表
flyflor inbox list # inbox/codename 桶中的 atom
flyflor ghost list --user me # 未完事项 / 可恢复上下文
flyflor identity list --user me # identity 自写条目
flyflor gem list # 晶体列表(`skills` 子命令已更名为 `gem`)
flyflor mcp list # MCP 服务列表
flyflor plugins list # 插件列表
flyflor plugins run <name> # 沙箱审批后运行插件
flyflor dream status # Dream 队列状态
flyflor dream run # 手动触发 dream pass
flyflor model # 模型配置向导
flyflor gateway status # 网关状态- 只保留必要 decorator:
@Module、@Provide、@Inject、@Service、@Component、@Worker、@Channel、@Plugin - 边界模块用继承表达:
class RuntimeModule extends Runtime,不新增专用 decorator - 实现文件使用点分后缀:
*.module.ts、*.service.ts、*.worker.ts、*.manager.ts、*.adapter.ts、*.store.ts - 目录入口统一为
index.ts,不新增连字符或下划线命名的仓库文件
业务语义判断(意图、路由、记忆动作、反馈分类、矛盾检测、复杂度评估等)只能由模型同轮返回的结构化字段或专用提示词模板的 JSON 输出驱动。
禁止:text.includes()、正则识别意图、关键词列表、句式启发式、情感词典、句末标点判断。
性能优化只能用资源指标(token 数、向量相似度、TTL、cluster size)短路。
- 只使用 Bun 命令管理依赖,不要求安装 Node.js
- 配置走
~/.flyflor/config.jsonc(Docker dev:./docker/config/config.jsonc),兼容 JSONC - 业务配置不走环境变量;凭据、沙箱策略走 config/secrets provider
- 新增运行时依赖前确认兼容
bun build --compile(无 native addon、无 postinstall、无动态 require) - 不把密钥、日志、会话数据库、用户数据编译进二进制
- 跨模块通信使用显式类型;公共事件和协议必须可 JSON 序列化
- 修改边界、高风险工具或依赖策略时同步更新
docs/boundaries.md
完整文档索引见 docs/README.md。核心文档:
| 文档 | 用途 |
|---|---|
| docs/architecture.md | 分层架构 / composition root / 进程模型 |
| docs/boundaries.md | 工程边界与红线 |
| docs/runtime.turn.md | 单轮请求完整流程 |
| docs/memory.system.md | 四层记忆 / 升格 / 衰减 / Dream |
| docs/blackboard.md | 黑板路由 / 收敛 / Worker 协议 |
| docs/gateway.channels.md | Gateway 与渠道矩阵 |
| docs/sandbox.capabilities.md | Sandbox 决策与审计 |
| docs/mcp.tools.md | MCP 工具循环 |
| docs/crystal.reflection.md | Reflection → Gem |
| docs/skill.system.md | Skill 加载与升格 |
| docs/proposals/life.form.md | 无 session / brain.db / Codename / Ask / Ghost / Dream 主线 |
| docs/prompt.templates.md | 提示词模板 |
| docs/cli.commands.md | CLI 命令现状 |
| TODO.md | 风险点 / 后续计划 |
