AX · 代理运行时
内核负责机制。技能决定行为。
AX 是一个快速、轻量的终端 AI 代理,用 Rust 写成:单个原生二进制,会话、记忆、凭据与模型配置都存在本机——不需要注册服务,没有远端遥测。
- v0.3.17
- Rust
- 单二进制
- 本地优先
- 提供方中立
01 · 执行循环
一条循环,没有第二个规划器。
上下文按预算选择
内核按 token 预算挑选上下文——绝不使用固定的消息条数或窗口比例。压缩只改变喂给模型的内容,原始历史永不删除。
工具声明权限
每个工具返回自己的 capability 与 safety,权限从不按名字猜。shell 与未知影响的工具持有独占租约;只读工具声明影响后可并发。
有界并发
依赖 DAG 里就绪的独立调用并行执行。默认并发 4,上限 64,由 AgentSupervisor 管理。
推进前落盘
每条消息与工具结果都在执行推进前写入。会话跨重启恢复,已达成的步骤绝不重跑。
启动路径尽可能空
AX 的设计原则是惰性加载:没有任何东西会在启动时被无谓地拉起来。
- 提供方 — 只在需要时才连接与认证。
- 技能 — 只为路由建立索引;正文命中才加载。
- MCP 服务器 — 在被调用前保持休眠;能力目录无需连接即可查看。
- 记忆 — 按需检索,不参与启动路径。
02 · 工具
权限是声明的,不是猜的。
内置工具覆盖 shell、文件系统、搜索、补丁、网页与图像。每个工具自己声明允许、询问还是拒绝——UI 与运行时共用同一个 PermissionStore。
shellfilesystemfind_filesglobpatchsearchwebview_imagebrowserdesktopax 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 后构建有效注册表。同名条目整体替换,禁用不会回退到全局。
# skills/<name>/SKILL.md
# agents/<name>.toml
# mods/<name>/mod.json
# mcp.toml
# config.toml# skills/<name>/SKILL.md
# agents/<name>.md
# mods/<name>/mod.json
# mcp.toml
# config.toml
# project.json04 · 状态与存储
状态留在它所属的机器上。
存储位置
持久数据在 <install-dir>/.ax 下,每个项目一个独立存储。打开别的目录不会搬走数据;删掉工作区也不会删掉它的历史。
数据库
SQLite 保存会话与消息仓储;每条会话还有一份追加式 JSONL 事件流作为权威记录。
备份
ax export 生成 axpack,ax import --dry-run 先看冲突再合并。凭据与缓存不包含在内。
迁移
首次启动时,旧的 ~/.ax 与已知项目 .ax 会被拷贝过来,原目录保留。AX_HOME 与 --data-dir 始终是显式覆盖。
ax export backup.axpack
ax import backup.axpack --dry-run
ax import backup.axpack05 · 沙箱与主机权限
知道边界在哪里。
文件与终端、应用与网站、具体操作——这三件事的边界是分开的,各自独立授权。
工作区沙箱
文件与终端工具在一个运行时工作区里执行,带配额与 TTL,失败即关闭。
操作系统隔离
原生 OS 级隔离目前需要 Linux。Windows 与 macOS 的原生沙箱后端尚未提供,受限模式会明确失败而不是放行。
应用与网站
应用、网站访问与具体操作的审批独立于文件/终端边界。主机界面的授权不改变工作区边界。
本机自动化
Windows 原生 Computer Use 默认开启,并遵守显式的关闭设置。