CURe PR review sandboxes powered by ChunkHound and configurable LLM presets
Project description
CURe
CURe ("Code Under Review") is a CLI for running pull request reviews inside isolated sandboxes, with ChunkHound-backed code search/research and a configurable review agent on top.
It is for two audiences:
- human operators who want a repeatable way to hand PR review work to agents without letting them mutate the source checkout
- agentic sessions that need a clear, reusable bootstrap contract from a pristine environment
If you are an agent, or you want to install CURe as a reusable skill, start with SKILL.md.
Quickstart
For a human operator, the default kickoff is one sentence:
use <CURE_REPO_URL> to review <PR_URL>
Example:
use https://github.com/grzegorznowak/CURe to review https://github.com/chunkhound/chunkhound/pull/220
That should be enough to start the CURe system. The operator should not need to provide a local checkout path, a config path, or a handwritten bootstrap recipe in the primary flow.
If the operator asked to use CURe, the agent should bootstrap CURe and run cure. It should not do a manual review outside CURe.
What CURe Is For
Use CURe when you want to:
- review a GitHub PR from a disposable sandbox instead of the working repo
- standardize how humans and agents start, observe, resume, and clean review runs
- give an agent a single documented path from "nothing installed" to "review in progress"
CURe is not for:
- ad-hoc in-place repo review where the agent should work directly in the project checkout
- environments that cannot install tools or authenticate the required external systems
Agent Bootstrap From That Prompt
When the only instruction is use <CURE_REPO_URL> to review <PR_URL>, the agent should:
- Ensure the local environment has
git,curl, andca-certificates. On fresh Debian-like containers such asnode:latest, install them if they are missing. - Install
uvif it is missing. - For disposable agent bootstrap, prefer a temp XDG root instead of editing
~/.config/cureby hand:
tmp_root="$(mktemp -d)"
export XDG_CONFIG_HOME="$tmp_root/config"
export XDG_STATE_HOME="$tmp_root/state"
export XDG_CACHE_HOME="$tmp_root/cache"
- Bootstrap CURe from the public package instead of cloning the repo:
uvx --from cureview cure init
uvx --from cureview cure install
uvx --from cureview cure doctor --pr-url <PR_URL> --json
uvx --from cureview cure pr <PR_URL> --if-reviewed new
cure initwrites the non-secret local config files if they are missing:
<resolved config dir>/cure.toml
<resolved config dir>/chunkhound-base.json
- If
VOYAGE_API_KEYalready exists,cure initwrites the Voyage embedding model into the active ChunkHound base config and continues. - Otherwise, if
OPENAI_API_KEYalready exists,cure initwrites the OpenAI embedding model into the active ChunkHound base config and continues. - Otherwise, stop only after writing the exact local config path, the minimal snippet to add, the required env var name, and the rerun command.
For public github.com PRs, cure doctor --pr-url <PR_URL> --json is the readiness gate for cure pr, cure resume, cure followup, and cure zip. Jira remains optional for those flows, and gh authentication is optional when anonymous public fallback is sufficient. git is still required for PR checkout.
Advanced / Pre-Provisioned Environments
Persistent human install should use the public package:
uv tool install cureview
cure init
cure install
cure doctor --pr-url <PR_URL> --json
cure pr <PR_URL> --if-reviewed new
Teams that already manage a local CURe checkout can keep using that as a secondary local-development flow:
- keep CURe in a stable local path
- refresh it with
git -C <CURE_SOURCE> pull --ff-only - install it with
uv tool install /path/to/cure - keep any project-specific wrappers or config beside that checkout
Those details are secondary. The primary operator contract stays use <CURE_REPO_URL> to review <PR_URL>.
Minimal Config
Default config path:
~/.config/cure/cure.toml
By default cure init also writes:
~/.config/cure/chunkhound-base.json
If you need a disposable or non-default layout, set XDG_CONFIG_HOME, XDG_STATE_HOME, and XDG_CACHE_HOME before cure init, or pass --config, --sandbox-root, and --cache-root directly to cure init.
Minimal config written by cure init:
[paths]
sandbox_root = "/absolute/path/to/sandboxes"
cache_root = "/absolute/path/to/cache"
[review_intelligence]
tool_prompt_fragment = """
Preferred review-intelligence tools:
- Use GitHub MCP for PR context when available.
- Otherwise use gh CLI / gh api.
- Use any additional tools or sources that materially improve understanding of the code under review.
"""
[chunkhound]
base_config_path = "/absolute/path/to/chunkhound-base.json"
If an embedding key is already present in the environment, cure init adds the matching embedding block and continues. If no supported key is present, the agent should stop with an exact remediation recipe instead of improvising a manual review.
Core Commands
Initialize non-secret bootstrap files:
cure init
Start a fresh review:
cure pr <PR_URL> --if-reviewed new
Check status:
cure status <session_id|PR_URL> --json
Watch a run:
cure watch <session_id|PR_URL>
Resume or follow up:
cure resume <session_id|PR_URL>
cure followup <session_id>
Synthesize a final review:
cure zip <PR_URL>
Clean up old sessions:
cure clean closed --json
cure clean <session_id>
Show the machine-readable command catalog:
cure commands --json
What CURe Produces
CURe produces:
- a sandbox session directory
- review markdown artifacts
- optional follow-up and zip artifacts
- machine-readable session state for status/watch tooling
Review output uses two independent lenses:
- Business / Product Assessment uses product/ticket scope.
- Technical Assessment uses implementation scope.
Practical Premise
The value proposition is simple:
- humans should only need a short kickoff prompt
- agents bootstrap the review workflow instead of improvising one
- the project checkout stays untouched
- reviews become repeatable instead of prompt-by-prompt improvisation
Tests
Fast local check:
./selftest.sh
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cureview-0.1.2.tar.gz.
File metadata
- Download URL: cureview-0.1.2.tar.gz
- Upload date:
- Size: 292.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d7fa4f4ea2fc07c22236293a5da6ea66527362f3c07bfd2e97de8b6b3dc4aee5
|
|
| MD5 |
3c82cc826b99ac1b33aa246113cb1342
|
|
| BLAKE2b-256 |
6e2f5ef6063de236f3685256ed694817d3a6c3a37618e0dbd4ca7ca2839d18a1
|
Provenance
The following attestation bundles were made for cureview-0.1.2.tar.gz:
Publisher:
publish-package.yml on grzegorznowak/CURe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cureview-0.1.2.tar.gz -
Subject digest:
d7fa4f4ea2fc07c22236293a5da6ea66527362f3c07bfd2e97de8b6b3dc4aee5 - Sigstore transparency entry: 1132240704
- Sigstore integration time:
-
Permalink:
grzegorznowak/CURe@641ef2804bd70017d7ad98a7a73a53a8e9023077 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/grzegorznowak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-package.yml@641ef2804bd70017d7ad98a7a73a53a8e9023077 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file cureview-0.1.2-py3-none-any.whl.
File metadata
- Download URL: cureview-0.1.2-py3-none-any.whl
- Upload date:
- Size: 260.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5404387d695b0719761e432e33ec72b1b76609af181ccd22ce825d050fa247f
|
|
| MD5 |
787a4184c8ae897b95605bbc9deddc88
|
|
| BLAKE2b-256 |
653a4088f2300b925146fa44dec3bee8dfa467e6e0d0ba971e4779d4e7db8a1f
|
Provenance
The following attestation bundles were made for cureview-0.1.2-py3-none-any.whl:
Publisher:
publish-package.yml on grzegorznowak/CURe
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cureview-0.1.2-py3-none-any.whl -
Subject digest:
c5404387d695b0719761e432e33ec72b1b76609af181ccd22ce825d050fa247f - Sigstore transparency entry: 1132240755
- Sigstore integration time:
-
Permalink:
grzegorznowak/CURe@641ef2804bd70017d7ad98a7a73a53a8e9023077 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/grzegorznowak
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-package.yml@641ef2804bd70017d7ad98a7a73a53a8e9023077 -
Trigger Event:
workflow_dispatch
-
Statement type: