AX · 代理运行时

内核负责机制。技能决定行为。

AX 是一个快速、轻量的终端 AI 代理,用 Rust 写成:单个原生二进制,会话、记忆、凭据与模型配置都存在本机——不需要注册服务,没有远端遥测。

  • v0.3.17
  • Rust
  • 单二进制
  • 本地优先
  • 提供方中立

01 · 执行循环

一条循环,没有第二个规划器。

01

上下文按预算选择

内核按 token 预算挑选上下文——绝不使用固定的消息条数或窗口比例。压缩只改变喂给模型的内容,原始历史永不删除。

02

工具声明权限

每个工具返回自己的 capability 与 safety,权限从不按名字猜。shell 与未知影响的工具持有独占租约;只读工具声明影响后可并发。

03

有界并发

依赖 DAG 里就绪的独立调用并行执行。默认并发 4,上限 64,由 AgentSupervisor 管理。

04

推进前落盘

每条消息与工具结果都在执行推进前写入。会话跨重启恢复,已达成的步骤绝不重跑。

本机会话 · 工具执行时间线
$

启动路径尽可能空

AX 的设计原则是惰性加载:没有任何东西会在启动时被无谓地拉起来。

  • 提供方 — 只在需要时才连接与认证。
  • 技能 — 只为路由建立索引;正文命中才加载。
  • MCP 服务器 — 在被调用前保持休眠;能力目录无需连接即可查看。
  • 记忆 — 按需检索,不参与启动路径。

02 · 工具

权限是声明的,不是猜的。

内置工具覆盖 shell、文件系统、搜索、补丁、网页与图像。每个工具自己声明允许、询问还是拒绝——UI 与运行时共用同一个 PermissionStore。

shellfilesystemfind_filesglobpatchsearchwebview_imagebrowserdesktop
run · sh
ax run "find the failing test and fix it"

03 · 能力与作用域

技能、MCP、Agent 与 Mod 共用同一套作用域。

全局

$AX_HOME 下的 skills、agents、mods、mcp.toml 与 config.toml。

项目

<project>/.ax 下的同名定义,覆盖全局。项目的 UUID 保存在 .ax/project.json,移动项目不会丢失身份。

解析顺序

先加载全局,再叠加项目,应用 disabled_global 后构建有效注册表。同名条目整体替换,禁用不会回退到全局。

global · $AX_HOME
# skills/<name>/SKILL.md
# agents/<name>.toml
# mods/<name>/mod.json
# mcp.toml
# config.toml
project · <project>/.ax
# skills/<name>/SKILL.md
# agents/<name>.md
# mods/<name>/mod.json
# mcp.toml
# config.toml
# project.json

04 · 状态与存储

状态留在它所属的机器上。

存储位置

持久数据在 <install-dir>/.ax 下,每个项目一个独立存储。打开别的目录不会搬走数据;删掉工作区也不会删掉它的历史。

数据库

SQLite 保存会话与消息仓储;每条会话还有一份追加式 JSONL 事件流作为权威记录。

备份

ax export 生成 axpack,ax import --dry-run 先看冲突再合并。凭据与缓存不包含在内。

迁移

首次启动时,旧的 ~/.ax 与已知项目 .ax 会被拷贝过来,原目录保留。AX_HOME 与 --data-dir 始终是显式覆盖。

备份与恢复 · sh
ax export backup.axpack
ax import backup.axpack --dry-run
ax import backup.axpack

05 · 沙箱与主机权限

知道边界在哪里。

文件与终端、应用与网站、具体操作——这三件事的边界是分开的,各自独立授权。

工作区沙箱

文件与终端工具在一个运行时工作区里执行,带配额与 TTL,失败即关闭。

操作系统隔离

原生 OS 级隔离目前需要 Linux。Windows 与 macOS 的原生沙箱后端尚未提供,受限模式会明确失败而不是放行。

应用与网站

应用、网站访问与具体操作的审批独立于文件/终端边界。主机界面的授权不改变工作区边界。

本机自动化

Windows 原生 Computer Use 默认开启,并遵守显式的关闭设置。

继续

完整的参考在仓库文档里。