UNCUT
无损、无界面的编码 Agent 骨架:一个 7 MB 静态二进制、四个工具、纯 stdin/stdout,不做静默裁剪。
- Star 数
- ★ 600
- 最近更新
- 2 天前
- License
- MIT
- 主语言
- Go
- FA 评分
- 56/100 · 缺口较多
30 秒速览
- 可在哪里用
- 通用 · 跨平台OpenAI API
- 开始前需要
- 典型场景
- 在 CI 流水线里加一步自动修复:用 uncut "Run the tests and fix the failure" 让模型读代码、改文件并跑测试,并把退出码 3/4 当作流水线失败信号。
- 主要局限
- 不是沙箱:run_command 以当前操作系统用户权限执行,工作区路径检查无法约束 shell 命令,不受信任任务必须放进一次性容器。
这个 Agent 能做什么,适合哪些场景?
UNCUT 是一个用 Go 编写的极简编码 Agent 运行骨架,编译为单个约 7 MB 的静态二进制,没有运行时依赖和第三方 Go 依赖。它只提供一个 Agent 循环、一个 OpenAI 兼容的 Chat Completions 协议适配和四个工具:read_file、write_file、replace、run_command。设计上刻意去掉 TUI、遥测、插件系统、后台 Agent、自动重试和上下文压缩——每次模型调用都发送完整对话历史,文件内容和命令输出从不被 UNCUT 截断。它面向 shell 管道、CI 任务、容器和 Agent 实验,最终文本写到 stdout,加 --json 时输出 NDJSON 事件流,可选 --session 追加式 JSONL 会话可在后续调用中完整恢复。采用 MIT 许可,实现代码约 837 行,便于阅读和分叉修改。
UNCUT 从命令行接收提示词,并把管道输入(例如 git diff 或日志文件)原文追加到提示词后面。它读取工作区根目录的 AGENTS.md(除非传入 --no-agents)并放入系统提示,然后向 UNCUT_BASE_URL 指定的 OpenAI 兼容端点发起非流式 Chat Completions 请求,模型返回的文本和工具调用会被执行。四个工具分别是:读取整个 UTF-8 文本文件的 read_file、写入完整文件内容并创建父目录的 write_file、只替换恰好一处匹配的 replace、以及返回退出码和完整合并 stdout/stderr 的 run_command(Unix 用 /bin/sh -c,Windows 用 cmd.exe /D /S /C)。文件工具被限制在工作区内,但 shell 命令不受此限制。每一步若指定 --session,新消息会追加并同步到 JSONL 文件;最终答案输出到 stdout,--json 时改为输出 user、assistant、assistant_meta、tool 直至 done 或 error 的事件序列。当提供方返回 finish_reason=length 或 max_tokens 时,它以退出码 3 报错而不是把残缺答案当作成功。
- 在 CI 流水线里加一步自动修复:用 uncut "Run the tests and fix the failure" 让模型读代码、改文件并跑测试,并把退出码 3/4 当作流水线失败信号。
- 把代码评审塞进 shell 管道:git diff | uncut "Review this diff. Do not edit files." 在终端或脚本里得到纯文本评审结论。
- 用本地 Ollama(如 qwen3:8b)在离线或私有环境中做仓库解释和轻量改动,不向外部 API 发送源码。
- 在一次性容器内运行不受信任的任务,借助四个工具完成读文件、改文件、执行命令的闭环,同时用 --session 保留完整过程以便事后审计。
- 做 Agent 研究时把它当作最小可改造基线:八百多行实现代码、单一提供方协议、单一循环,便于替换模型调用层或增删工具。
- 用 python bench/proof.py 对自建或代理的模型端点做无损传输验证,检查大文件、大命令输出、会话恢复和截断行为是否符合预期。
如何安装或部署这个 Agent?
从 GitHub Releases 下载对应平台二进制并安装到 PATH。Linux:
VERSION=0.1.1
ARCH=amd64 # ARM64 上使用 arm64
curl -fSLo uncut "https://github.com/Balanov/uncut/releases/download/v${VERSION}/uncut-linux-${ARCH}"
mkdir -p "$HOME/.local/bin"
install -m 0755 uncut "$HOME/.local/bin/uncut"
export PATH="$HOME/.local/bin:$PATH"
uncut --versionmacOS:
VERSION=0.1.1
ARCH=arm64 # Intel 机器使用 amd64
curl -fSLo uncut "https://github.com/Balanov/uncut/releases/download/v${VERSION}/uncut-darwin-${ARCH}"
mkdir -p "$HOME/.local/bin"
install -m 0755 uncut "$HOME/.local/bin/uncut"
export PATH="$HOME/.local/bin:$PATH"
uncut --versionWindows PowerShell:
$Version = "0.1.1"
$Arch = "amd64" # ARM64 上使用 arm64
$Dest = "$env:LOCALAPPDATA\Programs\UNCUT"
New-Item -ItemType Directory -Force $Dest | Out-Null
Invoke-WebRequest -Uri "https://github.com/Balanov/uncut/releases/download/v$Version/uncut-windows-$Arch.exe" -OutFile "$Dest\uncut.exe"
$env:Path = "$Dest;$env:Path"
uncut --version每个发布版本附 checksums.txt,可校验下载:
VERSION=0.1.1
ARCH=amd64
curl -fSLO "https://github.com/Balanov/uncut/releases/download/v${VERSION}/checksums.txt"
grep "uncut-linux-${ARCH}$" checksums.txt | sha256sum -c -二进制尚未代码签名,SmartScreen 或 Gatekeeper 可能告警。macOS 校验后仅对该文件解除隔离:
xattr -d com.apple.quarantine "$HOME/.local/bin/uncut"也可用 Go 1.26+ 安装或从源码构建:
go install github.com/Balanov/uncut/cmd/uncut@latestgit clone https://github.com/Balanov/uncut.git
cd uncut
go build -trimpath -ldflags="-s -w" -o bin/uncut ./cmd/uncut如何使用这个 Agent?
设置模型和 API 密钥后直接传入提示词:
export UNCUT_API_KEY="your-api-key"
export UNCUT_MODEL="your-model-id"
uncut "Inspect this repository and fix the failing tests"使用 OpenAI 兼容提供方时再指定 base URL:
export UNCUT_BASE_URL="https://openrouter.ai/api/v1"本地 Ollama 示例(README 记录以 qwen3:8b 做过冒烟测试,本地端点默认不需要 API key):
ollama pull qwen3:8b
export UNCUT_BASE_URL="http://localhost:11434/v1"
export UNCUT_MODEL="qwen3:8b"
uncut "Explain this repository"管道输入会被原样追加到提示词:
git diff | uncut "Review this diff. Do not edit files."
cat failing-test.log | uncut "Find the likely cause"输出 NDJSON 事件流或使用可恢复会话:
uncut --json "Run the tests and fix the failure"
uncut --session .uncut/work.jsonl "Start the refactor"
uncut --session .uncut/work.jsonl "Continue with the tests"常用参数:--cwd 指定工作区,--max-steps 限制模型调用次数(默认 32),--max-tokens 设定提供方输出上限,--request-timeout 控制单次请求超时(默认 10m),--no-agents 跳过 AGENTS.md。运行无损契约自检需要 Python 3:
go build -o bin/uncut ./cmd/uncut
python bench/proof.py ./bin/uncut这个 Agent 有哪些优点和局限?
- 行为可预测:不截断、不摘要、不重写提示词、文件内容和命令输出,每次调用发送完整历史。
- 体积极小且可移植:单个约 7 MB 静态 Go 二进制,支持 Linux、macOS、Windows 的 amd64 与 arm64,无运行时和第三方 Go 依赖。
- 提供方中立:只依赖 OpenAI 兼容的 Chat Completions 端点,本地 Ollama 与各类托管服务均可接入。
- 失败显式化:提供方截断时以退出码 3 报错,达到步数上限以退出码 4 报错,非法 UTF-8 直接拒绝而非替换字节。
- 适合嵌入自动化:最终文本走 stdout,--json 提供结构化 NDJSON 事件,--session 追加式 JSONL 可完整恢复。
- 代码面小、MIT 许可:约 837 行实现 Go,单循环单协议四工具,便于审计和分叉。
- 不是沙箱:run_command 以当前操作系统用户权限执行,工作区路径检查无法约束 shell 命令,不受信任任务必须放进一次性容器。
- 不支持流式输出和图像输入,只处理文本与工具调用;大上下文超出窗口或输出上限时只能显式失败,不会自动压缩或分片。
- 依赖模型自身的工具调用能力,README 明确说明工具调用行为取决于所用模型,效果不稳定时需自行更换模型。
- 会话文件可能包含源码、命令输出和密钥,官方提醒需妥善存放且避免误提交,没有内置的加密或脱敏。
- Windows 上部分工具输出 UTF-16 或本地代码页时会被拒绝,需自行把命令配置为输出 UTF-8。
- 发布二进制尚未代码签名,SmartScreen 或 Gatekeeper 可能告警,需要手动校验 SHA-256。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| UNCUT 当前 | 56 · 缺口较多 | — | ★ 600 | 2 天前 | Go | OpenAI API |
| Dexto | 51 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 660 | 1 天前 | — | Claude Code · OpenAI API · Claude API |
| OmniGet 桌面智能体与下载工具箱 | 71 · 存在缺口 | 桌面应用免费 + 模型费 | ★ 14k | 1 个月前 | Rust | Codex · Claude Code · OpenAI API · Claude API |
| zot 编码代理 | 59 · 缺口较多 | 命令行工具免费 + 模型费 | ★ 356 | 今天 | Go | OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
README 明确声明 UNCUT 不是沙箱,run_command 以当前操作系统用户权限执行任意 shell 命令,文件工具的 workspace 限制不约束 shell,因此最小权限仅得 1(有声明但无强制隔离)。无任何审批弹窗或确认机制,user_confirmation 为 0。数据流透明度较好:说明每次调用发送完整会话、无遥测、无截断、会话文件可能含密钥,得 2。敏感数据处理仅有一句“会话文件可能含源码/输出/密钥,请妥善存储”,无加密或脱敏,得 1。go.mod 无第三方依赖,CI 使用固定 action 版本,依赖面很小,得 2。外部副作用方面无自动提交、无重试,但 shell 可产生任意副作用且无回滚,external_effects 得 1、rollback 为 0。来源归属仅 README 与 LICENSE 署名,发布者未经注册表验证,得 1。
README 对退出码、截断失败、会话恢复、UTF-8 拒绝等行为描述一致,且 CI 与 release 工作流均运行 go test、go vet 与 proof 脚本,自洽性得 2。依赖可用性:仅需 Go 1.26+ 与标准库,proof 需 Python 3,无第三方包,得 2。失败信息有明确退出码表(0-4)与错误语义,得 2。未执行任何测试,故不据此加分。
面向 shell 管道、CI、容器与 agent 实验等场景,受众清晰,得 2。能力边界写得非常充分:无 TUI、无插件、无后台 agent、无自动重试、无上下文压缩、不支持图像、非流式,得 3。触发精度方面仅靠自然语言 prompt 与 --max-steps,无结构化触发或选择器,得 1。环境适配覆盖 Linux/macOS/Windows 双架构并说明 Windows UTF-16 输出问题,得 2。
README 结构清晰,含安装、配置、工具、退出码、安全等章节,信息架构得 2。安装说明详尽,含校验和验证与源码构建,得 3。命名稳定性:版本号硬编码为 0.1.1 且无 changelog,得 1。示例与 FAQ 有快速开始与管道示例,但无独立 FAQ,得 2。已知限制非常充分(非沙箱、无签名、Windows 编码、上下文限制),得 3。LICENSE 为完整 MIT 文本,得 3。版本与变更日志缺失,得 1。维护责任:仅个人署名,无治理或支持承诺,发布者未验证,得 1。
输出可用性:最终文本到 stdout、--json 提供 NDJSON 事件,适合管道消费,得 2。边际价值:7MB 静态二进制、四工具、无损传输在 CI/容器场景有明确差异化,得 2。成本效益:无第三方依赖、单二进制部署成本低,但每次调用发送完整会话会放大 token 成本,得 2。
claim_traceability:README 声称的“无损”契约指向 bench/proof.py 与 BENCHMARKS.md,可追溯,得 2。cross_source_corroboration:仅 README 与 CI 工作流相互印证,未提供 BENCHMARKS.md 或 bench 文件内容,得 1。fact_inference_separation:README 区分了传输测试与模型质量基准,并声明不控制 provider 侧处理,得 2。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- UNCUT 不是沙箱:run_command 以当前用户权限执行任意 shell 命令,文件工具的 workspace 限制不约束 shell,务必在一次性容器中运行不可信任务。
- 无任何审批或确认机制,模型可自主写文件与执行命令,且无回滚或自动提交,需自行审查会话与变更。
- 会话 JSONL 文件可能包含源码、命令输出与密钥,README 仅作提醒,无加密或脱敏,切勿误提交。
- 发布者未经 FollowAgents 注册表验证,二进制未签名,安装前应校验 checksums.txt。
- 每次调用发送完整会话,长会话会显著放大 token 成本与上下文超限风险。
- 本次为静态源码审查,未执行任何测试或 proof 脚本,结论置信度低。
- README 引用的 BENCHMARKS.md 与 bench/ 文件未在证据中提供,无法交叉核实其测量结果。
最近版本
来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。
-
发布说明摘录
UNCUT 0.1.1 A patch release focused on Windows reliability and reproducible evidence. Fixed - run_command now preserves quoted cmd.exe commands, including executable paths with spaces and quoted arguments. Prove the lossless contract - New dependency-free bench/proof.py drives the real CLI through six scenarios: large UTF-8 input, complete combined stdout/stderr, exact edits, full-history resume, provider truncation, step limits, and invalid UTF-8. - CI runs this proof on Linux, macOS, and Windows. …在 GitHub 查看 ↗