150KB 的 AI Agent,7200 行 C,一个简单的端侧龙虾,能跑在手机上
先说清楚我这个c-agent到底是什么
很久之前,我写了一个c-agent, 它是一个用纯 C 写的 AI Coding Agent。终端里跑,能读写文件、执行命令、搜索代码、多轮对话、调用工具。功能上和 Claude Code、Aider 这类工具是同一个赛道。

但我不打算说它比谁强。Claude Code 背后是 Anthropic 的整个工程团队和 Claude 4.x 的模型能力,我们一个人用 C 写的东西,论完成度和体验肯定有差距。
我想聊的是:它有哪些独特的、别人没有的东西。
他的独特之处一:150KB,真的能跑在手机上
这不是噱头,是实打实跑通了的。
$ ls -lh c-agent-rwxr-xr-x 1 user user 150K c-agent$ file c-agentc-agent: ELF 64-bit LSB executable, ARM aarch64

在 Termux 里 make 一下,2 秒编译完,直接运行。不需要 Node.js,不需要 Python,不需要 Docker。
为什么这件事有意义?因为:
可以直接跑在手机上,目前市面上的 AI Coding Agent,没有一个能做到这件事。不是技术上做不到,是它们太重了——几百 MB 的运行时,手机扛不住。这个玩意本质上就是一个端虾,但是说实话,他操作比较手机上的文件,但是控制打开个微信,调节下音量还是问题不大的。
另外,他其实也可以跑在服务器上Telegram 远程控制 + 危险命令拦截
这是我个人最喜欢的功能。
./c-agent --telegram --bot-token YOUR_TOKEN
一行命令,c-agent 变成 Telegram 机器人。Long Polling 模式,不需要公网 IP,不需要域名,不需要 Nginx。
从任何设备打开 Telegram,给 bot 发消息,它就在你的机器上干活。
但远程执行命令是危险的。所以我们做了拦截:
你:帮我清理一下构建产物Agent 想执行:rm -rf ./build/*⚠️ 检测到危险命令:rm -rf ./build/*回复 Y 确认执行,60 秒超时。你:YAgent:已清理完成。
rm、sudo、kill -9、mkfs、dd、chmod 777——这些都会被拦住。实现方式挺有意思:运行时动态替换 bash 工具的函数指针,加一层确认逻辑,退出时再换回来。C 语言的 monkey-patching。
它可以多个大脑协同工作
大多数 Agent 只调一个模型。c-agent 根据任务类型自动路由到不同模型:
主力 Agent(deepseek-v4-flash) │ ├── 遇到复杂规划 → 派出 Planner(推理模型,开 CoT 深度思考) │ └── 遇到信息检索 → 派出 Explorer(快速模型,轻量高效)
关键点:子 Agent 跑在独立线程里,多个子任务真正并行执行。,这得益于 c 语言的独特之处。
LLM 一次返回 3 个 spawn_sub_agent 调用?c-agent 同时启动 3 个 pthread,等全部完成后汇总结果。不是串行等待,是真并行。
这个设计让 c-agent 在处理复杂任务时,能做到”大事拆小事,各找各的模型,同时开干”。
新的版本对DeepSeek 深度思考全链路支持
DeepSeek V4 有一个特殊能力,即便是 flash model:他也会默认有reasoning_content,模型在正式回答前的推理思考过程。
c-agent 完整支持了这个特性,而且是全链路贯通:
SSE 流解析 → 实时终端输出(暗色洋红 [thinking] 标记) → 内存存储 → JSON 序列化传回 API → JSONL 会话持久化 → 会话恢复时完整还原
为什么要强调”全链路”?因为 DeepSeek 的 API 有一个硬性要求:之前返回的 reasoning_content 必须在后续请求中原样传回去,否则直接报错。
这意味着你不能只是”显示”思考过程,你得把它存下来、序列化、传回去、持久化、恢复。任何一环断了,多轮对话就挂了。
我们刚刚完成了这个特性,改动涉及 6 个文件,但核心代码不到 50 行。这就是 C 的好处——数据结构清晰,顺着调用链走一遍就完事。
731 行 C 实现的 MCP 客户端
MCP(Model Context Protocol)是 AI 工具的”USB 接口标准”。一个配置文件,就能接入任意 MCP Server:
{ "mcpServers": { "playwright": { "command": "npx", "args": ["@playwright/mcp@latest", "--headless"] } }}
启动时自动 fork 子进程、JSON-RPC 握手、发现工具、注册到工具列表。你的 Agent 瞬间获得浏览器操控能力。换成数据库 Server、GitHub Server?改一行配置。
很多 MCP 客户端是用 TypeScript 或 Python 写的,动辄几千行。我们用 731 行 C 实现了完整的 MCP 客户端——fork 子进程、stdin/stdout 管道通信、JSON-RPC 2.0 协议、工具发现和执行。
好玩的地方来了,我做了9 个手机硬件工具
在 Termux 环境下,c-agent 自动注册 9 个 Termux:API 工具:
termux_notification → 发系统通知(任务完成提醒你)termux_tts → 文字转语音(让手机念代码给你听)termux_clipboard → 读写剪贴板(生成的代码直接复制)termux_camera → 拍照(配合多模态模型分析图片)termux_battery → 查电量termux_vibrate → 震动提醒termux_volume → 调音量termux_open_url → 打开浏览器

这意味着 AI Agent 能和手机硬件交互。任务跑完发个通知、电量低了提醒插充电器、拍张白板照片让 AI 识别——这些是桌面端 Agent 做不到的事情。
完整能力一览
把所有功能摊开看:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这些东西,装在 150KB 里。
一些值得说的实现细节
Token 估算对中文友好
大多数 Agent 用 strlen / 4 估算 token。但中文 UTF-8 是 3 字节一个字,约等于 1 个 token。所以我们用 strlen / 3 + 1——对中文准确,对英文略保守(提前截断比撞 API 限制安全)。
上下文截断不会破坏工具配对
截断历史消息时,如果一条 assistant 消息包含 tool_calls,它后面的 tool result 必须一起删。否则 API 会报”tool result 找不到对应的 tool call”。c-agent 的截断算法自动处理这种配对关系。
Ctrl+C 中断后自动恢复
按 Ctrl+C 中断 Agent 执行,可能留下不完整的工具调用(assistant 发了 tool_calls 但结果没收齐)。下次 agent_process 启动时会自动检测并清理这些残留,避免上下文污染。
SSE 流式拼接工具参数
流式响应中,工具调用的参数是分片到达的。{"path": "/tmp/test.txt"} 可能分成多个 chunk。c-agent 用 index 索引的 StrBuf 数组累积每个工具调用的参数片段,流结束后拼成完整 JSON。
它适合谁
说实话,c-agent 不适合所有人。
如果你追求最好的 AI 编程体验,Claude Code + Claude 4.x 大概率是更好的选择。模型能力、工程打磨、社区生态,都不是我们一个人能比的。
但如果你是这些人之一,c-agent 可能正好适合你:
-
• 想在手机上跑 AI Agent 的人 — 目前唯一的选择 -
• DeepSeek 用户 — 原生支持全特性,包括 CoT 深度思考 -
• 预算敏感的开发者 — DeepSeek API 价格是 Claude 的几十分之一 -
• 想学 AI Agent 原理的人 — 7200 行 C,没有框架噪音,从 main 开始读就能看懂 -
• 极客 / 嵌入式爱好者 — 150KB 二进制,scp 到任何 POSIX 机器就能跑 -
• 需要远程 AI 助手的人 — Telegram bot 模式,旧手机变服务器
写在最后
做 c-agent 的过程中,我最大的感受是:AI Agent 的核心逻辑其实没那么复杂。
调 API、解析 JSON、执行工具、管理上下文——这个循环用 7200 行 C 就能写完。剩下的几百 MB,大部分是运行时、框架、依赖、构建工具的重量。
我不是说那些重量没有价值。Node.js 的生态、TypeScript 的类型安全、Electron 的跨平台 UI——这些都有它们存在的理由。
但当你把这些重量去掉之后,你会发现软件能去到一些以前去不了的地方。比如你的口袋里。
150KB,跑在手机上的 AI Coding Agent。这就是 c-agent。
项目已开源在我的小群,欢迎 Star。如果你在 Termux 上跑起来了,评论区聊聊体验。
开源地址: https://github.com/coder-brzhang/c-agent
注意,本项目仅在小张的400 多个人的小群(公众号菜单-联系我-加群)中分享。
夜雨聆风