不到 1 MB 的 AI 编码 Agent:agentc 如何用 freestanding C23 做到轻量与可扩展
很多 AI 编码工具的能力越来越强,但运行时也越来越重:需要 Node.js、Python 或一个体积很大的单文件运行时,启动速度和常驻内存并不适合嵌入式设备、CI 辅助容器,甚至只是想快速问一句问题的终端环境。agentc 走的是一条非常不同的路线:它是一个 freestanding C23 编写的编码 Agent,不依赖 libc,支持静态链接,并通过 MCP 和版本化 C ABI 扩展能力。
这个项目不是要替代所有成熟的桌面 Agent,而是在回答一个更底层的问题:如果把运行时本身压到极小,Agent 还能保留哪些实用能力?
先看它解决的是什么问题
agentc 的 README 给出的定位是“可扩展的最小编码 Agent”。它使用自己的启动代码、分配器和网络实现,构建时采用 -ffreestanding -nostdlib -static,避免把宿主机 libc 或大型解释器带进最终二进制。
官方在 Linux x86-64 上给出了一组实测数据:0.6.0 版本的静态二进制约 940 KiB,冷启动约 0.3 ms,冷启动 RSS 约 0.7 MB;一个工作会话通常约 0.7 MB。这里的数字来自项目提供的单机测量,不应直接当作所有机器上的保证,但它清楚展示了设计目标:把“启动一个 Agent”的固定成本降下来。
项目还列出了 Linux x86-64、Linux aarch64、Linux riscv64、macOS arm64、macOS x86-64 和 Windows x86-64 等目标。Linux 构建强调 freestanding,Windows 则不链接 CRT/SDK;macOS 与 Windows 的部分平台验证仍需要真实设备用户补充,因此跨平台支持应理解为构建和测试矩阵,而不是每个平台都完成了人工长期使用验证。
快速跑起来
Linux 或 macOS 可以直接使用项目提供的安装脚本:
curl -fsSL https://raw.githubusercontent.com/abird-ai/agentc/master/install.sh | sh agentc setup agentc -p "总结这个仓库的目录结构"
agentc setup 用于选择提供商、保存凭据和选择模型;不带 -p 时则进入终端界面。安装器会校验发布归档的 SHA-256,并默认安装到 ~/.local/bin。如果希望固定版本,可以设置 AGENTC_VERSION=0.6.0;安装位置则可以通过 AGENTC_INSTALL_DIR 覆盖。
如果不想运行安装脚本,也可以从源码开始:
make make check make bench make install PREFIX=~/.local
其中 make check 运行离线 golden suite 和扩展管线,make bench 测量冷启动、峰值 RSS 和二进制大小。仓库还提供 tests/e2e.sh、tests/net.sh 和 tests/mcp.sh,分别覆盖模拟提供商的工具往返、网络/TLS 和 MCP stdio 场景。
轻量不等于功能单一
agentc 的核心交互仍然是一个可以调用工具的编码 Agent,而不是只能发送文本请求的聊天客户端。它支持文件与终端工作流,并把 MCP 放在较核心的位置:MCP server 的 prompts 会被转换为可调用的命令,resources 则通过 mcp_list_resources、mcp_list_resource_templates 和 mcp_read_resource 等通用工具读取。
它也提供扩展接口。项目包含版本化的 include/agentc_ext.h,C 和 Rust 扩展可以注册工具、技能、提示词和主题;在 macOS/Windows 上,扩展还可以从配置目录动态加载。Linux freestanding 构建则保持静态模式,这种差异需要在部署设计时提前考虑。
提供商方面,README 明确列出了 Anthropic、OpenAI、Google、Ollama,以及 OpenRouter、xAI、DeepSeek、Groq、Mistral、Together 和 Gemini 等 OpenAI-compatible 预设。常用命令包括:
agentc --list-models agentc --provider ollama --model llama3.2 agentc --provider xai --model grok-4 --api-key "$XAI_API_KEY" agentc --refresh-models
模型发现结果会按提供商缓存 24 小时;--offline 可以关闭探测。这个设计对 CI 很有帮助:网络暂时不可用时,缓存未命中不会自动变成一次不可解释的失败。
适合哪些场景
第一类场景是边缘机器和小型构建容器。一个静态、低内存的 Agent 更容易放进临时环境中,用来解释编译错误、检查补丁或执行受控的工具调用。
第二类场景是 Agent 基础设施开发。很多团队并不需要再写一套 provider、SSE、MCP 重试和凭据处理逻辑,而是希望在一个已有的轻量核心上接入自己的扩展。agentc 的版本化 C ABI 和 MCP-first 设计,正好提供了一个实验入口。
第三类场景是研究运行时边界。它把“Agent 必须依赖大型脚本运行时”这个默认前提拆开:网络、TLS、JSONC 配置、会话 JSONL、终端 UI 和扩展加载,都可以在更接近操作系统的层面重新实现。
当然,轻量化也带来工程成本。freestanding C23 需要自己处理启动、内存、平台系统调用和跨平台差异;静态链接并不会自动解决 TLS、凭据保护或工具沙箱问题。生产部署前,仍应审查网络权限、MCP server 的信任边界、shell 配置和扩展来源,而不能因为二进制很小就把它当作天然安全。
我的判断
agentc 最值得关注的地方不是“比某个成熟 Agent 小多少”,而是它把编码 Agent 重新定义成一个可以嵌入、测量和扩展的系统组件。对于追求完整 IDE 体验的用户,它还不一定是最省事的选择;但对于需要静态二进制、极低启动成本、MCP 接入和 C/Rust 扩展的团队,它提供了一个清晰的技术方向。
如果你准备评估它,建议先用 make check 和 make bench 建立本机基线,再接入一个最小 MCP server,最后才把真实凭据和写操作工具放进流程。这样既能验证它的性能优势,也能避免把“运行时很轻”误解成“整个 Agent 系统无需治理”。