Aict:专为AI代理打造的Unix核心工具,输出XML/JSON格式
速览
Aict重新实现了Unix核心工具(如ls、cat等),所有输出都改为XML或JSON结构化格式,方便AI代理直接解析和处理。传统Unix工具输出文本格式,对机器不友好,Aict专为AI代理的自动化流程优化,可集成到数据管道和脚本中。该项目在Hacker News上展示,旨在提升AI代理使用命令行工具的效率。
AI 深度解读
背景
传统 Unix 核心工具(如 ls、grep、cat、diff 等)的输出格式是为人类设计的:对齐的列、彩色高亮、摘要行。当 AI agent(如基于 LLM 的代理)调用这些命令时,返回的是人类可读的纯文本。AI 需要花费大量 token 去解析列位置、猜测字段宽度、处理不一致的格式(例如 ls -l 中的文件大小字段位置并不固定,且没有明确标签)。这种解析既脆弱又浪费 token —— 一次 ls 可能就需要多轮调用(先 ls 再 file 判断语言,再 find 配合 stat 获取完整元数据),且容易出错(例如 file(1) 曾将 Go 源文件误认为 "C source")。为了解决这个问题,Aict 被创建出来:重新实现 33 个 Unix 工具,直接输出结构化的 XML 或 JSON,让 agent 无需解析即可读取。
核心内容
Aict 是一套 Unix 核心工具的重新实现,专为 AI agent(而非人类)设计。它包含了 33 个工具,覆盖 6 个类别:文件操作(ls, cat, stat, find, diff 等)、文本处理(grep, head, tail, sort, uniq, cut, tr, sed, awk)、系统信息(df, ps, system)、路径工具(path)、压缩(tar)、校验(checksums)以及一个内置的 JSON 查询工具 jq。此外还有 git 相关(status, diff, log, ls-files, blame)、shell 补全(bash/zsh/fish)以及自诊断 doctor。
所有工具默认输出 XML(因为 XML 属性在上下文窗口中比 JSON 更紧凑),也支持 --json 和 --plain(回到传统纯文本格式)。每个输出字段都有明确标签:路径总是绝对路径,时间戳是 Unix 整数,语言和 MIME 类型自动检测(使用 Go 标准库,无网络请求)。例如 aict ls src/ 的输出:
<ls timestamp="1746123456" total_entries="3">
<file name="main.go" path="src/main.go" absolute="/project/src/main.go"
size_bytes="2048" size_human="2.0K" language="go" mime="text/x-go"
binary="false" executable="false" modified="1746120000" modified_ago_s="3456"/>
<file name="utils.go" path="src/utils.go" absolute="/project/src/utils.go"
size_bytes="1024" size_human="1.0K" language="go" mime="text/x-go"
binary="false" executable="false" modified="1746120000" modified_ago_s="3456"/>
<directory name="internal" path="src/internal" modified="1746120000"/>
</ls>
Aict 内置 MCP 服务器(通过 aict mcp 子命令启动,使用 stdio 传输协议),让 AI 助手(如 Claude Code)可以直接调用所有工具作为原生函数,带有类型参数和结构化 JSON 结果,无需 shell 包装。配置方法是在 Claude Desktop 或 ~/.claude.json 中添加 MCP 服务器设置。
在 token 成本方面,Aict 明确承认:输出每个任务比精简的 GNU 工具多消耗 1.1–7.8× 的 token(使用 tiktoken o200k_base 测量)。但节省了往返次数和解析歧义:纯文本需要 2–4 次链式调用(例如 ls 后再 file 判断语言,再对每个结果 find + stat),而 Aict 一次调用即可。在真实 agent 评估中(opencode,同一任务每个工具链执行 3 次),使用 Aict 的 agent 输出 token 减少了约 46%(中位数 265 vs 487),且 3/3 结果正确;而使用 GNU 工具链的 agent 在一次运行中因信任 file(1) 的语言检测而输出了有缺陷的报告。
性能方面,每次调用启动开销约 3.6 ms(Linux/amd64 中位数)。当只需要原始内容时,可使用 --plain 跳过语义增强以提升速度。
关键要点
- 目标受众:Aict 完全为 AI agent 设计,而非人类直接使用。所有工具输出结构化数据(默认 XML),避免 agent 解析纯文本。
- 工具范围:重新实现 33 个 Unix 核心工具,覆盖文件、文本、系统、路径、压缩、校验、Git 等常用操作。还包括内置
jq用于查询 JSON 文件。 - 输出格式:每个工具支持
--xml(默认)、--json、--plain(纯文本)。XML 属性比 JSON 更紧凑(例如<file size="1024" lang="go"/><{"size":1024,"lang":"go"})。 - 元数据自动检测:语言检测(基于 Go 标准库 MIME 检测,而非 HTTP)、MIME 类型、绝对路径、Unix 时间戳、二进制/可执行标志等。所有字段均明确标记,无需猜测。
- MCP 集成:内置 MCP 服务器,可直接被 Claude Code 等 MCP 客户端调用,作为原生函数使用。配置简单(
aict mcp命令)。 - Token 成本权衡:输出 token 数比 GNU 工具增加 1.1–7.8×,但消除了多轮调用(每个额外调用都是完整 agent 回合,包含模型推理、工具调用开销、中间输出,这些 token 并未计入基准测试),实际总 token 成本更低。在真实评估中,Aict 使 agent 输出 token 减少约 46%,且结果正确率更高。
- 平台支持:大部分工具可在 Windows 上运行(
ls,cat,stat,diff,grep,head,tail,sort,uniq,cut,tr,sed,awk,jq,tar,checksums,df,path)。system仅支持 Linux/macOS;ps仅支持 Linux(读取/proc)。不支持平台返回结构化<error>元素,不会崩溃。 - 安全性:严格只读,无网络请求(MIME 检测使用 Go 标准库,非 HTTP),无遥测,无数据收集,仅读取用户显式传递的路径。
- 依赖:仅一个外部依赖:官方 MCP Go SDK(仅用于
aict mcp子命令)。所有 33 个工具和内部包均为纯 Go 标准库实现(作为硬约束执行)。 - 与同类工具对比:
- 与 ripgrep:ripgrep 纯搜索更快;Aict grep 增加语言/MIME 检测和一致的结构化输出。
- 与 eza/lsd:eza/lsd 是更好的“人类”版 ls(彩色/格式化);Aict 输出数据结构而非格式化表格,解决不同问题。
- 许可与构建:MIT 许可,完全由 AI 工具构建、为 AI 工具服务。
意义与影响
Aict 代表了一种工具设计的范式转变:不再把 AI agent 当作“人类模拟器”去解析传统 CLI 输出,而是为其提供原生结构化的接口。它精准解决了大模型在 agent 场景中的痛点——解析无结构文本的 token 浪费、格式脆弱性、多次工具调用带来的延迟和上下文污染。通过统一输出格式、自动元数据增强、MCP 原生集成,Aict 能显著提升 AI agent 在执行文件系统任务时的效率和可靠性。
该项目对 AI 工程生态有两点直接影响:一是降低了 agent 开发者在文件操作上的工程复杂度(无需自己写解析器),二是推动了“工具即 API”理念在 CLI 领域的落地——MCP 协议使得任何命令行工具都可以被 AI 代理作为原生函数调用
