by Balanov
The lossless, headless coding agent harness. One 7 MB static binary, four tools, plain stdin/stdout, no silent cuts.
# Add to your Claude Code skills
git clone https://github.com/Balanov/uncutGuides for using ai agents skills like uncut.
See how uncut compares with popular alternatives.
uncut is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Balanov. The lossless, headless coding agent harness. One 7 MB static binary, four tools, plain stdin/stdout, no silent cuts. It has 267 GitHub stars.
uncut's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/Balanov/uncut" and add it to your Claude Code skills directory (see the Installation section above).
uncut is primarily written in Go. It is open-source under Balanov on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh uncut against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
UNCUT is a tiny coding-agent harness for shell pipelines, CI jobs, containers, and agent experiments. It deliberately has no TUI, telemetry, plugin system, background agents, automatic retries, or context compaction.
The entire conversation is sent on every model call. File contents and combined command output are never truncated by UNCUT. If the provider cuts a response at its output limit, UNCUT exits with an error instead of presenting a partial answer as success. Run the proof yourself or inspect the recorded measurements.
--json.VERSION=0.1.1
ARCH=amd64 # Use arm64 on 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
Make sure $HOME/.local/bin is on your PATH.
VERSION=0.1.1
ARCH=arm64 # Use amd64 on Intel.
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
$Version = "0.1.1"
$Arch = "amd64" # Use arm64 on 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
Add $Dest to your user PATH to make UNCUT available in future terminals.
Every release includes checksums.txt. For example, verify a Linux download with:
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 -
The binaries are not code-signed yet, so SmartScreen or Gatekeeper may warn. Verify the SHA-256 checksum before allowing a downloaded executable. On macOS, after verification, remove quarantine from this file only:
xattr -d com.apple.quarantine "$HOME/.local/bin/uncut"
You can also build from source instead.
With Go 1.26+:
go install github.com/Balanov/uncut/cmd/uncut@latest
Or build a checkout:
git clone https://github.com/Balanov/uncut.git
cd uncut
go build -trimpath -ldflags="-s -w" -o bin/uncut ./cmd/uncut
On Windows, use bin/uncut.exe as the output path.
Set a model and API key:
export UNCUT_API_KEY="your-api-key"
export UNCUT_MODEL="your-model-id"
uncut "Inspect this repository and fix the failing tests"
For an OpenAI-compatible provider, also set its base URL:
export UNCUT_BASE_URL="https://openrouter.ai/api/v1"
For a local Ollama server with an installed tool-capable model (this exact setup was smoke-tested with qwen3:8b):
ollama pull qwen3:8b
export UNCUT_BASE_URL="http://localhost:11434/v1"
export UNCUT_MODEL="qwen3:8b"
uncut "Explain this repository"
No API key is required by default for local endpoints. In PowerShell, set variables with $env:UNCUT_BASE_URL = "..." and $env:UNCUT_MODEL = "...". Replace the example model with one actually installed on your machine; tool-call behavior depends on the model.
git diff | uncut "Review this diff. Do not edit files."
cat failing-test.log | uncut "Find the likely cause"
Piped input is appended to the prompt verbatim. UNCUT accepts valid UTF-8 text and rejects invalid input rather than replacing bytes silently.
uncut --json "Run the tests and fix the failure"
The event stream contains user, assistant, assistant_meta, tool, and finally done or error records. Assistant messages include complete tool calls; tool messages include complete results. Usage and finish reasons are separate assistant_meta events.
uncut --session .uncut/work.jsonl "Start the refactor"
uncut --session .uncut/work.jsonl "Continue with the tests"
If the file exists, UNCUT resumes its complete history. New messages are appended and synced after each step. A model step that UNCUT rejects — provider truncation, a tool call without an id or name, or an empty message — is not written to the session, so a failed run never leaves a session that the next run cannot resume. Invalid or partial records cause an explicit error; they are never discarded to make a session load.
Session files can contain source code, command output, and secrets. Store them accordingly and do not commit them accidentally.
| Environment variable | Purpose | Default |
|---|---|---|
UNCUT_MODEL |
Model ID; required unless --model is used |
none |
UNCUT_BASE_URL |
OpenAI-compatible base URL | OPENAI_BASE_URL, then https://api.openai.com/v1 |
UNCUT_API_KEY |
Bearer token | OPENAI_API_KEY, then no token |
Useful flags:
| Flag | Default | Meaning |
|---|---|---|
--cwd <dir> |
current directory | Workspace for file tools and shell commands |
--session <file> |
disabled | Create or resume an append-only JSONL session |
--max-steps <n> |
32 |
Maximum model calls before exit code 4 |
--max-tokens <n> |
provider default | Explicit provider output limit |
--request-timeout <duration> |
10m |
Per-request timeout; 0 disables it |
--no-agents |
false | Do not read workspace AGENTS.md |
--json |
false | Emit NDJSON events instead of only final text |
--version |
— | Print version and exit |
AGENTS.md is read in full from the workspace root and added to the system prompt. On a resumed session, the original stored system message is reused.
| Tool | Behavior |
|---|---|
read_file |
Reads an entire UTF-8 text file |
write_file |
Writes complete file contents and creates parent directories |
replace |
Replaces exactly one occurrence; zero or multiple matches fail |
run_command |
Returns the exit code and complete combined stdout/stderr |
File paths must stay inside the workspace. run_command uses /bin/sh -c on Unix and cmd.exe /D /S /C on Windows.
Some Windows utilities can emit UTF-16 or code-page output rather than UTF-8. UNCUT rejects that output instead of guessing a conversion; configure commands to emit UTF-8 when possible.
| Code | Meaning |
|---|---|
0 |
Successful final answer |
1 |
Provider, I/O, session, or execution error |
2 |
Invalid command-line usage |
3 |
Provider returned finish_reason=length or max_tokens; partial answer rejected |
4 |
--max-steps reached before a final answer |
UNCUT does not truncate, summarize, or rewrite valid UTF-8 prompts, stored messages, file contents, or command output. It does not extend a model's context window, and it cannot control provider-side processing. When the context or output limit is exceeded, the provider may reject or cut the response; UNCUT surfaces that failure instead of hiding it.
Binary files and invalid UTF-8 are rejected explicitly. UNCUT uses no