一个 Agent 项目,不依赖 Python,不引入一行 C 代码——纯 Uya 写的 CLI 编程 Agent
-
如果你在 2026 年还在用 Python 写 Agent,大概率已经习惯了这些“标配”:装 LangChain、配依赖、调 API、处理 token 溢出、管理会话状态……这些东西确实让 Agent 开发变得容易了,但也带来了一个新的问题——框架本身,正在变成最复杂的那部分。
LangGraph 的图结构在复杂场景下会变得和业务逻辑一样复杂;CrewAI 在简单任务上可能比 LangGraph 多吃 3 倍 Token;更不用说多 Agent 协作时频繁出现的指令竞态和状态幻觉。你本来是想让 Agent 帮你干活,结果发现自己大部分时间在调试框架。
有没有一种可能——Agent 本身可以写得足够小、足够干净,干净到你不需要“框架”这个概念?
这就是 uya-agent 想回答的问题。
它是什么
uya-agent 是一个纯 Uya 语言实现的命令行编程 Agent。给它一句话任务,它自己看文件、改文件、跑命令,多轮循环直到给出结论。全程不引入任何 C 代码、不写 @c_import、不依赖任何其它语言,只依赖 Uya 语言本身和随编译器分发的标准库。
项目已经完成 P0–P59 全部阶段,主线版本串 p59-max-tokens,是一个功能完整的工程产物,不是玩具 demo。
Uya 是什么?它是一个正在演进中的系统编程语言,定位是“AI 友好 · 内存安全 · 并发安全 · 零 GC”,目标是提供接近 C/C++ 的控制力,同时把模块、错误处理、泛型、异步等工程特性做成更适合协作的形态。uya-agent 就是这套语言在 AI Agent 领域的一次完整落地。
为什么值得关注
极简但不简陋。 29 个工具覆盖文件读写、Shell 执行、会话管理、子代理等核心能力,功能密度很高。但整套系统只有一个静态链接的二进制文件,make build 之后拷到任何同架构 Linux 上就能跑——不需要目标机装 glibc、不需要 Python 运行时、不需要 node_modules。
DSH 原生对齐。 它直接读 ~/.dsh 配置,零参数启动就能跑通真机网关,工具用 DSH 原名,文件观察策略(read-before-write / 版本守卫)和 system prompt 分节装配都与 DSH 对齐,还能直接读取 DSH 自己的会话文件(含 zstd 压缩)。
纯 Uya 写的全屏 TUI 和 Web 界面。 终端界面有常驻状态区、思考实时行、/diff 浮窗、markdown 渲染、浮层全屏和终端标题。--web 模式起一个本地 HTTP 服务,浏览器里每个会话跑在真 PTY 上,页面零外部依赖——不引 xterm.js、不走 CDN,终端解释器在服务端。一个 Agent 工具,UI 做到这个程度,而且是用一门系统编程语言从零写的。
项目记忆。 跨会话记住“这个项目怎么跑、关键文件在哪、上次什么还红着”,按归一化仓库根归类(worktree 与主仓同键),只追加分片存储保证多写者不丢更新,开工包在会话开始时注入一条独立 user 消息,不打掉前缀缓存。
工程纪律。 README 之外还有 DESIGN.md 和 CODING.md 两本详细文档。DESIGN.md 记录了每处状态的不变量、设计决策的理由、踩坑现场(§16)和验收记录(§19);CODING.md 定义了目录/文件/命名约定、文件头模板和编译器的硬约束。项目还配了 codegen-audit(扫构建产物,禁止切片描述符到字节指针的强转)、doc-audit(扫文本文件,禁止留 Git 冲突标记)等审计目标。这种文档和自动化审计的密度,在个人项目中相当少见。
上手体验
# 需要 Uya 编译器(默认用 /home/winger/uya-0.10)
make build # 产出 build/uya-agent(静态链接)
make selftest # 离线端到端自测,内置 mock LLM,不需要网络和 key
# 跑一个任务
./build/uya-agent "把 src/ 下所有 TODO 注释整理成 TODO.md"
# 交互模式
./build/uya-agent # REPL,逐行输入任务
# Web 界面
./build/uya-agent --web # 打开 http://127.0.0.1:8787
如果只想看看 TUI 长什么样,make tui-demo 会打印若干屏纯文本快照后退出,不消耗任何 API 额度。
谁适合看
如果你对 AI Agent 的底层实现感兴趣,uya-agent 是一个罕见的、可以用一本书的厚度读完的完整案例。从传输层(流式 SSE、两种线协议、TLS pin)到 UI 层(终端解释器、PTY 管理)到状态层(会话落盘、上下文压缩、项目记忆),全部用一门语言写在一起,没有多层框架的抽象遮蔽。
如果你对 Uya 语言本身感兴趣,OSChina 上已经有过一篇关于“用 Uya 重写 WebRTC 并打通 Chrome”的硬核实验报道。uya-agent 是这个语言在另一个方向上的验证——不是底层网络,而是 AI 应用层。
如果你的团队正在评估 Agent 技术栈,uya-agent 提供了一种不同于 Python 生态的路径:零运行时依赖、静态链接、自包含。它可能不适合所有场景,但它证明了一件事——Agent 的复杂度不一定要来自框架层,也可以来自语言层本身的设计。