Skip to main content

AI-powered CLI that decomposes PR diffs into causal threads for human code reviewers

Project description

Unravel

AI-powered CLI that decomposes PR diffs into causal threads for human code reviewers.

Instead of reviewing a diff file-by-file, Unravel groups changes by why they were made — each thread tells a story from root cause to effect, so reviewers build understanding progressively.

Installation

Pick whichever channel fits your setup — they all install the same package.

uv (recommended)

uv tool install unravel-review

pipx

pipx install unravel-review

pip

pip install unravel-review

Homebrew

brew tap roo-oliv/unravel
brew install unravel-review

brew install unravel works too — it's a tap-level alias.

One-liner (auto-detects uv/pipx)

curl -fsSL https://raw.githubusercontent.com/roo-oliv/unravel/main/install.sh | bash

Docker

docker run --rm -v "$(pwd):/repo" -e ANTHROPIC_API_KEY \
  ghcr.io/roo-oliv/unravel diff HEAD~1

Quick Start

# Analyze the last commit
unravel diff HEAD~1..HEAD

# Analyze a range
unravel diff main..feature-branch

# Analyze a GitHub PR (requires gh CLI)
unravel pr 42

# JSON output for piping
unravel diff HEAD~1..HEAD --json | jq .

# Compact tree view
unravel diff HEAD~1..HEAD --tree-only

Requirements

  • Python 3.12+
  • Git
  • Either the Claude CLI installed and authenticated, or an Anthropic API key
  • GitHub CLI (only for unravel pr)

Configuration

By default Unravel runs in auto mode: it uses the local Claude CLI if claude is on your PATH, and falls back to the Anthropic API otherwise. No extra configuration needed if you already have claude installed.

For the API path, set your key as an environment variable:

export ANTHROPIC_API_KEY=sk-ant-...

Backends

Mode When it's used What it needs
auto (default) Picks the first available backend claude on PATH or ANTHROPIC_API_KEY
claude-cli Always use the local Claude CLI claude binary, authenticated
claude-api Always hit the Claude API ANTHROPIC_API_KEY

Pin a specific backend any of these ways:

unravel conf set provider claude-api      # persistent
UNRAVEL_PROVIDER=claude-cli unravel ...   # one session
unravel diff HEAD~1 --provider claude-api # single invocation

CLI Options

Flag Description
--model, -m Model to use (default: claude-sonnet-4-6)
--provider, -p LLM provider: auto, claude-cli, or claude-api (default: auto)
--json, -j Output raw JSON
--tree-only, -t Compact tree view
--thinking-budget Extended thinking token budget (default: 10000)
--staged Analyze only staged changes (diff command only)
--remote Git remote name (pr command only, default: origin)

Environment Variables

Variable Description
ANTHROPIC_API_KEY API key for the Claude API (not needed with claude-cli backend)
OPENAI_API_KEY API key for OpenAI (future)
UNRAVEL_PROVIDER Default provider: auto, claude-cli, or claude-api
UNRAVEL_MODEL Default model
UNRAVEL_THINKING_BUDGET Default thinking budget

How It Works

  1. Extract — Pulls the diff from git or GitHub
  2. Parse — Breaks the diff into hunks using unidiff
  3. Analyze — Sends hunks to an LLM with a specialized prompt that decomposes changes into causal threads
  4. Validate — Checks all hunks are covered and thread dependencies are consistent
  5. Render — Displays threads in rich terminal output, JSON, or tree view

Multi-Provider Support

Unravel is designed to work with multiple LLM providers. Currently supported:

  • Claude CLI (claude-cli) — uses your local, authenticated claude binary
  • Claude API (claude-api) — direct HTTP via the Anthropic SDK, with extended thinking support

Planned: OpenAI, Gemini, and more. The provider abstraction is ready — contributions welcome.

Development

See CONTRIBUTING.md for the full local setup, testing conventions, code style, and release process. TL;DR:

git clone https://github.com/roo-oliv/unravel.git
cd unravel
uv sync --extra dev
uv run pytest
uv run ruff check .

License

AGPL-3.0-or-later

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unravel_review-0.3.0.tar.gz (158.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unravel_review-0.3.0-py3-none-any.whl (63.8 kB view details)

Uploaded Python 3

File details

Details for the file unravel_review-0.3.0.tar.gz.

File metadata

  • Download URL: unravel_review-0.3.0.tar.gz
  • Upload date:
  • Size: 158.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for unravel_review-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4a36fea0aa64d770726a0046ff52942b17f59b4d716774c287cfda7072fb6403
MD5 9a0cedfcc8668f3709bf7520da21b070
BLAKE2b-256 991d79e4a9fee36f385c08cc1cf7e8af0450a363be8e60b1076919c5e43c1ff6

See more details on using hashes here.

Provenance

The following attestation bundles were made for unravel_review-0.3.0.tar.gz:

Publisher: release.yml on roo-oliv/unravel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file unravel_review-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: unravel_review-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 63.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for unravel_review-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 daefc2aa6b7045e88aa42b87ac3523671c2bd27342ccb923b36e10fa6ce81764
MD5 a05cc9d1771f4a92864fd2b829e23004
BLAKE2b-256 309cb7108f87ee30dd58c4f349e8d4a594519ce51d810b5726a598affb120a0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for unravel_review-0.3.0-py3-none-any.whl:

Publisher: release.yml on roo-oliv/unravel

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page