Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

808 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Athena

一个跨平台 AI Agent 应用,使用 Flutter 构建。Athena 具备完整的 Agent 循环(推理 → 工具调用 → 结果 → 再推理)、内置 12 个工具实现类(桌面端运行时 11 个、移动端 3 个)、可自我进化的 Skill 系统、以及严谨的权限与安全模型。

Version Flutter Platform

核心能力

Agent 系统

Athena 内置完整的 AI Agent,可自主调用工具完成复杂任务:

  • 推理-工具循环:Agent 在每轮迭代中进行推理、调用工具、获取结果、再推理,最大 100 轮可配置
  • 并行工具执行:同一轮内可并行的工具调用(只读/已放行)自动分组并发执行,最多 8 个并发,信号量限流,取消优先响应
  • 流式响应:文本和推理过程(reasoning)实时流式呈现,工具调用卡片随流实时产出(参数增量逐片追加)
  • 参数校验:工具调用参数在执行前经过 JSON Schema 校验,非法参数直接拒绝并返回错误信息
  • 截断保护:响应被输出 token 上限切断时拒绝执行工具调用,防止截断参数被误执行
  • 工具输出保护:工具结果超过 12000 字符时自动保留头尾、截断中间,防止过长输出挤占上下文
  • 取消令牌:支持随时中断 Agent 运行,取消时保留已生成内容并标记 [Cancelled]
  • 自动压缩:上下文占用超过窗口 80% 时自动将早期对话压缩为摘要(retention = -1 模式),保持长对话可继续
  • 消息注入:支持运行时注入 steering 消息(当前轮工具执行后、下一轮推理前)与 followUp 消息(Agent 停止后继续运行)

内置工具(桌面端 11 个,移动端 3 个)

工具 说明
bash / powershell 执行终端命令,支持自定义工作目录和超时(最高 600s),超时自动 kill 进程
file_read 读取文件,支持 offset/limit 分段读取和行号输出
file_write 创建或覆写文件,自动递归创建父目录
file_update 精确字符串替换编辑文件,支持 replace_all、自动去除行号前缀、智能引号归一化、外部修改检测
web_fetch HTTP GET/POST 抓取网页(200KB 上限),支持自定义 headers 和 body,自动 HTML→Markdown 转换
web_search Brave Search API 网络搜索,为 Agent 提供实时信息
skill 加载 Skill 的完整 Level 2 指令到当前上下文
skill_evolve Agent 自我进化:创建/更新 Skill(SKILL.md),扩展未来能力
experience_learn 记录经验教训到长期记忆,支持标签和上下文、Sentinel 私有或全局共享
experience_recall 检索过往经验以指导当前任务
sentinel_evolve 改进当前角色(系统提示词),支持重命名、原地更新,内置 Sentinel 不可改名

权限模型

三层决策,自动放行绝大多数调用:

  1. 只读短路:只读工具(file_read、web_fetch、web_search)和只读 shell 命令(ls、git status 等)永不弹窗
  2. 会话级缓存:当前对话中已批准过的调用直接放行,同一轮内不再重复弹窗
  3. 用户持久化规则~/.athena/permissions.json 存储匹配规则,支持 *? 通配符;shell 命令可记忆为动作级规则(如 git push*)。命中则直接放行,不弹窗。

未命中时弹出完整命令预览弹窗(shell 命令全文展示不截断),用户可选 Allow/Deny,并可将本次批准记忆为会话级或持久化规则。弹窗不可被空白点击关闭。

工具自我保护

独立于权限系统,在工具内部执行的安全检查:

  • 递归删除拦截:bash/powershell 检测到 rm -rfdel /s 等模式时拒绝执行
  • Shell 进程管理:超时主动 SIGTERM → SIGKILL 杀死进程,防止孤儿进程泄漏
  • 文件修改检测file_update 在写入前校验 mtime,防止覆盖外部并发修改

Skill 系统

采用 Claude Code 风格的三级渐进式加载:

层级 内容 加载时机 Token 消耗
Level 1 name + description(最近使用 Top 20,按访问时间排序) skill 工具按名加载时提示可用技能清单(当前版本未在会话启动时自动注入) 按需
Level 2 SKILL.md 完整指令 Agent 调用 skill("name") 时按需加载 按需
Level 3 scripts/references 等资源 Level 2 指令引用时加载 按需

最多展示最近使用的 20 个 Skill(按访问时间排序),其余需显式调用。

Skill 文件格式

---
name: my-skill
description: What this skill does and when to use it
allowed-tools: file_read, web_search
---
## Process
1. Step one
2. Step two

放置位置

  • ~/.athena/skills/ — 用户级(始终信任,所有项目可用)
  • .athena/skills/ — 项目级(可随版本控制,首次加载需用户确认信任)

