AFT
给编码 Agent 一副真正的 IDE 与操作系统:按符号感知代码、精确改写、后台常驻。
- Star 数
- ★ 334
- 最近更新
- 1 天前
- License
- MIT
- 主语言
- Rust
- FA 评分
- 58/100 · 缺口较多
30 秒速览
- 可在哪里用
- 兼容但需适配
- 开始前需要
- 典型场景
- 已经在用 OpenCode 或 Pi 写代码、但 Agent 常因整文件读取浪费 token 的开发者,希望用 aft_outline / aft_zoom 只取结构信息。
- 主要局限
- 目前只有 OpenCode、Pi(及经 Pi 的 OMP)三个适配器;其他宿主或 MCP、其他框架被标为「未来」。
- 源码审查
- 58/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
AFT 是 CortexKit 家族中的「感觉运动皮层」,用 Rust 编写的共享内核加上按 harness 分发的薄适配层,为编码 Agent 提供结构化的代码感知与精确的代码改写能力。它的核心是一个 JSON-over-stdio 协议的 Rust 二进制,按项目根各常驻一个进程、跨会话共享,内部集成 tree-sitter 解析(覆盖约 27 种语言)、符号与调用图、trigram 索引、语义索引和 LSP 客户端。适配层目前覆盖 OpenCode(@cortexkit/aft-opencode)、Pi(@cortexkit/aft-pi),OMP 通过 Pi 插件支持;它们会「接管」宿主的 read、write、edit、bash、grep 等内置工具槽,并额外注册 aft_ 系列工具。安装入口是 npx @cortexkit/aft@latest setup,它会自动检测已装 harness 并写入配置,二进制按缓存、npm 平台包、PATH、cargo install、GitHub release 的顺序解析。数据(备份、索引、下载的 LSP 服务)存放在 ~/.local/share/cortexkit/aft/ 下,采用 MIT 许可。
感知侧:aft_outline 输出文件、目录或远程 URL 中所有符号的类别、名称、行范围与可见性;aft_zoom 深入单个函数或类,可加 callgraph: true 标注被调用者与调用者;aft_search 在索引上做语义+词法混合检索,支持本地、OpenAI 兼容与 Ollama 嵌入后端;aft_callgraph 追踪调用者、被调用者、数据流与最短调用路径;aft_inspect 一次返回 LSP 错误告警、TODO、指标、死代码、未用导出与重复代码。动作侧:edit 支持模糊匹配查找替换、按符号名替换、批量与多文件事务、glob 替换;write 自动建目录并备份、格式化、附内联诊断;apply_patch 支持多文件补丁与原子回滚;aft_import 做语言感知的 import 增删与整理;ast_grep_search / ast_grep_replace 用 AST 模式与元变量做结构化查找替换。常驻侧:bash 统一执行并按命令重写(cat→read、grep→grep 工具)、压缩输出;background: true 派生后台任务,配合 bash_status、bash_kill、bash_watch 管理;PTY 提供可交互终端,用 bash_write 输入、bash_status 查看渲染屏幕;aft_safety 提供按文件撤销栈、命名检查点与恢复。grep/glob 由后台构建、落盘并由文件监视保持新鲜,索引遵循 .gitignore 与可选 .aftignore。
- 已经在用 OpenCode 或 Pi 写代码、但 Agent 常因整文件读取浪费 token 的开发者,希望用 aft_outline / aft_zoom 只取结构信息。
- 需要跨文件重命名、提取函数或整理 import 的前端/TypeScript 团队,用 edit 的符号替换与 aft_import 代替脆弱的按行编辑。
- 接手陌生大型仓库的工程师,用 aft_callgraph 与 aft_inspect 快速定位调用链、死代码与重复实现。
- 经常让 Agent 跑测试、装依赖、看 docker ps 的人,用输出压缩与 background/bash_watch 避免海量日志淹没上下文。
- 需要在 Agent 会话里操作 REPL、vim 或嵌套终端的用户,用 PTY(bash_write / bash_status)驱动交互式程序。
- 担心 Agent 改坏代码的团队,用 aft_safety 的按文件撤销栈与命名检查点在出错后回滚。
如何安装或部署这个 Agent?
前置条件:已安装 Node.js(用于 npx)与目标 harness(OpenCode 或 Pi;OMP 走 Pi 插件)。执行统一安装命令:
npx @cortexkit/aft@latest setup可指定单一 harness:
npx @cortexkit/aft@latest setup --harness opencode
npx @cortexkit/aft@latest setup --harness pi
npx @cortexkit/aft@latest setup --harness omp从源码构建(开发用)需要 Bun ≥ 1.0 与 Rust stable 1.92+:
bun install
cargo build --release
bun run build如何使用这个 Agent?
安装后下次会话启动时,aft 二进制会按需下载并让全部工具上线。用户或项目级配置写在 aft.jsonc:
// ~/.config/cortexkit/aft.jsonc 或 <project>/.cortexkit/aft.jsonc
{
"enabled": true,
"inspect": {
"duplicates": {
"expected_mirrors": [["packages/opencode-plugin/**", "packages/pi-plugin/**"]]
}
}
}诊断与缓存管理:
npx @cortexkit/aft@latest doctor
npx @cortexkit/aft@latest doctor --fix
npx @cortexkit/aft@latest doctor lsp卸载时先从宿主配置移除注册:OpenCode 编辑 ~/.config/opencode/opencode.jsonc 中顶层 "plugin" 数组里的 @cortexkit/aft-opencode 条目;Pi 执行:
pi remove npm:@cortexkit/aft-pi这个 Agent 有哪些优点和局限?
- 真正接管宿主内置工具槽(read/write/edit/bash/grep),Agent 无需改变调用习惯就能获得 tree-sitter 解析、索引检索与输出压缩。
- 按项目根常驻单个 Rust 进程并跨会话共享,解析树保持热态,同时每个会话保有独立的撤销历史。
- 动作类工具在落盘前统一做解析、格式化与备份,配合 aft_safety 的按文件撤销栈与命名检查点,回滚粒度细。
- 输出压缩专门针对测试运行器、安装器、docker ps、kubectl 这类高噪声 CLI,保留错误与摘要、丢弃冗余。
- 语言覆盖广:README 列出约 27 种语言,并对 Metal、CUDA、Objective-C、TOML 等特殊情况的语法处理做了明确说明。
- MIT 许可、有公开的 crate 与 npm 包,且不绑定单一模型供应商,语义检索可选本地或 Ollama 嵌入后端。
- 目前只有 OpenCode、Pi(及经 Pi 的 OMP)三个适配器;其他宿主或 MCP、其他框架被标为「未来」。
- 基准测试套件仍在进行中,搜索延迟、检索质量、token 压缩率与端到端任务成功率均无已公布数据。
- 从源码构建要求 Rust 1.92+(受锁定的 oxc 0.126 依赖族限制),并默认关闭增量编译,首次构建成本不低。
- 部分语言能力不完整:Scala、Bash、HTML/Markdown、YAML、TOML 等缺少 AST 或 import 支持,Python 的跨文件符号移动标记为 partial。
- 语义搜索需要额外选择嵌入后端,若用 OpenAI 兼容或远程后端则意味着代码片段会离开本机。
- 贡献流程要求先开 issue 并取得 design-approved 标签才接受 PR,外部快速修补有门槛。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| AFT 当前 | 58 · 缺口较多 | — | ★ 334 | 1 天前 | Rust | — |
| CodeGraph | 44 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 911 | 29 天前 | Rust | Claude Code · OpenAI API · Claude API |
| Graphicle | 92 · 表现优秀 | 命令行工具免费 + 模型费 | ★ 502 | 2 天前 | Rust | Codex · Claude Code |
| GraphMind 代码知识图谱 | 64 · 存在缺口 | 桌面应用免费版 + 付费版 | ★ 217 | 21 天前 | Rust | Claude Code · Claude.ai |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
least_privilege:配置文档显示沙箱、read_deny/write_allow、restrict_to_project_root、内存上限、systemd scope 等约束,且项目层只能收紧不能放宽,属于有实质最小权限设计(2)。但默认沙箱是否开启、默认权限面多大在可见文件中未明确,故未给满分。user_confirmation:仅见清理缓存需输入 delete 或 --yes、以及 host 权限询问的间接描述;对编辑/写入/后台任务/PTY 等高风险动作没有明确的逐次确认机制说明(1)。data_flow_transparency:bash.env 首条回复列出应用变量名与层级、runon 披露未发送内容、语义检索可选本地/OpenAI/Ollama 后端,数据流向有说明(2);但嵌入后端外发数据的边界细节不足。sensitive_data_handling:存储目录 0700/0600、凭据名在项目层被拒、macOS privacy disclaim、凭据下限路径规范化等有具体证据(2);未见对密钥/token 的专门处理说明。dependency_security:README 提到锁定 oxc 0.126 需 rustc 1.92,但无依赖审计、SBOM、漏洞处置说明(1)。external_effects:后台任务、PTY、GitHub 读写、runon 远程构建等外部副作用有描述与部分约束(2),但缺少统一的副作用清单。rollback:每文件撤销栈、命名检查点、apply_patch 原子回滚、编辑前备份、跨重启持久化,证据充分(3)。source_attribution:MIT 与 CortexKit 家族归属清楚,但发布者身份未经验证、无签名/来源证明(1)。
self_consistency:README 的工具清单、语言矩阵、架构图与 docs/config.md 的键名基本一致;但 README 称基准“即将发布”,docs/benchmarks.md 标注数字未定,且 investigations 文档基于不同 base 提交,存在版本口径差异(2)。dependency_availability:依赖 Bun≥1.0、Rust 1.92+、crates.io/npm 包、可选 LSP 自动下载与嵌入模型;安装路径多但无锁定清单或离线可用性说明(1)。failure_messages:配置文档给出大量具名错误(cache_dir_unavailable、cache_dir_config_unknown、privacy disclaim unavailable、列表截断尾注),失败信息具体(2);但未覆盖工具调用失败的统一语义。
audience_and_scenarios:明确面向 OpenCode/Pi/OMP 编码代理,场景(符号编辑、语义检索、后台任务、PTY)清晰(2);对非编码或非支持 harness 的场景未展开。capability_boundaries:语言支持矩阵逐项标注 ✓/partial/空白,并说明 Objective-C 头文件、Metal 语法、TOML 不在 AST 工具等边界(2);但默认启用哪些工具、禁用后的行为边界描述较少。trigger_precision:工具触发条件(何时用 aft_search 而非 grep、列表截断提示、bash 重写规则)有说明(2);缺少对误触发/冲突的量化说明。environment_fit:覆盖 Linux/macOS/Windows 差异(cgroup、job object、footprint watcher、systemd scope、NFS 存储覆盖),环境适配证据充分(2);Windows 运行时未验证。
information_architecture:README 分区清晰,docs/ 下 tools/config/cli/benchmarks 分文件,investigations 与 design 分离(2);部分文档为内部调查记录,混入产品文档树。install_notes:npx setup 自动探测 harness、卸载步骤逐 harness 列出、开发构建命令齐全(2);无版本兼容矩阵。naming_stability:配置键有退役键翻译与保留旧名(worker_wait_max_ms)的说明,命名演进有交代(2);但工具名与配置键数量多,稳定性承诺未成文。examples_and_faq:有配置示例与命令示例,但无 FAQ,示例集中在少数键(1)。known_limitations:明确列出 Objective-C 头文件、Metal 语法、TOML AST 缺失、macOS 内存采样过冲、PTY 状态重放未优化、基准未发布等限制(2)。license:MIT,README 与徽章一致(2)。versioning_changelog:无 CHANGELOG,仅见 setup 写入固定版本号示例;版本策略未说明(1)。maintenance_responsibility:有 CONTRIBUTING 的 design-approved 流程与 Discord,但发布者未经验证,维护责任主体不明确(1)。
output_usability:工具输出设计考虑可用性(列表截断尾注、压缩保留错误与摘要、结构化 outline/zoom)(2);实际输出质量未经执行验证。marginal_value:相对原生 read/edit/bash,符号级编辑、语义检索、调用图、撤销栈确有增量价值(2);但同类能力在生态中已有替代,增量幅度未量化。cost_benefit:常驻每项目一个 Rust 进程、trigram/语义索引、LSP 下载与嵌入模型带来磁盘与内存成本,README 宣称降 token 但基准“即将发布”,成本收益缺乏证据(1)。
claim_traceability:多数能力声明可对应到文档与代码符号引用(investigations 给出测试名与命令),但 README 的性能与 token 收益声明无数据支撑(1)。cross_source_corroboration:README、config.md、design 与 investigations 在沙箱、配置层级、后台任务上互相印证(1);investigations 基于不同 base 提交,跨源一致性有限。fact_inference_separation:文档较明确区分已实现、已推迟(PTY 重放)、未测量与“即将发布”,推断与事实分离较好(2)。
- 发布者身份未经验证,安装前应自行核对 npm/crates.io 包与仓库的对应关系及签名。
- setup 会改写宿主配置并替换内置 read/write/edit/bash 等工具槽,属于高影响变更,建议先在隔离环境验证。
- 默认沙箱是否开启、默认权限面多大在可见文档中不明确,涉及敏感仓库时需显式配置 restrict_to_project_root 与 sandbox。
- 语义检索可选用 OpenAI 兼容或 Ollama 后端,代码片段可能外发,需确认数据流向与合规要求。
- 基准与 token 收益声明尚未发布,成本收益无法从源码静态确认。
- 依赖 Rust 1.92+ 与锁定 oxc 版本,未见依赖审计或漏洞处置说明。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
v0.63.5 AFT 0.63.5 fixes two problems introduced in 0.63.4. It has no other changes. Fixed - AFT starts again inside a Linux sandbox that does not let it read the disk root, such as nono with Landlock. 0.63.4 stopped at startup there ([#1245](https://github.com/cortexkit/aft/issues/1245)). - aft_inspect on two or more files outside the project no longer fails with "refused again after it was approved" after the first approval in OpenCode 2 daemon mode ([#1258](https://github.com/cortexkit/aft/issues/1258); thanks @iceteaSA).在 GitHub 查看 ↗ -
发布说明摘录
v0.63.4 AFT 0.63.4 replaces 0.63.0 through 0.63.3, which were not published because their release builds failed. It adds shell memory limits, changed-file reports and a separate cache location. Diagnostics, call graphs, command recovery and permissions are fixed, with lower resource use. Upgrading - Outdated call graphs and symbol caches rebuild on use; call-graph caches take about three quarters less disk space. …在 GitHub 查看 ↗