UNCUT

无损、无界面的编码 Agent 骨架:一个 7 MB 静态二进制、四个工具、纯 stdin/stdout,不做静默裁剪。

源仓库
Balanov/uncut
Star 数
★ 600
最近更新
2 天前
License
MIT
主语言
Go

30 秒速览

可在哪里用
通用 · 跨平台OpenAI API
开始前需要
Go 1.26+(仅源码构建需要)Python 3(仅证明脚本需要)Shell / 命令行网络访问本地文件系统
典型场景
在 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 报错而不是把残缺答案当作成功。

  1. 在 CI 流水线里加一步自动修复:用 uncut "Run the tests and fix the failure" 让模型读代码、改文件并跑测试,并把退出码 3/4 当作流水线失败信号。
  2. 把代码评审塞进 shell 管道:git diff | uncut "Review this diff. Do not edit files." 在终端或脚本里得到纯文本评审结论。
  3. 用本地 Ollama(如 qwen3:8b)在离线或私有环境中做仓库解释和轻量改动,不向外部 API 发送源码。
  4. 在一次性容器内运行不受信任的任务,借助四个工具完成读文件、改文件、执行命令的闭环,同时用 --session 保留完整过程以便事后审计。
  5. 做 Agent 研究时把它当作最小可改造基线:八百多行实现代码、单一提供方协议、单一循环,便于替换模型调用层或增删工具。
  6. 用 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 --version

macOS:

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 --version

Windows 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@latest
git 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?

FollowAgents 源码审查 · FARS-2.1
缺口较多
56/ 100 五分制 2.8 / 5
信任安全 10/29
可靠稳定 9/14
适用触发 12/18
规范维护 12/18
有效结果 9/13
证据核验 4/8
查看各维度的扣分理由
信任安全10 / 29 · 1.7/5

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。

可靠稳定9 / 14 · 3.2/5

README 对退出码、截断失败、会话恢复、UTF-8 拒绝等行为描述一致,且 CI 与 release 工作流均运行 go test、go vet 与 proof 脚本,自洽性得 2。依赖可用性:仅需 Go 1.26+ 与标准库,proof 需 Python 3,无第三方包,得 2。失败信息有明确退出码表(0-4)与错误语义,得 2。未执行任何测试,故不据此加分。

适用触发12 / 18 · 3.3/5

面向 shell 管道、CI、容器与 agent 实验等场景,受众清晰,得 2。能力边界写得非常充分:无 TUI、无插件、无后台 agent、无自动重试、无上下文压缩、不支持图像、非流式,得 3。触发精度方面仅靠自然语言 prompt 与 --max-steps,无结构化触发或选择器,得 1。环境适配覆盖 Linux/macOS/Windows 双架构并说明 Windows UTF-16 输出问题,得 2。

规范维护12 / 18 · 3.3/5

README 结构清晰,含安装、配置、工具、退出码、安全等章节,信息架构得 2。安装说明详尽,含校验和验证与源码构建,得 3。命名稳定性:版本号硬编码为 0.1.1 且无 changelog,得 1。示例与 FAQ 有快速开始与管道示例,但无独立 FAQ,得 2。已知限制非常充分(非沙箱、无签名、Windows 编码、上下文限制),得 3。LICENSE 为完整 MIT 文本,得 3。版本与变更日志缺失,得 1。维护责任:仅个人署名,无治理或支持承诺,发布者未验证,得 1。

有效结果9 / 13 · 3.5/5

输出可用性:最终文本到 stdout、--json 提供 NDJSON 事件,适合管道消费,得 2。边际价值:7MB 静态二进制、四工具、无损传输在 CI/容器场景有明确差异化,得 2。成本效益:无第三方依赖、单二进制部署成本低,但每次调用发送完整会话会放大 token 成本,得 2。

证据核验4 / 8 · 2.5/5

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/ 文件未在证据中提供,无法交叉核实其测量结果。
证据充分度:低 评估于 2026年11月2日 审查版本 0beea8f7a25b
查看完整评分方法 →

最近版本

来自该项目 GitHub Releases 的最新发布记录,说明为上游原文摘录,未经本站改写或测试。

  1. v0.1.1
    发布说明摘录
    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 查看 ↗
  2. v0.1.0
    发布说明摘录
    Full Changelog: https://github.com/Balanov/uncut/commits/v0.1.0
    在 GitHub 查看 ↗

常见问题

UNCUT 会帮我压缩上下文或自动重试吗?
不会。它刻意不提供上下文压缩、摘要、滑动窗口、自动重试和后台 Agent。当上下文或输出上限被触及时,由提供方拒绝或截断,UNCUT 以退出码 3 显式报错,而不是把部分答案当成成功。
我可以接本地模型,不付 API 费用吗?
可以。只要本地服务器提供 OpenAI 兼容的 /v1 Chat Completions 接口,例如 Ollama 的 http://localhost:11434/v1,并安装支持工具调用的模型即可。软件本身免费,使用云端模型时费用由提供方按量计费。
模型能对我的机器做什么?
它能通过 run_command 以你的操作系统用户权限执行任意 shell 命令,文件工具的路径限制不会约束 shell。请把不受信任的任务放在一次性容器或隔离环境中运行,并自行审阅会话与改动。
如何判断它是否真的没有截断我的文件或命令输出?
仓库提供 bench/proof.py,用真实二进制对接一个确定性的本地提供方,检查大文件和命令输出的完整传输、会话恢复、编辑、截断失败、步数上限与非法 UTF-8 处理。运行需 Go 构建和 Python 3,无需 API key。
可以在 CI 或容器中把它当作流水线一步吗?
可以。它以 stdin/stdout 工作,最终文本写 stdout,--json 输出结构化事件,退出码 0/1/2/3/4 区分成功、错误、用法错误、提供方截断和步数耗尽,便于流水线判定。注意为运行环境提供模型端点和密钥(本地端点通常不需要)。
在 GitHub 查看 ↗ 安装 ↓

对比同类 Agent

用同一套 FARS 评审,横向比较这个 Agent 所属的短名单。

相关 Agents