2026年7月16日 2 分钟阅读

Aict 完全指南:让 AI 编码 Agent 不再费力解析 Unix 命令输出

tinyash 0 条评论

问题:AI 看不懂的 Unix 输出

AI 编码 Agent(Claude Code、Codex、Cursor 等)每天都在执行大量 Unix 命令——ls 查看目录、grep 搜索代码、cat 读取文件。但有一个尴尬的事实:这些命令的输出是为人类设计的

-rw-r--r-- 1 user staff  2048 Apr  6 10:00 main.go
-rw-r--r-- 1 user staff  1024 Apr  6 10:00 utils.go
drwxr-xr-x 5 user staff   160 Apr  6 10:00 internal

Agent 拿到这样的输出后,需要猜测哪一列是文件大小、哪一列是修改时间,甚至要判断 internal 是文件还是目录。这不仅浪费 token,还容易出错——一个列对齐的变化就可能导致解析失败。

Aict 的解决方案

Aict 是一个用 Go 编写的命令行工具,它重新实现了 33 个常用 Unix 工具,默认输出结构化的 XML/JSON 格式,让 Agent 可以直接读取,无需任何解析。

同样是查看目录,Aict 的输出是这样的:

$ aict ls src/

  
  
  

每个字段都有明确的标签:路径永远是绝对路径、时间戳是 Unix 整数、语言和 MIME 类型自动检测——Agent 拿到后直接读取属性值即可。

安装

macOS(Homebrew)

brew tap synseqack/aict
brew install aict

安装完成后会自动生成 bash 和 zsh 的 shell 补全。

Go 安装

go install github.com/synseqack/aict@latest

从源码编译

git clone https://github.com/synseqack/aict
cd aict
go build -o aict .

验证安装:运行 aict --help 应该列出所有可用工具。

快速上手

Aict 默认输出 XML(对 Agent 最友好),也支持 JSON 和纯文本模式:

aict ls src/
aict grep "func" . -r
aict cat main.go

aict ls src/ --json

aict ls src/ --plain

export AICT_XML=1

33 个工具的完整清单

Aict 将 33 个工具分为 6 大类,每类覆盖一个操作领域:

类别工具
文件查看cat head tail file stat wc
搜索与比对ls find grep diff
路径工具realpath basename dirname pwd
文本处理sort uniq cut tr sed awk
数据与归档jq tar
系统与环境env system ps df du checksums md5sum sha1sum sha256sum

此外还包含 git(status / diff / log / ls-files / blame)、completions(shell 补全生成)和 doctor(自诊断)。

所有工具都支持 --xml(默认)、--json--plain 三种输出格式。

MCP 服务器集成

Aict 内置了 MCP 服务器,通过 stdio 协议将全部工具暴露为可调用的 MCP 函数。这意味着 Claude Code、Cursor 等支持 MCP 的 Agent 可以直接像调用本地函数一样使用 Aict。

配置 Claude Desktop

编辑 ~/.config/claude/claude_desktop_config.json

{
  "mcpServers": {
    "aict": {
      "command": "aict",
      "args": ["mcp"]
    }
  }
}

配置 Claude Code

编辑 ~/.claude.json

{
  "mcpServers": {
    "aict": {
      "command": "aict",
      "args": ["mcp"]
    }
  }
}

配置完成后,Claude Code 可以原生调用 lsgrepdiff 等工具,接收结构化 JSON 结果。

输出格式约定

所有 Aict 工具遵循统一的输出约定:

字段类型约定
路径始终使用绝对路径(absolute 属性)
时间戳Unix epoch 整数 + _ago_s 辅助字段
文件大小size_bytes(字节)+ size_human(人类可读)
布尔值"true" / "false" 字符串
错误 元素——从不输出到 stderr
空结果有效 XML,计数为零,从不报错

Token 成本分析

Aict 的作者诚实地给出了 benchmark 数据:Aict 的输出比精简的 GNU 工具多消耗 1.1–7.8 倍 token。但这些 token 买来的是更少的往返调用和零解析歧义。

任务GNU 调用次数Aict 调用次数Token 对比 (GNU → Aict)
列出目录(含大小/类型/语言)2 次1 次246 → 820 · 3.3×
读取文件 + 行数 + 类型3 次1 次173 → 274 · 1.6×
查找 .go 文件(含大小/mtime)4 次1 次47 → 367 · 7.8×
Grep(含文件/行号/上下文)1 次1 次141 → 326 · 2.3×
Diff(含变更类型)1 次1 次167 → 192 · 1.2×

在实际 Agent 评估中(opencode,相同任务每种工具跑 3 次),使用 Aict 的 Agent 生成了 约 46% 更少的输出 token(中位数 265 vs 487),且 3/3 全部正确——而使用 GNU 工具的 Agent 在一次执行中因信任了 file(1) 的语言检测结果而输出了有缺陷的报告。

FAQ 精选

为什么默认用 XML 而非 JSON?

XML 属性在上下文窗口中更紧凑。{"size":1024,"lang":"go"} 更短。如果需要 JSON,用 --json 即可。

为什么不直接管道 GNU 工具到 jq?

lscatstatfinddiff 等工具根本不输出 JSON,jq 无法处理它们。Aict 为整个工具链提供结构化输出。此外,Aict 也内置了自己的 jq 实现。

和 ripgrep 比怎么样?

纯搜索场景下 ripgrep 快得多。Aict 的 grep 增加了语言检测、MIME 类型和与其他工具一致的输出格式——速度敏感时用 ripgrep,Agent 需要结构化上下文时用 Aict。

安全吗?

Aict 是严格的只读工具。没有网络请求(MIME 检测使用 Go 标准库,不是 HTTP)、没有遥测、没有数据收集。它只读取你明确传入路径的文件。

总结

Aict 解决了一个实际但常被忽略的问题:AI 编码 Agent 与 Unix 工具之间的「格式鸿沟」。用结构化的 XML/JSON 替代人类可读的纯文本输出,让 Agent 更高效、更准确地理解文件系统信息。

对于经常使用 Claude Code、Codex 或 OpenCode 的开发者来说,配置 Aict 的 MCP 服务器是一次性投入,后续 Agent 的所有文件操作都能获得更精确的结构化数据。当 Agent 不再需要猜测列偏移时,它就能把 token 花在真正重要的事情上——写代码。


相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。