项目级 Skill 在信任后可覆盖同名用户级 Skill。内置 self-evolve Skill 提供完整的自我进化指导。

信任模型

  • 未信任的项目级 Skill 不出现在 Level 1 列表,不可通过 skill 工具加载
  • 信任状态持久化到 ~/.athena/trusted_skill_dirs.json
  • 每次会话仅提示一次信任弹窗
  • 信任后 Skill 指令会注入系统提示词,但工具调用仍需经过权限检查

Agent 自我进化

Agent 可通过三个机制持续改进自身:

  • Skill Evolutionskill_evolve):创建或改进 Skill,扩展未来能力
  • Experience Learningexperience_learn / experience_recall):构建长期经验记忆,存储在 ~/.athena/experiences/
  • Sentinel Optimizationsentinel_evolve):基于使用反馈优化系统提示词

每次对话自动注入极简进化提示(~30 token),完整指南通过内置 self-evolve Skill 按需加载。

核心功能

  • Sentinel 系统:预定义角色和系统提示词,支持 AI 元数据生成(名称、描述、标签、头像 Emoji),内置默认 "Athena" Sentinel
  • 多 AI 提供商管理:支持 OpenAI API 兼容的任何提供商,预设 DeepSeek、OpenRouter、阿里云百炼、硅基流动、火山方舟、智谱、MiniMax;启动时后台自动从 models.dev 同步模型元数据(7 天缓存,失败降级)
  • 重试机制:指数退避 + 随机抖动,可重试网络错误(连接异常、超时、限流、5xx),不重试业务错误(4xx、解析错误)
  • 聊天管理:会话置顶、批量删除、AI 自动命名、上下文管理(零上下文 / 自动压缩 / 全量)、温度参数调整、Token 用量追踪
  • 视觉与推理:支持视觉模型(图片附件)和推理模型(DeepSeek-R1 等 reasoning 展示)
  • 数据导入/导出:JSON 格式完整数据迁移,自动重整悬空引用

快捷入口(Shortcut)

内置 5 个场景化快捷入口(Translation、Summary、Food、Code、TRPG),每个绑定独立的专属 Sentinel(能力配置):

  • 点击后以其绑定 Sentinel 身份发起对话,支持场景级 JSON 输出模式(模型直接产出结构化 JSON)
  • Translation / Summary / TRPG 快捷入口直接打开对应的定制功能页,Food / Code 进入默认聊天页

扩展功能

  • 网页摘要:AI 解析网页内容,生成结构化摘要
  • 文本翻译:AI 多语言翻译
  • 网络搜索:Brave Search 集成
  • TRPG 游戏:AI 驱动的桌面角色扮演游戏,含行动建议和状态面板

平台支持

  • 桌面端:macOS、Windows、Linux。窗口管理、系统托盘、全局快捷键(Meta+W 隐藏)
  • 移动端:iOS、Android。触摸优化界面

快速开始

环境要求

  • Flutter SDK >= 3.8.0
  • Dart SDK >= 3.8.0

安装与运行

项目为 monorepo 多包结构:athena_core(纯 Dart 核心)与 athena_gui(Flutter 应用)。

git clone https://github.com/CalsRanna/athena.git
cd athena/packages/athena_gui
flutter pub get
dart run build_runner build --delete-conflicting-outputs
flutter run -d <device>

开发命令

# GUI(Flutter 应用)
cd packages/athena_gui
flutter analyze       # 静态代码分析
flutter test          # 运行 GUI 测试

# 核心(纯 Dart,无 Flutter 依赖)
cd packages/athena_core
dart analyze
dart test             # 运行核心测试(Agent 引擎、服务、工具等)

架构

项目拆分为两个 package,依赖方向严格单向:athena_gui → athena_core

packages/
├── athena_core/         # ★ 纯 Dart 核心,零 Flutter / 零 SQL 依赖
│   ├── agent/           #   Agent 引擎:工具、权限、Skill、进化、取消令牌
│   ├── coordinator/     #   AgentRunCoordinator:UI 无关的 run 编排层(RunEvent 流)
│   ├── service/         #   LlmClient、Chat、Summary、Translation、TRPG 等
│   ├── repository/      #   存储接口(Chat/Message/Model/Provider/...)
│   ├── entity/ model/ preset/ extension/ util/
│   └── storage/         #   KeyValueStore 接口 + AgentSettings
└── athena_gui/          # ★ Flutter 应用
    ├── page/            #   UI 层(desktop 多区工作台 / mobile 分段浏览)
    ├── view_model/      #   Signals 状态管理
    │   └── delegate/    #   AgentStreamDelegate:包装核心协调层 + 对话框注入
    ├── repository/      #   SQLite 实现(SqliteChatRepository 等)
    ├── database/        #   SQLite + Laconic ORM + 迁移
    ├── router/ widget/ component/ util/
    └── storage/         #   KeyValueStore 的 SharedPreferences 实现

