展示 HN:Aict - 输出 XML/JSON 的 Unix coreutils,为 AI 代理构建
AI 代理运行 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 ← 这是一个目录吗?解决方案 aict 重新实现了 33 个带有结构化输出的 Unix 工具,代理可以直接读取 - 无需解析。$ 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> 每个字段都有标签。路径始终是绝对的。时间戳是 Unix 整数。语言和 MIME 类型自动检测 - 零解析需求。安装 Homebrew(macOS) brew tap synseqack/aict brew install aict 这将安装 aict 以及 bash 和 zsh 的命令行补全功能。MCP 服务器内置:aict mcp。 Go 安装 go install github.com/synseqack/aict@latest 从源代码构建 git clone https://github.com/synseqack/aict cd aict go build -o aict。 验证安装:aict --help 应列出所有可用工具。快速入门 # 默认:XML 输出(最适合 AI 代理) aict ls src/ aict grep "func" . -r aict cat main.go aict diff old.go new.go # JSON 输出 aict ls src/ --json # 纯文本(与原始 Unix 工具相同) aict ls src/ --plain # 全局启用 XML 对所有 aict 调用 export AICT_XML=1 工具 33 个工具跨越 6 个类别。每个工具支持 --xml(默认)、--json 和 --plain。类别 工具 文件检查 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)· 完成(bash/zsh/fish)· doctor(自我诊断)输出格式 所有工具遵循相同的约定:字段约定路径始终绝对(absolute attr)时间戳 Unix 纪元整数 + _ago_s 伴随物品大小字节(size_bytes)+ 可读性(size_human)布尔值 "true" / "false" 字符串错误 <error code="" msg=""/> 元素——从不使用 stderr 空结果有效的 XML,零计数,永远不是错误 MCP 服务器 aict mcp 将所有工具暴露为可调用的 MCP 函数,通过 stdio 传输。AI 助手本地调用它们 - 无需 shell 封装。MCP 服务器是主二进制文件的子命令。配置 Claude Desktop(~/.config/claude/claude_desktop_config.json):{ "mcpServers" : { "aict" : { "command" : "aict" , "args" : [ "mcp" ] } } } 如果 aict 不在 PATH 中,请使用其完整路径:{ "mcpServers" : { "aict" : { "command" : "/usr/local/bin/aict" , "args" : [ "mcp" ] } } } Claude 代码集成添加到 ~/.claude.json : { "mcpServers" : { "aict" : { "command" : "aict" , "args" : [ "mcp" ] } } } 一旦连接,Claude 代码可以像原生函数一样调用 ls、grep、diff 及所有其他工具,并带有输入参数和结构化的 JSON 结果。令牌成本 诚实的数字首先:aict 输出每个任务的令牌成本是简洁的 GNU 输出的 1.1 - 7.8 倍(使用 tiktoken o200k_base 测量)。这些令牌购买什么:更少的轮次和零解析歧义。当纯文本需要两个到四个链式调用(ls 后是文件获取语言,find,然后每个命中 stat),aict 一次回答。任务 GNU aict 令牌(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× 每个额外的纯文本调用都是一个完整的代理轮,模型推理、工具调用开销和中间输出都落在上下文窗口中,而令牌计数的以上计算都没有包含。而在这个基准测试中,file(1) 将 Go 源文件错误地识别为 "C 源";aict 标记为 go。在实际代理评估中(opencode,每个工具链同一任务 3 次),配备 aict 的代理生成的输出令牌减少了约 46%(中位数 265 对 487),并且正确率为 3/3 - 配备 GNU 的代理在信任 file(1) 的语言检测的运行中提交了有缺陷的报告。如需查阅基准测试,请访问 benchmarks/TOKENS.md,使用 go run ./cmd/tokenbe 进行复现。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