核心通过存储接口repository/)与注入回调(权限审批、Skill 信任) 与持久化策略解耦:GUI 用 SQLite + SharedPreferences;未来 TUI 可实现同一组 接口用 JSONL/文件存储。

技术栈

技术
UI Flutter(athena_gui)
核心 纯 Dart(athena_core,零 Flutter 依赖)
状态管理 Signals(Computed、Signal、listSignal、setSignal)
依赖注入 GetIt(LazySingleton,仅 GUI 装配层)
路由 AutoRoute(桌面无过渡,移动标准过渡)
数据库 SQLite + Laconic ORM(GUI 侧实现,PRAGMA foreign_keys = ON)
AI API openai_dart v5.0.0(流式 + 工具调用 + 推理)
HTTP http v1.x(web_fetch、web_search)
测试 athena_core:dart test;athena_gui:flutter test

分层架构

┌─────────────────────────────────────────────┐
│            athena_gui(Flutter)             │
│  UI Layer(page / widget / component)      │
│  ViewModel Layer(signals + Delegate 委托) │
│  SQLite 实现(repository / database)       │
├─────────────────────────────────────────────┤
│            athena_core(纯 Dart)            │
│  AgentRunCoordinator(run 编排层,RunEvent)│
│  Service Layer(LLM 通信 / 数据转换 / 编排)│
│  Repository 接口(存储抽象,port)          │
│  Agent Layer(Agent Service / Tool /        │
│              Permission / Skill)           │
│  Entity / Storage / Util                    │
└─────────────────────────────────────────────┘
   GUI 通过 GetIt 装配:注入 SQLite 实现 +
   权限弹窗 / Skill 信任回调(TUI 可注入替代实现)

配置

AI 提供商

在应用内设置页面添加 OpenAI API 兼容的提供商。预设包括:

提供商 内置模型示例
DeepSeek deepseek-chat, deepseek-reasoner
OpenRouter Claude 3.5 Sonnet, GPT-4o, Gemini 2.0 Flash, Llama 3.3 等
阿里云百炼 通义千问系列, DeepSeek 系列
硅基流动 DeepSeek 系列
火山方舟 豆包系列, DeepSeek 系列
智谱 GLM 系列
MiniMax MiniMax-Text-01

模型元数据(名称、上下文窗口、价格、reasoning/vision 标志)由应用启动时后台从 models.dev 自动同步,预设模型列表随上游更新,无需手工维护。

Skill 开发

  1. 创建 SKILL.md 文件,包含 YAML front matter 和 Markdown body
  2. 放入 ~/.athena/skills/<skill-name>/(用户级)或 .athena/skills/<skill-name>/(项目级)
  3. 重启应用或新开会话即可发现

权限管理

用户持久化规则存储在 ~/.athena/permissions.json,格式:

{
  "rules": [
    {"tool": "bash", "action": "git", "pattern": "push*"},
    {"tool": "bash", "pattern": "ls *"},
    {"tool": "file_read", "pattern": "/home/user/projects/*"},
    {"tool": "web_fetch", "pattern": "https://example.com"}
  ]
}
  • 文件类工具(file_read / file_write / file_update):pattern 为路径,支持 * / ? 通配符
  • Shell 工具(bash / powershell):action 为命令动作(git、ls、npm…),pattern 为参数模式;不加通配符时按前缀匹配
  • web_fetch:pattern 为 URL origin(scheme://host[:port])
  • pattern 为空表示允许该工具(及 action,若指定)的所有调用

测试

项目为双包结构,共 35 个测试文件,覆盖:

  • Agent 层(athena_core):工具执行、并行执行分组、权限规则、Skill 加载与信任、Shell 进程管理、Schema 校验
  • Service 层(athena_core):消息转换、聊天服务、会话管理、模型目录同步
  • ViewModel 层(athena_gui):聊天流、设置、摘要、翻译、TRPG
  • UI 层(athena_gui):移动端主页和聊天页 widget 测试
  • 数据库(athena_gui):迁移、CASCADE 行为验证
# 核心包(纯 Dart)
cd packages/athena_core && dart test

# GUI 包(Flutter)
cd packages/athena_gui && flutter test

贡献

  1. Fork 仓库
  2. 创建功能分支 (git checkout -b feature/xxx)
  3. 提交更改 (git commit -m 'Add xxx')
  4. 推送 (git push origin feature/xxx)
  5. 创建 Pull Request

许可证

MIT License


About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages